春招面经(2019.3.15日起)

3.15腾讯提前批一面

第一次电话面试,而且是腾讯的,真的感觉特别紧张。虽然面试官小哥哥人特别好,一直在缓解气氛,但总体还是感觉状态不是很好。不管结果怎么样,先记录下这次所涉及到的知识点吧。

自我介绍:

有点紧张,把大概经历说了一下。

为什么投腾讯,以及企业文化:

谈到了百度狼性文化,其实之前看过一些相关的企业文化,但没有太深入取看。整体感觉有点不好。

问题1:C++和Python有什么区别?各有什么特点。

答:有点记不太清楚怎么回答的了。总之答得很不专业。

总结:

程序有两种执行方式,解释执行和编译执行。
PYTHON是一种脚本语言,是解释执行的,不需要经过编译,所以很方便快捷,且能够很好地跨平台,写一些小工具小程序特别合适。
而C++则是一种需要编译后运行语言,在特定的机器上编译后在特定的机上运行,运行效率高,安全稳定。但编译后的程序一般是不跨平台的。

学习一种编程语言不能看它热不热。而是要看它在某个领域的作用。就像汇编,虽然现在不热了,但是它在某些行业内还是很吃香的。PYTHON确实很强大,但在三五年内,不会作为一种主流的编程语言。至少在Windows程序开发领域内不会。

A、解释程序
所谓解释程序是高级语言翻译程序的一种,它将源语言(如BASIC)书写的源程序作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。就像外语翻译中的“口译”一样,说一句翻一句,不产生全文的翻译文本。这种工作方式非常适合于人通过终端设备与计算机会话,如在终端上打一条命令或语句,解释程序就立即将此语句解释成一条或几条指令并提交硬件立即执行且将执行结果反映到终端,从终端把命令打入后,就能立即得到计算结果。这的确是很方便的,很适合于一些小型机的计算问题。但解释程序执行速度很慢,例如源程序中出现循环,则解释程序也重复地解释并提交执行这一组语句,这就造成很大浪费。
B、编译程序
这是一类很重要的语言处理程序,它把高级语言(如FORTRAN、COBOL、Pascal、C等)源程序作为输入,进行翻译转换,产生出机器语言的目标程序,然后再让计算机去执行这个目标程序,得到计算结果。
编译程序工作时,先分析,后综合,从而得到目标程序。所谓分析,是指词法分析和语法分析;所谓综合是指代码优化,存储分配和代码生成。为了完成这些分析综合任务,编译程序采用对源程序进行多次扫描的办法,每次扫描集中完成一项或几项任务,也有一项任务分散到几次扫描去完成的。下面举一个四遍扫描的例子:第一遍扫描做词法分析;第二遍扫描做语法分析;第三遍扫描做代码优化和存储分配;第四遍扫描做代码生成。
值得一提的是,大多数的编译程序直接产生机器语言的目标代码,形成可执行的目标文件,但也有的编译程序则先产生汇编语言一级的符号代码文件,然后再调用汇编程序进行翻译加工处理,最后产生可执行的机器语言目标文件。
在实际应用中,对于需要经常使用的有大量计算的大型题目,采用招待速度较快的编译型的高级语言较好,虽然编译过程本身较为复杂,但一旦形成目标文件,以后可多次使用。相反,对于小型题目或计算简单不太费机时的题目,则多选用解释型的会话式高级语言,如BASIC,这样可以大大缩短编程及调试的时

简短概述

解释执行:
由解释器根据输入的数据当场执行而不生成任何的目标程序
编译执行:

先将源代码编译成目标语言(如:机器语言)之后通过连接程序连接到生成的目标程序进行执行

问题2:网络传输 层的协议,概述UDP与TCP。

答:举了电话通话与邮件发送的例子,由于紧张有些语无伦次。

总结:

1.TCP面向连接(如打电话前需拨号确认连接);UDP是无连接的(发送数据前不需要建立连接)
2.TCP提供可靠服务(数据无差错,不流失,不重复,有重传机制,且按序到达);UDP尽力最大交付(不保证可靠,无重传机制,无序)
3.TCP面向字节流(把数据看成一连串无结构的字符流,每次取多少由主机决定);UDP面向报文(发送多少接收多少)
4.TCP无界(通过字节流传输,字节流太长会拆分,太短会等待,接收方确认才会删除缓冲区;如服务器缓冲区足够大,则多次传输一次接收,被认为无界);
UDP有界(不拆分不合并,几次传输几次接收,被认为有界)
5.TCP有流量控制和拥塞控制(接收方让发送方的速度调节);UDP没有流量控制(不会改变)

6.TCP的头部(20bytes)比UDP大

问题3:UDP与TCP协议应用举例

答:举了IP电话与在线传输文件的例子,感觉答得不是很好。

总结:

什么时候应该使用TCP: 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输 …………

什么时候应该使用UDP: 当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP ……有些应用场景对可靠性要求不高会用到UPD,比如长视频,要求速率

