补发字节面经(或者说经验总结)

基本情况

意向书 get,补发面经,希望能对大家有所帮助。

本人基本情况:意向地深圳,后端研发,目前主语言Java,本硕普通985学渣,某公司实习中。

由于面试时间已经较为久远,本文就不按照轮次划分了,按照我自己梳理的顺序划分。

有的内容记不清楚了,可能有遗漏;有的内容可能没有问到,但我觉得需要复习,也写出来供大家参考。

所以实际上不算是面经了,算是个经验总结

主要分享下个人经验与基础知识问题,算法题目每个面试官都问的不同,没有参考价值,唯一的建议是刷题。。。

由于每个人的情况不同,本文按照通用性排版,把最通用的放在前面。

本人很菜,懂得有限,轻喷轻喷、、、

面试注意项

个人认为,下面几点是很基本的要求,不算加分项,但做不到绝对是扣分项。

  1. 守时:别迟到,最好提前十到五分钟进入面试房间(视频面),摄像头耳麦等提前一天调试好;
  2. 耐心:如果面试官有事推迟,保持耐心,不要焦躁;
  3. 礼貌:基本素养;
  4. 诚实:简历要诚实,问答要诚实,不会的问题不要强答;
  5. 保持微笑:即使身处险境,也要保持微笑;
  6. 保持谦卑:切勿狂妄。

