java學(xué)習(xí)筆記_第1頁
java學(xué)習(xí)筆記_第2頁
java學(xué)習(xí)筆記_第3頁
java學(xué)習(xí)筆記_第4頁
java學(xué)習(xí)筆記_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、ConcurrentHashMap 使用 segment 來分段和管理鎖, segment 繼承自 ReentrantLock ,因此 ConcurrentHashMap 使用 ReentrantLock 來保證線程安全。hashMap 在單線程中使用大大提高效率,在多線程的情況下使用 hashTable 來確保安全。 hashTable 中使用 synchronized 關(guān)鍵字來實現(xiàn)安全機(jī)制,但是synchronized 是對整張 hash表進(jìn)行鎖定即讓線程獨(dú)享整張 hash 表, 在安全同時造成了浪費(fèi)。 concurrentHashMap 采用分 段加鎖的機(jī)制來確保安全D: StringB

2、ufer是線程安全的(同步),StringBuilder是不保證線程,(每次操作一次就是安全的)E: Properties 類是 Hashtable 的一個子類, hashTable 是線程安全的,所以 properotes 是 線程安全的Arrays.asList 方法返回的 這個 List 的實現(xiàn)類是 java.util.Arrays.ArrayList這個類 (而不是 java.util.ArrayList) 。JDBC提供了 Statement、PreparedStatement 和 CallableStatement三種方式來執(zhí)行查詢語句,其中 Statement 用于通用查詢, P

3、reparedStatement 用于執(zhí)行參數(shù)化查詢 ,而 CallableStatement 則是用于存儲過程依賴注入和控制反轉(zhuǎn)是同一概念:依賴注入和控制反轉(zhuǎn)是對同一件事情的不同描述,從某個方面講,就是它們描述的 角度不同。依賴注入是從應(yīng)用程序的角度在描述,可以把依賴注入描述完整點:應(yīng)用程序依 賴容器創(chuàng)建并注入它所需要的外部資源;而控制反轉(zhuǎn)是從容器的角度在描述,描述完整點: 容器控制應(yīng)用程序,由容器反向的向應(yīng)用程序注入應(yīng)用程序所需要的外部資源。依賴注入的理念之一就是盡量減少各組件之間的相互依賴和制約。方法的重寫( override )兩同兩小一大原則: 方法名相同,參數(shù)類型相同 子類返回類型

4、小于等于父類方法返回類型, 子類拋出異常小于等于父類方法拋出異常, 子類訪問權(quán)限大于等于父類方法訪問權(quán)限。數(shù)組本身就是一個對象java 中內(nèi)存區(qū)域分為 4 類: 棧內(nèi)存空間,存放引用的堆內(nèi)存空間的地址堆內(nèi)存空間,存放 new出來的對象全局?jǐn)?shù)據(jù)區(qū),保存 static 類型屬性和全局變量全局代碼區(qū),保存所有方法的定義Ant和Maven都是基于Java的構(gòu)建(build)工具。理論上來說,有些類似于( Unix ) C中的 make,但沒有make的缺陷。Ant是軟件構(gòu)建工具,Maven的定位是軟件項目管理和理解工具。 Ant 特點沒有一個約定的目錄結(jié)構(gòu)ant 做什么,什么時候做,然后編譯,打包生命

5、周期,必須定義目標(biāo)及其實現(xiàn)的任務(wù)序列Maven特點知道你的代碼在哪里, 放到哪里去例如執(zhí)行 mvn install就可以自動執(zhí)行編譯,測試,打包等構(gòu)建過程pom.xml, 然后把源碼放到默認(rèn)的目錄,Maven幫你處理其他事情idea maven spring+springmvc+mybatis出現(xiàn)的錯誤1、出現(xiàn)空指針異常可能是在獲取字節(jié)流時 類沒有用 getLoader 方法獲取字節(jié)流 xml 文件表的字段名和類中的屬性名沒做對應(yīng)2spring 注解只有在啟動服務(wù)器時才能使用3 idea 建的 mavenweb.xml 缺少頭文件聲明 無法使用 EL 表達(dá)式 需加上4 目前 404 問題還沒解

