本人工作三年有余,承蒙领导信任,工作第二年就开始带团队了,团队规模从开始的3人到20+又到3人(政策及资金原因,期间做过聚合支付,也带团队从0到1干过支付+营销的完整产品,个人觉得自己实力比上不足比下有余,菜鸡高级开发。
由于校招到现在没面过试,所以不晓得目前市面上的面试都是啥套路,本次找工作整体流程就是,离职,在家看了两周的面试题,然后开始投简历,然后面了大概两周,一天只约一个,回来总结经验教训和知识盲点,比如有哪些回答本来可以答的更好,组织语言,下次再问我就一脸自信,无懈可击,两周时间,一共面了5家,拿个3个offer(还有一个最近面的,还没消息)。
题目与分析
第一家:某某直聘
一面的笔试和二面的问题比较中规中矩,都是常规问题,比如线程池参数、线程池原理、hashmap原理、类加载机制、CMS收集器、volatile原理(没问到MESI,只问到作用,明显仨,再就不问了),还有就是一些实际问题的处理,缓存双写一致性、分布式事务、IOC、AOP的原理、bean生命周期等等吧,吹的还可以。三面的时候有俩题没答好,一是不停机分表怎么做,并且基于时间分表后,跨表查询怎么做。这个当初回答是生产没做,如果想做可以怎样怎样;第二个问题是秒杀如何解决超卖,这个很久之前看过,当初一下子懵逼了,答个稀里糊涂。之后HR面,问我现在给你发offer,一周之内能入职么,我说不能,你家是第一家,得等我面完其他四五家的,然后。。。就没有然后了,这家就挂了。
回来认证总结了一下,对于第一个问题,我们做过基于mysql的统计分析,实现就是mysql binlog -> kafka -> storm -> es。这不完美解决么,因此再有人问我,就回答将数据全量同步到es中,随便查。第二个问题,其实也蛮简单,无非就是C层限流(令牌桶),biz层队列(排队),dao层检验,查询丢redis。事实证明,后续只要提到这都会问这俩问题,后续再无破绽。
放出一面笔试题:
- 两个数组,求交集
- 一个包含全部select from where group by having order by 的简单sql
- 给定两个数组,只有一个字符不同,其余字母值和顺序都相同,设计一个方法,高效找到这个字符
- 实现死锁
第二家:某菜网
当初校招差一点就去了他家,校招给钱很多,不过社招实在是扣,曲折的线路,转盘道差一点走丢了,共享办公区,茶水间面试,写算法没有纸,体验有一些不太好。
一面,笔试+面试,面试还是那些问题,没啥可说的(主要我是没记住),笔试题如下:
- 删除单链表中的元素
- 实现懒加载,线程安全的单例
- 设计数据库表,存放学生、课程、学生的课程及成绩,并给出sql语句,查询平均成绩大于85的所有学生
- 有一台双核CPU,2G内存,1TB硬盘的机器和一个800G的文件,格式如下,求访问量最多的TOP100的IP地址和访问次数,简述解题方法。
- 192.168.1.1 GET/HTTP/1.1 200 580 "-" "Mozilla/5.0"
- 手写LRU缓存,要求输出请求未命中的次数
二面,有俩问题印象挺深刻,主要是启发式面试,个人比较喜欢。一个是我司自己实现了一整套服务治理,可以实现优雅启停等等,面试官和我详细探讨了这么做的好处以及怎么做。另一个问题是mq的使用问题,一连串,比如使用mq的时候如何保证数据一致性,幂等性,消息积压,消息丢失等等,还聊了一些缓存相关的,比如热点商户缓存失效,穿透,雪崩等等吧,其他都是简单问题,就不赘述了(还是因为没记住)。
好像没三面,hr那天又请假了,我就回去等了。后来等来了消息。
第三家:某东
朋友推过去的,效率奇高,上午9点到,中午12点hr面都完事儿了。这个回来整理了,因此题目比较详细。
一面:
1、Object的方法
2、jdk1.8比1.7做了哪些改变
3、volatile原理
4、工作中用到的redis数据类型及场景
5、工作中用到的线程池及原理、每个参数是怎么设置的
6、工作中用到的Redis锁及原理
7、slect from a left join b on 条件 和 select from a left join b where 条件一样么,为什么
8、热点商户的缓存穿透怎么解决,排队后面的请求等待时间过程怎么办
9、hashmap的put过程和扩容过程
10、用list users = new ArrayList<>()来说明类加载过程和整个过程中内存各区域的变化
11、线上用的垃圾回收器是啥,分几个阶段,哪个阶段stop the world,eden里还有什么
12、设计一个高可用、幂等、安全、高性能的接口需要分别考虑什么
13、Spring IOC bean初始化过程
14、mybatis的执行过程
15、事务隔离级别和mvcc
16、redis集群现在有10台机器,新加入5台,数据是怎么同步的
17、redis的持久化方式、redis的过期策略
18、redis和memcache的区别
19、mysql有哪些索引类型
20、lock和synchronized区别,生产还用过juc下的哪些类,场景
21、AtomicInteger的原理
二面:
1、redis lru是怎么实现的,如何手写一个lru
2、B树和B+树的区别,mysql为啥使用B+树
3、红黑树的特性及变换
4、生产上的分布式事务怎么做的
5、分布式限流
6、mq积压如何保证消费到最新的消息,mq如何保证消费顺序
7、lambda写一个排序
8、mysql能发生死锁么,为什么
9、生产上的服务降级做了么,怎么做的
10、缓存的双写一致性怎么保证,生产是怎么用的,有什么问题,怎么解决
11、生产的不停机分表怎么做的,怎么支持跨时间查询,有无其他更好的分表方式
12、说一下下单的整个流程
13、如何解决超卖
14、线上发生过jvm问题么,如何排查的,引起原因是什么
15、线程池的核心参数及原理
同样没三面就hr了。
第四家:某手
hr还下楼来接,面试官的体验也很棒,整个一面就在白板上给他画,想到哪就画到哪,聊到哪,不像面试,倒像是探讨问题。二面就比较严肃了,问一个答一个,还问了一个比较低级的业务问题,我一股无名火,差点没急眼,幸亏忍住了。。。三面是个boss,体验也挺棒,还是以引导面试为主,不会的会引导你,总体觉得这家公司很注重人的感受,很喜欢。
一面
1、介绍一下项目架构:技术+业务
2、缓存双写一致性,先更新db再更新缓存有什么问题
3、系统内的一致性和通道方的一致性如何解决
4、volatile原理和应用
5、mysql索引分类,详细介绍一下聚簇索引和结构
6、数组交叉合并,例如
[[1,3],[2,4],[5,7],[8,9]]输出[[1,4],[5,9]]
7、两个事务
T1 T2
begin:
select * from t where ...
begin:
insert into t (id,name) values (5,"小明");
commit;
update t set ... where id = 5; -->(问这条是否可以执行成功,为什么?)
commit;
8、redis使用了哪些数据类型,怎么用的,过期策略
9、redis如何实现分布式锁
10、限流和服务降级做了没,怎么做的;简述令牌桶原理
11、线上秒杀是怎么做的,超卖怎么解决
12、介绍一下mvcc和间隙锁
13、写一个单例
14、线上垃圾收集器,CMS几个阶段
15、redis和memcached区别
二面
1、ThreadLocal用过没,说一下原理
2、项目难点
3、表t(id(主键),sid(学生id),cid(课程id),score(乘积)) 求所有乘积都超过90的全部sid
4、将一个小于千亿的long类型的数字转成中文输出
例如1234 输出:一千两百三十四
5、synchronized 和 Lock区别,建议使用哪个,为什么
6、tcp和http的区别,一个tcp连接可以发送多个http请求么,什么参数控制,浏览器请求连接数有限制么,是多少,是服务端限制的还是浏览器限制的
7、介绍一下saas平台的主业务流程
8、平时怎么带项目的,说一下具体流程
三面
1、过去项目中最大的成就是什么、业务、架构、管理都可
2、完成情况,指标
3、未来的职业规划
4、写个方法,要求考虑性能
输入:File file
文件5G,JVM 1G
文件格式:2020-01-08 10:07:23 123
123是用户ID,范围1到100亿
要去:解析文件,统计并打印每个用户的总访问次数,打印出用户ID和总次数即可
没有脏数据、可以写伪代码
第五家:某滴
这个体验也有有点差,茶水间面试,等三面等了一个多小时,都想拍屁股走了,给hr打电话才来。
一面
1、支付三年,你认为支付系统比较重要的是什么
重复支付预防,分布式事务和降级,热点商户的处理
2、这三个都是怎么解决的
3、热点商户使用乐观锁+重试,如果重试也不行怎么处理,然后问了一些数据库的锁
4、分布式事务和降级怎么做的,定时用的什么组件,quartz单点怎么解决,广播的话怎么做,不用mq怎么做,自己实现一个分布式的delayqueue怎么实现
5、redis怎么用的,用了哪几种数据类型,底层数据结构是什么,string相比c的char数组做了哪些优化,list怎么用的
6、重复支付怎么搞定的
7、对账怎么搞,准实时对账怎么搞,如果只想从从库拉数据对账怎么解决延迟问题
二面
二面基本上就没有基础问题了,都是一些业务场景怎么处理,线上出问题如何查询解决优化等等。
- 对账怎么做的
- 账户系统如何解决资金一致性问题
- redis锁怎么实现及用法
- AOP举个线上的例子
- 缓存一致性
- 服务降级和限流
三面
三面跟二面差不多,基础问题不多,有一些管理相关的。
- 设计模式怎么用,用过哪些
- 团队怎么管理,日常比例
- 架构怎么设计,说一下具体流程
- 服务怎么拆分,原则
- 不停机分库分表怎么做
- JVM问题排查,栈溢出,OOM,CPU飙升
- 开发流程说一下过程
- 如何保证线上代码质量
- 除了内部灰度,还有哪些方法可以提高线上产品的质量以及减轻损失
- linux原理(完全不会)
- 其他我没记住