从土木转专业到字节基础架构提前批上岸:手写操作系统与 CPU 项目的备战实录
工试云启 考证服务中心整理

教程【免费下载链接】InterviewGuide「InterviewGuide」是阿秀从校园-职场多年计算机自学过程的记录以及学弟学妹们计算机校招秋招经验总结文章的汇总包括但不限于C/C 、Golang、JavaScript、Vue、操作系统、数据结构、计算机网络、MySQL、Redis等学习总结坚持学习持续成长项目地址https://gitcode.com/gh_mirrors/in/InterviewGuide点击查看免费下载本篇技术文章基于 InterviewGuide 仓库收录的 23 届本科生校招提前批上岸自述整理而成。主人公大二从土木工程转专业到计算机通过自研操作系统与简易 MIPS CPU 两个硬核项目将面试主动权握在自己手中最终拿下字节跳动基础架构部门的提前批 Offer。读完本文你将掌握一套「八股 算法 深度项目 项目 PPT 展示」的完整备战方法论以及操作系统、C、CPU 等方向的高频面试考点清单还能看到仓库内对应的八股文资料如何与实战面经互相印证。一、转专业背景两年「弯路」与及时醒悟主人公是中流 985、23 届本科前两年就读土木工程专业大二下转专业到计算机因转专业需多读一年本科共计 5 年。他所在学校转专业不设转出条件只设转入条件——即不要求专业排名前多少才有资格转人人可申请只看对方院系是否接收。转专业的决定是在疫情爆发那个学期网课期间作出的拖延到那时的原因有三对建筑行业仍抱有幻想——高考第一志愿就是建筑最初的「理想」是设计高楼大厦大学期间较咸鱼——没有勇气正视转专业后的降级问题好面子——转专业后会降级。与父母深入讨论并正视未来的发展问题后他下定决心转专业。学校转专业需考数学、英语计算机专业还要求笔试 C 数据结构和面试机试但受疫情影响最终只剩面试。他用了近一个月时间猛补面试与算法最终顺利转入计算机。这段两年「弯路」反而成为他日后学习的动力正因为浪费过时间才更明白时间宝贵、更清楚自己到底想要什么。转入计算机后他除完成学校课业外花大量时间沉下心研究底层技术如操作系统并把学习过程写成博客、运营公众号稳步向前。最终结果验证了这套节奏字节提前批 Offer 加 2 个小中厂 Offer方向是字节基础架构部门。关于「提前批」的定位仓库中收录的另一篇文章 不要随大流去参加提前批 做过系统性说明提前批是大厂选拔 Top 级人才的手段好处是能提前上岸、多一次面试机会坏处是一旦表现不佳会留下面评记录可能影响正式批。主人公能在提前批上岸核心支撑正是他过硬的项目与扎实的底层功底。二、秋招备战四件事八股、算法、项目、实习主人公累计经历了三十多场面试总结出备战与面试的四大核心要素八股、算法——理解着背勤刷题准备一个比较厉害的项目并为项目做个简单的 PPT面试时变被动为主动——设法把面试官往自己的闪光点方向引给面试官展示项目 PPT找个好点的实习。1. 八股与算法理解着背 三份 md 管理法主人公对八股的态度是「理解背勤刷题」。算法方面没有取巧空间力扣、牛客上的高频题需要反复刷他当时在力扣刷了 350 多道自认偏少笔试环节表现欠佳反面教材笔试基本不会还是要多刷多总结。八股方面他采用了一套「三份 md」的知识管理方法偏好使用 Typora以 C 为例第一份 md网罗整理「所有」C 面试题与知识点把《C Primer》《Effective C》、侯捷老师视频里的重要知识全部收录看面经时遇到不熟、没见过的知识点就随时补进去第二份 md单独整理不熟悉的部分相当于背英语单词时的「生词本」第三份 md画思维导图把零碎知识串成体系。复习时直接看导图再针对生词本背诵理解应付基本面试八股就足够了。这一方法与仓库内八股文资料的组织方式高度一致——InterviewGuide 的 面试题库 目录下按科目分册整理了 C 基础、C11、STL、操作系统、计算机网络、MySQL、Redis 等系统性问答例如C 基础语法面试题覆盖 main 执行前后代码、构造函数、移动语义等基础语法C11 面试题覆盖智能指针、右值引用、lambda 等新特性STL 面试题覆盖 vector、map、智能指针的 RAII 实现等操作系统面试题 至 02-04-os.md覆盖进程线程协程、调度算法、死锁、内存管理等。将这些资料作为「第一份 md」的权威来源再叠加自己的生词本与思维导图就是完整的八股闭环。2. 项目及面试用「计算机系统设计」项目制胜这是主人公提前批上岸的决定性因素——他自述「算法八股其实都挺拉基本上就是靠项目制胜」并总结出核心观点一个比较硬核的项目可以让面试更简单可以让面试绝处逢生。他的简历上有两个重量级项目一个是「自研设计」操作系统另一个是 CPU 设计。后来受朋友启发朋友准备跟着东京大学的 CPUOS 项目写一写他将两者合二为一命名为「计算机系统设计」项目介绍只有一句话希望在自己的 CPU 上运行自己的操作系统。这也成为他毕业设计的题目和后续努力的目标。围绕这个项目他总结出三条非常实战的经验1为项目制作 PPT掌握面试主动权。基本每个面试官都会让他介绍项目而一份简单的 PPT 有三大好处方便叙述几乎不会出现讲述卡壳也方便面试官理解你做的事展示 PPT 时面试主动权掌握在面试者手里可以变被动为主动灵活应对不同情况最关键的是讲述 PPT 很耗时讲完后剩余时间无几面试官往往只让写一两道题就结束甚至全程聊项目不写题——相当于主动给面试「降难度」。2用过程性记录证明项目真实。他把项目学习过程完整记录下来最终汇集成一本电子书并给项目代码写了详细中文注释。自我介绍时主动提及「我出过电子书」面试官普遍感兴趣还会点进去看博客与文章。一次面试中面试官质疑项目是否是自己做的、是不是网上找了个项目跑一跑他靠博客记录和电子书证明了每一步都亲自啃过前后啃了半年、逐行分析代码最终不仅通过面试官还把他推荐给大老板加面。这印证了一个道理只要认真做事面试官是能看到的即使环境不好也依然会给机会。3注意投递方向的匹配度。他唯一挂掉的百度三面并非出在项目上而是投递方向不相关——C 岗位但部门是 AI 平台被问到 AI 问题无法作答。这提示项目再硬也要与投递岗位方向匹配。关于操作系统项目的设计深度仓库中 进程、线程和协程的区别和联系 给出了标准答案的对照进程是资源分配和拥有的基本单位切换涉及页表与硬件上下文、开销很大线程切换只需保存少量寄存器开销小协程是用户态轻量级线程切换不陷入内核、由用户控制直接操作栈、开销极小。主人公在面试中正是按这类原理结合自己的项目作答而非死背八股。3. 实习能早投递就早投递实习的重要性毋庸置疑——主人公的面试基本以实习经历和项目为主。他的教训非常典型找实习投递太晚拖到 4 月本计划 3 月下旬投递结果四处碰壁多数公司没有反应有答得不错但面完就挂的准备不充分时又没有「项目 PPT」这套组合拳兜底压力极大最终被美团收留。离职前他还申请了转正。从「找实习四处碰壁」到「秋招相对顺利」的转变说明多做准备尤其是项目与 PPT 展示这套打法是非常有效的。4. 其他写博客的「正确打开方式」很多人以为写博客、开源对校招有加成但他的实测结论是单纯说自己有写博客、有开源分享习惯基本没用——自我介绍时提及、简历结尾标注网址面试官都不感兴趣。换一种方式效果完全不同把文章做成合集、汇集成电子书。自我介绍时一句「我出过电子书」面试官会主动要求看看面试中遇到相关问题还可以把面试官往电子书方向引让他点进博客了解你对你产生兴趣。三、面经实录四大方向高频考点主人公以 C 为主语言面试方向覆盖计算机网络、操作系统、C、MySQL、Linux 常见命令、编译链接、ELF 文件格式等。下面是他实际遇到的题目与复盘极具参考价值。1. 计算机网络与数据库计算机网络方面没有遇到出格题均为常见八股问题主要出在「背得不熟」和「问法不熟」上。MySQL 他直接坦诚「有了解不深」因此面试官也没有追问出格题仍以常见八股为主。复盘结论是学习时间短、部分原理未吃透后续需要补齐。这套「坦诚边界」的策略值得借鉴——与其硬撑不如明确告知知识深度把面试引导到自己擅长的区域。2. C 与编译链接C 与编译链接绝大多数题目都在八股范围内但有几个当时没答清楚的考点值得单独记录RVO 返回值优化编译器在返回临时对象时省略拷贝/移动构造的优化机制构造和析构过程中调用 virtual 函数这是《Effective C》中的经典条款——构造函数与析构函数中调用虚函数不会发生多态基类版本先于派生类构造完成虚函数表绑定的是当前正在构造的类。仓库的 C 基础面试题 系列对此类知识点有系统收录shared_ptr 共享计数难点在于「计数器放在资源一端还是引用指针一端」。std::shared_ptr 的典型实现是所有指针共享一块控制块内存计数与资源分离管理面试中还遇到让模拟实现 shared_ptr 的题要求写出所有构造函数与析构函数涉及要点极多他当时没能「完全」写对。可对照仓库 STL 面试题 中关于智能指针作为 RAII 最具代表实现自动内存管理、无需手动 delete的论述动态链接与延迟绑定为表现自己多说动态链接主动提到「地址无关代码与延迟绑定PLT/GOT」结果被追问钩子Hook技术不了解直接挂掉——教训是不要给自己挖坑ELF 文件细节特别是字符串索引相关的内容忘得差不多编译型与解释型语言有概念但没讲清他看过相关文章后感觉内容复杂决定后续再系统学习。另外可参考仓库 移动构造函数详解移动构造函数的设计初衷是避免不必要的拷贝——用对象 a 初始化 b 后 a 不再使用直接「转移」a 的空间即可拷贝构造对指针必须深拷贝移动构造对指针采用浅拷贝只有右值或将亡值初始化另一个对象时才调用移动构造函数。这类与 RVO 相关联的现代 C 语义正是面试高频区。3. 操作系统与 Linux操作系统是主人公的主场——他的项目就是操作系统因此「硬八股」调度算法、死锁等答案固定的题目背了其余全部按自己项目的实现与理解作答。操作系统大致有四个基本模块内存管理、驱动管理、文件管理、进程管理面试问题也主要围绕这四块展开。启动过程如何判断启动盘、实模式到保护模式的转换、开启分页机制进而引申到缺页异常的三种形式交换、写时复制、延迟分配。启动最初的一段代码是汇编随后过渡到 C期间的细节CPU 相对寻址、绝对寻址、变量处理他回答得有些模糊——这是一个隐藏难点全局变量如何处理由汇编侧处理还是 C 侧处理内存管理物理内存管理的基本方式是链表和位图他的项目使用最简单的空闲链表引申出伙伴系统Buddy System与 Slab 分配器虚拟内存部分讲解自己项目里进程虚拟地址空间的布局、堆与共享区的管理引申到 Linux 的 mm、vm_area_struct线性区等。被问到 Linux 的 kmalloc 特点分配物理内存连续时不了解直接挂掉。可对照仓库 malloc 与虚拟内存从操作系统层面看malloc 通过 brk 与 mmap 两个系统调用实现小于 128k 用 brk、大于 128k 用 mmap进程先获得虚拟地址真正访问时才通过缺页中断让内核分配物理内存驱动管理主要是中断相关——详细描述「按下一个键到显示在屏幕」的完整过程涉及键盘中断、键盘驱动键盘中断服务程序、显卡驱动DMA 工作原理不了解挂掉文件管理描述分区布局、inode、目录、路径、文件描述符描述文件系统调用 write/read 的全过程open/close/dup 等所做的工作软链接与硬链接的区别还考到文件系统日志设计针对写磁盘操作保证磁盘一致性他的原项目设计简陋、存在大文件溢出问题被要求现场设计完善未设计好进程管理讲自己设计的进程、线程、协程设计过的进程间通信方式除 socket 外以及常见问题——调度算法、孤儿进程与僵尸进程的概念及解决wait 函数、进程线程协程如何切换重点是换栈、进程切换为什么慢页表切换、TLB 刷新、特权级转换时内核栈与用户栈的切换x86 下 TSS 段的 ESP0RISC-V 的 sscratch。被问到 Go 协程、协程队列是否与某线程关联时不了解挂掉Linux 进程排查如何通过 ps 等命令找到出问题的进程设计模式有公司大老板直接问设计模式他不熟被建议「既然要设计操作系统设计模式这本书得好好看看」。他自述确实看过但没理解、隔几个月忘光准备不充分教训是要细研而非走马观花。可对照仓库 操作系统面试题一其中 进程、线程和协程的区别和联系、进程调度算法 等给出标准答案死锁相关问题大总结 则完整覆盖死锁的四个必要条件、检测与恢复、预防与避免含银行家算法正是主人公所说「答案稍显固定的硬八股」。4. CPU因项目中有简易 MIPS CPU 设计面试涉及不少 CPU 方向题目此类面经相对少见很有参考价值流水线机制谈理解相关性问题结构相关哈佛结构与冯·诺依曼结构、数据相关、控制相关精简指令集RISC与复杂指令集CISC特点与区别属于可自由发挥的「软八股」他从 RISC-V 与 x86 出发谈中断、谈寄存器、谈分段分页天南地北地展开环境搭建交叉编译、JTAG 等——因为是学校项目前置环境都搭好了他全然不知直接挂掉与上层软件的兼容因为简历上「夸下海口」要在自己的 CPU 上运行自己的操作系统被问到兼容问题时只能如实说还没做、任重道远Cache 与内存一致性Cache 一致性、内存一致性、原子操作——内存一致性当时只懂基本概念尚未完全搞明白。主人公还给出一个重要观点如果某些方向自己有研究、有独到见解就不用背八股按自己的理解说即可。背八股只是对不熟悉知识的无奈做法甚至有些限制思维。但这里说的是「软八股」——像 RISC/CISC 这种可以自由发挥的题对于「硬八股」调度算法、死锁、网络协议等答案固定的题直接理解着背即可。他面试中确实遇到面试官夸「你理解得还不错有自己的看法」说明面试官更愿意听有思考的回答。四、用过的一些资料从入门到手册的完整书单主人公把学习资料分为八股来源与各方向经典书籍体系感很强八股来源InterviewGuide秀哥网站的八股文资料、牛客等网络资源全部整理进自己的文档体系。C《C Primer》《Effective C》、侯捷老师视频编译链接方向看《程序员的自我修养》。算法LeetCode、牛客刷题为主辅以 AcWing、OI Wiki后者讲解文章质量不错。计算机网络《图解TCP/IP》《图解HTTP》、小林的博客、《TCP/IP网络编程》《Linux高性能服务器》。数据库《MySQL必知必会》《MySQL是怎样运行的》《Redis设计与实现》尚未完全消化。操作系统书籍《操作系统真象还原》真正领入门的一本、《Linux 内核完全解析》相当于 Linux 0.1 的注释版、《深入理解Linux内核》当作手册查询代码/实验MIT 6.828 与配套的 xv6仔细研究过、清华 rcore/ucore参考、Linux 0.1、胡自成大佬的 BookOS。其中 MIT 的 xv6 与清华的 rcore 都有讲义值得细读手册i386、磁盘、RISC-V 等各种手册按需查阅自制基于 xv6 整理的第一版操作系统电子书给代码写了详细中文注释并在其上扩展了高级功能、三种缺页异常、线程协程、调度以及 RISC-V、MIPS 等不同架构的尝试。CPU 设计学校老师编写的《计算机系统设计——基于FPGA的RISC处理器设计与实现》。五、关于学习的一点看法大黑书别急着啃针对 CSAPP、《现代操作系统》、《计算机体系结构》这类「大黑书」他的建议是不要一上来就硬啃——没有一定基础看了基本白看CSAPP 涉及方面很多但每方面都不算特别深入容易让人摸不着头脑讲编译链接不如直接看《程序员的自我修养》异常虚拟内存等内容不如直接看操作系统书籍网络编程不如直接看《TCP/IP网络编程》《现代操作系统》偏纯理论不如直接看 OS 源码来得实在。当然这些书并非不好而是更适合当作总纲等学到一定程度再回头翻阅会收获「明悟」。他最近重读《C 程序设计语言》就有这种感觉——全书内容密度高每次看都有不同感悟。核心原则是适合自己的方法才是最好的。此外他还推荐了几个值得跟练的硬核项目南京大学 nemu纯软件方式设计 CPU OS 存储配套实验他已完整做完非常硬核值得从前至后系统捋一遍一生一芯计划国内的开源芯片人才培养计划可以了解跟进东京大学相关项目有 CPU、有 OS、还有前端演示他计划尝试胡自成B 站账号「我叫小骨头」的 BookOS同为本科背景自己做的 OS 非常完备。六、结语从学弟自述中能带走什么主人公用「耐得住寂寞」评价自己的学习路径愿意啃书、啃源码去理解计算机底层基础而不是做无根浮萍。他最终的复盘要点可以凝练为用深度项目建立面试护城河一个「在自己的 CPU 上运行自己的操作系统」级别的项目配合过程性博客、电子书与注释源码足以让算法八股平平的候选人逆风翻盘用 PPT 掌握面试节奏把讲述时间拉满变被动为主动让面试官全程聊项目、少写题用三份 md 管理八股全量知识库 生词本 思维导图复习效率翻倍用坦诚划定知识边界明确告知「了解不深」把面试引导到自己的强项区域用方向匹配规避无效面试项目再硬投递方向不匹配如 C 岗位遇 AI 平台依然会挂。他的简历由阿秀反复迭代了多个版本面试官评价「简历写得很清楚能很好地帮助他们了解我」。秋招之外他计划再试考研冲刺更好的学校并全力把「计算机系统设计」项目完善成毕业设计成果。如果你也在准备校招建议将本文与仓库内的 面试题库 系列C、操作系统、网络、数据库配合阅读再参考 不要随大流去参加提前批 评估自己是否适合投递提前批最后回到本仓库的 校园招聘经验合集 中对照更多上岸案例找到最适合自己的备战节奏。赞分享教程【免费下载链接】InterviewGuide「InterviewGuide」是阿秀从校园-职场多年计算机自学过程的记录以及学弟学妹们计算机校招秋招经验总结文章的汇总包括但不限于C/C 、Golang、JavaScript、Vue、操作系统、数据结构、计算机网络、MySQL、Redis等学习总结坚持学习持续成长项目地址https://gitcode.com/gh_mirrors/in/InterviewGuide点击查看免费下载相关推荐InterviewGuide 秋招实战复盘土木转计算机的学弟如何用自研 OS 与 CPU 项目拿下字节基础架构InterviewGuide 秋招实战复盘土木转计算机的学弟如何用自研 OS 与 CPU 项目拿下字节基础架构 本文基于 InterviewGuide阿秀的文档教程知识库4个维度玩转PrusaSlicer从基础操作到专业打印4个维度玩转PrusaSlicer从基础操作到专业打印 开源工具驱动三维打印效率提升完全指南 PrusaSlicer作为开源三维打印切片领域的标杆工具通过将桌面应用3D渲染生产环境Python调试指南使用lptrace排查函数调用异常的完整教程生产环境Python调试指南使用lptrace排查函数调用异常的完整教程 在复杂的生产环境中Python应用程序出现函数调用异常时往往难以快速定位问题根源。上一篇Page Assist 完整指南用本地 AI 模型在浏览器里对话、查资料、操作网页下一篇【限时免费】 深度拆解glm-4v-9b从基座到技术实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考