竟然有3轮技术面,现在都这么难了吗
整个面试体验很好,流程也快,也有不少收获
投递&笔试 8.6
一共5道编程题,都是lc原题,买股票含冷冻期那题没做出来(之前见过这道题但没做过,当时那个后悔啊)
第二天就通知当天面试,被我推掉了
一面 8.10
第一次面试官到得比我早,基本上按照简历问的,大概50分钟
- 自我介绍
- Spring动态代理实现方式
- 会哪些设计模式,讲了单例,问了单例好处、饿汉与懒汉
- 讲观察者模式,好处是啥(没答上来,后来问了面试官讲是解耦和添加观察者不用修改代码)
- Mybatis Mapper原理,返回Java对象用到了Java啥特性
- 分页用啥
- UDP适用场景,怎么保证可靠
- MySQL更新时什么锁,什么时候会是行锁
- B+与B树区别,为啥MySQL用B+树
- 哪个数据库用的B树,它为啥用B树(答不知道),会MongoDB吗(答用过但不熟)
- 写题,一道是判断第一个数组最大的50个数之和是否比第二个数组最大的50个数之和大(我是先用快排找到最大50个数,然后面试官问能用Java中的啥简化代码,就又写了堆排),第二题打家劫舍3(磕磕绊绊写出来了,面试官讲有问题,我也没懂问题在哪,后来在lc跑了下过了!)
- 反问
刚面完hr就通知下午二面,又被我推到了第二天
二面 8.11 上午
又是50多分钟,基本都在问我的垃圾项目
- 自我介绍
- 项目
- 讲下架构设计
- 数据库优化(怎么设计的索引,我又讲了我反范式的设计)
- XX并发很大怎么办(面试官讲延时更新数据库,用mq)
- 看我用了es,我讲只是会用,就问了我用什么分词的,类型是啥(忘了)
- 为啥用caffeine做本地缓存,和redis有啥区别,经常更新本地还缓存吗
- 数据库与缓存一致性
- B+树缺点(从来没想过缺点,经提示想到如果用B树可能第二层就能找到,而B+要到叶子结点),覆盖索引,联合索引顺序问题(好像我讲错了啥,面试官问知道索引下推吗),怎么查看索引执行情况
- 关系型数据库与非关系数据区别
- 写了一道跟集合相关的题,自定义一个类
Question
,对List<Question>
根据id
去重,后来又改为去重时选择score
最大的,我用到了map,面试官问知道merge()方法和BiFunction
吗 - 紧接着
BiFunction
,聊到了lamda表达式,传入的实参还是形参,然后问lambda内可以修改外部的变量吗,为啥,如果要修改怎么办 - 泛型特性,能不能有两个只是泛型不同的方法
- 反问
hr面
三面之前进行了个hr面,没有自我介绍真好,一共10多分钟,聊得很愉快
三面 8.11 下午
面了一个小时10多分钟,基本上都是开放性问题,讲是leader面,可是看起来好年轻啊
也没有自我介绍 开心
项目收获(其实好想说没收获)
详细问了权限控制模块
聊了一些杂七杂八的
数据库相关,锁、隔离级别、索引(建索引要注意啥)这些,数据库与缓存一致
数据量很大的话,要展示在页面上有哪些方法可以减少时间(我讲了分页、索引、缓存)
也是数据量很大,但是只是在前端做的假分页,问可能造成什么问题(我从数据库、响应时间、线程分析了下,面试官提示从jvm考虑,我将可能会OOM,又问发生OOM后应用服务器会发生啥)
哪些数据适合HTTP缓存(静态资源),看我简历写了HTTP,问看过书吗(没看),了解到啥程度,简单讲了下,就问了下缓存
servlet、filter、listener这些(忘完了,竟然讲servlet比filter先执行 尴尬)
void doFilter(request, resp){ UserRole role=getRole(request); String path=request.getServletPath(); // TODO: 权限校验 } 匿名用户:"/home", "/resources/.*" 老师:"/home", "/teacher/.*", "/resources/.*" 学生:"/home", "/student/.*", "/resources/.*"
又问了如果改需求老师不能访问home怎么改,然后我给了个通用的思路(UserRole维护一个可以访问路径的集合,再用一个map存几种角色的UserRole,又问这属于什么设计模式)
ip地址转数字
反问(了解到竟然还要写前端,难怪追着问token前端怎么存,还讲有在用jsp,劝退)
全部评论
(3) 回帖