題一: 操作系統中的同步和異步有什么區別?分別應用在什么場合? 思考過后,再到下方尋找答案 題二: TCP與UDP的區別。 思考過后,再到下方尋找答案 題三: 指針和引用的區別? 思考過后,再到下方尋找答案 題一答案: 同步,就是說你的程序在執行某一個操作時一直等待直到操作完成。 最常見的例子就是 SendMessage。該函數發送一個消息給某個窗口,在對方處理完消息之前,這個函數不返回。當對方處理完畢以后,該函數才把消息處理函數所返回的 LRESULT值返回給調用者。 異步,就是說程序在執行某一個操作時,只是發出開始的指令;由另外的并行程序執行這段代碼,當完成時再通知調用者。 當一個客戶端通過調用 Connect函數發出一個連接請求后,調用者線程立刻可以朝下運行。當連接真正建立起來以后,socket底層會發送一個消息通知該對象。 打個比喻: 有一個男的 看上了兩個漂亮MM 想通過寫信的方式跟他們交流感情 這兩個MM分別是 A女、B女 同步:他先給A女寫了封信 然后發了出去。等了好幾天 A女給他回了信,之后他才給B女寫信。就是說等到一個任務返回或者結束 他才繼續往下做他想做的任務。 異步:他先給A女寫了封信,然后發了出去,馬上又給B女寫了封信 也發了出去。 就是說不用等到一個任務結束就去做下一個任務。 但是如果第一個任務需要第二個任務的返回值 那就得用同步讓第一個任務等待第二個任務結束后,獲取第二個任務的返回值,在繼續往下做。 并行:兩個帥哥同時給這兩個妹妹寫信。 同步和異步的簡單區別: 舉個例子:普通B/S模式(同步)AJAX技術(異步) 同步:提交請求->等待服務器處理->處理完畢返回 這個期間客戶端瀏覽器不能干任何事 異步: 請求通過事件觸發->服務器處理(這是瀏覽器仍然可以作其他事情)->處理完畢 ----------------------------------------------------------------- 同步就是你叫我去吃飯,我聽到了就和你去吃飯;如果沒有聽到,你就不停的叫,直到我告訴你聽到了,才一起去吃飯。 異步就是你叫我,然后自己去吃飯,我得到消息后可能立即走,也可能等到下班才去吃飯。 所以,要我請你吃飯就用同步的方法,要請我吃飯就用異步的方法,這樣你可以省錢。 ----------------------------------------------------------------- 舉個例子:打電話是同步,發消息是異步。 題二答案: TCP---傳輸控制協議,提供的是面向連接、可靠的字節流服務。當客戶和服務器彼此交換數據前,必須先在雙方之間建立一個TCP連接,之后才能傳輸數據。TCP提供超時重發,丟棄重復數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另一端。 UDP---用戶數據報協議,是一個簡單的面向數據報的運輸層協議。UDP不提供可靠性,它只是把應用程序傳給IP層的數據報發送出去,但是并不能保證它們能到達目的地。由于UDP在傳輸數據報前不用在客戶和服務器之間建立一個連接,且沒有超時重發等機制,故而傳輸速度很快。 UDP 與 TCP 的主要區別在于 UDP 不一定提供可靠的數據傳輸。事實上,該協議不能保證數據準確無誤地到達目的地。UDP 在許多方面非常有效。當某個程序的目標是盡快地傳輸盡可能多的信息時(其中任意給定數據的重要性相對較低),可使用 UDP。ICQ 短消息使用 UDP 協議發送消息。 許多程序將使用單獨的TCP連接和單獨的UDP連接。重要的狀態信息隨可靠的TCP連接發送,而主數據流通過UDP發送。 題三答案: 1、從現象上看:指針在運行時可以改變其所指向的值,而引用一旦和某個對象綁定后就不再改變。 2、從內存分配上看:程序為指針變量分配內存區域,而引用不分配內存區域。 3、從編譯上看:程序在編譯時分別將指針和引用添加到符號表上,符號表上記錄的是變量名及變量所對應地址。指針變量在符號表上對應的地址值為指針變量的地址值,而引用在符號表上對應的地址值為引用對象的地址值。符號表生成后就不會再改,因此指針可以改變指向的對象(指針變量中的值可以改),而引用對象不能改。 引用:一個變量的別名,為什么引入別名呢?原因是我們想定義一個變量,使他共享另一個變量的內存空間,使用別名無疑是一個好的選擇。變量是什么?是一個內存空間的名字,如果我們給這個內存空間在起另外一個名字,那就是能夠共享這個內存了,引用(別名)的由此而來。 指針:指向另一個內存空間的變量,我們可以通過它來索引另一個內存空間的內容,本身有自己的內存空間。 二者區別:(1)引用訪問一個變量是直接訪問,而指針是間接訪問。 (2)引用是一個變量的別名,本身不單獨分配自己的內存空間,而指針有自己的內存空間,指針是一個實體,而引用不是。 (3)引用在開始的時候就綁定到了一個內存空間(開始必須賦初值),所以他只能是這個內存空間的名字,而不能改成其他的,當然可以改變這個內存空間的值。 例如 int i = 3,j = 4; int &x = i; //成為i的別名 x = j; //不能否認x仍然引用i,并沒有成為j的別名,只是修改了x和i共享的內存空間的值為4 免費試聽C語言、電子、PCB、STM32、Linux、FPGA、Python等。 想學習的你和我聯系預約就可以免費聽課了。宋工Q35--24-65--90-88 Tel/WX:173--17--95--19--08 |