腾讯后台开发社招面试记录

        在7.11七点多快下班的时候接到了腾讯深圳总部打来的电话,问我对腾讯的后台开发有没有兴趣,我询问得知开发主要是Linux下的C++,这和我的方向是比较匹配的,就表示有意愿,接下来招聘人员说需要进行一个简短的电话面试,我当时在公司办公楼里面,怕信号不好,就讲明稍等一会可否,人很爽快的说十分钟过后打给我。决定好后我找到办公楼下开阔的地方等了一会,还没有电话打的过来,时间已经超过十分钟,于是我主动打过去,拨打的是来电总机号码,说请拨打分机号,我就挂断。刚挂断,就接到了招聘人员打来的电话,这点很棒,接下来就是简短的电面内容。

电面:

1、list和vector实现有什么区别?讲讲vector的resize操作?

  list的空间是按需分配,内存空间不一定连续,在插入新元素时不会引起迭代器失效,删除元素时只有当前元素的迭代器失效,插入删除元素常数时间。

  vector的空间是线性连续的,在空间不足的情况下插入元素时需要三个步骤(1)开辟新的大块内存区域(2)从旧空间拷贝数据到新空间(3)释放旧空间(注:在插入新元素时,原空间后的内存大小不足以满足新内存大小的需求时,才会新找空间),此操作较复杂,因此vector内部分配空间时总是供大于需,即按2*size大小来分配空间,避免频繁移动数据操作,因此,插入删除操作可能会引起迭代器失效。

扩展有关vector的两个概念:

  容量:总的内存空间(由迭代器start和end_of_storage标识)

  大小:已用空间(由迭代器start和finish标识)

  resize操作:先来看看vector中resize的实现代码

 1 void resize(size_type new_size, const T& x)
 2 {
 3     if (new_size < size())
 4         erase(begin() + new_size, end());
 5     else
 6         insert(end(), new_size - size(), x);
 7 }
 8 void resize(size_type new_size)
 9 {
10     resize(new_size, T());
11 }
 

由此可以看出是根据resize函数传入的参数来修改vector的大小。

Tips:以上参考自《STL源码剖析》

2、linux查看网络状态命令是什么?使用场景?

3、TCP和UDP有什么区别?应用场景?三次握手四次断开的过程?TCP和保证可靠性?UDP有可靠性保证吗?四次断开如果服务器没有收到客户端的确认包,会一直等待吗?等多久?

4、两个浮点数如何比较大小?

  浮点数不能直接与0比较大小,需要满足在给定的范围内即可:if ((a > -1e - 6) && (a < 1e - 6))

  注:1e - 6 = 1 * 10^-6

5、指针和引用的区别?

  (1)指针有空间,存放的是变量的地址,引用只是变量的别名

    (2)指针可以为NULL,引用不可以为空

  (3)指针可以在初始化以后改变指向,引用则一旦初始化就不能改变

  (4)有const指针,无const引用

  (5)指针可以有二级操作(**p),引用无

  (6)操作指针指向的变量需要解引用(*p),而操作引用即可达到操作变量的目的

  (7)指针和引用自增操作的含义不同

以上就是电面的问题,在电面结束以后,招聘人员约我去公司面试,给的地址是万利达13楼,看了网上的面经就去了。约的是两点半,我两点十五就去了,好像面试的人还很多,一楼大厅坐了很多人。找到了前台小姐姐查到了约我招聘人的手机号,然后坐电梯上楼打电话联系到他,在进入办公区时需要登记,然后给一个临时访问工牌。进入办公区后,发现办公室布置得很温馨,有好多沙发和玩偶,感觉很棒。招聘人员带我进入一个会议室,告诉我预约到三点半,给了一份笔试题,然后告诉我鄙视时间45分钟,接下来会有三四十分钟的面试,主要围绕着鄙视答题状况以及项目经历展开,告诉完我这些后,帮我倒了杯水和拿了草稿纸,然后就说自己还有事情,就出去了。我大概看了一边笔试题,可能自己太渣感觉不太好。

笔试题:

1、#define和const的区别?

  (1)define定义的只是一个字符串,没有类型,存储在代码段,编译器不能进行类型安全检查,const有类型,存储在数据段,能够进行安全类型检查

  (2)define不能够调试,const定义的变量可以

  (3)define在预处理时期进行字符串替换,const在编译时进行

