2018-最新java面試題(技術(shù)面試)_第1頁
2018-最新java面試題(技術(shù)面試)_第2頁
2018-最新java面試題(技術(shù)面試)_第3頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1、servlet執(zhí)行流程客戶端發(fā)出 http請求, web 服務(wù)器將請求轉(zhuǎn)發(fā)到 servlet 容器, servlet 容器解析url 并根據(jù) web。xml 找到相對應(yīng)的 servlet, 并將 request、response 對象傳遞給找到的 servlet,servlet 根據(jù) request 就可以知道是誰發(fā)出的請求 , 請求信息及其他信息,當 servlet 處理完業(yè)務(wù)邏輯后會將信息放入到response 并響應(yīng)到客戶端 .2、springMVC的執(zhí)行流程springMVC是由 dispatchservlet 為核心的分層控制框架。首先客戶端發(fā)出一個請求 web 服務(wù)器解析請求

2、url 并去匹配 dispatchservlet 的映射 url ,如果匹配上就將這個請求放入到 dispatchservlet,dispatchservlet 根據(jù) mapping 映射配置去尋找相對應(yīng)的 handel,然后把處理權(quán)交給找到的 handel,handel 封裝了處理業(yè)務(wù)邏輯的代碼,當handel 處理完后會返回一個邏輯視圖 modelandview 給 dispatchservlet, 此時的 modelandview 是一個邏輯視圖不是一個正式視圖, 所以 dispatchservlet 會通過 viewresource 視圖資源去解析 modelandview, 然后將解

3、析后的參數(shù)放到 view 中返回到客戶端并展現(xiàn)。3、給定一個 txt文件, 如何得到某字符串出現(xiàn)的次數(shù)File file = newFile( ”E:/test 。txt ”);InputStreamis = new FileInputStream(file );byteb = newbyte 1024;int a = is 。read( b );Stringstr = new String ( b ,0 ,a).split( " ”);int count= 0;for ( inti = 0; i< str 。length ;i+)if (”a”.equals ( str i)

4、 count +;System 。 out .println (count );4、Java 設(shè)計模式思想 ( 單列模式,工廠模式,策略模式,共23 種設(shè)計模式 )a) 單例模式:單例模式核心只需要 new 一個實例對象的模式, 比如數(shù)據(jù)庫連接,在線人數(shù)等, 一些網(wǎng)站上看到的在線人數(shù)統(tǒng)計就是通過單例模式實現(xiàn)的,把一個計時器存放在數(shù)據(jù)庫或者內(nèi)存中, 當有人登陸的時候取出來加一再放回去, 有人退出登陸的時候取出來減一再放回去,但是當有兩個人同時登陸的時候, 會同時取出計數(shù)器,同時加一,同時放回去,這樣的話數(shù)據(jù)就會錯誤,所以需要一個全 局變量的對象給全部人使用,只需要new 出一個實例對象,這就是單

5、例模式的應(yīng)用,并且單例模式節(jié)省資源, 因為它控制了實例對象的個數(shù), 并有利于 gc 回收。b) 策略模式: 就是將幾個類中公共的方法提取到一個新的類中, 從而使擴展更容易,保證代碼的可移植性, 可維護性強。比如有個需求是寫鴨子對象, 鴨子有叫, 飛,外形這三種方法, 如果每個鴨子類都寫這三個方法會出現(xiàn)代碼的冗余, 這時候我們可以把鴨子中的叫,飛,外形這三個方法提取出來,放到鴨父類中,讓每個鴨子都繼承這個鴨父類, 重寫這三個方法, 這樣封裝的代碼可移植性強, 當用戶提出新的需求比如鴨子會游泳, 那么對于我們 oo 程序員來講就非常簡單了我們只需要在鴨父類中加一個游泳的方法, 讓會游泳的鴨子重寫游

