最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java研發(fā)面試99題(含答案):JVM+Spring+MySQL+線程池+鎖

  發(fā)布時(shí)間:2019-07-16 16:17:46   作者:孤獨(dú)的愛碼仕   我要評(píng)論
這篇文章主要介紹了Java研發(fā)面試99題,主要包括了JVM,Spring,MySQL,線程池,鎖等,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

JVM的內(nèi)存結(jié)構(gòu)

根據(jù) JVM 規(guī)范,JVM 內(nèi)存共分為虛擬機(jī)棧、堆、方法區(qū)、程序計(jì)數(shù)器、本地方法棧五個(gè)部分。

1. Java虛擬機(jī)棧:線程私有;每個(gè)方法在執(zhí)行的時(shí)候會(huì)創(chuàng)建一個(gè)棧幀,存儲(chǔ)了局部變量表,操作數(shù)棧,動(dòng)態(tài)連接,方法返回地址等;每個(gè)方法從調(diào)用到執(zhí)行完畢,對(duì)應(yīng)一個(gè)棧幀在虛擬機(jī)棧中的入棧和出棧。

2. 堆:線程共享;被所有線程共享的一塊內(nèi)存區(qū)域,在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建,用于存放對(duì)象實(shí)例。

3. 方法區(qū):線程共享;被所有線程共享的一塊內(nèi)存區(qū)域;用于存儲(chǔ)已被虛擬機(jī)加載的類信息,常量,靜態(tài)變量等。

4. 程序計(jì)數(shù)器:線程私有;是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器,每條線程都要有一個(gè)獨(dú)立的程序計(jì)數(shù)器,這類內(nèi)存也稱為“線程私有”的內(nèi)存。

5. 本地方法棧:線程私有;主要為虛擬機(jī)使用到的Native方法服務(wù)。

為什么要用線程池

那先要明白什么是線程池

線程池是指在初始化一個(gè)多線程應(yīng)用程序過(guò)程中創(chuàng)建一個(gè)線程集合,然后在需要執(zhí)行新的任務(wù)時(shí)重用這些線程而不是新建一個(gè)線程。

使用線程池的好處

  1. 線程池改進(jìn)了一個(gè)應(yīng)用程序的響應(yīng)時(shí)間。由于線程池中的線程已經(jīng)準(zhǔn)備好且等待被分配任務(wù),應(yīng)用程序可以直接拿來(lái)使用而不用新建一個(gè)線程。
  2. 線程池節(jié)省了CLR 為每個(gè)短生存周期任務(wù)創(chuàng)建一個(gè)完整的線程的開銷并可以在任務(wù)完成后回收資源。
  3. 線程池根據(jù)當(dāng)前在系統(tǒng)中運(yùn)行的進(jìn)程來(lái)優(yōu)化線程時(shí)間片。
  4. 線程池允許我們開啟多個(gè)任務(wù)而不用為每個(gè)線程設(shè)置屬性。
  5. 線程池允許我們?yōu)檎趫?zhí)行的任務(wù)的程序參數(shù)傳遞一個(gè)包含狀態(tài)信息的對(duì)象引用。
  6. 線程池可以用來(lái)解決處理一個(gè)特定請(qǐng)求最大線程數(shù)量限制問(wèn)題。

msyql優(yōu)化經(jīng)驗(yàn)

1. 對(duì)查詢進(jìn)行優(yōu)化,應(yīng)盡量避免全表掃描,首先應(yīng)考慮在 where 及 order by 涉及的列上建立索引。

2. 應(yīng)盡量避免在 where 子句中使用!=或<>操作符,否則引擎將放棄使用索引而進(jìn)行全表掃描。

3. 盡量使用數(shù)字型字段,若只含數(shù)值信息的字段盡量不要設(shè)計(jì)為字符型,這會(huì)降低查詢和連接的性能,并會(huì)增加存儲(chǔ)開銷。這是因?yàn)橐嬖谔幚聿樵兒瓦B接時(shí)會(huì)逐個(gè)比較字符串中每一個(gè)字符,而對(duì)于數(shù)字型而言只需要比較一次就夠了。

