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

几道面试题

阅读更多

 

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的线程池实现原理是什么?

....

相关推荐

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

    本文将对用友面试时出的几道面试题进行解释和总结,涵盖了Java集合、MVC模式、SQL Server和Oracle数据库、页面传值等多个方面的知识点。 1. Hashtable 和 HashMap 的区别 Hashtable 和 HashMap 都是Java中的集合类...

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

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

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

    本文将深入探讨内存的几个关键知识点,同时提供一些面试中可能遇到的相关问题。 首先,我们要了解内存的划分。在C++中,内存主要分为栈内存(Stack)、堆内存(Heap)、静态存储区(Static Storage)和常量存储区...

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

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

    分享mysql几道面试题.pdf

    "MySQL 面试题知识点总结" MySQL 是一种关系型数据库管理系统,以下是 MySQL 面试题中涵盖的一些知识点: 日志类型 MySQL 中有五种日志类型: * 错误日志(-log-err):记录启动、运行、停止 MySQL 时出现的信息...

    2023最新JAVA面试题集

    大数据面试题 100道 多线程面试59题(含答案) 最新JAVA面试题总结之基础/框架/数据库/JavaWeb/Redis BIO,NIO,AIO,Netty面试题 35道 BTA 常问的 Java基础39道常见面试题及详细答案 Dubbo面试题 47道 ElasticSearch...

    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...

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

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

    java100道面试题

    java100道面试题

    一线大厂美团Java 岗 154 道面试题.zip

    一线大厂美团Java 岗 154 道面试题.zip一线大厂美团Java 岗 154 道面试题.zip一线大厂美团Java 岗 154 道面试题.zip一线大厂美团Java 岗 154 道面试题.zip一线大厂美团Java 岗 154 道面试题.zip一线大厂美团Java 岗 ...

    几道百度面试题1

    以下将详细讨论文中的几道面试题,并提供相应的解题思路。 1. 大整数相乘 当计算机无法直接处理超出其表示范围的大整数乘法时,一种常见方法是将大整数转换为字符串,然后将其每一位与另一个大整数的每一位相乘,...

    ABAP_100_道面试题

    ABAP 100 道面试题 ABAP 是 SAP 公司开发的一种高级编程语言,用于开发 SAP 系统中的应用程序。本文总结了 ABAP 100 道面试题,涵盖了 ABAP 程序的结构、 Field Symbols 和 Field Groups、BDC 程序、Batch Input ...

    java100道常见面试题

    java 面试宝典其中包含了100多道常见的面试题,及n道笔试题。

    Java 最常见200道面试题.pdf

    首先,文档描述了一个名为“Java 最常见200道面试题.pdf”的文件,它是一个集合了互联网公司面试题的集锦,主要针对后台、客户端、测试、数据、算法等职位。文档强调了这些面试题对于准备面试的程序员具有很高的价值...

    238道大厂前端高频面试题.pdf

    238道大厂前端高频面试题

    Java精选面试题,题库非常全面,累计 20000+ 道面试题

    2022年面试题,Java基础面试题、JVM面试题、并发编程与线程面试题、设计模式面试题、SpringBoot面试题、SpringCloud面试题、MyBatis面试题、Redis面试题等。...## 20000+ 道,各类型面试题集合,索引-直通车

    嵌入式研发工程师笔试试题/重解几道华为经典C语言面试题

    嵌入式研发工程师笔试试题/重解几道华为经典C语言面试题 本文档主要围绕C语言面试题展开,涵盖了字符串、字符数组、strcpy函数、strlen函数、static变量、auto变量、switch语句等多个知识点,旨在帮助读者巩固C语言...

    170道面试题

    java面试题!包括各种方面,有题,有答案,希望能帮到各位!

    700道面试题.zip

    这700道面试题涵盖了Java的基础、进阶及高级知识,旨在帮助求职者准备全面的Java面试。以下是一些关键的知识点: 1. **Java基础** - 类与对象:理解面向对象编程的基本概念,包括封装、继承和多态。 - 引用类型:...

Global site tag (gtag.js) - Google Analytics