2023年12月23日 小米-小爱服务端架构(武汉) 1面:
1、自我介绍(学校、研究方向、项目)
具体面试问题(面试官人很好,但是问的问题很多偏实战,感觉答得不是很好):
1、序列化与反序列化(没答上来,直接说不会)
2、Jvm中的垃圾回收器
3、GC的问题:实际遇到过full GC吗,实际中什么时候会出现full GC?(面试官想问实际开发中,而不是理论上。我懵了,我就说内存泄漏,以及创建对象的速度大于GC的速度时)
4、什么时候会内存泄漏?(我就举例说明了ThreaLocal中的entry对象键是虚引用,值是强引用,若不主动使用ThreadLocal中的remove方法,GC时键会被回收,值不会被回收,就会导致内存泄漏)
5、MYSQL中内连接和外连接的区别?什么时候用到内连接?什么时候用到外连接?
6、线程池的工作原理(先说参数,再说执行原理)
7、为什么会有核心线程数 + 最大线程数?(我感觉面试官想问为什么要设置两种线程:即核心线程和临时线程)
我说首先核心线程会一直存在,避免反复创建消耗资源。临时线程又提高了并发处理能力
8、线程时越多越好吗?
我回答的是:不能无限的多,原因:1、线程越多,会频繁的上下文切换,带来额外的开销,降低性能;2、线程在内存中是通过线程控制块管理维护的,线程越多,线程控制块就会越多,而线程控制块页要花费额外的开销进行维护管理
9、线程池使用的好处?(我当时说的是对开发者方便,且线程复用,降低资源消耗)
10、threadLocal在项目中具体是怎么使用的?为什么要用到threadLocal?(threadLocal存储仅当前线程能使用的资源,具体到项目中就是存储当前登录用户的id,之后方法中就可以直接获取当前登录用户id;至于为什么要用到threadLocal,因为他是线程隔离的,能保存每一个线程的资源,这正是我这个业务功能所需要的)
11、具体到项目,那项目中就用到threadlocal,后续就不需要用到线程池了吗?(我说看具体业务功能,如果你要实现的是批量数据导入这种,就需要用到线程池)
12、但是现在两个用户的请求过来了,使用的是同一个线程怎么办?上一个问题,我感觉面试官其实想问本质就是这个问题(还是得用到线程池)
13、Mysql是否是线程安全的?(不是。Mysql默认隔离级别是可重复读,在此隔离级别下,能避免大部分并发问题,但是极端情况下还是会出现幻读现象)
14、我看你项目中用到了mysql主从模式提高并发性能,能说一下主从模式下怎么提高性能吗?(主从模式实现了读写分离,主库写、从库读,这样写操作就不会影响读操作,所以主从模式主要解决了写操作对读操作阻塞导致性能下降的问题)
算法题:
1、判断s是否为t的子序列(序列可以是不连续的,但是相对位置不能改变)
标签:用到,threadLocal,GC,内存,语音,线程,小米,主从,小爱 From: https://www.cnblogs.com/sunjuil/p/17923277.html