4. 任何地方都不要使用 select * from t ,用具體的字段列表代替“*”,不要返回用不到的任何字段。

5. 避免頻繁創(chuàng)建和刪除臨時(shí)表,以減少系統(tǒng)表資源的消耗。諸如此類,等等等等......

什么是線程死鎖?死鎖如何產(chǎn)生?如何避免線程死鎖?

死鎖的介紹:

線程死鎖是指由于兩個(gè)或者多個(gè)線程互相持有對(duì)方所需要的資源,導(dǎo)致這些線程處于等待狀態(tài),無(wú)法前往執(zhí)行。當(dāng)線程進(jìn)入對(duì)象的synchronized代碼塊時(shí),便占有了資源,直到它退出該代碼塊或者調(diào)用wait方法,才釋放資源,在此期間,其他線程將不能進(jìn)入該代碼塊。當(dāng)線程互相持有對(duì)方所需要的資源時(shí),會(huì)互相等待對(duì)方釋放資源,如果線程都不主動(dòng)釋放所占有的資源,將產(chǎn)生死鎖。

死鎖的產(chǎn)生的一些特定條件:

  1. 互斥條件:進(jìn)程對(duì)于所分配到的資源具有排它性,即一個(gè)資源只能被一個(gè)進(jìn)程占用,直到被該進(jìn)程釋放 。
  2. 請(qǐng)求和保持條件:一個(gè)進(jìn)程因請(qǐng)求被占用資源而發(fā)生阻塞時(shí),對(duì)已獲得的資源保持不放。
  3. 不剝奪條件:任何一個(gè)資源在沒被該進(jìn)程釋放之前,任何其他進(jìn)程都無(wú)法對(duì)他剝奪占用。
  4. 循環(huán)等待條件:當(dāng)發(fā)生死鎖時(shí),所等待的進(jìn)程必定會(huì)形成一個(gè)環(huán)路(類似于死循環(huán)),造成永久阻塞。
     

如何避免:

1. 加鎖順序:當(dāng)多個(gè)線程需要相同的一些鎖,但是按照不同的順序加鎖,死鎖就很容易發(fā)生。如果能確保所有的線程都是按照相同的順序獲得鎖,那么死鎖就不會(huì)發(fā)生。當(dāng)然這種方式需要你事先知道所有可能會(huì)用到的鎖,然而總有些時(shí)候是無(wú)法預(yù)知的。

2. 加鎖時(shí)限:加上一個(gè)超時(shí)時(shí)間,若一個(gè)線程沒有在給定的時(shí)限內(nèi)成功獲得所有需要的鎖,則會(huì)進(jìn)行回退并釋放所有已經(jīng)獲得的鎖,然后等待一段隨機(jī)的時(shí)間再重試。但是如果有非常多的線程同一時(shí)間去競(jìng)爭(zhēng)同一批資源,就算有超時(shí)和回退機(jī)制,還是可能會(huì)導(dǎo)致這些線程重復(fù)地嘗試但卻始終得不到鎖。

3. 死鎖檢測(cè):死鎖檢測(cè)即每當(dāng)一個(gè)線程獲得了鎖,會(huì)在線程和鎖相關(guān)的數(shù)據(jù)結(jié)構(gòu)中(map、graph等等)將其記下。除此之外,每當(dāng)有線程請(qǐng)求鎖,也需要記錄在這個(gè)數(shù)據(jù)結(jié)構(gòu)中。死鎖檢測(cè)是一個(gè)更好的死鎖預(yù)防機(jī)制,它主要是針對(duì)那些不可能實(shí)現(xiàn)按序加鎖并且鎖超時(shí)也不可行的場(chǎng)景。

spring中Bean的作用域

