关于后端:大厂面试一个四年多经验程序员的BAT面经字节阿里腾讯

2次阅读

共计 7054 个字符,预计需要花费 18 分钟才能阅读完成。

前言

上次写了篇欢聚时代的面经,公众号后盾有些读者反馈说看的意犹未尽,心愿我尽快更新其余大厂的面经,这里先说声道歉,不是我太懒,而是项目组刚好有个流动要赶在春节前上线,所以这几天常常加班,只能工作之余断断续续的编写,如果各位照管感觉本文排版看着有些凌乱的话,还望见谅!

背景

先说一下集体状况,我是 17 年毕业的,去年年末开始面试,算起来是四年半的工作教训,面试的公司大部分是广州这边的,有欢聚时代,字节,阿里的 Lazada,腾讯,网易等公司,最初拿到了欢聚时代和网易的 offer,除了欢聚时代还算顺利之外,面试其余的公司都有点磕绊,而且面了不止一次,最初的后果不算很现实吧,但我集体还是挺称心的,毕竟比起之前的本人,这一次的跳槽也算是一次职业生涯的跃迁。

这个过程我也学到了不少教训,面试之后我都会把记得的问题做记录和复盘,预先温习补救本人的不足之处,也使得本人在前面的面试体现中越来越得心应手。所以,别的段位我不敢说,但如果是社招五年内教训的同学,我置信我的面经对你还是会有帮忙的。

阐明

上面给大家分享我面试几间大厂的面经,我打算用真题 + 经验之谈的联合形式来给大家介绍,这里阐明一下,因为社招很多题目都跟我的项目无关,而且几面的面试题不免有反复,所以我上面的实在面试题不会写的那么全,也不倡议大家去背这些题的答案,毕竟每个人遇到的题目都不一样,咱们须要做的是理解面试考查的大略方向,而后看看那些中央有余,尽早补救本人的常识盲区,只有本身够硬才不怕钢铁的锻炼(这话有点中二,但我没词了)

字节面经

字节算是我面试最多的公司了,前前后后面了不下四次,瞎话说,字节的 hr 小姐姐还是很热心的,个别面完两天内就会微信告诉你,征询问题也是很激情的解答。

这几次面试中有两次我是在技术终面被刷的(吐了呀),一次到了 hr 面,问的常识范畴也都差不多,全副写进去没必要,给大家分享内容有些代表性的面经吧,这是我投递字节国际化电商部门后端岗位的面试题目

面试题

自我介绍

Redis 你比拟熟吧,说说它机制为什么快

有几种数据结构,底层别离是怎么存储的

Redis 有几种长久化形式

多线程状况下如何保障线程平安?

用过 volatile 吗?它是如何保障可见性的,原理是什么

MySQL 的索引构造,聚簇索引和非聚簇索引的区别

MySQL 有几种高可用计划,你们用的是哪一种

说说你做过最有挑战性的我的项目

你具体负责哪局部的货色,哪些最有挑战性,说说你做了哪些优化

秒杀采纳什么计划,分表怎么做的,redis 挂了怎么办,

分表为什么要停服这种操作,如果不停服能够怎么做

你怎么避免优惠券有人反复刷?

redis 数据幂等性是怎么保障的(相似于分布式锁那种,有个 key 就行了)

设计题:

1、如果让你设计 mysql 高可用计划的话,你会优先思考哪些方面

2、抖音评论零碎怎么设计,如果退出好友关系呢?(思考到数据读取的性能,能够采纳写扩散的形式)

3、怎么设计一个短链地址,要思考跨机房部署问题

你说要哈希算法生成短链,会存在什么问题(哈希抵触),该怎么解决?(能够用布隆过滤器,然而不好管制,而且仍存在 hash 抵触)

有没有更好的计划?(自增序列算法,每次接管一个长链,就调配一个 ID,转成 62 进制再拼到短域前面)

存在的问题?(自增 id 计划如果用雪花算法,可能存在机器时钟回拨的问题,导致 id 反复,说到这里,我终于明确那家伙为什么说要思考跨机房部署问题)

