Java 软件高级工程师笔试题正则表达式
【智力部分】(30分)算法
1. 烧一根不均匀的绳要用一个小时,如何用它来判断半个小时?(5分)sql
两头同时烧编程
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水。session
第三步:再用3L水桶盛满水所有倒入5L的水桶,4L水就称出来了。数据结构
4. 一只蜗牛从井底爬到井口,天天白天蜗牛要睡觉,晚上才出来活动,一个晚上蜗牛能够向上爬3尺,可是白天睡觉的时候会往下滑2尺,井深10尺,问蜗牛几天能够爬出来?(5分)
8天。
前七天是(3-1)*7 =7
第八天晚上又爬了3尺,这时已经到井口了。在井口睡觉想滑也滑不下去了。
5. 有一种细菌,通过一分钟分裂为2个,再过一分钟,分裂为4个,这样,将一个细菌放在一个瓶子里面,一个小时后瓶子被细菌充满了。如今假设一开始放入瓶中的为两个细菌,那么到充满瓶子要多长的时间?(10分)
59分钟。
一个放了一个细菌的瓶子通过一分钟分裂,就有两个细菌了。第二个瓶子直接就有了两个细菌,也就至关于调过了第一个瓶子在第一分钟的状况了。之后的状况就彻底一致了,因此是59分钟。
【专业部分】(70分)
1. 简述一下面向对象的特征,并举例说明你对面向对象的理解?(5分)
面向对象是基于万物皆对象这个哲学观点,把一个帝乡抽象成类,具体就是你吧一个对象的静态特征和动态特征抽象成属性和方法,也就是把一类事务的算法和数据结构封装在一个类之中,程序就是多个对象和互相间的通讯组成的。
面向对象具备封装性,继承性,多态性。封装隐蔽了对象内部不须要暴漏的细节,似的内部细节的变更跟外界脱离,只依靠接口进行通讯。封装性下降了编程的复杂性。经过继承,使得新建一个类变得容易,一个类从派生类哪里得到其非私有的方法和公用属性的繁琐工做交给了编译器。而继承和实现接口和运行时的类型标定机制所产生的多态,使得不一样的类所产生的对象可以对相同的消息作出不一样的反映,记得提升了代码的通用性。
总之,面向对象的特性提升了大型程序的重用性和可维护性。
2. ArrayList和HsahSet的区别,HashMap和Hashtable的区别?(5分)
ArrayList和HashSet的区别:
ArrayList是一组有序的集合,存放的是对象的引用,而不是对象自己。存放的对象是能够重复的。
HashSet存放的对象是不可重复的。
HashMap和Hashtable的区别:
3. 线程同步的关键字是什么?sleep() 和 wait() 有什么区别?怎么唤醒wait()中止的线程?(5分)
线程同步的关键字:synchronized
Sleep()和Wait()的区别:
Sleep不让出系统资源;wait是进入线程等待池等待,让出系统资源,其余线程能够占用cpu,且须要notify,notifyAlll来唤醒等待池中的线程。
4. 列举你在项目中经常使用的设计模式(伪代码或类图),并说明每种设计模式的具体应用场景。(5分)
单例模式
Public class Singleton{
private static volatile Singleton singleton = null;
private Singleton(){}
public static Singleton getSingleton(){
if(singleton == null){
synchronized(Singleton.class){
if(singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
}
多线程中屡次获取某个对象的实例,而没必要每次都去new。
4. Spring中事务管理支持哪几种方式以及每种方式的具体使用方法。(5分)
实现方式两种:
编码方式;
声明式事务管理方式。
声明式事务管理是经过AOP技术实现的,实质就是:在方法执行先后进行拦截,而后在目标方法开始以前建立并加入事务,执行完成目标方法后根据执行状况提交后回滚事务。
声明式事务管理有两种方式:基于XML配置文件(拦截器 AOP),经过标签@Transaction注解
另外一种答案:
1.每一个bead都有一个事务代理
一级缓存:session级别的缓存,session关闭后,缓存就没有了
二级缓存:sessionFactory级别的缓存,它缓存的是对象
查询缓存:查询缓存也是sessionFactory级别的缓存,它缓存的是sql语句
通常二级缓存要和查询缓存配合使用,避免N+1的问题。更建议使用mamcatched单独作缓存。
5. 至少写出一种11位手机号码的正则表达式。(5分)
^[1][358][0-9]{9}$
6. 用简短的代码实现字符串“s tr in g”到“s tr in g”转换。即将多个空格转换为一个空格(5分)
String s = “s tr in g”;
S=s.replaceAll(“ +”,” ”);
7. 使用Socket编写一个程序,客户端向服务器端发送请求(发送字符串便可),服务端接收后发送反馈信息.(10分)
TCP协议
网上例子不少 本身找。代码过长
8. 用SQL语句实现Oracle分页查询。(10分)
Select * from (select ROWNUM rn,t.* from tableName T where t.rn <=40) TT where tt.rn >=10
Select * from tableName where userID limit 0,20;
select a.x from aa a where not exists (select 1 from bb b where a.x = b.x)