1. singleton:Spring IoC容器中只會(huì)存在一個(gè)共享的Bean實(shí)例,無(wú)論有多少個(gè)Bean引用它,始終指向同一對(duì)象。Singleton作用域是Spring中的缺省作用域。

2. prototype:每次通過(guò)Spring容器獲取prototype定義的bean時(shí),容器都將創(chuàng)建一個(gè)新的Bean實(shí)例,每個(gè)Bean實(shí)例都有自己的屬性和狀態(tài),而singleton全局只有一個(gè)對(duì)象。

3. request:在一次Http請(qǐng)求中,容器會(huì)返回該Bean的同一實(shí)例。而對(duì)不同的Http請(qǐng)求則會(huì)產(chǎn)生新的Bean,而且該bean僅在當(dāng)前Http Request內(nèi)有效。

4. session:在一次Http Session中,容器會(huì)返回該Bean的同一實(shí)例。而對(duì)不同的Session請(qǐng)求則會(huì)創(chuàng)建新的實(shí)例,該bean實(shí)例僅在當(dāng)前Session內(nèi)有效。

5. global Session:在一個(gè)全局的Http Session中,容器會(huì)返回該Bean的同一個(gè)實(shí)例,僅在使用portlet context時(shí)有效。

Spring框架中都用到了哪些設(shè)計(jì)模式?

1. 代理模式:在AOP和remoting中被用的比較多。

2. 單例模式:在spring配置文件中定義的bean默認(rèn)為單例模式。

3. 模板方法模式:用來(lái)解決代碼重復(fù)的問(wèn)題。

4. 前端控制器模式:Spring提供了DispatcherServlet來(lái)對(duì)請(qǐng)求進(jìn)行分發(fā)。

5. 依賴注入模式:貫穿于BeanFactory / ApplicationContext接口的核心理念。

6. 工廠模式:BeanFactory用來(lái)創(chuàng)建對(duì)象的實(shí)例。

springmvc的核心是什么,請(qǐng)求的流程是怎么處理的,控制反轉(zhuǎn)怎么實(shí)現(xiàn)的

核心:控制反轉(zhuǎn)和面向切面

請(qǐng)求處理流程:

  1. 首先用戶發(fā)送請(qǐng)求到前端控制器,前端控制器根據(jù)請(qǐng)求信息(如URL)來(lái)決定選擇哪一個(gè)頁(yè)面控制器進(jìn)行處理并把請(qǐng)求委托給它,即以前的控制器的控制邏輯部分;
  2. 頁(yè)面控制器接收到請(qǐng)求后,進(jìn)行功能處理,首先需要收集和綁定請(qǐng)求參數(shù)到一個(gè)對(duì)象,并進(jìn)行驗(yàn)證,然后將命令對(duì)象委托給業(yè)務(wù)對(duì)象進(jìn)行處理;處理完畢后返回一個(gè)ModelAndView(模型數(shù)據(jù)和邏輯視圖名);
  3. 前端控制器收回控制權(quán),然后根據(jù)返回的邏輯視圖名,選擇相應(yīng)的視圖進(jìn)行渲染,并把模型數(shù)據(jù)傳入以便視圖渲染;
  4. 前端控制器再次收回控制權(quán),將響應(yīng)返回給用戶。

控制反轉(zhuǎn)如何實(shí)現(xiàn):

  1. 我們每次使用spring框架都要配置xml文件,這個(gè)xml配置了bean的id和class。
  2. spring中默認(rèn)的bean為單實(shí)例模式,通過(guò)bean的class引用反射機(jī)制可以創(chuàng)建這個(gè)實(shí)例。
  3. 因此,spring框架通過(guò)反射替我們創(chuàng)建好了實(shí)例并且替我們維護(hù)他們。
  4. A需要引用B類,spring框架就會(huì)通過(guò)xml把B實(shí)例的引用傳給了A的成員變量。

BAT大廠Java高級(jí)面試題常見30問(wèn)

