这段时间的面试问题合集
下面直接进入正题,把这段时间的面试内容整理做一个合集,放到这里1。
先来看看一组数据:
- 时间跨度:第一场面试 - 2014.12.12,最后一场面试 - 2015.01.04。
- 一共面试的场数:11场。(包括同一职位的一面、2面等)
- 拿到offer数:1个。
说明:后面的题目陈列是根据公司和职位来罗列的,跟具体的面试时间的先后顺序无关。
一、腾讯
- STL中的map是什么数据结构?(看过源码就可以知道很清楚,是红黑树)
- 线程重入和线程安全的问题。
- DHCP的协议结构。
- 网络编程中调用recv函数的时候,如果对端关闭了,这个函数将会收到什么,将返回什么?
- 一段程序:
uion test { int i; char str[2]; }tt; tt.str[0] = 10; tt.str[1] = 1; tt.i 应该等于多少?
- C/S 程序的过程,能写出原函数当然最好,写出来就写流程。(比如socket->bind->listen……)
- TCP连接的三次握手,TCP协议的状态图,在建立链接之后,如果服务器突然断开了,客户端的状态怎么变化?
- 算法题:有10亿个数,怎么求出天top100。(10亿个数占多少内存,比nlog100更快的方法是什么)
- 算法题:有200万个地址段(地址段的形式为:192.168.1.255 - 192.168.10.255等等),无序,每个地址段不交叉,现在有个IP地址段,怎么最快的定为出它位于哪个地址段。
- GCC的默认优化选项是哪个?
- epoll是哪个linux版本完全支持的?
- 逗号表达式的值?(比如:
int i=(a=6,b=3,c=5)
,i的值是多少?) - epoll写代码的过程中,创建是哪个函数(epoll_create),增加handler是哪个函数,监听是哪个函数,边缘触发的标志是哪个?
- recv从tcp_buffer中读数据,如果只是读了数据,并没有把读过的数据从tcp_buffer中移走,再去读还是会读到原来的数据,这个时候应该设置什么标志?
- 服务器的压力测试,服务器A打开10万个连接,发送给服务器B,然后发送请求并且断开连接,问,这个过程会有什么限制?会有什么问题?怎么解决?
- 什么是同步操作、异步操作,什么是阻塞、非阻塞,有什么区别?
- 编程题:给定一个
n
个元素的数组a, 一个值sum,求数组a中所有能加起来等于sum的组合。比如a={1,2,3,4,5,6}, sum为10
,输出的组合为1234,136,235,46. - 编程题:把一个字符串反序输出。
- 指针和引用的区别?(比如,指针是一块内存,内存里存放的是指向另一块内存的地址,那引用呢?)
char s[5]={'a','b','c','d','e'}
和char s[5]={"abcde"}
的区别?- memcached 的网络构架是什么,它本身的构架是什么,它是怎么实现高并发的?
- STL中的vector和list的相关问题。(这是老问题了,比如他们内存是怎么分配的等等)
- C++的虚函数相关问题。(比如,有什么用,怎么用,虚函数表等)
char* const p; char const *p; char const** const **p;
这几个的区别等等。- C语言中求偏移地址的宏?(答案:#define offsetof(TYPE, MEMBER) ((size_t) & ((TYPE *)0)->MEMBER ) )
- memcached和redis的区别?
- 内存8M,有100万条数据,每条数据占20bytes,找出这100万数据中重复最多的一条数据。
- 设计一个秒杀系统,包括前端和后端,要求:1.保证公平性,即先来先得;2.防止作弊,即机器抢的不能算;3.对高并发的处理。用户体验要好。
- 智力题:一个正方形,剪去了一角(1/4的正方形),把剩下的分成4份,要求形状相同。
- 有一个广告服务器,每秒钟向一个外部服务器请求最大几十万条记录,得到每条回复的时间是1-100ms不等,要求每分钟计算50%和85%的中位数。(附:中位数的计算方法:比如有10个数,求80%的中位数的方法是,80% * 10 = 8,就是这10个数中第8大的那个数。)
- 几个简单的指数增长的计算题,要求1分钟给出答案。
- 进程间的通信方式,有哪些,共享内存是怎么做的?
二、京东
- 了解LVS吗,了解多少?
- 讲讲C++的重载,重载操作符的相关问题,vector的相关问题。
- apache,nginx这些了解多少?
- TCP的流程?
- select和epoll的区别?
- 10亿个数中取出top10。
- MySQL掌握怎样,数据库优化知道多少?
- 网络上的RPC调用了解多少?
- 对memcached的了解有多少?
- 对分布式、大数据类的计算有哪些了解? (PS:上面都是电话面试的内容,下面是到现场的正式的笔试和面试。)
- Linux命令:找出正在运行的进程中含有“QQACCT”的进程个数。
- Linux命令:一个文件有很多行,输出第二行。
- Linux命令:bash中,怎么把i这个变量加1.
- 描述TCP三次握手的过程。
- 服务器端的socket的相关函数调用顺序是什么?select的作用是什么?客户端与服务器建立链接是发生在accept函数之前还是之后?
- 网络七层模型是哪七层?tcp/udp是在哪一层?tcp/udp的优点是什么?
- 一般C/S的程序连接建立过程是什么?
- ping使用的是什么协议?是基于TCP的还是基于IP的?
- 在heap/stack(堆栈)上分配内存有什么区别?new/malloc是在哪里分配内存的?如果要分配一块大内存,应该在堆上分配还是在栈上分配?
- 尽可能多的写出进程间的通信方式和IPC。
- 线程间的同步方式有哪些?
- 线程和进程的区别?
- static关键字放在变量和放在函数名前面的区别》
- c和C++中的struct有什么区别?c++中断呃struct和class有什么区别?
- union和struct有什么区别?
- 不用第三个变量,怎么交换两个数的大小。(写出代码)
- 怎么用两个堆栈来实现一个队列。
- 编程题:有一个
int base[1000000]
找出其中的top 1000. - 编程题:有一副扑克牌,本身是排好序的,现在设计一个洗牌算法,尽可能的把它打乱,并求出时间复杂度。
- 编程题:用链表实现一个栈。
- 编程题:实现String类的几个函数:
class String{public: String(const char *str); String(const String& other); String operator=(const String& other); ~String(); private: char *m_data;};
(这个主要就是考查深拷贝和浅拷贝的问题) - 编程题:实现库函数strcpy:
char * strcpy(char* strDest, const char* strSrc);
. - core文件什么情况下会出现?用什么工具调试?查看core文件的时候,是关心它的函数调用关系,还是关心它的函数调用栈?
- Makefile的作用是什么?
- TCP的状态机能画出来吗?
- select和epoll的区别?epoll的边缘触发和水平触发的区别?
- memcached的源码看过没?看过哪些开源框架的源码?
- STL里面的list怎么实现的?vector是怎么实现的?
- C++的核心是哪些部分?
- 多线程编程有哪些要注意的地方?线程安全怎么避免和处理?
- 互联网的一些构架你了解哪些?
- java虚拟机的内部原理是什么?
- tcp三次握手中的半连接是什么?怎么利用半连接来进行DDoS攻击?
- C语言中编译链接过程是什么?
三、北京睿智融科
先来笔试题,大家感受一下,我不做评论:
笑话类:
- 一位女子,开出征婚条件有两点:1.要帅,2.要有车.电脑去帮她搜寻结果:象棋. 这位女子,不服搜出的结果又输入1.要有漂亮的房子,2.要有很多钱.电脑去帮她再次搜寻的结果:银行.此女子仍然不失望,继续输入条件,1要长得酷,2又要有安全感,结果搜出的结果是:奥特曼.此女子仍然不失望,还继续输入条件,1.要帅,2.要有车,3.要有漂亮的房子,4.要有很多钱,5要长得酷,6又要有安全感. 问电脑去帮她再次搜寻的结果是什么?
编程题:
- 编程得到1000以内的水仙花数。(水仙花数是指:一个三位数的各个位的数字的立方之和等于这个数本身。)
- 有一个二叉树,结构如下:
struct Node
{
int value;
struct Node *left;
struct Node *right;
};
用递归和非递归两种方式求出所有节点value的和 ? - 写一段程序从30个英雄中随机选5个。
数学题:
- 【三个孩子的年龄问题】
两个多年未见的朋友在街上偶遇,他们聊了很多事情,后来他们中的一个问道:“既然你是数学方面的教授,那你来算算这道题。我的三个儿子都在今天庆祝他们的生日!那么你能算出他们都有多大吗?” “好,”数学家回答说,“但是你得跟我讲讲他们的情况。” “好的,我给你一些提示”那三个孩子的父亲说“他们三个的年龄之积是36” “很好,”数学家说“但我还需要更多的提示” “他们三个的年龄之和等于那栋房子的窗户数”这个父亲指者旁边的一栋房子说 数学家考虑了一下说“但是,我还要一点来解你的这个难题。” “我的大儿子的眼睛是蓝色的。”父亲说。 “哦,够了。”数学家说道,并且给出了正确答案,即这三个孩子的年龄。
然后是面试题:
- boost了解吗?STL了解吗?STL里面的vector的内存分配方式?怎么减少内存的扩展次数?
- 多线程里面的同步方式有哪些?互斥锁和读写锁的区别是啥?
- TCP的优化方式有哪些?
- 算法题1. 随机抽出4张扑克牌,设计算法利用加减乘除使之等于24.
- 算法题2. 拼图游戏,设计一个算法。(题意应该是设计拼图游戏的AI算法)
四、百度
因为百度在北京,而我在深圳,所以两次都是电话面试。
- 做数据分析的时候,用excel、python的分析方法是什么?
- C/C++中的static关键字怎么用的?
- python中的tuple和list的区别?
- 写一个正则表达式,判断一个 是否是一个变量。(PS:C中变量名的规则是,首字符必须是字母或下划线,整个名字只能包括字母数字下划线三种。)
- C++的引用是什么?函数可不可以返回引用?cin/cout返回的是引用吗,为什么?
- STL中的map是怎样的?支不支持自定义的class,如果要支持,需要做哪些操作?
- 快排的思想是什么?它是稳定排序还是非稳定排序?怎么把快排改成稳定的排序?
- 堆结构的性质是什么?有什么限制?什么时候使用?
- 设计一个数据结构,要很快的进行插入和取中位数。(序列本身是无序的,中位数是指排序之后的序列中,位于中间的那个数。)
- linux下硬链接和软连接的区别?inode相关的问题。
- 进程间的通信方式IPC有哪些?管道能不能在两个终端的进程间通信,还是只能在父子进程间通信。
- MySQL的innodb和MyISAM的区别?
- select和epoll的深入区别。
- 网络阻塞的时候应怎么办(应该是问的TCP的拥塞控制类的)?
- MySQL的事务处理相关的问题。
- C++的虚函数是什么?虚函数的内部实现机制是什么?(要比比如虚函数表更深入一些的)
- C++中的内存管理是怎么做的?
- C++程序运行时的内存分配是怎么样的?
- PHP有多熟悉?YII框架掌握到什么程度。
- Apache和Nginx的区别?
五、Misfit
这次面试的内容全部都是跟具体互联网工作经验相关的具体项目,没有任何基础问题。面试官是百度的,两个字形容:呵呵。
附:我的复习准备
复习和学习了一些,有些东西是边面试边看的,有些是面试完了才看的,也就是还没来得及在面试中用上。
- 《SQL必知必会》:这个是我在离职前看完的,做了笔记,在每次去面试之前,根据需求把笔记过一遍;
- 《数据结构与算法分析·C++描述》:这个是离职前看了一部分,面试过程中几乎没再看过,因为复习其他了,就没时间看这个了;
- 《C++程序设计语言·特别版》:算是在离职前看了一遍,做了笔记,每次面试前过一下笔记,直到都记住了,不需要过笔记为止;
- 《Python基础教程》:在离职前很久就看完了,后面面试之前,根据需要简单复习一下笔记;
- 《C程序语言设计》:薄薄的一本,虽然看过很多遍了,偶尔在几次面试之前翻了几个里面比较好的示例(比如char *strcpy这个函数只用一行代码搞定);
- 《STL源码剖析》:这个是边找工作边看的,没看完,把基础和常用的几个看了,比如迭代器、list、vector、map等,看书的同时也对照代码一起看,面试中用到了,很有用;
- 网络部分:要感谢陈浩的两篇关于TCP的blog,第一篇,第二篇, 基本每次面试之前我都会过一下里面的知识点,非常有用,应付面试还是足够了;HTTP的各种状态码还是必须要知道的;
- Linux部分:因为一直在linux下工作,所以没啥大问题,偶尔网上看看blog就够了;
- 操作系统知识:比如内存、进程、同步、互斥、通信、信号量、线程安全、调试等等,这些东西都是以前的基础,不需要大复习,偶尔有不太清楚和不确定就上网查查就搞定了;
- memcached源码:面试中被问到不会,然后再去看的,提前看肯定是加分项;
- 《redis源码分析》:这本书看了,也看了一部分源码,不过完全没用上,因为看了之后就没有再去面试了,不过这个看了也绝对是加分项,因为我现在的工作中数据库就用到了它。
基本就是上面这些了吧,可能不完整,因为事后去回忆复习了什么,应该会漏掉一些东西。不过我当时应该算复习的比较全面了,从一开始的完全没有底气,到后面越复习越有信心和底气,到最后看完redis之后,我觉得已经不怕面试,怎么也能找到工作的感觉,虽然确实也没用到它,不过当时能有这个感觉,说明复习确实有效果。所以我想,就这些部分吧:语言(C++,python), 基本的数据结构和算法,网络,操作系统,linux,一些优秀的开源工具的源码(STL,memcached,redis等等) 。
结局看来,也许不是最好,但还不算差。人生总是有很多阴差阳错,没去了最想去的地方,不知道这个选择是怎样的一个转弯!
2015.02.10 23:55 (最后更新于这个时间)
Footnotes:
1 这次不谈感情、不说感受、不提心理状态,只是尽量平白客观的陈述面试题。这里的时间段仅仅是只我在离职之后的面试记录,离职之前的面试记录包括:1. 腾讯运营部; 2. 两次携程的大数据开发的面试,电话面试 和 上海现场面试; 3. 一次腾讯即通应用部的后台开发面试; 4. 其他不知名的公司,分期乐后台开发、美啦网后台开发。