6、泳方法就可以了。c) 工廠模式:簡單的工廠模式主要是統(tǒng)一提供實例對象的引用,通過工廠模式接口獲取實例對象的引用。比如一個登陸功能,后端有三個類, controller 類,interface 類,實現(xiàn)接口的實現(xiàn)類 . 當客戶端發(fā)出一個請求,當請求傳到controller 類中時, controller 獲取接口的引用對象,而實現(xiàn)接口的實現(xiàn)類中封裝好了登陸 的業(yè)務(wù)邏輯代碼。當你需要加一個注冊需求的時候只需要在接口類中加一個注冊方法,實現(xiàn)類中實現(xiàn)方法 , controller 獲取接口的引用對象即可,不需要改動原來的代碼,這種做法是的可拓展性強。5、冒泡排序、二分查找a) 冒泡publicstat

7、icvoidmp (inta ) int swap = 0 ;for ( inti = 0 ; i < a.length ; i+)for ( intj = i; j < a。length ; j+) if (aj > a i) swap = ai;ai = aj; aj = swap ;System. out 。println(Arrays。toString(a));b) 二分查找 publicstaticint ef( inta, int tag ) intintfirstend= 0;= a。length ;for( inti = 0; i < a.length

8、; i+)int middle= ( first + end ) / 2;if ( tag =amiddle ) returnmiddle ;if (tag > a middle ) first = middle+ 1 ;if ( tag amiddle ) end = middle- 1;return0;6、對 ajax 的理解a) Ajax為異步請求,即局部刷新技術(shù),在傳統(tǒng)的頁面中,用戶需要點擊按鈕或者事件觸發(fā)請求 , 到刷新頁面,而異步技術(shù)為不需要點擊即可觸發(fā)事件 , 這樣使得用戶體驗感增強, 比如商城購物車的異步加載, 當你點擊商品時無需請求后臺而直接動態(tài)修改參數(shù)。9、父類與子類

9、之間的調(diào)用順序(打印結(jié)果)a) 父類靜態(tài)代碼塊b) 子類靜態(tài)代碼塊c) 父類構(gòu)造方法d) 子類構(gòu)造方法e) 子類普通方法f) 重寫父類的方法,則打印重寫后的方法10 、內(nèi)部類與外部類的調(diào)用a) 內(nèi)部類可以直接調(diào)用外部類包括 private的成員變量,使用外部類引用的 this。關(guān)鍵字調(diào)用即可b) 而外部類調(diào)用內(nèi)部類需要建立內(nèi)部類對象11 、多線程a)一個進程是一個獨立的運行環(huán)境,可以看做是一個程序,而線程可以看做是進程的一個任務(wù),比如QQ 是一個進程 , 而一個 QQ 窗口是一個線程 .b) 在多線程程序中, 多線程并發(fā)可以提高程序的效率, cpu 不會因為某個線程等待資源而進入空閑狀態(tài),它會

10、把資源讓給其他的線程。c) 用戶線程就是我們開發(fā)程序是創(chuàng)建的線程,而守護線程為系統(tǒng)線程,如JVM虛擬中的 GCd) 線程的優(yōu)先級別 : 每一個線程都有優(yōu)先級別,有限級別高的可以先獲取CPU資源使該線程從就緒狀態(tài)轉(zhuǎn)為運行狀態(tài). 也可以自定義線程的有限級別e) 死鎖:至少兩個以上線程爭取兩個以上cpu 資源,避免死鎖就避免使用嵌套鎖,只需要在他們需要同步的地方加鎖和避免無限等待12 、AOP 與 IOC的概念(即 spring的核心)a) IOC :Spring 是開源框架,使用框架可以使我們減少工作量,提高工作效率并且它是分層結(jié)構(gòu),即相對應(yīng)的層處理對應(yīng)的業(yè)務(wù)邏輯, 減少代碼的耦合度。而sprin

