面试收藏-开发篇Java

面试问题整理

2020-02-06  本文已影响0人  BySjm

接口(interface)和抽象类(abstract class)的区别是什么?



Servlet的生命周期

补充:

Servlet 调用的service() 方法:
Servlet初始化

分三种情况:


Object类的常见方法总结


为什么equals()方法要重写?


equals重写有什么注意事项?

equals 方法在非空对象引用上实现相等关系:


spring ioc底层用的什么数据结构?


HashMap


HashMap的put流程

①.判断键值对数组是否为空或为null,若条件成立则执行resize()进行扩容;
②.根据键值key计算hash值得到插入的数组索引,如果索引位置的值为null,直接新建节点添加,转向⑥,如果不为空,转向③;
③.判断桶位的首个元素是否和key一样,如果相同直接覆盖value,否则转向④,这里的相同指的是hashCode以及equals;
④.判断桶位是否为treeNode,即该节点是否是红黑树,如果是红黑树,则直接在树中插入键值对,否则转向⑤;
⑤.遍历该桶位的节点,判断链表长度是否大于8,大于8的话把链表转换为红黑树,在红黑树中执行插入操作,否则进行链表的插入操作(这里用的尾插发);遍历过程中若发现key已经存在直接覆盖value即可;
⑥.插入成功后,判断实际存在的键值对数量size是否超过阈值,如果超过,进行扩容。

补充


hashMap为什么线程不安全?

比如一个 ArrayList 类,在添加一个元素的时候,它可能会有两步来完成:

  1. 在 Items[Size] 的位置存放此元素;
  2. 增大 Size 的值。
    在单线程运行的情况下,如果 Size = 0,添加一个元素后,此元素在位置 0,而且 Size=1;
    而如果是在多线程情况下,比如有两个线程,线程 A 先将元素存放在位置 0。但是此时 CPU 调度线程A暂停,线程 B 得到运行的机会。线程B也向此 ArrayList 添加元素,因为此时 Size 仍然等于 0 (注意哦,我们假设的是添加一个元素是要两个步骤哦,而线程A仅仅完成了步骤1),所以线程B也将元素存放在位置0。然后线程A和线程B都继续运行,都增加 Size 的值。
    那好,现在我们来看看 ArrayList 的情况,元素实际上只有一个,存放在位置 0,而 Size 却等于 2。这就是“线程不安全”了。

ConcurrentHashMap加的是什么锁?

ConcurrentHashMap的get()方法是否需要加锁,为什么?

常见的异常整理

Java中的异常分为两大类:
1.Checked Exception(非Runtime Exception)
2.Unchecked Exception(Runtime Exception)


synchronize关键字的作用

synchronized的作用:
可以用来修饰:
举例

HashSet和TreeSet的区别

实现方式
数据是否有序
是否可以放入null值

Linux常用命令


SQL中IN和EXISTS用法的区别


线程池


创建线程的方法


static

使用场景
话术

Redis挂了怎么办?

Redis持久化

排查系统遇到的问题


事务运用的场景


ArrayList和LinkedList的插入,删除时间复杂度

操作 ArrayList LinkedList
读取 get() 根据下标直接查询,时间复杂度O(1) 遍历获取,时间复杂度O(n)
添加 add(E) 直接尾部添加,时间复杂度O(1) 直接尾部添加,时间复杂度O(1)
指定位置添加 add(index,E) 后面元素需要逐个移动,时间复杂度O(n) 指针指向操作,时间复杂度O(n)
删除 remove(E) 后面元素需要逐个移动,时间复杂度O(n) 直接指针操作,时间复杂度O(1)

之前用过Nginx吗? 你们一般都用它做什么?


索引(底层存储结构B+Tree)

索引的分类
使用索引的条件:
索引失效的条件:

在SpringCloud 体系你使用的Cookie 有没有遇到过什么问题


volatile 的特性



你要悄悄拔尖,然后惊艳所有人!

上一篇 下一篇

猜你喜欢

热点阅读