C++面试题目及面试经验

文章目录

  • 秋招历程
  • C++ 基础篇:
  • 数据结构与算法篇:
  • 计网与操作系统篇 :
  • 游戏技术篇:
  • 逻辑思维篇:
    • 1.老鼠喝药的问题:
    • 2.100大小的数组放了1-99 100个数,只有一个数重复了,找出重复的那个数。
    • 3.单向链表如何判断是否成环?
      • 3.1 扩展:并指出成环的点在哪里?
      • 3.2 再扩展: 这个链表的长度是多少?
    • 4.单向链表怎么取到倒数第k个元素?
    • 5.怎么判断两个链表是否有交点?
  • 相关知识学习
  • 面试经验:
  • 暂时想到这么多,待更。。。。

秋招历程

  • 终于,在跑了这么多场宣讲会之后,总算拿到了一个心仪的offer,故此写一篇经验分享,纪念一下秋招历程:

  • lz 方向是C++开发,双非本科生,靠着队友,水了一个CCPC的铜,省赛什么的就不说了,后期到手的offer也蛮多的,但是都不是些什么大公司,福利待遇也一般,前期也是各种被大公司打击,面试体验贼差,不是说面试官不好,是面试所遇到的问题,真的是感觉大学白读了,不过好在,慢慢积累下来的经验,让自己在后面的笔面试中少走了一些弯路。

  • 废话说了那么多,现在呈上干货,题目太多有些问题我就没有写答案了,网上一般都能搜到,技术大佬请忽视:

C++ 基础篇:

  1. 声明与定义的区别。
  2. extern 和 static 的区别,什么情况用前者什么情况用后者
  3. x=x+1,x+=1,x++哪个效率高
  4. const 和#define 的优缺点
  5. strcpy和memcpy的区别,现场要求手撕代码
  6. new 和malloc 的区别
  7. C++的内存分配
  8. 构造函数和析构函数可不可以为虚函数,为什么?
  9. 如何限制一个类对象只能在堆(栈)上分配空间
  10. strcpy 有什么危险?
  11. 拷贝构造函数如果用值传递会有什么影响?
  12. DLLHELL 听说过吗?(lz 还没去补)
  13. 伙伴内存管理?(一脸懵逼)
  14. struct的字节对齐
  15. 智能指针,共享指针(短板。。。)
  16. 继承和多态区别与联系?(0.0 刚刚想到的)
  17. strcpy为什么需要返回值char *?
  18. struct 和 class 区别

数据结构与算法篇:

  1. stl 相关容器,底层用什么实现的?
  2. map 和 vector 的迭代器有什么区别?(不懂。。)
  3. 1亿个数取前k大的数。
  4. 堆排序,快速排序的原理与时间复杂度
  5. 一次可以跳一个或者两个楼梯,跳到第n 层的走法有多少种?
  6. 一次可以跳任意个楼梯,跳到第n 层的走法有多少种?
  7. 八皇后问题
  8. A*算法
  9. 图像像素#RGBV 如何取到固定位的值
  10. 栈和队列
  11. 平衡树,红黑树,B树,B+树
  12. 两个非降序的有序数组,找出他们相同的元素

计网与操作系统篇 :

  1. TCP 三次握手与四次挥手,各状态解释,time_wait原因
  2. OSI七层模型以及各层的协议
  3. IP地址的正则表达式
  4. 拥塞控制的方法
  5. 进程间的通信方式
  6. 如何实现虚拟地址到物理地址的转换
  7. TCP 与UDP 的区别
  8. 进程与线程的区别,多进程与多线程的区别
  9. epoll poll select 的区别
  10. recv 的错误处理
  11. linux 的基本指令

游戏技术篇:

  1. cocos 2d (lz没玩过游戏引擎)
  2. unity 3d (同上)
  3. Lua 与C++ 的交互原理

逻辑思维篇:

