1. 程式人生 > >java三到四年面試題集合(自己經歷以及收集)

java三到四年面試題集合(自己經歷以及收集)

1.       java中wait和sleep有什麼區別?多執行緒條件下如何保證資料安全?

   答:最大區別是等待時wait會釋放鎖,而sleep會一直持有鎖,wait通常用於執行緒時交,互,sleep通常被用於暫停執行。

2.       java中volatile和synchronized有什麼區別?

  1. 1.volatile本質是在告訴jvm當前變數在暫存器(工作記憶體)中的值是不確定的,需要從主存中讀取;synchronized則是鎖定當前變數,只有當前執行緒可以訪問該變數,其他執行緒被阻塞住。
    2.volatile僅能使用在變數級別;synchronized則可以使用在變數、方法、和類級別的。
    3.volatile僅能實現變數的修改可見性,並不能保證原子性;而synchronized則可以保證變數的修改可見性和原子性。
    4.volatile不會造成執行緒的阻塞;synchronized可能會造成執行緒的阻塞。
    5.volatile標記的變數不會被編譯器優化;synchronized標記的變數可以被編譯器優化。

    3.       有了解java的原子類?實現原理是什麼?

             答:採用硬體提供原子操作指令實現的,即CAS。每次呼叫都會先判斷預期的值是否符合,才進行寫操作,保證資料安全。

    4.       spring主要使用了哪些?IOC實現原理是什麼?AOP實現原理是什麼?

      答:spring主要功能有IOC,AOP,MVC等,IOC實現原理:先反射生成例項,然後呼叫時主動注入。AOP原理:主要使用java動態代理,

    5.       mybatis有了解嗎?它與hibernate有什麼區別?專案中,你會選哪個?

     答:兩者都是輕量級ORM框架,hibernate實現功能比較多,通過HQL操作資料庫,比較簡單方便,但hibernate自動生成的sql相長,不利測試和查詢原因。複雜sql時,編寫比較困難,同時效能也會降低。mybatis是半自動化,手動編寫SQL語句,同時提供豐富的引數判斷功能。sql語句較清晰,可以直接進行測試,效能也較好,操作起來非常簡單。同時hibernate容易產生n+1問題。hibernate學習成本較mybatis高。國內一些大公司基本上使用mybatis

    6.       快取框架有使用過哪些?memcache和redis有什麼區別?專案中,怎麼去選擇?

            答:快取有:ehcache,memcache和redis等

             區別:

             1、 Redis和Memcache都是將資料存放在記憶體中,都是記憶體資料庫。不過        memcache還可用於快取其他東西,例如圖片、視訊等等。

             2、Redis不僅僅支援簡單的k/v型別的資料,同時還提供list,set,hash等資料結構的   儲存。

             3、虛擬記憶體—Redis當實體記憶體用完時,可以將一些很久沒用到的value 交換到磁碟

             4、過期策略—memcache在set時就指定,例如set key1 0 0 8,即永不過期。Redis可以通 過例如expire 設定,例如expire name 10

             5、分散式—設定memcache叢集,利用magent做一主多從;redis可以做一主多從。都     可以一主一從

             6、儲存資料安全—memcache掛掉後,資料沒了;redis可以定期儲存到磁碟(持久化)

             7、災難恢復—memcache掛掉後,資料不可恢復; redis資料丟失後可以通過aof恢復

             8、Redis支援資料的備份,即master-slave模式的資料備份。

             專案使用選擇:

             redis是單執行緒實現,若需要使用控制某些併發狀態時,可以使用redis.專案中需要使用 複雜的list,set操作時,同時可以對資料進行持久化。

             當儲存資料較大時,如100k以上,那memcache效能較好,在多核上,memcache較     好

    7.       說說資料庫效能優化有哪些方法?

             答:使用explain進行優化,檢視sql是否充分使用索引。避免使用in,用exist替代,欄位值儘可能使用更小的值,任何對列的操作都將導致表掃描,它包括資料庫函式、計算表示式等等,查詢時要儘可能將操作移至等號右邊。使用連線查詢(join)代替子查詢。

    在表的多列欄位上建立一個索引,但只有在查詢這些欄位的第一個欄位時,索引才會被使用。

    8.       HTTP請求方法get和post有什麼區別?

                        1:Post傳輸資料時,不需要在URL中顯示出來,而Get方法要在URL中顯示。

                      2:Post傳輸的資料量大,可以達到2M,而Get方法由於受到URL長度限制,只能                   傳遞大約1024位元組.

                     3:Post就是為了將資料傳送到伺服器段,Get就是為了從伺服器段取得資料.而Get                      之所以也能傳送資料,只是用來設計告訴伺服器,你到底需要什麼樣的資料.Post                   的資訊作為http請求的內容,而Get是在Http頭部傳輸的。

    9.       linux命令熟悉?檢視某個執行緒命令是什麼?檢視整個機器負載命令?檔案內容快速查詢命令是什麼?

             檢視執行緒:ps -ef|greptomcat

             檢視負載:top

             檔案內容查詢:vi  /aa test.txt 或者先開啟檔案,再查詢: vi test.txt   /aa

    10.  JVM記憶體模型是如何?垃圾回收機制有哪些?如何對JVM進行調優?

             答:由棧和堆組成,棧是執行時單位,堆記憶體則分為年輕代、年老代、持久代等,年輕代中的物件經過幾次的回收,仍然存在則被移到年老代;持久代主要是儲存class,method,filed等物件。

    sun回收機制:主要對年輕代和年老代中的存活物件進行回收,分為以下:

    年輕代序列(Serial Copying)、年輕代並行(ParNew)、年老代序列(SerialMSC),年老代並行(Parallel Mark Sweep),年老代併發(Concurrent Mark-Sweep GC,即CMS)等等,目前CMS回收演算法使用最廣泛。

    JVM調優主要是對堆內容和回收演算法進行配置,需要對jdk產生的回收日誌進行觀察,同時通過工具(Jconsole,jProfile,VisualVM)對堆記憶體不斷分析,這些優化是一個過程,需要不斷地進行觀察和維護。

    11.  如銀行內部轉賬功能,如何保證資料一致性,即要麼同時成功,要麼同時失敗?高併發時,又如何保證效能和資料正確?

           答:如果是單機內完成這些操作,那使用資料庫的事務,即可輕鬆實現。若是分散式呢?

    12.  有了解分散式事務如何實現?

             答:分散式事務可以採用分散式鎖進行實現,目前zookeeper就提供此鎖;分散式鎖需要犧牲一定效能去實現,若業務支付最終一致性,那此方法是最佳方案。如在京東下訂單,過一會才會告訴你訂單稽核通過,而不是馬上響應訂單結果。

    13.  java抽象類和介面有什麼區別?專案中怎麼去使用它們?

             相同點:

             A. 兩者都是抽象類,都不能例項化。

             B. interface實現類及abstractclass的子類都必須要實現已經宣告的抽象方法。

           不同點:

             A. interface需要實現,要用implements,而abstractclass需要繼承,要用extends。

             B. 一個類可以實現多個interface,但一個類只能繼承一個abstractclass。

             C. interface強調特定功能的實現,而abstractclass強調所屬關係。

             D. 儘管interface實現類及abstrctclass的子類都必須要實現相應的抽象方法,但實現的         形式不同。interface中的每一個方法都是抽象方法,都只是宣告的 (declaration, 沒有方         法體),實現類必須要實現。而abstractclass的子類可以有選擇地實現。

             使用:

             abstract:在既需要統一的介面,又需要例項變數或預設的方法的情況下,使用abstract;

             interface:使用: 類與類之前需要特定的介面進行協調,而不在乎其如何實現。 作為能          夠實現特定功能的標識存在,也可以是什麼介面方法都沒有的純粹標識。需要將一組類     視為單一的類,而呼叫者只通過介面來與這組類發生聯絡。需要實現特定的多項功能,         而這些功能之間可能完全沒有任何聯絡。

    14.  對socket熟悉?TCP通訊有幾次握手?有使用過哪些socket框架?

             答:3次握手,客戶端—>服務端,服務端—>客戶端,客戶端—>服務端,當這些過程完成之後,才真正建立起通訊。java中比較有名的socket框架有:mina,netty,都是韓國小棒子寫的。

    15.  瞭解java反射機制?反射生成類,能訪問私有變數?

           答:即動態生成java的例項,可以

    16.  RPC是什麼?有使用過哪些RPC框架?

           答:即遠端程序呼叫,本地機器呼叫遠端的服務,在專案規模大到一定程度,需要使用RPC相關框架進行服務化部署。如:hessian 、webservice等

    17.  熟悉js或css?jquery如何繫結頁面某元素的點選事件?

    答:$(“#btn”).click(function(){

    })

        18 .private、預設、protected、public作用範圍

           1)private,同類

           2)預設,同類、同包

          3)protected,同類,同包,子類

          4)public,所有

          String trim的實現原理

         去掉首尾ASCII碼值小於’ ‘(空格)的字元

         StringBuffer、StringBuilder區別

        StringBuffer執行緒安全

        StringBuilder執行緒不安全

        抽象類與介面的異同

         同:具有抽象方法

         異:1)抽象類可以有構造器,非抽象方法,非公有屬性,僅可以單繼承抽象類

         2)介面僅有公有抽象方法或者公有靜態常量,可以同時實現多個介面

          個人使用經驗:一般在控制層使用抽象類,提取公共初始化方法、框架定製化工具方法等

          一般會在業務層使用介面


