日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

201902-Java面试总结

發(fā)布時間:2023/12/20 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 201902-Java面试总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近兩周都在面試,很多技術點都知道,但是很少實戰(zhàn)應用,面試的時候描述就自然模糊不清,所以現(xiàn)在就兩周面試個人情況總結如下(其實還是個人java基礎知識需要鞏固理解學習,加油ing):

  • java Object的方法有哪些?
  • 1.clone方法:保護方法,實現(xiàn)對象的淺復制,只有實現(xiàn)了Cloneable接口才可以調(diào)用該方法,否則拋出CloneNotSupportedException異常。主要是JAVA里除了8種基本類型傳參數(shù)是值傳遞,其他的類對象傳參數(shù)都是引用傳遞,我們有時候不希望在方法里將參數(shù)改變,這時就需要在類中復寫clone方法。

    2.getClass方法:final方法,獲得運行時類型。

    3.toString方法:該方法用得比較多,一般子類都有覆蓋。(雖然Object提供了toString的實現(xiàn),但它返回的是類名+@+哈希碼值的無符號16進制表示=>getClass().getName() + '@' + Integer.toHexString(hashCode()) =>通常,toString?方法會返回一個“以文本方式表示”此對象的字符串。結果應是一個簡明但易于讀懂的信息表達式。所以,建議所有子類都重寫此方法。)

    4.finalize方法:該方法用于釋放資源。因為無法確定該方法什么時候被調(diào)用,很少使用。

    5.equals方法:該方法是非常重要的一個方法。一般equals和==是不一樣的,但是在Object中兩者是一樣的。子類一般都要重寫這個方法。

    6.hashCode方法:該方法用于哈希查找,可以減少在查找中使用equals的次數(shù),重寫了equals方法一般都要重寫hashCode方法。這個方法在一些具有哈希功能的Collection中用到。一般必須滿足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就滿足equals。不過為了提高效率,應該盡量使上面兩個條件接近等價。如果不重寫hashcode(),在HashSet中添加兩個equals的對象,會將兩個對象都加入進去。

  • 7.wait方法:wait方法就是使當前線程等待該對象的鎖,當前線程必須是該對象的擁有者,也就是具有該對象的鎖。wait()方法一直等待,直到獲得鎖或者被中斷。

    8.notify方法:該方法喚醒在該對象上等待的某個線程。

    9.notifyAll方法:該方法喚醒在該對象上等待的所有線程。

  • java的反射機制是什么?原理是什么?

JAVA反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法和屬性;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機制。

延伸參考:https://blog.csdn.net/Appleyk/article/details/77879073

  • java Interface接口和Abstract抽象類的區(qū)別?它們分別使用的場景?

抽象類與接口都用于抽象,但抽象類(單繼承)可以有自己的部分實現(xiàn),而接口(多繼承)則完全是一個標識;

