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

2018年java技術(shù)面試題整理

 更新時間:2018年02月11日 10:45:41   投稿:laozhang  
小編為大家整理了2018年最新的關于java技術(shù)相關的面試題,以及給出了最簡簡答方式,學習下吧。

1、servlet執(zhí)行流程

客戶端發(fā)出http請求,web服務器將請求轉(zhuǎn)發(fā)到servlet容器,servlet容器解析url并根據(jù)web.xml找到相對應的servlet,并將request、response對象傳遞給找到的servlet,servlet根據(jù)request就可以知道是誰發(fā)出的請求,請求信息及其他信息,當servlet處理完業(yè)務邏輯后會將信息放入到response并響應到客戶端。

2、springMVC的執(zhí)行流程

springMVC是由dispatchservlet為核心的分層控制框架。首先客戶端發(fā)出一個請求web服務器解析請求url并去匹配dispatchservlet的映射url,如果匹配上就將這個請求放入到dispatchservlet,dispatchservlet根據(jù)mapping映射配置去尋找相對應的handel,然后把處理權(quán)交給找到的handel,handel封裝了處理業(yè)務邏輯的代碼,當handel處理完后會返回一個邏輯視圖modelandview給dispatchservlet,此時的modelandview是一個邏輯視圖不是一個正式視圖,所以dispatchservlet會通過viewresource視圖資源去解析modelandview,然后將解析后的參數(shù)放到view中返回到客戶端并展現(xiàn)。

3、給定一個txt文件,如何得到某字符串出現(xiàn)的次數(shù)

File file = new File("E://test.txt");
InputStream is = new FileInputStream(file);
byte b[] = new byte[1024];
int a = is.read(b);
String str[] = new String(b,0,a).split("");
int count = 0;
for(int i = 0;i<str.length;i++){
if("a".equals(str[i]))count++;
}
System.out.println(count);

4、Java設計模式思想(單列模式,工廠模式,策略模式,共23種設計模式)

a) 單例模式:單例模式核心只需要new一個實例對象的模式,比如數(shù)據(jù)庫連接,在線人數(shù)等,一些網(wǎng)站上看到的在線人數(shù)統(tǒng)計就是通過單例模式實現(xiàn)的,把一個計時器存放在數(shù)據(jù)庫或者內(nèi)存中,當有人登陸的時候取出來加一再放回去,有人退出登陸的時候取出來減一再放回去,但是當有兩個人同時登陸的時候,會同時取出計數(shù)器,同時加一,同時放回去,這樣的話數(shù)據(jù)就會錯誤,所以需要一個全局變量的對象給全部人使用,只需要new出一個實例對象,這就是單例模式的應用,并且單例模式節(jié)省資源,因為它控制了實例對象的個數(shù),并有利于gc回收。

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

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

5、冒泡排序、二分查找

a) 冒泡

public static void mp(int a[]) {
int swap = 0;
for (int i = 0; i < a.length; i++) {
for (int j = i; j < a.length; j++) {
if (a[j] > a[i]) {
swap = a[i];
a[i] = a[j];
a[j] = swap;
}
}
}
System.out.println(Arrays.toString(a));
}

b)二分查找

public static int ef(int a[], int tag) {
int first = 0;
int end = a.length;
for (int i = 0; i < a.length; i++) {
int middle = (first + end) / 2;
if (tag == a[middle]) {
return middle;
}
if (tag > a[middle]) {
first = middle + 1;
}
if (tag < a[middle]) {
end = middle - 1;
}
}
return 0;
}

6-8、對ajax的理解

a) Ajax為異步請求,即局部刷新技術(shù),在傳統(tǒng)的頁面中,用戶需要點擊按鈕或者事件觸發(fā)請求,到刷新頁面,而異步技術(shù)為不需要點擊即可觸發(fā)事件,這樣使得用戶體驗感增強,比如商城購物車的異步加載,當你點擊商品時無需請求后臺而直接動態(tài)修改參數(shù)。

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.關鍵字調(diào)用即可

b) 而外部類調(diào)用內(nèi)部類需要建立內(nèi)部類對象

11、多線程

a)一個進程是一個獨立的運行環(huán)境,可以看做是一個程序,而線程可以看做是進程的一個任務,比如QQ是一個進程,而一個QQ窗口是一個線程。

b)在多線程程序中,多線程并發(fā)可以提高程序的效率,cpu不會因為某個線程等待資源而進入空閑狀態(tài),它會把資源讓給其他的線程。

c)用戶線程就是我們開發(fā)程序是創(chuàng)建的線程,而守護線程為系統(tǒng)線程,如JVM虛擬中的GC

d)線程的優(yōu)先級別:每一個線程都有優(yōu)先級別,有限級別高的可以先獲取CPU資源使該線程從就緒狀態(tài)轉(zhuǎn)為運行狀態(tài)。也可以自定義線程的有限級別

