go语言面试真题及解析 golang语言面试( 九 )


/pp data-block="0"(4)直到所有K路都EOF 。
/p/pre
假设文件又1个G,内存只有256M,无法将1个G的文件全部读到内存进行排序 。
第一步:
可以分为10段读取,每段读取100M的数据并排序好写入硬盘 。
假设写入后的文件为A,B,C...10
第二步:
将A , B,C...10的第一个字符拿出来,对这10个字符进行排序,并将结果写入硬盘,同时记录被写入的字符的文件指针P 。
第三步:
将刚刚排序好的9个字符再加上从指针P读取到的P+1位数据进行排序,并写入硬盘 。
重复二、三步骤 。
go文件读写参考:
保证排序前两个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同的排序叫稳定排序 。
快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法 。
基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法 。
参考:
head只请求页面的首部 。多用来判断网页是否被修改和超链接的有效性 。
get请求页面信息 , 并返回实例的主体 。
参考:
401:未授权的访问 。
403: 拒绝访问 。
普通的http连接是客户端连接上服务端,然后结束请求后,由客户端或者服务端进行http连接的关闭 。下次再发送请求的时候 , 客户端再发起一个连接,传送数据,关闭连接 。这么个流程反复 。但是一旦客户端发送connection:keep-alive头给服务端,且服务端也接受这个keep-alive的话,两边对上暗号,这个连接就可以复用了,一个http处理完之后,另外一个http数据直接从这个连接走了 。减少新建和断开TCP连接的消耗 。这个可以在Nginx设置,
这个keepalive_timout时间值意味着:一个http产生的tcp连接在传送完最后一个响应后 , 还需要hold住keepalive_timeout秒后,才开始关闭这个连接 。
特别注意TCP层的keep alive和http不是一个意思 。TCP的是指:tcp连接建立后,如果客户端很长一段时间不发送消息,当连接很久没有收到报文,tcp会主动发送一个为空的报文(侦测包)给对方 , 如果对方收到了并且回复了,证明对方还在 。如果对方没有报文返回,重试多次之后则确认连接丢失,断开连接 。
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性别这种 。

推荐阅读