OD-Java面经
22届,半年工作经验,离职后找工作时有HR联系过来,试着投了简历。
原公司主要做电商这块,对电商业务比较熟悉,期望能进入类似的部门,让HR帮忙找了比较匹配的业务线,好评
总体流程很快,HR很负责经常帮忙催进度,从笔试到发offer差不多两周。
笔试:
笔试395,难度不是很高
第一第三题dp和哈希表100%,第一题题目一开始没看懂意思,看了挺久。第二题印象比较深,时间复杂度O(n)有一个用例超时了,95%
第二题:为新员工找友好度最高的座位,数组表示座位情况,如11101211100111211,0为空,1为老员工,2为墙壁。空座位左右连续老员工数量等于该座位友好度,遇到墙壁则好友度清空
初始思路是遍历数组,遍历到0时查找左右友好度情况,但是会有重复计算的问题,想着优化一下。
改为遍历一遍数组,遍历的同时维护左友好度和右友好度以及当前是否已记录座位。初始状态未记录座位,增加左友好度,当遇到座位时判断是否已记录座位,已记录时计算一次结果(左+右),未记录时更新状态。遇到老员工时根据是否已记录座位增加左/右友好度,遇到墙时计算结果+清除友好度。
性格测试
按照HR给的注意事项选就行,注意前后选择的一致性,选择正向的答案
HR资面
简单聊了一会儿,HR说武汉和深圳都能去,武汉比较缺人。我觉得有点远,想去深圳,HR说面试完再确定也可以。最后也去的深圳
- 离职原因
- 期望工作地,期望薪资
- 最近情况(投简历、复习、面试)
技术面
技术面都是技术问题+编程题,技术问题答得一般般,面试当天是周五,上午一面晚上二面,那周前几天已经面试了10场没啥状态,有点开摆了,编程题都AC
编程题是分享屏幕,然后用自己电脑上的ide编写,写完面试官会给用例
一面
八股问的都不是很深,记不太清了,各个方面有提到,会的就简单聊一下,不会的就换其他问题
- 聊项目,业务+技术
- Java集合
- SpringBoot自动配置原理
- MySQL索引原理,工作中数据库优化的案例
- Redis数据类型和原理
编程题:找出有效mac地址,通常表示为12个16进制数,如:00-16-EA-AE-3C-40。给一串字符串, 如00-16:aA-FE:3C-40-11-99-AA-Z,找出其中所有的有效mac地址,不区分大小写以及:和-
解法:MAC地址有固定长度,思路是滑动窗口判断当前部分是否为有效Mac地址。首先先对原字符串LowerCase(),再将:替换为-,方便验证。验证的地方主要是窗口内是否为12个16进制数,并且通过-连接。
二面
编程题面试官先给题目问有没有做过。答没有做过原题,有一点思路,讲了思路以后面试官确认没问题就开始写。
- 聊项目
- 面向对象和面向过程的理解
- 平时使用哪个版本的JDK(JDK8),JDK8和旧版本有哪些不同的地方(讲了会儿与JDK7的对比,集合优化、JVM、新特性),lambda表达式(有什么优点和缺点?语法精简/不好debug,使用时有些限制)
- 泛型,用处、应用,原理,运行时程序怎么知道是哪种类型
线程池7大参数,分析线程池工作时各参数变化情况(初始线程池容量x,最大容量y,队列长度z,来了n个任务,讲一下会发生的情况)
- Spring AOP (原理、应用)
- MySQL explain
- 单元测试
- 设计模式知道哪些,应用
编程题:给一个01矩阵,找其中1表示的最大面积正方形
0010
1110
1100
解法:遍历矩阵,找到为1的点后以这个点作为正方形的左上角,扩展正方形,同时计算最大面积
综面
面试官表示他们部门招人比较看重编程能力
- 问简历上的项目,更侧重对业务的提问
- 日常学习方式(看书、刷题),为什么要刷题,觉得有用吗
- 上一段工作中的收获
- 期望薪资