1.java初始化過程:
1.初始化父類中的靜態成員變數和靜態程式碼塊 ; 2.初始化子類中的靜態成員變數和靜態程式碼塊 ; 3.初始化父類的普通成員變數和程式碼塊,再執行父類的構造方法; 4.初始化子類的普通成員變數和程式碼塊,再執行子類的構造方法;
2.instance是java的二元運算子,用來判斷他左邊的物件是否為右面類(介面,抽象類,父類)的例項
3.linux的啟動過程檔案
/sbin/init在核心完整的載入後,開始執行系統的第一支程式,主要的功能就是準備軟體執行的環境,包括系統的主機名稱、網路配置、語系處理、檔案系統格式及其他服務的啟動等。
/bin/sh解釋指令碼的shell命令,開機後執行
/etc/sysvinit就是 system V 風格的 init 系統,顧名思義,它源於 System V 系列 UNIX。sysvinit 中執行模式描述了系統各種預訂的執行模式。
/etc/inittab定義了系統引導時的執行級別, 進入或者切換到一個執行級別時做什麼。
1,啟動init程式的配置檔案是/etc/inittab
2,/etc/sysvinit是系統初始化用的
4.linux重啟命令
在linux命令中reboot是重新啟動,shutdown -r now是立即停止然後重新啟動,都說他們兩個是一樣的,其實是有一定的區別的。
shutdown命令可以安全地關閉或重啟Linux系統,它在系統關閉之前給系統上的所有登入使用者提示一條警告資訊。該命令還允許使用者指定一個時間引數,可以是一個精確的時間,也可以是從現在開始的一個時間段。 精確時間的格式是hh:mm,表示小時和分鐘,時間段由+ 和分鐘數表示。系統執行該命令後會自動進行資料同步的工作。 該命令的一般格式: shutdown [選項] [時間] [警告資訊] 命令中各選項的含義為:
- 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 注意:產生的檔案許可權和原始檔是不一樣的。由於軟連結使用比較靈活,可能斷鏈,也可以自迴圈,往往需要多次查詢增加檔案操作的步驟而降低效率。儘量少用,並避免出現迴圈。