基础知识(算法岗的同学可以关掉了)

  1. 计算机网络

    1. 从输入 URL 到页面加载完成,中间发生了什么(基本必问的问题了,因为这个问题能考察对计算机网络整体的掌握程度,以及方便面试官扩展问题);
    2. 多进程多线程浏览器(比如 Chrome),主控进程,插件进程,GPU进程,每个 tab 一个进程,tab 进程内有网络请求线程等;
    3. 协议栈各层各说一些协议(记一下常用的);
    4. HTTP(基本描述,Method,协议版本及新版本特点,请求响应报文结构,常用请求头字段,常见响应状态码(每类记几个),RFC规范(知道这个词儿是啥就行了)等);
    5. 单拎出来的缓存问题,结合状态码 304 可能问到,相关头字段,If-Modified-Since 和 Last-Modified,If-None-Match 和 ETag,它们的区别等;
    6. 单拎出来的 cookie 和 session 问题,搞清楚它们是干啥的,相关的头字段,其中 session 可能扩展到分布式上;
    7. 单拎出来的跨域问题,了解下浏览器同源(协议,域名,端口)政策,对后端的限制(AJAX等,前端问题暂不考虑),解决方法(JSONP,WebSocket,CORS),CORS(Cross-Origin Resource Sharing)相关内容,头字段 Origin,Access-Control-Allow-Origin 等;
    8. HTTPS(基本描述,主要作用,和 HTTP 的区别,SSL/TLS 握手过程,为什么过程要这样设计,对称/非对称加密,公私钥,证书,签名,CA,浏览器校验,加密算法(这个我并不懂)等);
    9. DNS(基本概念,流程,缓存,hosts 文件,DNS服务器层级,迭代/递归查询等);
    10. SOCKS(了解下这是干啥的,以及基本流程);
    11. 传输层(端到端通信服务,多路分解与多路复用,端口号的作用,套接字);
    12. TCP(必问,需要清晰掌握,简单列举一下)
      1. 基本特点,报文头大小与具体结构,序号/确认号作用,控制位及各自含义,可选头的时间戳(简单了解);
      2. 面向连接,三握四挥(记清楚),握手的 SYN 洪泛攻击,挥手的 FIN-WAIT-2 以及 TIME-WAIT 状态,两次挥手后的 TCP 半开,四次挥手后的等待,MSL 时间,time-wait 的快速回收,fin-wait-2 的设定时间;
      3. TCP 连接能否感知对方是否在线(规范不能,实际可以),TCP 保活机制(SO_KEEPALIVE),保活参数(保活定时,失活前检查参数等),应用层面保活(心跳包,ping/pong 包等));
      4. 可靠传输,结合序号/确认号说明,停止并等待 ARQ,结合流水线/滑动窗口的连续 ARQ,超时重传机制,RTT,RTO,差错恢复机制,GBN,SR,快速重传(冗余 ARK)等;
      5. 流量控制,目的(防止接收方缓存溢出导致分组丢失),基本原理,不足及改进(匹配相差一个 RTT,接单了解一下);
      6. 拥塞控制,目的(避免网络拥塞),基本原理,慢启动,拥塞避免,快速回复,快速重传,AIMD(加法增大乘法减小),导致网络通讯波动(同时进入控制状态,时大时小),随机早期检测算法(了解一下);
    13. UDP(可能作为对比来问,无连接,尽力而为,面向报文,无各种控制,一对一,一对多,多对多,首部大小及结构,校验和计算过程(求和,溢出回卷,反码,校验等),可能间插着问问正反补码);
    14. TCP,UDP 伪首部,虚拟的数据结构,参与计算校验和,简单了解;
    15. 网络层(主机到主机间的逻辑通信);
    16. IP (感觉其实传输层以下问的不多,能说出来就行了。v4/v6,点分十进制,各类地址空间,DNS,NAT,DHCP,路由寻址,EGP(BGP 看一下留个印象),IGP(RIP,OSPF 留个印象));
    17. ICMP(知道类型 0 和类型 8 报文是啥(Echo 响应与请求),ping 的流程);
    18. ARP(地址解析协议,了解一下流程什么的);
    19. MAC(介质访问控制协议,简单了解一下);
  2. 关系数据库(实际上主要指 MySQL)

    1. 范式,背下来吧;
    2. 基本 sql 语法(这个我真记的不咋行,因为平时用也都是要查查的);
    3. 数据结构(B 树,B+ 树,插入分裂,删除合并等,结合 MySQL InnoDB,结合聚簇索引,B+ 树的好处(B+ 树方便遍历,内容在叶子所以效率稳定,IO 吞吐更大开销低));
    4. 索引
      1. 哈希索引(InnoDB 自适应);
      2. 聚簇索引/非聚簇索引;
      3. 主键索引/唯一索引/二级索引;
      4. 单列索引/联合索引;
      5. 覆盖索引;
      6. 最左匹配,查询回表等;
      7. 索引优缺点(加快检索速度,加快多表连接,额外空间开销,维护索引的额外时间开销);
      8. 适合不适合建立索引的字段等;
      9. 索引无法使用的情况(模糊匹配,OR 前后没有同时使用,联合索引的最左匹配等);
    5. 事务(集中式)
      1. 事务的基本概念,事务的提交,回滚等;
      2. ACID特性;
      3. 事务的并发问题(第一二类丢失更新,脏读,不可重复读,幻读);
      4. 隔离级别(读未提交,读已提交,可重复读,串行化);
      5. 事务的支持,InnoDB;
    6. 数据库锁
      1. 锁的概念和大类别(悲观并发控制,乐观并发控制,MVCC 等);
      2. 数据库锁的类别(主要是悲观锁,表锁/叶锁/行锁,意向锁,共享锁/排它锁,更新锁,记录锁/间隙锁/Next-Key锁等);
      3. InnoDB,索引加锁,行锁的使用(比较执行代价),行锁死锁(所以行锁复杂),意向锁(解决行表锁冲突),行锁(记录/间隙/Next-Key),更新锁(避免先S后X的死锁)等;
      4. 锁时效性(临时锁,持续锁);
      5. 加锁协议(一/二/三级加锁协议,二段锁协议(充分条件),一次封锁法等);
      6. MVCC 的概念,时间戳版本号,快照版本与当前版本,适用场景等。
  3. NOSQL(主要指 Redis,本人仅限于有限的使用和了解)

    1. 基本数据类型;
    2. 部分支持事务,单线程(串行,无锁)等;
    3. 淘汰策略(六种,可能挑出来 LRU 问);
    4. 持久化问题(RDB 快照与 AOF 操作日志);
    5. zset 的数据结构(跳表,了解一下);
    6. 消息队列(不是 Redis 的设计目标)。
  4. 基础数据结构

    1. 数组,链表,树,堆,队列,栈,图,都看一看概念,别到时候卡壳,结合语言;
    2. BST,AVL,红黑都了解一下。DFS,BFS 结合回溯法和分支法。图感觉我们搬砖的用的也不多,看看最短路径之类的;
  5. 基础算法方面

    时间/空间复杂度的含义,基本二分,变种二分,基本排序以及它们的各种特点,六大基础算法类型等;

    小心动规。。。

  6. 其他

    1. 进程与线程(可以结合语言说);
    2. 死锁等;
    3. 分布式数据库事务,CAP,BASE,二次提交协议等;
    4. 正则表达式,简单了解一下;
    5. 设计模式,简单了解一下;
    6. 面向对象概念,特点,原则;
    7. 各种工具的使用,如 Git,Maven等;
    8. Linux 的基本使用;
    9. IO模型(同步/异步,阻塞/非阻塞),BIO,NIO,AIO,IO多路复用等;
    10. 反向***,负载均衡,微服务架构的注册和管理,多节点缓存,CDN 内容分发网络,DNS 轮询等,可能结合具体的工具说,如 Nginx,ZooKeeper 等;
    11. Twitter雪花算法了解一下;
    12. 海量请求问题,海量数据问题;

