程序員易混淆的10個基礎概念

1.java初始化過程:

1.初始化父類中的靜態成員變量和靜態代碼塊 ; 2.初始化子類中的靜態成員變量和靜態代碼塊 ; 3.初始化父類的普通成員變量和代碼塊,再執行父類的構造方法; 4.初始化子類的普通成員變量和代碼塊,再執行子類的構造方法;java

2.instance是java的二元運算符,用來判斷他左邊的對象是否爲右面類(接口,抽象類,父類)的實例

3.linux的啓動過程文件

/sbin/init在覈心完整的加載後,開始運行系統的第一支程序,主要的功能就是準備軟件運行的環境,包括系統的主機名稱、網絡配置、語系處理、文件系統格式及其餘服務的啓動等。node

/bin/sh解釋腳本的shell命令,開機後運行linux

/etc/sysvinit就是 system V 風格的 init 系統,顧名思義,它源於 System V 系列 UNIX。sysvinit 中運行模式描述了系統各類預訂的運行模式。shell

/etc/inittab定義了系統引導時的運行級別, 進入或者切換到一個運行級別時作什麼。安全

1,啓動init進程的配置文件是/etc/inittab服務器

2,/etc/sysvinit是系統初始化用的網絡

4.linux重啓命令

在linux命令中reboot是從新啓動,shutdown -r now是當即中止而後從新啓動,都說他們兩個是同樣的,實際上是有必定的區別的。併發

shutdown命令能夠安全地關閉或重啓Linux系統,它在系統關閉以前給系統上的全部登陸用戶提示一條警告信息。該命令還容許用戶指定一個時間參數,能夠是一個精確的時間,也能夠是從如今開始的一個時間段。 精確時間的格式是hh:mm,表示小時和分鐘,時間段由+ 和分鐘數表示。系統執行該命令後會自動進行數據同步的工做。 該命令的通常格式: shutdown [選項] [時間] [警告信息] 命令中各選項的含義爲:socket

  • k 並不真正關機而只是發出警告信息給全部用戶
  • r 關機後當即從新啓動
  • h 關機後不從新啓動
  • f 快速關機重啓動時跳過fsck
  • n 快速關機不通過init 程序
  • c 取消一個已經運行的shutdown 須要特別說明的是該命令只能由超級用戶使用。 例1,系統在十分鐘後關機而且立刻從新啓動: # shutdown –r +10 例2,系統立刻關機而且不從新啓動:# shutdown –h now halt是最簡單的關機命令,其其實是調用shutdown -h命令。halt執行時,殺死應用進程,文件系統寫操做完成後就會中止內核。 halt命令的部分參數以下: [-f] 沒有調用shutdown而強制關機或重啓 [-i] 關機或從新啓動以前,關掉全部的網絡接口 [-p] 關機時調用poweroff,此選項爲缺省選項

reboot的工做過程與halt相似,其做用是從新啓動,而halt是關機。其參數也與halt相似。reboot命令重啓動系統時是刪除全部的進程,而不是平穩地終止它們。所以,使用reboot命令能夠快速地關閉系統,但若是還有其它用戶在該系統上工做時,就會引發數據的丟失。因此使用reboot命令的場合主要是在單用戶模式。函數

init是全部進程的祖先,其進程號始終爲1。init用於切換系統的運行級別,切換的工做是當即完成的。init 0命令用於當即將系統運行級別切換爲0,即關機;init 6命令用於將系統運行級別切換爲6,即從新啓動

5.進程和進程控制塊

進程是指一個具備必定獨立功能的程序關於某個數據集合的一次運動活動。簡單地說進程是能夠併發執行的程序的執行過程,它是控制程序管理下的基本的多道程序單位。 進程控制塊(PCB )是由系統爲每一個進程分別創建的,用以記錄對應進程的程序和數據的存儲狀況,記錄進程的動態信息。 PCB是一個進程存在的標誌。系統根據PCB而感知進程的存在,根據PCB中的信息對進程實施控制管理,當進程結束時,系統回收對應的PCB,進程隨之消亡。 進程控制塊中包含一系列信息,其中進程名即進程標識符惟一標識對應進程,系統根據該標識符來識別一個進程。 一個進程只有惟一的進程控制塊,不可和其餘進程共用一個進程控制塊。

6.編譯基本概念

編譯:進行語法檢查、函數分配空間,將各個函數編譯成二進制碼,按照特定目標文件格式生成目標文件。 鏈接:把程序中各個文件編譯生成的目標文件鏈接起來,同時還要同系統提供的資源(如函數庫)鏈接成爲一個總體,獲得可執行文件。 運行:執行鏈接好的程序。 重定位:把程序的邏輯地址空間變換成內存中的實際物理地址空間的過程,也就是說在裝入時對目標程序中指令和數據的修改過程。

7.程序實現連接的方式有三種(連接時間不一樣):

1.靜態連接 2.動態連接(裝入時) 3.動態連接(運行時)

8.若是在一個創建了TCP鏈接的socket上調用recv函數

<0 出錯 =0 鏈接關閉

0 接收到數據大小

9.有關http keep-alive

在HTTP1.0和HTTP1.1協議中都有對KeepAlive的支持。其中HTTP1.0須要在request中增長「Connection: keep-alive」 header纔可以支持,而HTTP1.1默認支持

當使用Keep-Alive模式時,Keep-Alive功能使客戶端到服 務器端的鏈接持續有效,當出現對服務器的後繼請求時,Keep-Alive功能避免了創建或者從新創建鏈接

能夠在服務器端設置是否支持keep-alive server爲多爲靜態內容時,開啓keep-alive,增長傳輸效率。動態請求,已佔用的資源得不到釋放,效率低下。

10.硬連接和軟連接

LINUX的硬連接不能連接到目錄是由於引入了對目錄的硬鏈接就有可能在目錄中引入循環,在目錄遍歷的時候系統就會陷入無限循環當中,這樣致使沒法定位到訪問目錄。 硬連接:爲原文件建立一個新的文件名,但本質中只增長了一個目錄項,並使用與原來相等的inode,指向 原文件的區域。數據區爲兩個名字共享。 使用限制:源文件和連接文件必須在同一個文件系統內,且目錄文件不能建立硬連接。 命令:ln a b // 給a建立連接文件b 可使用ls -i查看兩個inode是徹底同樣的。 同時注意鏈接計數count。count的意義對於文件來講是硬連接的個數,對於目錄,通常(count-2)爲目錄包含的子文件個數。 注意:二者的權限也是徹底同樣的。對其中一個進行讀寫操做,另一個也會更新。但刪除其中一個,只會刪除目錄項,不會刪除存儲區數據。另一個文件的使用和操做徹底不受影響。除非count-1結果0,纔將數據區刪除。做用:節省空間,兩個文件能同步更新,防止重要文件被「誤刪」。

軟連接:也叫符號連接。本質是建立一個新的文件,保存源文件的路徑名。所以inode和源文件的inode是不同的。使用沒有文件系統的限制,也沒有文件和目錄的限制。 命令:ln -s a b 注意:產生的文件權限和源文件是不同的。因爲軟連接使用比較靈活,可能斷鏈,也能夠自循環,每每須要屢次查找增長文件操做的步驟而下降效率。儘可能少用,並避免出現循環。

相關文章
相關標籤/搜索