Java 软件高级工程师笔试题答案


【智力部分】

1. 烧一根不均匀的绳要用一个小时,如何用它来判断半个小时?(5分)

两头同时烧

2. 4,4,10,10,加减乘除,怎么出24点?四个数字分别只能用一次(5分)

(10*10-4)/4

3. 如果你有无穷多的水,一个容积为3L的和5L的提桶,你如何准确称出 4L的水?(5分)

第一步:向5L的通中放两次3L水,这时3L水桶剩1L水。

第二步:将3L水桶中的1L水倒入5L的水桶中,这时5L的水桶中有1L水。

第三步:再用3L水桶盛满水全部倒入5L的水桶,4L水就称出来了。

4. 一只蜗牛从井底爬到井口,每天白天蜗牛要睡觉,晚上才出来活动,一个晚上蜗牛可以向上爬3尺,但是白天睡觉的时候会往下滑2尺,井深10尺,问蜗牛几天可以爬出来?(5分)

8天。

前七天是(3-1)*7 =7

第八天晚上又爬了3尺,这时已经到井口了。在井口睡觉想滑也滑不下去了。

5. 有一种细菌,经过一分钟分裂为2个,再过一分钟,分裂为4个,这样,将一个细菌放在一个瓶子里面,一个小时后瓶子被细菌充满了。现在假设一开始放入瓶中的为两个细菌,那么到充满瓶子要多长的时间?(10分)

59分钟。

一个放了一个细菌的瓶子经过一分钟分裂,就有两个细菌了。第二个瓶子直接就有了两个细菌,也就相当于调过了第一个瓶子在第一分钟的情况了。以后的情况就完全一致了,所以是59分钟。

【专业部分】

1. 简述一下面向对象的特征,并举例说明你对面向对象的理解?(5分)

面向对象是基于万物皆对象这个哲学观点,把一个帝乡抽象成类,具体就是你吧一个对象的静态特征和动态特征抽象成属性和方法,也就是把一类事务的算法和数据结构封装在一个类之中,程序就是多个对象和互相间的通信组成的2017年java高级程序员面试题2017年java高级程序员面试题。

面向对象具有封装性,继承性,多态性。封装隐蔽了对象内部不需要暴漏的细节,似的内部细节的变动跟外界脱离,只依靠接口进行通信。封装性降低了编程的复杂性。通过继承,使得新建一个类变得容易,一个类从派生类哪里获得其非私有的方法和公用属性的繁琐工作交给了编译器。而继承和实现接口和运行时的类型标定机制所产生的多态,使得不同的类所产生的对象能够对相同的消息做出不同的反映,记得提高了代码的通用性。

总之,面向对象的特性提高了大型程序的重用性和可维护性。

2. ArrayList和HsahSet的区别,HashMap和Hashtable的区别?(5分)

ArrayList和HashSet的区别:

ArrayList是一组有序的集合,存放的是对象的引用,而不是对象本身。存放的对象是可以重复的

HashSet存放的对象是不可重复的。

HashMap和Hashtable的区别:

继承的类不同

HashTable是线程安全的,而HashMap是非线程安全的。

HashMap的key,value是允许null的,而HashTable不允许。且HashMap效率高。

3. 线程同步的关键字是什么?sleep() 和 wait() 有什么区别?怎么唤醒wait()停止的线程?(5分)

线程同步的关键字:synchronized

Sleep()和Wait()的区别:

父类不同Sleep()来自Thread类,wait()来自Objcet类

最主要的是sleep()方法没有释放锁,而wait方法释放了所,使得其他线程可以使用同步空值快或者方法。

Sleep不让出系统资源;wait是进入线程等待池等待,让出系统资源,其他线程可以占用cpu,且需要notify,notifyAlll来唤醒等待池中的线程。

使用范围:wait,notify和notifyAll只能在同步空值方法或者同步控制块里使用,而sleep可以在任何地方使用

Sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

4,如何理解多态?类与对象的区别是什么?

(1) 如何理解多态:多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。又比如,同样的选择编辑-粘贴操作,在字处理程序和绘图程序中有不同的效果。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

(2) 类与对象的区别是什么:

1)        类:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法);

2)        对象:对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象

3)        类是对象的模板,对象是类的实例

5,如何理解Object.hashCode()方法?,它的作用是什么?

(1)      如何理解:

