`
234390216
  • 浏览: 10194049 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:460820
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1771875
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1395479
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:393916
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:678251
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:529318
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1178772
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:462007
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:150167
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:66889
社区版块
存档分类
最新评论

几道面试题

阅读更多

 

1.如何用一条语句把一张表的数据插入到另一张数据库表中?

 

2.如何用一条语句把一张表的数据插入到另一张不存在的数据库表中?

 

3.有如下A、B两个表,如何将A表的数据查询出来,结果如B所示?

         A表:

姓名

科目

分数

张三

语文

60

李四

数学

65

张三

英语

70

张三

数学

75

李四

语文

80

李四

英语

68

 

         B表:

姓名

语文

数学

英语

总分

张三

 

 

 

 

李四

 

 

 

 

 

4.有如下几个类,我先运行TestA,再运行TestB,那么:

         class A:

public class A {
    public static int a = 6;
}

 

class TestA:

public class TestA {
    public static void main(String args[]) {
       A a = new A();
       a.a++;
       System.out.println(a.a);
    }
}

 

class TestB:

public class TestB {
    public static void main(String args[]) {
       A b = new A();
       System.out.println(b.a);
    }
}

 

(1)运行TestA的时候输出的结果是什么?

 

(2)运行TestB的时候输出的结果是什么?

 

(3)运行TestA和TestB的结果为什么相同或不相同?

 

5.有一个employee表,其结构如下所示:

empNo

int

empName

varchar2(20)

age

int

salary

number(7,2)

假设这个表的数据量很大,有几千万,请你用一条你觉得最有效率的SQL语句统计出如下四种类型的人数:

  • age>30 and salary>10000
  • age>30 and salary<10000
  • age<30 and salary>10000
  • age<30 and salary<10000

 6.写一个程序输出类似于“ABC”这样字符串的所有排列组合,如字符串“ABC”应当对应ABC、ACB、BAC、BCA、CBA和CAB。

 

 7.在try后面紧跟着一个return语句,那么之后的finally中包含的内容是否还会执行呢?如果执行是在return之前还是之后执行呢?


 解答:

 

1.如何用一条语句把一张表的数据插入到另一张数据库表中?

 

insert into tableA select * from tableB

 

2.如何用一条语句把一张表的数据插入到另一张不存在的数据库表中?

 

select * into tableB from tableA;
-------或者是下面这种写法
create table tableB as select * from tableA;

 

3.有如下A、B两个表,如何将A表的数据查询出来,结果如B所示?

         A表:

姓名

科目

分数

张三

语文

60

李四

数学

65

张三

英语

70

张三

数学

75

李四

语文

80

李四

英语

68

 

         B表:

姓名

语文

数学

英语

总分

张三

 

 

 

 

李四

 

 

 

 

这里我们用一个t_student表来表示A表,其建表语句如下所示:

create table t_student(name varchar2(4), course varchar2(4), score int);

那么这个时候要用一条SQL语句把A表的数据查询出B表的结果,我们可以如下定义我们的SQL语句:

select a.name 姓名,sum(case when course='语文' then score end) 语文,sum(cas
e when course='英语' then score end) 英语,sum(case when course='数学' then score
 end) 数学,b.total 总分 from t_student a, (select name, sum(score) total from t_
student group by name) b where a.name=b.name group by a.name,b.total order by a.
name desc;

 这条语句的总体思路是:

  • 先用分组的形式查询出每个人的总成绩
  • 用case when的形式把课程列分为多列,这样满足的那一列的成绩就是当前人当前课程的成绩,其他的成绩在当前行为空

姓名       语文       数学       英语

---- ---------- ---------- ----------

张三         60

张三                    75

张三                               70

李四                               68

李四         80

李四                    65

 

  • 把上述两个结果按照相同的姓名连接起来并按照姓名和总分分组,这样我们查询出来的结果就可以显示姓名和总分,那么我们没有按照成绩进行分组,那么当我们用分组语句的时候该如何查询出我们的成绩呢?这个时候sum就起作用了,根据之前分析的,每个人每门成绩只有一个有效值,其他的为空,所以我们对它进行汇总的结果还是其当前课程的成绩,这就可以满足我们在分组的情况下查询出对应的成绩。(在进行分组查询的时候,只能查询出对应的分组字段和统计字段)
  • 最后一步进行排序是为了按照“张三”,“李四”那样的顺序排列

 上面查询出来的结果会如下所示:

姓名       语文       英语       数学       总分

------ ------ ------- ------- --------

张三         60         70         75        205

李四         80         68         65        213

 

4.有如下几个类,我先运行TestA,再运行TestB,那么:

         class A:

public class A {
    public static int a = 6;
}

 

class TestA:

public class TestA {
    public static void main(String args[]) {
       A a = new A();
       a.a++;
       System.out.println(a.a);
    }
}

 

class TestB:

public class TestB {
    public static void main(String args[]) {
       A b = new A();
       System.out.println(b.a);
    }
}

 

(1)运行TestA的时候输出的结果是什么?

 7

(2)运行TestB的时候输出的结果是什么?

 6

(3)运行TestA和TestB的结果为什么相同或不相同?

 虽然变量a是类A的静态变量,但是TestA和TestB是两个不同的应用程序,TestA中改变的变量a的值不会影响到TestB中的结果。

 

 

5.有一个employee表,其结构如下所示:

 

empNo

int

empName

varchar2(20)

age

int

salary

number(7,2)

 

假设这个表的数据量很大,有几千万条数据,请你用一条你觉得最有效率的SQL语句统计出如下四种类型的人数:

  • age>30 and salary>10000
  • age>30 and salary<10000
  • age<30 and salary>10000
  • age<30 and salary<10000

我的思路:

        用case when来进行筛选,用count来进行统计,这样整个数据量只需要统计一遍。 

查询语句: 

select count(case when age>30 and salary>10000 then empNo end) type1, 
count(case when age>30 and salary<10000 then empNo end) type2, 
count(case when age<30 and salary>10000 then empNo end) type3, 
count(case when age<30 and salary<10000 then empNo end) type4 from employee;

 

 

6.写一个程序输出类似于“ABC”这样字符串的所有排列组合,如字符串“ABC”应当对应ABC、ACB、BAC、BCA、CBA和CAB。

        

        我的思想是用递归来处理,我们要把字符串当成一个一个的字符来处理。比如字符串ABC,我们可以先拿出来一个放在前面,其后则跟着另外两个,也就是说字符串ABC的排列应该是字符A+字符串BC的排列、字符B+字符串AC的排列和字符C+字符AB的排列。然后字符BC的排列又应该是字符B和字符串C的排列,就是这样来进行一个递归的操作。具体代码如下所示:

 

	public void printStr(String str) {
		int len = str.length();
		for (int i=0; i<len; i++) {
			String s = String.valueOf(str.charAt(i));
			StringBuffer buffer = new StringBuffer(str);
			buffer.deleteCharAt(i);
			System.out.println(s + buffer);
			printStr(s, buffer.toString());
		}
	}
	
	public void printStr(String start, String str) {
		int len = str.length();
		for (int i=0; i<len; i++) {
			String s = String.valueOf(str.charAt(i));
			StringBuffer buffer = new StringBuffer(str);
			buffer.deleteCharAt(i);
			if (i != 0)
				System.out.println(start + s + buffer);
			printStr(start + s, buffer.toString());
		}
	}

 

7.在try后面紧跟着一个return语句,那么之后的finally中包含的语句是否还会执行呢?如果执行的话是在return之前还是之后呢?

        这里我们先来看一下以下程序:

public class Test {

	public static void main(String args[]) {
		System.out.println(doTryReturn());
	}
	
	private static String doTryReturn() {
		try {
			return doTry();
		} finally {
			doFinally();
		}
	}
	
	private static String doTry() {
		System.out.println("invoke doTry() -------");
		return "doTry";
	}
	
	private static String doFinally() {
		System.out.println("invoke doFinally() -------");
		return "doFinally";
	}
	
}

         运行上述代码后我们可以看到控制台输出如下结果:

 

          这说明在try语句中return之后finally中的语句还是执行了,而且是在return之后执行的。在try里面执行到return之后程序就不再往try以下的语句执行了,而是保存当前的返回结果,接着判断是否存在finally语句,如果存在则接着执行finally语句块,如果finally语句块中同样包含return语句的话,将使用finally中的return结果取代try中的return结果,否则将返回try中的return结果。我们可以看到在上述代码中finally语句块中是没有return语句的,这个时候是返回的doTry。现在我们来做一个测试,我们把finally中的程序改为return doFinally(),即如下:

public class Test {

	public static void main(String args[]) {
		System.out.println(doTryReturn());
	}
	
	private static String doTryReturn() {
		try {
			return doTry();
		} finally {
			return doFinally();
		}
	}
	
	private static String doTry() {
		System.out.println("invoke doTry() -------");
		return "doTry";
	}
	
	private static String doFinally() {
		System.out.println("invoke doFinally() -------");
		return "doFinally";
	}
	
}

           接着我们再运行上述程序,这个时候控制台将输出如下内容:



           这说明确实如我们上面所说,finally存在return时返回的是finally中的return结果。

 

 

 

 

 

  • 大小: 1.2 KB
  • 大小: 1.2 KB
48
6
分享到:
评论
23 楼 xingqiliudehuanghun 2013-03-20  
nedzhong 写道

请问你如何分页? 数据特别多的时候 你要把所有数据加载到内存在分页吗?

第三题考的就是行转列,跟分页有什么关系?
22 楼 nedzhong 2013-03-08  
xingqiliudehuanghun 写道
第二题本身就是扯淡的问题,除了卖弄技巧之外实际工作中一点用处都没有。
第三题不错很有实用价值,以前做Java项目的时候常见这种需求,但楼主的
做法不可取,效率太低而且没有扩展性,数据库是用来存储和检索数据的不是
你的内存,不能什么事情都让数据库来做。借助两个List<String>,和一个
Map<String, Map<String, String>>就可以很轻松的解决这个问题。 一个
List存储所有出现的名称,一个list存储所有出现的科目,Map用来存储用户
各个科目的成绩,然后简单的便利一下就解决了。

xingqiliudehuanghun 写道
第二题本身就是扯淡的问题,除了卖弄技巧之外实际工作中一点用处都没有。
第三题不错很有实用价值,以前做Java项目的时候常见这种需求,但楼主的
做法不可取,效率太低而且没有扩展性,数据库是用来存储和检索数据的不是
你的内存,不能什么事情都让数据库来做。借助两个List<String>,和一个
Map<String, Map<String, String>>就可以很轻松的解决这个问题。 一个
List存储所有出现的名称,一个list存储所有出现的科目,Map用来存储用户
各个科目的成绩,然后简单的便利一下就解决了。

xingqiliudehuanghun 写道
第二题本身就是扯淡的问题,除了卖弄技巧之外实际工作中一点用处都没有。
第三题不错很有实用价值,以前做Java项目的时候常见这种需求,但楼主的
做法不可取,效率太低而且没有扩展性,数据库是用来存储和检索数据的不是
你的内存,不能什么事情都让数据库来做。借助两个List<String>,和一个
Map<String, Map<String, String>>就可以很轻松的解决这个问题。 一个
List存储所有出现的名称,一个list存储所有出现的科目,Map用来存储用户
各个科目的成绩,然后简单的便利一下就解决了。



请问你如何分页? 数据特别多的时候 你要把所有数据加载到内存在分页吗?
21 楼 zhang_sun 2013-03-07  
niuzehao 写道
个人觉得第三题应该是用行列转换来做的,楼主的方法只是适合你已经明确知道title是什么
兄台,请问行列转换该如何实现?请赐教,学习中...!
20 楼 www314599782 2013-03-06  
面试题都很不错
19 楼 崔志军 2013-03-06  
我毕业的时候的笔试题和这差不多
18 楼 niuzehao 2013-03-06  
个人觉得第三题应该是用行列转换来做的,楼主的方法只是适合你已经明确知道title是什么
17 楼 zm9913 2013-03-06  
select t.name ,sum(t.score),(select t1.score from t_student t1 where t1.name=t.name and t1.course='语文') 语文,
(select t1.score from t_student t1 where t1.name=t.name and t1.course='数学') 数学,
(select t1.score from t_student t1 where t1.name=t.name and t1.course='英语') 英语
from t_student t group by t.nam
16 楼 ifox 2013-03-06  
是类A的静态变量,但是TestA和TestB是两个不同的应用程序,TestA中改变的变量a的值不会影响到TestB中的结果。
234390216 写道
tyyh08t1003 写道
我有些不明白最后一个题 他们虽然是不同的对象,但是静态变量在内存里只有一个地址,为什么第一个类改变了 不影响第二个类 的使用


因为它们分属不同的进程,也可以说是出于不同的JVM环境中,在这两个环境中静态变量a都有一个地址,但它们不是同一个地址,所以一个改变对于另外一个是没有影响的。

哥们讲解的不错。
15 楼 234390216 2013-03-05  
tyyh08t1003 写道
我有些不明白最后一个题 他们虽然是不同的对象,但是静态变量在内存里只有一个地址,为什么第一个类改变了 不影响第二个类 的使用


因为它们分属不同的进程,也可以说是出于不同的JVM环境中,在这两个环境中静态变量a都有一个地址,但它们不是同一个地址,所以一个改变对于另外一个是没有影响的。
14 楼 tyyh08t1003 2013-03-05  
我有些不明白最后一个题 他们虽然是不同的对象,但是静态变量在内存里只有一个地址,为什么第一个类改变了 不影响第二个类 的使用
13 楼 zhengcong 2013-03-05  
顶,不错!!!
12 楼 在世界的中心呼喚愛 2013-03-05  
xingqiliudehuanghun 写道
第二题本身就是扯淡的问题,除了卖弄技巧之外实际工作中一点用处都没有。
第三题不错很有实用价值,以前做Java项目的时候常见这种需求,但楼主的
做法不可取,效率太低而且没有扩展性,数据库是用来存储和检索数据的不是
你的内存,不能什么事情都让数据库来做。借助两个List<String>,和一个
Map<String, Map<String, String>>就可以很轻松的解决这个问题。 一个
List存储所有出现的名称,一个list存储所有出现的科目,Map用来存储用户
各个科目的成绩,然后简单的便利一下就解决了。


这个可以替换行列转换?
11 楼 niweiwei 2013-03-05  
必须支持一下,对于面试太有用了,尤其是最后一道题
10 楼 tntxia 2013-03-05  
谁说第二道题是扯谈的。我们经常有这种报表的格式。
9 楼 xingqiliudehuanghun 2013-03-05  
第二题本身就是扯淡的问题,除了卖弄技巧之外实际工作中一点用处都没有。
第三题不错很有实用价值,以前做Java项目的时候常见这种需求,但楼主的
做法不可取,效率太低而且没有扩展性,数据库是用来存储和检索数据的不是
你的内存,不能什么事情都让数据库来做。借助两个List<String>,和一个
Map<String, Map<String, String>>就可以很轻松的解决这个问题。 一个
List存储所有出现的名称,一个list存储所有出现的科目,Map用来存储用户
各个科目的成绩,然后简单的便利一下就解决了。
8 楼 WODE890502 2013-03-04  
q
7 楼 商人shang 2013-03-04  
234390216 写道
商人shang 写道
还是粗心大意,没有仔细审题,被最后一个题坑了

我第一次做的时候,由于做的比较快也没有多想,也被最后一个题坑了。

所以,将来得把这个改一改啊
6 楼 234390216 2013-03-04  
jsjzhou 写道
3.
SELECT  student_name,
sum(case when course='Chinese' then score end) Chinese,
sum(case when course='English' then score end) English,
sum(case when course='Math' then score end) Math,
sum(score) total_socre
   FROM A
   GROUP by student_name

4. 因为TestA和TestB是在两个不同的进程运行的. 我个人觉得用"进程"比用"程序"更精确些.



这些面试题估计都是小公司考下应届生的.
我毕业时遇到的面试题大致是这样的:
(1) Java 的多态是怎么实现的, 也就是实现原理.
(2) Java 内存分区是什么样子, GC是怎么回事.
(3) Java 内存模型是什么. 熟悉JSR133吗?
(4) Java的线程池实现原理是什么?

....


这种想法答第三题还是挺不错的。
5 楼 freezingsky 2013-03-03  
最后一道题确实坑人,一不留意就中招了
4 楼 jsjzhou 2013-03-03  
3.
SELECT  student_name,
sum(case when course='Chinese' then score end) Chinese,
sum(case when course='English' then score end) English,
sum(case when course='Math' then score end) Math,
sum(score) total_socre
   FROM A
   GROUP by student_name

4. 因为TestA和TestB是在两个不同的进程运行的. 我个人觉得用"进程"比用"程序"更精确些.



这些面试题估计都是小公司考下应届生的.
我毕业时遇到的面试题大致是这样的:
(1) Java 的多态是怎么实现的, 也就是实现原理.
(2) Java 内存分区是什么样子, GC是怎么回事.
(3) Java 内存模型是什么. 熟悉JSR133吗?
(4) Java的线程池实现原理是什么?

....

相关推荐

    【分享面试题一】用友面试时出的几道面试题

    【分享面试题一】用友面试时出的几道面试题

    牛客大数据面试题集锦+答案,共523道,46W+字。大厂必备

    Hadoop面试题:100道 Zookeeper面试题:21道 Hive面试题:47道 Flume面试题:11道 Kafka面试题:59到 HBase面试题:36道 Spark面试题:97道 Flink面试题:40道 数仓面试题:25道 综合面试题:43道 数据库(MySQL)...

    内存详解(附有几道面试题)

    内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能, 更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不

    java面试题20道java面试题20道

    java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java...

    java面试题18道java面试题18道

    java面试题java面试题18道java面试题18道java面试题18道java面试题java面试题18道java面试题18道java面试题18道java面试题java面试题18道java面试题18道java面试题18道java面试题java面试题18道java面试题18道java...

    分享mysql几道面试题.pdf

    题目类型:MySQL基本知识面试题 难度:中等偏容易 覆盖范围:适用于参加MySQL面试的人都了解一下,可能都会闻到,相对还是比较基础的内容。

    Python面试题及答案共70道.docx

    Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python...

    Python面试题及答案共55道.docx

    Python面试题及答案共55道Python面试题及答案共55道Python面试题及答案共55道Python面试题及答案共55道Python面试题及答案共55道Python面试题及答案共55道Python面试题及答案共55道Python面试题及答案共55道Python...

    Python面试题及答案共50道.docx

    Python面试题及答案共50道Python面试题及答案共50道Python面试题及答案共50道Python面试题及答案共50道Python面试题及答案共50道Python面试题及答案共50道Python面试题及答案共50道Python面试题及答案共50道Python...

    Python道面试题及答案共48道.docx

    Python道面试题及答案共48道.docxPython道面试题及答案共48道.docxPython道面试题及答案共48道.docxPython道面试题及答案共48道.docxPython道面试题及答案共48道.docxPython道面试题及答案共48道.docxPython道面试题...

    Python道面试题及答案共50道.docx

    Python道面试题及答案共50道.docxPython道面试题及答案共50道.docxPython道面试题及答案共50道.docxPython道面试题及答案共50道.docxPython道面试题及答案共50道.docxPython道面试题及答案共50道.docxPython道面试题...

    Vue道面试题及答案共39道.docx

    Vue道面试题及答案共39道.docxVue道面试题及答案共39道.docxVue道面试题及答案共39道.docxVue道面试题及答案共39道.docxVue道面试题及答案共39道.docxVue道面试题及答案共39道.docxVue道面试题及答案共39道.docxVue...

    10万字208道Java经典面试题总结(附答案).pdf

    10万字208道Java经典面试题总结(附答案).pdf 10万字208道Java经典面试题总结(附答案).pdf 10万字208道Java经典面试题总结(附答案).pdf 10万字208道Java经典面试题总结(附答案).pdf 10万字208道Java经典面试题总结(附...

    经典mysql面试题20道经典mysql面试题20道

    经典mysql面试题20道经典mysql面试题20道经典mysql面试题20道经典mysql面试题20道经典mysql面试题20道经典mysql面试题20道经典mysql面试题20道经典mysql面试题20道经典mysql面试题20道经典mysql面试题20道经典mysql...

    Java17道面试题及答案

    Java17道面试题及答案

    ABAP 100 道面试题 .doc

    ABAP 100 道面试题 .docABAP 100 道面试题 .docABAP 100 道面试题 .docABAP 100 道面试题 .docABAP 100 道面试题 .doc

    2023最新100道MySQL面试题( 附答案解析)

    2023最新100道MySQL面试题( 附答案解析)2023最新100道MySQL面试题( 附答案解析)2023最新100道MySQL面试题( 附答案解析)2023最新100道MySQL面试题( 附答案解析) 2023最新100道MySQL面试题( 附答案解析) ...

    关于数组的几道面试题1

    }求两个有序数组的共同元素给定两个含有n个元素的有序(非降序)整型数组a和b,求出其共同元素,比如a = 0, 1, 2, 3, 4b = 1, 3, 5, 7

    java100道面试题

    java100道面试题

    C# 130道 面试题

    C# 130道 面试题。。 迈向成功之路

Global site tag (gtag.js) - Google Analytics