接口的好處是將實現(xiàn)(細節(jié))與表現(xiàn)(動作)分離;

  • 抽象類的成員可以具有訪問級別,接口的成員全部public級別
  • 抽象類可以包含字段,接口不可以
  • 抽象類可以實現(xiàn)接口,接口不能繼承抽象類
  • 抽象類的成員可以具有具體實現(xiàn),接口不行
  • 抽象的子類可以選擇性實現(xiàn)其基類的抽象方法,接口的子類必須實現(xiàn)
  • 接口是抽象類的一種特例!
    • java 悲觀鎖和樂觀鎖是什么?java中有哪些鎖?

    樂觀鎖:樂觀并發(fā)控制(又名”樂觀鎖”,Optimistic Concurrency Control,縮寫”O(jiān)CC”)是一種并發(fā)控制的方法。它假設多用戶并發(fā)的事務在處理時不會彼此互相影響,各事務能夠在不產(chǎn)生鎖的情況下處理各自影響的 那部分數(shù)據(jù)。在提交數(shù)據(jù)更新之前,每個事務會先檢查在該事務讀取數(shù)據(jù)后,有沒有其他事務又修改了該數(shù)據(jù)。如果其他事務有更新的話,正在提交的事務會進行回 滾。樂觀事務控制最早是由孔祥重(H.T.Kung)教授提出。

    實現(xiàn):樂觀鎖一般會使用版本號機制或CAS(Compare-and-Swap,即比較并替換)算法實現(xiàn)。

    悲觀鎖:悲觀并發(fā)控制(又名”悲觀鎖”,Pessimistic Concurrency Control,縮寫”PCC”)是一種并發(fā)控制的方法。它可以阻止一個事務以影響其他用戶的方式來修改數(shù)據(jù)。如果一個事務執(zhí)行的操作讀某行數(shù)據(jù)應用了 鎖,那只有當這個事務把鎖釋放,其他事務才能夠執(zhí)行與該鎖沖突的操作。

    實現(xiàn):Java中synchronized和ReentrantLock等獨占鎖就是悲觀鎖思想的實現(xiàn)。

    兩種鎖的使用場景:兩種鎖各有優(yōu)缺點,不可認為一種好于另一種,像樂觀鎖適用于寫比較少的情況下(多讀場景),即沖突真的很少發(fā)生的時候,這樣可以省去了鎖的開銷,加大了系統(tǒng)的整個吞吐量。但如果是多寫的情況,一般會經(jīng)常產(chǎn)生沖突,這就會導致上層應用會不斷的進行retry,這樣反倒是降低了性能,所以一般多寫的場景下用悲觀鎖就比較合適。

    延伸參考:https://www.cnblogs.com/qlqwjy/p/7798266.html

    java的鎖有哪些?

    ? ? ? ? ? 【1】公平鎖和非公平鎖。?
    ? ? ? ? ? 公平鎖:是指按照申請鎖的順序來獲取鎖,?
    ? ? ? ? ? 非公平鎖:線程獲取鎖的順序不一定按照申請鎖的順序來的。

    ? ? ? ? ? //默認是不公平鎖,傳入true為公平鎖,否則為非公平鎖
    ? ? ? ? ? ReentrantLock reentrantLock = ?new ReetrantLock();

    ? ? ? ? ? 【2】共享鎖和獨享鎖?
    ? ? ? ? ? 獨享鎖:一次只能被一個線程所訪問?
    ? ? ? ? ? 共享鎖:線程可以被多個線程所持有。?
    ? ? ? ? ? ReadWriteLock 讀鎖是共享鎖,寫鎖是獨享鎖。?
    ? ? ? ? ? 【3】樂觀鎖和悲觀鎖。?
    ? ? ? ? ? 樂觀鎖:對于一個數(shù)據(jù)的操作并發(fā),是不會發(fā)生修改的。在更新數(shù)據(jù)的時候,會嘗試采用更新,不斷重入的方式,更新數(shù)據(jù)。?
    ? ? ? ? ? 悲觀鎖:對于同一個數(shù)據(jù)的并發(fā)操作,是一定會發(fā)生修改的。因此對于同一個數(shù)據(jù)的并發(fā)操作,悲觀鎖采用加鎖的形式。悲觀鎖認為,不加鎖的操作一定會出問題,?
    ? ? ? ? ? 【4】分段鎖:其實是一種鎖的設計,并不是具體的一種鎖,對于ConcurrentHashMap而言,其并發(fā)的實現(xiàn)就是通過分段鎖的形式來實現(xiàn)高效的并發(fā)操作。其思想就是讓鎖的粒度變小。?
    ? ? ? ? ? 【5】這三種鎖是指鎖的狀態(tài),并且是針對Synchronized。

    ? ? ? ? ? 偏向鎖:是指一段同步代碼一直被一個線程所訪問,那么該線程會自動獲取鎖。降低獲取鎖的代價?
    ? ? ? ? ? 輕量級鎖 :指當鎖是偏向鎖的時候,被另一個線程所訪問,偏向鎖就會升級為輕量級鎖,其他線程會通過自旋的形式嘗試獲取鎖,不會阻塞,提高性能。
    ? ? ? ? ? 重量級鎖 :指當鎖為輕量級鎖的時候,另一個線程雖然是自旋,但自旋不會一直持續(xù)下去,當自旋一定次數(shù)的時候,還沒有獲取到鎖,就會進入阻塞,該鎖膨脹為重量級鎖。重量級鎖會讓其他申請的線程進入阻塞,性能降低。
    ? ? ? ? ? 【6】自旋鎖:指嘗試獲取鎖的線程不會立即阻塞,而是采用循環(huán)的方式去嘗試獲取鎖,這樣的好處是減少線程上下文切換的消耗,缺點是循環(huán)會消耗CPU。

    延伸閱讀:http://www.cnblogs.com/lxmyhappy/p/7380073.html

    • java事務處理,有哪些事務?

    java的事務處理,如果對數(shù)據(jù)庫進行多次操作,每一次的執(zhí)行或步驟都是一個事務.如果數(shù)據(jù)庫操作在某一步?jīng)]有執(zhí)行或出現(xiàn)異常而導致事務失敗,這樣有的事務被執(zhí)行有的就沒有被執(zhí)行,從而就有了事務的回滾,取消先前的操作.....?

    Java事務的類型有三種:JDBC事務、JTA(JavaTransaction API)事務、容器事務。

    1、JDBC事務:控制的局限性在一個數(shù)據(jù)庫連接內(nèi),但是其使用簡單。

    2、JTA事務:功能強大,事務可以跨越多個數(shù)據(jù)庫或多個DAO,使用也比較復雜。

    3、容器事務:主要指的是J2EE應用服務器提供的事務管理,局限于EJB應用使用。

    JDBC 事務是用 Connection 對象控制的。JDBCConnection 接口( java.sql.Connection )提供了兩種事務模式:自動提交和手工提交。 java.sql.Connection 提供了以下控制事務的方法:public void setAutoCommit(boolean),public boolean getAutoCommit(),public void commit(),public void rollback();使用 JDBC 事務界定時,您可以將多個 SQL 語句結合到一個事務中。JDBC 事務的一個缺點是事務的范圍局限于一個數(shù)據(jù)庫連接。一個 JDBC 事務不能跨越多個數(shù)據(jù)庫

    延伸閱讀:https://www.cnblogs.com/wang-Java-begining/p/9978230.html

    https://www.cnblogs.com/Bonker/p/5417967.html

    https://jingyan.baidu.com/article/414eccf65aa5896b421f0a52.html? (百度經(jīng)驗-簡單)

    • java數(shù)據(jù)庫事務的原則(特性)有哪些?(ACID原則)

    數(shù)據(jù)庫事務正確執(zhí)行的四個原則:A (Atomicity)原子性、C (Consistency) 一致性、I(Isolation)隔離性、D(Durability)持久性

    1、A (Atomicity) 原子性 :事務里的所有操作要么全部做完,要么都不做,事務成功的條件是事務里的所有操作都成功,只要有一個操作失敗,整個事務就失敗,需要回滾(要么成功,要么失敗重來)。 比如銀行轉賬,從A賬戶轉100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。

    2、C (Consistency) 一致性 :數(shù)據(jù)庫要一直處于一致的狀態(tài),事務的運行不會改變數(shù)據(jù)庫原本的一致性約束。 例如現(xiàn)有完整性約束a存款+b存款=2000,如果一個事務改變了a存款,那么必須得改變b存款,使得事務結束后依然滿足a存款+b存款=2000,否則事務失敗。

    3、I (Isolation) 隔離性:指并發(fā)的事務之間不會互相影響,如果一個事務要訪問的數(shù)據(jù)正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的數(shù)據(jù)就不受未提交事務的影響。 比如現(xiàn)在有個交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的。

    即要達到這么一種效果:對于任意兩個并發(fā)的事務T1和T2,在事務T1看來,T2要么在T1開始之前就已經(jīng)結束,要么在T1結束之后才開始,這樣每個事務都感覺不到有其他事務在并發(fā)地執(zhí)行。(串行化)

    4、D (Durability) 持久性 :指一旦事務提交后,它所做的修改將會永久的保存在數(shù)據(jù)庫上,即使出現(xiàn)宕機也不會丟失。

    • @transaction注解的參數(shù)有哪些,作用是什么?
  • 控制事務傳播----propagation屬性
  • 控制事務隔離級別----屬性isolation
  • 只可讀/可讀寫
  • 遇到哪些異常會回滾和不回滾----rollbackFor和noRollbackFor屬性
  • @Transactianal注解有一些屬性,見Spring-Framework-Reference Table17.3 Transactional-settings
  • @Transactional(propagation=Propagation.REQUIRED) //控制事務傳播。默認是Propagation.REQUIRED @Transactional(isolation=Isolation.DEFAULT) //控制事務隔離級別。默認跟數(shù)據(jù)庫的默認隔離級別相同 @Transactional(readOnly=false) //控制事務可讀寫還是只可讀。默認可讀寫 @Transactional(timeout=30) //控制事務的超時時間,單位秒。默認跟數(shù)據(jù)庫的事務控制系統(tǒng)相同,又說是30秒 @Transactional(rollbackFor=RuntimeException.class) //控制事務遇到哪些異常才會回滾。默認是RuntimeException @Transactional(rollbackForClassName=RuntimeException) //同上 @Transactional(noRollbackFor=NullPointerException.class) //控制事務遇到哪些異常不會回滾。默認遇到非RuntimeException不會回滾 @Transactional(noRollbackForClassName=NullPointerException)//同上

    延伸閱讀:https://www.cnblogs.com/alice-cj/p/10417097.html? (very good)?

    https://www.cnblogs.com/sonng/p/6591319.html? ?(good)

    • java有哪些常見 的設計模式?(23種)
  • 創(chuàng)建型模式:單例模式、抽象工廠模式、建造者模式、工廠模式、原型模式。
  • 結構型模式:適配器模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、代理模式。
  • 行為型模式:模版方法模式、命令模式、迭代器模式、觀察者模式、中介者模式、備忘錄模式、解釋器模式、狀態(tài)模式、策略模式、職責鏈模式(責任鏈模式)、訪問者模式。
  • 單例模式有哪些?
  • 單例模式可以分為懶漢式和餓漢式:

        1)懶漢式單例模式:在類加載時不初始化。

        2)餓漢式單例模式:在類加載時就完成了初始化,所以類加載比較慢,但獲取對象的速度快。

    懶漢式,線程安全;餓漢式,線程不安全;使用靜態(tài)內(nèi)部類?|?枚舉方式?|?雙重校驗鎖,線程安全【推薦】

    延伸閱讀:https://blog.csdn.net/a214024475/article/details/53188472

    https://wangle.iteye.com/blog/196972https://wangle.iteye.com/blog/196972

    https://blog.csdn.net/qq_21439971/article/details/53740109? ? (單例模式)

    • spring的核心是什么,特性有哪些?AOP,IOC底層實現(xiàn)的原理是什么?

    spring是一個輕型容器(light-weight Container),其核心是Bean工廠(Bean Factory),用以構造我們所需要的M(Model)

    兩個特性IoC(Inversion of Control 控制反轉)/ DI (Dependency Injection依賴注入)面向切面編程(aspect-oriented programming,AOP)

    IOC(控制反轉):?就是把要在程序中實例化的對象配置到文件中,在程序中不用new來產(chǎn)生,而是讓容器通過配置文件返回一個給你,好處就是當需要更改業(yè)務邏輯時,方便替換對接口的不同實現(xiàn)類。通俗理解:平常我們new一個實例,這個實例的控制權是我們程序員,而控制反轉是指new實例工作不由我們程序員來做而是交給spring容器來做。針對一個接口,我們可能會寫多個實現(xiàn)類,如果在代碼中、程序中對實現(xiàn)類的對象進行創(chuàng)建,當想更換實現(xiàn)類時(使用其他的實現(xiàn)類),就需要對代碼進行更改。

    AOP(面向切面編程):通過預編譯方式和運行期動態(tài)代理實現(xiàn)在不修改源代碼的情況下給程序動態(tài)統(tǒng)一添加功能的一種技術。將日志記錄,性能統(tǒng)計,安全控制,事務處理,異常處理等代碼從業(yè)務邏輯代碼中劃分出來。基本實現(xiàn)就是對相關的方法進行攔截,添加所需的處理動作。

    Spring有兩種不同的容器:

    Bean工廠(org.springframework.beans.factory.BeanFactory)是最簡單的容器(是Spring基本的IOC容器),提供了基礎的依賴注入支持

    應用上下文(org.springframework.context.ApplicationContext)建立在Bean工廠基礎之上,提供了系統(tǒng)構架服務

    參考閱讀:https://blog.csdn.net/yks0527/article/details/54093490

    • 常見的排序算法有哪些?復雜度O(n)的排序算法?

    /** *冒泡排序 *將序列中所有元素兩兩比較,將最大的放在最后面。 *將剩余序列中所有元素兩兩比較,將最大的放在最后面。 *重復第二步,直到只剩下一個數(shù)。 */ public void bubbleSort(int []a){int len=a.length;for(int i=0;i<len;i++){for(int j=0;j<len-i-1;j++){//注意第二重循環(huán)的條件if(a[j]>a[j+1]){int temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}}

    延伸閱讀:https://www.cnblogs.com/guoyaohua/p/8600214.html

    • Solr,mongoDB,redis,zookeeper,Hadoop是什么框架?分別適合什么場景使用?

    Solr:是一個獨立的企業(yè)級搜索應用服務器,是一款非常優(yōu)秀的全文搜索引擎,它對外提供類似于Web-service的API接口。用戶可以通過http請求,向搜索引擎服務器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,并得到XML格式的返回結果。它的主要特性包括:高效、靈活的緩存功能,垂直搜索功能,高亮顯示搜索結果,通過索引復制來提高可用性,提供一套強大Data Schema來定義字段,類型和設置文本分析,提供基于Web的管理界面等。

    MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫。Mongo最大的特點是它支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現(xiàn)類似關系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引。它的特點是高性能、易部署、易使用,存儲數(shù)據(jù)非常方便。主要功能特性有:*面向集合存儲,易存儲對象類型的數(shù)據(jù)。*模式自由。*支持動態(tài)查詢。*支持完全索引,包含內(nèi)部對象。*支持查詢。*支持復制和故障恢復。*使用高效的二進制數(shù)據(jù)存儲,包括大型對象(如視頻等)。*自動處理碎片,以支持云計算層次的擴展性。*支持RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。*文件存儲格式為BSON(一種JSON的擴展)。*可通過網(wǎng)絡訪問。所謂“面向集合”(Collection-Oriented),意思是數(shù)據(jù)被分組存儲在數(shù)據(jù)集中,被稱為一個集合(Collection)。MongoDB已經(jīng)在多個站點部署,主要適用場景:1)網(wǎng)站實時數(shù)據(jù)處理。它非常適合實時的插入、更新與查詢,并具備網(wǎng)站實時數(shù)據(jù)存儲所需的復制及高度伸縮性。2)緩存。由于性能很高,它適合作為信息基礎設施的緩存層。在系統(tǒng)重啟之后,由它搭建的持久化緩存層可以避免下層的數(shù)據(jù)源過載。3)高伸縮性的場景。非常適合由數(shù)十或數(shù)百臺服務器組成的數(shù)據(jù)庫,它的路線圖中已經(jīng)包含對MapReduce引擎的內(nèi)置支持。不適用場景:1)要求高度事務性的系統(tǒng)。2)傳統(tǒng)的商業(yè)智能應用。3)復雜的跨文檔(表)級聯(lián)查詢。

    Redis:是一個開源的使用ANSI?C語言編寫、支持網(wǎng)絡、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。redis是一個key-value存儲系統(tǒng)。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現(xiàn)了master-slave(主從)同步。redis使用了兩種文件格式:全量數(shù)據(jù)和增量請求。適用場景:1)配合關系型數(shù)據(jù)庫做高速緩存,;)緩存高頻次訪問的數(shù)據(jù),降低數(shù)據(jù)庫io;3)分布式架構,做session共享;4)可以持久化特定數(shù)據(jù);5)利用zset類型可以存儲排行榜;6)利用list的自然時間排序存儲最新n個數(shù)據(jù);數(shù)據(jù)高并發(fā)的讀寫,海量數(shù)據(jù)的讀寫,對擴展性要求高的數(shù)據(jù);不適場景:需要事務支持(非關系型數(shù)據(jù)庫)基于sql結構化查詢儲存,關系復雜。參考延伸:https://www.cnblogs.com/xiaoxi/p/7007695.html

    ZooKeeper:是一個分布式的,開放源碼的分布式應用程序協(xié)調(diào)服務,是Google的Chubby一個開源的實現(xiàn),是Hadoop和Hbase的重要組件。它是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。目標就是封裝好復雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)提供給用戶。

    Hadoop:實現(xiàn)了一個分布式文件系統(tǒng)(Hadoop Distributed File System),簡稱HDFS。HDFS有高容錯性的特點,并且設計用來部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來訪問應用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streaming access)文件系統(tǒng)中的數(shù)據(jù)。框架最核心的設計就是:HDFS和MapReduce。HDFS為海量的數(shù)據(jù)提供了存儲,而MapReduce則為海量的數(shù)據(jù)提供了計算。

    Hadoop是一個能夠讓用戶輕松架構和使用的分布式計算平臺。用戶可以輕松地在Hadoop上開發(fā)和運行處理海量數(shù)據(jù)的應用程序。它主要有以下幾個優(yōu)點:

  • 高可靠性。Hadoop按位存儲和處理數(shù)據(jù)的能力值得人們信賴。
  • 高擴展性。Hadoop是在可用的計算機集簇間分配數(shù)據(jù)并完成計算任務的,這些集簇可以方便地擴展到數(shù)以千計的節(jié)點中。
  • 高效性。Hadoop能夠在節(jié)點之間動態(tài)地移動數(shù)據(jù),并保證各個節(jié)點的動態(tài)平衡,因此處理速度非常快。
  • 高容錯性。Hadoop能夠自動保存數(shù)據(jù)的多個副本,并且能夠自動將失敗的任務重新分配。
  • 低成本。與一體機、商用數(shù)據(jù)倉庫以及QlikView、Yonghong Z-Suite等數(shù)據(jù)集市相比,hadoop是開源的,項目的軟件成本因此會大大降低。
    • 索引的數(shù)據(jù)結構是什么?

    B-樹(B-tree),散列(Hash),k-d 樹(k-d tree),點四叉樹(Point Quadtree)

    1.什么是索引:索引是建立在表的一列或多個列上的輔助對象,目的是加快訪問表中的數(shù)據(jù);
      Oracle存儲索引的數(shù)據(jù)結構是B*樹(平衡樹),位圖索引也是如此,只不過是葉子節(jié)點不同B*數(shù)索引;
      索引由根節(jié)點、分支節(jié)點和葉子節(jié)點組成,上級索引塊包含下級索引塊的索引數(shù)據(jù),葉節(jié)點包含索引數(shù)據(jù)和確定行實際位置的rowid。

    2.使用索引的目的:1)加快查詢速度;2)減少I/O操作;3)消除磁盤排序(索引能加快排序速度)

    3.何時使用索引:查詢返回的記錄數(shù)?? 排序表<40%???? ,對非排序表?<7%, 表的碎片較多(頻繁增加、刪除)

    4.索引的種類:非唯一索引(最常用),唯一索引,位圖索引,局部有前綴分區(qū)索引,局部無前綴分區(qū)索引,全局有前綴分區(qū)索引
    ,散列分區(qū)索引,基于函數(shù)的索引

    參考閱讀:https://blog.csdn.net/w1014074794/article/details/48810805

    https://www.cnblogs.com/liuning8023/archive/2012/11/15/2728536.html

    • spring boot 自動配置的原理是什么?什么場景適合用spring boot?

    SpringBoot 自動配置主要通過?@EnableAutoConfiguration,?@Conditional,?@EnableConfigurationProperties?或者?@ConfigurationProperties?等幾個注解來進行自動配置完成的。

    @EnableAutoConfiguration?開啟自動配置,主要作用就是調(diào)用?Spring-Core?包里的?loadFactoryNames(),將?autoconfig?包里的已經(jīng)寫好的自動配置加載進來。

    @Conditional?條件注解,通過判斷類路徑下有沒有相應配置的?jar?包來確定是否加載和自動配置這個類。

    @EnableConfigurationProperties?的作用就是,給自動配置提供具體的配置參數(shù),只需要寫在?application.properties?中,就可以通過映射寫入配置類的?POJO?屬性中。

    在微服務概念興起的今天,很多公司轉型使用微服務作為架構。在技術選型上Spring Cloud 是非常好的選擇,它提供了一站式的分布式系統(tǒng)解決方案,而Spring Cloud中的每個組件都是基于Spring Boot構建的,Spring Boot提供J2EE一站式解決方案,具有以下優(yōu)點:

  • 快速創(chuàng)建獨立運行的Spring項目以及與主流框架集成
  • 使用嵌入式的Servlet容器,應用無需打成WAR包
  • starters自動依賴與版本控制
  • 大量的自動配置,簡化開發(fā),也可修改默認值
  • 無需配置XML,無代碼生成,開箱即用
  • 準生產(chǎn)環(huán)境的運行時應用監(jiān)控
  • 與云計算的天然集成
  • 參考閱讀:https://www.cnblogs.com/leihuazhe/p/7743479.html

    https://www.cnblogs.com/jiadp/p/9276826.html

    • spring cloud是什么?它的作用和底層實現(xiàn)原理是什么?什么場景適合用spring cloud?

    spring cloud 是基于spring boot實現(xiàn)的微服務架構開發(fā)工具,他為微服務中設計的配置管理、服務治理、斷路器、智能路由、微代理、控制總線、全局鎖、決策精選、分布式會話和集群狀態(tài)管理等操作提供了一套簡單的開發(fā)方式。?

    參考延伸:https://www.cnblogs.com/sessionbest/p/9396728.html? ?(圖解)

    https://blog.csdn.net/Shinlyzsljay/article/details/79162270

    https://blog.csdn.net/lchq1995/article/details/84234958

    Ribbon:客戶端負載均衡,重試機制。

    Hystrix:客戶端容錯保護,服務熔斷、請求緩存、請求合并、依賴隔離。

    Feign:聲明式服務調(diào)用,本質(zhì)上就是Ribbon+Hystrix(優(yōu)化代碼,避免直接使用RestTemplate的混亂)

    Bus:消息總線,配合Config倉庫修改的一種Stream實現(xiàn),獨自啟動不需要依賴其它組件。

    Eureka:服務注冊中心,特性有失效剔除、服務保護。

    DashboardHystrix:儀表盤,監(jiān)控集群模式和單點模式,其中集群模式需要收集器Turbine配合。

    Zuul:API服務網(wǎng)關,功能有路由分發(fā)和過濾。

    還有其它服務空間,包括configuration等等

    ?延伸閱讀:https://www.iteye.com/news/32734? ? (從架構演進的角度聊聊 Spring Cloud 都做了些什么?)

    • java json遍歷的算法?
    /*Java遍歷JSON,Iterator迭代器遍歷取值*/ public static void main(String[] args) {String s = "{'A':{'a':'1' ,'aa':'11'},'B':{'b':'2' ,'bb':'22'}}" ;JSONObject jsonObject1=JSONObject.fromObject(s);Iterator<String> iterator1 =jsonObject1.keys();while(iterator1.hasNext()){String key1 = iterator1.next();String value1 = jsonObject1.getString(key1);System.out.println(key1);JSONObject jsonObject2=JSONObject.fromObject(value1);Iterator<String> iterator2 =jsonObject2.keys();while(iterator2.hasNext()){String key2 = iterator2.next();String value2 = jsonObject2.getString(key2);System.out.println(" - "+key2);System.out.println(" -- "+value2);}}}

    延伸參考:https://blog.csdn.net/qq_35893120/article/details/84288551

    • java集合類
  • ArrayList與LinkedList的區(qū)別
  • ArrayList:底層以數(shù)組的方式實現(xiàn)

    LinkedList:底層采用雙鏈表的方式實現(xiàn),都實現(xiàn)了List接口

    延伸鏈接:https://blog.csdn.net/bjzhuhehe/article/details/72230559

    HashMap和Hashtable都實現(xiàn)了Map接口,但決定用哪一個之前先要弄清楚它們之間的分別。主要的區(qū)別有:線程安全性,同步(synchronization),以及速度。HashMap幾乎可以等價于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受為null的鍵值(key)和值(value),而Hashtable則不行)。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的擴展性更好。

    HashMap實際上是一個“鏈表散列”的數(shù)據(jù)結構,即數(shù)組和鏈表的結合體。

    數(shù)組:存儲區(qū)間連續(xù),占用內(nèi)存嚴重,尋址容易,插入刪除困難;?

    鏈表:存儲區(qū)間離散,占用內(nèi)存比較寬松,尋址困難,插入刪除容易;

    • java遍歷Map的方式有哪些?(四種遍歷map的方式)
    import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set;public class MapT {public static void main(String[] args) {Map<Integer,String> map=new HashMap<>();map.put(1,"第一個");map.put(2,"第二個");map.put(3,"第三個");map.put(4,"第四個");//第一種:先得到key的值 然后通過key值得到value值Set<Integer> set=map.keySet();//這里的泛型是key值得泛型for(Integer integer:set){System.out.println(integer+"->"+map.get(integer));//key->value}//第二種:通過Map.values()遍歷所有的value但是不能遍歷keyfor(String s:map.values()){System.out.println(s);}//第三種:通過Map.entrySet使用迭代器iterator遍歷key和valueIterator<Map.Entry<Integer,String>> iterable=map.entrySet().iterator();while(iterable.hasNext()){Map.Entry<Integer,String>entry=iterable.next();System.out.println(entry.getKey()+"->"+entry.getValue());}//第四種:直接通過Map.entrySet遍歷key和value//最常見for(Map.Entry<Integer,String> entry:map.entrySet()){System.out.println(entry.getKey()+"->"+entry.getValue());}//注:Map.Entry方法解釋//Map.Entry是Map聲明的一個內(nèi)部接口,此接口為泛型,定義為Entry<K,V>。它表示Map中的一個實體(一個key-value對)} }

    ?

    ?

    總結

    以上是生活随笔為你收集整理的201902-Java面试总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。