小米小爱语音助手(武汉)_1面

发布时间 2023-12-23 16:36:46作者: 笑嘻嘻嘻了

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的子序列(序列可以是不连续的,但是相对位置不能改变)