List、Set、Collections區別

1)List,有序可重複

2)Set, 無序不可重複

3)Collections,集合工具類

列舉鍵值容器

1)HashMap,實現Map,非同步

2)Hashtable,實現Map,同時繼承舊的Dictionary類,同步

3)Properties,Hashtable的子類,系統引數

演算法:快速排序

public static void quickSort(int a[], int start, int end) {
int i, j;
i = start;
j = end;
if ((a == null) || (a.length == 0))
return;

while (i < j) {//查詢基準點下標
while (i < j && a[i] <= a[j])
// 以陣列start下標的資料為key,右側掃描
j—;
if (i < j) { // 右側掃描,找出第一個比key小的,交換位置
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
while (i < j && a[i] < a[j])
// 左側掃描(此時a[j]中儲存著key值)
i++;
if (i < j) { // 找出第一個比key大的,交換位置
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
if (i - start > 1) { // 遞迴呼叫,把key前面的完成排序
quickSort(a, start, i - 1);
}
if (end - j > 1) {
quickSort(a, j + 1, end); // 遞迴呼叫,把key後面的完成排序
}
}

​​​​

inner join、left join、 right join區別

1)inner join,兩表字段值相同

2)left join,兩表字段值相同,以及左表字段有值,右表字段值為null

3)right join,與上相反

