計算機硬件

計算機硬件

一、為什么要學習計算機基礎 ??

  程序員編程的本質就是讓計算機去工作,而編程語言就是程序員與計算機溝通的介質。程序員要想讓計算機工作,就要知道計算機能干什么、是怎么樣的一個完成過程,這也是我們必須學習計算機基礎的原因。

  然而光有編程語言和硬件也并不能滿足大家的編程需求,為什么這么說呢?

  程序用編程語言寫程序,最終開發出的結果就是一個軟件,既然是軟件,那就與騰訊qq、暴風影音、快播等軟件沒有區別了。這些軟件必須運行在操作系統之上,你肯定會問:為何要有操作系統呢?沒錯,遠古時代的程序員確實是在沒有操作系統的環境下,用編程語言之間操作硬件來編程的,你可能覺得這沒有問題,但其實問題是相當嚴重的,因為此時你必須掌握如何操作硬件的所有具體細節,比如如何具體操作硬盤(現在你得把硬盤拆開,然后你能看見的所有的東西,你都得研究明白,因為你編程時要用到它),這就嚴重影響了開發的效率,操作系統的出現就是運行于硬件之上,來控制硬件的,我們開發時,只需要調用操作系統為我們提供的簡單而優雅的接口就可以了。

  所以一套完整的計算機系統分為:計算機硬件、操作系統、軟件(程序員開發的就是軟件)。因而我們的python編程之路分為計算機硬件基礎、操作系統基礎和編程語言三部分,就讓我們先從計算機硬件學起吧。

二、計算機硬件介紹 ??

  從概念上講,一臺簡單的個人計算機可以抽象為類似下圖的模型,CPU、內存以及I/O設備都由一條系統總線(bus)連接起來并通過總線與其他設備通信。

  現代計算機的結構更復雜,包括多重總線,我們將在后面的小節介紹,此時暫且讓我們以下圖為例來介紹各個部件:

  

  了解各部分功能的一個簡單的方法是,把計算機各部分組件往人的身上套,比如:

  cpu是人的大腦,負責運算;

  內存是人的記憶,負責臨時存儲;

  硬盤是人的筆記本,負責永久存儲;

  輸入設備是耳朵或眼睛,負責接收外部的信息傳給cpu;

  輸出設備是你的表情,負責經過處理后輸出的結果;

  以上所有的設備都通過總線連接,總線相當于人的神經。

  上課開始,老師講課,學生聽課,老師是程序員,學生是計算機,學生的器官都是計算機各部分組成:

  1.老師通過學生的眼睛和耳朵將自己的知識/指令傳給學生(輸入);

  2.學生在接收知識/指令后,通過自己的神經,將其放入自己的內存/短期記憶(總線、內存);

  3.學生的大腦/cpu從短期記憶里取出知識/指令,分析知識/指令,然后學習知識/執行指令 (cpu取指、分析、執行);

  4.學生的表情會直接反映出自己是否聽懂,這就是輸出,老師瞅一眼就知道學生有沒有學會(輸出);

  5.學生想要永久將知識保存下來,只能拿出一個筆記本,把剛剛學會的知識都寫到本子上,這個本子就是硬盤(磁盤)。

? ? 處理器? ??

