完美世界Java后端一二面面经
一面
Java:
- CMS和G1回收流程、区别、几次StopTheWorld
- 方法区和栈都有什么
- TreeMap、LinkedHashMap、HashMap底层结构,
- HashMap put流程
- reentrantlock:介绍 、notify源码
数据结构:
大顶堆小顶堆,100个数获取最大的前几个数用哪个
完全二叉树概念
Redis:
- 底层数据结构
操作系统:
- 为什么分用户态、内核态,什么程序在用户态执行,什么程序在内核态执行
计算机网络:
UDP、TCP介绍,滑动窗口协议
输入网页,返回结果流程
ipv4地址不够用,解决方案
数据库:
- 索引分类
- 聚簇索引叶子结点、非叶子节点保存什么
- 命中索引过程
算法(口述):
二叉树层序遍历
二叉树最大深度
二面
Java
- 并发创建对象
数据库
- 三大范式
- 什么时候不命中索引
Springboot
- 生命周期
- bean三级缓存
计算机网络
- HTTPS过程,如何避免中间人攻击
- TCP状态,Close_Wait,Time_Wait
- TCP粘包如何解决,数据量过大如何解决
算法(口述)
- 有一个等概率生成1 ~ 3的随机数生成器,如何改成等概率生成 1 ~ 7。
- 两个有序数组,求第K小的树,要求时间复杂度最小
项目
- 如何解决用户密码保存的安全性问题
可以使用Bcrypt,有四个变量:
- saltRounds: 正数,代表hash杂凑次数,数值越高越安全,默认10次。
- myPassword: 明文密码字符串。
- salt: 盐,一个128bits随机字符串,22字符
- myHash: 经过明文密码password和盐salt进行hash,个人的理解是默认10次下 ,循环加盐hash10次,得到myHash
流程
每次明文字符串myPassword过来,就通过10次循环加盐salt加密后得到myHash, 然后拼接BCrypt版本号+salt盐+myHash等到最终的bcrypt密码 ,存入数据库中。
这样同一个密码,每次登录都可以根据自省业务需要生成不同的myHash, myHash中包含了版本和salt,存入数据库。
其他
- 职业规划
- 想做什么方向,电商游戏还是其他?
- 在校排名
- 有没有做个实际上线的项目
最后顺便推荐一下牛客的《Java岗位面试真题宝典》 专刊,包括Java八股文和答案,考点基本覆盖面试范围,解答也挺靠谱的。我正在看,感觉很适合校招求职。
#完美世界面经##面经##校招##完美世界##Java工程师#