6、決5 mybatis 出現(xiàn) null 的問題6 數(shù)據(jù)庫要加異常處理 弄不好按鈕沒反應(yīng)/* 顯示付款賬號*/var paramJson1='cstno':'PB10001017','accno':'62143928000382821','currentBusinessCode':'10200100',windowId:currentMVC.windowId;$.ajax(url:'findkidid.do',type:'post',data:paramJson1,dat

7、aType:'json',async:false,processResponse:function(data)var alist=data.kidaccList;var opString='<option value=""> 請選擇 </option>'for(var i=0;i<alist.length;i+)var recno=alisti.kidaccno;opString+='<option value="'+recno+'">'+recno

8、+'</option>'$('#payAccount',currentElement).html(opString););/ 創(chuàng)建存儲過程drop procedure if EXISTS pro_teacher;create procedure pro_teacher(in id int,out message varchar(50)BEGINset message=CONCAT("shiu",id);END<!- 使用存儲過程 和一般方法一樣調(diào)用 -><select id="callPr"

9、parameterType="com.wp.entity.Teachers" statementType="CALLABLE">callpro_teacher(#tId,mode=IN ,jdbcType=NUMERIC,#message,mode=OUT ,jdbcType=VARCHAR )</select>、這兩個方法來自不同的類分別是, sleep 來自 Thread 類,和 wait 來自 Object 類。 sleep 是 Thread 的靜態(tài)類方法, 誰調(diào)用的誰去睡覺, 即使在 a 線程里調(diào)用了 b 的 sleep 方法,

10、 實際上還是 a 去睡覺,要讓 b 線程睡覺要在 b 的代碼中調(diào)用 sleep 。2、最主要是 sleep 方法沒有釋放鎖, 而 wait 方法釋放了鎖, 使得敏感詞線程可以使用同步 控制塊或者方法。sleep 不出讓系統(tǒng)資源; wait 是進(jìn)入線程等待池等待, 出讓系統(tǒng)資源敏感詞線程可以占用CPU。一般 wait 不會加時間限制,因為如果 wait 線程的運(yùn)行資源不夠,再出來也沒用,要等待敏 感詞線程調(diào)用n otify/notifyAII喚醒等待池中的所有線程,才會進(jìn)入就緒隊列等待OS分配系統(tǒng)資源。 sleep(milliseconds) 可以用時間指定使它自動喚醒過來, 如果時間不到只能調(diào)

11、用 interrupt() 強(qiáng)行打斷。Thread.Sleep(O)的作用是“觸發(fā)操作系統(tǒng)立刻重新進(jìn)行一次CPU競爭”。3、使用范圍: wait , notify 和 notifyAII 只能在同步控制方法或者同步控制塊里面使用, 而 sleep 可以在任何地方使用synchronized(x)x.notify()/ 或者 wait()4、sleep 必須捕獲異常,而 wait , notify 和 notifyAll 不需要捕獲異常int 占 4 個字節(jié), 32 位byte 占 1 個字節(jié), 8 位 所以強(qiáng)轉(zhuǎn)時會截斷。前 24 位在內(nèi)存中表示形式 ( 注意 java 中是以補(bǔ)碼表示一個數(shù),

12、所以表示形式是補(bǔ)碼, 不是原碼! ): int a = 300000000 00000000 00000000 00000011 (強(qiáng)轉(zhuǎn) byte 時前面 24 個 0被截斷)byte b = 3 00000011int a = -3 11111111 11111111 11111111 11111101 (強(qiáng)轉(zhuǎn) byte 時前面 24 個 1 被截斷)byte b = -3 111111011、Java 中用補(bǔ)碼形式表示2 、第一位正負(fù)位, 1 表示負(fù), 0 表示正。 3、原碼:一個數(shù)的二進(jìn)制表示。3 的原碼 00000011 -3 的 原碼 10000011 4、反碼:負(fù)數(shù)原碼按位取反(符

13、號位不變) 。正數(shù)原碼本身。3 的反碼 00000011 -3 的反碼 111111005、補(bǔ)碼:正數(shù)是原碼本身。負(fù)數(shù)反碼加1。3 的補(bǔ)碼是 00000011 -3 的補(bǔ)碼是 11111101已知負(fù)數(shù)的補(bǔ)碼,求負(fù)數(shù):補(bǔ)碼 -1=反碼,反碼按位取反 =該負(fù)數(shù)絕對值已知負(fù)數(shù),求負(fù)數(shù)的補(bǔ)碼:1、負(fù)數(shù)原碼除了符號位,按位取反(不含符號位),加 1。2、負(fù)數(shù)絕對值的補(bǔ)碼(也就是原碼) ,按位取反(含符號位) ,加 1 java int 128 轉(zhuǎn)為 byte ,值:128 為正數(shù),補(bǔ)碼為 10000000(前面 24 個 0 省略),變成 byte ,只剩下 10000000(byte 為 1 個字節(jié))

14、,因為開頭是 1,所以為負(fù)數(shù)。即 1 個負(fù)數(shù)的補(bǔ)碼是 10000000。反碼是 01111111, 原碼是 1000000。是 128. 因為是負(fù)數(shù),所以是 -128 。面向切面編程,通過預(yù)編譯方式和運(yùn)行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)1. final2. final3. final4. final修飾變量,則等同于常量 修飾方法中的參數(shù),稱為最終參數(shù)。修飾類,則類不能被繼承 修飾方法,則方法不能被重寫。記住一點,不管有不有異常拋出, finally 都會在 return 返回前執(zhí)行。ServletCo ntext對象:servlet 容器在啟動時會加載web應(yīng)用,并為每個 web應(yīng)

15、用創(chuàng)建唯一的servlet con text對象,可以把ServletCo ntext看成是一個Web應(yīng)用的服務(wù)器端組件的共享內(nèi)存,在 ServletContext 中可以存放共享數(shù)據(jù)。 ServletContext 對象是真正的一個全局 對象,凡是 web容器中的Servlet都可以訪問。整個web應(yīng)用只有唯一的一個 ServletContext對象servletConfig 對象:用于封裝 servlet 的配置信息。從一個 servlet 被實例化后,對任何 客戶端在任何時候訪問有效,但僅對 servlet 自身有效,一個 servlet 的 ServletConfig 對 象不能被另一

16、個 servlet 訪問。String 值不可變 StringBuffer 值可變構(gòu)造方法沒有返回類型 記??!maven反向域名Jdk 是 java development kit ,是 java 的開發(fā)工具包,里面包含了各種類庫和工具Jre 是 java runtime environment, 是 java 程序的運(yùn)行環(huán)境getParameter() 是獲取POST/GE傳遞的參數(shù)值;getInitParameter 獲取 Tomcat 的 server.xml 中設(shè)置 Context 的初始化參數(shù)getAttribute() 是獲取對象容器中的數(shù)據(jù)值; getRequestDispatc

17、her 是請求轉(zhuǎn)發(fā)。因為 i 是 static 的,是類屬性,所以不管有多少對象,都共用的一個變量。這里 getNext() 方法被調(diào)用了三次,所以進(jìn)行了三次 i+ 操作。就是HTTP協(xié)議里面,四個表示操作方式的動詞: GET POST PUT DELETE它們分別對應(yīng)四 種基本操作:GET用來獲取資源,POST用來新建資源(也可以用于更新資源) ,PUT用來更新 資源,DELETE用來刪除資源。父類沒有無參的構(gòu)造函數(shù),所以子類需要在自己的構(gòu)造函數(shù)中顯式調(diào)用父類的構(gòu)造函數(shù),1. 我們都知道 jvm 運(yùn)行時刻內(nèi)存的分配。其中有一個內(nèi)存區(qū)域是jvm 虛擬機(jī)棧,每一個線程運(yùn)行時都有一個線程棧,線程棧

18、保存了線程運(yùn)行時候變量值信息。當(dāng)線程訪問某一個對象時 候值的時候,首先通過對象的引用找到對應(yīng)在堆內(nèi)存的變量的值,然后把堆內(nèi)存變量的具體值 load 到線程本地內(nèi)存中, 建立一個變量副本, 之后線程就不再和對象在堆內(nèi)存變量值有任 何關(guān)系, 而是直接修改副本變量的值, 在修改完之后的某一個時刻 (線程退出之前) ,自動把 線程變量副本的值回寫到對象在堆中變量。這樣在堆中的對象的值就產(chǎn)生變化了。2. 出于運(yùn)行速率的考慮, java 編譯器會把經(jīng)常經(jīng)常訪問的變量放到緩存 (嚴(yán)格講應(yīng)該是工作 內(nèi)存) 中,讀取變量則從緩存中讀。 但是在多線程編程中 , 內(nèi)存中的值和緩存中的值可能會出 現(xiàn)不一致。 vola

19、tile 用于限定變量只能從內(nèi)存中讀取, 保證對所有線程而言, 值都是一致的。 但是 volatile 不能保證原子性,也就不能保證線程安全。五個基本原則:單一職責(zé)原則( Single-Resposibility Principle ):一個類,最好只做一件事,只有一個引 起它的變化。單一職責(zé)原則可以看做是低耦合、高內(nèi)聚在面向?qū)ο笤瓌t上的引申,將職責(zé)定 義為引起變化的原因,以提高內(nèi)聚性來減少引起變化的原因。開放封閉原則( Open-Closed principle ):軟件實體應(yīng)該是可擴(kuò)展的,而不可修改的。也就 是,對擴(kuò)展開放,對修改封閉的。Liskov 替換原則( Liskov-Substi

20、tuion Principle):子類必須能夠替換其基類。這一思想體現(xiàn)為對繼承機(jī)制的約束規(guī)范,只有子類能夠替換基類時,才能保證系統(tǒng)在運(yùn)行期內(nèi)識別子 類,這是保證繼承復(fù)用的基礎(chǔ)。依賴倒置原則( Dependecy-Inversion Principle):依賴于抽象。具體而言就是高層模塊不依賴于底層模塊,二者都同依賴于抽象;抽象不依賴于具體,具體依賴于抽象。接口隔離原則( Interface-Segregation Principle):使用多個小的專門的接口,而不要使用一個大的總接口1. 靜態(tài)代碼塊 2. 非靜態(tài)代碼塊 3. 構(gòu)造代碼塊 4. 構(gòu)造方法的執(zhí)行順序是 1>2>3; 明