?  計算機的大腦就是CPU,它從內存中取指令->解碼->執行然后再取指->解碼->執行下一條指令,周而復始,直至整個程序被執行完成。

  每個cpu都有一套可執行的專門指令集,任何軟件的執行最終都要轉化成cpu的指令去執行。所以Pentium(英特爾第五代x86架構的微處理器)不能執行SPARC(另外一種處理器)的程序。這就好比不同的人腦,對于大多數人類來說,人腦的結構一樣,所以別人會的東西你也都可以會,但對于愛因斯坦的腦子來說,它會的你肯定不會。

  因訪問內存以得到指令或數據的時間比cpu執行指令花費的時間要長得多,所以,所有CPU內部都有一些用來保存關鍵變量和臨時數據的寄存器,這樣通常在cpu的指令集中專門提供一些指令,用來將一個字(可以理解為數據)從內存調入寄存器,以及將一個字從寄存器存入內存。cpu其他的指令集可以把來自寄存器、內存的操作數據組合,或者用兩者產生一個結果,比如將兩個字相加并把結果存在寄存器或內存中。

  寄存器的分類:

  1.用來保存變量和臨時結果的通用寄存器

   2.多數計算機還有一些對程序員課件的專門寄存器,其中之一便是程序計數器,它保存了將要取出的下一條指令的內存地址。在指令取出后,程序計算器就被更新以便執行后期的指令;

  3.另外一個寄存器便是堆棧指針,它指向內存中當前棧的頂端。該棧包含已經進入但是還沒有退出的每個過程中的一個框架。在一個過程的堆棧框架中保存了有關的輸入參數、局部變量以及那些沒有保存在寄存器中的臨時變量

  4.最后 一個非常重要的寄存器就是程序狀態字寄存器(Program Status Word,PSW),這個寄存器包含了條碼位(由比較指令設置)CPU優先級、模式(用戶態或內核態),以及各種其他控制位。用戶通常讀入整個PSW,但是只對其中少量的字段寫入。在系統調用和I/O中,PSW特別的重要

  寄存器的維護:

  操作系統必須知曉所有的寄存器。在時間多路復用的CPU中,操作系統會經常中止正在運行的某個程序并啟動(或再次啟動)另一個程序。每次停止一個運行著的程序時,操作系統必須保存所有的寄存器,這樣在稍后該程序被再次運行時,可以把這些寄存器重新裝入。

? ?處理器設計的演變 ??

  1.最開始取值、解碼、執行這三個過程是同時進行的,這意味著任何一個過程完成都需要等待其余兩個過程執行完畢,時間浪費

  2.后來被設計成了流水線式的設計,即執行指令n時,可以對指令n+1解碼,并且可以讀取指令n+2,完全是一套流水線。

?           

  3.超變量cpu,比流水線更加先進,有多個執行單元,可以同時負責不同的事情,比如看片的同時,聽歌,打游戲。兩個或更多的指令被同時取出、解碼并裝入一個保持緩沖區中,直至它們都執行完畢。只有有一個執行單元空閑,就檢查保持緩沖區是否還有可處理的指令。

?      

  這種設計存在一種缺陷,即程序的指令經常不按照順序執行,在多數情況下,硬件負責保證這種運算結果與順序執行的指令時的結果相同。

? ?內核態與用戶態 ??

  除了在嵌入式系統中的非常簡答的CPU之外,多數CPU都有兩種模式,即內核態與用戶態

  通常,PSW中有一個二進制位控制這兩種模式

  內核態:當cpu在內核態運行時,cpu可以執行指令集中所有的指令,很明顯,所有的指令中包含了使用硬件的所有功能,(操作系統在內核態下運行,從而可以訪問整個硬件)。

  用戶態:用戶程序在用戶態下運行,僅僅只能執行cpu整個指令集的一個子集,該子集中不包含操作硬件功能的部分,因此,一般情況下,在用戶態中有關I/O和內存保護(操作系統占用的內存是受保護的,不能被別的程序占用),當然,在用戶態下,將PSW中的模式設置成內核態也是禁止的。

? ?內核態與用戶態切換 ??   

  用戶態下工作的軟件不能操作硬件,但是我們的軟件比如暴風影音,一定會有操作硬件的需求,比如從磁盤上讀一個電影文件,那就必須經歷從用戶態切換到內核態的過程,為此,用戶程序必須使用系統調用(system call),系統調用陷入內核并調用操作系統,TRAP指令把用戶態切換成內核態,并啟用操作系統從而獲得服務。

  把的系統調用看成一個特別的的過程調用指令就可以了,該指令具有從用戶態切換到內核態的特別能力。