2、char arr[20]和char *p = new char[20]的区别?初始化和未初始化的情况?放在内存的那个位置?

  char arr[20]定义的字符数组未初始化,存放在未初始化数据区(如果使用static关键字修饰,则会使用'\0'进行初始化,存放在静态数据区)

  char *p = new char[20]定义的字符数组使用'\0'进行初始化,存放在堆中

  

3、C++内存分配有哪几种方式?画出C++内存布局图?

  (1)由new/malloc()在堆上分配空间,需要手动释放

  (2)由系统在栈上分配空间,比如函数调用的参数信息等,不需要手动的释放

  (3)在静态存储区分配空间,如staic变量

 

4、各种排序算法的平均时间复杂度和最坏情况下的时间复杂度?

5、手写string类的成员函数,构造、析构、复制构造函数、赋值运算符?类有一个数据成员count,此数据成员有什么用?(后续面试的时候问的)

6、写一个服务器程序,要求给客户端延迟一段时间发送消息,参数传入延迟的时间和发送的消息,要求能并发处理?(具体要求四条,记不清楚了,就大概如此描述)

7、写出代码段的输出

 1 void fun()
 2 {
 3       unsigned int a = 1;
 4       unsigned int b = 3;
 5       double c = 1/3;
 6 
 7       double d = 1;
 8       double e = 1/3;
 9   
10       cout >> c >> " " >> e >> endl;
11 }     

8、整数、指针、布尔变量、浮点数值如何与0比较大小?

9、(1)已知进程名,使用命令查看当前进程打开的文件句柄?

     (2)已知进程名,使用命令查看当前进程的网络连接状态?

     (3)已知进程名,查看eth0网卡与ip10.10.10.10:10653之间的TCP数据包?

       (还有一个问题,忘记了。。。。。。)

10、程序优化

 1 string Remove_ctrl(string str)
 2 {
 3       string StrResult;
 4       for (int i = 0; i <= str.size(); i++)
 5       {
 6              if (str[i] > 0x20)
 7              {
 8                     StrResult = StrResult + str[i]
 9              }
10       }
11       return StrResult;
12 }                    

接下来面试官过来了,拿着我的笔试试卷开始面试。

1、问笔试的第二题,将数组定义在函数内部和外部有什么区别?分配的内存在哪里?

2、看了排序的回答,问我是不是排序算法接触的少?(回答的太烂了,都忘记了。。。尴尬)

3、引导我回答了笔试题6(提示字符串拼接如何做效率最高)

4、问了linux命令的题目

5、问了string类的题目?

     从这个类的定义看,你觉得这个类有什么特征?

     写复制构造函数,你最关注什么?

     类成员变量count的作用?

6、在C++开发中主要用了人什么核心技术?

7、聊聊你做的一个印象比较深刻的项目?

8、说说你在工作中解决了什么难题,用了什么技术?具体讲?

9、看了简历,问我对SIP协议了解多少?画出SIP协议建立会话的时序图?SIP协议属于哪一层的协议?怎么标识对端?怎么查找路由得到对端的IP地址?

10、项目开发中用到了什么库?

11、项目开发中使用的什么环境?代码的架构?如何编译代码?

12、讲讲最近做的项目?

13、如何调试coredump文件?

14、工作中用的是c++9还是c++11?用到了11的什么特性?

15、你还有什么问题要问么?

差不多四点左右面试结束,告诉我项目主管出差了,需要商量后给出搜需面试通知。

个人感觉时知识点不到位,大厂社招比较关注实战经验以及使用的核心技术,但是基础还是会问的,对做过的东西已经要熟悉,会问的比较深入。经过这次面试,个人感觉平时对知识面的广度还是要多关注的,一个无意中看到的知识点也许会拯救尴尬境地中方自己呢?你看过的书,你学到的技术,都会存在与你看不见的地方,影响着你。(此处鸡汤。。。)

这篇博客记录了腾讯社招后台开发岗的笔试面试问题,自己太渣,还需要学习,因此没给出答案,后续写上自己会的答案。

 

posted @ 2018-07-12 21:54  星星里的花  阅读(11483)  评论(0编辑  收藏  举报