今天在健身的时候,正跑着步,气喘吁吁的,突然接到了来自腾讯的电话,就知道是面试。腾讯已经在实习生招聘捞了我两个星期了,这次终于捞起了我。

不过终于体会到跑步大脑缺氧的感觉了,真的是问题都很熟悉,但是都没答上来,所以肯定就挂了。

  1. 因为我不是计算机专业的,所以问我都学了什么课程,哪些课程是自学的。
  2. STL中Map的查找复杂度。

:红黑树是AVL树(二叉平衡树):

- 插入处理在整体上耗费O(log n) 时间- 删除处理在整体上耗费O(log n) 时间。- 查找可以像普通二叉查找树一样的进行,所以耗费O(log n)时间。

3. Map的底层数据结构(因为我回答的并不好,所以引申问了我这个问题让我思考复杂度)。

:map的特性是,所有的元素都会根据元素的键值自动排序,map所有元素都是key-value对。其底层机制是红黑树。拓展一下:set、map的底层都是红黑树。

  1. 有没有用过SortedMap?(貌似这个是Java里面的?)
  2. TCP/IP三次握手过程,为什么不是两次呢?
    :TCP三次握手过程如下:
    (1)客户端向服务器端发出SYN,指明自己想要连接的端口和自己ISN;
    (2)服务器端向客户端发送自己的SYN作为呼应,并包括了自己的ISN,同时还将客户端的ISN+1作为ACK返回给客户端。
    (3)为了确认服务器的SYN,客户端将服务器的ISN+1作为ACK返回给服务器。
    为什么不是两次的原因在于:客户端向服务器端发送的第一个报文有可能因为网络原因而较长时间才能到达服务器端,这个时候服务器端会回复一个SYN,但是由于等待时间过长,客户端将此报文认为已经失效,但是这个时候如果没有第三次握手,服务器端会认为双方连接已经建立,然后服务器就会一直等待客户端发送信息,这样就浪费资源。

  3. 类里面成员变量能不能用memset()来进行设置?会有什么问题呢?
    :不能。这里说不可以,不是说真的不可以,而是说真的别这样!有些情况下是可以用的,因为类只是一个说明,对象也是这个类的一个具体化了的内存块,当你memset一个对象时,它把这块对象内存初始化了,在不影响内部结构的情况下是不会有问题的,这就是为什么有时候使用memset一个对象时不会出错的原因。如果类包含虚拟函数,则不能用 memset 来初始化类对象。

  4. 你了解多线程和多进程吗?
  5. 你知道fork()吗?(我说我知道fork()跟多线程有关系,但是操作系统我还没有再看一遍所以记不太清了,就没有继续问。)
  6. 介绍一下你的项目(项目一)
  7. 介绍下你在你的项目二中都做了什么?
  8. (我的项目二是一个机器人来识别障碍物然后躲避障碍物),你是怎么实现机器人来躲避障碍物的?
  9. 你有没有在Linux下进行网络编程?有没有服务器、客户端之类的编程项目?
  10. 你平时编程是在linux下还是在windows下?

差不多就想起来了这么多,基本跪了。就算给自己长点经验吧。