? ? 異常處理 ? ?

  需要強調的是,計算機使用TRAP來執行系統調用,多數的TRAP是由硬件引起的,用于警告有異常情況發生,如試圖1/0等操作。在所有的情況下,操作系統都得到控制權并決定如何處理異常情況,有時,由于出錯的原因,程序不得不停止。在其他的情況下可以忽略出錯,如果程序已經提前宣布它希望處理某類異常時,那么控制權還必須返回給程序,讓其處理相關的問題。

? ?多線程和多核芯片 ??

  moore定律指出,芯片中的晶體管數量每18個月翻一倍,隨著晶體管數量的增多,更強大的功能稱為了可能,如

  1.第一步增強:在cpu芯片中加入更大的緩存,一級緩存L1,用和cpu相同的材質制成,cpu訪問它沒有時延

  2.第二步增強:一個cpu中的處理邏輯增多,intel公司首次提出,稱為多線程(multithreading)或超線程(hyperthreading),對用戶來說一個有兩個線程的cpu就相當于兩個cpu,我們后面要學習的進程和線程的知識就起源于這里,進程是資源單位而線程才是cpu的執行單位。

  多線程運行cpu保持兩個不同的線程狀態,可以在納秒級的時間內來回切換,速度快到你看到的結果是并發的,偽并行的,然而多線程不提供真正的并行處理,一個cpu同一時刻只能處理一個進程(一個進程中至少一個線程)

  3.第三步增強:除了多線程,還出現了傲寒2個或者4個完整處理器的cpu芯片,如下圖。要使用這類多核芯片肯定需要有多處理操作系統

? ? ? ? ? ? ? ?

? ?存儲器 ??

  計算機中第二重要的就是存儲了,所有人都希望存儲能夠:速度快(這樣cpu的等待存儲器的延遲就降低了)+容量大+價錢便宜。然后同時兼備三者是不可能的,所以有了如下的不同的處理方式:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

  存儲器系統采用如上圖的分層結構,頂層的存儲器速度較高,容量較小,與底層的存儲器相比每位的成本較高,其差別往往是十億數量級的。

? ??寄存器即L1緩存 ??

  用與cpu相同材質制造,與cpu一樣快,因而cpu訪問它無時延,典型容量是:在32cpu中為32*32,在64cpu中為64*64,在兩種情況下容量均<1KB

? ?高速緩存即L2緩存 ??

  主要由硬件控制高速緩存的存取,內存中有高速緩存行按照0~64字節為行064~127為行1......最常用的高速緩存行放置在cpu內部或者非常接近cpu的高速緩存中。當某個程序需要讀一個存儲字時,高速緩存硬件檢查所需要的高速緩存行是否在高速緩存中。如果是,則稱為高速緩存命中,緩存滿足了請求,就不需要通過總線把訪問請求送往主存(內存),這畢竟是慢的。高速緩存的命中通常需要兩個時鐘周期。高速緩存為命中,就必須訪問內存,這需要付出大量的時間代價。由于高速緩存價格昂貴,所以其大小有限,有些機器具有兩級甚至三級高速緩存,每一級高速緩存比前一級慢但是容易大。

  緩存在計算機科學的許多領域中起著重要的作用,并不僅僅只是RAM(隨機存取存儲器)的緩存行。只要存在大量的資源可以劃分為小的部分,那么這些資源中的某些部分肯定會比其他部分更頻發地得到使用,此時用緩存可以帶來性能上的提升。一個典型的例子就是操作系統一直在使用緩存,比如,多數操作系統在內存中保留頻繁使用的文件(的一部分),以避免從磁盤中重復地調用這些文件,類似的/root/a/b/c/d/e/f/a.txt的長路徑名轉換成該文件所在的磁盤地址的結果然后放入緩存,可以避免重復尋找地址,還有一個web頁面的url地址轉換為網絡地址(IP)地址后,這個轉換結果也可以緩存起來供將來使用。

  緩存是一個好方法,在現代cpu中設計了兩個緩存,再看4.1中的兩種cpu設計圖。第一級緩存稱為L1總是在CPU中,通常用來將已經解碼的指令調入cpu的執行引擎,對那些頻繁使用的數據自,多少芯片還會按照第二L1緩存 。。。另外往往設計有二級緩存L2,用來存放近來經常使用的內存字。L1L2的差別在于對cpuL1的訪問無時間延遲,而對L2的訪問則有1-2個時鐘周期(即1-2ns)的延遲。

