Java面试题

72 阅读3分钟

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,通过任意一条从根到叶子简单路径上颜色的约束,红黑树保证最长路径不超过最短路径的两倍,加以平衡。性质如下:

    1. 每个节点的颜色不是红色就是黑色
    2. 根节点的颜色是黑色
    3. 如果一个节点的颜色是红色,那么他的两个字节点就是黑色的,没有持续的红节点
    4. 对于每一个节点,从该节点到其后代节点的简单路径上,均包含相同数目的黑色节点

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() 和 == 区别?

  1. hashcode()方法跟equals()在Java中都是判断两个对象是否相等
  2. 两个对象相同==>hashcode相同,成员变量相同,hashcode的值一定相同
  3. 两个对象的hashcode值相同,对象不一定相同。equals相同hashscode相同,hasdcode相同equals不一定相同
  4. == 比较的是两个引用在内存中的指向是不是同一个对象,是不是同一个内存空间

7.sql语句优化

  1. 避免在列上面做运算,可能会导致索引失败
  2. 使用join是应该小结果集驱动大结果集,同时把复杂的join查询拆分成多个query
  3. 注意like模糊查询的使用,避免使用%%
  4. 不要使用select *节省内存
  5. 使用批量插入语句,节省交互
  6. Limit基数比较大时,使用between and
  7. 不要使用rand函数随机获取记录
  8. 避免使用null,建表时。尽量设置not null,提高查询性能
  9. 不要使用count(id),应该使用(*)
  10. Form 语句中一定不要使用子查询
  11. 使用更多的where加以限制,缩小查找范围
  12. 合理运用索引
  13. 使用explain查看sql性能

人生,唯有不断地舍,方可真正有所得