更新時間:2020-04-16 14:17:59 來源:動力節(jié)點 瀏覽2880次
HashMap何時擴容,擴容的算法是什么?
HashMap何時擴容:
當向容器添加元素的時候,會判斷當前容器的元素個數(shù),如果大于等于閾值---即當前數(shù)組的長度乘以加載因子的值的時候,就要自動擴容
擴容的算法是什么:
擴容(resize)就是重新計算容量,向HashMap對象里不停的添加元素,而HashMap對象內(nèi)部的數(shù)組無法裝載更多的元素時,對象就需要擴大數(shù)組的長度,以便能裝入更多的元素。當然Java里的數(shù)組是無法自動擴容的,方法是使用一個新的數(shù)組代替已有的容量小的數(shù)組
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虛擬機的自動垃圾回收器來管理。
Java中對異常是如何進行分類的?
異常整體分類:
1)Java異常結(jié)構(gòu)中定義有Throwable類。Exception和Error為其子類。
2)其中Exception表示由于網(wǎng)絡故障、文件損壞、設備錯誤、用戶輸入非法情況導致的異常;
3)而Error標識Java運行時環(huán)境出現(xiàn)的錯誤,例如:JVM內(nèi)存耗盡。
數(shù)據(jù)庫設計中常講的三范式是指什么?
1)第一范式1NF(域的原子性)
如果數(shù)據(jù)庫表中的所有字段值都是不可分解的原子值,就說明該數(shù)據(jù)庫表滿足了第一范式
2)第二范式2NF(表中除主鍵外的字段都完全依賴主鍵)
第二范式是在第一范式基礎(chǔ)上建立的。第二范式有兩個重點:(1)表中必須有主鍵;(2)其他非主屬性必須完全依賴主鍵,不能只依賴主鍵的一部分(主要針對聯(lián)合主鍵而言)。
3)第三范式3NF(表中除主鍵外的字段都完全直接依賴,不能是傳遞依賴)
不能是傳遞依賴,即不能存在:非主鍵列A依賴于非主鍵列B,非主鍵列B依賴于主鍵的情況。第二范式和第三范式區(qū)分的關(guān)鍵點:2NF:非主鍵列是否完全依賴于主鍵,還是依賴于主鍵的一部分;3NF:非主鍵列是直接依賴于主鍵,還是直接依賴于非主鍵列。
Java中的線程池共有幾種?
Java四種線程池
第一種:newCachedThreadPool
創(chuàng)建一個可根據(jù)需要創(chuàng)建新線程的線程池,但是在以前構(gòu)造的線程可用時將重用它們。
第二種:newFixedThreadPool
創(chuàng)建一個指定工作線程數(shù)量的線程池
第三種:newScheduledThreadPool
創(chuàng)建一個線程池,它可安排在給定延遲后運行命令或者定期地執(zhí)行。
第四種:newSingleThreadExecutor
創(chuàng)建一個使用單個worker線程的Executor,以無界隊列方式來運行該線程。
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可能會造成線程的阻塞.
Spring的特性
1.方便解耦,簡化開發(fā)
通過Spring提供的IoC容器,我們可以將對象之間的依賴關(guān)系交由Spring進行控制,避免硬編碼所造成的過度程序耦合。
2.AOP編程的支持
通過Spring提供的AOP功能,方便進行面向切面的編程。
3.聲明事物的支持
在Spring中,我們可以從單調(diào)煩悶的事務管理代碼中解脫出來,通過聲明式方式靈活地進行事務的管理,提高開發(fā)效率和質(zhì)量。
4.方便程序的測試
可以用非容器依賴的編程方式進行幾乎所有的測試工作。例如:Spring對Junit4支持,可以通過注解方便的測試Spring程序。
5.方便集成各種優(yōu)秀框架
Spring不排斥各種優(yōu)秀的開源框架,相反,Spring可以降低各種框架的使用難度,Spring提供了對各種優(yōu)秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。
6.降低JavaEEAPI的使用難度
Spring對很多難用的JavaEEAPI(如JDBC,JavaMail,遠程調(diào)用等)提供了一個薄薄的封裝層,通過Spring的簡易封裝,這些JavaEEAPI的使用難度大為降低。
以上就是動力節(jié)點java培訓機構(gòu)的小編針對“精選答案京東java筆試題目”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。