Spring DAO 中最常用的類是什么?
如何在Spring應(yīng)用中使用SLF4J?
Spring bean 的默認(rèn)作用范圍是?
使用@Required但不關(guān)聯(lián)bean 來(lái)注解setter方法,將會(huì)發(fā)生?
已知一棵二叉樹前序遍歷和中序遍歷分別為ABDEGCFH和DBGEACHF,則該二叉樹的后序遍歷為?
volatile關(guān)鍵字是否能保證線程安全?
Java能不能不通過(guò)構(gòu)造函數(shù)創(chuàng)建對(duì)象?
Java程序的并發(fā)機(jī)制是?
方法resume()負(fù)責(zé)恢復(fù)哪些線程的執(zhí)行?
什么是LinkedHashSet?
什么是可變參數(shù)?
斷言的用途?
什么時(shí)候使用斷言?
什么是垃圾回收?
用一個(gè)例子解釋垃圾回收?
什么時(shí)候運(yùn)行垃圾回收?
垃圾回收的最佳做法?
什么是初始化數(shù)據(jù)塊?
什么是靜態(tài)初始化器?
什么是實(shí)例初始化塊?
什么是正則表達(dá)式?
什么是令牌化?
給出令牌化的例子?
如何使用掃描器類(Scanner Class)令牌化?
如何添加小時(shí)(hour)到一個(gè)日期對(duì)象(Date Objects)?
如何格式化日期對(duì)象?
Java中日歷類(Calendar Class)的用途?
如何在Java中獲取日歷類的實(shí)例?
解釋一些日歷類中的重要方法?
數(shù)字格式化類(Number Format Class)的用途?

相關(guān)文章

  • 10道JVM常見面試題解析(附答案)

    這篇文章主要介紹了10道JVM常見面試題解析(附答案),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)
    2020-09-04
  • JVM相關(guān)面試題及答案(小結(jié))

    這篇文章主要介紹了JVM相關(guān)面試題及答案(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-02
  • 2020面試阿里字節(jié)跳動(dòng)90%被問(wèn)到的JVM面試題附答案(史上最全)

    這篇文章主要介紹了2020面試阿里字節(jié)跳動(dòng)90%被問(wèn)到的JVM面試題附答案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-15
  • 2020年JVM高頻率面試題整理

    這篇文章主要介紹了2020年JVM高頻率面試題整理,真是小編下了血本給大家整理出來(lái)的,值得大家收藏,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-09
  • JVM面試題小結(jié)(2020最新版)

    這篇文章主要介紹了JVM面試題小結(jié)(2020最新版),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-21
  • 2019年JVM面試都問(wèn)了什么?(附答案解析)

    這篇文章主要介紹了2019年JVM面試都問(wèn)了什么?(附答案解析),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-04
  • 講一講JVM的組成(Java經(jīng)典面試題)

    JVM(Java 虛擬機(jī))算是面試必問(wèn)的問(wèn)題的了,而但凡問(wèn) JVM 一定會(huì)問(wèn)的第一個(gè)問(wèn)題就是:講一講 JVM 的組成?那本文就注重講一下 JVM 的組成,感興趣的可以了解一下
    2019-04-10
  • 30道有趣的JVM面試題(小結(jié))

    這篇文章主要介紹了30道有趣的JVM面試題(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-26

最新評(píng)論

廉江市| 上思县| 西平县| 弥渡县| 友谊县| 措勤县| 泸定县| 江永县| 筠连县| 福建省| 沈丘县| 长泰县| 古蔺县| 若羌县| 开江县| 舞钢市| 呼和浩特市| 淮滨县| 黑河市| 江源县| 东兴市| 门头沟区| 天全县| 屯昌县| 麦盖提县| 郁南县| 岱山县| 湟中县| 区。| 油尖旺区| 荥阳市| 绥化市| 金寨县| 平凉市| 嘉义市| 嘉义市| 化德县| 板桥市| 逊克县| 外汇| 康马县|