c++后台开发(Linux)

Linux(这是我结合很多面试者的面试题做出来的,有我自己总结的,也有一些内容转自别人)

58同城

TCP三次握手和四次挥手,TCP是怎么保证传输可靠性 ?

三次握手:建立连接的过程
调⽤socket, 创建文件描述符; 调用connect, 向服务器发起连接请求;
第一次:connect会发出SYN段并阻塞等待服务器应答;
第二次:服务器收到客户端的SYN, 会应答一个SYN-ACK段表示"同意建立连接";
第三次:客户端收到SYN-ACK后会从connect()返回, 同时应答⼀一个ACK段;

四次挥手:断开连接的过程
第一次:如果客户端没有更多的请求了, 就调用close()关闭连接, 客户端会向服务器发送FIN段
此时服务器收到FIN后, 会回应一个ACK, 同时read会返回0
read返回之后, 服务器就知道客户端关闭了连接, 也调用close关闭连接, 这个时候服务器会向客户端 发送一个FIN;
客户端收到FIN, 再返回一个ACK给服务器

保证传输可靠性:
1.校验和
2.序列号
3.确认应答
4.超时重传
5.连接管理
6.流量控制
7.拥塞控制

c++后台开发(Linux)_第1张图片

字段 含义
SYN 请求建立连接,并在其序列号的字段进行序列号的初始值设定
FIN 希望断开连接
ACK 确认号是否有效

:
:

Linux中的指令:top, ps, netstat,查看系统内存的指令(free)

top:top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况.显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等.
-b 批处理
-c 显示完整的治命令
-I 忽略失效过程
-s 保密模式
-S 累积模式
-i<时间> 设置间隔时间
-u<用户名> 指定用户名
-p<进程号> 指定进程
-n<次数> 循环显示的次数

ps:ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程
a 显示所有进程
-a 显示同一终端下的所有程序
-A 显示所有进程
c 显示进程的真实名称
-N 反向选择
-e 等于“-A”
e 显示环境变量
f 显示程序间的关系
-H 显示树状结构
r 显示当前终端的进程
T 显示当前终端的所有程序
u 指定用户的所有进程
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
-C<命令> 列出指定命令的状况
–lines<行数> 每页显示的行数
–width<字符数> 每页显示的字符数
–help 显示帮助信息
–version 显示版本显示

netstatnetstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。
netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][–ip]
a或–all 显示所有连线中的Socket。
-A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。
-c或–continuous 持续列出网络状态。
-C或–cache 显示路由器配置的快取信息。
-e或–extend 显示网络其他相关信息。
-F或–fib 显示FIB。
-g或–groups 显示多重广播功能群组组员名单。
-h或–help 在线帮助。
-i或–interfaces 显示网络界面信息表单。
-l或–listening 显示监控中的服务器的Socket。
-M或–masquerade 显示伪装的网络连线。
-n或–numeric 直接使用IP地址,而不通过域名服务器。
-N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。
-o或–timers 显示计时器。
-p或–programs 显示正在使用Socket的程序识别码和程序名称。
-r或–route 显示Routing Table。
-s或–statistice 显示网络工作信息统计表。
-t或–tcp 显示TCP传输协议的连线状况。
-u或–udp 显示UDP传输协议的连线状况。
-v或–verbose 显示指令执行过程。
-V或–version 显示版本信息。
-w或–raw 显示RAW传输协议的连线状况。
-x或–unix 此参数的效果和指定”-A unix”参数相同。
–ip或–inet 此参数的效果和指定”-A inet”参数相同。

free:free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer
-b  以Byte为单位显示内存使用情况。
-k  以KB为单位显示内存使用情况。
-m  以MB为单位显示内存使用情况。
-g 以GB为单位显示内存使用情况。
-o  不显示缓冲区调节列。
-s<间隔秒数>  持续观察内存使用状况。
-t  显示内存总和列。
-V  显示版本信息。

Linux文件系统里的主目录功能?

根目录:根目录位于目录结构的最顶层,用斜线(/)表示,有操作系统中所有的目录和文件。
/bin:二进制目录,包含了那些供系统管理员和普通用户使用的重要linux命令的二进制映像
/boot:目录存放系统核心文件以及启动时必须读取的文件
/dev:目录保存着外部设备代码的文件,访问这些外部设备与访问一个文件或一个目录没有区别
/etc:是整个Linux系统的中心,其中包含所有系统管理和维护方面的配置文件
/home:用户的主目录
/lib:目录下存放必要的运行库,主要是编程语言的库
/media:Linux会把识别的设备挂载到这个目录下
/mnt:一个通用的安装点,可以临时安装任何文件系统或远程资源
/opt:这是给主机额外安装软件所摆放的目录
/proc:进程文件系统proc的根目录,其中的部分文件分别对应正在运行的进程,可用于访问当前进程的地址空间
/root:超级用户root的主目录
/sbin:存放的是系统管理员使用的系统管理程序
/usr:很多应用程序和文件几乎都存放在这个目录
/var :存放很多不断变化的文件

阿里巴巴

线程怎样通信

【1】锁机制:包括互斥锁、条件变量、读写锁和自旋锁
互斥锁:当锁被占用时试图对其加锁的线程都进入阻塞状态,当锁释放时哪个等待线程能获得该锁取决于内核的调度。确保同一时间只能有一个线程访问共享资源
条件变量:以原子的方式阻塞进程,直到某个特定条件为真为止。条件变量始终与互斥锁一起使用。
读写锁:以写模式加锁而处于写状态时任何试图加锁的线程(不论是读或写)都阻塞,当以读状态模式加锁而处于读状态时“读”线程不阻塞,“写”线程阻塞。读模式共享,写模式互斥。
自旋锁:上锁受阻时线程不阻塞而是在循环中轮询查看能否获得该锁,没有线程的切换因而没有切换开销,不过对CPU的霸占会导致CPU资源的浪费。
【2】信号量机制:无名线程信号量和命名线程信号量
【3】信号机制:类似进程间的信号处理

TCP的滑动窗口并且怎么协商大小,拥塞控制

滑动窗口:

【1】接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端;
【2】如果接收端缓冲区满了, 就会将窗口置为0; 这时发送方不再发送数据
【3】tcp接收端如何把窗口大小告诉发送端:tcp首部的16位窗口字段存放了窗口大小信息

拥塞控制:
【1】这里有一个慢启动机制,先发少量的数据,摸清当前的网络拥堵状态, 再决定按照多大的速度传输数据
【2】发送开始定义拥塞窗口大小为1,每收到一个ACK应答,拥塞窗口+1
【3】每次发送数据包的时候, 将拥塞窗口和接收端主机反馈的窗口大小做比较, 取较小的值作为实际发送的窗口;
【4】当拥塞窗口到达一个慢启动阈值,不再按照指数方式增加,而是按照线性方式增加
【5】归根结底是TCP协议想尽可能快的把数据传输给对方, 但是又要避免给网络造成太大压力的折中方案.

爱奇艺

HTTP服务器,搜索引擎

TCP、UDP的区别

epoll的优点

socket编程,服务端怎么建立socket,从socket到accept的过程。

TCP:服务端:socket -> bind -> listen -> accept -> recv/send -> close 客户端:socket -> connect -> send/recv -> close

UDP:服务端:socket -> bind -> recvfrom/sendto -> close 客户端:socket -> sendto/recvfrom -> close

RPC

Shell

你可能感兴趣的:(代码)