1.两道算法题
①输出数组中所有的满足条件的数。应该满足的条件:自己左边的每个数都大于自己,自己右边的每个数都小于自己。
解法1:左右遍历并建二叉查找树(很低效)。解法2:左右遍历的时候设置一个遍历到的最大/小变量,用来判断本元素是否满足条件。(要考虑到有重复元素的情况,面试官说只保存下标就行。到现在也不知道怎么个只保存下标法。。)
②链表相加
input:8->7>6 和 2->3->4
output: 1->1->1->0
我:递归或栈。面试官:规定空间复杂度O(1),不能创建新的节点。
解:逆置链表再相加,在原链表基础上对节点值修改。(不能创建新的节点这个规定让代码写起来需要考虑一些情况,我写了很多行。。面试官建议在保证质量的同时尽量缩减代码冗余度)
三十五分钟过去了。
2.线程同步的方法;生产者消费者问题;信号量和互斥锁除了值域不同还有什么区别。
还有一些多线程编程问题比如说两个线程轮流打印A和B。
多线程编程这块实在不会,别问了球球了。。
3.死锁的条件;死锁的例子(答:C++智能指针对象互指引用计数无法归零造成死锁。面试官:这不是线程死锁的例子。)
面试官很年轻,会给提示引导,总体体验挺好。
全部评论
(1) 回帖