24天前许愿了几个offer,最终斩获了最想要去的字节offer(虽然当时也内心想着即使其他的offer拿到了也不一定去)
期间也经历了几番折腾,一度以为要挂掉了,但反而塞翁失马焉知非福,反而base在了一个更合适的团队中
也不得不说,可能自己的潜在的一些底层思考方式上还是与“字节范”有一点相符,一路上聊过的面试官也都聊的很开心很投缘,也觉得能够加入这样的团队,工作起来也会很开心
好了,碎碎念说完,那就开始切入主题——
【主题背景】:
30岁、5年外包工作经验、重点本科
【面试岗位】:
字节Java岗
【面试时间】:
2个月,3轮面试
进入正题
一面
1、介绍一下自己, 为什么选择出来看看机会
2、聊项目, 警报怎么做的, 统一接入监控项怎么做的
3、聊项目, 配置中心项目, 问实时配置推送怎么做
4、讨论为什么选择所有的组件依赖放在配置中心中控制
5、我现在要做一个限流功能, 怎么做?这个限流要做成分布式的, 怎么做?
6、怎么抢锁?锁怎么释放?
7、加了超时之后有没有可能在没有释放的情况下, 被人抢走锁?怎么解决?
8、不用 zk 的心跳, 可以怎么解决这个问题呢?
9、假如这个限流希望做成可配置的, 需要有一个后台管理系统随意对某个 api 配置全局流量, 怎么做?
10、某一个业务中现在需要生成全局唯一的递增 ID, 并发量非常大, 怎么做
11、算法题:M*N 横向纵向均递增的矩阵找指定数
12、有什么想问我的?
二面
1、平时用的工具链和技术栈是什么?
2、golang 踩过坑吗?这段 golang 代码有没有 bug?
3、Java 中 HashMap 的存储, 冲突, 扩容, 并发访问分别是怎么解决的?
4、拉链法中链表过长时变形为红黑树有什么优缺点?
5、HashMap 的并发不安全体现在哪?
6、HashMap 在扩容时, 对读写操作有什么特殊处理?
7、ConcurrentHashMap 是怎么做到并发安全的?
8、Java 有哪些锁机制, 分别有什么特点?
9、知道 CAS 吗? Java 中 CAS 是怎么实现的?
10、MySQL 的存储引擎用的是什么?(InnoDB)为什么选 InnoDB?
11、MySQL 的聚簇索引和非聚簇索引有什么区别?
12、B+树和二叉树有什么区别和优劣?
13、针对一个场景设计索引,具体场景忘记了,反正考察的是联合索引与列选择性的知识
14、现有一个新的查询场景, 要怎么解决?
15、假如要查 A in () AND B in (), 怎么建索引?
16、查 A in () AND B in () 时, MySQL 是怎么利用索引的?
17、假如查询 A in (), MySQL 是针对 N 个值分别查一次索引, 还是有更好的操作?
18、用过 Redis 的哪几种数据结构?ZSET 是怎么实现的?
19、zrange start, stop, 总长度为 n, 复杂度是多少?
20、Kafka 的消费者如何做消息去重?
21、MySQL 去重、Redis 去重、假如场景量极大且允许误判,布隆过滤器也可以
22、介绍一下 Kafka 的 ConsumerGroup
23、Kubernetes 和 Docker 用得怎么样?
24、时序型数据库的存储结构是怎么样的?
25、LSM 树了解吗? 是一种什么存储结构?
26、在生产中用过 Cassandra 和 RocksDB 吗?量有多大?
27、Cassandra 的墓碑机制是什么?
28、算法题:牛客题霸上的原题,可以去看看:NC57 反转数字
三面
1、聊项目和工作经验
2、用 Kubernetes 的过程中踩过哪些坑?
3、考虑一个业务场景: 头条的文章的评论量非常大, 比如说一篇热门文章就有几百万的评论, 设计一个后端服务, 实现评论的时序展示与分页
4、假如用 id 翻页的方式, 数据库表如何设计?索引如何设计?
5、假如量很大, 你觉得需要分库分表吗? 怎么分?
6、分库分表后怎么查询分页?
7、分库分表后怎么保证主键仍然是递增的?
8、现在需要支持深分页, 页码直接跳转, 怎么实现?
9、瞬时写入量很大可能会打挂存储, 怎么保护?(断路器)
10、断路器内部怎么实现的?(可以用 ringbuffer)
11、断路器会造成写入失败, 假如我们不允许写入失败呢?
12、算法题: N 场演唱会, 以 [{startTime, endTime}…] 的形式给出, 计算出最多能听几场演唱会
拿下字节offer之前,我做了什么?先从准备简历,简历是门面,更是敲门砖,能否拿到大厂的面试机会,就要看自己的简历如何;再到准备——刷面试题,面试字节这种大厂,我们肯定是要对大厂面试有一定的了解,才会清楚面试官会问什么;最后对于的知识储备,也就是所谓的技能提升等等~
如何写好简历
简历其实就是一个人的门面,大家都是互不相识,那面试官如何能快速的知道你的大概信息,那就会从简历开始。下面给大家说一下写简历应该注意哪些事:
- 简洁,明了:在我的简历上,我觉得不会搞得很花哨,会很简单明了,抓住面试官的眼球,让面试官能很快速的就能抓到重点信息,不会让面试官沉浸在所谓的花哨之中* 突出重点:一般来说面试官会根据你的简历作出很多针对性的提问,而一般提问的顺序都是从前到后,从上到下去的,但是如果你把你不是太熟悉的,或者你不是很精通的写在前面,面试官提问的时候答得不是很好,哪怕你后面答得非常棒,可能也会降低很多分数,相反的如果你把你特别熟悉的都写在前面,如果前面的问题答得非常不错,哪怕后面的问题有一些瑕疵,对面试官对你的打分也会提升很多的。* 注意用词:我看过很多人写简历都是写精通Java多线程,精通Spring等等,这种基本都是一面就死,一般来说如果你写精通Spring,那么我认为你基本上可以自己独立的开发一个Spring这种框架,如果你写熟悉,我就认为你看过Spring很多源码,对其中的部分原理比较熟悉,如果你写了解,我就会认为你会Spring的各种基本用法。所以你的每项技能到底是精通,熟悉,还是了解 这个用词是特别重要的,面试官会根据你所写的来验证你是否是有这个实力。再举一个例子,每个人都会有自己的项目经验,当你写项目的时候,自己的角色用词也是很重要的,到底是项目负责人,还是项目参与者,面试官会根据你不同的角色来问你所进行的相关工作,如果你夸大其词,这种是很容易被发现的。
猛刷面试题
刷面试题实际上是最具有“急救”效果的办法,所以我在面试字节之前就是猛刷面试题。关于刷题,我是真的有话要说:
Java面试宝典
Java集合面试题
多线程/并发面试题
Redis面试题
Spring面试题
MyBatis面试题
Spring Boot面试题
RabbitMQ面试题
算法面试题(字节面试必问)
BAT大厂面试真题+专题训练
我的知识储备
说道我的知识储备,那就不得不给大家说一下我这24天经历了什么,面试字节,这对于我来说就是一个挑战,所以我需要的就是技能的提升,关于技术点的总结,我有话说:
Java核心笔记
这份Java狠心笔记文档包含了JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算。
JVM
JAVA基础
JAVA集合
Java中高级核心知识点
数据结构与算法
必会工具
面试指南