京東Java算法筆試精選題

京東Java算法筆試精選題

長沙牛耳教育      2022-04-11 02:56:01     6

京東Java算法筆試精選題,  1、set集合從原理上如何保證不重復  1)在往set中添加元素時,如果指定元素不存在,則添加成功。也就是說,如果set中不存在

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細介紹



  1、set集合從原理上如何保證不重復


  1)在往set中添加元素時,如果指定元素不存在,則添加成功。也就是說,如果set中不存在(e==null ? e1==null : e.queals(e1))的元素e1,則e1能添加到set中。


  2)具體來講:當向HashSet中添加元素的時候,首先計算元素的hashcode值,然后用這個(元素的hashcode)%(HashMap集合的大小)+1計算出這個元素的存儲位置,如果這個位置位空,就將元素添加進去;如果不為空,則用equals方法比較元素是否相等,相等就不添加,否則找一個空位添加。


  2、HashMap和HashTable的主要區(qū)別是什么?,兩者底層實現(xiàn)的數(shù)據(jù)結(jié)構(gòu)是什么?


  HashMap和HashTable的區(qū)別:


  二者都實現(xiàn)了Map 接口,是將惟一鍵映射到特定的值上;主要區(qū)別在于:


  1)HashMap 沒有排序,允許一個null 鍵和多個null 值,而Hashtable 不允許;


  2)HashMap 把Hashtable 的contains 方法去掉了,改成containsvalue 和containsKey,因為contains 方法容易讓人引起誤解;


  3)Hashtable 繼承自Dictionary 類,HashMap 是Java1.2 引進的Map 接口的實現(xiàn);


  4)Hashtable 的方法是Synchronize 的,而HashMap 不是,在多個線程訪問Hashtable 時,不需要自己為它的方法實現(xiàn)同步,而HashMap 就必須為之提供外同步。Hashtable 和HashMap 采用的hash/rehash 算法大致一樣,所以性能不會有很大的差異。


  HashMap和HashTable的底層實現(xiàn)數(shù)據(jù)結(jié)構(gòu):


  HashMap和Hashtable的底層實現(xiàn)都是數(shù)組+鏈表結(jié)構(gòu)實現(xiàn)的


  3、HashMap何時擴容,擴容的算法是什么?


  HashMap何時擴容:


  當向容器添加元素的時候,會判斷當前容器的元素個數(shù),如果大于等于閾值---即當前數(shù)組的長度乘以加載因子的值的時候,就要自動擴容


  擴容的算法是什么:


  擴容(resize)就是重新計算容量,向HashMap對象里不停的添加元素,而HashMap對象內(nèi)部的數(shù)組無法裝載更多的元素時,對象就需要擴大數(shù)組的長度,以便能裝入更多的元素。當然Java里的數(shù)組是無法自動擴容的,方法是使用一個新的數(shù)組代替已有的容量小的數(shù)組


  4、Java的虛擬機JVM的兩個內(nèi)存:棧內(nèi)存和堆內(nèi)存的區(qū)別是什么?


  Java把內(nèi)存劃分成兩種:一種是棧內(nèi)存,一種是堆內(nèi)存。兩者的區(qū)別是:


  1)棧內(nèi)存:在函數(shù)中定義的一些基本類型的變量和對象的引用變量都在函數(shù)的棧內(nèi)存中分配。 當在一段代碼塊定義一個變量時,Java就在棧中為這個變量分配內(nèi)存空間,當超過變量的作用域后,Java會自動釋放掉為該變量所分配的內(nèi)存空間,該內(nèi)存空間可以立即被另作他用。


  2)堆內(nèi)存:堆內(nèi)存用來存放由new創(chuàng)建的對象和數(shù)組。在堆中分配的內(nèi)存,由Java虛擬機的自動垃圾回收器來管理。


  5、Java中對異常是如何進行分類的?


  異常整體分類:


  1)Java異常結(jié)構(gòu)中定義有Throwable類。 Exception和Error為其子類。


  2)其中Exception表示由于網(wǎng)絡(luò)故障、文件損壞、設(shè)備錯誤、用戶輸入非法情況導致的異常;


  3)而Error標識Java運行時環(huán)境出現(xiàn)的錯誤,例如:JVM內(nèi)存耗盡。


  6、數(shù)據(jù)庫設(shè)計中常講的三范式是指什么?


  1)第一范式1NF(域的原子性)


  如果數(shù)據(jù)庫表中的所有字段值都是不可分解的原子值,就說明該數(shù)據(jù)庫表滿足了第一范式


  2)第二范式2NF(表中除主鍵外的字段都完全依賴主鍵)


  第二范式是在第一范式基礎(chǔ)上建立的。第二范式有兩個重點:(1)表中必須有主鍵;(2)其他非主屬性必須完全依賴主鍵,不能只依賴主鍵的一部分(主要針對聯(lián)合主鍵而言)。


  3)第三范式3NF(表中除主鍵外的字段都完全直接依賴,不能是傳遞依賴)


  不能是傳遞依賴,即不能存在:非主鍵列 A 依賴于非主鍵列 B,非主鍵列 B 依賴于主鍵的情況。第二范式和第三范式區(qū)分的關(guān)鍵點:2NF:非主鍵列是否完全依賴于主鍵,還是依賴于主鍵的一部分;3NF:非主鍵列是直接依賴于主鍵,還是直接依賴于非主鍵列。


  7、Java中的線程池共有幾種?


  Java四種線程池


  第一種:newCachedThreadPool


  創(chuàng)建一個可根據(jù)需要創(chuàng)建新線程的線程池,但是在以前構(gòu)造的線程可用時將重用它們。


  第二種:newFixedThreadPool


  創(chuàng)建一個指定工作線程數(shù)量的線程池


  第三種:newScheduledThreadPool


  創(chuàng)建一個線程池,它可安排在給定延遲后運行命令或者定期地執(zhí)行。


  第四種:newSingleThreadExecutor


  創(chuàng)建一個使用單個 worker 線程的 Executor,以無界隊列方式來運行該線程。


  8、volatile和synchronized區(qū)別


  volatile和synchronized簡介:


  在Java中,為了保證多線程讀寫數(shù)據(jù)時保證數(shù)據(jù)的一致性,可以采用兩種方式:


  1)使用synchronized關(guān)鍵字


  2)使用volatile關(guān)鍵字:用一句話概括volatile,它能夠使變量在值發(fā)生改變時能盡快地讓其他線程知道。


  兩者的區(qū)別:


  1)volatile本質(zhì)是在告訴jvm當前變量在寄存器中的值是不確定的,需要從主存中讀取,synchronized則是鎖定當前變量,只有當前線程可以訪問該變量,其他線程被阻塞住.


  2)volatile僅能使用在變量級別,synchronized則可以使用在變量,方法.


  3)volatile僅能實現(xiàn)變量的修改可見性,而synchronized則可以保證變量的修改可見性和原子性.


  4)volatile不會造成線程的阻塞,而synchronized可能會造成線程的阻塞.


  9、Spring的特性


  1.方便解耦,簡化開發(fā)


  通過Spring提供的IoC容器,我們可以將對象之間的依賴關(guān)系交由Spring進行控制,避免硬編碼所造成的過度程序耦合。


  2.AOP編程的支持


  通過Spring提供的AOP功能,方便進行面向切面的編程。


  3.聲明事物的支持


  在Spring中,我們可以從單調(diào)煩悶的事務(wù)管理代碼中解脫出來,通過聲明式方式靈活地進行事務(wù)的管理,提高開發(fā)效率和質(zhì)量。


  4.方便程序的測試


  可以用非容器依賴的編程方式進行幾乎所有的測試工作。例如:Spring對Junit4支持,可以通過注解方便的測試Spring程序。


  5.方便集成各種優(yōu)秀框架


  Spring不排斥各種優(yōu)秀的開源框架,相反,Spring可以降低各種框架的使用難度,Spring提供了對各種優(yōu)秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。


  6.降低Java EE API的使用難度


  Spring對很多難用的Java EE API(如JDBC,JavaMail,遠程調(diào)用等)提供了一個薄薄的封裝層,通過Spring的簡易封裝,這些Java EE API的使用難度大為降低。


  10、spring aop的應(yīng)用場景:


  AOP用來封裝橫切關(guān)注點,具體可以在下面的場景中使用


  Authentication 權(quán)限


  Caching 緩存


  Context passing 內(nèi)容傳遞


  Error handling 錯誤處理


  Lazy loading 懶加載


  Debugging 調(diào)試


  logging, tracing, profiling and monitoring 記錄跟蹤 優(yōu)化 校準


  Performance optimization 性能優(yōu)化


  Persistence 持久化


  Resource pooling 資源池


  Synchronization 同步


  Transactions 事務(wù)



      以上就是長沙牛耳教育Java培訓機構(gòu)小編介紹的“京東Java算法筆試精選題”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。


相關(guān)推薦


最新最全java面試題及答案(初級到高級)


史上最全的中高級JAVA工程師面試題及答案匯總


Java高級開發(fā)工程師面試題


2019史上最全java面試題題庫大全800題


哪有資深java工程師面試題


Java筆試題庫

培訓啦提醒您:交易時請核實對方資質(zhì),對于過大宣傳或承諾需謹慎!任何要求預(yù)付定金、匯款等方式均存在風險,謹防上當。