一面
- 自我介绍
介绍了实习相关和工作相关
- 为什么看机会
- 线程池参数
public class ThreadPoolConfig { /** * 机器内核数 */ private final static int AVAILABLE_PROCESSORS = Runtime.getRuntime().availableProcessors() * 2; /** * 线程池创建 */ private static ExecutorService THREADPOOL = new ThreadPoolExecutor(AVAILABLE_PROCESSORS, 50, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(1024), new ThreadFactoryBuilder() .setNameFormat("call-thread-pool-%d").build(), new ThreadPoolExecutor.AbortPolicy()); private ThreadPoolConfig() { } /** * 获取定长线程池 * * @return */ public static ExecutorService getThreadPool() { return THREADPOOL; } }
队列一般用有界队列,不然可能撑爆内存
一家餐厅
corePoolSize
可以理解成一般情况下餐厅招5个厨师,核心成员就5个,就可以完成对餐厅客人的供给
maximumPoolSize
当节假日,餐厅生意比较好,5个已经忙不过来了,就再招3个达到8个,考虑到成本的最大数量,当生意又恢复到平时,另外3个临时工再干掉
- 为什么阿里规范不让用executors
- 线程池空闲的线程怎么回收,怎么判断线程空闲
keepAliveTime when the number of threads is greater than
* the core, this is the maximum time that excess idle threads
* will wait for new tasks before terminating.
- HashMap扩容过程
double size 扩容
扩容因子 0.75 触发扩容
- HashMap size 16 扩 32 目的是什么 ?
比如到12触发扩容到32,但就算用到14,也还有10几个位置没用,为什么一定要扩到32
我回答的是 16 二进制是 1111 ,32 二进制是 11111
这样key的hash值和1111/11111与和时,不会让桶的大小影响映射的位置
面试官问还有呢?
突然想到之前看过一篇文章说是,扩容后需要rehash,rehash后的结点要么在原位置,要么在原位置 + 16
- 现在的cpu 求模和求与和效率上没什么差吧,那为什么源码用求与和,基于什么考虑
瞎球说的。。。
- HashMap链表、红黑树相关
链表法,在阀值下链表 -> 红黑树 , 红黑树 -> 链表
红黑树效率更高
- linux公司平时用什么
查日志 cat / tail 。。。
- shell 脚本替换文本中的内容
shell学过,没实践经验
- jstack 怎么用
- jstack线程状态有哪些
- mysql执行计划
explian
- 一个sql语句,where 后面有好几个查询条件,用执行计划得到的count 扫描行数是什么
我回答是最优计划扫描B+树的行数 ,答的不好
rows: MySQL估算的为了找到所需行而要检索的行数,作为优化器选择key的参考
- redis好在哪里
基于内存 单进程 多路复用 过期策略(优化版LRU)
- redis bgsave fork子进程后,还接收新的写请求嘛,会不会产生脏数据,redis怎么处理的
接收写请求,子进程不影响主进程
对rdb文件的影响答的不好
- 公司 redis 集群怎么样的
- tcp udp
- 冒泡排序
- 比较zab协议和raft协议
zab协议和raft协议都是基于拜占庭协议
zab协议是对zookeeper基于raft协议的改进版
zab协议包括消息广播,崩溃恢复
- 用户登陆后延迟一段时间发红包怎么做(新用户延时短,老用户延时长)
我说是通过mq 没到 延迟时间一直自消费,到时间再调发红包服务
面试官说我想复杂了,就用jdk的延迟队列即可
二面
- 用过k8s嘛
- 公司怎么看服务器的状态
- 公司怎么看mysql、redis相关的指标
- 什么时候会看这些监控系统
- 服务上线怎么确认上线成功,整个过程需要多久呢
- 什么命令会导致redis 慢查询
key *
- scan怎么用
- HashMap 的容量为什么都是2的n次方
让结点打到桶的位置不受桶的大小影响,面试官问还有呢。。。
我说让结点rehash后的值,要么在原结点,要么在原结点 + 16
- HashMap 扩容后rehash,都需要重新计算所有结点的hash值嘛
- HashMap 的容量为什么都是2的n次方
- 看过源码嘛
- Spring ioc 怎么解决循环依赖,如果是你的话会怎么解决
- 什么是强引用和弱引用
- 做过长连接的项目嘛
- 说说对重构的看法
- 如果重构和业务需求并行怎么处理
- 对分布式高并发有什么研究
- zookeeper分布式锁怎么实现
- 为什么需要分布式锁
- 为什么需要分布式
- 什么是驱动你学习这些东西的
- 最近看过的书
- 职业规划和行业意向
电商、娱乐、社交
- 接收的加班时间范围
- 200w DAU,怎么存储用户id和用户信息,面试官提醒涉及垃圾回收器
- 做一个英雄联盟的录像回放?
回答一:存放视频原件,根据byte流给用户
面试官:那加一个条件,可以切换标清、高清、超清、蓝光呢?
回答二:存放视频原件,根据不同的压缩策略给用户
面试官:加个条件,不能存放视频原价
回答三:(这个想了很久)
既然是游戏,那么人物啊,技能啊,动作啊,鼠标点击事件,肯定都是命令,都是代码,把这些命令存放在一个文件里
用户录像回放的时候,就把这些命令重放一遍,就类似redis的aof,mysql的binlog
三面
- 自我介绍
- 优缺点
- 怎么学习
- 看了哪些书
- 遇到最大困难
- 对加班的看法
- 目前面了哪些公司
- 想去什么样的公司
- 职业规划
- 会考虑管理吗
- 提问题
玩吧上的哪块业务最需要人力开发和维护呀,哪些游戏最要人力投入
现在玩吧上都是小游戏,以后会不会考虑开发稍大型游戏
一个研发是负责一个游戏后台的开发,还是多个游戏后台开发
能者多劳
在现在pc端的英雄联盟、吃鸡,手机端有王者荣耀、吃鸡,怎么保证平台的竞争力和吸引力,和我们针对的用户群体(社交 + 娱乐)
我玩了咱们平台的狼人杀游戏,和专门做狼人杀的app还是有一定差距的,怎么保证我们的游戏又全又精
后面会投入人力和资源做相关的整改和优化吗
公司的主要技术栈 Spring Cloud + K8S