#猿辅导C++工程师面经# #C++工程师面经# #校招面经# 👈点击话题查看更多同类面经干货!每日面经精选,为你发掘牛客干货!
  个人背景    本科非科班,硕士软件工程,无实习,无论文,客户端零基础,编程语言只了解C/C++。8月28日收到猿辅导意向书,在牛客网上受益颇多,特来回馈。       笔试(8 月1日)   笔试时间90分钟,15道选择题,3道编程题 选择题不能切换浏览器界面,编程题可以切出来在本地IDE调试 笔试过程中电脑录屏,手机扫码打开笔试助手,手机不能锁屏和切换界面     选择题   1.两个线程以相同的顺序加锁解锁,哪个顺序可能死锁 Lock(m1) Lock(m2) Unlock(m1) Lock(m1) Unlock(m2) Unlock(m1) 2.数据库SQL语句,查询在表table1不在table2的id,  left outer join  3.下面程序输出 int fun1(int i) { if(i < 10) return i; return ((5*fun1(i - 1) + 2*fun1(i - 2)+fun1(i-3) + fun1(i-4))& 0x5fff); } int fun2(unsigned int i) { unsigned int f = 2020; return (f&i)/2; } int main() { int n = fun2(fun1(101)) % 4; printf("%d\n", n); return 0; } 4.前序遍历和中序遍历相反,问树的特征 5.出栈入栈顺序判断 6.下列哪些网络协议属于同一层 7.逻辑推理题 8.40个小朋友买票,票价5元,30个小朋友每人有一张5元,10个小朋友每人有一张10元,每个人买自己的票,售票处初始没有零钱。问不用等找零的概率。 9.两个人抛硬币,谁先抛到正面谁赢,问某个人赢的概率 10.给个排序部分过程,让判断用的是哪种排序算法  顺序不对,还有5道题记不清了     编程题   1.类似leetcode 732,应该是考线段树、树状数组,我用map将坐标离散化也能AC  2.分彩票,n张彩票,n个人,每张彩票有一定的奖励值,某个人一开始有所有的彩票,然后自己留一张,分给别人一部分,不一定每人一张,后面没人将多出来的再分给其他人。某个人的奖励值是自己手中的彩票和其他的一部分,选择其他部分有要求。这个比较复杂,就是如果A把票分给B,B再分给C的话,A可以选择A的奖励值,也可以选择A+B的奖励值,也可以A+B+C,但不能选A+C,因为B分给C,不选B的话,也不能选B分发的所有部分 第一行一个数n,后面第2行道第n+1行中每行有两个数,A和B,A表示自己手中彩票奖励值,B表示自己的彩票是从第几行分过来的,0表示最开始的那个人。 例如 3 2 0 1 2 -1 2 第2行的那个人为A,第3行的那个人为B,第4行的那个人为D,彩票最开始在A手中,然后A分给B和C,所以A可以选A,A+B,A+C,A+B+C,最大值为2+1=3,最大值不一定非得在A处获得。 思路:根据分发过程建树,树形dp     3.题都没看完。。。     笔试总结   猿辅导笔试难度不小,题的质量很高,知识点覆盖较广,且均为主流知识点,考察方式灵活,且今年的题与去年的题风格保持一致,往年试题具有较***价值。    编程题挺难的,经过这次笔试,觉得自己编程基本功有待提高,第2题看完题之后5分钟就有了思路,但是在实现建树的时候花了太久的时间,导致第3题都没时间看了。      一面(8月8日)   自我介绍+项目相关 C/C++语言 1.extern C 2.const const int *p     int * const p 3.虚函数、虚表、纯虚函数、虚析构函数  网络 4.各层网络协议 5.tcp/ip协议 6.tcp 接收窗口 7.http返回码  编程题 8.翻转链表,从第i个位置到第j个位置(i,j都可能越界)  思路:直接模拟,先找到起点,从起点开始翻转,到终点结束   9.二叉搜索树,找出两个节点差值的绝对值最小值 思路:中序遍历,计算相邻位置的差,我用的非递归中序遍历 反问     二面(8月14日)   自我介绍 基础知识  1. .进程调度策略 先来先服务、短作业优先、高响应比优先 多级队列反馈问了一下细节 2.锁的分类了解(不会) 乐观锁、悲观锁、公平锁、非公平锁、可重入锁 3.死锁举个例子 4.数据库事务的理解 编程题 1.使用创建好的单链表实现队列,实现两个方法,入队和出队 思路:在链表上记录队首和队尾,根据出队和入队滑动队首和队尾,注意循环队列情况, 加问:队列为空,出队怎么返回,我一开始说返回-1,后来说改成抛异常,但我不会用,面试官说可以了,知道抛异常就行,不会写没关系。 2.二叉树中所有节点值为正,给定target,求出从根节点开始的路径中,路径和大于等于target的情况中,找出最小的路径和,路径终点可以不到叶子节点,返回最小路径和,找不到满足条件的路径,返回0; 要求:不准用全局变量,不调用用其他函数; 思路:自身递归,满足条件返回,否则递归左右子树,找出子树中最小路径和,返回根节点值+左右子树中结果最小的那个。 加问:全局变量有什么风险,这是额外问题,不影响面试。    反问      三面(8月23日)   1.自我介绍 2.项目相关  基础知识 3.虚拟内存,为什么提供隔离和保护,为什么要有页表和页目录表, 4.堆和栈的区别,为什么要分成堆和栈? 5.智能指针说一下,shared_ptr和unique_ptr如何实现? 6.fork()父进程和子进程的地址空间的区别 编程题 7.蛇形有序矩阵N*M,第一行升序,第二行降序,第三行升序,每一行的最小值都要比上一行的最大值大,在矩阵中查找target是否存在。 思路:将矩阵坐标映射为有序数组索引,在有序数组中二分查找 8.1TB数据排序思路,说了一下分段排序,然后用堆合并 编程:合并K个有序数组  思路:用堆记录每个数组的当前最小值          面试总结       面试基础知识问的比较深入,感觉猿辅导比较重视基础吧,每次面试都有两道编程题,我编程题做的十分细致,没有被挑出毛病  
点赞 7
评论 5
全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
04-29 12:10
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务