乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      java和javaee面試常用大全

       Levy_X 2018-10-14

      1、什么時候用靜態(tài)變量 靜態(tài)方法?為什么要使用靜態(tài)變量、靜態(tài)方法?

             他們是全局的,那么走到哪里都可以使用。而是使用很方便。static全局變量只在聲明此static全局變量的文件中有效;普通全局變量對整個源程序都有效,當(dāng)此源程序包含多于一個文件的程序時,對其他文件依然有效。

      static局部變量的存儲區(qū)為靜態(tài)存儲區(qū),普通局部變量的存儲區(qū)為棧;

      static局部變量生存周期為整個源程序,但是只能在聲明其的函數(shù)中調(diào)用

      static全局變量只在聲明此static全局變量的文件中有效;

      普通全局變量對整個源程序都有效,當(dāng)此源程序包含多于一個文件的程序時,對其他文件依然有效。

       

       

       

      2、變量,常量,靜態(tài)變量存儲的位置

      常見的存儲區(qū)域1、棧2、堆4、全局/靜態(tài)存儲區(qū)5、常量存儲區(qū)

      由編譯器在需要的時候分配,在不需要的時候自動清除的變量的存儲區(qū)。里面的變量通常是局部變量、函數(shù)參數(shù)等。

      由new分配的內(nèi)存塊,他們的釋放編譯器不去管,由我們的應(yīng)用程序去控制,一般一個new就要對應(yīng)一個delete。如果程序員沒有釋放掉,程序會一直占用內(nèi)存,導(dǎo)致內(nèi)存泄漏,在程序結(jié)束后,操作系統(tǒng)會自動回收。

      全局/靜態(tài)存儲區(qū)

      全局變量和靜態(tài)變量被分配到同一塊內(nèi)存中,全局變量又分為初始化的和未初始化的。

      常量存儲區(qū)

      這是一塊比較特殊的存儲區(qū),他們里面存放的是常量,不允許修改

       

      3、子類中如何調(diào)用父類中被重寫的方法

      通過反射進(jìn)行??梢栽谶\(yùn)行時調(diào)用任意一個對象的方法 

      1. Class cls = Class.forName('com.jdk');
      2. Methods methods[]= cls.getDecliedMethod();
      3. jdk jdkobj = new jdk();
      4. String returnvalue = methods.invoke(jdkobj,null)



      4、java反射機(jī)制應(yīng)用場景

      在運(yùn)行時判斷任意一個對象所屬的類。 
      Class cls = Class.forName('com.jdk'); 
      返回true 
      System.out.print(cls.isInstance(new jdk())); 

      在運(yùn)行時構(gòu)造任意一個類的對象。 
      Class cls = Class.forName('com.jdk'); 
      jdk jdkobj = cls.newInstance(); 

      在運(yùn)行時判斷任意一個類所具有的成員變量和方法。

      Class cls = Class.forName('com.jdk'); 
      Methods methods[]= cls.getDecliedMethod(); 
      Fields  fields[] = cls.getDeclieredFields(); 



      5、各種編碼方式及區(qū)別?

      ISO 就直接規(guī)定必須用兩個字節(jié),也就是16位來統(tǒng)一表示所有的字符。

      即讀取文件時,
      若為unicode(iso)時,前兩個字節(jié)可以不用讀取。注:固定是兩個字節(jié)一個字。
      Javaunicode編碼,也就是用16位來編寫一個字符。
      utf8:用三個字節(jié)來編碼一個中文字符。
      .Java
      源文件(含有中文的話)是用:GBK編碼。

      ASSCII:每個字符存儲是需占用1字節(jié)。

       

      6、什么是tcp/ip協(xié)議,什么是三次握手?

       TCP為傳輸控制協(xié)議,IP為網(wǎng)際協(xié)議,是網(wǎng)絡(luò)層最重要的協(xié)議。采用TCP/IP協(xié)議通過互聯(lián)網(wǎng)傳送信息可減少網(wǎng)絡(luò)中的傳輸阻塞,方便大批量的數(shù)據(jù)在網(wǎng)上傳輸,從而提高網(wǎng)絡(luò)的傳輸效率。 

       

      第一次握手:建立連接時,客戶端發(fā)送syn包(syn=jTCP/IP建立連接時使用的握手信號)到服務(wù)器,并進(jìn)入SYN_SENT狀態(tài),等待服務(wù)器確認(rèn);第二次握手服務(wù)器收到syn包,必須確認(rèn)客戶的SYNack=j 1),同時自己也發(fā)送一個SYN包。第三次握手:客戶端收到服務(wù)器的SYN ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k 1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHEDTCP連接成功)狀態(tài),完成三次握手。

       

      7、請求方法有哪些種呢?

      GET: 完整請求一個資源 (常用)
      HEAD: 僅請求響應(yīng)首部(向服務(wù)器索要與GET請求相一致的響應(yīng),只不過響應(yīng)體將不會被返回。這一方法可以在不必傳輸整個響應(yīng)內(nèi)容的情況下,就可以獲取包含在響應(yīng)消息頭中的元信息)
      POST:提交表單(常用)
      PUT: 上傳(向指定資源位置上傳其最新內(nèi)容)
      DELETE:刪除(請求服務(wù)器刪除Request-URI所標(biāo)識的資源)

      TRACE 回顯服務(wù)器收到的請求,主要用于測試或診斷

       

      8、如何實(shí)現(xiàn)跨域訪問?

      后臺代理方式 :也就是將后臺作為代理,每次對其它域的請求轉(zhuǎn)交給本域的后臺,本域的后臺通過模擬http請求去訪問其它域,再將返回的結(jié)果返回給前臺,這樣做的好處是,無論訪問的是文檔,還是js文件都可以實(shí)現(xiàn)跨域。

      基于iframe實(shí)現(xiàn)跨域 :兩個頁面必須屬于一個基礎(chǔ)域(例如都是xxx.com,或是xxx.com.cn),使用同一協(xié)議(例如都是 http)和同一端口(例如都是80),這樣在兩個頁面中同時添加document.domain = 'xx.com';  

      基于script標(biāo)簽實(shí)現(xiàn)跨域 :動態(tài)創(chuàng)建script標(biāo)簽就可以加載其它域的js文件,然后通過本頁面就可以調(diào)用加載后js文件的函數(shù),這樣做的缺陷就是不能加載其它域的文檔,只能是js文件

      使用window.name來進(jìn)行跨域數(shù)據(jù)共享。window對象有個name屬性,該屬性有個特征:即在一個窗口(window)的生命周期內(nèi),窗口載入的所有的頁面都是共享一個window.name的,每個頁面對window.name都有讀寫的權(quán)限。

       

      9、主鍵和索引的區(qū)別?

      主鍵是表中的一個或多個字段,它的值用于惟一地標(biāo)識表中的某一條記錄.;使用索引可快速訪問數(shù)據(jù)庫表中的特定信息。索引是對數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),只有當(dāng)經(jīng)常查詢索引列中的數(shù)據(jù)時,才需要在表上創(chuàng)建索引。索引占用磁盤空間,并且降低添加、刪除和更新行的速度。

      添加索引:ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) 

       

      10、存儲過程使用?

      sql存儲過程及應(yīng)用:存儲過程(StoredProcedure),是一組為了完成特定功能的SQL 語句。存儲過程在被創(chuàng)建以后,可以在程序中被多次調(diào)用,而不必重新編寫該存儲過程的SQL語句,而且數(shù)據(jù)庫專業(yè)人員可隨時對存儲過程進(jìn)行修改,但對應(yīng)用程序源代碼毫無影響。因?yàn)閼?yīng)用程序源代碼只包含存儲過程的調(diào)用語句,從而極大地提高了程序的可移植性。因?yàn)榇鎯^程是預(yù)編譯的,在首次運(yùn)行一個存儲過程時,查詢優(yōu)化器對其進(jìn)行分析優(yōu)化,并給出最終被存在系統(tǒng)表中的執(zhí)行計劃,而批處理的Transaction-SQL 語句在每次運(yùn)行時都要進(jìn)行編譯和優(yōu)化,因此速度相對要慢一些。

       

      11、Web 服務(wù)器性能與站點(diǎn)訪問性能優(yōu)化思路

      增加帶寬,盡可能多地使用靜態(tài)內(nèi)容(靜態(tài)網(wǎng)頁是相對于動態(tài)網(wǎng)頁而言,是指沒有后臺數(shù)據(jù)庫、不含程序和不可交互的網(wǎng)頁),多臺服務(wù)器負(fù)載均衡同時處理大量的并發(fā)訪問,減少網(wǎng)頁中的 HTTP 請求數(shù)。

       

      12、負(fù)載均衡及算法

      負(fù)載均衡,其意思就是分?jǐn)偟蕉鄠€操作單元上進(jìn)行執(zhí)行,例如Web服務(wù)器、FTP服務(wù)器、企業(yè)關(guān)鍵應(yīng)用服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器等,從而共同完成工作任務(wù)。

      算法:

      隨機(jī):負(fù)載均衡方法隨機(jī)的把負(fù)載分配到各個可用的服務(wù)器上

      輪詢:輪詢算法按順序把每個新的連接請求分配給下一個服務(wù)器,最終把所有請求平分給所有的服務(wù)器。

      加權(quán)輪詢:該算法中,每個機(jī)器接受的連接數(shù)量是按權(quán)重比例分配的。

      最快算法:最快算法基于所有服務(wù)器中的最快響應(yīng)時間分配連接。

      最少連接:系統(tǒng)把新連接分配給當(dāng)前連接數(shù)目最少的服務(wù)器

      多個服務(wù)器間數(shù)據(jù)共享:session復(fù)制。tomcat的session復(fù)制使所有節(jié)點(diǎn)tomcat的會話相同,tomcat使用組播技術(shù),只要集群中一個tomcat節(jié)點(diǎn)的session發(fā)生改變,會廣播通知所有tomcat節(jié)點(diǎn)發(fā)生改變。

      13、高并發(fā)量網(wǎng)站解決方案

      HTML靜態(tài)化、圖片服務(wù)器分離、數(shù)據(jù)庫集群、庫表散列(在應(yīng)用程序中安裝業(yè)務(wù)和應(yīng)用或者功能模塊將數(shù)據(jù)庫進(jìn)行分離,不同的模塊對應(yīng)不同的數(shù)據(jù)庫或者表,再按照一定的策略對某個頁面或者功能進(jìn)行更小的數(shù)據(jù)庫散列,比如用戶表,按照用戶ID進(jìn)行表散列,這樣就能夠低成本的提升系統(tǒng)的性能并且有很好的擴(kuò)展性。),緩存(),負(fù)載均衡,CDN(分發(fā)網(wǎng)絡(luò)。其目的是通過在現(xiàn)有的Internet中增加一層新的網(wǎng)絡(luò)架構(gòu),將網(wǎng)站的內(nèi)容發(fā)布到最接近用戶的網(wǎng)絡(luò)“邊緣”,使用戶可以就近取得所需的內(nèi)容,提高用戶訪問網(wǎng)站的響應(yīng)速度)。


       

      14、java的垃圾回收機(jī)制(如何確定某個對象是“垃圾”?)。

      Java的垃圾回收機(jī)制是Java虛擬機(jī)提供的能力,用于在空閑時間以不定時的方式動態(tài)回收無任何引用的對象占據(jù)的內(nèi)存空間。
      需要注意的是:垃圾回收回收的是無任何引用的對象占據(jù)的內(nèi)存空間而不是對象本身。

      在java中是通過引用來和對象進(jìn)行關(guān)聯(lián)的,也就是說如果要操作對象,必須通過引用來進(jìn)行。那么很顯然一個簡單的辦法就是通過引用計數(shù)來判斷一個對象是否可以被回收。不失一般性,如果一個對象沒有任何引用與之關(guān)聯(lián),則說明該對象基本不太可能在其他地方被使用到,那么這個對象就成為可被回收的對象了。這種方式成為引用計數(shù)法。

       

      由于它們互相引用對方,導(dǎo)致它們的引用計數(shù)都不為0,那么垃圾收集器就永遠(yuǎn)不會回收它們。解決方案:在Java中采取了可達(dá)性分析法(該方法的基本思想是通過一系列的“GC Roots”對象作為起點(diǎn)進(jìn)行搜索,如果在“GC Roots”和一個對象之間沒有可達(dá)路徑,則稱該對象是不可達(dá)的,不過要注意的是被判定為不可達(dá)的對象不一定就會成為可回收對象。被判定為不可達(dá)的對象要成為可回收對象必須至少經(jīng)歷兩次標(biāo)記過程,如果在這兩次標(biāo)記過程中仍然沒有逃脫成為可回收對象的可能性,則基本上就真的成為可回收對象了。)如果兩個對象互相引用,而不再被第3者所引用,那么這兩個互相引用的對象也會被回收。

       

      15、單例設(shè)計模式的實(shí)現(xiàn)?

       

      餓漢式是(靜態(tài)初始化對象)線程安全的,因?yàn)樘摂M機(jī)保證只會裝載一次,在裝載類的時候是不會發(fā)生并發(fā)的。

      懶漢式也是可以實(shí)現(xiàn)線程安全的,只要加上synchronized即可,但是這樣一來,會降低整個訪問的速度,而且每次都要判斷。可以使用'雙重檢查加鎖'的方式來實(shí)現(xiàn),就可以既實(shí)現(xiàn)線程安全,又能夠使性能不受到很大的影響。并不是每次進(jìn)入getInstance方法都需要同步,而是先不同步,進(jìn)入方法過后,先檢查實(shí)例是否存在,如果不存在才進(jìn)入下面的同步塊,這是第一重檢查。進(jìn)入同步塊過后,再次檢查實(shí)例是否存在,如果不存在,就在同步的情況下創(chuàng)建一個實(shí)例,這是第二重檢查。這樣一來,就只需要同步一次了,從而減少了多次在同步情況下進(jìn)行判斷所浪費(fèi)的時間。

      懶漢式:”雙重檢查加鎖”

      1. public class Singleton {
      2. /**
      3. * 對保存實(shí)例的變量添加volatile的修飾
      4. */
      5. private volatile static Singleton instance = null;
      6. private Singleton(){
      7. }
      8. public static Singleton getInstance(){
      9. //先檢查實(shí)例是否存在,如果不存在才進(jìn)入下面的同步塊
      10. if(instance == null){
      11. //同步塊,線程安全地創(chuàng)建實(shí)例
      12. synchronized(Singleton.class){
      13. //再次檢查實(shí)例是否存在,如果不存在才真正地創(chuàng)建實(shí)例
      14. if(instance == null){
      15. instance = new Singleton();
      16. }
      17. }
      18. }
      19. return instance;
      20. }
      21. }


      資源利用率高,不執(zhí)行g(shù)etInstance()就不會被實(shí)例,可以執(zhí)行該類的其他靜態(tài)方法

       

      缺點(diǎn)

      第一次加載時不夠快,多線程使用不必要的同步開銷大

      22.   

      餓漢式:
      1. publicclass Singleton1 {
      2. private Singleton1() {
      3. }
      4. publicstatic Singleton1 instance = new Singleton1();
      5. public Singleton1 getInstance() {
      6. return instance;
      7. }
      8. }


      優(yōu)點(diǎn):1.線程安全  2.在類加載的同時已經(jīng)創(chuàng)建好一個靜態(tài)對象,調(diào)用時反應(yīng)速度快
      缺點(diǎn):資源效率不高,可能getInstance()永遠(yuǎn)不會執(zhí)行到,但執(zhí)行該類的其他靜態(tài)方法或者加載了該類(class.forName),那么這個實(shí)例仍然初始化
      解決方案:

      .靜態(tài)內(nèi)部類

      1. class Singleton5 {
      2. private Singleton5() {
      3. }
      4. privatestaticclass SingletonHelp {
      5. static Singleton5 instance = new Singleton5();
      6. }
      7. publicstatic Singleton5 getInstance() {
      8. return SingletonHelp.instance;
      9. }
      10. }


      資源利用率高,不執(zhí)行g(shù)etInstance()不被實(shí)例,可以執(zhí)行該類其他靜態(tài)方法

       

      缺點(diǎn)

      第一次加載時反應(yīng)不夠快

       

       

      16、對設(shè)計模式的理解以及使用場景?

      單例模式:確保一個類只有一個實(shí)例,自行提供這個實(shí)例并向整個系統(tǒng)提供這個實(shí)例,如網(wǎng)站的計數(shù)器,數(shù)據(jù)庫連接池的設(shè)計一般也是采用單例模式,因?yàn)閿?shù)據(jù)庫連接是一種數(shù)據(jù)庫資源。多線程的線程池的設(shè)計。

       

      裝飾模式:以對客戶端透明的方式擴(kuò)展對象的功能,是繼承關(guān)系的一個替代方案;
      代理模式:給一個對象提供一個代理對象,并有代理對象來控制對原有對象的引用;

      裝飾模式應(yīng)該為所裝飾的對象增強(qiáng)功能;代理模式對代理的對象施加控制,并不提供對象本身的增強(qiáng)功能,代理對象完成用戶請求,屏蔽用戶對真實(shí)對象的訪問。靜態(tài)代理是在程序運(yùn)行之前就已經(jīng)存在了代理類,動態(tài)代理是程序運(yùn)行中在內(nèi)存中生成代理類。  
      裝飾器模式來說,裝飾者(decorator)和被裝飾者(decoratee)都實(shí)現(xiàn)同一個接口。 
      對代理模式來說,代理類(proxy class)和真實(shí)處理的類(real class)都實(shí)現(xiàn)同一個接口。

      適配器模式是用新接口來調(diào)用原接口,原接口對新系統(tǒng)是不可見或者說不可用的。裝飾者模式原封不動的使用原接口適配器是知道被適配者的詳細(xì)情況的(就是那個類或那個接口)。裝飾者只知道其接口是什么,至于其具體類型(是基類還是其他派生類)只有在運(yùn)行期間才知道。

      適配器模式主要是為了接口的轉(zhuǎn)換,而裝飾者模式關(guān)注的是通過組合來動態(tài)的為被裝飾者注入新的功能或行為(即所謂的責(zé)任)。

       

      17、設(shè)計模式的原則

      1、開閉原則,對擴(kuò)展開放,對修改關(guān)閉。在程序需要進(jìn)行拓展的時候,不能去修改原有的代碼2、里氏代換原則,任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)3、依賴倒轉(zhuǎn)原則,真對接口編程,依賴于抽象而不依賴于具體。

      18、進(jìn)程和線程的區(qū)別?

      進(jìn)程就是一個應(yīng)用程序在處理機(jī)上的一次執(zhí)行過程,它是一個動態(tài)的概念,而線程是進(jìn)程中的一部分,進(jìn)程包含多個線程在運(yùn)行。

      進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個數(shù)據(jù)集合上的一次運(yùn)行活動,進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨(dú)立單位.線程是進(jìn)程的一個實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位.線程自己基本上不擁有系統(tǒng)資源。一個程序至少有一個進(jìn)程,一個進(jìn)程至少有一個線程.

       

      19、在多線程情況下hashmap的線程不安全問題

      Hashtable替換HashMap,如果從結(jié)構(gòu)上對Hashtable 進(jìn)行修改,除非通過 Iterator 自身的移除或添加方法,否則在任何時間以任何方式對其進(jìn)行修改,Iterator 都將拋出 ConcurrentModificationException,面對并發(fā)的修改,Iterator 很快就會完全失敗,而不冒在將來某個不確定的時間發(fā)生任意不確定行為的風(fēng)險。   ConcurrentHashMap和Hashtable主要區(qū)別就是圍繞著鎖的粒度以及如何鎖,可以簡單理解成把一個大的HashTable分解成多個,形成了鎖分離

       

      20、spring是何時創(chuàng)建對象的?

      框架讀取配置文件spring.xml后,將配置文件中每個bean元素對應(yīng)到BeanDefinition. 
      根據(jù)配置的class元素值首先得到對應(yīng)的Class對象,然后用Class.newInstance()方法生成對象實(shí)例.有了對象實(shí)例后根據(jù)配置文件的依賴關(guān)系進(jìn)行初始化加工等工作.完了就可以投放使用.

       

      21、啟動線程的方法?

      Thread類的start()方法來啟動一個線程,
      這時此線程是處于就緒狀態(tài),
      并沒有運(yùn)行。
      然后通過此Thread類調(diào)用方法run()來完成其運(yùn)行操作的,
      這里方法run()稱為線程體,
      它包含了要執(zhí)行的這個線程的內(nèi)容,

       

      22、線程的優(yōu)先級?

      * 1.Java中線程優(yōu)先級:1--10

       * 2.默認(rèn)優(yōu)先級:5;設(shè)置優(yōu)先級:setPriority(intp)

      我們可以設(shè)定,但仍然由操作系統(tǒng)來決定;

       

      23、線程的常用操作?

      休眠線程:Thread.sleep(1000);

      加入線程:* 調(diào)用join()的對象,會保證先執(zhí)行完畢,其它線程才會開始執(zhí)行;

      禮讓線程:yield()當(dāng)前執(zhí)行的線程,會退回到'就緒'狀態(tài),等待操作系統(tǒng)再次分配執(zhí)行時間.

                     操作系統(tǒng)很有可能會再次讓這個線程執(zhí)行;

      守護(hù)線程:守護(hù)線程:當(dāng)主進(jìn)程結(jié)束時,線程也會跟著結(jié)束(但不會立即結(jié)束,有個小緩沖)

      setDaemon(true);

      中斷線程:Object-->wait()     Thread-->sleep()  Thread-->yield()

             此方式,會在當(dāng)線程處于上述三種狀態(tài)之一時,引發(fā)一個異常,

                                                             我們可以在異常中,停止掉線程;

      停止線程:stop(),但是常用使用退出標(biāo)志,使線程正常退出

      反對使用stop(),是因?yàn)樗话踩?。它會解除由線程獲取的所有鎖定,而且如果對象處于一種不連貫狀態(tài),那么其他線程能在那種狀態(tài)下檢查和修改它們。結(jié)果很難檢查出真正的問題所在。suspend()方法容易發(fā)生死鎖。調(diào)用suspend()的時候,目標(biāo)線程會停下來,但卻仍然持有在這之前獲得的鎖定。此時,其他任何線程都不能訪問鎖定的資源,除非被'掛起'的線程恢復(fù)運(yùn)行。對任何線程來說,如果它們想恢復(fù)目標(biāo)線程,同時又試圖使用任何一個鎖定的資源,就會造成死鎖。所以不應(yīng)該使用suspend(),而應(yīng)在自己的Thread類中置入一個標(biāo)志,指出線程應(yīng)該活動還是掛起。若標(biāo)志指出線程應(yīng)該掛起,便用wait()命其進(jìn)入等待狀態(tài)。若標(biāo)志指出線程應(yīng)當(dāng)恢復(fù),則用一個notify()重新啟動線程。

       

       * wait():會釋放鎖;

       *sleep():不釋放鎖;

       *yield():不釋放鎖;

      sleep100L)意思為:占用CPU,線程休眠100毫秒
      wait
      100L)意思為:不占用CPU,線程等待100毫秒

      24、同步的好處和弊端?

      并發(fā)訪問:* 1.是否是多線程環(huán)境

       * 2.是否有共享數(shù)據(jù)

       * 3.是否有多條語句操作共享數(shù)據(jù)

      同步的好處:

       * 1.它解決了多個線程的并發(fā)性訪問的問題;

       * 同步的弊端:

       * 1.由于判斷鎖對象,所以會有額外的執(zhí)行代碼,所以效率會降低;

      56、多線程有幾種實(shí)現(xiàn)方法?同步有幾種實(shí)現(xiàn)方法?

      多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口

      同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,waitnotify

      wait():使一個線程處于等待狀態(tài),并且釋放所持有的對象的lock。

      sleep():使一個正在運(yùn)行的線程處于睡眠狀態(tài),是一個靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException異常。

      notify():喚醒一個處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時候,并不能確切的喚醒某一個等待狀態(tài)的線程,而是由JVM確定喚醒哪個線程,而且不是按優(yōu)先級。

      Allnotity():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。

       

       

      25、線程的了解?

      鎖和死鎖:兩個或者多個線程之間相互等待,導(dǎo)致線程都無法執(zhí)行。

      生產(chǎn)者消費(fèi)者,當(dāng)生產(chǎn)者生產(chǎn)產(chǎn)品滿足數(shù)量時,進(jìn)行等待,被消費(fèi)完時,喚醒,繼續(xù)生產(chǎn)。

      為什么wait(),notify(),notifyAll()等方法都定義在Object類中:

                         1).因?yàn)槊總€類都有可能被多線程訪問;

                         2).如果被線程訪問時,如果資源沒準(zhǔn)備好,每個類都有權(quán)利要求訪問的線程等待、及喚醒;

      26、什么是線程池?

      對于一個Thread線程,不能多次的調(diào)用start();

       *   如果想再次運(yùn)行,需要再次實(shí)例化此線程對象;

       *   如果這個線程對象實(shí)例化時,很耗時,那么我們多次使用,就很不方便;

      '線程池',它可以緩存一些'線程對象', 我們可以反復(fù)的調(diào)用緩沖的線程對象;

       

       一個線程池包括以下四個基本組成部分:
                     1、線程池管理器(ThreadPool):用于創(chuàng)建并管理線程池,包括創(chuàng)建線程池,銷毀線程池,添加新任務(wù);
                     2、工作線程(PoolWorker):線程池中線程,在沒有任務(wù)時處于等待狀態(tài),可以循環(huán)的執(zhí)行任務(wù);
                     3、任務(wù)接口(Task):每個任務(wù)必須實(shí)現(xiàn)的接口,以供工作線程調(diào)度任務(wù)的執(zhí)行,它主要規(guī)定了任務(wù)的入口,任務(wù)執(zhí)行完后的收尾工作,任務(wù)的執(zhí)行狀態(tài)等;
                     4、任務(wù)隊列(taskQueue):用于存放沒有處理的任務(wù)。

       

      27、網(wǎng)絡(luò)通信:

      TCP(傳輸層)上傳任何東西都是可靠的,只要兩臺機(jī)器上建立起了連接,在本機(jī)上發(fā)送的數(shù)據(jù)就一定能傳到對方的機(jī)器上,UDP就好比發(fā)電報,發(fā)出去就完事了,對方有沒有接收到它都不管,所以UDP是不可靠的。TCP傳送數(shù)據(jù)雖然可靠,但傳送得比較慢,UDP傳送數(shù)據(jù)不可靠,但是傳送得快。

      Ip(網(wǎng)絡(luò)層):網(wǎng)間數(shù)據(jù)通信。

       端口號是用來區(qū)分一臺機(jī)器上不同的應(yīng)用程序的。

      客戶端通過端口6666向服務(wù)器端請求連接,服務(wù)器端接受客戶端的連接請求以后,就在服務(wù)器端上安裝一個Socket,然后讓這個Socket與客戶端的Socket連接,這樣服務(wù)器端就可以與客戶端互相通信了,當(dāng)有另外一個客戶端申請連接時,服務(wù)器端接受了以后,又會安裝另外一個Socket與這個客戶端的Socket進(jìn)行連接。

       

      28、error和exception有什么區(qū)別?

      error 表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問題。比如說內(nèi)存溢出。不可能指望程序能處理這樣的情況。 exception 表示一種設(shè)計或?qū)崿F(xiàn)問題。也就是說,它表示如果程序運(yùn)行正常,從不會發(fā)生的情況。

       

      29、Java中的異常處理機(jī)制的簡單原理和應(yīng)用。

      異常是指java程序運(yùn)行時(非編譯)所發(fā)生的非正常情況或錯誤,與現(xiàn)實(shí)生活中的事件很相似,現(xiàn)實(shí)生活中的事件可以包含事件發(fā)生的時間、地點(diǎn)、人物、情節(jié)等信息,可以用一個對象來表示,Java使用面向?qū)ο蟮姆绞絹硖幚懋惓?,它把程序中發(fā)生的每個異常也都分別封裝到一個對象來表示的,該對象中包含有異常的信息。

      Java對異常進(jìn)行了分類,不同類型的異常分別用不同的Java類表示,所有異常的根類為java.lang.Throwable,Throwable下面又派生了兩個子類:Error和Exception,Error 表示應(yīng)用程序本身無法克服和恢復(fù)的一種嚴(yán)重問題,程序只有死的份了,例如,說內(nèi)存溢出和線程死鎖等系統(tǒng)問題。Exception表示程序還能夠克服和恢復(fù)的問題,其中又分為系統(tǒng)異常和普通異常,系統(tǒng)異常是軟件本身缺陷所導(dǎo)致的問題,也就是軟件開發(fā)人員考慮不周所導(dǎo)致的問題,軟件使用者無法克服和恢復(fù)這種問題,但在這種問題下還可以讓軟件系統(tǒng)繼續(xù)運(yùn)行或者讓軟件死掉,例如,數(shù)組腳本越界(ArrayIndexOutOfBoundsException),空指針異常(NullPointerException)、類轉(zhuǎn)換異常(ClassCastException);普通異常是運(yùn)行環(huán)境的變化或異常所導(dǎo)致的問題,是用戶能夠克服的問題,例如,網(wǎng)絡(luò)斷線,硬盤空間不夠,發(fā)生這樣的異常后,程序不應(yīng)該死掉。

      java為系統(tǒng)異常和普通異常提供了不同的解決方案,編譯器強(qiáng)制普通異常必須try..catch處理或用throws聲明繼續(xù)拋給上層調(diào)用方法處理,所以普通異常也稱為checked異常,而系統(tǒng)異??梢蕴幚硪部梢圆惶幚?,所以,編譯器不強(qiáng)制用try..catch處理或用throws聲明,所以系統(tǒng)異常也稱為unchecked異常。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多