原文地址:Go面试看这里了~(十七)

1、time-wait?

TIME_WAIT是TCP协议中断开连接所经历的一种状态,状态图如下:

上图中作为主动关闭的一方(Client)出现了TIME_WAIT状态,目的是告诉Server端,己方没有需发送的数据,但是仍然保持了接收对方数据的能力。

常见关闭连接过程如下:

  1. 当客户端无待发送数据时,会向服务端发送FIN消息,发送消息后进入FIN_WAIT_1状态。

  2. 服务端接收到客户端的FIN消息后,进入CLOSE_WAIT状态并向客户端发送ACK消息,客户端接收到ACK消息时进入FIN_WAIT_2状态。

  3. 当服务端无待发送数据时,服务端会向客户端发送FIN消息。

  4. 客户端接收到FIN消息后,进入TIME_WAIT状态并向服务端发送ACK消息,服务端收到后进入CLOSED状态。

  5. 客户端等待两个最大数据段生命周期(Maximum segment lifetime,MSL)的时间后也进入CLOSED状态。

TIME_WAIT一定是发生在主动关闭一方,被动关闭一方会直接进入CLOSED状态,主动关闭一方需要等待2*MSL时间才会最终关闭,客户端和服务端之间的连接此时就会正常关闭,新创建的TCP连接收到影响的概率也微乎其微,保证了数据传输的可靠性。

TIME_WAIT主要为防止被动关闭方的延迟数据被窃取,及未收到最后的ACK报文。

Redis在并发量突增时很容易出现TCP连接失败(无可用端口),原因在于TIME_WAIT数量过大(会占用端口),每次连接断开后都会产生TIME_WAIT,跟三次握手四次挥手有关,其实本质上TIME_WAIT是用于优化网络通信的,如关闭此优化方案,虽然可行,但不建议这样处理,关闭之后可能会产生其它网络异常,虽然可能是小概率的,这里提供几条优化建议:

  1. 对于Redis缓存,使用redisgo自带的连接池,需配置MaxIdle值。

  2. 对于数据库,自带连接池(默认可能未启用),直接调用SetMaxIdleConns设置MaxIdle值。

  3. 对于http请求,默认没有连接池,可使用通用的go-commons-pool,通过borrow和return机制使用连接池,如有资源申请要记得释放。

  4. 通过nginx转发,需在nginx.conf配置文件中增加keep-alive配置。

2、for循环遍历slice的问题?

  1. 子切片和父切片用的是同一个底层数组,改变子切片的值,也会改动到父切片。

  2. for range遍历的是副本,对副本的改动不会体现在原有切片。

  3. for循环中直接出来的值永远是遍历的最后一位,需定义局部变量。

3、现有100枚硬币,其中有一枚硬币重量不一样,用天平秤怎么快速找到这一枚硬币?

第一次:将100枚硬币分两份,每份50,选择重量较轻的一组继续称。

第二次:将50枚硬币分两份,每份25,选择重量较轻的一组继续称。

第三次:取出1枚硬币,将剩下的24枚硬币分两份,每份12枚硬币,如重量一致,则取出的那1枚硬币就是假币,反之选择重量较轻的一组继续称。

第四次:将12枚硬币分两份,每份6,选择重量较轻的一组继续称。

第五次:将6枚硬币分两份,每份3,选择重量较轻的一组继续称。

第六次:取出1枚硬币,将剩下的2枚硬币分两份,每份1枚硬币,如重量一致,则取出的那1枚硬币就是假币,反之较轻的那枚硬币为假币。

至此,本次分享就结束了,后期会慢慢补充。

以上仅为个人观点,不一定准确,能帮到各位那是最好的。

好啦,到这里本文就结束了,喜欢的话就来个三连击吧。

扫码关注公众号,获取更多优质内容。