21、白他們是干 嘛的就理解了。java 中 true ,false , null 在 java 中不是關(guān)鍵字,也不是保留字,它們只是顯式常量值, 但是你在程序中不能使用它們作為標(biāo)識符。其中 const 和 goto 是 java 的保留字。 java 中所有的關(guān)鍵字都是小寫的,還有要注意 true,false,null,friendly , sizeof 不是 java 的關(guān)鍵字 , 但是你不能把它們作為 java 標(biāo)識符用。floor: 求小于參數(shù)的最大整數(shù)。返回 double 類型 n. 地板,地面例如: Math.floor(-4.2) = -5.0ceil: 求大于參數(shù)的最小整數(shù)。返回 d

22、ouble 類型 vt. 裝天花板;例如: Math.ceil(5.6) = 6.0round: 對小數(shù)進(jìn)行四舍五入后的結(jié)果。返回 int 類型 例如: Math.round(-4.6) = -5abs() 絕對值sqrt()p 平方根pow(2,n) 各種次方String- char toCharArray();char->String valueof();在 Java 中,環(huán)境變量可在編譯 source code 時指定 在編譯程序時,所能指定的環(huán)境變量包括 class path javac 一次可同時編譯數(shù)個 Java 源文件 javac.exe 能指定編譯結(jié)果要置于哪個目錄( d

23、irectory )java,exe 是 java 虛擬機(jī) javadoc.exe 用來制作 java 文檔 jdb.exe 是 java 的調(diào)試器 javaprof,exe 是剖析工具Collection 是單列集合的頂層接口 ,Map 是雙列集合的頂層接口Collections 是一個集合的工具類,提供了排序、查找等操作集合的一些常用方法 優(yōu)化 Hibernate 所鼓勵的 7 大措施:1. 盡量使用 many-to-one ,避免使用單項 one-to-many2. 靈活使用單向 one-to-many3. 不用一對一,使用多對一代替一對一4. 配置對象緩存,不使用集合緩存5. 一對多使