? ?內存 ??

  再往下一層是主存,此乃存儲器系統的主力,主存通常稱為隨機訪問存儲RAM,就是我們通常所說的內存,容量一直在不斷攀升,所有不能再高速緩存中找到的,都會到主存中找,主存是易失性存儲,斷電后數據全部消失。

  除了主存RAM之外,許多計算機已經在使用少量的非易失性隨機訪問存儲如ROMRead Only Memory,ROM),在電源切斷之后,非易失性存儲的內容并不會丟失,ROM只讀存儲器在工廠中就被編程完畢,然后再也不能修改。ROM速度快且便宜,在有些計算機中,用于啟動計算機的引導加載模塊就存放在ROM中,另外一些I/O卡也采用ROM處理底層設備的控制。

  EEPROM(Electrically Erasable PROM,電可擦除可編程ROM)和閃存(flash memory)也是非易失性的,但是與ROM相反,他們可以擦除和重寫。不過重寫時花費的時間比寫入RAM要多。在便攜式電子設備中中,閃存通常作為存儲媒介。閃存是數碼相機中的膠卷,是便攜式音譯播放器的磁盤,還應用于固態硬盤。閃存在速度上介于RAM和磁盤之間,但與磁盤不同的是,閃存擦除的次數過多,就被磨損了。

?  還有一類存儲器就是CMOS,它是易失性的,許多計算機利用CMOS存儲器來保持當前時間和日期。CMOS存儲器和遞增時間的電路由一小塊電池驅動,所以,即使計算機沒有加電,時間也仍然可以正確地更新,除此之外CMOS還可以保存配置的參數,比如,哪一個是啟動磁盤等,之所以采用CMOS是因為它耗電非常少,一塊工廠原裝電池往往能使用若干年,但是當電池失效時,相關的配置和時間等都將丟失。

? ?磁盤 ??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

  磁盤低速的原因是因為它一種機械裝置,在磁盤中有一個或多個金屬盤片,它們以5400,720010800rpmRPM?=revolutions per minute 每分鐘多少轉?)的速度旋轉。從邊緣開始有一個機械臂懸在盤面上,這類似于老式黑膠唱片機上的拾音臂。信息卸載磁盤上的一些列的同心圓上,是一連串的2進制位(稱為bit位),為了統計方法,8bit稱為一個字節bytes1024bytes=1k1024k=1M1024M=1G,所以我們平時所說的磁盤容量最終指的就是磁盤能寫多少個2進制位。

  每個磁頭可以讀取一段換新區域,稱為磁道

  把一個戈丁手臂位置上所以的磁道合起來,組成一個柱面

  每個磁道劃成若干扇區,扇區典型的值是512字節

  數據都存放于一段一段的扇區,即磁道這個圓圈的一小段圓圈,從磁盤讀取一段數據需要經歷尋道時間和延遲時間。

? ? 平均尋道時間 ??

  機械手臂從一個柱面隨機移動到相鄰的柱面的時間成為尋到時間,找到了磁道就以為著招到了數據所在的那個圈圈,但是還不知道數據具體這個圓圈的具體位置

? ?平均延遲時間 ??

  機械臂到達正確的磁道之后還必須等待旋轉到數據所在的扇區下,這段時間成為延遲時間

? ?虛擬內存 ??

  許多計算機支持虛擬內存機制,該機制使計算機可以運行大于物理內存的程序,方法是將正在使用的程序放入內存取執行,而暫時不需要執行的程序放到磁盤的某塊地方,這塊地方成為虛擬內存,在linux中成為swap,這種機制的核心在于快速地映射內存地址,由cpu中的一個部件負責,成為存儲器管理單元(Memory Management Unit MMU)。