Go面试看这里了~(十七)相关推荐

  1. (93)异步FIFO结构,为什么用格雷码? ,面试必问(十七)(第19天)

    (93)异步FIFO结构,为什么用格雷码? ,面试必问(十七)(第19天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)异步FIFO结构,为什么用格雷码? ,面 ...

  2. 机器学习复习6-优化器等 面试看这一篇就妥妥够了

    该文对优化器进行了全面的梳理和整理,包括原理分析,面试看这一篇就妥妥够了! 预备知识 一.正定和半正定矩阵 (了解) 半正定矩阵包括了正定矩阵. 不定矩阵:特征值有正有负 二.牛顿法和拟牛顿法(二阶优 ...

  3. 面试看牛客,刷题看力扣?那我结合其二总结出的面试刷题手册何如?天下无敌也

    程序员内部一直流传这一句话: 面试看牛客 刷题看力扣 牛客网作为国内最牛的程序员面试网站,一直在程序员内部颇负盛名,其中用户更是卧虎藏龙! 有国内一线大厂的企业招聘 还有一些低调的互联网大牛实力就和天 ...

  4. 杭州中国移动java待遇_【中国移动杭州研发中心Java面试】移动杭研社招java中级面试-看准网...

    移动杭研社招java中级面试 移动杭研的面试比较紧凑,一个上午就面完了.到了后先在前台登记,填写个人信息,和党性测试,党性测试有点像以前点政治题,知道不知道随意填了下,前台妹子说这个不要紧的.然后一面 ...

  5. 精心整理全网最全Tomcat面试专题及答案(共19题,含答案解析),tomcat面试看这篇就够了!

    [Java架构师面试网]收集整理了一些Java面试的常见问题,这些问题可能会在你下一次技术面试中遇到.想成为Java架构师,这些都是不可避免也是必须要掌握的哦,对于其他模块的面试题,我后续也将单独分享 ...

  6. SAP License:从SAP顾问面试看职场

    某求职者一日去一知名外企面试SAP顾问职位,面试官技术经理/业务经理(非HR经理), 纳闷他一直不问SAP知识,大概20分钟之后,出于好奇,我问,贵公司业务模块是MTO还是MTS+你们是离散制造还是重 ...

  7. java面试看这一篇就够了

    由于最近比较忙,项目赶的比较紧所以一直没有更新整理面试题,这次抽了些时间把答应大家的面试题整理出来了感谢各位小伙伴们的支持,你们的支持是我分享的动力,希望在以后的日子里咱们共同学习进步.如果感觉不错就 ...

  8. 埃森哲java笔试_【埃森哲Java面试】埃森哲java面试-看准网

    其实对埃森哲不是很了解,在招聘网站上看到之后就填写了申请,本来因为没有对咨询有过经验,以为不会有网测之类的机会,结果就收到了网测,其实应该也不是海发,因为也有人没有收到,总而言之,网测通过之后就会收到 ...

  9. 网易python面试经验_【网易游戏Python面试】第一轮hr电话面试-看准网

    10.21终面已参加,希望能顺利通过终面拿到offer-❤一共三轮,电话面试+笔试+视频面试,视频面试3V110月19日投的新媒体运营的简历,HR说因为是周末,等工作日再联系我,在周一下午三点我接到了 ...

最新文章

  1. 设计模式的征途—21.迭代器(Iterator)模式
  2. MTK Read/Write IMEI from App
  3. ant引入html页面,antdesign 中 使用 iconfont symbol方式引入图标不展示
  4. WPF框架教程 | 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器
  5. A Simple Math Problem(2020 ICPC 江西省省赛)
  6. 通过kubeadm安装kubernetes 1.7文档记录[docker容器方式]
  7. 综述 | 事件抽取及推理 (上)
  8. 学Python就能做好数据分析?万能语言背后是一片韭菜地
  9. dom:原生js使div滚动到最底部
  10. 图书馆系统java实训报告_基于Java的图书馆管理系统的设计实习报告
  11. html圆形圆心坐标,圆心坐标公式
  12. Pr 视频效果:模糊与锐化
  13. 日期时间公式计算机,‎App Store 上的“多少天-重要日期时间计算器”
  14. oracle网络ora文件,Oracle错误—ORA-03113:在通信信道文件的末尾(归档日志处理)...
  15. mac设置第三方输入法为默认输入法
  16. 2的指数字节转与MB、GB换算关系
  17. 惠普计算机电源怎么设置充电,HP笔记本的三芯电源怎么改二芯实现充电?
  18. ARM Cortex-M3 学习笔记(3)
  19. Android使用高德地图地理围栏定位自动发送短信
  20. Alphabetical list of part-of-speech tags used in the Penn Treebank Project:

热门文章

  1. 关于电商搜索中Elasticsearch的正确使用姿势--配置篇
  2. 眼见为实,来瞧瞧MySQL中的隐藏列!
  3. 推荐一些RSS站点和地址
  4. 开源:Hardcoder——安卓APP与系统间通信解决方案
  5. Windows如何进入BIOS?
  6. rdesktop基本命令
  7. 自动控制原理(G.F.Franklin)复习
  8. php fetchall 游标,使用返回空数据帧游标.fetchall()
  9. I2C中为什么线与?为什么要有上拉电阻?
  10. 手写数字识别 Digit Recognizer