e)死鎖:至少兩個以上線程爭取兩個以上cpu資源,避免死鎖就避免使用嵌套鎖,只需要在他們需要同步的地方加鎖和避免無限等待

12、AOP與IOC的概念(即spring的核心)

a) IOC:Spring是開源框架,使用框架可以使我們減少工作量,提高工作效率并且它是分層結(jié)構(gòu),即相對應的層處理對應的業(yè)務邏輯,減少代碼的耦合度。而spring的核心是IOC控制反轉(zhuǎn)和AOP面向切面編程。IOC控制反轉(zhuǎn)主要強調(diào)的是程序之間的關系是由容器控制的,容器控制對象,控制了對外部資源的獲取。而反轉(zhuǎn)即為,在傳統(tǒng)的編程中都是由我們創(chuàng)建對象獲取依賴對象,而在IOC中是容器幫我們創(chuàng)建對象并注入依賴對象,正是容器幫我們查找和注入對象,對象是被獲取,所以叫反轉(zhuǎn)。

b) AOP:面向切面編程,主要是管理系統(tǒng)層的業(yè)務,比如日志,權(quán)限,事物等。AOP是將封裝好的對象剖開,找出其中對多個對象產(chǎn)生影響的公共行為,并將其封裝為一個可重用的模塊,這個模塊被命名為切面(aspect),切面將那些與業(yè)務邏輯無關,卻被業(yè)務模塊共同調(diào)用的邏輯提取并封裝起來,減少了系統(tǒng)中的重復代碼,降低了模塊間的耦合度,同時提高了系統(tǒng)的可維護性。

13、hibernate的核心思想

a) Hibernate的核心思想是ROM對象關系映射機制。它是將表與表之間的操作映射成對象與對象之間的操作。也就是從數(shù)據(jù)庫中提取的信息會自動按照你設置的映射要求封裝成特定的對象。所以hibernate就是通過將數(shù)據(jù)表實體類的映射,使得對對象的修改對應數(shù)據(jù)行的修改。

14、Struts1與Struts2的區(qū)別

15、最優(yōu)刪除謀字符串的某個字符

16-17、Arraylist與linkedlist的區(qū)別

a) 都是實現(xiàn)list接口的列表,arraylist是基于數(shù)組的數(shù)據(jù)結(jié)構(gòu),linkedlist是基于鏈表的數(shù)據(jù)結(jié)構(gòu),當獲取特定元素時,ArrayList效率比較快,它通過數(shù)組下標即可獲取,而linkedlist則需要移動指針。當存儲元素與刪除元素時linkedlist效率較快,只需要將指針移動指定位置增加或者刪除即可,而arraylist需要移動數(shù)據(jù)。

18、數(shù)據(jù)庫優(yōu)化

a) 選擇合適的字段,比如郵箱字段可以設為char(6),盡量把字段設置為notnull,這樣查詢的時候數(shù)據(jù)庫就不需要比較null值

b) 使用關聯(lián)查詢( left join on)查詢代替子查詢

c) 使用union聯(lián)合查詢手動創(chuàng)建臨時表

d) 開啟事物,當數(shù)據(jù)庫執(zhí)行多條語句出現(xiàn)錯誤時,事物會回滾,可以維護數(shù)據(jù)庫的完整性

e) 使用外鍵,事物可以維護數(shù)據(jù)的完整性但是它卻不能保證數(shù)據(jù)的關聯(lián)性,使用外鍵可以保證數(shù)據(jù)的關聯(lián)性

f) 使用索引,索引是提高數(shù)據(jù)庫性能的常用方法,它可以令數(shù)據(jù)庫服務器以比沒有索引快的多的速度檢索特定的行,特別是對于max,min,order by查詢時,效果更明顯

g) 優(yōu)化的查詢語句,絕大多數(shù)情況下,使用索引可以提高查詢的速度,但如果sql語句使用不恰當?shù)脑?,索引無法發(fā)揮它的特性。

19、Tomcat服務器優(yōu)化(內(nèi)存,并發(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ù)男薷摹?br />

20、HTTP協(xié)議

a) 常用的請求方法有g(shù)et、post

b) Get與post的區(qū)別:傳送數(shù)據(jù),get攜帶參數(shù)與訪問地址傳送,用戶可以看見,這的話信息會不安全,導致信息泄露。而post則將字段與對應值封裝在實體中傳送,這個過程用戶是不可見的。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文件,找到后會返回,將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) 存儲空間清空,為所有的變量賦默認值,所有的對象引用賦值為null

e) 根據(jù)書寫的位置給字段一些初始化操作

f) 調(diào)用構(gòu)造器方法(沒有繼承)

25、jvm的優(yōu)化

a) 設置參數(shù),設置jvm的最大內(nèi)存數(shù)

b) 垃圾回收器的選擇

26、高并發(fā)處理

