Java大厂面试题05
世间最好的东西,是欢喜;世间最贵的善举,是结缘;
世间最大的力量,是忍耐;世间最强的愿力,是甘愿;
1.jdk1.7到1.8 Map发生了什么变化(底层)?
- 1.8之后hashMap的数据结构发生了变化,之前的单纯数组+链表的结构变成了数组+链表+红黑树。也就是说在JVM存储hashMap的k-v是仅仅通过key来决定每一个entry的存储槽位(Node[]中的index)。并且Value以链表的形式挂载到对应的槽位上(1.8以后如果value长度大于8则转为红黑树)。
- 但是hashMap1.7跟1.8中都是没有任何同步操作的=,容易发生并发问题,甚至出现死循环导致系统不可用。解决方案是jdk的ConcurrentHashMap,位于java.util.concurrent下,专门解决并发问题。
2.并行跟并发有什么区别?
- 并发:指应用交替执行不同的任务,多线程原理
- 并行:值应用同时执行不同的任务
- 区别:一个是交替执行,一个是同时执行
3.什么是中间件?
中间件是处于操作系统和应用程序之间的软件,中间件 = 平台 + 通信。
....
4.红黑树的原理?
-
红黑树的性质:红黑树是一个二叉搜索树。在每个节点都增加了一个存储位记录节点的颜色,可以是red,也可以是black,通过任意一条从根到叶子简单路径上颜色的约束,红黑树保证最长路径不超过最短路径的两倍,加以平衡。性质如下:
- 每个节点的颜色不是红色就是黑色
- 根节点的颜色是黑色
- 如果一个节点的颜色是红色,那么他的两个字节点就是黑色的,没有持续的红节点
- 对于每一个节点,从该节点到其后代节点的简单路径上,均包含相同数目的黑色节点
5.ThreadLock作用
ThreadLock为本地线程,为每一个线程提供一个局部变量,也就是说只有当前线程可以访问,是线程安全的。原理:为每一个线程分配一个对象来工作,并不是由ThreadLock来完成的,而是需要应用层面保证的,ThreadLock只是起到了一个容器的作用。原理为ThreadLock的set()和get()方法。
//实现原理:
public void set(T value) {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);
else
createMap(t, value);
}
public T get() {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null) {
ThreadLocalMap.Entry e = map.getEntry(this);
if (e != null)
return (T)e.value;
}
return setInitialValue();
}
6.Hashcode() 和 equals() 和 == 区别?
- hashcode()方法跟equals()在Java中都是判断两个对象是否相等
- 两个对象相同==>hashcode相同,成员变量相同,hashcode的值一定相同
- 两个对象的hashcode值相同,对象不一定相同。equals相同hashscode相同,hasdcode相同equals不一定相同
- == 比较的是两个引用在内存中的指向是不是同一个对象,是不是同一个内存空间
7.sql语句优化
- 避免在列上面做运算,可能会导致索引失败
- 使用join是应该小结果集驱动大结果集,同时把复杂的join查询拆分成多个query
- 注意like模糊查询的使用,避免使用%%
- 不要使用select *节省内存
- 使用批量插入语句,节省交互
- Limit基数比较大时,使用between and
- 不要使用rand函数随机获取记录
- 避免使用null,建表时。尽量设置not null,提高查询性能
- 不要使用count(id),应该使用(*)
- Form 语句中一定不要使用子查询
- 使用更多的where加以限制,缩小查找范围
- 合理运用索引
- 使用explain查看sql性能
人生,唯有不断地舍,方可真正有所得