需要寫sql的試題

一般會讓查出值是最大的,用到子查詢、組函式等

Reads(id, ip, cnt) ip不唯一,查出訪問量最大的前10個ip並排序

select r.ip, r.s, rownum from (select ip, sum(cnt) s from reads group by ip order by s desc) r where r.rownum <= 10

資料庫效能調優

1)經常做查詢條件的欄位建立序列

2)關聯查詢時,關聯結果集,替代直接關聯整張表;或者使用exists

jsp表單js校驗

var name = document.getElementById(‘userName’).value;

if (name == ‘’)

{

alert(‘使用者名稱不能為空’);

return false;

}

Struts的Action是單例嗎

1)Struts1的Action是單例且執行緒安全

2)Struts2的Action不是單例,針對每一請求產生一個例項

Hibernate與Mybatis區別

1)Hibernate,使用pojo實現orm,查詢速度相比較慢,插入/更新開發容易

2)Mybaits,使用純sql開發,執行效率較快,比較適合統計、多表關聯查詢

Hibernate狀態

瞬時態:new物件

持久態:例項與資料庫中記錄對應,擁有持久化標識

遊離態:session關閉;session開啟,遊離態轉成持久態

ibatis中#與$的區別

1)#,變數替換,即prepareStament設定欄位值,並可以匹配變數型別