Java 相关(非 Java 的同学简单参考下)

  1. 有时间的把《Java 编程思想》,《Java 核心技术 卷 I》,《深入理解 Java 虚拟机》翻一下;
  2. 基础知识,如重载重写,继承多态,关键字等,记清楚;
  3. Java 数组,容器集合包/类,常用容器,以及相应静态工具包/类,HashMap 底层(红黑树警告),ConcurrentHashMap 原理等(1.8前后变化,分段锁变成 CAS 了);
  4. IO/NIO 包,主要结合 IO 模型说(实际上 IO 包已经用 NIO 包重新实现过了);
  5. 并发(包),Java 关键字,锁等
    1. Thread,Runnable,Callable,Future,ThreadLocal 等,会用,知道区别;
    2. 线程池体系,ExecutorService,ScheduledExecutorService 等接口,ThreadPoolExecutor,ForkJoinPool 等实现类,Executors 静态工厂类,线程池的核心参数,几种不同类型的工厂线程池等,会用,了解一下;
    3. 几种常用的阻塞队列,这里很大可能会让写个简单的阻塞队列(生产者消费者),参考下 ArrayBlockingQueue 里面的,用 ReentrantLock 和 Condition 简单写一下就好了;
    4. 几种并发构件,倒计时栅栏,循环栅栏这些,说实话我不常用,简单了解下吧;
    5. synchronized 关键字,首先知道它是干啥的,其次了解咋实现的,我认为至少要讲到 monitor 面试官才会满意,其间可能牵扯到堆中对象头结构(这里还可能牵扯到数组的 length 属性咋来的),还可能牵扯到锁优化(偏向锁,自旋锁,轻量级锁,锁粗化,锁消除(这里还可能牵扯到对象逃逸等),对象头的 Mark Word 复用等);
    6. Lock,主要是 ReentrantLock,要了解 AQS 的基本工作原理,包括同步队列和 Condition 的等待队列等(和 monitor 的队列很像),了解它的 states 状态是用 CAS 算法更新的,了解公平/非公平,了解自旋/挂起;
    7. 了解 CAS 的基本原理,知道 Java 中的 Unsafe 类(知道用这个东西就行了,直接操作内存的,基本用不到);
    8. 原子类,信号量,了解一下;
    9. 了解经典的进程线程模型(内核线程,轻量级线程,用户线程等),了解 Java 的线程调度策略(抢占式,系统决定),了解 Java 线程优先级(不一一对应,程序不应该依赖于优先级);
    10. 了解 JMM,了解可见性问题(由此引出 volatile 关键字),知道 volatile 能解决可见性(区别于原子性)和重排序问题,由此引出有序性的先行发生原则(happens-before)。
  6. JVM 运行时内存区域(虚拟机栈,本地方法栈,程序计数器,堆,方法区(1.8前后变化,永久代被元空间替代了)等,了解栈和堆的区别(小细节:非逃逸对象的栈上分配),了解线程私有区域和共享区域等(比如一个怪问题,布尔值所占的空间大小));
  7. 垃圾回收算法,引用计数法,可达性分析法(引出强软弱虚四种引用),两次标记(引出 finalize 方法),标记清除(碎片,CMS),标记复制(Eden,Survivor,分配担保,新生代),标记整理(老年代),分代,GC 停顿,Stop The World(砸瓦鲁多),安全点/区域等;
  8. 垃圾回收器(七个,记一下特点);
  9. JVM 对象分配回收策略(Eden 优先,大对象直接进老年代,长期存活进老年代,动态年龄判定等);
  10. 类加载器(Bootstrap,Extension,Application 以及自定义的),双亲委派(能否破坏,loadClass 方法),加载流程(加载,验证,准备,解析,初始化),加载时候生成方法区对应的类的数据结构,以及生成对应的 class 对象(小细节问题:数组没有对应的类,怎么生成的),准备过程(分配类变量空间,赋值后延到初始化),初始化过程(结合 Java 新建对象各部分执行顺序分析);
  11. class 对象引出反射,引出***(Java ***和 CGLib,了解一下);
  12. 框架(主要指 Spring)了解一下,IOC 和 AOP 的概念与原理,感觉框架问的并不多(实际上 Java 问的就很少)。

