8.29 百度提前批一面

大伙走过路过点个赞,新鲜的面经出炉了,秋招所有的面经分享都会发出来!!!
## 一点闲话
我记得我报的是正式批啊,怎么给我整到提前批了。。。

## 项目穿插八股

1. 介绍一下项目
2. I/O线程池的工作原理是什么?为什么它能够提升这个并发的性能?
3. 除了epoll之外,内核里面还有什么别的通信方式,以及相对于epoll,它的工作方式主要是什么,为什么它比别的快?
4. 在操作系统层面,如果一个程序要从用户态切换到内核态,有一些什么样的方式?
5. 内存池为什么能够减少内存碎片,提升分配效率?
6. 在这个内存池里,你是怎么保存要分配的内存的?
7. 你的mysql连接池和redis连接池分别用来做什么的?
8. mysql和redis各自的特点是什么?以及存储或选取什么样的数据,应该选择哪一个存储?
9. 你这个redis负载均衡策略展开讲讲?
10. 为什么需要自己去实现?而不是复用nignx这种已经很成熟的技术?
11. 讲讲定时器的工作原理,以及它实现了一个怎么样的功能?
12. 你的AI聊天服务对接了哪些大模型?
13. 你做操作系统内核项目的原因是什么?
14. 对于操作系统来说,为什么要有虚拟内存的概念?
15. 进程管理中进程和线程的区别是什么?
16. 你的这个新型页表映射是个什么东西?
17. Linux内核是这样做的吗?
18. 协程相对于进程和线程的区别是什么?
19. 你知道内核Namesapce、Cgroups吗?(不是程序中的namespace,汗流浃背了,都没听过)
20. 也就是说你做内核驱动开发的时候不需要了解这个?(一般驱动默认挂载在/dev下,容器环境的驱动可见性是受Namesapce影响的,特殊驱动(如网络驱动、虚拟化驱动)必须熟悉Namespace)
21. 我看你实习时间大概是两个月,你花时间最长的工作内容是什么,挑核心的讲
22. 我对这部分东西不是很了解,我希望你给我深入浅出的讲一下这个项目,相当于给我扫盲(其实就是为什么做以及怎么做的)
23. 假设现在开发一款Linux设备的驱动,它的全流程会是怎么样的?

### 手撕

LRU

### 反问

一共三面(包HR)、结果一周之内出、云原生部,业务是做容器引擎的
全部评论
请问提前批怎么投呀,只能邮件内推吗,我看官网投递不区分提前批
点赞 回复 分享
发布于 2025-09-02 14:37 北京
容器的隔离机制,是依赖Linux提供的namespace和cgroups机制实现的。这也是windows的wsl无法提供容器功能的原因
点赞 回复 分享
发布于 2025-08-30 12:20 北京
过了吗 佬
点赞 回复 分享
发布于 2025-09-25 14:17 天津

相关推荐

01-10 21:01
门头沟学院 Java
比较经典的题目,如果之前没写过的可能需要想一番,首先实现缓存最先想到的就是hashmap,O1级别的查找速度很适合做缓存,然后就是要实现lru,参考redis的zset底层实现,zset也是使用了两个数据结构跳表+hashmap,使用跳表实现排序,我们这里也是使用双向链表实现lru功能,每次查询对应数据的时候就将数据移除重新加到头部,也就是更新使用频率,附上代码如下比较经典的题目,如果之前没写过的可能需要想一番,首先实现缓存最先想到的就是hashmap,O1级别的查找速度很适合做缓存,然后就是要实现lru,参考redis的zset底层实现,zset也是使用了两个数据结构跳表+hashmap,使用跳表实现排序,我们这里也是使用双向链表实现lru功能,每次查询对应数据的时候就将数据移除重新加到头部,也就是更新使用频率//通过自定义节点,hashmap,哨兵节点//删除时通过pre和next指针快速删除节点//添加时只操作头尾,通过哨兵节点快速添加节点class LRUCache {private class Node{//保留key,不然在删除尾结点的时候不能返回key让map也删除//而map又不知道尾结点是哪个int key,value;Node pre,next;Node(int key,int value){this.key=key;this.value=value;}Node(int key,int value,Node pre,Node next){this.key=key;this.value=value;this.pre=pre;this.next=next;}}private int capacity;//通过哨兵节点可以快速找到头结点和尾节点private Node dummy;//通过hashmap快速找到节点,通过节点pre指针和next指针快速实现删除private Map<Integer,Node> map=new HashMap();public LRUCache(int capacity) {this.capacity=capacity;//不能dummy=new Node(-1,-1,dummy,dummy)//这样会导致dummy的pre和next为nulldummy=new Node(-1,-1);dummy.pre=dummy;dummy.next=dummy;}public int get(int key) {if(!map.containsKey(key)) return -1;//如果存在,更新使用频率(加到头部)Node node=map.get(key);remove(node);addFirst(node);return node.value;}public void put(int key, int value) {Node node;if(!map.containsKey(key)){while(map.size()>=capacity){int removeKey=removeLast();map.remove(removeKey);}node=new Node(key,value);addFirst(node);}else{//否则更新数值重新加入node=map.get(key);node.value=value;remove(node);addFirst(node);}map.put(key,node);}public void remove(Node node){Node pre=node.pre;Node next=node.next;pre.next=next;next.pre=pre;}public int removeLast(){Node tail=dummy.pre;remove(tail);return tail.key;}public void addFirst(Node node){//通过哨兵结点快速找到头结点Node head=dummy.next;head.pre=node;node.next=head;dummy.next=node;node.pre=dummy;}}
查看1道真题和解析
点赞 评论 收藏
分享
评论
3
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务