24、用 Bag 多對一使用 Set避免查處所有對象6. 繼承使用顯示多態(tài) HQL:from object polymorphism="exlicit"7. 消除大表,使用二級緩存java 的賦值運(yùn)算符有返回值 賦值什么就返回什么數(shù)組是一種對象1. 什么是正則表達(dá)式的貪婪與非貪婪匹配 如: String str="abcaxc"Patter p="ab*c"貪婪匹配 : 正則表達(dá)式一般趨向于最大長度匹配, 也就是所謂的貪婪匹配。 如上面使用模式 p 匹配字符串 str ,結(jié)果就是匹配到: abcaxc(ab*c) 。非貪婪匹配:就是匹配到結(jié)

25、果就好,就少的匹配字符。如上面使用模式 p 匹配字符串 str , 結(jié)果就是匹配到: abc(ab*c) 。2. 編程中如何區(qū)分兩種模式 默認(rèn)是貪婪模式;在量詞后面直接加上一個問號?就是非貪婪模式。量詞:m,n : m至U n 個* :任意多個+:一個至多個?: 0 或一個 以上來自博主的博客,然后這道題目 . 表示除 n 之外的任意字符* 表示匹配 0- 無窮 +表示匹配 1- 無窮(?=Expression) 順序環(huán)視, (?=() 就是匹配正括號 懶惰模式正則: src=".*? (?=() ) " 結(jié)果:北京市 因為匹配至第一個 " 就結(jié)束了一次匹配。不會

26、繼續(xù)向后匹配。因為他懶惰嘛。GenericServlet 類:抽象類,定義一個通用的、獨(dú)立于底層協(xié)議的 Servlet 。 大多數(shù) Servlet 通過從 GenericServlet 或 HttpServlet 類進(jìn)行擴(kuò)展來實現(xiàn)ServletConfig接口定義了在 Servlet初始化的過程中由 Servlet容器傳遞給Servlet得配'置信息對象HttpServletRequest 接口擴(kuò)展 ServletRequest 接口,為 HTTP Servlet 提供 HTTP青求信息<head>icon"href="/static/image/bus

27、huohua.ico"<linkrel="shortcuttype="image/x-icon"/><title>load</title></head>DTO 指的是我們 java 中與數(shù)據(jù)庫對應(yīng)的實體層MySQL實現(xiàn)了四種通信協(xié)議TCP/IP協(xié)議,通常我們通過來連接MySQL各種主要編程語言都是根據(jù)這個協(xié)議實現(xiàn)了連接模塊Un ix Socket協(xié)議,這個通常我們登入MySQU服務(wù)器中使用這個協(xié)議,因為要使用這個協(xié)議連接MySQL需要一個物理文件,文件的存放位置在配置文件中有定義,值得一提的是,這是 所有協(xié)

28、議中最高效的一個。Share Memory協(xié)議,這個協(xié)議一般人不知道,肯定也沒用過,因為這個只有windows可以使用,使用這個協(xié)議需要在配置文件中在啟動的時候使用-shared-memory參數(shù),注意的是,使用此協(xié)議,一個 host 上只能有一個 server ,所以這個東西一般沒啥用的,除非你懷疑其 他協(xié)議不能正常工作,實際上微軟的 SQL Sever 也支持這個協(xié)議Named Pipes 協(xié)議,這個協(xié)議也是只有 windows 才可以用,同 shared memory 一樣,使用此 協(xié)議, 一個 host 上依然只能有一個 server ,即使是使用不同的端口也不行, NamedPipe

29、s 是 為局域網(wǎng)而開發(fā)的協(xié)議。內(nèi)存的一部分被某個進(jìn)程用來向另一個進(jìn)程傳遞信息,因此一個進(jìn) 程的輸出就是另一個進(jìn)程的輸入。第二個進(jìn)程可以是本地的(與第一個進(jìn)程位于同一臺計算 機(jī)上),也可以是遠(yuǎn)程的(位于聯(lián)網(wǎng)的計算機(jī)上) 。正因為如此,假如你的環(huán)境中沒有或者禁 用 TCP/IP 環(huán)境, 而且是 windows 服務(wù)器, 那么好歹你的數(shù)據(jù)庫還能工作。 使用這個協(xié)議需要 在啟動的時候添加-en able-n amed-pipe 選項表示聲明一個局部變量, 表示聲明一個全局變量(比如已經(jīng)定義好的系統(tǒng)變量) 申明局部變量語法: declare 變量名 數(shù)據(jù)類型;例如: declare num int ;

30、賦值:有兩種方法式( nun為變量名,value為值)set num=value; 或 select num=value;declare 表示聲明, 表示賦值1、自旋鎖 , 自旋, jvm 默認(rèn)是 10 次吧,有 jvm 自己控制。 for 去爭取鎖2、阻塞鎖 被阻塞的線程,不會爭奪鎖。3、可重入鎖 多次進(jìn)入改鎖的域4、讀寫鎖5、互斥鎖 鎖本身就是互斥的6、悲觀鎖 不相信,這里會是安全的,必須全部上鎖7、樂觀鎖 相信,這里是安全的。8、公平鎖 有優(yōu)先級的鎖9、非公平鎖 無優(yōu)先級的鎖10、偏向鎖 無競爭不鎖,有競爭掛起,轉(zhuǎn)為輕量鎖11、對象鎖 鎖住對象12、線程鎖13、鎖粗化 多鎖變成一個,自己

31、處理14、輕量級鎖 CAS 實現(xiàn)15、鎖消除 偏向鎖就是鎖消除的一種16、鎖膨脹 jvm 實現(xiàn),鎖粗化17、信號量 使用阻塞鎖 實現(xiàn)的一種策略18、排它鎖:X鎖,若事務(wù)T對數(shù)據(jù)對象A加上X鎖,則只允許T讀取和修改A,其他任何事 務(wù)都不能再對 A加任何類型的鎖,直到 T釋放A上的鎖。這就保證了其他事務(wù)在T釋放A上的鎖之前不能再讀取和修改 A。servletConfig 對象:用于封裝 servlet 的配置信息。從一個 servlet 被實例化后,對任何 客戶端在任何時候訪問有效,但僅對 servlet 自身有效,一個 servlet 的 ServletConfig 對 象不能被另一個 serv

32、let 訪問。Struts2 是類級別的, Spring 是方法級別的singleton 單例模式,簡單說就是只有自己,為自己設(shè)計。降低了重復(fù)使用。降低資源使用 率flyweight 設(shè)計中的享元模式,避免大量擁有相同內(nèi)容的小類的開銷,因為他讓大家共享一 個類。JSP內(nèi)置對象和屬性列舉如下:1. request 對象客戶端的請求信息被封裝在 request 對象中, 通過它才能了解到客戶的需求, 然后做出 響應(yīng)。它是 HttpServletRequest 類的實例。2. response 對象response 對象包含了響應(yīng)客戶請求的有關(guān)信息,但在 JSP 中很少直接用到它。它是 HttpSe

33、rvletResponse 類的實例。3. session 對象session 對 象 指 的 是 客 戶 端 與 服 務(wù) 器 的 一 次 會 話 , 從 客 戶 連 到 服 務(wù) 器 的 一 個 WebApplication 開始,直到客戶端與服務(wù)器斷開連接為止。它是 HttpSession 類的實例 . 4.out 對象out 對象是 JspWriter 類的實例 , 是向客戶端輸出內(nèi)容常用的對象5.page 對象page對象就是指向當(dāng)前 JSP頁面本身,有點象類中的this指針,它是java.lang.Object類的實例6. application對象application 對象實現(xiàn)了用

34、戶間數(shù)據(jù)的共享, 可存放全局變量。 它開始于服務(wù)器的啟動, 直到服務(wù)器的關(guān)閉,在此期間,此對象將一直存在;這樣在用戶的前后連接或不同用戶之間 的連接中,可以對此對象的同一屬性進(jìn)行操作;在任何地方對此對象屬性的操作,都將影響 到其他用戶對此的訪問。服務(wù)器的啟動和關(guān)閉決定了application 對象的生命。它是ServletContext 類的實例。7. exception對象exception 對象是一個例外對象, 當(dāng)一個頁面在運(yùn)行過程中發(fā)生了例外, 就產(chǎn)生這個對象。 如果一個 JSP 頁面要應(yīng)用此對象,就必須把 isErrorPage 設(shè)為 true ,否則無法編譯。他實際 上是 java.

35、lang.Throwable 的對象8. pageContext 對象pageContext 對象提供了對 JSP 頁面內(nèi)所有的對象及名字空間的訪問,也就是說他可以訪問 到本頁所在的SESSION也可以取本頁面所在的application的某一屬性值,他相當(dāng)于頁面中所有功能的集大成者,它的本 類名也叫 pageContext 。9. config 對象config對象是在一個 Servlet初始化時,JSP引擎向它傳遞信息用的,此信息包括Servlet初始化時所要用到的參數(shù)(通過屬性名和屬性值構(gòu)成)以及服務(wù)器的有關(guān)信息(通過傳遞一 個 ServletContext 對象)Semaphore,

36、它負(fù)責(zé)協(xié)調(diào)各個線程 , 以保證它們能夠正確、合理的使用公共資源。CyclicBarrier 的線程同步障礙輔助工具類 (它允許一組線程互相等待, 直到到達(dá)某個公共屏 障點 ) 。同步器是一 些使線程能夠等待另一個線程的對象,允許它們協(xié)調(diào)動作。最常用的同步器是CountDownLatch 禾口 Semaphore,不常用的是 Barrier禾口 Exchanger當(dāng)一個變量被定義為 volatile 之后,就可以保證此變量對所有線程的可見性, 即當(dāng)一個線程 修改了此變量的值的時候,變量新的值對于其他線程來說是可以立即得知的??梢岳斫獬桑?對 volatile 變量所有的寫操作都能立刻被其他線程得

37、知。但是這并不代表基于volatile 變量的運(yùn)算在并發(fā)下是安全的, 因為 volatile 只能保證內(nèi)存可見性, 卻沒有保證對變量操作的 原子性。比如下面的代碼:object 默認(rèn)的方法getClass(), hashCode(), equals(), clone(), toString(), notify(), notifyAll(), wait(), finalize()為表增加一個字段、或修改一個字段的類型或長度、或刪除一個字段(1)增加字段:altertablebd_invbasdocdefault 表示默認(rèn)值為 0(2)修改字段:altertablebd_invbasdoc(3)刪

38、除字段:altertablebd_invbasdocadd test1 varchar2(100) default 0; -modify test1 varchar2(200);drop column test1Java 默認(rèn)使用 Unioncode 編碼,即不論什么語言都是一個字符占兩個字節(jié)Java的class文件編碼為 UTF-8,而虛擬機(jī)JVM編碼為UTF-16UTF-8編碼下,一個中文占 3個字節(jié),一個英文占1個字節(jié)Java 中的 char 默認(rèn)采用 Unicode 編碼,所以 Java 中 char 占 2 個字節(jié) 1(byte) 字節(jié) =8(bit) 位super.getClass

39、() 得到的依然是 runtime 當(dāng)前類, 若要得到真正的父類, 需要用 super.getClass().getSuperclass()雖然這里寫的是 super ,但其實用 this 也一樣String str = "ggg" char bm;bm = str.toCharArray(); str = String.valueOf(bm);yield ()暫時交出 cpu 控制權(quán),從 running 狀態(tài)轉(zhuǎn)為 runnalbe 狀態(tài),但是仍有 可能被 調(diào)度, sleep ()線程指定休眠一段時間, wait ()在其他線程調(diào)用此對 象的 notify ()或 noti

40、fyAll ()方法時才能繼續(xù)執(zhí)行 線程中 sleep() 方法和 yeild() 方法的主要區(qū)別 :1. sleep() 方法會給其他線程運(yùn)行的機(jī)會 ,而不管其他線程的優(yōu)先級 , 因此會給較 低優(yōu)先級的 線程運(yùn)行的機(jī)會 ;yeild() 方法只會給優(yōu)先 級相同的或者比自己高的線程運(yùn)行的機(jī)會 .2. sleep() 方法聲明拋出 InterruptionException 異常 , 而 yeild() 方法沒有聲明 拋出任何 異常.3. sleep() 方法比 yeild() 方法具有更高的可移植性 .4. sleep() 方法使線程進(jìn)入阻塞狀態(tài) , 而 yeild() 方法使線程進(jìn)入就緒狀態(tài)

41、 . 當(dāng)前運(yùn)行的線程 可以調(diào)用另一個線程的 join() 方法,當(dāng)前運(yùn)行的線程將轉(zhuǎn)到阻 塞狀態(tài) ,直到另一個線程運(yùn)行 結(jié)束 , 它才會恢復(fù)運(yùn)行 . join() 有兩種形式 :public void join() 和 public void join(long timeout) 可 以設(shè)置阻塞的時間ThreadLocal 存放的值是線程封閉,線程間互斥的,主要用于線程內(nèi)共享一些數(shù)據(jù),避免通 過參數(shù)來傳遞 線程的角度看,每個線程都保持一個對其線程局部變量副本的隱式引用,只要線程是活動的 并且 ThreadLocal 實例是可訪問的; 在線程消失之后, 其線程局部實例的所有副本都會被垃 圾回收在T

42、hread類中有一個Map用于存儲每一個線程的變量的副本。 對于多線程資源共享的問題,同步機(jī)制采用了“以時間換空間”的方式,而ThreadLocal 采用了“以空間換時間”的方式對于廣義表的head和tail的理解了,head是第一個元素,tail是除了第一個元素的余下的。 如果只有一個那么尾部是空D:StringBuffer是線程安全的 (同步), StringBuilder 是不保證線程, (每次操作一次就是安全的)E:Properties 類是 Hashtable 的一個子類, hashTable 是線程安全的,所以 properotes 是 線程安全的二叉平衡查找樹: 左子樹中所有節(jié)點

43、的值小于根的值,右子樹中的所有節(jié)點的值大于根的值 左右子樹的高度之差的絕對值為 0 或 1HashMap的工作原理HashMap都知道哪里要用 HashMap知道Hashtable和HashMap之間的區(qū)別,那么為何這道 面試題如此特殊呢?是因為這道題考察的深度很深。這題經(jīng)常出現(xiàn)在高級或中高級面試中。投資銀行更喜歡問這個問題,甚至?xí)竽銓崿F(xiàn)HashMap來考察你的編程能力。ConcurrentHashMap 和其它同步集合的引入讓這道題變得更加復(fù)雜。讓我們開始探索的旅程 吧!先來些簡單的問題"你用過HashMap嗎?”"什么是HashMap?你為什么用到它?”幾乎每個人都會回答"是的”,然后回答HashMap的一些特性,譬如HashMap可以接受null鍵值和值,而 Hashtable則不能;HashMap是非sy

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論