V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
VDimos
V2EX  ›  问与答

面试的时候考 TCP 三次握手/四次挥手这个问题的价值在哪里?

  •  
  •   VDimos · 2019-08-18 22:51:08 +08:00 · 5298 次点击
    这是一个创建于 1705 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题。 现在的互联网公司面试,都喜欢提一个 TCP 三次握手 /四次挥手的问题。可是这种问题且不说以后是否能不能用到,也不提记忆留存率有多高,光网上搜索“面试题”基本都能看到这个问题。那么面试官没考虑过这个问题吗?面试者很容易就能猜到这个面试题,也能随便从网上搜到答案对答入流。 如果想考察 TCP 的问题,这个问题光问三次握手 /四次挥手几乎没什么价值,更多的核心知识比如 TCP 数据报组成、TCP 慢启动 /拥塞避免 /快速传输 /快速恢复 /窗缓存等等等等,更能考察面试者对 TCP/IP 协议的了解程度。 如果是想考察对网络的了解,那这个范围就更大了,三次握手这种问题完全问来无意义。 如果想考察面试者的见识,那么这个问题似乎更没价值了,因为这个问题几乎都被问烂了,似乎成为共识了。 所以,是不是说,大家的面试题很大程度上都开始趋同了?还是说,这些面试官的思维固化了?或者说句比较冒犯的话,面试者的技术不高?(可是国内大公司也喜欢问)

    26 条回复    2019-09-28 17:55:18 +08:00
    ZRS
        1
    ZRS  
       2019-08-18 23:01:18 +08:00
    正如你说既然是一道烂大街的题,为什么不拿来考呢?就是考基础啊,而且真的有效。

    我前天接到的一个电话问题:TIME_WAIT 出现在 TCP 连接的什么状态下,为什么要这么做,要等多久

    同样是考挥手,我觉得就是很合适的一道题
    butterflydog
        2
    butterflydog  
       2019-08-18 23:05:12 +08:00
    @ZRS 然后是不是就是怎么配置调优(手动滑稽)
    ZRS
        3
    ZRS  
       2019-08-18 23:07:16 +08:00
    @butterflydog 倒没有...问完这个就问别的了
    mhycy
        4
    mhycy  
       2019-08-18 23:10:51 +08:00
    考基础的题,就看对 TCP 了解有多少了,免得闹出个“粘包”笑话

    TCP 还有这类看起来简单实际回答巨麻烦的题目
    “ A、B 机器正常连接后,B 机器突然重启,问 A 此时处于 TCP 什么状态 ”

    之前写了个回答
    https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/21#issuecomment-518486351
    gstqc
        5
    gstqc  
       2019-08-18 23:12:13 +08:00
    就跟高考要考三角函数一样
    另外好的面试官会追问的,背题就露馅了
    singerll
        6
    singerll  
       2019-08-18 23:12:34 +08:00 via Android
    我见过有的研发甚至不知道七层和四层是啥。接个负载均衡都不知道该怎么沟通
    iwtbauh
        7
    iwtbauh  
       2019-08-18 23:16:59 +08:00 via Android   ❤️ 1
    @mhycy #4

    你这是宕机,不是重启。重启之前系统会关闭已建立的 TCP 连接。
    misaka19000
        8
    misaka19000  
       2019-08-18 23:20:22 +08:00
    因为面试官只知道三次握手
    mhycy
        9
    mhycy  
       2019-08-18 23:24:16 +08:00
    @iwtbauh 意外重启并不会
    poplar50
        10
    poplar50  
       2019-08-18 23:28:45 +08:00 via Android
    就单纯属于面试开场题 你肯定会 暖个场
    zsdsz
        11
    zsdsz  
       2019-08-18 23:34:55 +08:00 via Android
    想试试你的武功如何 当然要先试试内力啊 不能单看招式
    gbin
        12
    gbin  
       2019-08-18 23:36:00 +08:00   ❤️ 1
    因为如果国内的大厂也像北美大厂那样单纯考算法和设计,估计人都找不到,只能考一些稍微需要花时间去掌握的基础,不至于太难,也不至于太简单。
    gamexg
        13
    gamexg  
       2019-08-19 00:06:36 +08:00
    由浅入深一步一步来了解面试者实际面试速度更快

    如果连这个回答错误,那么慢启动等可以不用问了,证明 tcp 协议完全不了解。
    如果会,那么继续深入,可以一步一步的确定对方了解的内容。

    反过来,
    如果开始就问高难度的,
    那么你不好分辨正好没了解这部分、用的不多忘记了还是 tcp 完全不了解?
    还需要再转回三步握手确认。
    CEBBCAT
        14
    CEBBCAT  
       2019-08-19 02:59:22 +08:00 via Android
    我也觉得是分层次递进地问。考察的目的不是考倒,是考验
    chibupang
        15
    chibupang  
       2019-08-19 03:08:54 +08:00 via Android
    chibupang
        16
    chibupang  
       2019-08-19 03:11:35 +08:00 via Android
    一上来就问 Paxos,手写 LRU 红黑树那后面问啥呀?
    ericbize
        17
    ericbize  
       2019-08-19 07:20:21 +08:00 via iPhone
    之前我也觉得没什么用, 直到上次网络出现问题, 我领导 用 Wireshark 分析包, (没有基础,你连三次握手都不会分析好吗)
    HuHui
        18
    HuHui  
       2019-08-19 08:06:33 +08:00 via Android
    有一部分是用来区分科班和非科班的
    murmur
        19
    murmur  
       2019-08-19 08:28:53 +08:00
    有些游戏公司不用标准 TCP,会用那种介于 UDP 和 TCP 之前的自定协议提升并发,但是绝大多数还是只是为了筛人
    whywhywhy
        20
    whywhywhy  
       2019-08-19 08:43:31 +08:00
    工作用什么,将来用什么,就问什么好了。

    面试造航母,进去拧螺丝都没资格,只能天天擦桌子,问些工作上用不到的东西,有啥意义呢,结果一群人专门为了“面试”而努力。

    面向面试编程。
    yhxx
        21
    yhxx  
       2019-08-19 09:17:27 +08:00
    其实有很多可以问到的点啊
    比如,握手阶段为什么一定需要 3 次?能不能简化一点?快速打开有没有了解过?
    断开阶段第二次和第三次能不能合并?有没有听过延迟确认?

    我觉得抛开 TCP,这也是一个挺不错的考察思维能力的问题
    要做到可靠的传输,最少需要几次交互

    大部分背面试题的人应该只能答出那种“我要发消息给你了,我知道你要发消息了 balabala ”
    这题明明有很好的区分度啊
    Arainc
        22
    Arainc  
       2019-08-19 10:23:37 +08:00
    @yhxx 哈哈,我就是这么问别人的
    qakito
        23
    qakito  
       2019-08-19 11:17:08 +08:00
    仅仅是暖场基础题吧;并不是所有公司都需要直接接触这么底层的通信
    VDimos
        24
    VDimos  
    OP
       2019-08-19 11:31:56 +08:00 via Android
    @whywhywhy 对,我就是这个感觉
    julyclyde
        25
    julyclyde  
       2019-08-19 14:12:53 +08:00
    用于把那些
    用着 TCP 却一口一个“数据包”
    的人,筛选掉啊
    mooyo
        26
    mooyo  
       2019-09-28 17:55:18 +08:00
    @yhxx 三次是为了协商 ISN,简化的话,如果是需要双向传输,三次必不可少,除非有别的途径可以协商 ISN。快速打开是啥,没了解过。断开 23 次应该是可以合并的,被捎带嘛。延迟确认也没了解过。。。不知道这个回答如何。。。
    TCP/IP 真的会问的这么细嘛。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2754 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 12:59 · PVG 20:59 · LAX 05:59 · JFK 08:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.