总结

总的来说差不多就是这样,可能有遗漏。

说起来面试,其实也有一定的运气成分在。

本人没有什么面试经验,字节这次算是第一次正经面试(想想也是够野的),而且还在实习,复习时间少的可怜,感觉很多地方都答的一般。

本来我都没敢投(听说太菜会被记录),想先拿其他的试试,结果 OPPO 把我简历挂了,一气之下就投了,也是塞翁失马,焉知非福啊。

所以,人,一定要有梦想!

愿各位八月能斩获佳绩,与诸君共勉。

#字节跳动##面经##校招##Java工程师#
全部评论
普通985西交大😭
4 回复 分享
发布于 2019-08-04 23:31
五个小时八个回复,还有俩是我自己,哇太真实了🤣。
1 回复 分享
发布于 2019-08-04 20:07
问得很深,范围很广。宇宙条牛逼
点赞 回复 分享
发布于 2020-03-04 19:05
tql
点赞 回复 分享
发布于 2020-02-28 03:02
我想问一下视频面可以只准备耳机,麦克风好像不好找。。。。。😂
点赞 回复 分享
发布于 2020-01-24 12:20
头像应该是卫宫家的晚饭吧
点赞 回复 分享
发布于 2019-09-25 10:55
牛逼,表达一下
点赞 回复 分享
发布于 2019-09-25 10:54
58赞,541收藏太真实了
点赞 回复 分享
发布于 2019-09-25 10:18
很详尽的复习提纲,谢谢分享!
点赞 回复 分享
发布于 2019-09-24 22:25
大佬,是视频面吗,有写代码的环节吗
点赞 回复 分享
发布于 2019-08-30 16:41
c9科班的还说普通..
点赞 回复 分享
发布于 2019-08-27 23:56
oppo还挂你们学校的
点赞 回复 分享
发布于 2019-08-13 11:04
你觉得字节各面有什么区别啊,比如难度,面试范围等方面
点赞 回复 分享
发布于 2019-08-12 13:52
收藏
点赞 回复 分享
发布于 2019-08-06 08:06
询问大佬,秋招参加了,签了三方就不能参加春招了?😫
点赞 回复 分享
发布于 2019-08-05 17:19
大佬tql!感谢
点赞 回复 分享
发布于 2019-08-05 14:19
这基础有点深啊😂
点赞 回复 分享
发布于 2019-08-05 13:48
点赞 回复 分享
发布于 2019-08-05 12:51
tql
点赞 回复 分享
发布于 2019-08-05 11:01
感谢,好详细!
点赞 回复 分享
发布于 2019-08-05 10:43

相关推荐

