快手C++开发一面面经

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

面试官很年轻,会给提示引导,总体体验挺好。
#面经##校招##C++工程师#
全部评论
第一题能说清楚一点吗,没懂啥意思
点赞
送花
回复 分享
发布于 2020-08-26 16:21

相关推荐

3 21 评论
分享
牛客网
牛客企业服务