1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        TCP的流量窗口……看完笑出鵝叫聲

        共 3219字,需瀏覽 7分鐘

         ·

        2021-08-23 19:36

        前言

        計算機編程的很多知識點,往往在日常生活中就有類似的例子。最近整理了十個非常形象生動的生活例子,助大家理解這些計算機面試必備的知識點。

        1.如何理解HTTP的無狀態(tài)?

        每次HTTP請求都是獨立的,無相關的,默認不需要保存上下文信息的。我們來看個便于理解的例子:

        有狀態(tài):

        • A:今天吃啥子?
        • B:羅非魚!
        • A:味道怎么樣呀?
        • B:還不錯,好香。

        無狀態(tài):

        • A:今天吃啥子?
        • B:羅非魚!
        • A:味道怎么樣呀?
        • B:????啥?什么鬼?什么味道怎么樣?

        加下cookie這玩意

        • A:今天吃啥子?
        • B:羅非魚
        • A:你今天吃的羅非魚味道怎么樣呀?
        • B:還不錯,好香。

        2. 什么是序列化?什么是反序列化?

        • 序列化:把Java對象轉換為字節(jié)序列的過程
        • 反序列:把字節(jié)序列恢復為Java對象的過程

        作為大城市漂泊的碼農(nóng),搬家是常態(tài)。當我們搬書桌時,桌子太大了就通不過比較小的門,因此我們需要把它拆開再搬過去,這個拆桌子的過程就是序列化。而我們把書桌復原回來(安裝)的過程就是反序列化啦。

        3. 什么是限流?

        我們?nèi)粘i_發(fā)中,經(jīng)常聽到接口限流,QPS多少等等這些詞。那么,什么是限流呢?在計算機網(wǎng)絡中,限流就是控制網(wǎng)絡接口發(fā)送或接收請求的速率。

        舉個生活的例子:一些熱門的旅游景區(qū),一般會對每日的旅游參觀人數(shù)有限制的,每天只會賣出固定數(shù)目的門票,比如5000張。假設在五一、國慶假期,你去晚了,可能當天的票就已經(jīng)賣完了,就無法進去游玩了。即使你最后能進去,排隊也排到你懷疑人生。

        4. TCP 握手為什么是三次?不能是兩次?不能是四次?

        TCP握手為什么是三次呢?為了方便理解,我們以談戀愛為例子:兩個人能走到一起,最重要的事情就是相愛,就是我愛你,并且我知道,你也愛我,接下來我們以此來模擬三次握手的過程:

        為什么握手不能是兩次呢?

        如果只有兩次握手,女孩子可能就不知道,她的那句我也愛你,男孩子是否收到,戀愛關系就不能愉快展開。

        為什么握手不能是四次呢?

        因為握手不能是四次呢?因為三次已經(jīng)夠了,三次已經(jīng)能讓雙方都知道:你愛我,我也愛你。而四次就多余了。

        5. 線程池工作原理

        面試官如果要我們講下線程池工作原理的話,大家講下以下這個流程圖就可以啦:

        為了形象描述線程池執(zhí)行,加深大家的理解,我打個比喻:

        • 核心線程比作公司正式員工
        • 非核心線程比作外包員工
        • 阻塞隊列比作需求池
        • 提交任務比作提需求
        • 當產(chǎn)品提個需求,正式員工(核心線程)先接需求(執(zhí)行任務)
        • 如果正式員工都有需求在做,即核心線程數(shù)已滿),產(chǎn)品就把需求先放需求池(阻塞隊列)。
        • 如果需求池(阻塞隊列)也滿了,但是這時候產(chǎn)品繼續(xù)提需求,怎么辦呢?那就請外包(非核心線程)來做。
        • 如果所有員工(最大線程數(shù)也滿了)都有需求在做了,那就執(zhí)行拒絕策略。
        • 如果外包員工把需求做完了,它經(jīng)過一段(keepAliveTime)空閑時間,就離開公司了。

        6. TCP的流量窗口如何控制流量

        我們來看課堂上:這么一個場景,老師講課,學生做筆記。假設老師念一段話,要求學生孩子們做筆記,記錄下來。

        第一種模式:

        • 老師說,"從前有個人, 她叫馬冬梅. 她喜歡夏洛, 而夏洛卻喜歡秋雅."
        • 學生寫道,"從前有...", "老師你說的太快啦,我跟不上"

        于是他們換了模式二

        • 老師說,"從"
        • 學生寫,"從". 學生說"嗯"
        • 老師說,"前"
        • 學生寫,"前". 學生說"嗯"
        • 老師說,"今天我還想早點下班呢..."

        于是他們又換了一種模式,模式三

        • 老師說,"從前有個人"
        • 學生寫,"從前有個人". 學生說"嗯"
        • 老師說,"她叫馬冬梅".
        • 學生寫,"她叫馬...梅". 學生說"馬什么梅?"
        • 老師說,"她叫馬冬梅".
        • 學生寫"她叫馬冬...". 學生說"馬冬什么?"
        • 老師,"....."
        • 學生說,"有的時候狀態(tài)好我能把5個字都記下來, 有的時候狀態(tài)不好就記不下來. 我狀態(tài)不好的時候你能不能慢一點呢

        于是他們換了模式四:

        • 老師說,"從前有個人"
        • 學生寫,"從前有個人". 學生說"嗯, 再來5個"
        • 老師說,"她叫馬冬梅"
        • 學生寫,"她叫馬..梅". 學生說,"啥?重來, 來2個"
        • 老師說,"她叫".學生寫,"她叫".
        • 學生說,"嗯,再來3個"
        • 老師說,"馬冬梅".
        • 學生寫,"馬冬梅".
        • 學生說,"嗯, 給我來20個"
        • 老師說,"她喜歡夏洛,而夏洛卻喜歡秋雅"
        • 學生寫...

        因此呢

        • 第一種模式簡單粗暴, 發(fā)的只管發(fā), 收的可能跟不上.
        • 第二種模式穩(wěn)定卻低效, 每發(fā)一個, 必須等到確認才再次發(fā)送, 等待時間比較多.
        • 第三種模式提高了效率, 分組進行發(fā)送, 但是分組的大小該怎么決定呢?
        • 第四種模式才真正起到了流控的作用, 接收方認為狀態(tài)好的時候, 讓發(fā)送方每次多發(fā)一點. 接收方認為狀態(tài)不好的時候(阻塞), 讓發(fā)送方每次少發(fā)送一點。

        7. BIO、NIO,AIO的區(qū)別

        • 同步阻塞(blocking-IO)簡稱BIO
        • 同步非阻塞(non-blocking-IO)簡稱NIO
        • 異步非阻塞(asynchronous-non-blocking-IO)簡稱AIO

        一個生活的例子

        • 小明去吃同仁四季的椰子雞,就這樣在那里排隊,等了一小時,然后才開始吃火鍋。(BIO)
        • 小紅也去同仁四季的椰子雞,她一看要等挺久的,于是去逛會商場,每次逛一下,就跑回來看看,是不是輪到她了。于是最后她既購了物,又吃上椰子雞了。(NIO)
        • 小華一樣,去吃椰子雞,由于他是高級會員,所以店長說,你去商場隨便逛會吧,等下有位置,我立馬打電話給你。于是小華不用干巴巴坐著等,也不用每過一會兒就跑回來看有沒有等到,最后也吃上了美味的椰子雞(AIO)

        8. 什么死鎖?

        死鎖是指兩個或兩個以上的進程在執(zhí)行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現(xiàn)象,若無外力作用,它們都將無法推進下去。

        假設你要開車進入一個村子,村口有條非常窄的路,只能容納一輛車過。這時候,迎面又駛來一輛車,你們都走到一半,誰也不想倒回去,于是各不相讓,陷入無盡的等待。

        9. TCP為什么需要四次揮手

        舉個例子吧,假設小明和小紅打電話聊天,通話差不多要結束時

        小紅說,“我沒啥要說的了”。小明回答,“我知道了”。但是小明可能還有要說的話,小紅不能要求小明跟著自己的節(jié)奏結束通話,于是小明可能又嘰嘰歪歪說了一通,最后小明說“我說完了”,小紅回答“知道了”,這樣通話才算結束。

        10. select和 epoll的區(qū)別

        說到select和epoll,相信大家都很熟悉了,它們都使用了IO多路復用機制??梢员O(jiān)視多個描述符的讀/寫等事件,一旦某個描述符就緒(一般是讀或者寫事件發(fā)生了),就能夠將發(fā)生的事件通知對應的應用程序去處理該事件。

        select 和 epoll 的本質(zhì)區(qū)別在哪里呢?

        • 當套接字比較多的時候,每次select()都要通過遍歷FD_SETSIZE個Socket來完成調(diào)度,不管哪個Socket是活躍的,統(tǒng)統(tǒng)都遍歷一遍。
        • epoll使用“事件”的就緒通知方式,給套接字注冊某個回調(diào)函數(shù),只有活躍可用的FD,自動完成相關操作,避免了輪詢,提升了效率。

        舉個生活類似的例子:

        假如時光倒流,我們回到大學讀書。你去女生宿舍,找你女朋友。于是你找到了宿管大媽,宿管大媽就會帶著你,挨個房間去找,直到找到你女朋友(這就是select版);而epoll版版本呢,你來了,把你女朋友的名字和宿舍房號報給舍管大媽,大媽就直接幫你找到你女朋友。


        你好,我是四猿外。

        一家上市公司的技術總監(jiān),管理的技術團隊一百余人。

        我從一名非計算機專業(yè)的畢業(yè)生,轉行到程序員,一路打拼,一路成長。

        我會通過公眾號,
        把自己的成長故事寫成文章,
        把枯燥的技術文章寫成故事。

        我建了一個讀者交流群,里面大部分是程序員,一起聊技術、工作、八卦。歡迎加我微信,拉你入群。


        瀏覽 36
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            白石茉莉奈被躁120分钟在线 | 国产久久久久久久 | 豆花视频在线一区二区在线视频 | 色69激情爱久久 | 国产精品久久久久久久久久ktv | 68日本xxxxxxxxx80 | 啊啊啊啊啊啊用力 | 69操逼| 国产精品爽爽v在线观看无码 | 成人M·M在线播放 |