11、g 的核心是 IOC控制反轉(zhuǎn)和 AOP面向切面編程。 IOC控制反轉(zhuǎn)主要強調(diào)的是程序之間的關(guān)系是由容器控制的, 容器控制對象, 控制了對外部資源的獲取。 而反轉(zhuǎn)即為, 在傳統(tǒng)的編程中都是由我們創(chuàng)建對象獲取依賴對象,而在 IOC中是容器幫我們創(chuàng)建對象并注入依賴對象, 正是容器幫我們查找和注入對象, 對象是被獲取,所以叫反轉(zhuǎn)。b) AOP :面向切面編程, 主要是管理系統(tǒng)層的業(yè)務(wù), 比如日志, 權(quán)限,事物等。AOP 是將封裝好的對象剖開 , 找出其中對多個對象產(chǎn)生影響的公共行為,并將其封裝為一個可重用的模塊, 這個模塊被命名為切面 ( aspect),切面將那些與業(yè)務(wù)邏輯無關(guān), 卻被業(yè)務(wù)模塊共同調(diào)

12、用的邏輯提取并封裝起來,減少了系統(tǒng)中的重復(fù)代碼,降低了模塊間的耦合度 , 同時提高了系統(tǒng)的可維護性。13 、hibernate的核心思想a) Hibernate的核心思想是 ROM 對象關(guān)系映射機制。它是將表與表之間的操作映射成對象與對象之間的操作。 也就是從數(shù)據(jù)庫中提取的信息會自動按照你設(shè)置的映射要求封裝成特定的對象 . 所以 hibernate 就是通過將數(shù)據(jù)表實體類的映射, 使得對對象的修改對應(yīng)數(shù)據(jù)行的修改 .14 、Struts1與 Struts2 的區(qū)別15 、最優(yōu)刪除謀字符串的某個字符16 、Arraylist與 linkedlist 的區(qū)別a) 都是實現(xiàn) list 接口的列表,a

13、rraylist 是基于數(shù)組的數(shù)據(jù)結(jié)構(gòu) , linkedlist 是基于鏈表的數(shù)據(jù)結(jié)構(gòu) , 當獲取特定元素時, ArrayList 效率比較快,它通過數(shù)組下標即可獲取,而 linkedlist 則需要移動指針。當存儲元素與刪除元素時linkedlist 效率較快,只需要將指針移動指定位置增加或者刪除即可,而arraylist 需要移動數(shù)據(jù)。17 、mybaties與 ibatise 的區(qū)別18 、數(shù)據(jù)庫優(yōu)化a)選擇合適的字段,比如郵箱字段可以設(shè)為 char ( 6),盡量把字段設(shè)置為 notnull ,這樣查詢的時候數(shù)據(jù)庫就不需要比較null 值b) 使用關(guān)聯(lián)查詢( left join on)

14、 查詢代替子查詢c) 使用 union聯(lián)合查詢手動創(chuàng)建臨時表d) 開啟事物, 當數(shù)據(jù)庫執(zhí)行多條語句出現(xiàn)錯誤時 ,事物會回滾, 可以維護數(shù)據(jù)庫的完整性e) 使用外鍵 ,事物可以維護數(shù)據(jù)的完整性但是它卻不能保證數(shù)據(jù)的關(guān)聯(lián)性,使用外鍵可以保證數(shù)據(jù)的關(guān)聯(lián)性f) 使用索引, 索引是提高數(shù)據(jù)庫性能的常用方法 , 它可以令數(shù)據(jù)庫服務(wù)器以比沒有索引快的多的速度檢索特定的行,特別是對于max ,min,order by 查詢時, 效果更明顯g) 優(yōu)化的查詢語句,絕大多數(shù)情況下 , 使用索引可以提高查詢的速度,但如果sql 語句使用不恰當?shù)脑?, 索引無法發(fā)揮它的特性。19 、Tomcat服務(wù)器優(yōu)化 ( 內(nèi)存,

15、并發(fā)連接數(shù),緩存)a) 內(nèi)存優(yōu)化:主要是對 Tomcat啟動參數(shù)進行優(yōu)化,我們可以在 Tomcat 啟動腳本中修改它的最大內(nèi)存數(shù)等等 .b) 線程數(shù)優(yōu)化: Tomcat的并發(fā)連接參數(shù),主要在 Tomcat 配置文件中 server。xml 中配置,比如修改最小空閑連接線程數(shù),用于提高系統(tǒng)處理性能等等。c) 優(yōu)化緩存: 打開壓縮功能, 修改參數(shù) , 比如壓縮的輸出內(nèi)容大小默認為2KB , 可以適當?shù)男薷?.20 、HTTP 協(xié)議a) 常用的請求方法有 get 、postb) Get 與 post 的區(qū)別:傳送數(shù)據(jù),get 攜帶參數(shù)與訪問地址傳送 , 用戶可以看見,這的話信息會不安全,導(dǎo)致信息泄露