项目相关:

问到是否做过web项目,谈到了项目,其实之前跟着网课做过一些小项目,但自我感觉不是什么大项目,就没敢说。后来说了一些爬虫时的经历,以及自己搭建的博客。

问题4:git相关命令

答:好久没用过git,许多命令其实忘得差不多了。

总结:

ACM比赛相关:

一些比赛经历以及有什么帮助。

问题5:快排与堆排

答:数据结构部分还是比较擅长的,虽然优化部分由于紧张有点记不太清楚了。

总结:

快速排序使用了分治法的策略。它的基本思想是,选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。可以看出,快速排序很重要的一点就是对基准数的选择。影响快速排序性能的因素除了本身数组的有序程度,还和这个基准数有关。在下面的代码中,我们使用最经典的,选择数组的第一个数作为基准数。

快速排序流程如下:

(1)从数列中挑出一个基准值。

(2)将所有比基准值小的摆放在基准前面,所有比基准值大的摆在基准的后面(相同的数可以到任一边);在这个分区退出之后,该基准就处于数列的中间位置。

(3)递归地把”基准值前面的子数列”和”基准值后面的子数列”进行排序。

堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。

学习情况:

浏览CSDN博客,看网课,看书。

3.18作业帮笔试

作业帮笔试

问题1

1~2048有多少个1。

解法:

千位上为1共有1000个(1000~1999)

百位上为1共有2 * 100 = 200个(100~199, 1100~1199)

十位上为1共有21 * 10 = 210个(XX10~XX19,XX∈[0,20])

个位上为1共有205个(不多说了,自行脑补)

一共有1000+200+210+205 = 1615个

问题2

给出树的前序与中序遍历,求后序。

解法:

不多说了,不会的话自行面壁。

问题3

死锁产生的条件。

解法:

互斥条件,请求与保持条件,不可抢夺条件,循环等待条件。

问题4

0,2,3,5,9,17,31,57,___

解法:

105(17+31+57)

问题5

2019!末尾有多少个0

解法:

重点在于质因数的运用,要点如下

1、基本的一点,25=10,得到1个0 可以写成2^15^1=10^1

2、进一步,425=100,得到2个0 可以写成2^25^2=10^2

3、进一步,8125=1000,得到3个0 可以写成2^35^3=10^3

4、进一步,16625=10000,得到4个0 可以写成2^45^4=10^4

5、5^5=3125超过2015了,所以5次方以上不考虑

6、不要担心双数的个数不够用,它会多出很多

7、有了上面的1到4条,就可以计算了 (运算符表示乘法,^表示乘方)

第一步,计算1到2015里多少个5,25,125,625

1、2015÷5=403 记作A1;

2、2015÷25=80.6取整得80 记作A2;

3、2015÷125=16.12取整得16 记作A3;

4、2015÷625=3.224取整得3 记作A4;

第二步,计算上述A1到A4中重复的部分

1、能被5整除的数里包含的能被25整除的数,记作B1 B1=A1-A2=403-80=323;

2、能被25整除的数里包含的能被125整除的数,记作B2 B2=A2-A3=80-16=64;

3、能被125整除的数里包含的能被625整除的数,记作B3 B3=A3-A4=16-3=13;

4、能被625整除的数里没有重复其它情况,直接计入结果,记作B4 B4=A4;

第三步,最终结果是 B11+B22+B33+B44=323+128+39+12=502………(1)

【答案】502个 最终结果也可以这样算: A1+A2+A3+A4=403+80+16+3=502 ………(2) 也就是 2015÷5+2015÷25+2015÷125+2015÷625 =403+80+16+3=502

问题6

给出一列数,将其中所有的0放置末尾

例如1,2,0,3,0,4,则为1,2,3,4,0,0

解法:

两个指针,一个快指针,一个慢指针,如果快指针指向的数不为0,则快指针的值赋给慢指针,快指针慢指针均前进一步,否则快指针前进一步,慢指针不动。最后快指针指向尾了,如果慢指针没指向尾,之后的值全部为0。

问题7

判断字符串是否为合法密码(长度大于8,含三类不同字符,且长度大于2的子串不能出现相同情况,例如A1abcdabc不合法,abc出现两次)

解法:

前两点太简单就不说了,第3点可以使用set每一次储存3个连续的字符,如果重复就不是合法的字符。

问题8

5张牌斗牛,其中三张牌之和取余为0即为牛,剩余两张牌之和取余为几结果即为牛几。

解法:

5张牌只取个位数,然map记录下来,5张牌相加取余,然后依次减去其中一张牌,看得到的数字在map里存不存在,如果存在就说明有牛,牛就是5张牌相加的结果。也就是5张只和减两张看是不是0。相当于一层循环 ,On时间复杂度

3.19腾讯提前批二面

腾讯二面

面试官好像是个技术总监,声音特别小,听的不是很清楚。总之10分钟结束,什么问题也没问,只留下一句之后等结果。然后就挂了,挂的莫名其妙。总结一下教训:

