go语言基础语法面试题 golang基础面试题( 六 )


tcp的keep alive可通过
net.ipv4.tcp_keepalive_intvl = 75// 当探测没有确认时 , 重新发送探测的频度 。缺省是75秒 。
net.ipv4.tcp_keepalive_probes = 9 //在认定连接失效之前,发送多少个TCP的keepalive探测包 。缺省值是9 。这个值乘以tcp_keepalive_intvl之后决定了 , 一个连接发送了keepalive之后可以有多少时间没有回应
net.ipv4.tcp_keepalive_time = 7200 //当keepalive起用的时候,TCP发送keepalive消息的频度 。缺省是2小时 。一般设置为30分钟1800
修改:
可以
tcp是面向连接的,upd是无连接状态的 。
udp相比tcp没有建立连接的过程,所以更快,同时也更安全 , 不容易被攻击 。upd没有阻塞控制,因此出现网络阻塞不会使源主机的发送效率降低 。upd支持一对多,多对多等,tcp是点对点传输 。tcp首部开销20字节,udp8字节 。
udp使用场景:视频通话、im聊天等 。
time-wait表示客户端等待服务端返回关闭信息的状态,closed_wait表示服务端得知客户端想要关闭连接,进入半关闭状态并返回一段TCP报文 。
time-wait作用:
解决办法:
close_wait:
被动关闭 , 通常是由于客户端忘记关闭tcp连接导致 。
根据业务来啊~
重要指标是cardinality(不重复数量),这个数量/总行数如果过?。ㄇ鹘?)代表索引基本没意义,比如sex性别这种 。
另外查询不要使用select *,根据select的条件+where条件做组合索引,尽量实现覆盖索引,避免回表 。
僵尸进程:
即子进程先于父进程退出后 , 子进程的PCB需要其父进程释放,但是父进程并没有释放子进程的PCB,这样的子进程就称为僵尸进程 , 僵尸进程实际上是一个已经死掉的进程 。
孤儿进程:
一个父进程退出 , 而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程 。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作 。
子进程死亡需要父进程来处理,那么意味着正常的进程应该是子进程先于父进程死亡 。当父进程先于子进程死亡时,子进程死亡时没父进程处理,这个死亡的子进程就是孤儿进程 。
但孤儿进程与僵尸进程不同的是,由于父进程已经死亡,系统会帮助父进程回收处理孤儿进程 。所以孤儿进程实际上是不占用资源的,因为它终究是被系统回收了 。不会像僵尸进程那样占用ID,损害运行系统 。
原文链接:
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用 。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放 。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺 。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系 。
避免方法:
端口占用:lsof -i:端口号或者 nestat
cpu、内存占用:top
发送信号:kill -l 列出所有信号,然后用 kill [信号变化] [进程号]来执行 。如kill -9 453 。强制杀死453进程
git log:查看提交记录
git diff :查看变更记录
git merge:目标分支改变,而源分支保持原样 。优点:保留提交历史 , 保留分支结构 。但会有大量的merge记录
git rebase:将修改拼接到最新,复杂的记录变得优雅,单个操作变得(revert)很简单;缺点:
git revert:反做指定版本,会新生成一个版本
git reset:重置到某个版本,中间版本全部丢失
etcd、Consul
pprof
节省空间(非叶子节点不存储数据,相对b tree的优势),减少I/O次数(节省的空间全部存指针地址 , 让树变的矮胖),范围查找方便(相对hash的优势) 。

推荐阅读