该怎么解决?(用 Redis 做自增 id 生成器,性能高,但要思考持久性的问题;或者革新雪花算法,通过革新 workId 解决时钟回拨的问题)

算法题:

1、有一个数组,外面元素非反复,先升序再降序,找出外面最大的值(二分法,要思考只有一个元素和两个元素的边界状况)

2、链表深拷贝

3、统计用户在线最大峰值和人数,要准确到秒(额滴神啊,秒级这个谁受得了,我的思路只能准确到小时,面试官说没问题,前面胜利写进去跑过测试用例)

软实力:

1、你怎么评估你本人

2、你怎么看电商这块畛域,为什么要抉择电商

3、有没有要问我的

总结:很看重算法和场景设计,而且可能是因为投递电商部门,对我之前做过的电商我的项目考查十分细

腾讯面经

我面试腾讯有两次,两次都是二面挂掉的,除了第二次的二面(有道很刁钻的场景题,有空我会独自写篇文章分享),其余面试的问题都不算难,实话实说我自认为答得还不错,第二面就被刷我也是有点纳闷,算了,不发牢骚了,大家本人看看吧。

面试题

一面:

说说你做这个电商我的项目负责了哪些货色

基于什么维度分表,如果搜寻商品名称怎么办,

为什么不必分区,分区有哪些优缺点

Rocket 集群有哪些计划?

如果多主无从的状况下,a,b,c 同时可写入,但 c 挂了,那 c 的还能订阅吗

Mysql 高可用有几种计划,别离有什么特点

redis 分布式锁你们是怎么用的 (redission),原理晓得吗

redis 的热 key 晓得吗?一个热 key 导致单台机拜访流量过高,该怎么办?

散布多台 redis 的话,如果某一台缓存过期了,流量过大该怎么办?

如果有 10 台机同时生效,那该怎么一次性回源

限流是怎么做的,用阿里云的 sentinel,有几种策略 (qps,工夫)

有几种限流算法,各有什么优缺点

二面:

介绍你在我的项目中的职责和负责模块

我的项目的日活量,QPS,压测后果

我的项目是基于 Http 还是 rpc 拜访,怎么做容灾的

用到 mq 怎么做一致性解决的

怎么避免薅羊毛之类的

现有团队人数,你在团队的位置,抛开业务教训来说,你感觉为什么要找你做这个我的项目的技术负责人

你目前在钻研哪些技术,哪些业务方向

将来两三年的职业规划

对 go 有什么了解,你是基于什么目标去理解 go 的

总结:问的大多是基于我的项目和场景,二面的软实力问题有点多

阿里 Lazada

Lazada 社招的技术一共就两轮,这里不是吹牛,是我跟内推人以及面试官确认过的,过后让敌人内推完隔了半个多月才开始面试,而且是 leader 先面试第一轮,而后一面的面试官再面试第二轮,过程有点漫长,个人感觉问的还是有点难度的(不过我自认为答得还能够,被刷后郁闷了好一阵,大厂真的不好进啊)

面试题

一面:

说说你做过的我的项目

有哪些亮点,或者解决过什么问题

你说引入 mq 对支付优惠券接口做理解耦,我了解支付优惠券接口比较简单,为什么还须要做解耦这么麻烦,而且异步还会影响用户体验?

(优惠券流程挺长的,而且一次性支付多张,判断逻辑较多,拜访压力大,为了缩小 rt 和拜访压力,引入 mq 做异步入库,并且对用户体验不会有影响)

分表为什么要停服?

你们的服务最高多少 qps,每台机器,数据库能撑持多大访问量,怎么测进去的?(很麻烦的一个问题)

你说说 java 线程池吧,怎么运作的,放在队列里的工作是什么机会执行的

你们我的项目线程池怎么配置的,为什么这么配

spring bean 得生命周期

redis 为什么快?你说到反对多种数据结构,为什么这个能进步速度(不便调用原生底层的数据结构)

