1. 什麼時候需要使用線程鎖
消息是由系統給你放在隊列中的(PostMessage方式),或者由你直接發送到窗口處理過程(SendMessage方式),順序處理到,不需要考慮同步問題.
2. 為什麼會有「線程是為不懂狀態機的程序員准備的」這種說法
這句話主要是針對伺服器端領域的編程說的。主要是非同步回調與多線程模型之爭。擅長使用非同步回調的人,認為使用多線程是不懂狀態機。
這句話在理論上是沒錯,但現實中還是會不可避免的要使用多線程。主要是非同步回調(狀態機)模型的代碼往往支離破碎,很難維護。
3. 程序員需要部署遠程伺服器嗎
不需要。項目要部署到遠程的伺服器,項目上線也就是將項目部署到遠程伺服器。
4. 企業為什麼要使用伺服器,應該使用什麼樣的伺服器
現在的企業只要是有互聯網需求的,一般都會用到伺服器或者是網站空間,在選擇伺服器的時候,一些中小型企業會很糾結,不知道該選擇伺服器託管還是選擇伺服器租用,因為兩者是不同的伺服器需求,需要的成本也有差別。很多企業想要選擇一個性價比更高的服務,其實,選擇一個適合自己的性價比就高。現在的企業只要是有互聯網需求的,一般都會用到伺服器或者是網站空間,在選擇伺服器的時候,一些中小型企業會很糾結,不知道該選擇伺服器託管還是選擇伺服器租用,因為兩者是不同的伺服器需求,需要的成本也有差別。很多企業想要選擇一個性價比更高的服務,其實,選擇一個適合自己的性價比就高。在選擇伺服器之前,我們需要先了解一下伺服器託管和伺服器租用,了解兩者有哪些不同,之後再結合自己的實際需求,選擇一個最適合自己的方案,這樣,在一定程度上也可以減少成本的浪費。
伺服器託管
伺服器託管就是客戶自己購買伺服器硬體,然後將自己購買的伺服器放到IDC機房,由機房這邊提供穩定的網路環境和日常的維護,一般日常維護包括重啟、重做系統、安裝一些常用的應用軟體等等。伺服器託管的費用只要是帶寬的大小和伺服器的規格來決定的。其中,帶寬的大小佔了很大的比重;伺服器規格也就是厚度,厚度大的機器不光要多耗費一些電力,更重要的是要多佔用一個機位,因此,這多出來的一個機位也是要收取一定的機位費用的,所以建議大家在購買機器來託管的時候,盡量選擇機架式的機器,這樣託管起來比較節省一些。
伺服器租用
伺服器租用是自己不需要單獨購買機器,只需要將你對硬體和帶寬方面的要求告訴IDC商,他們會准備硬體,然後配置機器。對於不懂伺服器硬體的用戶,一般會選擇這個業務,這樣可以預防後期在託管期間出現硬體問題無法處理的情況。當然,在租用期間,一旦硬體出現問題,IDC商也需要承擔一定的風險。另外,這種租用業務,機器是不屬於客戶的,租用到期之後,客戶可以選擇繼續租用,也可以選擇不再使用。
伺服器租用的優劣勢分析
向IDC運營商租用伺服器的好處是便捷和低價,我們知道,大部分伺服器買來以後都需要安裝系統和軟體,再經過調試通過最終放到 IDC 機房的,那因此直接租用IDC機房的伺服器就相對要更加省事一點。但是,租用機房的伺服器也有其劣勢,主要是用戶大部分情況下都看不到自己租用的伺服器什麼樣子,一些運營商倒是會如實的告訴客戶他們所租用的伺服器品牌和型號。不過也會有極少數IDC採用自行組裝的伺服器作為租用業務使用以便降低成本,這種情況,要想看機器的配置型號就需要遠程伺服器。
自己購買伺服器的優劣勢分析
自己購買伺服器遇到的最大障礙恐怕就是價格。但是現在隨著伺服器成本的降低,大部分專業客戶和大客戶都已經改為採用自行采購設備然後拿去託管的方式,因為自行采購的優勢比較明顯。自己組裝一台伺服器,可能是一半新配件一半二手配件組裝而成,這種價格其實也不會太高;要想機器有高性能,還是需要有足夠的成本去支撐的,一些注重品牌和穩定的用戶也可以直接購買 IBM、HP之流的一線大廠產品。另外,有些用戶可能要使用比較特殊的操作系統和軟體,又或者是事先需要大量的資料到伺服器硬碟上,這些操作遠程式控制制機房的伺服器都不是很方便,一般是先調試或者復制好再拿去機房託管。
通過對以上兩種伺服器業務的比較,可以得出結論:對於離機房較遠的地方,可以選擇租用伺服器。如果離機房不很遠的話,可以選擇自行購買伺服器再放機房託管,即使價格會比租用來得貴。如果是自己做OA系統,或者企業內部數據等,可以考慮自己買伺服器。如果自己不知道買哪種伺服器,可以先咨詢一些IDC商,給他們說一下自己的要求,然後看看用哪種伺服器比較合適,然後再自行購買。
如果有幫到你,請採納,謝謝。
5. Windows NT採用了怎樣內核結構
Windows NT 內核基本結構和特徵
盡管大部分人每天在Windows系統上工作學習娛樂,但是對於其內核結構很多人仍然是不了解的。一方面是由於其內核源代碼不開源,另一方面則是由於相關資料的奇缺。我大二基本上花了一學期來學習和探究NT內核。雖然不敢說自己對其有很深入的了解,但至少其基本結構還算是清楚的。但是我畢竟才學有限,肯定會有不完善的地方,還請各位不吝賜教。
目前微軟所有的主流操作系統均是基於NT內核,比如:
Windows 2000/XP/Server 2003(基於NT5)
Windows Vista (基於NT6)
Windows 7(基於NT6.1, 我沒裝過Win7,不過據說是這樣的)
盡管很多人責備Windows在一些方面存在很多問題,但是這並不是內核的錯,總的來說,NT的是一個成熟穩定且先進的內核,我認為在今後相當長的一段時期內,NT內核仍將是主流,且不會有很大變化(當然,局部的升級是完全毫無疑問的)
微軟早期希望把NT做成一個純微內核結構,關於微內核和單一內核的區別,各位如有不清楚的,可以去網上搜索一下。後來為了提高圖形子系統的性能,避免大量的內核態和用戶態切換,微軟便將其移入內核之中,使其成為內核一部分(類似的還有後來的DirectX技術)。由此可見,NT並不是一個完全的微內核,它也具有單一內核的某些特徵。
NT內核具有以下幾個特徵(摘自Undocumented Windows NT)
Portability (可移植性)
如你所知,Windows NT 可以運行在多種平台上,即 Intel、MIPS、Power PC 和 DEC Alpha。眾多廠商都為 Windows NT 的可移植性做出了貢獻。 其中最為重要的因素可能是其實現所使用的語言。Windows NT 大部分是用 C 語言編寫的,也有一部分用的是 C++。 平台相關的匯編語言只在必需的地方才用到。Windows NT 團隊還將操作系統中硬體相關的部分與其它部分隔離開,單獨放進了 HAL.DLL。 如此一來,Windows NT 中與硬體無關的部分的代碼就可以用 C 之類的高級語言來編寫,也因此可以很容易地移植到各種平台。
Extensibility(可擴展性)
Windows NT 具有很高的可擴展性,但因為缺少文檔,其可擴展的特性卻極少得到發掘。未公開的特性的名單中,子系統首當其沖。子系統在操作系統中提供了多種操作系統介面。只需添加新的子系統程序就可以為 Windows NT 擴展新的操作系統介面,但是對於公開添加新子系統過程的要求微軟卻一直打馬虎眼。
Windows NT 的內核是高可擴展的,因為可以將內核模塊作為驅動程序動態載入。對於 Windows NT,微軟提供了足夠的文檔來編寫硬體設備驅動——即硬碟驅動、網卡驅動、磁帶機驅動等等。在 Windows NT 下還可以編寫不控制設備的驅動程序。甚至連文件系統也是作為驅動程序載入的。
Windows NT 的可擴展性的另一個例子就是系統調用介面的實現。 開發者要修改操作系統行為,一般都需要鉤掛或添加系統調用。 Windows NT 的開發團隊實際了良好的系統調用介面以方便鉤掛和添加系統調用。但是微軟還是沒有公開這些機制。
Compatibility(兼容性)
長久以來,向下兼容性都是 Intel 處理器和微軟操作系統的一大特徵,也是這兩位巨人成功的關鍵。Windows NT 必須能運行 DOS、Win16 和 OS/2 的程序。兼容性是 Windows NT 開發團隊使用子系統概念的另一個原因。除二進制兼容之外(執行不同格式的可執行文件),Windows NT 還為符合 POSIX 的程序提供了源代碼級的兼容。增強兼容性的其他方面還表現在除自己本身的 NTFS 外,Windows NT 支持其它的文件系統,如 DOS 的 FAT 和 OS/2 的 HPFS。
Maintainability(可維護性)
Windows NT 的代碼量很大,維護著些代碼的工作量也相當大。NT 的開發團隊通過使用面向對象的設計實現了高可維護性。再有,將操作系統的功能分成各個層也提高了可維護性。最上面的一層,也就是用戶見到的操作系統層面,是子系統層。子系統提供系統調用介面來為外界提供應用程序編程介面。在系統調用介面層之下的是 NT 的 executive,executive 又建立在內核之上,而內核又依賴於硬體抽象層(HAL),硬體抽象層與硬體直接通訊。
NT 的開發團隊所選的編程語言也與 Windows NT 的可維護性有關。正如我們前面提到的,整個操作系統都是用 C 和 C++ 來編寫的,只有極少數不用不行的地方用了匯編語言。
Security(安全性)
Windows NT 是一個安全的操作系統,是因為它有以下幾點特徵:用戶在使用系統之前必須先登陸。 系統中的資源都被視為對象,而每一個對象都相應由一個安全描述符。安全描述符有一個安全列表來指示那些用戶可以訪問該對象。
盡管有這些,要是沒有一個安全的文件系統,操作系統也不能說是安全的。 DOS 時的 FAT 文件系統沒有預見到任何的安全問題,其作為一個單用戶的系統,也不用防範安全問題。
為了克服此缺陷,Windows NT 團隊推出了一種新的文件系統,這種文件系統基於 OS/2 的文件系統 HPFS。這種新的 Windows NT 的自有文件系統叫 NTFS。它支持訪問控制,用戶可以為 NTFS 下創建的文件或目錄指定訪問許可權,NTFS 只允許有訪問許可權的進程訪問該文件或目錄。
Multiprocessing(多進程)
Windows NT 支持對稱多處理,Windows NT 的工作站版本可以支持兩個處理器,伺服器版可以支持到4個。為支持多處理,操作系統需要特殊的同步機制。在單處理器系統中,通過禁用中斷,臨界區中的代碼執行時不會被打斷。這對於維護內核數據結構的完整性來說是必需的。在多處理器環境下,就不可能在所有的處理器上都禁用中斷。在多處理環境中,Windows NT 使用自旋鎖來保護內核數據結構。
註:多處理可分為對稱的和非對稱的。在非對稱多處理中,有一個處理器為主處理器,其它的處理器都為從處理器。只有主處理器運行在內核模式,其它從處理器都只運行在用戶線程。只要運行在用戶線程的從處理器一調用系統服務,主處理器就接管此線程並執行所需的內核服務。調度程序,一個內核程序,之運行在主處理器上。因此,主處理扮演者調度員的角色,將用戶模式線程分派給從處理器。很自然,與所有處理器都可在內核或用戶模式運行的對稱多處理相比,主處理器負擔很重,系統不均衡。
International Language Support(國際化語言支持)
如今眾多的 PC 用戶都使用英語之外的其它語言。與這些用戶能很好交互的關鍵就是使操作系統能支持用戶們的語言。Windows NT 通過使用 Unicode 標準的字元集實現了這一目標。Unicode 標准規定了一個16位的字元集,而ASCII 使用的是8位字元集。 Unicode 的前256個字元的編碼與 ASCII 的相同。這就為非拉丁語的語言留出了充足的空間。Win32 API 能接受 Unicode 和 ASCII 兩種字元集,而 Windows NT 的內核則只能使用 Unicode。盡管應用程序程序員可以不去了解 Unicode,但驅動程序的開發者必須熟悉 Unicode,因為內核介面函數只接受 Unicode 字元串而且驅動的入口點都用的是 Unicode。
Windows NT 從 MACH 操作系統那裡借用了核心體系,MACH 操作系統是在卡耐基梅隆大學開發的。MACH 操作系統的基本理念就是通過將復雜的操作系統功能交給用戶級進程而將內核減至最小。這種客戶機-伺服器的操作系統體系還有另外一個目的:允許在同一操作系統上使用多種 APIs。通過在伺服器進程中實現 APIs 就可以做到。
MACH 操作系統的內核提供了非常簡單的一組介面函數。伺服器進程使用這組介面函數實現出某種 API 來提供一組更復雜的介面函數。Windows NT 從 MACH 那裡借用了這個理念。Windows NT 中的伺服器進程被稱作子系統。模塊化和結構化的程序設計都是優秀軟體管理的原則,NT 選擇使用客戶機-伺服器的體系結構顯示了它對這種原則的服從。Windows NT 本可以將所需的 APIs 在內核實現,也可以在內核上加上不同的層來實現不同的 APIs。出於維護性和擴展性的目的,NT 團隊選擇了子系統的辦法。
Windows NT 中有兩種子系統: integral subsystems 和 environment subsystems。Integral subsystems,如安全管理子系統,完成基本的操作系統任務。 Environment subsystems 則使得一台 Windows NT 機器能使用不同種類的 APIs。Windows NT 的子系統能支持以下的 APIs:
Win32 子系統。Win32 子系統提供 Win32 API。使用 Win32 API 的應用程序可以運行在微軟 提供的所有平台上—
WOW 子系統。Windows on Windows (WOW) 子系統提供了對 16-bit Windows 應用程序的兼容,使得 Win16 的應用程序可以在 Windows NT 上運行。只要沒有使用 Windows NT 不支持的未公開函數,這些應用程序都可以運行。
NTVDM 子系統。NT Virtual DOS Machine (NTVDM) 提供了一個基於文本的環境,DOS 程序可以在這個環境中運行。
OS/2 子系統。OS/2 子系統能運行 OS/2 應用程序。WOW、NTVDM 和 OS/2 都只能用在 Intel 平台上,因為他們都對應用程序提供二進制兼容性。而用於一種處理器的可執行文件或二進制文件就不能用在另一種處理器上,因為處理器間的機器指令格式不同。
POSIX 子系統。POSIX 子系統提供符合 POSIX 1003.1 標準的 API。
應用程序並不知道所調用的 API 是由相應的子系統處理的。這種隱藏是通過每種子系統各自的客戶端 DLL 來實現的。這種 DLL 將 API 調用轉換為本地過程調用(local procere call,LPC)。本地過程調用類似於聯網的 UNIX 上的遠程過程調用(RPC)。使用 RPC,客戶應用程序可以調用運行在網路上另一台機器上的伺服器進程。 LPC 對運行在同一台計算機上的客戶機與伺服器進行了優化。
NT內核主要包含以下幾個重要文件:
Ntoskrnl.exe(或者Ntkrnlpa.exe)
HAL.Dll
NTDll.Dll
Win32k.Sys
NT內核的核心是NT EXECUTIVE。對應的文件是Ntoskrnl.exe。如果是機器是多處理器的,則是Ntkrnlpa.exe。非常可笑的是,這個文件可以直接刪除,其後果就是重啟後Windows無法啟動,甚至連滾動條都看不到。該文件只有2MB左右的大小,但可謂是麻雀雖小五臟俱全,它作為整個Windows中最核心的部分,向外界提供了復雜的介面。
與之相輔相成的是HAL.Dll文件,即Hardware Abstraction Layer 硬體抽象層 。它直接與機器的硬體打交道,將硬體的差異對其之上的層隱藏起來。Windows NT 是一個有高可移植性的操作系統,運行在多種平台上。HAL.DLL 包含的代碼向核心的其它部分隱藏了處理器和機器相關的細節。因此平台之間只有 HAL.DLL 不同,剩下的使用 HAL 介面的核心代碼都有很高的可移植性。
NTDll.Dll模塊。導出了大部分的Native API函數,提供了由用戶態至內核態的切換的功能。做過Windows平台開發的人都知道,Windows API主要由Kernel32.Dll, User32.Dll, GDI32.Dll構成。其實對WindowsAPI的調用最終會被轉接到NTDll。即所謂Native API,命名上基本上就是在原API前面加上Nt或者Zw(比如CreateFile就變成了NtCreateFile)。而Kernel32.Dll, User32.Dll, GDI32.Dll三個文件則組成了Win32子系統,它們本身不實現API,它導出的函數被稱為stub 函數(盡管名稱上看起來很迷惑人)
Win32K.sys模塊。實現了Windows的圖形處理部分。USER32 和 GDI32 使用系統調用介面來調用 WIN32K.SYS 中的服務。由於其工作與內核態,所以具有很高的性能,這也成就了Windows系統的強大的圖形處理能力。
6. 鎖死伺服器的程序員燕飛宏是個什麼樣人
說真的我不信這個事,再蠢的人也應該清楚惡意給公司造成損失的,要賠償其造成的全部經濟損失,而且還可能觸犯刑法來個牢獄之災。一個程序員肯定是有文化有智傷的人,很難想像會做出這么蠢的事!再說了這事要是真的為啥不立即報警或者去法院起訴燕飛宏,而要等一年以後爆出來呢!總感覺很蹊蹺
7. java 鎖管什麼 cpu控制權又管什麼
JavaCardAPI的產生與發展
1996年10月29日,Sun公司宣布完成了JavaCardAPI(Java卡應用程序介面)的規范化工
作。
1997年7月,Sun又推出JavaCardAPI的更新版本。
JavaCardAPI是一個規范化的Java語言大型應用程序介面,它充分利用了智能卡技術使
電子商業、網路存取、分布式程序、游戲程序以及認證等網路功能的實現成為可能。
JavaSoft公司的總裁AlanBaratz對此評價說:「Java卡應用程序不僅可以在任何智能卡
上運行,而且Java程序員還能運用相同的工具開發針對智能卡、頁面管理程序、網路計算機
、個人計算機及容錯伺服器的大型應用程序。
」JavaCardAPI為智能卡開發人員提供關鍵的
Java功能,它是一個工業標准語言,並為智能卡開放了應用程序介面,允許大型應用程序運行
在所有符合ISO7816標準的智能卡上。
Java語言的可擴展性以及平台的獨立性為生成智能卡
大型應用程序提供了一個理想的環境。
到目前為止,智能卡操作人員還一直在編寫不具有互
操作性及可移植性的專用應用程序,Java的引入將會改變這一格局。
智能卡開發人員可以利
用日益增多的Java開發工具,通過JavaCardAPI編譯大型應用程序。
JavaSoft公司正在與智
能卡工業的主要公司合作開發一種易於使用的工具,使這些大型應用程序能夠在智能卡環境
中運行。
8. 並發控制為什麼要使用意向鎖
給你個最詳細的吧可能有你要的內容鎖的概述一.為什麼要引入鎖多個用戶同時對資料庫的並發操作時會帶來以下數據不一致的問題:丟失更新A,B兩個用戶讀同一數據並進行修改,其中一個用戶的修改結果破壞了另一個修改的結果,比如訂票系統臟讀A用戶修改了數據,隨後B用戶又讀出該數據,但A用戶因為某些原因取消了對數據的修改,數據恢復原值,此時B得到的數據就與資料庫內的數據產生了不一致不可重復讀A用戶讀取數據,隨後B用戶讀出該數據並修改,此時A用戶再讀取數據時發現前後兩次的值不一致並發控制的主要方法是封鎖,鎖就是在一段時間內禁止用戶做某些操作以避免產生數據不一致二鎖的分類鎖的類別有兩種分法:1.從資料庫系統的角度來看:分為獨占鎖(即排它鎖),共享鎖和更新鎖MS-SQLServer使用以下資源鎖模式。鎖模式描述共享(S)用於不更改或不更新數據的操作(只讀操作),如SELECT語句。更新(U)用於可更新的資源中。防止當多個會話在讀取、鎖定以及隨後可能進行的資源更新時發生常見形式的死鎖。排它(X)用於數據修改操作,例如INSERT、UPDATE或DELETE。確保不會同時同一資源進行多重更新。意向鎖用於建立鎖的層次結構。意向鎖的類型為:意向共享(IS)、意向排它(IX)以及與意向排它共享(SIX)。架構鎖在執行依賴於表架構的操作時使用。架構鎖的類型為:架構修改(Sch-M)和架構穩定性(Sch-S)。大容量更新(BU)向表中大容量復制數據並指定了TABLOCK提示時使用。共享鎖共享(S)鎖允許並發事務讀取(SELECT)一個資源。資源上存在共享(S)鎖時,任何其它事務都不能修改數據。一旦已經讀取數據,便立即釋放資源上的共享(S)鎖,除非將事務隔離級別設置為可重復讀或更高級別,或者在事務生存周期內用鎖定提示保留共享(S)鎖。更新鎖更新(U)鎖可以防止通常形式的死鎖。一般更新模式由一個事務組成,此事務讀取記錄,獲取資源(頁或行)的共享(S)鎖,然後修改行,此操作要求鎖轉換為排它(X)鎖。如果兩個事務獲得了資源上的共享模式鎖,然後試圖同時更新數據,則一個事務嘗試將鎖轉換為排它(X)鎖。共享模式到排它鎖的轉換必須等待一段時間,因為一個事務的排它鎖與其它事務的共享模式鎖不兼容;發生鎖等待。第二個事務試圖獲取排它(X)鎖以進行更新。由於兩個事務都要轉換為排它(X)鎖,並且每個事務都等待另一個事務釋放共享模式鎖,因此發生死鎖。若要避免這種潛在的死鎖問題,請使用更新(U)鎖。一次只有一個事務可以獲得資源的更新(U)鎖。如果事務修改資源,則更新(U)鎖轉換為排它(X)鎖。否則,鎖轉換為共享鎖。排它鎖排它(X)鎖可以防止並發事務對資源進行訪問。其它事務不能讀取或修改排它(X)鎖鎖定的數據。意向鎖意向鎖表示SQLServer需要在層次結構中的某些底層資源上獲取共享(S)鎖或排它(X)鎖。例如,放置在表級的共享意向鎖表示事務打算在表中的頁或行上放置共享(S)鎖。在表級設置意向鎖可防止另一個事務隨後在包含那一頁的表上獲取排它(X)鎖。意向鎖可以提高性能,因為SQLServer僅在表級檢查意向鎖來確定事務是否可以安全地獲取該表上的鎖。而無須檢查表中的每行或每頁上的鎖以確定事務是否可以鎖定整個表。意向鎖包括意向共享(IS)、意向排它(IX)以及與意向排它共享(SIX)。鎖模式描述意向共享(IS)通過在各資源上放置S鎖,表明事務的意向是讀取層次結構中的部分(而不是全部)底層資源。意向排它(IX)通過在各資源上放置X鎖,表明事務的意向是修改層次結構中的部分(而不是全部)底層資源。IX是IS的超集。與意向排它共享(SIX)通過在各資源上放置IX鎖,表明事務的意向是讀取層次結構中的全部底層資源並修改部分(而不是全部)底層資源。允許頂層資源上的並發IS鎖。例如,表的SIX鎖在表上放置一個SIX鎖(允許並發IS鎖),在當前所修改頁上放置IX鎖(在已修改行上放置X鎖)。雖然每個資源在一段時間內只能有一個SIX鎖,以防止其它事務對資源進行更新,但是其它事務可以通過獲取表級的IS鎖來讀取層次結構中的底層資源。獨占鎖:只允許進行鎖定操作的程序使用,其他任何對他的操作均不會被接受。執行數據更新命令時,SQLServer會自動使用獨占鎖。當對象上有其他鎖存在時,無法對其加獨占鎖。共享鎖:共享鎖鎖定的資源可以被其他用戶讀取,但其他用戶無法修改它,在執行Select時,SQLServer會對對象加共享鎖。更新鎖:當SQLServer准備更新數據時,它首先對數據對象作更新鎖鎖定,這樣數據將不能被修改,但可以讀取。等到SQLServer確定要進行更新數據操作時,他會自動將更新鎖換為獨占鎖,當對象上有其他鎖存在時,無法對其加更新鎖。2.從程序員的角度看:分為樂觀鎖和悲觀鎖。樂觀鎖:完全依靠資料庫來管理鎖的工作。悲觀鎖:程序員自己管理數據或對象上的鎖處理。MS-SQLSERVER使用鎖在多個同時在資料庫內執行修改的用戶間實現悲觀並發控制三鎖的粒度鎖粒度是被封鎖目標的大小,封鎖粒度小則並發性高,但開銷大,封鎖粒度大則並發性低但開銷小SQLServer支持的鎖粒度可以分為為行、頁、鍵、鍵范圍、索引、表或資料庫獲取鎖資源描述RID行標識符。用於單獨鎖定表中的一行。鍵索引中的行鎖。用於保護可串列事務中的鍵范圍。頁8千位元組(KB)的數據頁或索引頁。擴展盤區相鄰的八個數據頁或索引頁構成的一組。表包括所有數據和索引在內的整個表。DB資料庫。四鎖定時間的長短鎖保持的時間長度為保護所請求級別上的資源所需的時間長度。用於保護讀取操作的共享鎖的保持時間取決於事務隔離級別。採用READCOMMITTED的默認事務隔離級別時,只在讀取頁的期間內控制共享鎖。在掃描中,直到在掃描內的下一頁上獲取鎖時才釋放鎖。如果指定HOLDLOCK提示或者將事務隔離級別設置為REPEATABLEREAD或SERIALIZABLE,則直到事務結束才釋放鎖。根據為游標設置的並發選項,游標可以獲取共享模式的滾動鎖以保護提取。當需要滾動鎖時,直到下一次提取或關閉游標(以先發生者為准)時才釋放滾動鎖。但是,如果指定HOLDLOCK,則直到事務結束才釋放滾動鎖。用於保護更新的排它鎖將直到事務結束才釋放。如果一個連接試圖獲取一個鎖,而該鎖與另一個連接所控制的鎖沖突,則試圖獲取鎖的連接將一直阻塞到:將沖突鎖釋放而且連接獲取了所請求的鎖。連接的超時間隔已到期。默認情況下沒有超時間隔,但是一些應用程序設置超時間隔以防止無限期等待五SQLServer中鎖的自定義1處理死鎖和設置死鎖優先順序死鎖就是多個用戶申請不同封鎖,由於申請者均擁有一部分封鎖權而又等待其他用戶擁有的部分封鎖而引起的無休止的等待可以使用SETDEADLOCK_PRIORITY控制在發生死鎖情況時會話的反應方式。如果兩個進程都鎖定數據,並且直到其它進程釋放自己的鎖時,每個進程才能釋放自己的鎖,即發生死鎖情況。2處理超時和設置鎖超時持續時間。@@LOCK_TIMEOUT返回當前會話的當前鎖超時設置,單位為毫秒SETLOCK_TIMEOUT設置允許應用程序設置語句等待阻塞資源的最長時間。當語句等待的時間大於LOCK_TIMEOUT設置時,系統將自動取消阻塞的語句,並給應用程序返回"已超過了鎖請求超時時段"的1222號錯誤信息示例下例將鎖超時期限設置為1,800毫秒。SETLOCK_TIMEOUT18003)設置事務隔離級別。4)對SELECT、INSERT、UPDATE和DELETE語句使用表級鎖定提示。5)配置索引的鎖定粒度可以使用sp_indexoption系統存儲過程來設置用於索引的鎖定粒度六查看鎖的信息1執行EXECSP_LOCK報告有關鎖的信息2查詢分析器中按Ctrl+2可以看到鎖的信息七使用注意事項如何避免死鎖1使用事務時,盡量縮短事務的邏輯處理過程,及早提交或回滾事務;2設置死鎖超時參數為合理范圍,如:3分鍾-10分種;超過時間,自動放棄本次操作,避免進程懸掛;3優化程序,檢查並避免死鎖現象出現;4.對所有的腳本和SP都要仔細測試,在正是版本之前。5所有的SP都要有錯誤處理(通過@error)6一般不要修改SQLSERVER事務的默認級別。不推薦強行加鎖解決問題如何對行表資料庫加鎖八幾個有關鎖的問題1如何鎖一個表的某一行*FROMtableROWLOCKWHEREid=12鎖定資料庫的一個表SELECT*FROMtableWITH(HOLDLOCK)加鎖語句:sybase:update表setcol1=col1where1=0;MSSQL:selectcol1from表(tablockx)where1=0;oracle:LOCKTABLE表INEXCLUSIVEMODE;加鎖後其它人不可操作,直到加鎖用戶解鎖,用commit或rollback解鎖幾個例子幫助大家加深印象設table1(A,B,C)ABCa1b1c1a2b2c2a3b3c31)排它鎖新建兩個連接在第一個連接中執行以下語句begintranupdatetable1setA='aa'whereB='b2'waitfordelay'00:00:30'--等待30秒committran在第二個連接中執行以下語句begintranselect*fromtable1whereB='b2'committran若同時執行上述兩個語句,則select查詢必須等待update執行完畢才能執行即要等待30秒2)共享鎖在第一個連接中執行以下語句begintranselect*fromtable1holdlock-holdlock人為加鎖whereB='b2'waitfordelay'00:00:30'--等待30秒committran在第二個連接中執行以下語句begintranselectA,Cfromtable1whereB='b2'updatetable1setA='aa'whereB='b2'committran若同時執行上述兩個語句,則第二個連接中的select查詢可以執行而update必須等待第一個事務釋放共享鎖轉為排它鎖後才能執行即要等待30秒3)死鎖增設table2(D,E)DEd1e1d2e2在第一個連接中執行以下語句begintranupdatetable1setA='aa'whereB='b2'waitfordelay'00:00:30'updatetable2setD='d5'whereE='e1'committran在第二個連接中執行以下語句begintranupdatetable2setD='d5'whereE='e1'waitfordelay'00:00:10'updatetable1setA='aa'whereB='b2'committran同時執行,系統會檢測出死鎖,並中止進程補充一點:SqlServer2000支持的表級鎖定提示HOLDLOCK持有共享鎖,直到整個事務完成,應該在被鎖對象不需要時立即釋放,等於SERIALIZABLE事務隔離級別NOLOCK語句執行時不發出共享鎖,允許臟讀,等於READUNCOMMITTED事務隔離級別PAGLOCK在使用一個表鎖的地方用多個頁鎖READPAST讓sqlserver跳過任何鎖定行,執行事務,適用於READUNCOMMITTED事務隔離級別只跳過RID鎖,不跳過頁,區域和表鎖ROWLOCK強制使用行鎖TABLOCKX強制使用獨占表級鎖,這個鎖在事務期間阻止任何其他事務使用這個表UPLOCK強制在讀表時使用更新而不用共享鎖應用程序鎖:應用程序鎖就是客戶端代碼生成的鎖,而不是sqlserver本身生成的鎖處理應用程序鎖的兩個過程sp_getapplock鎖定應用程序資源sp_releaseapplock為應用程序資源解鎖注意:鎖定資料庫的一個表的區別SELECT*FROMtableWITH(HOLDLOCK)其他事務可以讀取表,但不能更新刪除SELECT*FROMtableWITH(TABLOCKX)其他事務不能讀取表,更新和刪除參考資料:
9. 為什麼程序員都喜歡Linux操作系統
著作權歸作者所有。
商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
作者:鍾宇騰
鏈接:
來源:知乎
是的,因為Linux目前為止,也沒有為「普通」用戶真正的優化過
要讓「普通」用戶接受Linux,除了弄一個像Windows或Mac OS一樣的圖形界面,沒有其它辦法
你不可能說服用戶去嘗試使用Terminal,普通用戶理你才怪呢。不使用Terminal,Linux系統的優勢為零,殘廢一樣的圖形界面根本無法獲得普通用戶的青睞,只能說是「可用」。
而作為程序員,學習和探索是一項最基本的能力
Linux的Terminal和開發環境、文件組織結構都可以大大的提高你的開發效率,尤其是Shell的命令、管道等等功能,把命令組合起來可以發揮讓人意想不到的效果,也大大地提高你的工作效率
而要程序員去掌握Linux的用法將是非常容易的,因為程序員本身就有讀懂文檔的能力,相對於普通用戶來說門檻太低了
但是你不能要求普通用戶去接受Linux,至少現在不可能,因為Linux沒有任何一處是為了普通用戶著想的,普通用戶去讀文檔將會讓他們感覺到非常地苦惱和沮喪
Linux本身沒有問題,因為它只是一個內核,普通用戶能不能接受它那是GUI的問題,和配套軟體的問題
同樣是UNIX系,Mac OS X從BSD走出來之後,在這之上構建了一個絢麗的圖形系統,但是其內核依然是BSD,也可以使用各種CLI工具,所以Mac OS X幾乎就是喜歡Linux的程序員們的最終歸宿
而Mac OS X的圖形界面使得普通用戶的使用門檻降低,普通用戶也會喜歡使用它的
所以Mac OS X不就是一個很好的例子么?Linux般的開發體驗+普通用戶喜愛的圖形界面的完美結合。其實Linux陣營目前也在努力,Ubuntu現在就是想讓Linux系統更親近用戶,希望它能成功吧
10. 程序員工作要做什麼
程序員(英文Programmer)是從事程序開發、維護的專業人員。一般我們將程序員分為程序設計人員和程序編碼員,但兩者的界限並不非常清楚,特別是在中國。
作一個真正合格的程序員,應該具有的素質。
1:團隊精神和協作能力
團隊精神和協作能力是作為一個程序員應具備的最基本的素質。軟體工程已經提了將近三十年了,當今的軟體開發已經不是編程了,而是工程。獨行俠可以寫一些程序也能賺錢發財,但是進入研發團隊,從事商業化和產品化的開發任務,就必須具備這種素質。可以毫不誇張的說這種素質是一個程序員乃至一個團隊的安身立命之本。
2:文檔習慣
文檔是一個軟體系統的生命力。一個公司的產品再好、技術含量再高,如果缺乏文檔,知識就沒有繼承,公司還是一個來料加工的軟體作坊。作為代碼程序員,必須將30%的工作時間寫用於技術文檔。沒有文檔的程序員勢必會被淘汰。
3:規范化的代碼編寫習慣
知名軟體公司的代碼的變數命名、注釋格式,甚至嵌套中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助於代碼的移植和糾錯,也有助於不同技術人員之間的協作。 一些所謂的高手甚至叫囂高手寫的代碼一般人看不懂,我只能說他不是一名合格的程序員。
4:需求理解能力
程序員要能正確理解任務單中描述的需求。在這里要明確一點,程序員不僅僅要注意到軟體的功能需求,還應注意軟體的性能需求,要能正確評估自己的模塊對整個項目中的影響及潛在的威脅,如果有著兩到三年項目經驗的熟練程序員對這一點沒有體會的話,只能說明他或許是認真工作過,但是沒有用心工作。
5:模塊化思維能力
作為一個優秀的程序員,他的思想不能在局限當前的工作任務裡面,要想想看自己寫的模塊是否可以脫離當前系統存在,通過簡單的封裝在其他系統中或其他模塊中直接使用。這樣做可以使代碼能重復利用,減少重復的勞動,也能是系統結構越趨合理。模塊化思維能力的提高是一個程序員的技術水平提高的一項重要指標。
6:測試習慣
測試是軟體工程質量保證的重要環節,但是測試不僅僅是測試工程師的工作,而是每個程序員的一種基本職責。程序員要認識測試不僅是正常的程序調試,而要是要進行有目的有針對性的異常調用測試,這一點要結合需求理解能力。
7:學習和總結的能力
程序員是很容易被淘汰的職業,所以要善於學習總結。許多程序員喜歡盲目追求一些編碼的小技巧,這樣的技術人員無論學了多少語言,代碼寫起來多熟練,我們只能說他是一名熟練的代碼民工,他永遠都不會有質的提高。一個善於學習的程序員會經常總結自己的技術水平,對自己的技術層面要有良好的定位,這樣才能有目的地提高自己。這樣才能逐步提高,從程序員升級為軟體設計師、系統分析員。
作為高級程序員,乃至於設計師而言,除了應該具備上述全部素質之外,還需要具備以下素質:
1、 需求分析能力
2、 整體框架能力
3、 流程處理能力
4、 模塊分解能力
5、 整體項目評估能力
6、 團隊組織管理能力
一般招工時需要提供基礎程序員證書,要參加考試的:
[編輯本段]考試說明
1、 考試要求:
(1) 熟練掌握基本演算法和數據結構,用C語言編製程序;
(2) 掌握數據結構、程序變速器和操作系統的基礎知識;
(3) 了解軟體工程、資料庫、多媒體和網路的基礎知識;
(4) 掌握數制、機內代碼及其算術運算和邏輯運算的基礎知識;
(5) 了解計算機的體系結構和主要部件的基礎知識。
2、 通過本級水平考試的合格人員能按照軟體設計說明書編製程序,具有相當於助理工程師
的實際工作能力和業務水平。
3、 本級水平考試范圍包括兩個模塊:模塊1——程序編制能力(考試時間為150分鍾);模
塊2——基礎知識(程序員級)考試時間為120分鍾)。題型為:單項選擇題十多項選擇題。