美团面了大概四十分钟,全程细节拷打,面完汗流浃背,感觉过不了了,看面经吧1.说说你平时是怎么送餐的?直接傻瓜式回答拧车把就走了2.如果送餐途中下雨了,你会怎么办?回答找个地方躲着,然后就问我那订单超时怎么办,答不出来了。。。3.如果有个地方爆单,同时有多个不同楼层但是是同一栋楼的地方下单,可能是什么情况?答不出来,乱蒙了个可能在开派对,有没有大佬知道的4.如果到了商家,但商家还没把餐备好,你会怎么做?直接回答干等着了,然后感觉这样回答不太好,又补了句我可能会催催商家。。。5.实际送餐过程中有没有考虑过使用多部手机?我说配送账号就一个,没必要使用多部手机。面试官好像不太满意6.送到餐了,但客户-直不来取餐,你会怎么办?阻塞等待吗?我说会打电话催促客户,客户-直不来的话就把餐放到地点,然后拍照走人,然后问我这样做有没有考虑过外卖丢失的情况,外卖丢失怎么办,完了,又掉进坑了7.有没有送错餐的情况?我说实际没遇过这种场景,面试官又不太满意了。。。搞不懂,- 定要有实际解决过出错的经验吗。。。没出错不是更好吗。。。8.餐箱满了,但你又接单了,餐箱放不下了,出现了Out Of Box,如何解决?我说一般我会每次接单前检查下餐箱容量,有空间才会接新的单,又追问这样会不会影响接单效率,如果被其它骑手抢单了怎么办?完了,双掉进坑了。。。9.送餐过程有没有把外卖进行分类?我说我一般电动车前后有两个餐箱,前面放带有汤水易撒的,后面放比较干的外卖。总算是能答出一题了10.看了下我送的最快的一单,问我为什么那一单10s就送达了。因为客户就在店里面,当堂点外卖是为了用券。。。我这个订单是不是有点水了,但鼠鼠是真没什么订单拿得出手了做了道算法,一道贪心,给定单子信息,寻找最短配送路线,之前刷过,10分钟a出来了
美团一面2072人在聊 查看10道真题和解析
点赞 评论 收藏
分享
04-24 10:43
已编辑
西安交通大学 Java
Offer已发 真快啊 面试官真不骗我#美团#    面试官这两面都特别特别特别好,特别温和,我之前没准备好时面过腾讯、淘天,场面很尴尬,但是美团的面试官问题就算难,回答不上来也不会让你难堪,会继续接下去。还会给你解答问题,很包容我。(AI专业没学过计算机组成原理,他问了我个计组的基础知识我没说上来很耐心的跟我讲)一开始以为一面完就挂了,没想到第二题就发了二面通知,二面面试官更是重量级的好啊,超级和蔼温和,跟你闲聊,全程乐呵呵。体验极佳。已经不想再继续面了,找到一个实习够了。打算一辈子都点美团外卖了 实习不找咯,秋招再来4.17美团一面手撕: K个一组反转链表 hard 力扣100原题一面80min:自我介绍 介绍一下项目 从写的专业技能里挑着拷打动态代理讲一下  为什么JDK动态代理只能代理 实现接口的被代理类JWT令牌是什么? JWT登录过程逻辑讲一下 Threadlocal的原理?如何能让所有Threadlocal互相共享值不再线程隔离目前只有一个Redis 但是数据量太大了 无法在它中缓存下 怎么办? Redis 持久化两种方式? AOF中 系统调用是哪个函数?哨兵讲一下float数为什么不精确?线程池说一下参数,线程数设置多少合理?不要说io密集型 cpu密集型大多数情况下并不能分清是哪种类型消息队列中如何保证消息的有序性死锁的必要条件 4个  如何避免死锁?如何优化慢查询?过程 explain中extra中某些参数含义redis中list的底层数据结构? 压缩列表为什么不好?如何解决的使用过哪些分布式锁? 除了Redisson以外还了解哪些4.21美团二面闲聊+项目 无手撕代码闲聊一定会涉及到AI、对美团和其他互联网大厂的倾向(可能美团被太多人拒OFFER拒怕了)自己如何学习Java  展现自己的学习能力如何入手一个新项目 新技术对AI大模型的看法有哪些  如何看待?家在哪里 以后打算的就业方向Nginx的正向代理和反向代理 讲讲线程池异步创建订单讲一下项目介绍多服务器间Session共享介绍一下 短信登录模块 讲一下#实习进度记录##实习进度记录##牛客AI配图神器#
查看25道真题和解析 实习进度记录
点赞 评论 收藏
分享
评论
99
874
分享

创作者周榜

更多
牛客网
牛客企业服务