520没啥好送的,送一份面经总结吧(内含字节、虾皮、欢聚等)
520没啥好送的,送一份面经总结吧(内含字节、虾皮、欢聚等)
前言
今天不想写文章,水一篇面经。
本来也没打算搞这些,但是看到大家都在面,就跟着出去试试水。我工作已经一年多接近两年,这个工作时长其实比较尴尬,中级岗位自己不满意,高级岗位大厂评级比较难上去。
首先说一下我的工作内容,主要做金融相关的业务,目前做的是金融风控系统,常用技术也就是那些烂大街的。
关于这次面试的准备,主要有几点:
- 八股文,这一块我倒是没怎么看,压根没复习
- 框架,Spring这些我相对熟悉,也没怎么复习
- 业务,金融业务相对复杂点,可以说的点有很多,这点可能项目有点儿优势
- 算法,LeetCode随便刷刷
把简历挂boss就有人来约面试了,但是实际上我参加了的就这几家,最终除了bigo莫名其妙终止流程外,其他都拿到了offer。
这里不得不吐槽一下bigo,纯粹刷KPI,把流程终止后说找到更合适的人选了,但是我追问更合适的人是需要什么要求,HR又说他们现在不招人,我真是醉了。不招人约个锤子面试,浪费时间。
这里的面试顺序是我实际上参与面试的时间进行记录的,并没有特意再根据公司进行归类。可以看到,其实问下来的内容七七八八都是这些,基本是按照简历写的来,没超出太多。
面经
某金融公司 一面
0.项目,因为项目类似,聊了比较多,都很熟悉。
1.数据库的ACID实现
2.MySQL索引的结构
3.跳表
4.七层网络协议,tcp,可靠消息,流量控制,拥塞处理
5.最大公共不连续子串
某金融公司 二面
1.继续项目,难点在哪,做了什么等
2.各种中间件聊一下
3.定时任务优化聊了一下时间轮和大概的实现
4.Spring聊一下无了
字节 一面
1.MySQL数据库的连接设置
2.100个小球,有一个质量不一样的,怎么用天平秤两次找出这个小球
3.最长公共子串连续
4.MySQL一个SQL插入的过程,结合各层的实现和索引实现去讲,会有些页分裂整理什么的
5.索引的查询原理,为什么是B+ 树,有什么优劣,其他可以做数据库的结构,数组,哈希表,LSM树(hbase)等,各自的优缺点
6.tcp http https ssl
欢聚 一面
1.自我介绍
2.流程引擎,并行流程引擎处理
3.Dubbo 负载均衡
4.spring 循环依赖
5.配置中心动态生效 热部署
6.Redis
7.锁 乐观锁 悲观锁 synchronized原理
8.CAS带来的问题 ABA问题
9.countdownlatch底层原理
10.tcp udp
11.线上出现过的问题 索引失效 字符编码加号坑爹
12.两个线程交叉打印数字
13.写个冒泡 优化一下
14.最近在读什么书 看完了没有 看了多久 graalvm 静态编译原理 看完了 花了三个月 期望云原生发展方向
字节二面
1.项目介绍
2.流程引擎的设计 为什么这么选型 对比市面上的有什么优势 Osworkflow JBPM Activiti flowable Camunda
3.有没有对流程引擎进行过压测,性能如何
4.redis key过期时间到了,那再去查就一定没有了吗? 延迟删除,主从同步延迟 时钟跳跃 可以设定精确的过期时间 expireAt 时间点
5.Map有哪些实现 HashMap TreeMap ConcurrentHashMap LinkedHashMap,TreeMap 和HashMap的区别,底层的数据结构分别是什么,日常有没有遇到使用map出现并发问题
6.CPU高怎么去分析 top定位线程, jstack定位代码
7.dubbo 的负载均衡策略 随机 轮询 权重 一致性哈希 分别有什么优缺点和问题,项目里使用的是哪一种,线上有没有因为此策略而出现过问题
8.dubbo 的重试机制 怎么实现一个dubbo协议,需要集成哪些类,分别完成什么操作 protocol ,injvm dubbo协议的实现扯一下
9.io模型,react模型
10.tcp udp的区别 从面向链接 可靠开始 到三次握手 四次挥手 流量控制 慢开始 拥塞避免 快重传 快恢复
11.解决了什么项目难点 解决了规则执行日志的收集 项目出现什么问题比较深刻
12.计算一棵树的最大宽度 LeetCode 662,节点计数法,或者空间利用
13.找零,雪糕5一根 客人会用5 10 20 面值来买,你要保证正确找零 ,一开始手上没有零钱 直接遍历一遍解
14.有没有你比较擅长但是我没有问到的 spring相关
15.QA:当前业务是什么,难点是什么,未来发展的趋势
虾皮 一面
1.kafka消息保存机制 内存 落盘 异步刷盘
2.kafka是怎么保持消息可靠的,消息确认机制 1 0 -1
3.生产中kafka消费遇到的问题 消息堆积 阻塞 多线程消费
4.数据库性能瓶颈 慢SQL查询 多长算慢SQL 500ms
5.数据结构 数组链表的区别 哈希表的实现原理 链表转红黑树 红黑树的细节,节点的定义,怎么染色的,如何旋转 怎么实现
6.jvm垃圾收集器 serial parallel CMS G1,各种优缺点,并发标记有什么优缺点,浮动垃圾怎么处理 ,项目里用了哪个
7.jvm参数了解哪些,进行了什么调优 Eden s1 s2
8.jvm 8的元空间了解吗 里面存储了什么信息 跟永久代的区别 元空间会引发fullgc吗 为什么要有元空间 元空间怎么实现的
9.tcp问题四次挥手的细节,主动关闭被动关闭分别会发送什么报文,然后进入什么状态,其中会引发什么问题 close timewait状态答得不准确,这里问得很细,问到了fin_wait_1这些状态
10.http https ssl
11.非对称加密算法了解哪些 RSA原理知道吗 大质素相乘,数学推算细节知道吗 不知道GG
12.算法 ipv4地址匹配
虾皮 二面
1.业务的流程,偏金融相关:从获客千人千面开始到核心系统群里面的状态流转,到最终流程结束 完整阐述一遍,提了一些重要问题的点
2.为什么要用一套流程引擎,业务和代码解耦,方便业务的操作。怎么确保流程是对的,并且能用。两个方面,技术保证系统的可用性,业务保证业务逻辑的正确性。深入阐述。
2.那流程上线之前的正确性怎么验证 sit -> uat -> pre -> pet -> preprod -> prod ,AB测试 风控数据团队并行灰度对数
3.对于业务的理解,技术服务于业务,以满足业务为前提,聊天
4.接下来是比较多的case by case
5.简单场景下,两个账户互相转账,怎么保持结果正确 锁 乐观锁 悲观锁
6.分布式场景下,上述情况怎么保持结果正确,分布式锁,随口提了一嘴Redis 顺便搞了一嘴redis的高性能 高可靠如何保障 分布式事物,seata简单实现原理 XA TCC 2PC 3PC 一致性算法raft 最终保障数据一致性
7.还是上述分布式场景,服务调用出现了问题,怎么处理 调用端重试,带上重试标识等,服务端幂等或者响应重试等
8.承接场景7,并发量数据量上来了,如何处理 缓存 数据进行分库分表
9.那么好,分库分表假设给你一个账户表 要保障高并发下账户的数据是正确的,如何分表,按照什么维度划分,巴拉了一下横切竖切,分析了一下热点账户处理,添加影子账户巴拉巴拉
10.可以正常交易后如何保障交易的安全性 ,这几个点比较有趣,即 :
- 不可见性 加密巴拉巴拉 对称 非对称
- 不可篡改性 加密巴拉巴拉 非对称加密 CA认证 风险监控 可疑IP链路监控
- 不可抵赖性 人脸识别 活体检测 巴拉巴拉
11.MySQL的ACID逐个说明,MVCC 当前读 快照读 事务的可见性 readview trx_ix roll_ptr row_id
12.底层索引的组织实现,B+树的特性,MySQL里面叶子节点个数,层数等 一般节点数为1200 层次为4,可存节点17亿左右,叶子节点顺序遍历,数据页大小,内存碎片整理,页分裂等巴拉一下
13.在索引上进行一次增删改查的流程,B+树的操作,节点调整 分裂合并等瞎扯
14.QA:业务方向 难点以及解决方案
bigo 一面
1.系统的业务,系统主要模块划分,说一下架构图 我在里面主要做了什么,接下来业务的详细流程巴拉巴拉
2.谈一下你对dubbo的了解,dubbo的模块区划分,简单说一下一个rpc框架的的结构 序列化层 协议层 传输层 服务层 API层
3.上游服务调下游服务,数据的传输流程是怎样传输的 简单描述一次RPC的调用过程,从2.的层次去回答
4.多线程请求的情况下,RPC调用后消息怎么正确返回调用结果 消息序列号
5.线程安全的容器,concurrentHashMap的实现原理 HashMap 对比HashMap原理,1.7 1.8前后的改变 锁
6.ConCurrentHashMap的put/get实现原理 也对比HashMap去说 初始化 扩容 哈希冲突 拉链法 链表数组转换
7.线程池有哪些常用的参数 简单说了一下corepoolsize maxpoolsize keepalive policy queue,说了一下业务中线程池的使用
8.线程的状态有哪些?状态之间怎么转换 对比操作系统的线程模型简单说下 说了cpu调度 io等的影响
9.Redis缓存雪崩是什么? 对比了缓存穿透 缓存击穿说了一下
10.MySQL事务隔离级别 Read Uncommit Read Commit Repeatable Read Serialize 分别说了一下会造成的问题
11.幻读和可重复读有什么区别 说一下含义说的区别 举例子说明出现的场景 最后说下怎么解决 next-key 锁 gap 锁
12.间隙锁原理
13.kafka的组件架构 这个答得不好,随便说了一个server broker partition 瞎扯了一番消息发送可靠性是如何保证的,面试官很无语 我压根没问,你说那么多干哈玩意
14.kafka写消息机制 写内存 落盘 异步刷盘 主从同步等
15.算法:链表里面环的长度(leetcode 141与142结合体)秒了五分钟写完
欢聚 二面
1.项目 我状态不好,很困,瞎说了一堆,不知所云 也可能是面试官并不熟悉这一块业务,我们总互相Get不到点 蓝瘦
2.项目里遇到的难点
3.jvm调优 最新版本的jdk用的是什么垃圾收集器 CMS G1 ZGC 三色标记
4.oracle MySQL 的区别
5.设计一个地址簿
字节 三面
1.聊家常
2.项目里面做了什么 处理了什么 难点是什么
3.线上出过什么比较印象深刻的问题,索引失效 出现原因,处理方案 后果
4.怎么搭建一个redis集群 单点 集群 redis cluster codis优缺点,怎么实现高可用 数据同步等问题,一揽子巴拉一通
5.一致性算法 paxos raft 从拜占庭将军问题开始扯
6.mysql主从同步如何实现,巴拉了一下binlog,同步出现的时效问题等
7.技术挺好的,为什么一毕业没去大厂
8.QA 业务难点
总结
这些问题好像都比较合理,这些也算是对自己工作快两年的一个总结吧,浑浑噩噩又两年。不过由于都是自己事后凭着记忆力回写的,有错有漏在所难免,轻拍。
一趟下来这一路都是走流程,你好、我是、好的、再见。
万能模板:
- 非常感谢贵公司对我的认可。但是由于接到了更好的机会,不能接受贵公司的offer,我觉得非常遗憾。希望我们可以保持联系,以后如果有机会,希望能与贵公司由更紧密的联系。但这次我真的非常抱歉,还请贵公司理解。谢谢。
如果有人看到这里,那在这里老话重提。与君共勉,路漫漫其修远兮,吾将上下而求索。