【面经分享,附答案】字节系统架构,一面,后端开发

一面

总结:完全没有问项目问题,计算机网络部分问的特别细!死问我数据链路层的传输原理,答得磕磕绊绊,有好些题都没有答得很好,算法题倒是挺简单的,最后反问,面试官说我答得挺好的,但有些地方细节上还需要再学习优化下。

1)HTTP 三次握手,状态码,交互细节

HTTP 三次握手就是 TCP 三次握手,HTTP 是应用层协议,它的任务是与服务器交换信息。至于怎么连到服务器,怎么保证数据正确,HTTP 不管。事实上它总是假设数据是正确地传输的。

而 TCP 的任务是保证连接的可靠,包括防丢、防错。为了做到这些,在初次连接时要进行3次握手,以保证确实连接到了目标机器。而连接上后具体传送什么数据,TCP 是不管的

状态码:1xx 信息类提示,2xx 请求成功,3xx 请求重定向,4xx 服务器异常,5xx 客户端异常

交互细节应该就是 TCP 三次握手

2)为什么要三次握手

3)四次挥手,状态码,传输细节,为什么握手要三次,挥手要四次

4)数据链路层怎么传输数据的,展开说说

5)ARP 协议中网关怎么去转换 IP 地址到对应 MAC 地址的

关键点:ARP 高速缓存、广播 ARP 请求报文、ARP 响应报文

6)如果数据包不在当前子网内,怎么传输到目标子网网关的

首先,如何判断这个数据包的目标 IP 地址和当前主机的 IP 地址是否在同一子网(网段)内?利用子网掩码可以判断两台主机是否中同一子网中。若两台主机的 IP 地址分别与它们的子网掩码相 “与” 后的结果相同,则说明这两台主机在同一子网中。

其次,网关到底是什么呢?网关实质上是一个网络通向其他网络的 IP 地址(一般都是路由器的 IP 地址)。而默认网关(Default Gateway)就是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包

当一台计算机发送数据时,根据数据包中的目标 IP 地址,通过子网掩码来判定目标主机是否在本地子网中,如果目标主机在本地子网中,则(通过二层设备 - 交换机)直接发送即可。如果目标不在本地子网中则将该信息送到缺省网关/路由器,由路由器将其转发到其他网络中,进一步寻找目标主机。

7)MySQL 的行锁怎么实现的

InnoDB 行锁是通过给索引上的索引项加锁来实现的

8)MySQL 的事务,展开说说

先解释下 ACID 特性,然后说下 MySQL 如何保证 ACID 的:锁来保证隔离性(可扩展四种并发问题、四种隔离级别、行锁的三种算法、着重提一下 Next-Key Lock 解决幻读问题 ),redo log 保证持久性和原子性(持久性对应 WAL 和 CheckPoint,原子性对应 redo log 两阶段提交),undo log(MVCC)保证一致性

9)MySQL 索引了解吗,索引是怎么实现的

10)索引有哪些,介绍下

聚簇索引、非聚簇索引、唯一索引、联合索引、覆盖索引、前缀索引

11)联合索引中间可以有 null 值吗,为什么,测试过吗?

12)B+ 树的特点,原理

13)B+ 树索引和 Hash 索引的区别,优劣

14)了解死锁(DeadLock)吗

什么是死锁?两个线程互相请求对方的资源,并且不释放自己的资源,形成循环等待,导致死锁。

死锁的四个必要条件?互斥条件、请求和保持条件、不剥夺条件、循环等待条件

如何避免/预防死锁?破坏四个必要条件其中之一即可:

  • 破坏互斥条件:不可行
  • 破坏请求和保持条件:线程启动时一次性请求完所有需要的资源,运行途中不允许请求其他资源
  • 破坏不剥夺条件:请求新的资源时得不到满足,必须释放已经保持的所有资源,待以后需要时再重新申请
  • 破坏循环等待条件:给资源编号,只允许顺序申请资源

15)MySQL 怎么解决死锁的

