这段时间的面试问题合集

下面直接进入正题,把这段时间的面试内容整理做一个合集,放到这里1

先来看看一组数据:

说明:后面的题目陈列是根据公司和职位来罗列的,跟具体的面试时间的先后顺序无关。

一、腾讯

  1. STL中的map是什么数据结构?(看过源码就可以知道很清楚,是红黑树)
  2. 线程重入和线程安全的问题。
  3. DHCP的协议结构。
  4. 网络编程中调用recv函数的时候,如果对端关闭了,这个函数将会收到什么,将返回什么?
  5. 一段程序:
    uion test
    {
     int i;
     char str[2];
    }tt;
    tt.str[0] = 10;
    tt.str[1] = 1;
    tt.i 应该等于多少?
    
  6. C/S 程序的过程,能写出原函数当然最好,写出来就写流程。(比如socket->bind->listen……)
  7. TCP连接的三次握手,TCP协议的状态图,在建立链接之后,如果服务器突然断开了,客户端的状态怎么变化?
  8. 算法题:有10亿个数,怎么求出天top100。(10亿个数占多少内存,比nlog100更快的方法是什么)
  9. 算法题:有200万个地址段(地址段的形式为:192.168.1.255 - 192.168.10.255等等),无序,每个地址段不交叉,现在有个IP地址段,怎么最快的定为出它位于哪个地址段。
  10. GCC的默认优化选项是哪个?
  11. epoll是哪个linux版本完全支持的?
  12. 逗号表达式的值?(比如: int i=(a=6,b=3,c=5),i的值是多少?)
  13. epoll写代码的过程中,创建是哪个函数(epoll_create),增加handler是哪个函数,监听是哪个函数,边缘触发的标志是哪个?
  14. recv从tcp_buffer中读数据,如果只是读了数据,并没有把读过的数据从tcp_buffer中移走,再去读还是会读到原来的数据,这个时候应该设置什么标志?
  15. 服务器的压力测试,服务器A打开10万个连接,发送给服务器B,然后发送请求并且断开连接,问,这个过程会有什么限制?会有什么问题?怎么解决?
  16. 什么是同步操作、异步操作,什么是阻塞、非阻塞,有什么区别?
  17. 编程题:给定一个n个元素的数组a, 一个值sum,求数组a中所有能加起来等于sum的组合。比如a={1,2,3,4,5,6}, sum为10,输出的组合为1234,136,235,46.
  18. 编程题:把一个字符串反序输出。
  19. 指针和引用的区别?(比如,指针是一块内存,内存里存放的是指向另一块内存的地址,那引用呢?)
  20. char s[5]={'a','b','c','d','e'}char s[5]={"abcde"} 的区别?
  21. memcached 的网络构架是什么,它本身的构架是什么,它是怎么实现高并发的?
  22. STL中的vector和list的相关问题。(这是老问题了,比如他们内存是怎么分配的等等)
  23. C++的虚函数相关问题。(比如,有什么用,怎么用,虚函数表等)
  24. char* const p; char const *p; char const** const **p; 这几个的区别等等。
  25. C语言中求偏移地址的宏?(答案:#define offsetof(TYPE, MEMBER) ((size_t) & ((TYPE *)0)->MEMBER ) )
  26. memcached和redis的区别?
  27. 内存8M,有100万条数据,每条数据占20bytes,找出这100万数据中重复最多的一条数据。
  28. 设计一个秒杀系统,包括前端和后端,要求:1.保证公平性,即先来先得;2.防止作弊,即机器抢的不能算;3.对高并发的处理。用户体验要好。
  29. 智力题:一个正方形,剪去了一角(1/4的正方形),把剩下的分成4份,要求形状相同。
  30. 有一个广告服务器,每秒钟向一个外部服务器请求最大几十万条记录,得到每条回复的时间是1-100ms不等,要求每分钟计算50%和85%的中位数。(附:中位数的计算方法:比如有10个数,求80%的中位数的方法是,80% * 10 = 8,就是这10个数中第8大的那个数。)
  31. 几个简单的指数增长的计算题,要求1分钟给出答案。
  32. 进程间的通信方式,有哪些,共享内存是怎么做的?

二、京东

  1. 了解LVS吗,了解多少?
  2. 讲讲C++的重载,重载操作符的相关问题,vector的相关问题。
  3. apache,nginx这些了解多少?
  4. TCP的流程?
  5. select和epoll的区别?
  6. 10亿个数中取出top10。
  7. MySQL掌握怎样,数据库优化知道多少?
  8. 网络上的RPC调用了解多少?
  9. 对memcached的了解有多少?
  10. 对分布式、大数据类的计算有哪些了解? (PS:上面都是电话面试的内容,下面是到现场的正式的笔试和面试。
  11. Linux命令:找出正在运行的进程中含有“QQACCT”的进程个数。
  12. Linux命令:一个文件有很多行,输出第二行。
  13. Linux命令:bash中,怎么把i这个变量加1.
  14. 描述TCP三次握手的过程。
  15. 服务器端的socket的相关函数调用顺序是什么?select的作用是什么?客户端与服务器建立链接是发生在accept函数之前还是之后?
  16. 网络七层模型是哪七层?tcp/udp是在哪一层?tcp/udp的优点是什么?
  17. 一般C/S的程序连接建立过程是什么?
  18. ping使用的是什么协议?是基于TCP的还是基于IP的?
  19. 在heap/stack(堆栈)上分配内存有什么区别?new/malloc是在哪里分配内存的?如果要分配一块大内存,应该在堆上分配还是在栈上分配?
  20. 尽可能多的写出进程间的通信方式和IPC。
  21. 线程间的同步方式有哪些?
  22. 线程和进程的区别?
  23. static关键字放在变量和放在函数名前面的区别》
  24. c和C++中的struct有什么区别?c++中断呃struct和class有什么区别?
  25. union和struct有什么区别?
  26. 不用第三个变量,怎么交换两个数的大小。(写出代码)
  27. 怎么用两个堆栈来实现一个队列。
  28. 编程题:有一个int base[1000000] 找出其中的top 1000.
  29. 编程题:有一副扑克牌,本身是排好序的,现在设计一个洗牌算法,尽可能的把它打乱,并求出时间复杂度。
  30. 编程题:用链表实现一个栈。
  31. 编程题:实现String类的几个函数:class String{public: String(const char *str); String(const String& other); String operator=(const String& other); ~String(); private: char *m_data;}; (这个主要就是考查深拷贝和浅拷贝的问题)
  32. 编程题:实现库函数strcpy: char * strcpy(char* strDest, const char* strSrc);.
  33. core文件什么情况下会出现?用什么工具调试?查看core文件的时候,是关心它的函数调用关系,还是关心它的函数调用栈?
  34. Makefile的作用是什么?
  35. TCP的状态机能画出来吗?
  36. select和epoll的区别?epoll的边缘触发和水平触发的区别?
  37. memcached的源码看过没?看过哪些开源框架的源码?
  38. STL里面的list怎么实现的?vector是怎么实现的?
  39. C++的核心是哪些部分?
  40. 多线程编程有哪些要注意的地方?线程安全怎么避免和处理?
  41. 互联网的一些构架你了解哪些?
  42. java虚拟机的内部原理是什么?
  43. tcp三次握手中的半连接是什么?怎么利用半连接来进行DDoS攻击?
  44. C语言中编译链接过程是什么?

三、北京睿智融科

先来笔试题,大家感受一下,我不做评论:

笑话类:
  1. 一位女子,开出征婚条件有两点:1.要帅,2.要有车.电脑去帮她搜寻结果:象棋. 这位女子,不服搜出的结果又输入1.要有漂亮的房子,2.要有很多钱.电脑去帮她再次搜寻的结果:银行.此女子仍然不失望,继续输入条件,1要长得酷,2又要有安全感,结果搜出的结果是:奥特曼.此女子仍然不失望,还继续输入条件,1.要帅,2.要有车,3.要有漂亮的房子,4.要有很多钱,5要长得酷,6又要有安全感. 问电脑去帮她再次搜寻的结果是什么?
编程题:
  1. 编程得到1000以内的水仙花数。(水仙花数是指:一个三位数的各个位的数字的立方之和等于这个数本身。)
  2. 有一个二叉树,结构如下:
    struct Node
    {
    int value;
    struct Node *left;
    struct Node *right;
    };
    用递归和非递归两种方式求出所有节点value的和 ?
  3. 写一段程序从30个英雄中随机选5个。
数学题:
  1. 【三个孩子的年龄问题】
    两个多年未见的朋友在街上偶遇,他们聊了很多事情,后来他们中的一个问道:“既然你是数学方面的教授,那你来算算这道题。我的三个儿子都在今天庆祝他们的生日!那么你能算出他们都有多大吗?” “好,”数学家回答说,“但是你得跟我讲讲他们的情况。” “好的,我给你一些提示”那三个孩子的父亲说“他们三个的年龄之积是36” “很好,”数学家说“但我还需要更多的提示” “他们三个的年龄之和等于那栋房子的窗户数”这个父亲指者旁边的一栋房子说 数学家考虑了一下说“但是,我还要一点来解你的这个难题。” “我的大儿子的眼睛是蓝色的。”父亲说。 “哦,够了。”数学家说道,并且给出了正确答案,即这三个孩子的年龄。

然后是面试题:

  1. boost了解吗?STL了解吗?STL里面的vector的内存分配方式?怎么减少内存的扩展次数?
  2. 多线程里面的同步方式有哪些?互斥锁和读写锁的区别是啥?
  3. TCP的优化方式有哪些?
  4. 算法题1. 随机抽出4张扑克牌,设计算法利用加减乘除使之等于24.
  5. 算法题2. 拼图游戏,设计一个算法。(题意应该是设计拼图游戏的AI算法)

四、百度

因为百度在北京,而我在深圳,所以两次都是电话面试。

  1. 做数据分析的时候,用excel、python的分析方法是什么?
  2. C/C++中的static关键字怎么用的?
  3. python中的tuple和list的区别?
  4. 写一个正则表达式,判断一个 是否是一个变量。(PS:C中变量名的规则是,首字符必须是字母或下划线,整个名字只能包括字母数字下划线三种。)
  5. C++的引用是什么?函数可不可以返回引用?cin/cout返回的是引用吗,为什么?
  6. STL中的map是怎样的?支不支持自定义的class,如果要支持,需要做哪些操作?
  7. 快排的思想是什么?它是稳定排序还是非稳定排序?怎么把快排改成稳定的排序?
  8. 堆结构的性质是什么?有什么限制?什么时候使用?
  9. 设计一个数据结构,要很快的进行插入和取中位数。(序列本身是无序的,中位数是指排序之后的序列中,位于中间的那个数。)
  10. linux下硬链接和软连接的区别?inode相关的问题。
  11. 进程间的通信方式IPC有哪些?管道能不能在两个终端的进程间通信,还是只能在父子进程间通信。
  12. MySQL的innodb和MyISAM的区别?
  13. select和epoll的深入区别。
  14. 网络阻塞的时候应怎么办(应该是问的TCP的拥塞控制类的)?
  15. MySQL的事务处理相关的问题。
  16. C++的虚函数是什么?虚函数的内部实现机制是什么?(要比比如虚函数表更深入一些的)
  17. C++中的内存管理是怎么做的?
  18. C++程序运行时的内存分配是怎么样的?
  19. PHP有多熟悉?YII框架掌握到什么程度。
  20. Apache和Nginx的区别?

五、Misfit

这次面试的内容全部都是跟具体互联网工作经验相关的具体项目,没有任何基础问题。面试官是百度的,两个字形容:呵呵

附:我的复习准备

复习和学习了一些,有些东西是边面试边看的,有些是面试完了才看的,也就是还没来得及在面试中用上。

基本就是上面这些了吧,可能不完整,因为事后去回忆复习了什么,应该会漏掉一些东西。不过我当时应该算复习的比较全面了,从一开始的完全没有底气,到后面越复习越有信心和底气,到最后看完redis之后,我觉得已经不怕面试,怎么也能找到工作的感觉,虽然确实也没用到它,不过当时能有这个感觉,说明复习确实有效果。所以我想,就这些部分吧:语言(C++,python), 基本的数据结构和算法,网络,操作系统,linux,一些优秀的开源工具的源码(STL,memcached,redis等等)

结局看来,也许不是最好,但还不算差。人生总是有很多阴差阳错,没去了最想去的地方,不知道这个选择是怎样的一个转弯!

2015.02.10 23:55 (最后更新于这个时间)

Footnotes:

1 这次不谈感情、不说感受、不提心理状态,只是尽量平白客观的陈述面试题。这里的时间段仅仅是只我在离职之后的面试记录,离职之前的面试记录包括:1. 腾讯运营部; 2. 两次携程的大数据开发的面试,电话面试上海现场面试; 3. 一次腾讯即通应用部的后台开发面试; 4. 其他不知名的公司,分期乐后台开发美啦网后台开发