腾讯后台面试

linuxos:

*、netstat tcpdump ipcsipcrm      点击打开链接

*cpu内存硬盘等等与系统性能调试相关的命令 点击打开链接

*、设置修改权限tcp网络状态查看各进程状态抓包相关等相关命令   tcpdump netstat ps……awk sed需掌握

*、共享内存的使用实现原理         点击打开链接   必考必问

*、c++进程内存空间分布(注意各部分的内存地址谁高谁低,注意栈从高道低分配,堆从低到高分配)点击打开链接

*ELF是什么?其大小与程序中全局变量的是否初始化有什么关系(注意.bss段)

*、使用过哪些进程间通讯机制,并详细说明(重点)点击打开链接

*makefile编写,虽然比较基础,但是会被问到

*gdb调试相关的经验,会被问到

*、如何定位内存泄露?点击打开链接  也可以用top实时观察

*、动态链接和静态链接的区别点击打开链接

*32位系统一个进程最多多少堆内存点击打开链接

*、多线程和多进程的区别 点击打开链接

*、写一个c程序辨别系统是64 or32位,辨别系统是大端or小端字节序点击打开链接

*、信号:列出常见的信号,信号怎么处理?  点击打开链接 

*i++是否原子操作?并解释为什么?点击打开链接

*、说出你所知道的各类linux系统的各类同步机制(重点),什么是死锁?如何避免死锁(每个技术面试官必问) 点击打开链接

*、exit()_exit()的区别点击打开链接

*、如何实现守护进程?点击打开链接

*linux的内存管理机制是什么?   点击打开链接

*linux的任务调度机制是什么?点击打开链接

*、标准库函数和系统调用的区别?点击打开链接

*、系统如何将一个信号通知到进程?

c语言:

&、宏定义和展开(必须精通)

&、位操作(必须精通)

&、指针操作和计算(必须精通)

&、内存分配(必须精通)

&sizeof必考

&、各类库函数必须非常熟练的实现

&、哪些库函数属于高危函数,为什么?(strcpy等等)

c++:

%、一个String类的完整实现必须很快速写出来(注意:赋值构造,operator=是关键)

%、虚函数的作用和实现原理(必问必考,实现原理必须很熟)

%sizeof一个类求大小(注意成员变量,函数,虚函数,继承等等对大小的影响)

%、指针和引用的区别(一般都会问到)

%、多重类构造和析构的顺序

%stl各容器的实现原理(必考)

%extern c 是干啥的,(必须将编译器的函数名修饰的机制解答的很透彻)

%volatile是干啥用的,(必须将cpu的寄存器缓存机制回答的很透彻)

volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。

%static const等等的用法,(能说出越多越好)

数据结构或者算法:

#、《离散数学》范围内的一切问题皆由可能被深入问到(这个最坑爹,最重要,最体现功底,最能加分,特别是各类树结构的实现和应用)

#、各类排序:大根堆的实现,快排(如何避免最糟糕的状态?),bitmap的运用等等

#hash,任何一个技术面试官必问(例如为什么一般hashtable的桶数会取一个素数?如何有效避免hash结果值的碰撞)

网络编程:

$、tcpudp的区别(必问)

$udp调用connect有什么作用?

1:UDP中可以使用connect系统调用

2:UDPconnect操作与TCPconnect操作有着本质区别.TCP中调用connect会引起三次握手,clientserver建立连结.UDP中调用connect内核仅仅把对端ip&port记录下来.

3:UDP中可以多次调用connect,TCP只能调用一次connect.UDP多次调用connect有两种用途:1,指定一个新的ip&port连结.2,断开和之前的ip&port的连结.指定新连结,直接设置connect第二个参数即可.断开连结,需要将connect第二个参数中的sin_family设置成 AF_UNSPEC即可

4:UDP中使用connect可以提高效率.原因如下:普通的UDP发送两个报文内核做了如下:#1:建立连结#2:发送报文#3:断开连结#4:建立连结#5:发送报文#6:断开连结

