最近真是敢死,复习了半学期的JAVA和机器学习,最近居然在面试C++岗位。额。好吧,其实也没有什么毛病,虽然一问三不知很痛苦,不过问多了也就有经验了,所以来这里总结一下。虽然全是笔试,只被面试过一次,看来我也只能做一条咸鱼了。
书籍方面,强烈推荐《剑指offer》,可谓面试神器,就说说最近同学和我面试的题吧:
第一道(WPS C++工程师):给你一个链表,请你说出这个链表的倒数第k个元素。
第二道(头条笔试):给你一个链表,怎么判断里面是够存在环。
第三道(微信内推面试):给你两个数,怎么求着这两个数二进制位有多少个不同。
第四道(WPS C++工程师):给你一个二叉搜索树,请用优雅的方式转化成双向链表。
关于C++基础的书,以下是我推荐的:
《C陷阱与缺陷》
《深度探索C++对象模型》(说真的,我真的很想说这本书的作者,翻译的很烂,不过看了原文你才发现,算了,我来都不一定能翻译的和他一样好,从对象继承,构造器,析构器,对象数据模型,函数数据模型都做了很好的解释)
《C++ prime plus》(这是一本字典,额,你可以去看,但不推荐制定计划看,这种就像字典,你需要的时候就去看比较好,当然,基础还是需要的)
《C和指针》《Effective C++》《C专家编程》《C++沉思录》(虽然没看完,不过还在继续看,说真的,2018年3月11号开始看,现在已经看了3本,我...)
《操作系统》(这个就不多说,说真的,一个C++程序员一定要懂操作系统,毕竟这是个底层语言,额,就这样吧)
《计算机网络》(网络编程主要是socket,TCP/IP协议....)
《Linux基础学习篇》(我也不知道为什么C++程序员一直和Linus挂钩,可是看了别人Java都能精通Linus为何我要放弃)
数据库方面看要求吧,反正我学的是Mysql,最近还有NoSql和Java的Redis。
说真的上面这三本是很重要的,特别是操作系统和计算机网络,很重要,很重要,很重要。
推荐书籍结束,接下来是常见的面试题:
1. C++的多态是怎么实现的?
2. new和malloc的区别?
3. 引用和指针的区别?
4. const int* a 和int* const a的区别?
5. C++是怎么处理钻石继承的?
6. 三次握手四次挥手?
7. 简述TCP/IP协议?
8. 操作系统的进程有几种状态?
9. 进程之间的通讯内容有什么?
编程题:
1. 求最长回文子串(Matcher算法)(虽然不知道为什么最近这个出的这么常见)
2. 给你一个数组A,B数组表示A数组中的数除下表等于位置的数之外的所有数相乘。
3. 如何用0~M*N-1随机生成一个M*N的矩阵?知道各点之间的距离,怎么求某点到另一个点的最短路,并且输出全部?现在知道一条路径,请找出是否存在这个矩阵里。
4. 给你两个文件,你怎么找出文件里面相同的行,并且输出出来。
5. 不同任何库函数,也不能new和malloc,请写出整数转字符串的函数。
6. 给你一个圆,圆需要分成n块,有m种颜色,有多少的涂色方法使得相邻之间的模块色不相同。
7. 给你N个数,每次点到m的人站出来,直到最后一个位置,请输出站出来的人数的编号序列。
8. 现在有一个数组,包含n个元素,有q个查询,对于每次查询,需要输出区间L-R之间这个式子(a[L]%a[L+1]%a[L+2]%...%a[R])的值,请设计合适的算法在满足的时间内,完成所有的查询。
总结:
第一,说真的,笔试的时候你一定不能写的太潦草,不然就像我一样,连个笔试都过不了,可怕。
第二,面试的时候一定要听清楚需求,不要因为太紧张而忘记面试官问你的问题,说真的,当时心态一崩,后来面试官问我什么都在想第一个,这是绝对不可以的,难怪最后他叹了一下。如果听不清楚,一定要多问,不要立刻回答,想清楚时间复杂度和漏洞再答。
第三,不要轻易相信面试官的话,什么“你回去等消息吧”,“我们在另行通知”肯定是没救了,不要留恋,一定要在下一次来之前做好补充,一次失败不可怕,可怕的是连站起来都不敢。
(问题和编程题我有空再来写。谢谢大家的支持。)