16、。而post 則將字段與對應(yīng)值封裝在實體中傳送, 這個過程用戶是不可見的。 Get 傳遞參數(shù)有限制,而 post 無限制。21 、TCP/UDP協(xié)議22 、Java 集合類框架的基本接口有哪些a)Collection集合接口,List、set 實現(xiàn) Collection 接口, arraylist、linkedlist,vector實現(xiàn) list 接口, stack 繼承 vector,Map 接口, hashtable、hashmap 實現(xiàn) map 接口23 、類加載的過程a) 遇到一個新的類時,首先會到方法區(qū)去找class 文件, 如果沒有找到就會去硬盤中找 class文件, 找到后會返回

17、,將 class文件加載到方法區(qū)中,在類加載的時候,靜態(tài)成員變量會被分配到方法區(qū)的靜態(tài)區(qū)域, 非靜態(tài)成員變量分配到非靜態(tài)區(qū)域,然后開始給靜態(tài)成員變量初始化,賦默認值,賦完默認值后, 會根據(jù)靜態(tài)成員變量書寫的位置賦顯示值,然后執(zhí)行靜態(tài)代碼。當所有的靜態(tài)代碼執(zhí)行完, 類加載才算完成。24 、對象的創(chuàng)建a) 遇到一個新類時,會進行類的加載,定位到class 文件b) 對所有靜態(tài)成員變量初始化 ,靜態(tài)代碼塊也會執(zhí)行, 而且只在類加載的時候執(zhí)行一次c) New對象時, jvm 會在堆中分配一個足夠大的存儲空間d) 存儲空間清空,為所有的變量賦默認值,所有的對象引用賦值為nulle) 根據(jù)書寫的位置給字段

18、一些初始化操作f) 調(diào)用構(gòu)造器方法(沒有繼承 )25 、jvm的優(yōu)化a) 設(shè)置參數(shù) , 設(shè)置 jvm 的最大內(nèi)存數(shù)b) 垃圾回收器的選擇26 、高并發(fā)處理a) 了解一點高并發(fā)性問題,比如一 W 人搶一張票時,如何保證票在沒買走的情況下所有人都能看見這張票 , 顯然是不能用同步機制, 因為 synchronize是鎖同步一次只能一個人進行。這時候可以用到鎖機制,采用樂觀鎖可以解決這個問題。 樂觀鎖的簡單意思是在不鎖定表的情況下, 利用業(yè)務(wù)的控制來解決并發(fā)問題,這樣即保證數(shù)據(jù)的可讀性, 又保證保存數(shù)據(jù)的排他性, 保證性能的同時解決了并發(fā)帶來的臟讀數(shù)據(jù)問題。27 、事物的理解a) 事物具有原子性 ,一致性 ,持久性,隔離性b) 原子性:是指在一個事物中 ,要么全部執(zhí)行成功,要么全部失敗回滾。c) 一致性:事物執(zhí)行之前和執(zhí)行之后都處于一致性狀態(tài)d) 持久性:事物多數(shù)據(jù)的操作是永久性e) 隔離性 :當一個事物正在對數(shù)據(jù)進行操作時,另一個事物不可以對數(shù)據(jù)進行操作,也就是多個并發(fā)事物之間相互隔離。28 、Struts 工作流程a) 客戶端發(fā)出一個請求到 servlet容器b) 請求經(jīng)過一些列過濾被 fil

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論