實現一個棧,使其push,pop,min(取得棧中的最小元素)均為O(1)
我的解













































posted @ 2007-07-18 20:57 Job Hu 閱讀(902) | 評論 (0) | 編輯 收藏
隨筆 - 8, 文章 - 0, 評論 - 6, 引用 - 0
|
實現一個棧,使其push,pop,min(取得棧中的最小元素)均為O(1)
實現一個棧,使其push,pop,min(取得棧中的最小元素)均為O(1)
我的解 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() posted @ 2007-07-18 20:57 Job Hu 閱讀(902) | 評論 (0) | 編輯 收藏 二叉排序樹變為雙向鏈表把一個二叉排序樹(也許不叫這個)變為遞增的雙向鏈表,不能夠生成額外的結點. 3=4=5=6=7=8=9 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() posted @ 2007-07-18 20:37 Job Hu 閱讀(648) | 評論 (0) | 編輯 收藏 Byte in Java![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() b == c 127 == 0x7F b == c 128 == 0x80 -128 == c 128 == (c&0xFF) posted @ 2007-07-17 23:22 Job Hu 閱讀(293) | 評論 (0) | 編輯 收藏 Java Language Keywords
Here's a list of keywords in the Java programming language.
You cannot
use any of the following as identifiers in your programs. The keywords
const and goto are reserved, even though they are not
currently used.
true , false , and null
might seem like keywords, but they are actually literals; you cannot
use them as identifiers in your programs.
posted @ 2007-07-09 22:38 Job Hu 閱讀(201) | 評論 (1) | 編輯 收藏 Tomcat筆記(三)
來看看ContainerBase的start方法:
1
![]() ![]() ![]() 2 ![]() 3 ![]() 4 ![]() ![]() ![]() 5 ![]() 6 ![]() 7 ![]() 8 ![]() 9 ![]() 10 ![]() 11 ![]() 12 ![]() 13 ![]() 14 ![]() 15 ![]() 16 ![]() 17 ![]() 18 ![]() 19 ![]() 20 ![]() 21 ![]() 22 ![]() 23 ![]() 24 ![]() 25 ![]() 26 ![]() 27 ![]() 28 ![]() 29 ![]() 30 ![]() 31 ![]() 32 ![]() 33 ![]() 34 ![]() 35 ![]() 36 ![]() 37 ![]() ![]() ![]() 38 ![]() 39 ![]() 40 ![]() 41 ![]() 42 ![]() 43 ![]() 44 ![]() 45 ![]() 46 ![]() 47 ![]() 48 ![]() 49 ![]() 50 ![]() 51 ![]() 52 ![]() 53 ![]() 54 ![]() 55 ![]() 56 ![]() 所有和cluster、realm相關都放在最后來研究了,不管怎么樣先把tomcat如何處理request的整個過程串起來對現在的我來說是最重要的。另外還有Tomcat中的很多部件都用到了JMX API,即SNMP的Java實現來進行性能檢測和管理,這個也會放在最后研究。 ContainerBase就看這么多了,下面來看看StandardEngine這個類。除去和cluster、realm、JMX相關的方法后,StanderdEngine剩下的方法就很很少了。 StandardEngine有一個Service類型的成員。Java doc中指出Service就是由很多共享同一個Container的Connector組成。一個Service對應于一個Container,來自這個Service的任何一個Connector的request都會由其對應的Container進行處理。看到現在的感覺就是Connector對Container提供request對象,并接受Container返回的response對象。在Tomcat中有很多類別都被用來體現現request或者response,例如org.apache.catalina.connector .Request就是Coyote request的一個wrapper類,Coyote這個framework幫助封裝了底層的網絡復雜性,向上提供一個統一的接口。我想tomcat既能夠成為一個standalone的http、jsp/Servlet服務器,也能夠同apache http server集成,很可能就是依賴于Coyote提供的統一接口。 在構造函數中會將StandardEngine這個Pipeline的最后一個Valve,即Basic設置為StandardEngineValve。來看看StandardEnginValue的invoke方法 1
![]() 2 ![]() ![]() ![]() 3 ![]() 4 ![]() 5 ![]() 6 ![]() ![]() ![]() 7 ![]() 8 ![]() 9 ![]() 10 ![]() 11 ![]() 12 ![]() 13 ![]() 14 ![]() 15 ![]() 16 ![]() 17 ![]() 18 ![]() 可以看出在處理到StandardEngine這個Pipeline的最后一個Valve時,會根據當前request所指定的Host,將當前的request和response傳遞給該Host這個Pipeline的第一個Valve進行處理。 我想Tomcat中的Engine、Host、Context、Wrapper處理request生成response的過程大概是這樣的: Engine在收到request后在其Pipeline中的每一個Valve對request進行處理,也可能會生成response的某些部分,在最后一個Valve中將request和response傳給下一級Container即Host的第一個Valve。Host重復同樣過程,繼續傳遞給Context,Context再傳遞給Wrapper。由于Wrapper代表的是Servlet對象,因此在Wrapper處所有的處理都結束了,response對象生成完畢。當然了,如果在某一級中無法找到request要求的下一級對象,則整個處理過程也會立即結束。posted @ 2007-05-30 22:58 Job Hu 閱讀(360) | 評論 (1) | 編輯 收藏 Tomcat筆記(二)ContainerBase對Pipeline接口的實現完全依賴于其內部的一個Pipeline類型的成員pipeline(實現類為StandardPipeline)。 StandardPipeline除實現Pipeline接口外,也實現了Lifecycle接口。這個類的start和stop方法,首先檢查是否已經被start或stop,如果是則會拋出一個LifecycleException的異常,否則便fire和生命期改變的相關事件,并調用其內部valve對象(如果該valve對象也實現了Lifecycle接口)的start和stop方法。addValve方法用來向StandardPipeline中加入Valve對象,新加入的Value對象被放在一個叫做Basic的特殊Valve(就是一個Pipeline的最后一個Valve)的前面,如果在添加Valve的時候該StandardPipeline已經處于start狀態,則會進行一些注冊(調用apache commons庫的一個類,完全沒有看懂這個地方是什么作用>_<) posted @ 2007-05-28 07:39 Job Hu 閱讀(307) | 評論 (0) | 編輯 收藏 |
|||||||||||||||||||||||||||||||||||||||||||||||||||