第一站: 广州凡客
笔试题
简答题
1.cookie和session的区别和联系
- cookie存储在客户端,session存储在服务器端
- 客户端第一次请求session时,服务器会生成一个包含sessionid的cookie返回,后面客户端再次请求session时,会将这个cookie发送回服务器端,服务器端根据这个cookie中的sessionid找到对应的session。简单来说,就是session依赖于cookie。
2.synchronized和Lock的区别
- synchronized 的操作都是隐式操作,Lock 的操作都是显式操作,即什么时候上锁什么时候释放锁都能直观地看见。
- synchronized 属于java关键字,其操作属于jvm层次,Lock 是类层次的操作。
- synchronized可以自动释放锁,Lock需要在finally代码块中手动释放否则容易死锁。
3.String、StringBuffer和StringBuilder的区别?
- String 属于final 修饰,一但创建就不能够改变。
- StringBuffer 和 StringBuilder 都可以改变。
- StringBuffer 线程安全,StringBuilder 线程不安全
4.ArrayList和LinkedList的区别?
- ArrayList 基于数组实现,LinkedList 基于双向链表实现
- ArrayList 增删慢查找快,LinkedList 增删慢查找慢
- ArrayList 有容量的限制,LinkedList没有(扩展到ArrayList 的扩容机制)
5.基本数据类型有哪些?它们的范围?默认取值?
有八种,范围有大到小为:
范围 | 默认取值 | |
---|---|---|
byte | -128~127 | 0 |
short | -2^15 ~ 2^15-1 | 0 |
int | -2^31 ~ 2^31-1 | 0 |
long | -2^63 ~ 2^63-1 | 0 |
float | 0.0f | |
double | 0.0d | |
char | 0(对应字符) | |
boolean | false |
6.doGet() 和 doPost()有什么区别
1.表单的提交方法为post时调用doPost()方法,get方法时调用doGet()方法
7.如何输出没有乱码的字符?
(这道题有点意义不明)我写的是response.setCharactorEncoding,不知道是不是这个答案
8.getAttribute()和getParameter()有什么区别
- getAttribute()方法用于获得session中的值,在使用getAttribute()方法前要先setAttribute()存放数据
- getParameter() 用于获得表单中的值,如:
<input type="text" name="id" />
就可以使用getParameter(“id”) 获得文本输入框中的值
9.start()和run()有什么区别
- 直接调用run()方法的话等同于执行了一个名字为run的方法,没有调用到线程中的方法
- 运行start()方法会使线程进入runnable状态,之后会执行run()方法,只有运行start()方法才标志线程开始运行。
10.String可以被继承吗?
不可以,String 被 final修饰,被final修饰的类不能被继承,变量不能被更改,方法不能被重写
11.wait()和sleep()的区别
- wait() 属于 Object类的方法,sleep() 属于Thread 类的方法
- wait() 会交出当前已获得的锁,sleep()不会,并且会保持对线程的监控状态。
- wait() 需要和 notify() 搭配使用,sleep() 在等待一段时间一段时间后会释放锁
12.线程的生命周期
新建(new) -> 就绪(runnable) -> 运行(running) ->阻塞(blocked) ->死亡(dead)
一般前面两个我都说英文,因为我经常会说成初始化和可运行,防止面试官听不懂。。。。
扩展到线程的六种状态:
新建(new) -> 就绪(runnable) -> 阻塞(blocked) -> 等待(wait) ->即使等待(time_waiting) ->销毁(determined)
和生命周期很像,只要记住5:6即可
算法题
1.猴子吃桃问题:一个猴子每天吃总桃子数量的一半又一个,吃到第十天还剩一个,问一共摘了多少个桃子
2.画棱形问题
3.设计一个算法输出一个字符的后面第三个字符(如 输入’a’ 输出 ‘d’ ,输入 ‘z’ 输出 ‘c’)
面试题
第一次面试有点太紧张了,好多题没答上来。。。。