后端面试经验

1.写webserver的内容

webserver我是阅读《TCP网络编程》和《Linux高性能编程》学习的,其中最主要的应用就是:对多进程、多线程的学习;使用IO多路复用模型同时监听多个套接字;使用线程池机制和锁信号量来处理多任务。

具体使用的是reactor的模式,在面试的时候很重要的一个点是,面试官推荐我去学习NGINX的实现,契机是我说我了解这个,但是我只是知道这个是一个帮助写网络服务器的,具体是什么不知道,于是在面试结束去搜了一下,知道了它是使用reactor模式监听多套接字,能实现反向代理;资源请求的webserver,同时因为使用了reactor模式,io多路复用技术就像redis一样,少量线程就很高效。目前是打算后期看极客时间的nginx的课程继续学习。

2.TCP相关

这个在后边面试成功拿到鹅厂offer很有帮助,具体来说学习这个经历阶段比较多,从最开始考研的时候对计网知识的记忆性学习;到后来看趣谈网络协议了解了tcp的有连接本质上就是发收双方维护一定的数据结构;最后是在找实习之前通过学习CS144的大作业的lab,在实现的过程中对tcp的实现有了更深刻的了解。

收获1:比如tcp本身的连接,在实现中维护了TCP_CONNECTION TCP_SENDER TCP_RECEIVER,使用这些结构体来维护数据。

收获2:在实现时应用层和传输层是有字节流的,这里需要能读写,需要实现接口,然后具体实现时我们后续会用传输层这边的读写的内容。应用层的是测试会自动测试,然后这里存储就有一些内容,比如有不把数据读走的读。

收获3:在实现滑动窗口的时候,第一次的时候在移动窗口时使用的是把后边的数据复制到前面,基于queue实现的,但是发现效率不高,后续想到了数据结构里的循环队列,于是通过一个指针来代表队头,实际数据不真的移动,提升效率。

这里收获3是最大的,也是很重要的,对以前学过的数据结构的一个应用。

3.算法相关

一个是我在面数据分析的一个岗位时学到的

如果按组去划分,count,使用的是group by 某某某,然后having

要求去重就使用DISTINCT

在排序时使用order by

我当时的问题是order突然忘记怎么写了。

剩下的三个是我在面试的时候都直接写下来的,比较常规的题目,但是不是每个都做过

a.LRU缓存

我自己想的通过自制的链表实现,和hash

使用hash的set来存储具体的键,使用N来表示能接受的LRU的容量限制,在具体实现中,get能得到key对应的value,get的同时会把数据提到链表的头部,通过头部来表达数据的新旧访问关系;set首先要判断是否有这个值,如果有就把它放在最前面,然后更新值,如果不存在,要判断目前的数量是否大于等于N,如果不是,就直接放在队头,否则就去掉队尾的然后在队头插入。

b.深度遍历树

通过栈和递归的方式

树的深度优先遍历dfs,常见的形式是使用函数调用的递归方式,使用递归能实现,使用栈也能实现,递归在底层也是通过函数栈来实现的,所以树的深度优先遍历都是使用栈来实现的。

树的宽度优先遍历是通过队列来实现的。

c.判断环是否有圈

使用快慢指针或者用set

4.表达方面

这个是我在阅读《聪明人说话之前想的事》里学到的,在讲话的时候"先讲结论",先说对方想听的内容而不是表达自己想听的,在这种情况下要弄清楚什么是结论,比如对于tcp协议的实现,结论就是tcp本质上是双方维护一定的结构来表现出逻辑上的连接,本身tcp是没有一条物理上的连接的,这就是对于tcp协议实现有关的结论。

相关推荐
杨航 AI2 小时前
** AI 面试算法 50 题清单**,不是单纯的 LeetCode 题号列表,而是按照“**考察概率 × 面试价值 × 你当前准备方向**”排序
算法·leetcode·面试
无我Code9 小时前
开发者-2026年中总结
前端·面试·程序员
.道阻且长.12 小时前
5.LeetCode算法习题讲解--双指针--有效三角形的个数
算法·leetcode·职场和发展
kyriewen13 小时前
今年裁了16万技术人——但字节前端岗反而涨了23%
前端·javascript·面试
众人皆醒我独醉15 小时前
训练加速实战:Flash Attention、Gradient Checkpointing 与数据流水线
后端·面试·gpu
Loveyourself15 小时前
Claude Code Memory 总体系核心代码逐行解析
面试·agent
王林不想说话15 小时前
ES6 到 ES2026 全面进阶指南:新特性、原理、示例与工程落地
前端·javascript·面试
黄敬峰15 小时前
TypeScript 必考题:type 和 interface 的区别一次搞懂
面试
想吃火锅100516 小时前
【leetcode】300. 最长递增子序列
算法·leetcode·职场和发展
Dr.kangder16 小时前
嵌入式面试总结(八)——大小端
嵌入式硬件·面试·职场和发展·架构·嵌入式