2024-02-17 15:31:48
该面试者在字节跳动北京基础架构后端开发岗位的面试中,半天完成3面并在5天内拿到offer,主要依靠自身硬实力和充分的面试准备,特别是对Java知识体系的深入掌握以及针对性面试笔记的辅助。
以下是面试各环节的具体情况:
一面数据结构与算法:涉及hash表原理、hash冲突解决方法(拉链法、开放地址法)、hashMap的线程安全性及实现线程安全的方式(如ConcurrentHashMap、使用synchronized加锁)、一致性hash解决分布式存储弊端及数据倾斜问题(虚拟节点)。

JVM相关:介绍JVM五大部分、GC触发时机(MajorGC和fullGC的区别)、FullGC的问题(STW)及CMS大致过程。
网络协议:TCP和UDP区别、2MSL概念及等待原因、TCP发送rset报文的时机。
并发编程:CAS原理、synchronized和lock的区别、CAS、synchronized、lock的适用场景。
内存管理:内存泄露的概念及出现场景(静态常量不使用、threadLocal)。
输入一个cd命令,输出最终的文件目录,如输入/hist/add/camera/../int/has/../init,需要处理../返回上一级目录的情况。
设计一个调度系统的存储结构,用于插入一百万条定时任务(二元组<key,value>,key代表触发时间,value代表任务),要求插入速度快且能实现秒级任务调度。
系统管理:window下磁盘管理方式(不了解)、磁盘快速计算容量的方法(使用块存储和bitmap)、linux代码文件加载到cpu运行的过程(不了解,转而讲解java代码加载运行过程)。
网络协议:协议模型(TCP四层、OSI七层,介绍五层模型及输入url到显示界面的过程,包括DNS的递归查询和迭代查询)、域名支持多个服务的解决方案(http1.1支持host域)、DNS解析高效性保证(缓存、分布式缓存)、DNS使用的协议、Ping命令发送的报文(ICMP协议)。
IO模型:BIO、NIO、AIO的区别。
进程线程:进程和线程的区别(提到协程)、协程切换比线程快的原因(不涉及特权模式切换)。
其他技术:数据从网卡到档册磁盘的过程、合并有序链表算法、论文查重系统的核心(分句算法和查重算法,用的编辑距离,要求写编辑距离的大概思路)、k8s的组件和功能(介绍过五六个组件,包括负载均衡和高可用)。
项目讨论:自我介绍后讨论项目,涉及数据从磁盘到程序的过程、Kafka的零拷贝。
网络协议:协议模型(五层)、三次握手四次挥手的原悉蠢乎因及讨论。
内存管理:linux内存管理方式(块式存储、段页式)、设计一个内存管理方案(讨论大内存申请、快速查找可用空间、内存碎片最少的问题)。
JVM相关:再次讲JVM、hashmap。
面试者提到有一份Java面试笔记对其帮助很大,该笔记包含当下热门的Java知识点。从面试过程来看,这份笔记可能涵盖了数据结构与算法、JVM、网络协议、并发编程、内存管理等多个方面的内容,帮助面试者系统地复习和掌握了相关知识,从而在面试中能够较好地回答各种技术问题。
面试表现与结果