小米北京c/c++ 一面凉经
好像是北京手机做系统的部门,感觉被刷kpi(已发感谢信,面试体验不好,对面未开摄像头,在家,孩子不断打闹,放着西游记),问的操作系统很难(主要自己菜),回答不上来,八股没怎么问。列一下我没回答出来的问题,面试官见你回答不出来,也告诉你答案,这一点面试体验还可以。
1. c里如何实现c++的容器,比如:一种类型是list,另一种类型是RB-tree,都是insert操作函数,能根据类型选择对应数据类型的insert。
我回答的虚函数,对面说是 container_of 宏
2. linux 时钟中断,记录时钟节拍一拍一拍的来,但是硬件做如果是一个32位的寄存器,记满了就会反转,如何解决。
我回答的中断处理函数里增加一些记录,对面说是:什么无符号转有符号,看内核代码里有,这个真不知道,现在也没明白是怎么做的。
3. 单向链表只知道其中一个节点的地址,如何删除这个节点?不记录链表头
通过该节点访问的next节点,把next节点拷贝覆盖当前,然后free到next。(你很机智,好伐)
4. 线程模型,使用线程库 和 内核创建的线程模型?
我以为是说线程调度延迟啥的,结果他说是:一对一,多对一,多对多,用户态线程和内核线程(害,不在一个频道)
5. 多核线程调度,如何避免多核竞争从就绪队列里取就绪进程,因为内核的就绪队列肯定是加锁的
每个核维护一个本地的就绪队列,但是本地就绪队列会有负载均衡的问题
算法题给的很简单:
1. 手撕,判断两个链表是否相交,口头描述。
2. 手撕一个dp,连续子数组的最大和
第二天感谢信,害,凉了~
#小米科技##小米##面经#