go语言笔试题 go语言面试题( 三 )


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的优势) 。
explain
其他的见:
runtime2.go 中关于 p 的定义: 其中 runnext 指针决定了下一个要运行的 g,根据英文的注释大致意思是说:
所以当设置 runtime.GOMAXPROCS(1) 时,此时只有一个 P,创建的 g 依次加入 P, 当最后一个即 i==9 时,加入的最后 一个 g 将会继承当前主 goroutinue 的剩余时间片继续执行,所以会先输出 9,之后再依次执行 P 队列中其它的 g 。

推荐阅读