面了一个小时左右1. 自我介绍2. 问开源经历2.1 系统调用进到内核态和有做安全检查吗?(*)没,但可以在中转代码中做安全检查,比在内核态中做更安全2.2 为什么要设置这个中转代码3. 问实习3.1 问观察者模式3.2 问状态机3.3 问单例模式的多线程安全问题3.4 假设git有a,b,c,d四个已经push的提交,现在希望将a和d拎出来作新分支,怎么操作?(*)3.5 协程和线程的上下文区别是什么?4. 算法 4.1 给定主串和子串,求子串最后一次出现的位置,要求主串必须从后往前遍历。我实现时对子串也是从后往前遍历的4.2 将代码改成子串从前往后遍历,主串仍要从后往前遍历。4.3 问时间复杂度,问更好的实现O(n*m) kmp4.4 有没有其他实现算法,介于你的实现和kmp之间,比如O(n)的算法(*)4.5 给出了两段代码,问分别有什么错误5. 用过linux吗?说一下linux下怎么调试段错误5.1 段错误除了数组越界和野指针之外,还有哪些情况会触发(*)6. 假如频繁触发缺页故障,会影响性能吗?6.1 怎么优化?答了swap时用lru6.2 有其他优化方法吗?答了关闭操作系统的懒分配策略6.3 还有其他优化方法吗?(*)7. C++中vector的clear的时间复杂度是多少?8. 栈和堆的区别是什么?8.1 哪个更快,为什么?9. C++的四个cast(*)忘了最后一个cast是啥了10. 反问 #地平线#