您的位置 首页 golang

从50道腾讯面试题,分析腾讯c++后端工程的技能树

大家可以看一下哦,腾讯60道面试题,有很多和算法有关系的,也有一小部分和语言有关系,也有一部分和编译源码有关,还有操作系统有关系

各大厂面试题可以后台私信“资料”免费分享哦

这些题目来分析一下,这些题目里具备哪些方便的技能

第一个

1,语言(不管你是做C/C++还是python还是Java还是Golang等等。。。。)这是去面试去第一轮 语言相关的,

更多的是为c++为例在C++里我们要知道那些语言,

很多人说在面试的时候要不要把c++的特性啊,模板啊,或者语言相关的高级用法刷一遍呢!

尤其是模板它很重要

用法:

面向对象的继承和多态机制有效提高了程序的可重用性和可扩充性。在程序的可重用性方面,程序员还希望得到更多支持。举一个最简单的例子,为了交换两个整型变量的值,需要写下面的 Swap 函数

 void Swap(int & x, int & y) { int tmp = x; x = y; y = tmp; }  

为了交换两个 double 型变量的值,还需要编写下面的 Swap 函数:

 void Swap (double & xr double & y) { double tmp = x; x = y; y = tmp; }  

如果还要交换两个 char 型变量的值,交换两个 CStudent 类对象的值……都需要再编写 Swap 函数。而这些 Swap 函数除了处理的数据类型不同外,形式上都是一样的。能否只写一遍 Swap 函数,就能用来交换各种类型的变量的值呢?继承和多态显然无法解决这个问题。因此,“模板”的概念就应运而生了。

C++数据结构

a.链式结构
b.二叉树,红黑树,btree/b+tree。
c.图形–>
d.排序,快排,希尔,归并,堆排序
e.字符串,KMP–>next
f.dijkstra,最小生成树,
g. 贪心,动态规划

网络编程

1:tcp和udp的区别

TCP:是面向连接的流传输控制协议,具有高可靠性,确保传输数据的正确性,有验证重发机制,因此不会出现丢失或乱序。

UDP:是无连接的数据报服务,不对数据报进行检查与修改,无须等待对方的应答,会出现分组丢失、重复、乱序,但具有较好的实时性,UDP段结构比TCP的段结构简单,因此网络开销也小。

2:流量控制和拥塞控制

拥塞控制
网络拥塞现象是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象。拥塞控制是处理网络拥塞现象的一种机制。
流量控制
数据的传送与接收过程当中很可能出现收方来不及接收的情况,这时就需要对发方进行控制,以免数据丢失。

3:多线程如何同步

windows

线程同步有四种方式:临界区、内核对象、互斥量、信号量。

Linux

线程同步有最常用的是:互斥锁、条件变量和信号量。

4:进程间通讯的方式有哪些,各有什么优缺点

进程间通信

Linux 进程间通信(IPC)以下以几部分发展而来:
早期UNIX进程间通信、基于System V进程间通信、基于Socket进程间通信和POSIX进程间通信。
UNIX进程间通信方式包括:管道、FIFO、信号。
System V进程间通信方式包括:System V消息队列、System V信号灯、System V共享内存、
POSIX进程间通信包括:posix消息队列、posix信号灯、posix共享内存。
现在linux使用的进程间通信方式:
(1)管道(pipe)和有名管道(FIFO)
(2)信号(signal)
(3)消息队列
(4)共享内存
(5)信号量
(6)套接字(socket)

5:tcp连接建立的时候3次握手,断开连接的4次握手的具体过程

建立连接采用的3次握手协议,具体是指:
第一次握手是客户端connect连接到server,server accept client的请求之后,向client端发送一个消息,相当于说我都准备好了,你连接上我了,这是第二次握手,第3次握手就是client向server发送的,就是对第二次握手消息的确认。之后client和server就开始通讯了。
断开连接的4次握手,具体如下:
断开连接的一端发送close请求是第一次握手,另外一端接收到断开连接的请求之后需要对close进行确认,发送一个消息,这是第二次握手,发送了确认消息之后还要向对端发送close消息,要关闭对对端的连接,这是第3次握手,而在最初发送断开连接的一端接收到消息之后,进入到一个很重要的状态time_wait状态,这个状态也是面试官经常问道的问题,最后一次握手是最初发送断开连接的一端接收到消息之后。对消息的确认。

6:epoll与select的区别

select在一个进程中打开的最大fd是有限制的,由FD_SETSIZE设置,默认值是2048。不过 epoll则没有这个限制,它所支持的fd上限是最大可以打开文件的数目,这个数字一般远大于2048,一般来说内存越大,fd上限越大,1G内存都能达到大约10w左右。

select的轮询机制是系统会去查找每个fd是否数据已准备好,当fd很多的时候,效率当然就直线下降了,epoll采用基于事件的通知方式,一旦某个fd数据就绪时,内核会采用类似callback的回调机制,迅速激活这个文件描述符,而不需要不断的去轮询查找就绪的描述符,这就是epoll高效最本质的原因。

无论是select还是epoll都需要内核把FD消息通知给用户空间,如何避免不必要的内存拷贝就很重要,在这点上,epoll是通过内核于用户空间mmap同一块内存实现的,而select则做了不必要的拷贝

7:epoll中et和lt的区别与实现原理

LT:水平触发,效率会低于ET触发,尤其在大并发,大流量的情况下。但是LT对代码编写要求比较低,不容易出现问题。LT模式服务编写上的表现是:只要有数据没有被获取,内核就不断通知你,因此不用担心事件丢失的情况。
ET:边缘触发,效率非常高,在并发,大流量的情况下,会比LT少很多epoll的系统调用,因此效率高。但是对编程要求高,需要细致地处理每个请求,否则容易发生丢失事件的情况。

文章来源:智云一二三科技

文章标题:从50道腾讯面试题,分析腾讯c++后端工程的技能树

文章地址:https://www.zhihuclub.com/101213.shtml

关于作者: 智云科技

热门文章

网站地图