2)$,字串拼接,需要小心依賴注入

事務特性

1)原子性:諸多操作要麼全做,要麼全不做

2)一致性:事務執行結果使資料庫從一個一致性狀態變到另一個一致性狀態

3)隔離性:事務執行不被其他事務影響

4)永續性:一旦提交,對資料庫的改變是永久性的

spring mvc與struts2的區別

1)struts2封裝展示層與控制層,展示層提供標籤庫及驗證器,請求與應答需要配置檔案

2)spring mvc是單純的控制層框架,url實現零配置,執行效率提高

Spring IOC注入方式

1)配置檔案中,配置屬性,提供setter/getter方法

2)零配置,@Autowired,統一配置根據名稱或者型別注入

Spring AOP思想

針對請求做統一預處理,如有效性校驗;或後處理,如記錄處理結果;針對方法加before或after處理

Spring事務配置

1)使用tx:advice,針對業務介面層,如以do、get等命名的方法,作事務配置

WebService技術

1)axis、xfire、cxf,基於soap,傳輸xml

2)restful風格

jvm效能調優

tomcat效能調優
 

相關推薦

java試題集合自己經歷以及收集

1.       java中wait和sleep有什麼區別?多執行緒條件下如何保證資料安全?    答:最大區別是等待時wait會釋放鎖,而sleep會一直持有鎖,wait通常用於執行緒時交,互,sleep通常被用於暫停執行。 2.       java中volatile

Java多執行緒試題整理BATJ都愛問

今天給大家總結一下,面試中出鏡率很高的幾個多執行緒面試題,希望對大家學習和麵試都能有所幫助。備註:文中的程式碼自己實現一遍的話效果會更佳哦! 一、面試中關於 synchronized 關鍵字的 5 連擊 1.1 說一說自己對於 synchronized 關鍵字的瞭解 synchroniz

Java試題——集合持續更新

  從上面的集合框架圖可以看到,Java 集合框架主要包括兩種型別的容器,一種是集合(Collection),儲存一個元素集合,另一種是圖(Map),儲存鍵/值對對映。Collection 介面又有 3 種子型別,List、Set 和 Queue,再下面是一些

2018阿里社招Java試題總結收藏明年跳槽用

面試題 1、String和StringBuffer的區別 2、gc的概念,如果A和B物件迴圈引用,是否可以被GC? 3、Java中的記憶體溢位是如何造成的 4、String s = “123”;這個語句有幾個物件產生 5、Error、Exception和RuntimeException的區別,作用又

自己實戰整理試題--集合帶答案,不斷更新

Set 和 List 區別? ArrayList 和 LinkedList 區別? 如果存取相同的資料,ArrayList 和 LinkedList 誰佔用空間更大? List 和 Map 區別,Arraylist 與 LinkedList 區別,ArrayList 與 Vector 區別? S

阿里p8架構師分享:50道2018最經典的試題含標準答案!