你还退职吗?(退职,但已申请到职)有其余 offer 吗?最快什么时候去入职

有什么问我的吗?

二面:

自我介绍

说说你最近做的我的项目,具体业务是怎么的

你说的那个商城业务是怎么的,你负责哪块

有没有遇到线上问题,怎么解决

你们用 springboot 是吧,怎么调用微服务的

Feign 底层原理看过吗

怎么改负载平衡参数

如果让你设计负载平衡,你会怎么设计

CPU 飚高有哪些起因

hotkey 有检测过吗?怎么优化的

做一道算法题吧,两个非负整数想加,后果以字符串输入

集体评估:Lazada 问我的项目方面比拟多,而且很看重性能优化,包含参数配置,架构设计之类的,八股文的话没什么大问题,总体来说这次面试还是很能考查教训的。

经验之谈

以上就是我面试这几家公司的大略题目,怎么说呢,不算很难吧,网易问的其实也差不多,就不具体列出来了,而且都算是惯例的面经题,我就不一一列出答案了,大家如果有疑难的上网搜一下,或者加我微信征询都行。

从我面试这么多轮的状况来看,这几家公司社招面试考查的范畴重点在于对求职者过往我的项目和技术场景方面的考查,八股文的话没有像校招那么全面,只不过每家公司问的常识侧重点有会有所不同。

像字节除了我的项目场景,还很看重算法,以及求职者在零碎设计方面的思考;

阿里 Lazada 比拟看重我的项目方面的架构设计,以及线上故障的排查过程

腾讯的话问的比拟多的是场景方面的思考,比方什么 Redis 某个 key 访问量飙高这种较为极其的状况,还有就是软实力方面问的也比拟多

上面说说我的心得吧,也算是给分享一下我的集体教训

1、首要条件:筹备好根底的八股文

根底,这点不必多说了,所有的面试都会问到的常识体系,尽管社招方面对根底的讲究没有那么全面,但根本的八股文还是要尽可能把握的,这部分八股文包含但不限于:

  • Java 根底语言个性(面向对象、形象、继承、多态、反射等)
  • Java 汇合(HashMap 必问、常见如数组转链表过程、1.7 和 1.8 扩容机制区别、为什么线程不平安、hash 索引计算这些都必须把握,还有 ConcurrentHashMap 的底层构造,跟 HashTable 的区别相似的也都要相熟)
  • 并发编程,不必多说,根本也是必问,毕竟线程平安是所有语言开发都会遇到的难题,也是理论我的项目开发中非常重视的一点(Synchronized 降级锁过程,和 AQS 的区别、Volatile 关键字的原理和个性、如何保障线程平安,多线程实现生产者消费者之类的)
  • JVM(不必多说,社招必问,垃圾回收算法,JVM 调优,CMS 和 G1 区别都是要理解的)

除了 Java 语言外,根本的计算机网络根底是必须要去器重的畛域,务必要把握这几块内容,如

  • 计算机网络协定及作用
  • TCP 和 UDP 的区别
  • 三次握手和四次挥手过程,顺便理解下像为什么不能两次握手那种稀奇古怪的问题
  • TCP 如何保障可靠性,哪几种机制,以及原理都要分明
  • HTTPS 原理(三次握手,验签,加密解密那些)
  • 浏览器输出一个网址执行的全副过程

网络的话把握这几块也就差不多了,而后操作系统相干的也有必要筹备下,不必太简单,就常见的那些面试题就能够,基本上只有依照下面所说的几点筹备,根底八股文这块也就差不多了,当然,不排除有些面试官会问一些刁钻又冷门的问题,对此我也只能说四个字了,

祝你好运!

2、罕用的中间件肯定要多做筹备

像罕用的中间件如 Redis、MySQL、MQ 这些是根本必问的,咱们不仅要会用,对其原理还要有肯定的理解,更重要的是,咱们面试前要尽可能筹备这些中间件异样场景的解决方案,

