Java面试题

电话一面
1、自我介绍、自己做的项目和技术领域
2、项目中的监控:监控指标常见的有哪些?
3、微服务涉及到的技术以及需要注意的问题有哪些?
4、注册中心你了解了哪些?
5、consul 的可靠性你了解吗?
6、consul 的机制你有没有具体深入过?有没有和其他的注册中心对比过?
7、项目用 Spring 比较多,有没有了解 Spring 的原理?AOP 和 IOC 的原理
8、Spring Boot除了自动配置,相比传统的 Spring 有什么其他的区别?
9、Spring Cloud 有了解多少?
10、Spring Bean 的生命周期
11、HashMap 和 hashTable 区别?
HashMap 是线程不安全的,HashTable是线程安全的。
Jdk8后,HashMap是数组加链表加红黑树,HashTable是数据加链表
HashMap 的key和value均可以为Null,HashTable均不能为Null
HashMap默认桶的容量大小是16,HashTable是11
HashTable之所以是线程安全的,是因为在put和get方法上加了synchronized方法。
12、Object 的 hashcode 方法重写了,equals 方法要不要改?
需要改写,如果不改写equals,会导致对象比较产生不一致,特别会影响通过equals比较的八大包装对象,例如当equals返回true,而 hashcode不一致,当相同的对象写入HashSet或者Map的时候,会存储两个值一样的对象.
13、Hashmap 线程不安全的出现场景
当HashMap有hash冲突时候,就会在Entry后面已链表的方式存放,jdk7以后根据长度会变换成红黑树,当多线程同时修改时候链表修改会导致数据丢失。
当hash冲突变多后,就会存在查询效率变低,这个时候HashMap会把数据resize,之前的数据重新移动到一个新的数组中,在多线程环境中每个线程同时在reszie,也存在数据复制丢失的风险。
14、线上服务 CPU 很高该怎么做?有哪些措施可以找到问题
1 如果多服务部署,Top -c 找到最耗费CPU的进程 键入P
2 Top -Hp pid 找到最耗费CPU的线程 键入P
3 将线程pid转换为16进制 printf “%x\n” 10804
4 查看堆栈 找到线程在干嘛 jstack 10765 | grep ‘0x2a34’ -C5 –color
5 定位到具体执行的代码,解决问题。
15、JDK 中有哪几个线程池?顺带把线程池讲了个遍
JDK自带的线程池工厂类 Executors,可以创建4中类型的线程池
1 newfixedThreadPool 创建固定长度的线程池,当线程个数达到最大个数时,新任务需要在队列中等待。
2 newSingleThreadExecutor 创建1个线程的线程池,当线程异常退出后,会再创建一个线程放到线程池里。
3 newScheduledThreadPool 延时多少秒后开始执行
4 newCachedThreadPool 可缓存的线程池,当线程池的大小超过可处理任务的数量,就回收部分空闲的线程,当任务增加,线程池又会新建线程,直到达到操作系统规定可以创建的最大线程数。
在实际环境中,要避免用Executors直接创建线程池,原因是此方式创建的线程池都是用的默认参数,而我们常常会忽略这些参数值,导致存在资源浪费和不可控因素,推荐用 ThreadPoolExecutor 来创建线程池。
说明:Executors 各个方法的弊端:
1)newFixedThreadPool 和 newSingleThreadExecutor:
主要问题是堆积的请求处理队列可能会耗费非常大的内存,甚至 OOM。
2)newCachedThreadPool 和 newScheduledThreadPool:
主要问题是线程数最大数是 Integer.MAX_VALUE,可能会创建数量非常多的线程,甚至 OOM。
16、SQL 优化的常见方法有哪些
17、SQL 索引的顺序,字段的顺序
18、查看 SQL 是不是使用了索引?(有什么工具)
19、TCP 和 UDP 的区别?TCP 数据传输过程中怎么做到可靠的?
20、说下你知道的排序算法吧
21、查找一个数组的中位数?
电话二面(85 分钟)
1、自我介绍、工作经历、技术栈
2、项目中你学到了什么技术?(把三项目具体描述了很久)
3、微服务划分的粒度
4、微服务的高可用怎么保证的?
5、常用的负载均衡,该怎么用,你能说下吗?
6、网关能够为后端服务带来哪些好处?
7、Spring Bean 的生命周期
8、xml 中配置的 init、destroy 方法怎么可以做到调用具体的方法?
9、反射的机制
10、Object 类中的方法
11、hashcode 和 equals 方法常用地方
12、对象比较是否相同
13、hashmap put 方法存放的时候怎么判断是否是重复的
14、Object toString 方法常用的地方,为什么要重写该方法
15、Set 和 List 区别?
16、ArrayList 和 LinkedList 区别
17、如果存取相同的数据,ArrayList 和 LinkedList 谁占用空间更大?
18、Set 存的顺序是有序的吗?
19、常见 Set 的实现有哪些?
20、TreeSet 对存入对数据有什么要求呢?
21、HashSet 的底层实现呢
22、TreeSet 底层源码有看过吗?
23、HashSet 是不是线程安全的?为什么不是线程安全的?
24、Java 中有哪些线程安全的 Map?
25、Concurrenthashmap 是怎么做到线程安全的?
26、HashTable 你了解过吗?
27、如何保证线程安全问题?
28、synchronized、lock
29、volatile 的原子性问题?为什么 i++ 这种不支持原子性?从计算机原理的设计来讲下不能保证原子性的原因
30、happens before 原理
31、cas 操作
32、lock 和 synchronized 的区别?
33、公平锁和非公平锁
34、Java 读写锁
35、读写锁设计主要解决什么问题?
36、你项目除了写 Java 代码,还有前端代码,那你知道前端有哪些框架吗?
37、MySQL 分页查询语句
38、MySQL 事务特性和隔离级别
39、不可重复读会出现在什么场景?
40、sql having 的使用场景
41、前端浏览器地址的一个 http 请求到后端整个流程是怎么样?能够说下吗?
42、http 默认端口,https 默认端口
43、DNS 你知道是干嘛的吗?
44、你们开发用的 ide 是啥?你能说下 idea 的常用几个快捷键吧?
45、代码版本管理你们用的是啥?
46、git rebase 和 merge 有什么区别?