16)平时遇到过死锁吗,怎么解决的

17)JVM 的垃圾清除说一下

18)垃圾收集算法有哪些

三大垃圾收集算法:

  • Mark-Sweep(非移动式算法,不需要 STW)
  • Mark-Copy(新生代垃圾收集算法,移动式算法,需要 STW)
  • Mark-Compact(移动式算法,需要 STW)

19)介绍下知道的垃圾收集器有些什么

新生代:

  • Serial(Mark-Copy、单线程)
  • ParNew(Mark-Copy、多线程)
  • Parallel Scavendge(Mark-Copy、多线程;关注吞吐量;自适应调节策略)

老年代:

  • Serial Old(Mark-Compact、单线程)
  • Parallel Old(Mark-Compact、多线程)
  • CMS
    • Mark-Sweep、多线程;
    • 追求低延迟;
    • 四个阶段(初始标记、并发标记、重新标记、并发清除),第一和第三阶段需要 STW;
    • 采用 “增量更新” 解决 “对象消失” 问题;
    • 一般还会设置 Serial Old 做老年代收集预案,因为 CMS 会出现并发失败问题 “Concurrent Mode Failure”(无法处理“浮动垃圾” 导致堆被完全占满而报错 or CMS 垃圾收集运行期间预留的内存无法满足程序分配新对象的需要),这时候就会触发 Serial Old 用 Mark-Compact 算法做老年代收集;
    • CMS 基于 Mark-Sweep 算***有大量空间碎片产生,往往会出现老年代还有很多剩余空间,但就是无法找到足够大的连续空间来分配当前对象,而不得不提前触发一次 Full GC

面向全堆:

  • G1
    • Mark-Copy、多线程;
    • 四个阶段(初始标记、并发标记、最终标记、筛选回收),第一和第三和第四阶段都需要 STW;
    • 采用 “原始快照” 解决 “对象消失” 问题;
    • 面向局部收集、基于 Region 的内存布局;
    • 非纯粹地追求低延迟,而是在延迟可控的情况下获得尽可能高的吞吐量;
    • G1 无论是为了垃圾收集产生的内存占用还是程序运行时的额外执行负载都要比 CMS 要高;
    • 目前在小内存应用上 CMS 的表现大概率仍然要会优于 G1,而在大内存应用上 G1 则大多能发挥其优势

20)垃圾的判断方法,引用计数法为什么用的没有 GCRoot 的多,缺点是什么,为什么

两大方法:

  • 引用计数法(无法解决循环引用问题)
  • 可达性分析法
    • 两个阶段:根节点枚举、对象图遍历
    • 可扩展根节点枚举必须进行 STW(OopMap,安全点和安全区域);三色标记法分析为什么对象图遍历理论上也必须进行 STW(浮动垃圾、对象消失),因为这个阶段时间较长所以设计了两种方案(增量更新、原始更新 SATB)使得对象图遍历不需要进行 STW

21)平时测试过 JVM 的垃圾清除吗

22)Redis 的了解,介绍下

可以说下 Redis 是基于内存的,单线程工作的缓存,先介绍下为什么说 Redis 是单线程的(关键点:IO 多路复用、文件事件处理器);然后可以介绍下除了基于内存和单线程,Redis 还有哪些特性使得它那么快(Redis 特殊设计的数据结构 ziplist、skiplist,SDS 等;Redis 的虚拟内存机制)

23)Redis 的持久化

两大持久化机制:

  • RDB:存储数据库状态,二进制文件 dump.rdb;SAVE、BGSAVE fork 子进程自动间隔性保存
  • AOF:追加写入,存储命令(先写入 AOF 缓冲区,根据 appendfsync 参数决定何时写入并同步磁盘);AOF 重写、fork 子进程 AOF 后台重写(AOF 重写缓冲区)

24)算法题:删除链表的倒数第 k 个节点。

#Java开发##后端开发##面试##Java找工作##读书笔记#
全部评论
哇 大神 笔试做得很全面
点赞 回复 分享
发布于 2022-08-08 22:43
深圳嘛?
点赞 回复 分享
发布于 2022-08-12 10:40

