面经题目出自:国际化电商
一面
1.TCP中time_wait 状态
出自四次挥手状态中第四次挥手等待状态
为什么需要四次挥手状态:这个状态持续时间为报文在网络中存活时间*2;若服务器B为收到ACK,则会发送未收到的报文信息给客户端A让其重新发送;
2.HTTP2.0的特性
- 采用二进制传输;
- 支持多路复用,一个HTTP请求能解决多个HTTp请求传输;
- 支持头部压缩,通信双方会维护一张头信息表,此时HTTP只需传输索引;
- 支持服务器推送,可预先向客户端发送需要的内容;
3 HTTP的长连接和短连接
如果每次发起HTTP请求都需要重复建立TCP连接则会浪费资源,所以HTTP1.1采用默认长连接,可以设置Timeout参数来使得连接在规定时间内未传输数据之后关闭连接
4 B+树的优点,为什么不用二叉树
- B+树查询效率更高。B+树使用双向链表串连所有叶子节点,区间查询效率更高(因为所有数据都B+树的叶子节点,扫描数据库 只需扫一遍叶子结点就行了),但是B树则需要通过中序遍历才能完成查询范围的查找。
- B+树查询效率更稳定。B+树每次都必须查询到叶子节点才能找到数据,而B树查询的数据可能不在叶子节点,也可能在,这样就会造成查询的效率的不稳定
- B+树的磁盘读写代价更小。B+树的内部节点并没有指向关键字具体信息的指针,因此其内部节点相对B树更小,通常B+树矮更胖,高度小查询产生的I/O更少。
二叉树容易退化成链表查询;
N较大时,深度大,需要磁盘IO次数也会增多;
5 数据库事务隔离级别?怎么解决幻读?
行锁只能锁住行,不能锁住行的间隙,锁住行的间隙需要GapLock来进行实现,但是会出现问题:影响并发度,导致死锁;
二面
1 C++中new和malloc的区别
new和delete搭配使用,malloc和free搭配使用
- malloc是库函数,new是关键字;
- new无需分配内存大小,malloc需要;
- new分配失败时返回bad_malloc;delete 返回空指针;
- new从自由存储区分配,malloc从堆上分配;(自由存储区不等于堆)
2.如何解决丢失修改的问题?
使用乐观锁和悲观锁;
3.mysql没有主键mysql如何处理
后果:使用不了主键索引,查询会进行全表扫描
影响数据插入性能,插入数据需要生成ROW_ID,而生成的ROW_ID是全局共享的,并发会导致锁竞争,影响性能
mysql处理方式:
4.linux中ctrl c 和ctrl z
ctrl c :杀死一个进程
ctrl z:挂起一个进程;用户可以使用使用fg/bg操作恢复执行前台或后台的进程。fg命令在前台恢复执行被挂起的进程,此时可以使用ctrl-z再次挂起该进程,bg命令在后台恢复执行被挂起的进程,而此时将无法使用ctrl-z再次挂起该进程;
5.用户态和内核态区别
- 内核态与用户态是操作系统的两种运行级别,当程序运行在3级特权级上时,就可以称之为运行在用户态。因为这是最低特权级,是普通的用户进程运行的特权级,大部分用户直接面对的程序都是运行在用户态;
- 当程序运行在0级特权级上时,就可以称之为运行在内核态。
- 运行在用户态下的程序不能直接访问操作系统内核数据结构和程序。当我们在系统中执行一个程序时,大部分时间是运行在用户态下的,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态。
- 这两种状态的主要差别是:
处于用户态执行时,进程所能访问的内存空间和对象受到限制,其所处于占有的处理机是可被抢占的 ;
而处于核心态执行中的进程,则能访问所有的内存空间和对象,且所占有的处理机是不允许被抢占的
6.视频和实时语音用的传输层协议?
UPD,速度快,保证实时性;
三面
智能指针
不会
DNS解析
先解析后缀,再解析前缀;
在进行区域传送时使用TCP,客户端向DNS服务器查询域名时,使用UDP;
顶级域服务器负责顶级域名(.com .edu .org),权威服务器负责组织提供的地址;