自我介绍
项目(因为和面试官部门业务直接相关,所以问了很久)。
MySQL:
MySQL数据超过多少性能会降低?(我印象里是2kw)
这个数是怎么来的?(我只看过这个,没有自己推到过,说的不知道)
如果这么多数据,用主键索引去查,会不会快?
如果不是主键索引,而是二级索引,并且这个字段的区分度比较高,会不会快?
如果你这个场景中确实有这么多数据,你要怎么去做优化呢?(先说了限流、按分页分批查询。我知道有分库分表这个技术,但是因为我了解的不多,所以就没说。然后面试官说其实你可以了解一下分库分表这个技术。后悔没说了。。。)
设计题:
现在系统有一些用户,每个用户有若干个标签。我现在要在平台首页实时地去统计TOP 10的标签。你觉得可以怎么做?(说的Redis的zset。)
现在要对一个平台发布的帖子做一个限制,比如标题20个字符的限制,正文4000个字符的限制。你觉得从接口层面到数据库层面可以怎么去进行设计?(接口参数校验、数据库层面数据类型)
如果是中文和英文都有可能会有,这个要怎么考虑?(这里我说了中文和英文的字符数是不一样的)
Java:
锁有哪几种?每一种的作用?(Sychronized、RentrantLock、乐观锁CAS、信号量)
每种锁的场景是什么?
线程池原理?
如果给你一个场景,核心线程5、最大线程10、阻塞队列长度200、任务20。这个执行流程是怎么样的?
你觉得线程池为什么要先把任务往阻塞队列里塞,再创建非核心线程,而不是反过来?(能少创建线程就少创建)
延迟队列了解吗?(我知道是阻塞队列的一种,但原理不是很了解。。。)
算法题:
单例(我知道是双重检验锁,但因为写的不太熟,也被拷打了。。。下来再好好看一下原理)
反转数组求最大值(二分秒了)
反问:
有什么建议吗?(听上去感觉技术还是挺不错的,但是就是基础还需要加强一些)
总结:
面试官人巨好,体验非常好,没有任何刁难,不会的马上问下一个。