一、hash碰撞html
咱們知道,對象Hash的前提是實現equals()和hashCode()兩個方法,那麼HashCode()的做用就是保證對象返回惟一hash值,但當兩個對象計算值同樣時,這就發生了碰撞衝突。以下將介紹如何處理衝突,固然其前提是一致性hash。java
1.開放地址法
2.再哈希法
3.鏈地址法(拉鍊法)
http://blog.csdn.net/zeb_perfect/article/details/52574915mysql
二、arraylist與linkdlist區別nginx
ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增長和插入元素,它們都容許直接按序號索引元素,可是插入元素要涉及數組元素移動等內存操做,因此索引數據快而插入數據慢,Vector因爲使用了synchronized方法(線程安全),一般性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據須要進行前向或後向遍歷,可是插入數據時只須要記錄本項的先後項便可,因此插入速度較快。
http://www.cnblogs.com/liqiu/p/3302607.html
三、數據庫鎖、鏈接池
三、緩存redis
四、數據結構redis
http://www.cnblogs.com/liqiu/p/3302607.html
五、Springmvc算法
1. 簡要描述String、StringBuffer、StringBuilder的區別spring
String 字符串常量
StringBuffer 字符串變量(線程安全)
StringBuilder 字符串變量(非線程安全)sql
StringBuilder >StringBuffer > String
2. 描述一下JVM加載CLASS文件的原理機制shell
JVM中類的裝載是由類加載器(ClassLoader)和它的子類來實現的,Java中的類加載器是一個重要的Java運行時系統組件,它負責在運行時查找和裝入類文件中的類。
因爲Java的跨平臺性,通過編譯的Java源程序並非一個可執行程序,而是一個或多個類文件。當Java程序須要使用某個類時,JVM會確保這個類已經被加載、鏈接(驗證、準備和解析)和初始化。類的加載是指把類的.class文件中的數據讀入到內存中,一般是建立一個字節數組讀入.class文件,而後產生與所加載類對應的Class對象。加載完成後,Class對象還不完整,因此此時的類還不可用。當類被加載後就進入鏈接階段,這一階段包括驗證、準備(爲靜態變量分配內存並設置默認的初始值)和解析(將符號引用替換爲直接引用)三個步驟。最後JVM對類進行初始化,包括:1)若是類存在直接的父類而且這個類尚未被初始化,那麼就先初始化父類;2)若是類中存在初始化語句,就依次執行這些初始化語句。
類的加載是由類加載器完成的,類加載器包括:根加載器(BootStrap)、擴展加載器(Extension)、系統加載器(System)和用戶自定義類加載器(java.lang.ClassLoader的子類)。 從Java 2(JDK 1.2)開始,類加載過程採起了父親委託機制(PDM)。PDM更好的保證了Java平臺的安全性,在該機制中,JVM自帶的Bootstrap是根加載器,其餘的加載器都有且僅有一個父類加載器。類的加載首先請求父類加載器加載,父類加載器無能爲力時才由其子類加載器自行加載。JVM不會向Java程序提供對Bootstrap的引用。下面是關於幾個類加載器的說明:數據庫
Bootstrap:通常用本地代碼實現,負責加載JVM基礎核心類庫(rt.jar);
Extension:從java.ext.dirs系統屬性所指定的目錄中加載類庫,它的父加載器是Bootstrap;
System:又叫應用類加載器,其父類是Extension。它是應用最普遍的類加載器。它從環境變量classpath或者系統屬性java.class.path所指定的目錄中記載類,是用戶自定義加載器的默認父加載器。
http://blog.csdn.net/gfangxiong/article/details/7425563
3. Char型變量可否存儲一箇中文字?爲何?
能夠啊。JAVA默認的編碼是UNICODE.不是ASCII的char .
java採用unicode,2個字節(16位)來表示一個字符.
4. JAVA中實現多態有哪些方式?
5. 寫出你所知道的java.util.concurrent包中的類,並簡述它們的用途和應用場景
http://blog.csdn.net/defonds/article/details/44021605/
6. 簡述synchronized和java.util.concurent.locks.Lock的異同點
- synchronized 代碼塊不可以保證進入訪問等待的線程的前後順序。
- 你不可以傳遞任何參數給一個 synchronized 代碼塊的入口。所以,對於 synchronized 代碼塊的訪問等待設置超時時間是不可能的事情。
- synchronized 塊必須被完整地包含在單個方法裏。而一個 Lock 對象能夠把它的 lock() 和 unlock() 方法的調用放在不一樣的方法裏。
7. 編程題:設有N我的依次圍成一圈,從第1我的開始報數,第M我的出列,而後從出列的下一我的開始報數,數到第M我的又出列,...,如此反覆到全部的人所有出列爲止,設N我的的編號分別爲1,2,...,N,打印出出列的順序,要求用java實現。
8. 說說你所知道的查找消耗比較大的SQL方法
9. 一張用戶表有1000萬條記錄,主鍵爲自增ID,從中取10條隨機記錄,如何實現?簡述你的解決方案,能夠用僞代碼描述。
SELECT * FROM tablename WHERE id> ROUND(1+10000000*RAND()) LIMIT 10;
10. 一個大型網站用一張LOG表來記錄用戶的操做行爲,天天會產生上百萬條記錄。另有一個調試程序定時清除三天前的數據(好比天天凌晨4點執行),以保障LOG表的數據量不會無限增加,要求寫出調度程序的僞代碼。
11. 寫出Linux裏查看進程的命令
ps -ef|grep java
12. 在LINUX裏,如何查看一個監聽端口爲8060的進程?
13. 分析日誌文件,要求統計出響應時間超過100ms的請求及其個數,寫出相應的shell命令,文件內容以下,有三個字段,分別表示請求產生的時間戳、請求、響應時間
1.aop 的實現原理。
2.redis的序列化方式。
3.concurrenthashmap 的實現原理。HashMap 的默認容量是多少,concurrenthashmap 與hashtable 的區別是什麼?
4.nginx 的方向代理實現方式。
5。生產消費模式。
6。resource service 的區別。
7.wait sleep 的區別 yield
sleep和wait的區別有:
1,這兩個方法來自不一樣的類分別是Thread和Object
2,最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其餘線程可使用同步控制塊或者方法。
3,wait,notify和notifyAll只能在同步控制方法或者同步控制塊裏面使用,而sleep能夠在
任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
4,sleep必須捕獲異常,而wait,notify和notifyAll不須要捕獲異常
8。dubbo 的想通信機制 是什麼
用volatile修飾的變量,線程在每次使用變量的時候,都會讀取變量修改後的最的值。volatile很容易被誤用,用來進行原子性操做。
ali:
9.hashmap 的實現原理。
上面程序中使用的 table 其實就是一個普通數組,每一個數組都有一個固定的長度,這個數組的長度就是 HashMap 的容量。HashMap 包含以下幾個構造器:
* HashMap():構建一個初始容量爲 16,負載因子爲 0.75 的 HashMap。
* HashMap(int initialCapacity):構建一個初始容量爲 initialCapacity,負載因子爲 0.75 的 HashMap。
* HashMap(int initialCapacity, float loadFactor):以指定初始容量、指定的負載因子建立一個 HashMap。
HashMap 採用一種所謂的「Hash 算法」來決定每一個元素的存儲位置。
當程序執行 map.put("語文" , 80.0); 時,系統將調用"語文"的 hashCode() 方法獲得其 hashCode 值——每一個 Java 對象都有 hashCode() 方法,均可經過該方法得到它的 hashCode 值。獲得這個對象的 hashCode 值以後,系統會根據該 hashCode 值來決定該元素的存儲位置
10.線程池的內部機制。
11.反射機制的使用場景。
Java反射機制主要提供瞭如下功能:
- 在運行時判斷任意一個對象所屬的類;
- 在運行時構造任意一個類的對象;
- 在運行時判斷任意一個類所具備的成員變量和方法;
- 在運行時調用任意一個對象的方法;
- 生成動態代理。
12.CyclicBarrier也使用一個整形參數進行初始化,這個參數是須要再某點同步的線程數。當線程調用await()方法後CyclicBarrier類將把這個線程編爲WAITING狀態,並等待直到其餘線程都到達集合點。當最後一個線程到達集合點後,調用CyclicBarrier類的await()方法時,CyclicBarrieer對象將喚醒全部經過await()方法進入等待的線程。
CyclicBarrier與CountDownLatch不一樣的地方在於,CountDownLatch經過countDown()方法對計數器減1來標記一個線程已經到達集合點,而且這個線程不會阻塞會繼續執行。而CyclicBarrier類則經過await()方法標記線程到達集合點,而且這個到達集合點的線程會被阻塞。另外CyclicBarrier還支持把一個Runnable對象做爲一個初始化參數,當全部的線程都到達集合點的時候,這個線程會被啓動。這很是相似以一個分治算法的實現,把一個大任務拆分紅若干個子任務,並等待全部子任務結束後,輸出執行結果。
一個同步輔助類,它容許一組線程互相等待,直到到達某個公共屏障點 (common barrier point)
CountDownLatch,一個同步輔助類,在完成一組正在其餘線程中執行的操做以前,它容許一個或多個線程一直等待。
13.servlet 的什麼週期
14.spring bean 是什麼週期?
springmvc 運行週期是什麼?
1.dispatcherServlet會初始化HandlerMapping(注:經過它來處理客戶端請求到各個Controller處理器的映射)
2. dispatcherServlet會初始化HandlerAdapter(注:HandlerMapping會根據它來調用Controller裏須要被執行的方法)
3. dispatcherServlet會初始化handlerExceptionResolver(注:spring mvc處理流程中,若是有異常拋出,會交給它來進行異常處理)
4. dispatcherServlet會初始化ViewResolver (注:HandlerAdapter會把Controller中調用返回值最終包裝成ModelAndView,ViewResolver會檢查其中的view,若是view是一個字符串,它就負責處理這個字符串並返回一個真正的View,若是view是一個真正的View則不會交給它處理)
spring事務傳播機制包括哪些?爲了解決什麼?
當有外部事務時
15.找一個你最擅長的項目,說說你充當的角色 什麼? 主要作了哪些模塊。負責什麼?
16.在你的工做當中,你遇到什麼樣的挑戰,如何既解決的 。
17.mysql 的引擎機制分爲哪幾種?每種有哪些特色。聚合索引的如何使用?mysql 的事務類型?默認的事務機制是什麼?
18.mysql數據庫優化,你是如何優化的。
19.redis的持久化類型分爲哪些?
AOF 與RDS 分別的處理過程是什麼?
Redis內建支持兩種持久化方案,snapshot快照和AOF 增量Log方式。快照顧名思義就是隔一段時間將完整的數據Dump下來存儲在文件中。AOF增量Log則是記錄對數據的修改操做(實際上記錄的就是每一個對數據產生修改的命令自己),兩種方案能夠並存,也各有優缺點,具體參見http://redis.io/topics/persistence
20.Java 線程池的原理,有哪些核心參數。當隊列跟線程池都滿了。纔有什麼處理機制?包括哪些處理機制。
21.分佈式的時候,如何保持回話。
22.JVM 內存模型,GC回收機制,有哪些算法。垃圾回收的過程是如何處理的?
23.簡單的一個程序。
public class testHello {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("test helllo");
}
}
運行該類。都作了哪些操做。詳細說明。
24.redis 的nosql 如何使用,數據結構有哪些?
25.有一個無須的數組,找出第二大的數。
26.寫一個遞歸的算法。
27.給定2個數,不利用第三個變量的時候,如何處理?
28.代理模式有幾種,請寫一個代理模式。
29.動態代理的實現原理。源碼分析、
30.是否看過spring的源碼。分析它的實現模式。
31.ThreadLocal 的的實現原理是什麼?什麼狀況下會致使內存泄漏?
32.js 的閉包 是什麼?
33.數據庫的讀寫分離,是如何處理的?大家項目的處理邏輯是什麼?有過哪些性能優化經驗?
34.如今有21億條數據,關鍵信息是。訂單id,商戶id,用戶id。 採用什麼分庫分表機制。實現查詢購買該商品的用戶哪些?
某用戶購買了哪些商品。
35.http 網絡的分層,分幾層。每種分發的依據。
36.MemcacheDB與
Redis的區別。redis 的數據結構有哪些
Redis內部的數據結構最終也會落實到key-Value對應的形式,不過從暴露給用戶的數據結構來看,要比memcached豐富,除了標準的一般意義的鍵值對,Redis還支持List,Set, Hashes,Sorted Set等數據結構
Redis內建支持兩種持久化方案,snapshot快照和AOF 增量Log方式。快照顧名思義就是隔一段時間將完整的數據Dump下來存儲在文件中。AOF增量Log則是記錄對數據的修改操做(實際上記錄的就是每一個對數據產生修改的命令自己),兩種方案能夠並存,也各有優缺點,具體參見http://redis.io/topics/persistence