比方 Redis 某个 key 拜访飙高了,缓存呈现穿透了怎么做,Redis 挂了怎么保障跟 MySQL 的一致性;

MySQL 索引生效怎么排查解决,怎么做好 sql 调优;

MQ 呈现生产异样怎么办,如何保障从生产者到消费者三端的高可用,音讯沉积了怎么办等等;

这些异样根本都是面试中常常问的,网上很多大佬也都有分享过对应的解决方案,在我眼里,这些知识点都算是八股文,只有当时筹备短缺,拿个中间件纯熟分根本没什么问题。

3、简历上的我的项目是最须要花精力筹备的

我的项目这方面我就能够吹下牛 13 了,毕竟被问了这么屡次,都快成机械记忆了。

从我集体的教训上看,面试官对简历的考查大略分这么几个维度,

  • 我的项目的整体架构,蕴含分多少个服务,多少个节点,调用链是怎么的
  • 你做过的最有挑战性的某个模块性能
  • 这些性能的业务设计,蕴含数据表有哪些,用了哪些中间件,怎么跟其余服务做数据联动的
  • 你在我的项目中做了哪些优化,有没有什么成果,比方 RT 缩小 200ms,压测数据减少了 5 倍之类的,有数据撑持的话更有说服力
  • 你遇到过哪些线上问题,怎么排查故障的
  • 我的项目的 QPS 相干指标,你感觉还能怎么优化,假如有多加 10 倍的流量过去,你感觉怎么设计能力撑持得了这么高的访问量

大略这几点吧,大家从我下面写的具体面试题目也能够对应的上,基本上问的货色都蕴含在这几个维度里,从我的项目的全局到某个具体模块,一些重要的数据指标,以及整个架构的扩展性,还有异常情况的解决等等,这些货色如果你没有当时做好筹备,我敢说不可能在南征北战的大厂面试官背后胡混过关。

除此之外,我的项目中很多时候会有场景异样方面的考查,比方什么 Redis 挂了怎么办;微服务调用后面的服务调用胜利,两头的服务调用失败,怎么做数据回滚;某台服务宕机了怎么解决等等,这些相似异样场景也是常常在我的项目中被问到的,看官们如果有动向面试的话,在这方面能够须要多做点筹备,只有联合我的项目的理论业务做好应急和预防措施,这些异常情况的呈现概率是能够无效升高的。

(顺便说一句,上次写的欢聚时代面经里也波及到异样场景的内容,而后有读者留言心愿我介绍下有哪些解决方案,很浮夸的申请,但很惋惜,限于篇幅和主题我没法在这里具体介绍了,日后针对这些场景计划我会整理出来在其余文章分享的,这里先说声道歉)

持续我的项目的话题吧,总的来说,我的项目这块是最值得大家去花精力筹备的,而且从我集体的经验来看,社招面试我的项目方面的考核工夫比例至多在一半以上,很多的八股文知识点最初都会落实我的项目中的理论应用场景,比方 Lazada 的一面面试中,面试官一开始也是从八股文登程,问了一大堆 Java 线程池的货色,蕴含基本参数和运行原理那些,但最初目标还是要考查我理论我的项目中对线程池参数是如何配置的,又是如何思考回绝策略的,这些都是须要跟理论业务联合起来能力设计的更加周全,没有银弹的计划,毕竟总不可能一个百万日活的零碎和一个一千日活的零碎都配置一样的参数吧。

因而我也很倡议大家在丑化我的项目的时候,要尽可能联合业务体量去思考具体的优化点,如果你把体量吹大了 10 倍,那么也要思考好反对以后体量的技术计划,从参数配置到服务器节点都须要去事后思考,而且最好要思考与体量相配的一些重要指标如 QPS、RT 这些,这也是面试官很看重的一些点。没有欠缺的技术计划撑持,吹出来的高并发,大体量也只不过是皇帝的新衣罢了。

4、算法和零碎设计题兴许是你加强竞争力的关键点