①     HashCode的存在主要是为了查找的快捷性,HashCode是用来在散列存储结构中确定对象的存储地址的

②     如果两个对象equals相等,那么这两个对象的HashCode一定也相同

③     如果对象的equals方法被重写,那么对象的HashCode方法也尽量重写

④     如果两个对象的HashCode相同,不代表两个对象就相同,只能说明这两个对象在散列存储结构中,存放于同一个位置

(2)      作用:用于对比两个对象是否相等

6,Collections类的作用?Arrays类的作用?

(1)      Collections类的作用:是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作

(2)     Arrays类的作用:是一个实现对数组操作的工具类,包括了各种各样的静态方法,可以实现数组的排序和查找、数组的比较和对数组增加元素,数组的复制和将数组转换成字符串等功能。这些方法都有对所有基本类型的重载方法

7,问号,星号,加号在正则中分别表示什么?成对的小括号在正则表达式里的作用是什么?

(1)      问号:匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?

(2)      星号:匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *

(3)      加好:匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +

(4)      成对的小括号:标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ()

8,JSP文件与JAVA文件的区别

(1)     JSP文件:JSP算是JAVA一种技术,用在网页编程上,是一种动态网页技术标准

(2)      JAVA文件:java是一种语言类似于C语言等的编程语言

9,forward 和redirect的区别

(1)      forward

①     是服务器内部的重定向,服务器直接访问目标地址的 url网址,把里面的东西读取出来,但是客户端并不知道,因此用forward的话,客户端浏览器的网址是不会发生变化的。 

②     关于request: 由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用

(2)      redirect

①     是客户端的重定向,是完全的跳转。即服务器返回的一个url给客户端浏览器,然后客户端浏览器会重新发送一次请求,到新的url里面,因此浏览器中显示的url网址会发生变化。

因为这种方式比forward多了一次网络请求,因此效率会低于f

13. 列举你在项目中常用的设计模式(伪代码或类图),并说明每种设计模式的具体应用场景。(5分)

单例模式

Public class Singleton{

private static volatileSingleton singleton = null;

private Singleton(){}

public static SingletongetSingleton(){

if(singleton == null){

synchronized(Singleton.class){

if(singleton == null){

singleton = newSingleton();

}

}

}

return singleton;

}

}

多线程中多次获取某个对象的实例,而不必每次都去new

14. Spring中事务管理支持哪几种方式以及每种方式的具体使用方法。(5分)

实现方式两种:

编码方式;

声明式事务管理方式。

声明式事务管理是通过AOP技术实现的,实质就是:在方法执行前后进行拦截,然后在目标方法开始之前创建并加入事务,执行完成目标方法后根据执行情况提交后回滚事务。

声明式事务管理有两种方式:基于XML配置文件(拦截器 AOP),通过标签@Transaction注解

另一种答案:

1.每个bead都有一个事务代理

Hibernate的缓存等级及其特点(5分)

一级缓存:session级别的缓存,session关闭后,缓存就没有了

二级缓存:sessionFactory级别的缓存,它缓存的是对象

查询缓存:查询缓存也是sessionFactory级别的缓存,它缓存的是sql语句

一般二级缓存要和查询缓存配合使用,避免N+1的问题更建议使用mamcatched单独做缓存

 

16. 至少写出一种11位手机号码的正则表达式。(5分)

^[1][358][0-9]{9}$

17. 用简短的代码实现字符串“s tr in g”到“s tr in g”转换。即将多个空格转换为一个空格(5分)

String s = “s tr in g”;

S=s.replaceAll(“ +”,” ”);

18. 使用Socket编写一个程序,客户端向服务器端发送请求(发送字符串即可),服务端接收后发送反馈信息.(10分)

TCP协议

网上例子很多 自己找。代码过长

19. 用SQL语句实现Oracle分页查询。(10分)

Select * from (selectROWNUM rn,t.* from tableName T where t.rn <=40) TT where tt.rn >=10

Select * from tableNamewhere userID limit 0,20;

20.aa,bb表都有20个字段,且记录数量都很大,aa,bb表的X字段(非空)上有索引, 请用SQL列出aa表里面存在的X在bb表不存在的X的值,请写出认为最快的语句,并解译原因。(10分)

select a.x from aa awhere not exists (select 1 from bb b where a.x = b.x)

 

 

 

 

 

 


你可能感兴趣的:(Java 软件高级工程师笔试题答案)