?  PS:從一個程序切換到另外一個程序,成為上下文切換(context switch),緩存和MMU的出現提升了系統的性能,尤其是上下文切換。

? ??磁帶 ??

  在價錢相同的情況下比硬盤擁有更高的存儲容量,雖然速度低于磁盤,但是因其大容量,在地震水災火災時可移動性強等特性,常被用來做備份。(常見于大型數據庫系統中)

? ?I/O設備 ??

  cpu和存儲器并不是操作系統唯一需要管理的資源,I/O設備也是非常重要的一環。

  I/O設備一般包括兩個部分:設備控制器和設備本身

  控制器:是查找主板上的一塊芯片或一組芯片(硬盤,網卡,聲卡等都需要插到一個口上,這個口連的便是控制器),控制器負責控制連接的設備,它從操作系統接收命令,比如讀硬盤數據,然后就對硬盤設備發起讀請求來讀出內容。

  控制器的功能:通常情況下對設備的控制是非常復雜和具體的,控制器的任務就是為操作系統屏蔽這些復雜而具體的工作,提供給操作系統一個簡單而清晰的接口。

  設備本身:有相對簡單的接口且標準的,這樣大家都可以為其編寫驅動程序了。要想調用設備,必須根據該接口編寫復雜而具體的程序,于是有了控制器提供設備驅動接口給操作系統。必須把設備驅動程序安裝到操作系統中。

? ?總線 ??

  四小節中的結構在小型計算機中沿用了多年,并也用在早期的IBM PC中。但是隨著處理器和存儲器速度越來越快,單總線很難處理總線的交通流量了,于是出現了下圖的多總線模式,他們處理I/O設備及cpu到存儲器的速度都更快。

  北橋即PCI橋:連接高速設備;南橋即ISA橋:連接慢速設備。

? ? ? ? ? ? ? ? ? ?

? ?啟動計算機 ??

  在計算機的主板上有一個基本的輸入輸出程序(Basic ?Input Output system);BIOS就相當于一個小的操作系統,它有底層的I/O軟件,包括讀鍵盤,寫屏幕,進行磁盤I/O,該程序存放于一非易失性閃存RAM中。

  啟動流程

  1.計算機加電; ??

  2.BIOS開始運行,檢測硬件:cpu、內存、硬盤等; ?

  3.BIOS讀取CMOS存儲器中的參數,選擇啟動設備; ?

  4.從啟動設備上讀取第一個扇區的內容(MBR主引導記錄512字節,前446為引導信息,后64為分區信息,最后兩個為標志位); ?

  5.根據分區信息讀入bootloader啟動裝載模塊,啟動操作系統; ?6.然后操作系統詢問BIOS,以獲得配置信息。對于每種設備,系統會檢查其設備驅動程序是否存在,如果沒有,系統則會要求用戶按照設備驅動程序。一旦有了全部的設備驅動程序,操作系統就將它們調入內核。然后初始有關的表格(如進程表),穿件需要的進程,并在每個終端上啟動登錄程序或GUI。

?

參考文檔:http://www.cnblogs.com/linhaifeng/p/6523843.html

posted on 2017-07-30 00:53 Ella_Wu 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/wuaihua/p/7258061.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455567.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455567.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455567.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

當編程作為一種愛好

一、當編程作為一種愛好&#xff0c;時刻關心一段代碼如何實現。 二、當把工具操作得足夠熟悉&#xff0c;閉眼即能達到代碼述寫的規范。 三、程序呀&#xff0c;如果愛上你是我的錯&#xff0c;我打算一錯到底。轉載于:https://www.cnblogs.com/spiriter88/p/6913539.html

Python中的函數概述

1.python中函數概述 概念 模塊化編程的思想 有組織,可共享(重復使用,實現特定的功能的代碼塊) 提高程序的可維護性,提高開發效率,提高代碼的重用性定義一個函數 1.語法:def 函數名稱(形參列表):函數體/代碼塊return 返回值 2.定義參數介紹 def :關鍵字 用于函數的定義,函數的…