a) 了解一點高并發(fā)性問題,比如一W人搶一張票時,如何保證票在沒買走的情況下所有人都能看見這張票,顯然是不能用同步機制,因為synchronize是鎖同步一次只能一個人進行。這時候可以用到鎖機制,采用樂觀鎖可以解決這個問題。樂觀鎖的簡單意思是在不鎖定表的情況下,利用業(yè)務的控制來解決并發(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)過一些列過濾被filterdispatcher調(diào)用,filterdispatch通過actionMapper去找相對應的action。

c) Actionmapper找到對應的action返回給filterdispatch,dispatch把處理權(quán)交給actionproxy

d) Actionproxy通過配置文件找到對應的action類

e) Actionproxy創(chuàng)建一個actionIinvocation的實例處理業(yè)務邏輯

f) 一旦action處理完畢,actioninvocation負責根據(jù)stuts.xml的配置找到對應的返回結(jié)果。返回結(jié)果通常是jsp頁面。

相關文章

  • Java利用Geotools實現(xiàn)不同坐標系之間坐標轉(zhuǎn)換

    Java利用Geotools實現(xiàn)不同坐標系之間坐標轉(zhuǎn)換

    GeoTools 是一個開源的 Java GIS 工具包,可利用它來開發(fā)符合標準的地理信息系統(tǒng)。本文將利用工具包Geotools實現(xiàn)不同坐標系之間坐標轉(zhuǎn)換,感興趣的可以了解一下
    2022-08-08
  • 關于Mybatis-Plus字段策略與數(shù)據(jù)庫自動更新時間的一些問題

    關于Mybatis-Plus字段策略與數(shù)據(jù)庫自動更新時間的一些問題

    這篇文章主要介紹了關于Mybatis-Plus字段策略與數(shù)據(jù)庫自動更新時間的一些問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • AsyncHttpClient KeepAliveStrategy源碼流程解讀

    AsyncHttpClient KeepAliveStrategy源碼流程解讀

    這篇文章主要為大家介紹了AsyncHttpClient KeepAliveStrategy源碼流程解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Retrofit+Rxjava下載文件進度的實現(xiàn)

    Retrofit+Rxjava下載文件進度的實現(xiàn)

    這篇文章主要介紹了Retrofit+Rxjava下載文件進度的實現(xiàn),非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11
  • 關于RedisTemplate常用方法封裝

    關于RedisTemplate常用方法封裝

    文章總結(jié)了RedisTemplate的常用方法封裝,包括序列化配置、基礎常量和接口實現(xiàn),這些內(nèi)容是個人經(jīng)驗分享,旨在為讀者提供參考和支持
    2024-12-12
  • JAVA構(gòu)造函數(shù)不能使用void關鍵字問題

    JAVA構(gòu)造函數(shù)不能使用void關鍵字問題

    這篇文章主要介紹了JAVA構(gòu)造函數(shù)不能使用void關鍵字問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Java正則表達式學習之分組與替換

    Java正則表達式學習之分組與替換

    這篇文章主要給大家介紹了關于Java正則表達式學習之分組與替換的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Nacos配合SpringBoot實現(xiàn)動態(tài)線程池的基本步驟

    Nacos配合SpringBoot實現(xiàn)動態(tài)線程池的基本步驟

    使用Nacos配合Spring Boot實現(xiàn)動態(tài)線程池,可以讓你的應用動態(tài)地調(diào)整線程池參數(shù)而無需重啟,這對于需要高度可配置且需要適應不同負載情況的應用來說非常有用,本文給大家介紹實現(xiàn)動態(tài)線程池的基本步驟,需要的朋友可以參考下
    2024-02-02
  • 詳解使用Spring Cloud Consul實現(xiàn)服務的注冊和發(fā)現(xiàn)

    詳解使用Spring Cloud Consul實現(xiàn)服務的注冊和發(fā)現(xiàn)

    這篇文章主要介紹了詳解使用Spring Cloud Consul實現(xiàn)服務的注冊和發(fā)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • SpringMVC通過Ajax處理Json數(shù)據(jù)的步驟詳解

    SpringMVC通過Ajax處理Json數(shù)據(jù)的步驟詳解

    這篇文章主要介紹了SpringMVC通過Ajax處理Json數(shù)據(jù)的步驟詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04

最新評論

应城市| 黔西县| 洛南县| 界首市| 图们市| 望江县| 交城县| 常宁市| 永和县| 三台县| 淮阳县| 吉安市| 宣汉县| 潞城市| 宝兴县| 宁蒗| 浙江省| 沧源| 常山县| 东乡县| 崇义县| 平原县| 赤壁市| 郓城县| 若羌县| 晋州市| 河曲县| 万荣县| 巩留县| 霍州市| 班玛县| 阳高县| 台东市| 绥阳县| 安徽省| 丹凤县| 诏安县| 平凉市| 鄂州市| 宜都市| 阳泉市|