- TCP可靠性如何保证? 答:有很多方面,比如校验和,序列号,确认应答,超时重传,流量,拥塞控制等等。
- 控制网络拥塞,目的是什么,为什么不能通过预估网络带宽进行拥塞控制呢? 在网络拥塞时释放带宽,实际生产中不可控的。
- 流量控制,目的是什么? 减小报文丢失的概率,主要通过滑动窗口协议来实现(分组无差错,有序接收,流量控制)。 拥塞控制作用于网络,防止网络负载过大; 流量控制主要是在数据的发送者和接收者之间,防止报文丢失。
- 在一个TCP连接中,客户端到服务器链路中断,服务器到客户端还是通的,会出现什么异常状况?(TCP 的 keepalive 机制) 服务器有保活定时器,不断发送信号,一定时间后断开连接。
- 多线程解决了什么问题? 一个进程可以同时执行多个进程,提升CPU利用率。
- 同步非阻塞IO优点是什么?减少了阻塞时间有什么用?
- 在cpu拉满的情况下,linux的timefd定时会出现延时吗?如何保证没有延时的呢?(软中断,进程优先级),这个软中断是由谁发起的呢(内核)?
- 多线程和多进程有什么区别?进程切换和线程切换
- 进程间通信
- 多进程资源互斥
- 给定一个原子变量,如何实现自旋锁?
- 读写锁应用场景
- 智能指针,shared_ptr线程安全吗
算法题:
| 1
2
3
4
5
6
7
8
9
10 |有若干个任务的执行记录,每条记录包含开始时间和终止时间。这些任务可能是并行执行的,时间上会交错。
请求出从最开始有记录到最终一条记录之间,有多长时间是完全没有任何任务在执行的。
结构:
struct
Task { ``// 任务起始和结束时间
``int
begin;
``int
end;
}
接口:
// 参数:所有任务历史记录
// 返回值:中间的空洞时间总长度
| | —- | —- |事务特性:原子性、一致性(执行前后必须处理一致性状态)、隔离性(多个用户并发访问时,互相不影响)、持久性(事务提交后,永久改变);
- 如果不考虑隔离性,可能会发生的问题:脏读(在一个事务处理过程中读取了另一个未提交的事务中的数据)、不可重复读(每次查询,返回的数据值不同)、虚读(读取了另一条已经提交的事务);
- 隔离级别:串行化、可重复读(MySQL默认隔离级别,可能会有幻读现象)、读已提交(不可重复读)、读未提交(存在所有问题)。
- InnoDB和MyISAM区别
- MVCC:多版本并发控制,储存多个版本的快照,采用时间戳或者事务ID来标记当前数据库版本;
- 范式:一、列不可拆分;二、主键唯一;三、非主键直接依赖主属性。
- 聚簇索引/非聚簇:
- 复合索引:最左匹配,在检索数据时从联合索引的最左边开始匹配;
- 回表查询:先定位主键值,再定位行记录,需要扫描两遍索引树。
- UDP如何实现可靠传输?1、添加seq/ack机制,确保数据发送到对端;2、添加发送和接收缓冲区,用于用户超时重传;3、超时重传机制。
- 监听端口的命令:netstat;
- 访问IP+Port,被拒绝的原因是什么:监听地址为本机。
- MySQL调优:四个维度:硬件、系统配置、数据库表结构、SQL及索引
- 合适的存储引擎;
- 保证从内存读取数据,并将数据保存在内存;
- 定期优化重建数据库;
- 减少磁盘写入操作;
- 提高磁盘读写速度;
- 充分使用索引;
- Redis:专注于特定领域,速度非常快,主要适合较小数据量的高性能操作和运算,因为物理内存容量有限,不能做海量数据的高性能读写。
- left join、right join和 inner join:leftJoin:返回的记录总数一定大于等于左Table、rightJoin:返回的记录总数一定大于等于右Table、innerJoin:取交集。
- 调试工具:strace(追踪系统调用)、gdb(调试、分析coredump);