鐵路售票系統_鐵路資訊:復興號動車、智能京張高鐵…中國最高端鐵路裝備看這里...

今天上午&#xff0c;兩年一度的中國國際現代化鐵路技術裝備展在京開展&#xff0c;會期3天&#xff0c;將集中展示路網建設、客貨運輸、經營管理、工程建造、技術裝備、旅客服務等鐵路行業各領域的先進產品及技術。展會現場智能京張&#xff1a;將首次實現時速350公里自動駕駛…

H.264的NALU,RTP封包說明(轉自牛人)

H.264 RTP payload 格式 H.264 視頻 RTP 負載格式 1. 網絡抽象層單元類型 (NALU) NALU 頭由一個字節組成, 它的語法如下: --------------- |0|1|2|3|4|5|6|7| -------- |F|NRI| Type | --------------- F: 1 個比特.forbidden_zero_bit. 在 H.264 規…

CentOS下安裝MySQL報安裝文件conflicts錯誤:

2019獨角獸企業重金招聘Python工程師標準>>> 第一&#xff1a;報這個錯誤&#xff0c;說明已經安裝或相關文件已經存在&#xff0c;把已經存在的文件卸載了就可以了&#xff1a; rpm -e --nodeps mysql-libs-5.1.* 轉載于:https://my.oschina.net/u/3197158/blog/1…

inc指令是什么意思_西門子PLC一些指令

指令(英文全稱意思)∶指令含義1、LD ( Load裝載):動合觸點2、LDN (Load Not不裝載):動斷觸點3、A(And與動合):用于動合觸點串聯4、AN (And Not與動斷):用于動斷觸點串聯5、o(Or 或動合):用于動合觸點并聯6、ON(Or Not 或動斷):用于動斷觸點并聯7、(Out輸出):用于線圈輸出8、OLD…

python核心,內建函數,高階函數

晨測 global和nonlocal區別 寫一個遞歸的階乘回顧 1.global和nonlocal 關鍵字 2.函數的遞歸 1.查找規律 2.設置退出條件 3.性能 3.閉包 外函數中定義一個內函數 外函數的返回值是內函數的引用 內函數引用外函數的變量,未來外函數執行完畢,不會釋放被內函數引用變量 4.總結 1.…

對h.264壓縮視頻碼流中i幀的提取(firstime)

這個問題要說清楚還是有點復雜&#xff1a;首先判斷 NALU 類型是否是 5&#xff0c;如果是&#xff0c;那么以后連續出現的 NALU 類型為 5 的 NALU 就屬于 IDR 幀&#xff08;一種特殊的 I 幀&#xff09;&#xff1b;如果 NALU 不是 5&#xff0c;則要進一步判斷 slice_type 是…

hadoop fs 運維常用的幾個命令

FS Shell調用文件系統(FS)Shell命令應使用 bin/hadoop fs <args>的形式。 所有的的FS shell命令使用URI路徑作為參數。URI格式是scheme://authority/path。對HDFS文件系統&#xff0c;scheme是hdfs&#xff0c;對本地文件系統&#xff0c;scheme是file。其中scheme和auth…

touchesEnded不響應

為什么80%的碼農都做不了架構師&#xff1f;>>> http://blog.csdn.net/assholeu/article/details/16363241 touchesEnded不響應主要存在以下幾種情況 case 1 : userInteractionEnabled 部分控件如UIImageView&#xff0c;userInteractionEnabled默認為NO&#xff0…

python request對四類參數的處理_如何處理Djang中同一參數具有多個變量的request.GET...

在Django視圖中&#xff0c;您可以訪問request.GET[variablename]&#xff0c;因此在您的視圖中&#xff0c;您可以執行如下操作&#xff1a;myvar request.GET[myvar] 實際的request.GET[myvar]對象類型是&#xff1a; 現在&#xff0c;如果要傳遞具有相同參數名的多個變量&a…