相关推荐

头像
10-23 11:09
已编辑
上海交通大学 Java
纪念并记录下秋招第一个二面,发发面经,攒人品,许愿oc!时间线:9.18号投递9.20号笔试+AI面试,3道编程题A了2道10.9号一面,应该是被某部门捞了,但也是后端开发10.12号二面10.17号hr面10.23发现回人才库(罢了罢了)一面:自我介绍你的研究方面和岗位不是很匹配,怎么看详细描述浏览器输入网址到看到网页的过程刚刚提到的HTTP协议属于OSI的第几层,是基于什么协议的介绍TCP协议的三次握手TCP协议用哪些方式保证传输信息的可靠性什么是TCP的拥塞控制(慢启动、拥塞避免、快重传、快恢复)TCP在什么情况下判断数据包丢失,触发快重传(发送方连续收到3个相同的ACK)TCP流量控制的算法(滑动窗口)除了窗口,还有哪些限流算法(当时没回答出来,复盘时想起应该还有令牌桶算法和漏桶算法)HTTP和HTTPS请求及协议的区别HTTPS用到的安全协议是什么使用的加密算法是对称加密和还是非对称(当时回答非对称,复盘时想起应该是在证书验证阶段使用非对称,后面的数据传输为对称加密)私钥谁保管进程与线程的区别知道协程吗,协程与进行、线程的区别进程的基本状态进程间的通信方式Linux下的IO模型(当时只回答了BIO和NIO)除了BIO和NIO,你知道还有多路复用吗你知道Linux下的系统调用吗(不清楚,面试官补充是select、poll这种,但是确实没准备到)Spring的IOC是什么Spring对象是线程安全的吗?(回答,Spring的bean一般是单例的,单例的无状态的bean是线程安全的,如果是有状态的,即有可变的成员变量,就不是线程安全的)如何解决有状态的bean的线程安全问题?(简单方法将可变的成员用final修饰变为不可变,但是推荐使用ThreadLocal保存可变成员变量)有什么办法定义多例bean介绍ThreadLocal底层数据结构父线程定义的TreadLocal如何在子线程获取到(这个不会,瞎说的,面试官有引导,但是依然没说对)子线程中把某个变量清理掉,父线程还能拿到那个变量吗(这个也不会)线程池的重要参数核心线程是否会被回收(不会被回收)拒绝策略有哪些抢购场景如何设计线程池(瞎说的)锁的可重入性公平锁和非公平锁的区别MySOL的事务隔离级别Spring如何实现事务如何使用AOP技术,简单地说就是把两个插入同时放到一个事务中你知道RPC吗(不知道)你知道CAP吗(不知道,RPC和CAP都没准备到,应该是Spring cloud中的,后面反问的时候面试官也提到对Spring cloud相关的一套东西都不了解)手撕:选择数组中第K个大的元素,我直接Array.sort,然后输出k-1过了反问:多久可以收到下一次面试通知面试官提出一个我的问题:只了解基础的东西不够,实际工作中基础体现得不是很明显,大部分还是实际使用的中间件(确实,没有实习,实践经历是硬伤啊!)工作地是否有问题因为手撕太简单了而且笔试过了好久才有的一面,部门也跟投递时不同明显被捞,我以为是kpi面,但是上午面完,下午就收到了二面。二面:聊项目(一个大模型相关的,跟后端开发没有关系,但是因为跟毕设相关很熟,自我感觉回答得不错,第一次二面觉得很神奇)手撕:leetcode026重排列表反问:还有几面部门业务上午面的,中午收到HR面10.17 HR面一些比较基础的问题等待oc! (等个鬼 10.23回人才库) #美团# #美团求职进展汇总# #美团面经#
点赞 评论 收藏
分享
头像
10-12 11:52
已编辑
西安体育学院 Java
四个环节:1.八股 2.项目 3.个人相关 4.介绍公司相关1.转发与重定向区别url访问网址的全过程讲一下反射有没有适合使用反射的场景以设计的思想去想反射适用于哪些场景讲一下对HashMap原理理解对于Map这种数据结构适用的场景垃圾回收的目的是什么,处理了什么问题讲一下G1讲一下线程池线程核心参数线程参数中空闲队列的作用抽象的说一下 锁是在什么情况下适用于什么场景解决什么问题你会在什么情况下选择使用分布式锁,什么情况下使用单体单机锁?你最终选择的判断标准是什么?2.项目缓存怎么做的?方案是怎么做的?从缓存框架来看有什么优化空间?(不会,面试官说可以做多级缓存)缓存做的时候有没有考虑过会出现哪些问题?(面试官引导问 缓存内存相关)做缓存的时候有没有考虑过兜底方案?(面试官说,考虑自动化巡检,预警)限流接口如何设计3.哪些渠道学习学习方式有什么逛GitHub有没有感兴趣的东西有没有研究过大模型更高级的用法(面试官说Agent)自己最近做的项目什么的想发展的方向,未来的规划4.反问,感觉问不下去了,面试官很好,说想问就问。问了培养计划,多久可以参与开发工作。,背了几天的八股,没有对上的/(ㄒoㄒ)/~~。我也想八股吟唱。面试官很好,全程不会的就会给我提示以及给出自己的问题解决方案。好公司不知道,这个面试官很开朗人很好。基本上寄了,希望牛油们能早日拿offer#数字马力#更新——————竟然进复试了,很多问题感觉都没咋答出来,后面的问题感觉是面试官给我讲了很多。这一次我一定要把握机会。大家都要加油。
点赞 评论 收藏
分享
头像
10-21 16:44
已编辑
门头沟学院 Java
全程八股,没问项目,面试官很好,有些问题会深入问一下。总时长50分钟左右。唯一有一点是有些问题没答好,要用反问小怼我一下(其实很多面试官都是这样的)算法很简单,但是做的时候有点小错误。更新:10.15一面,19约二面自我介绍项目是自己做的吗(然后就没有问了)讲一下hashmap和concurrentHashmap的底层实现结构,有什么区别追问,hashmap扩容是在什么时候synchronized、reentrantlock是什么,底层原理怎么做的,有什么区别volatile 关键字是什么,有什么作用(可见性、有序性、涉及Java内存模型、指令重排序)线程池有了解吗,底层是如何运行的?追问,一个任务提交到线程池,如何处理(主要看核心、最大线程数、阻塞队列、拒绝策略)Spring 三级缓存是什么,解决什么问题(主要解决循环依赖)追问,其中代理是拿来做什么的(AOP)Spring中的代理有哪些方法?(JDK动态代理与CGLIB动态代理)如何标记一个对象是否能被清除(引用计数法、可达性分析法)可达性分析的源头是什么?(GC Root,如虚拟机栈,方法区静态属性引用的对象等)JVM有哪些区域,都有什么功能?JVM GC有了解吗,有哪些方法?(标记-清除,标记-交换等,具体实现有G1等)Redis 缓存穿透、击穿、雪崩是什么?追问,各有什么对应的解决方法吗?Redis中的持久化有了解吗(RDB、AOF、混合持久化)MySQL的主从同步知道吗MySQL的MVCC是什么?解决什么问题?(多版本并发控制,解决不可重复读,配合间隙锁解决大部分幻读)算法题:给n颗糖果,如果这一天是素数就吃n/3+1,不是素数就吃n/2+1(向下取整),问能吃多少天?部门介绍:是做安全相关的部门,为公司提供业务上的安全检查服务。反问:部门主要用什么语言、技术栈,有新人培养计划吗答:Java、Python相关,实习生有导师培养,秋招没有。总结:八股答得还行,少数几个问题答的少,其他都答得不错。
查看21道真题和解析
点赞 评论 收藏
分享
2 20 评论
分享
牛客网
牛客企业服务