美团一面
1、Java的String类型可以被继承吗?
String被final关键字继承,不能被继承
2、String、StringBuilder、StringBuffer的区别?
String:不可变,写方法返回的是新对象
StringBuilder:可变,写方法返回的是当前对象;线程不安全,适用于单线程修改字符串
StringBuffer:可变,写方法返回的是当前对象;线程安全,适用于多线程修改字符串
3、ArrayList、LinkedList的区别?
ArrayList基于动态数组实现,适合查询,查询复杂度为o(1);
LinkedList基于链表实现,适合插入、删除,查询复杂度为o(n);
4、讲一下HashMap?
底层是数组 + 链表;
push过程:先将key通过哈希算法算出在数组中的位置,如果位置为空,则直接加入,否者判断值是否相等,相等覆盖,不相等则遍历后面的链表,不存在则添加。
5、HashMap中链表为什么要转为红黑树?
红黑树查找快
6、sleep和wait的区别
sleep属于thread类,不会释放锁,可以在任意位置调用,超时自动恢复
wait属于object类,会释放锁,只能在同步块内调用,需要notify/notifyall唤唤
7、Synchonize和ReentrantLock的区别
Synchronized可以修饰方法、代码块,ReentrantLock只能用于修饰代码块;
Synchronized会自动释放锁,ReentrantLock需要手动释放;
Synchronized是非公平锁,ReentrantLock可以是公平锁,也可以是非公平锁;
Synchronized可以响应中断,ReentrantLock不能相应中断;
8、进程之间如何通信
管道、消息队列、共享内存、信号量
9、get请求和post请求的区别
get一般用于从服务器获取指定的资源,安全且幂等,url的长度有限制;
post一般用于新增数据,不安全、不幂等,url的长度没有限制。
10、url请求的全过程
客户端输入url,DNS解析,建立tcp连接,发送http请求,服务器接受并处理请求,服务器返回http响应,客户端接受请求并处理,页面渲染。