nonlocal和global關鍵字

回顧: 1. Python的函數的概述函數定義函數調用2. Python函數中參數的類型和返回值形參和實參形參類型:普通參數: 實參的傳遞的順序和個數和形參一直關鍵字參數: 指定傳遞的實參被特定形參接收默認參數: 形參中設定當前參數的默認值可以不傳遞設定了默認參數的實參不定長參數:一…

小波在圖像視頻壓縮領域中的應用分析【轉貼】

到目前為止&#xff0c;小波的最多應用一直是數字圖像壓縮。它們是新JPEG2000數字圖像標準的核心。使用小波變換的優勢主要有如下幾個方面。 1、基于小波變換的方法能有效地保留原始圖像的細節和邊緣&#xff0c;重建圖像時不會造成“振鈴”效應。 2、基于小波變換的方法采用…

iOS開發人員不容錯過的10大工具

內容簡介 1、iOS簡介 2、iOS開發十大實用工具之開發環境 3、iOS開發十大實用工具之圖標設計 4、iOS開發十大實用工具之原型設計 5、iOS開發十大實用工具之演示工具 6、iOS開發十大實用工具之視頻制作 7、iOS開發十大實用工具之分析工具 iOS簡介 說起iOS&#xff0c;自然不必多介…

博弈論之Nim游戲

OI里&#xff0c;博弈論就是兩個聰明絕頂的人玩不公平的游戲。 Nim游戲是組合游戲(Combinatorial Games)的一種&#xff0c;屬于“Impartial Combinatorial Games”&#xff08;以下簡稱ICG&#xff09;。 通常的Nim游戲的定義是這樣的&#xff1a;有若干堆石子&#xff0c;每堆…

python標準庫sys_Python標準庫之Sys模塊使用詳解

sys 模塊提供了許多函數和變量來處理 Python 運行時環境的不同部分. 處理命令行參數 在解釋器啟動后, argv 列表包含了傳遞給腳本的所有參數, 列表的第一個元素為腳本自身的名稱. 使用sys模塊獲得腳本的參數 復制代碼代碼如下: print "script name is", sys.argv[0] …

python3.7知識點匯總

Python3.7從零開始學 —|進入Python3.7的精彩世界 —|---|Python起源 —|---|—|Python作者簡介 —|---|—|---|Guido von Rossum&#xff0c;荷蘭人。1982年&#xff0c;Guido從阿姆斯特丹大學獲得了數學和計算機碩士學位。1989年&#xff0c;他創立了Python語言。 —|---|—|…

塊編碼、對象編碼、小波編碼、分布式編碼【轉貼】

人類獲取的信息中70%來自于視覺&#xff0c;視頻信息在多媒體信息中占有重要地位&#xff1b;同時視頻數據冗余度最大&#xff0c;經壓縮處理后的視頻質量高低是決定多媒體服務質量的關鍵因素。因此數字視頻技術是多媒體應用的核心技術&#xff0c;對視頻編碼的研究已成為信息技…

cookie練習

cookie是網站便于辨別用戶身份&#xff0c;進行 session 跟蹤而儲存在用戶本地終端上的數據。 cookie通過jsdom操作完成。 添加cookie&#xff1a; document.cookie ‘name val’;前一個是name&#xff0c;后一個是val。添加的時間是永久的。 document.cookie ‘name val ;…

算法學習系列(十):用數組模擬鏈表、雙鏈表、棧、隊列、單調棧、單調隊列

目錄 引言一、數組模擬鏈表1.模板2.例題3.測試 二、數組模擬雙鏈表1.模板2.例題3.測試 三、數組模擬棧1.模板2.例題3.測試 四、數組模擬隊列1.模板2.例題3.測試 五、數組模擬單調棧1.例題模板2.測試 六、數組模擬單調隊列1.例題模板2.測試 引言 首先說一下為什么要拿數組來模擬…