更新時(shí)間:2022-12-20 14:53:59 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1325次
小編發(fā)現(xiàn)網(wǎng)上有不少的Java相關(guān)面試題,但問題也同樣存在,第一就是面試題不全、第二就是沒有答案、第三有答案但未必會(huì)有解答思路等等,所以今天小編就根據(jù)以上問題,總結(jié)出了比較詳細(xì)的Java初級(jí)工程師面試題:
1.你對(duì)SpringMVC的了解
答:采用三層框架,降低代碼之間的耦合,提高代碼質(zhì)量。SpringMVC的重要核心組件有:前端控制器(dispatcherServlet), 處理器映射(handlerMapping), 處理器適配器(HandlerAdapter), 視圖解析器(ViewResolver)
工作流程
1.客戶端發(fā)送請(qǐng)求到前端控制器(中央處理器),前端控制器判斷請(qǐng)求是否符合格式,
如果符合格式到請(qǐng)求到達(dá)處理映射器,處理器映射器查找對(duì)應(yīng)的處理器,將查找到的結(jié)果(處理器路徑)返回給前端控制器,前端控制器到處理器適配器,處理器適配器進(jìn)行處理業(yè)務(wù),將業(yè)務(wù)執(zhí)行的結(jié)果返回給前端控制器,前端控制器到視圖解析器,進(jìn)行視圖解析,視圖解析后返回一個(gè)view(數(shù)據(jù))到前端控制器,前端控制器到視圖渲染,將渲染后的結(jié)果返回給客戶端
2.面向?qū)ο蟮奶卣饔心男?/strong>
封裝、繼承、多態(tài)、重載、重寫
(1)繼承:就是保留父類的屬性,開擴(kuò)新的東西。通過子類可以實(shí)現(xiàn)繼承,子類繼承父類的所有狀態(tài)和行為,同時(shí)添加自身的狀態(tài)和行為。
(2)封裝:就是類的私有化。將代碼及處理數(shù)據(jù)綁定在一起的一種編程機(jī)制,該機(jī)制保證程序和數(shù)據(jù)不受外部干擾。
(3)多態(tài):是允許將父對(duì)象設(shè)置成為和一個(gè)和多個(gè)它的子對(duì)象相等的技術(shù)。包括重載和重寫。重載為編譯時(shí)多態(tài),重寫是運(yùn)行時(shí)多態(tài)。
(4)重載:在同一個(gè)類中,方法名一樣。參數(shù)列表、方法體、返回值類型、訪問修飾符可以不一樣
(5)重寫:存在于子父類關(guān)系中,子類重寫父類方法,方法名一樣訪問權(quán)限修飾符大于等于父類,拋出異常范圍小于等于父類,參數(shù)列表一樣,方法體不一樣
3.抽象類和接口的區(qū)別
(1)抽象類中有抽象方法有構(gòu)造方法,構(gòu)造方法不能直接創(chuàng)建對(duì)象,可以有靜態(tài)代碼塊和靜態(tài)方法;子類繼承抽象類必須重寫所有抽象方法,否則把自己變成抽象類
(2)接口中只能有抽象方法,jdk1.8之后允許有普通方法,不能含有靜態(tài)代碼塊以及靜態(tài)方法
一個(gè)類只能繼承一個(gè)抽象類,而一個(gè)類卻可以實(shí)現(xiàn)多個(gè)接口
4.在java里面有反射,反射的用途
反射:動(dòng)態(tài)地發(fā)現(xiàn)和綁定類、方法、字段,以及所有其他的由于有所產(chǎn)生的的元素。通過反射,能夠在需要時(shí)完成創(chuàng)建實(shí)例、調(diào)用方法和訪問字段的工作。
在程序運(yùn)行中通過類名,可以調(diào)用這個(gè)類中的所有方法以及屬性
優(yōu)點(diǎn): 可以在程序運(yùn)行的過程中,操作這些對(duì)象。
可以解耦,提高程序的可擴(kuò)展性。
缺點(diǎn):因?yàn)槭荍VM操作,所以對(duì)于性能來說會(huì)有所下降。
容易對(duì)程序源碼造成一定的混亂。
用途:
1.在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類
2.在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象
3.在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法
3.在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法,通過反射甚至可以調(diào)用到private修飾的方法
4.生成動(dòng)態(tài)代理
5.實(shí)現(xiàn)線程的方法
1.繼承Thread類,重寫run方法
2.實(shí)現(xiàn)Runnable接口,重寫run方法,實(shí)現(xiàn)Runnable接口的實(shí)現(xiàn)類的實(shí)例對(duì)象作為Thread構(gòu)造函數(shù)的target
3.通過Callable和FutureTask創(chuàng)建線程
4.通過線程池創(chuàng)建線程
線程的物種狀態(tài):創(chuàng)建、就緒、運(yùn)行、阻塞、死亡
6.get和post的區(qū)別
(1)get:地址欄傳輸數(shù)據(jù),攜帶數(shù)據(jù)數(shù)量小,地址欄可見,速度快,不安全
(2)post:Tcp包傳輸數(shù)據(jù),攜帶數(shù)據(jù)量大,地址欄不可見,速度相對(duì)慢,安全
7.SpringBoot相對(duì)于SpringMVC優(yōu)勢(shì)
(1)SpringBoot減少了大量的配置文件,約定優(yōu)于配置 ,可以極大地簡(jiǎn)化了 spring 的配置流程,Spring Boot實(shí)現(xiàn)了自動(dòng)配置,降低了項(xiàng)目搭建的復(fù)雜度。
(2)Spring 是一個(gè)“引擎”;
Spring MVC 是基于Spring的一個(gè) MVC 框架 ;
Spring Boot 是基于Spring4的條件注冊(cè)的一套快速開發(fā)整合包。
8.在java里面常用的集合類都有哪些
(1)單集合:set不能重復(fù)(HashSet,LinkedHashSet,TreeSet)
List有序、可重復(fù)(ArrayList,LinkedList)
(2)雙列集合:Map(HashMap,TreeMap)
1、List(有序、可重復(fù))
List里存放的對(duì)象是有序的,同時(shí)也是可以重復(fù)的,List關(guān)注的是索引,擁有一系列和索引相關(guān)的方法,查詢速度快。因?yàn)橥鵯ist集合里插入或刪除數(shù)據(jù)時(shí),會(huì)伴隨著后面數(shù)據(jù)的移動(dòng),所以插入刪除數(shù)據(jù)速度慢。
ArrayList:基于數(shù)組實(shí)現(xiàn),查找、更新效率高,自動(dòng)擴(kuò)容1.5倍,初始容量10
LinkedList:基于雙向鏈表實(shí)現(xiàn),刪除插入效率高,鏈表是由節(jié)點(diǎn)組成的節(jié)點(diǎn)中分兩部分一部分存儲(chǔ)節(jié)點(diǎn)元素,另一部分存儲(chǔ)指針,指向下一個(gè)節(jié)點(diǎn),刪除一個(gè)元素,只要改變他前一個(gè)節(jié)點(diǎn)的指針指向就可以了
2、Set(不能重復(fù))
Set里存放的對(duì)象是無序,不能重復(fù)的,集合中的對(duì)象不按特定的方式排序,只是簡(jiǎn)單地把對(duì)象加入集合中。
HashSet,基于Hash表去重,重寫equals和hashcode
LinkedHashSet,通過比較器,實(shí)現(xiàn)Comparable重寫comporTo()方法,底層是紅黑樹
3、Map(鍵值對(duì)、鍵唯一、值不唯一)
Map集合中存儲(chǔ)的是鍵值對(duì),鍵不能重復(fù),值可以重復(fù)。根據(jù)鍵得到值,對(duì)map集合遍歷時(shí)先得到鍵的set集合,對(duì)set集合進(jìn)行遍歷,得到相應(yīng)的值。
HashMap,初始大小11,加載因子0.75,擴(kuò)容2倍+1
TreeMap,有序(自然升序)基于紅黑樹葉
集合的優(yōu)點(diǎn)
(1)使用核心集合類降低開發(fā)成本,而非實(shí)現(xiàn)我們自己的集合類。
(2)隨著使用經(jīng)過嚴(yán)格測(cè)試的集合框架類,代碼質(zhì)量會(huì)得到提高。
(3)通過使用JDK附帶的集合類,可以降低代碼維護(hù)成本。
(4)復(fù)用性和可操作性。
以上就是“Java初級(jí)工程師面試題常見問題集錦”,你能回答上來嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動(dòng)力節(jié)點(diǎn)Java官網(wǎng)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)