(一小部分題的答案被我略作改動) 1、什麼是執行緒區域性變數? 執行緒區域性變數是侷限於執行緒內部的變數,屬於執行緒自身所有,不在多個執行緒間共享。Java 提供 ThreadLocal 類來支援執行緒區域性變數,是一種實現執行緒安全的方式。但是在管理環境下(如 web

2019阿里必問試題集錦收藏不看系列,你懂得!

前言 我堅信,機會永遠屬於有準備的人,我們與其羨慕他人的成功,不如從此刻起,積

阿裏P7分享最新java面試——線程試題集合

cal 可執行 write 競爭 不同的 有意義 你知道 繼續 cep 1、說說進程,線程,協程之間的區別 簡而言之,進程是程序運行和資源分配的基本單位,一個程序至少有一個進程,一個進程至少有一個線程.進程在執行過程中擁有獨立的內存單元,而多個線程共享內存資源,減少切換次數

章 字典和集合當索引行不通時

一、字典 1. 建立和使用字典 phonebook={'Alice': '2341', 'Beth' : '9102', 'Cecil' : '3258'} 字典由鍵及其相應的值組成,這種鍵-值對稱為項(item)。在上面例子中,鍵為名字,值為號碼,每個鍵與值間都用冒號分隔,項之間用

hadoop試題整理海哥每日默寫

2018.11.26 1、HDFS讀寫流程 (1)寫資料流程 1).客戶端發出請求 hdfs dfs -put /etc/profile /qf/data 2).namenode檢視維護的目錄結構,檢查/qf/data是否存在,如不存在直接報錯”no such file or directo

百度2015校園招聘試題回憶錄成功拿到offer

引言盼望著,盼望著……今年終於輪到我找工作了,還深深記得去年跟在師兄後面打各種醬油的經歷,當時覺得找工作好難啊,怎麼面一個敗一個,以後還能找到工作不?不過當時的失敗也是理所當然的,那時候沒有做任何準備(連程序間有幾種通訊方式這樣老掉牙的題我都不知道),沒有任何找工作的經驗,甚至一個簡單的自我介紹都吞吞吐吐的。

Android筆試試題常考選擇填空

一、選擇題 1.  下列哪些語句關於記憶體回收的說明是正確的()  A、 程式設計師必須建立一個執行緒來釋放記憶體           B、 記憶體回收程式負責釋放無用記憶體 C、 記憶體回收程式允許

Google試題集錦內附答案/解析

將下列表達式按照複雜度排序 2^n n^Googol (其中 Googol = 10^100) n! n^n 按照複雜度從低到高為 n^Googol 2^n n! n^n 1024! 末尾有多少個0? 答案:末尾0的個數取決於乘法中因子2和5的個數。顯然乘法中因子2

黑馬程式設計師——試題破解交通燈管理系統

------- android培訓、java培訓、期待與您交流! ---------- 模擬實現十字路口的交通燈管理系統邏輯,具體需求如下: -非同步隨機生成按照各個路線行駛的車輛。 例如:由南向而來去往北向的車輛 ---- 直行車輛由西向而來去往南向的車輛 ---- 右轉

java驗證字串是否由數字組成含有小數點以及負數

public void StringIsNumber(){ String str = "2.1"; Pattern pattern = Pattern.compile("-?[0-9]*.?[0-9]*"); Matcher matcher = pat

java試題整理以下

1、作為一個java初級程式設計師必備技能 a.熟悉java基礎、面向物件、JVM、IO流程、多執行緒、集合框架 b.熟悉JSP、Servlet、Spring、Hibernate、SpringMVC c.熟悉Http協議、Socket、WebService及網路程式設計 d.熟悉Maven及Linu

超詳細的Java試題總結Java集合篇常見問題

List,Set,Map三者的區別及總結 List:對付順序的好幫手 List介面儲存一組不唯一(可以有多個元素引用相同的物件),有序的物件 Set:注重獨一無二的性質 不允許重複的集合。不會有多個元素引用相同的物件。 Map:用Key來搜尋的專家 使用鍵值對儲存。M

Java試題

clu error col edi servlet對象 動態 解決方法 原來 highlight 二. Java Web基礎部分 在js中如何創建一個對象? var p1={name:”tom”,”age”

Java試題-集合框架篇

框架 dex 設置 表達 索引 equal class 內存 水平 21、ArrayList和Vector的區別 這兩個類都實現了List接口(List接口繼承了Collection接口),他們都是有序集合,即存儲在這兩個集合中的元素的位置都是有順序的,相當

Java試題系列Java new一個對象的過程中發生了什麽

進行 col over mage 兩個 http system jvm art Person class Person{ private String name; private int age; public Person(