自我介绍

尽量2分钟左右。要提到很高兴参加贵公司的面试。结尾尽量要客气。

项目情况

千万不要说项目少,小项目也可以提及,不然对方真以为自己没项目了。(惨痛的教训)

比赛情况

其实敲代码没什么不好的,我们实习生本来就是应该干底层的(qyq)

岗位期望

后台研发,我期望做……当然具体还是听从部门的安排,如果部门安排我做哪一块那我会听从部门的安排,然后尽快学习相关技能,尽快融入其中。

实习计划

1.首先尽快了解企业文化,了解部门规章制度,以便争取未来尽快融入。

2.了解所在团队的成员情况,分工,自己的角色和职责,以便更好的配合。

3.了解岗前应会的内容,及团队当前的主要工作及进展。

4.拟定工作计划,经组长审阅后按照计划推进。

5.自己会不断学习,积极寻求同事和领导的帮助。以达成更好的业绩。

兴趣爱好

切忌书生气,不能高谈阔论,一副兴趣广泛的样子。尽量要和职业贴近,否则就不要说的太多。

然后面试结束,没问任何专业相关问题,GG。

3.20阿里一面

阿里首面

问题1

C++指针与引用的区别及内存情况

思路:

问题2

智能指针问题

思路:

问题3

hash_map与map的区别,底层构造,时间复杂度,选择

思路:

问题4

手写代码树的中序遍历

思路:

问题5

vector的机制

思路:

问题6

堆排序原理

思路:

问题7

集合中,输出所有子集。

思路:

问题8

红墨水蓝墨水问题

思路:

一样多。

问题9

智能指针

现状及项目

问题10

预处理以及#ifdef

思路:

选择性编译

问题11

awk命令

思路:

3.22西科

具体不多说了,培训班一样。

3.25旷世笔试

3.26虎牙笔试

3.27西山居笔试

3.28西山居一面

  1. 类内const如何初始化

  2. 代码规范化问题,以及析构函数与构造函数调用问题

    1、C++中, 构造函数和析构函数可以被显示调用. 显示调用默认构造函数的语法: a.A::A();(不能写成a.A();) , 显示调用非默认构造函数的语法: a.A::A(7);(不能写成a.A(7);); 显示调用析构函数的语法: a.A::~A();(可以写成a.~A();) .

    2、显示调用构造函数和析构函数就像调用一般的函数一样, 并不意味着创建或销毁对象;

    3、如果构造函数中动态分配了空间, 则显示调用构造函数会造成内存泄露. 创建对象时的隐式构造函数调用已经为对象分配了动态内存,当用创建好的对象显示调用构造函数时, 对象指向的动态内存更新为显示调用时所分配的, 对象生命周期结束时析构函数所释放掉的是后一次分配的动态内存, 也就是说创建对象时隐式构造函数调用所分配的那块内存泄漏了.

    4、如果析构函数中释放动态分配的空间, 则会造成多次释放同一内存, 会出现严重错误.

  3. 三子棋问题

  4. C++虚函数及底层实现

    虚函数表

  5. 容器及各自底层实现

  6. 结构体对齐

  7. C++11特性

  8. 内联函数与宏定义

  9. 连连看寻路问题

  10. 双属性排序问题

  11. 字符串最大值问题

  12. 找bug,野指针问题

  13. 研发岗难度在哪方面(哪些方向)

3.29西山居二三四面

二面

项目

三面

笔试题

智能指针

四面

项目

比赛担当角色

虚函数表

模板

Dijkstra算法分析

Linux下两个pthread如何实现同步

socket编程IO多路复用

如何看待自己的组织能力

上岗时间

4.1东方财富一面

使用过哪些API

知道哪些设计模式

单例设计模式讲解

101个数(0, 100],只有一个数出现两次,找出这个数。

4.4声网一面

4.5腾讯笔试

4.9声网二面

项目

聊天室项目

找中位数

第k大数

矩阵n次方

4.12阿里二面

多态

调试

服务器正在运行程序如何调试

链表交叉结点

找中位数

n个硬盘每个损坏概率p,且m个硬盘坏掉概率——(p^m)*((1-p)^(n-m))

4.14腾讯正式批一面

爬虫项目介绍

如何反爬(不知道)

智能指针概述

遇到异常处理如何解决内存释放问题

如何处理未知异常(不知道)

仿函数(不知道)

用过stl哪些算法

A*搜索

Linux相关命令

如何判断某目录下某文件是否存在(find –name)

如何计算某目录下文件个数(C语言实现readdir)

多进程多线程相关

进程间通信方式

详细概述epoll

read返回值(返回值为长度。为0断开连接,-1为异常)

边沿触发(阻塞,非阻塞)

数据库了解多少


纸短情长啊文章结束了但我们的故事还在继续
坚持原创技术分享,您的支持将鼓励我继续创作!