算法这玩意怎么说呢,很多人谈之色变,因为把握的门槛很高,而且须要长久的刷题,不过也没方法,为了进大厂,这玩意咱们还真要去下点功夫筹备,但也不必太放心,把常见的题型刷多几道题就行,我遇到的算法题无非都集中在几种数据结构,像什么链表、二叉树、数组,其余的临时没碰到过,大家把这几种构造相干的热门算法题多刷刷就差不多了,如果能针对将要面试的公司去准备会更好,这种面试真题也不难找,牛客网和 LeetCode 上一大堆,要害是要长久多刷,别做二天题放三天假这种操作,没点工夫和毅力算法这玩意是积攒不了的。

还有零碎设计方面平时大家也能够多积攒一下,像什么常见的设计秒杀零碎、设计大流量热榜之类的,根本是波及到高并发大数据量相干的常见设计题都能够理解一下,一般来说,这种零碎设计题不会考查的很具体,次要是看你的设计思路和对异样场景的应变计划,这两方面长期施展的话很难有说服力,还是很须要平时的积攒和思考,大家没事的时候能够构想下异样场景之类的,而后多跟同行探讨下可行性,茶余饭后,也算是乏味的一种交换形式。

5、软实力方面不难,但也须要筹备

软实力这方面其实没什么大难度,每个人依照本人的状况答复就差不多了,个别是终面的技术面试官会比拟讲究,目标上是想理解你工作中的解决能力和将来布局之类的,至于有没有作用我就不做评断了,一般来说,软实力的题型也不会太刁钻,面试这么多年无非都是问这么几个:

  • 你将来三到五年的职业规划是什么
  • 说说你的优缺点,你跟同龄人比劣势在哪里
  • 你工作中遇到的最大难题是什么,不局限于技术方面,你是怎么协调的
  • 如果你来咱们这边,你想得到哪些播种

这些题目没有固定答案,因人而异,依照本人的想法去表白就能够,但我还是倡议大家在面试前能够筹备下这方面的话术,不为别的,至多在面试过程能做到表白晦涩清晰,能提前准备的点尽量别走到长期施展的那一步。

说到这我想吐槽一下,技术性的面试不是不能够问软实力的货色,但在我看来,这玩意最多算是个辅助考查作用,毕竟没什么答复门槛,很多人都能答出来,如果不从技术性的问题登程,而是问一大堆这玩意货色筛选人,那对于背景较差的求职者来说,恐怕就没什么劣势了吧。(集体浅见,不喜勿喷)

6、心态要好

这一点也算是我对大家最浮夸的忠告了,就不论遇到什么状况,尽可能放弃心态好,当初大环境不好,很多公司招人的规范其实或多或少在变得更高,有可能你费尽心思筹备了很久,但面试的过程和后果还是不尽人意,这也是失常的,毕竟是大厂嘛,要是那么好进就不会那么多人心向往之了。

而且不是一次失败就决定后果了,其实大厂的机会始终都有的,一个岗位没有通过面试最多就锁半年到一年的工夫,过了这个工夫咱们还是能够去从新面试的,而且有时候也不必期待那么长,这个部门没过说不定能够面试其余部门的岗位,只有总结经验,屡次尝试,最初后果再差也比啥都不争取强。

最初

淋淋洒洒写了这么多,用真题联合经验总结,前后花了一周的工夫,我也算是给大家分享了很有价值的面经了,如果看官们感觉写得还不错的话,还望能给鄙人三连反对一下,没有三连,举手之劳点个赞也行啊,我都受用的,哈哈。

过几个月就是金三银四的求职淡季了,如果你也正在找机会,并且也是几年工作教训的话,我想我的文章或多或少能给你些许帮忙,这里也衷心祝愿想跳槽的各位看官,心愿你们都能拿到现实的 offer。

作者:鄙人薛某,一个不拘于技术的互联网人,喜爱用通俗易懂的语言来解构后端技术的知识点,想看更多精彩文章的能够关注我的公众号,微信搜寻【鄙人薛某】即可关注

正文完
 0