腾讯后台开发面试题--整理1
linux和os:netstat tcpdump ipcs ipcrm (如果这四个命令没听说过或者不能熟练使用,基本上可以回家,通过的概率较小 ^_^ ,这四个命令的熟练掌握程度基本上能体现面试者实际开发和调试程序的经验)cpu 内存 硬盘 等等与系统性能调试相关的命令必须熟练掌握,设置修改权限 tcp网络状态查看 各进程状态 抓包相关等相关命令 必须熟练掌握awk se
可参照这篇博客一起看:http://blog.chinaunix.net/uid-29867011-id-4508083.html
linux和os:
netstat tcpdump ipcs ipcrm (如果这四个命令没听说过或者不能熟练使用,基本上可以回家,通过的概率较小 ^_^ ,这四个命令的熟练掌握程度基本上能体现面试者实际开发和调试程序的经验)
http://blog.csdn.net/fycy2010/article/details/48194375
cpu 内存 硬盘 等等与系统性能调试相关的命令必须熟练掌握,设置修改权限 tcp网络状态查看 各进程状态 抓包相关等相关命令 必须熟练掌握
awk sed需掌握
共享内存的使用实现原理(必考必问,然后共享内存段被映射进进程空间之后,存在于进程空间的什么位置?共享内存段最大限制是多少?)
http://blog.csdn.net/fycy2010/article/details/48194863
c++进程内存空间分布(注意各部分的内存地址谁高谁低,注意栈从高道低分配,堆从低到高分配)
ELF是什么?其大小与程序中全局变量的是否初始化有什么关系(注意.bss段)
《程序员的自我修养》P57
.bss段在ELF中仅有一个占位符,不占据磁盘空间
使用过哪些进程间通讯机制,并详细说明(重点)
makefile编写,虽然比较基础,但是会被问到
gdb调试相关的经验,会被问到
如何定位内存泄露?
http://blog.csdn.net/fycy2010/article/details/48195933
动态链接和静态链接的区别?
32位系统一个进程最多多少堆内存?
《程序员的自我修养》P168
多线程和多进程的区别(重点 面试官最最关心的一个问题,必须从cpu调度,上下文切换,数据共享,多核cup利用率,资源占用,等等各方面回答,然后有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存器,否则悲催)
写一个c程序辨别系统是64位 or 32位?
#include<stdio.h>
int main()
{
unsigned int i = 0xffffffff;
if ( i > 0)
{
printf("64bit \n");
}
else
{
printf("32bits \n");
}
system("pause");
return 0;
}
写一个c程序辨别系统是大端or小端字节序?
用union
信号:列出常见的信号,信号怎么处理?
i++是否原子操作?并解释为什么?
《程序员的自我修养》P25
说出你所知道的各类linux系统的各类同步机制(重点)
什么是死锁?如何避免死锁(每个技术面试官必问)
列举说明linux系统的各类异步机制
Linux的I/O机制经历了一下几个阶段的演进:
1. 同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。
2. 同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/O操作可以立即返回,但是并不保证I/O操作成功。
3. 异步事件阻塞I/O: 用户进程可以对I/O事件进行阻塞,但是I/O操作并不阻塞。通过select/poll/epoll等函数调用来达到此目的。
4. 异步时间非阻塞I/O: 也叫做异步I/O(AIO),用户程序可以通过向内核发出I/O请求命令,不用等带I/O事件真正发生,可以继续做另外的事情,等I/O操作完成,内核会通过函数回调或者信号机制通知用户进程。这样很大程度提高了系统吞吐量。
http://blog.csdn.net/liukun321/article/details/7018811
exit() _exit()的区别?
_exit 和exit的区别与联系:
_exit 函数的作用是:直接使进程停止运行,清除其使用的内存空间,并清除其在内核的各种数据结构;
exit 函数则在这些基础上做了一些小动作,在执行退出之前还加了若干道工序。exit() 函数与 _exit() 函数的最大区别在于exit()函数在调用exit 系统调用前要检查文件的打开情况,把文件缓冲区中的内容写回文件,即所有缓冲的输出数据都被冲洗。
另外,可以通过atexit注册终止处理函数,这些函数是在执行exit时自动调用的
注意前者为库函数,后者为系统调用。
如何实现守护进程?
《APUE》P343
http://www.embedu.org/Column/Column198.htm
http://blog.csdn.net/russell_tao/article/details/7090033
linux的内存管理机制是什么?
《CSAPP》P554
http://www.cnblogs.com/zhaoyl/p/3695517.html
linux的任务调度机制是什么?
http://blog.csdn.net/rainharder/article/details/7975387
标准库函数和系统调用的区别?
(1)库函数可能调用一个或多个系统调用,但它们并不是内核的入口点,有些库函数就不会使用任何系统调用。
(2)可以在必要时替换库函数,但不能替换系统调用。比如sbrk按应用程指定字节增加或减少进程地址空间,而malloc在用户空间管理这块由sbrk分配的空间,能实现一种特定类型的分配。
(3)应用程序可以调用库函数或系统调用,而很多库函数则调用系统调用。
(4)系统调用提供的是一种最小接口,而库函数则提供比较复杂的功能,比如是带上缓冲区。
(5)有相当一部分系统调用时可重入的,比如read write open lseek等,但标准IO库则则是不可重入的,因为它们使用了静态数据结构、或者调用了malloc和free,或者以不可重入的方式使用全局数据结构。
(6)系统调用是线程安全的,因为它对于用户程序来说是原子的;库函数大部分也是线程安全的,但是把多个函数组合在一起不保证线程安全。另外,即便系统调用是安全的,但是系统调用可以通过对内核状态的改变影响其他线程,比如操作文件描述符的系统调用,不用担心多个线程操作同一描述符就导致进程崩溃,但一个在读,另一个线程close了描述符,依然会带来不少问题。
补充一个坑爹坑爹坑爹坑爹的问题:系统如何将一个信号通知到进程?(这一题哥没有答出来)
《APUE》P233
c语言:
宏定义和展开(必须精通)
位操作(必须精通)
指针操作和计算(必须精通)
内存分配(必须精通)
sizeof必考
各类库函数必须非常熟练的实现
哪些库函数属于高危函数,为什么?(strcpy等等)
(1)缓冲区溢出的:http://blog.csdn.net/yang_yulei/article/details/45314177
(2)线程不安全的:《程序员的自我修养》P350
c++:
一个String类的完整实现必须很快速写出来(注意:赋值构造,operator=是关键)
虚函数的作用和实现原理(必问必考,实现原理必须很熟)
sizeof一个类求大小(注意成员变量,函数,虚函数,继承等等对大小的影响)
指针和引用的区别(一般都会问到)
多重类构造和析构的顺序
stl各容器的实现原理(必考)
extern c 是干啥的,(必须将编译器的函数名修饰的机制解答的很透彻)
《程序员的自我修养》P90
volatile是干啥用的,(必须将cpu的寄存器缓存机制回答的很透彻)
static const等等的用法,(能说出越多越好)
数据结构或者算法:
《离散数学》范围内的一切问题皆由可能被深入问到(这个最坑爹,最重要,最体现功底,最能加分,特别是各类树结构的实现和应用)
各类排序:大根堆的实现,快排(如何避免最糟糕的状态?),bitmap的运用等等
hash, 任何一个技术面试官必问(例如为什么一般hashtable的桶数会取一个素数?如何有效避免hash结果值的碰撞)
网络编程:
tcp与udp的区别(必问)
《UNP》P196
udp调用connect有什么作用?
《UNP》P196
tcp连接中时序图,状态图,必须非常非常熟练
socket服务端的实现,select和epoll的区别(必问)
epoll哪些触发模式,有啥区别?(必须非常详尽的解释水平触发和边缘触发的区别,以及边缘触发在编程中要做哪些更多的确认)
http://blog.csdn.net/fycy2010/article/details/47965163
无论是LT和ET模式,都适用于以上所说的流程。区别是,LT模式下,只要一个句柄上的事件一次没有处理完,会在以后调用epoll_wait时次次返回这个句柄,而ET模式仅在第一次返回。
这件事怎么做到的呢?当一个socket句柄上有事件时,内核会把该句柄插入上面所说的准备就绪list链表,这时我们调用epoll_wait,会把准备就绪的socket拷贝到用户态内存,然后清空准备就绪list链表,最后,epoll_wait干了件事,就是检查这些socket,如果不是ET模式(就是LT模式的句柄了),并且这些socket上确实有未处理的事件时,又把该句柄放回到刚刚清空的准备就绪链表了。所以,非ET的句柄,只要它上面还有事件,epoll_wait每次都会返回。而ET模式的句柄,除非有新中断到,即使socket上的事件没有处理完,也是不会次次从epoll_wait返回的。
大规模连接上来,并发模型怎么设计
tcp结束连接怎么握手,time_wait状态是什么,为什么会有time_wait状态?哪一方会有time_wait状态,如何避免time_wait状态占用资源(必须回答的详细)
tcp头多少字节?哪些字段?(必问)
什么是滑动窗口(必问)
connect会阻塞,怎么解决?(必考必问,提示:设置非阻塞,返回之后用select检测状态)
http://zhucuicui.96986.blog.163.com/blog/static/5833370220136219016445/
如果select返回可读,结果只读到0字节,什么情况?《UNP》P130 (1)(b)
MSDN的解释:For connection-oriented sockets, readability can also indicate that a request to close the socket has been received from the peer.
If the virtual circuit was closed gracefully, and all data was received, then a recv will return immediately with zero bytes read.
If the virtual circuit was reset, then a recv will complete immediately with an error code such as WSAECONNRESET.
The presence of OOB data will be checked if the socket option SO_OOBINLINE has been enabled (see setsockopt).
select示意可读,recv返回0,连接正常关闭断开
keepalive 是什么东东?如何使用?
列举你所知道的tcp选项,并说明其作用。
《UNP》P171
socket什么情况下可读?
《UNP》P130
db:
mysql,会考sql语言,服务器数据库大规模数据怎么设计,db各种性能指标
最后:补充一个最最重要,最最坑爹,最最有难度的一个题目:一个每秒百万级访问量的互联网服务器,每个访问都有数据计算和I/O操作,如果让你设计,你怎么设计?
------------------------------------------------
计算机网络相关
1 TCP三次握手、四次挥手
2 TCP滑动窗口机制
3 TCP拥塞控制机制
4 socket模型
C/C++相关
1 虚析构、模板和宏
2 虚函数实现机制
3 vector与list的区别,map是如何实现的,查找效率是多少
4 extern 关键字有什么用
5 malloc和new的区别,能否malloc(1.2G)
linux以及操作系统相关
1 内存池实现
2 进程间通信机制
3 Linux ps命令,以及看内存当前使用状态的命令
4 进程与线程的区别,共享的数据
5 进程的内存空间
算法与数据结构 (手写代码实现)
1 大整数加、减、乘、除、求模运算实现
2 很多整数,找其中出现次数最多的那个数
3 单链表翻转(两个指针如何实现)、查找、删除、插入以及双向链表、有序链表合并
4 判断一个整数是否是2的整数次幂.(n&(n-1))
5 二分查找(注意边界条件)
6 常见排序算法的实现以及稳定性(快排跟归并考的很多)
7 字符串翻转(O(n))、匹配(KMP算法)
8 最长递增子序列(nlogn的算法)
9 链表判断是否有环,环的入口,两个链表是否相交(快慢指针)。
10 指定一个数组,求2个数的和等于指定的和(某一个数),如果是3,4,5,n个等于个的和(某一个数)呢?(可以看作背包问题)
其他
1 红黑树的性质以及插入和删除
2 解析XML文件
3 千万级的用户,提供一个服务,该服务有很多模块,现在有一个底层模块需要优化,问怎么实现,在不影响其他服务模块以及用户体验的情况下。(面IEG)
4 卡特兰数以及公式推导(应多很多)
5 未知大小的文件,翻转整个文件
6 如果内存中有个cache存储qq号和最近登录时间问怎么样做hit和淘汰
7 检测短信敏感词
8 大数据问题
9 C++、java和PHP有什么本质区别
更多推荐
所有评论(0)