采用connect方式的UDP发送两个报文内核如下处理:#1:建立连结#2:发送报文#3:发送报文另外一点,每次发送报文内核都由可能要做路由查询.5:采用connectUDP发送接受报文可以调用send,writerecv,read操作.当然也可以调用sendto,recvfrom.调用sendto的时候第五个参数必须是NULL,第六个参数是0.调用recvfrom,recv,read系统调用只能获取到先前connectip&port发送的报文
UDP
中使用connect的好处:1:会提升效率.前面已经描述了.2:高并发服务中会增加系统稳定性.原因:假设client A 通过非connectUDPserver B,C通信.B,C提供相同服务.为了负载均衡,我们让AB,C交替通信.A B通信IPa:PORTa <----> IPb:PORTbA C通信IPa:PORTa' <---->IPc:PORTc 
假设PORTa PORTa'相同了(在大并发情况下会发生这种情况),那么就有可能出现A等待B的报文,却收到了C的报文.导致收报错误.解决方法内就是采用connectUDP通信方式.A中创建两个udp,然后分别connectB,C.

$tcp连接中时序图,状态图,必须非常非常熟练

$socket服务端的实现,selectepoll的区别(必问)

select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。这个时候就可以标识32*max值范围的fd

对于单进程多线程,每个线程处理多个fd的情况,select是不适合的。

1.所有的线程均是从1-32*max进行扫描,每个线程处理的均是一段fd值,这样做有点浪费

2.1024上限问题,一个处理多个用户的进程,fd值远远大于1024

所以这个时候应该采用poll

poll传递的是数组头指针和该数组的长度,只要数组的长度不是很长,性能还是很不错的,因为poll一次在内核中申请4K(一个页的大小来存放fd),尽量控制在4K以内

epoll还是poll的一种优化,返回后不需要对所有的fd进行遍历,在内核中维持了fd的列表。selectpoll是将这个内核列表维持在用户态,然后传递到内核中。但是只有在2.6的内核才支持。

epoll更适合于处理大量的fd ,且活跃fd不是很多的情况,毕竟fd较多还是一个串行的操作

$epoll哪些触发模式,有啥区别?(必须非常详尽的解释水平触发和边缘触发的区别,以及边缘触发在编程中要做哪些更多的确认)

$、大规模连接上来,并发模型怎么设计

$tcp结束连接怎么握手,time_wait状态是什么,为什么会有time_wait状态?哪一方会有time_wait状态,如何避免time_wait状态占用资源(必须回答的详细)

$tcp头多少字节?哪些字段?(必问)

$、什么是滑动窗口

TCP中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为0时,发送方一般不能再发送数据报,但有两种情况除外,一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程。另一种情况是发送方可以发送一个1字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小。

TCP的特点之一是提供体积可变的滑动窗口机制,支持端到端的流量控制。TCP的窗口以字节为单位进行调整,以适应接收方的处理能力。处理过程如下: 减小窗口尺寸(1TCP连接阶段,双方协商窗口尺寸,同时接收方预留数据缓存区;

  (2)发送方根据协商的结果,发送符合窗口尺寸的数据字节流,并等待对方的确认;

  (3)发送方根据确认信息,改变窗口的尺寸,增加或者减少发送未得到确认的字节流中的字节数。调整过程包括:如果出现发送拥塞,发送窗口缩小为原来的一半,同时将超时重传的时间间隔扩大一倍。

  滑动窗口机制为端到端设备间的数据传输提供了可靠的流量控制机制。然而,它只能在源端设备和目的端设备起作用,当网络中间设备(例如路由器等)发生拥塞时,滑动窗口机制将不起作用。

$connect会阻塞,怎么解决?

(必考必问,提示:设置非阻塞,返回之后用select检测状态)

最通常的方法最有效的是加定时器;也可以采用非阻塞模式。

如果select返回可读,结果只读到0字节,什么情况?

$keepalive

$、列举你所知道的tcp选项,并说明其作用。

$socket什么情况下可读?

A socket isready for reading if any of thefollowing four conditions is true:

a. The number ofbytes of data in the socketreceive buffer is greater than or

     equal to thecurrent size of the low-watermark for the socket receive buffer.

     A read operationon the socket will notblock and will return a value greater than 0

b.  The read half of the connectionsis closed(i.e., A TCP connection that has received a FIN).

     A read operationon the socket will notblock and will return 0 (i.e., EOF)

c. The socket isa listening socket and thenumber of completed connection is nonzero.

    An accept on thelistening socket willnormally not block, although we will describea  

d. A socketerror is pending. A readoperation on the socket will not block and will return

    an error (-1) with errnoset to thespecific error condition

五、db:

@、mysql,会考sql语言,服务器数据库大规模数据怎么设计,db各种性能指标

@、最后:补充一个最最重要,最最坑爹,最最有难度的一个题目:一个每秒百万级访问量的互联网服务器,每个访问都有数据计算和I/O操作,如果让你设计,你怎么设计?

 

 


  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值