1.老鼠喝药的问题:

  • 就是告诉你,有n瓶药,里面有一瓶是毒药,老鼠喝了就会死,让你用最少的老鼠测出来,到底哪一瓶是毒药。

  • 答:利用二进制的思想,将所有的药水按照1-n的编号,对应的老鼠喝下二进制上对应位为1 的药水,观察老鼠死的状态,得到答案,比如说 3瓶药水,1号药水 01 2号药水 10 三号药水 11,那么最少需要2^2=4>3 ,两只老鼠就可以了,一号老鼠喝下2和3 号药水,二号老鼠喝下 1 和 3 号药水,要是一号老鼠挂掉了,二号老鼠没挂,证明毒药水是 10=2 号药水,以此类推。

2.100大小的数组放了1-99 100个数,只有一个数重复了,找出重复的那个数。

  • 答:解法很简单,把这100个数加起来,然后逐一剪掉1-99 剩下的那个数就是重复的数。

3.单向链表如何判断是否成环?

  • 答:两个指针p1,p2 , 其中p1 每次指向下一个节点,p2每次指向下两个节点(p2=p2->next->next),这样若链表有环,那么p1p2必定在某一点指向同一个节点。

3.1 扩展:并指出成环的点在哪里?

  • 答:这个lz 也是在网上看了人家的博客才知道的,当p1p2 指向同一个节点的时候,让p1 指向第一个节点,p2 不动,然后让两个节点以同样的速度指向下一个节点,最后p1p2相遇的地方就是成环的点。

3.2 再扩展: 这个链表的长度是多少?

  • 答:上一个问题我们自然可以得到起点到成环点的距离,那么再回到第一个问题的情况,p1p2相遇了,那么再让他们继续走下去,再次相遇所经过的操作数就是这个环的长度了,这两者相加就得到了整个链表的长度。

4.单向链表怎么取到倒数第k个元素?

  • 答:设置两个指针p1p2,让p2 先走k步,然后再让p1p2同时走,最后若p2 指向的节点的下一个节点是NULL ,那么输出p1即可。(画个图就明白了)

5.怎么判断两个链表是否有交点?

  • 答:假设一个链表长为n,另一个链表长为m,让长的链表的指针先走|n-m|个长度,再让两个链表的指针一起走,最后两个指针相遇的地方就是交点了(画图!画图!)

相关知识学习

C++相关知识学习

面试经验:

  • LZ 本人比较外向,所以一般还是能跟面试官对上话的,但是对话的前提就是技术要达标,一旦面试官问到你不会的题目了,就有点尬聊了,尽量往自己熟悉的方向走,不会的就说不会,或者引导到自己会的方向上去。

  • 还有一点。。。。hr 面还是会刷人的,所以记住一点,没有收到电话offer或者邮件offer 前,一切都是假的,乐极生悲!技术宅们也要多开口,冷场的时候适当的说点话,个人感觉,如果面试过程中经常性的冷场就有点凉了。。。。所以,尽量和面试官对上话,但是不要不懂装懂,毕竟面试官也知道你才是个毕业生,很多东西不知道是肯定的,主要是看你的个人基本能力。

  • 最后,不管结果是什么,如果公司给你任何回复,你都还是要礼貌的回复一下过去。。LZ 收到好多拒信,都一一回复了。。有些公司可能拒信都给你发几份。

  • 自信!自信!自信! 不管咋样,想去的公司就投,不要担心这担心那的,投了才有机会,不然连个笔面试机会都没有,面试笔试过程中遇到的题,尽量记下来,但是千万别作弊!,笔试不允许截屏就别截屏,笔试完就自己回想,没做出来的题上网搜一下题解,问大佬,后续可能还会问到的,所以就算你作弊没被抓,面试问到的时候打不出来,基本就是黑名单了,面试的时候也是,面试完立马把面试遇到的题目记下来,回去补,一面的题目,可能二面还会问。

  • 面试的时候多笑笑?,面试没那么可怕,咱们都是双向选择,不要随便一个公司给你offer 你就签了,比较一下,公司选人,你也要选公司撒,回想一下这个公司的面试体验,面试官一般都是你以后工作的同事,所以,考虑清楚再敲定。

  • 加油!加油!加油!C先生,冲鸭!!! ???

暂时想到这么多,待更。。。。

你可能感兴趣的:(C++,面试准备)