大型互聯(lián)網(wǎng)企業(yè)精選Java筆試題目及答案

大型互聯(lián)網(wǎng)企業(yè)精選Java筆試題目及答案

長(zhǎng)沙一度軟件培訓(xùn)      2022-03-22 16:10:01     7

大型互聯(lián)網(wǎng)企業(yè)精選Java筆試題目及答案,1.set集合從原理上如何保證不重復(fù)在往set中添加元素時(shí),如果指定元素不存在,則添加成功。也就是說(shuō),如果set中不存在(e==null?e1

課程價(jià)格 請(qǐng)咨詢

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

詳細(xì)介紹

1.set集合從原理上如何保證不重復(fù)

  • 在往set中添加元素時(shí),如果指定元素不存在,則添加成功。也就是說(shuō),如果set中不存在(e==null?e1==null:e.queals(e1))的元素e1,則e1能添加到set中。
  • 具體來(lái)講:當(dāng)向HashSet中添加元素的時(shí)候,首先計(jì)算元素的hashcode值,然后用這個(gè)(元素的hashcode)%(HashMap集合的大?。?1計(jì)算出這個(gè)元素的存儲(chǔ)位置,如果這個(gè)位置位空,就將元素添加進(jìn)去;如果不為空,則用equals方法比較元素是否相等,相等就不添加,否則找一個(gè)空位添加。

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

HashMap和HashTable的區(qū)別:

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

  • HashMap沒(méi)有排序,允許一個(gè)null鍵和多個(gè)null值,而Hashtable不允許;
  • HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey,因?yàn)閏ontains方法容易讓人引起誤解;
  • Hashtable繼承自Dictionary類(lèi),HashMap是Java1.2引進(jìn)的Map接口的實(shí)現(xiàn);
  • Hashtable的方法是Synchronize的,而HashMap不是,在多個(gè)線程訪問(wèn)Hashtable時(shí),不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap就必須為之提供外同步。Hashtable和HashMap采用的hash/rehash算法大致一樣,所以性能不會(huì)有很大的差異。

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

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

3.HashMap何時(shí)擴(kuò)容,擴(kuò)容的算法是什么?

HashMap何時(shí)擴(kuò)容:

當(dāng)向容器添加元素的時(shí)候,會(huì)判斷當(dāng)前容器的元素個(gè)數(shù),如果大于等于閾值---即當(dāng)前數(shù)組的長(zhǎng)度乘以加載因子的值的時(shí)候,就要自動(dòng)擴(kuò)容

擴(kuò)容的算法是什么:

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

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

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

  • 棧內(nèi)存:在函數(shù)中定義的一些基本類(lèi)型的變量和對(duì)象的引用變量都在函數(shù)的棧內(nèi)存中分配。當(dāng)在一段代碼塊定義一個(gè)變量時(shí),Java就在棧中為這個(gè)變量分配內(nèi)存空間,當(dāng)超過(guò)變量的作用域后,Java會(huì)自動(dòng)釋放掉為該變量所分配的內(nèi)存空間,該內(nèi)存空間可以立即被另作他用。
  • 堆內(nèi)存:堆內(nèi)存用來(lái)存放由new創(chuàng)建的對(duì)象和數(shù)組。在堆中分配的內(nèi)存,由Java虛擬機(jī)的自動(dòng)垃圾回收器來(lái)管理。

5.Java中對(duì)異常是如何進(jìn)行分類(lèi)的?

異常整體分類(lèi):

  • Java異常結(jié)構(gòu)中定義有Throwable類(lèi)。Exception和Error為其子類(lèi)。
  • 其中Exception表示由于網(wǎng)絡(luò)故障、文件損壞、設(shè)備錯(cuò)誤、用戶輸入非法情況導(dǎo)致的異常;
  • 而Error標(biāo)識(shí)Java運(yùn)行時(shí)環(huán)境出現(xiàn)的錯(cuò)誤,例如:JVM內(nèi)存耗盡。

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

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

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

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

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

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

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

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

Java四種線程池

第一種:newCachedThreadPool

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

第二種:newFixedThreadPool

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

第三種:newScheduledThreadPool

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

第四種:newSingleThreadExecutor

創(chuàng)建一個(gè)使用單個(gè)worker線程的Executor,以無(wú)界隊(duì)列方式來(lái)運(yùn)行該線程。

8.volatile和synchronized區(qū)別

volatile和synchronized簡(jiǎn)介:

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

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

兩者的區(qū)別:

  • volatile本質(zhì)是在告訴jvm當(dāng)前變量在寄存器中的值是不確定的,需要從主存中讀取,synchronized則是鎖定當(dāng)前變量,只有當(dāng)前線程可以訪問(wèn)該變量,其他線程被阻塞住.
  • volatile僅能使用在變量級(jí)別,synchronized則可以使用在變量,方法.
  • volatile僅能實(shí)現(xiàn)變量的修改可見(jiàn)性,而synchronized則可以保證變量的修改可見(jiàn)性和原子性.
  • volatile不會(huì)造成線程的阻塞,而synchronized可能會(huì)造成線程的阻塞.

9.Spring的特性

(1)方便解耦,簡(jiǎn)化開(kāi)發(fā)

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

(2)AOP編程的支持

通過(guò)Spring提供的AOP功能,方便進(jìn)行面向切面的編程。

(3)聲明事物的支持

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

(4)方便程序的測(cè)試

可以用非容器依賴的編程方式進(jìn)行幾乎所有的測(cè)試工作。例如:Spring對(duì)Junit4支持,可以通過(guò)注解方便的測(cè)試Spring程序。

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

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

(6)降低JavaEEAPI的使用難度

Spring對(duì)很多難用的JavaEEAPI(如JDBC,JavaMail,遠(yuǎn)程調(diào)用等)提供了一個(gè)薄薄的封裝層,通過(guò)Spring的簡(jiǎn)易封裝,這些JavaEEAPI的使用難度大為降低。

10.springaop的應(yīng)用場(chǎng)景:

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

  • Authentication權(quán)限
  • Caching緩存
  • Contextpassing內(nèi)容傳遞
  • Errorhandling錯(cuò)誤處理
  • Lazyloading懶加載
  • Debugging調(diào)試
  • logging,tracing,profilingandmonitoring記錄跟蹤優(yōu)化校準(zhǔn)
  • Performanceoptimization性能優(yōu)化
  • Persistence持久化
  • Resourcepooling資源池
  • Synchronization同步
  • Transactions事務(wù)

以上就是長(zhǎng)沙一度軟件培訓(xùn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“大型互聯(lián)網(wǎng)企業(yè)精選Java筆試題目及答案”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過(guò)大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。