1.面向對象和麪向過程的區別html
面向過程java
優勢:性能比面向對象高,由於類調用時須要實例化,開銷比較大,比較消耗資源;好比單片機、嵌入式開發、Linux/Unix等通常採用面向過程開發,性能是最重要的因素。linux
缺點:沒有面向對象易維護、易複用、易擴展web
面向對象面試
優勢:易維護、易複用、易擴展,因爲面向對象有封裝、繼承、多態性的特性,能夠設計出低耦合的系統,使系統更加靈活、更加易於維護redis
缺點:性能比面向過程低算法
2.Java的四個基本特性(抽象、封裝、繼承,多態)spring
抽象:就是把現實生活中的某一類東西提取出來,用程序代碼表示,咱們一般叫作類或者接口。抽象包括兩個方面:一個是數據抽象,一個是過程抽象。數據抽象也就是對象的屬性。過程抽象是對象的行爲特徵。sql
封裝:把客觀事物封裝成抽象的類,而且類能夠把本身的數據和方法只讓可信的類或者對象操做,對不可信的進行封裝隱藏。封裝分爲屬性的封裝和方法的封裝。數據庫
繼承:是對有着共同特性的多類事物,進行再抽象成一個類。這個類就是多類事物的父類。父類的意義在於抽取多類事物的共性。
多態:容許不一樣類的對象對同一消息作出響應。方法的重載、類的覆蓋正體現了多態。
3.重載和重寫的區別
重載:發生在同一個類中,方法名必須相同,參數類型不一樣、個數不一樣、順序不一樣,方法返回值和訪問修飾符能夠不一樣,發生在編譯時。
重寫:發生在父子類中,方法名、參數列表必須相同,返回值小於等於父類,拋出的異常小於等於父類,訪問修飾符大於等於父類;若是父類方法訪問修飾符爲private則子類中就不是重寫。
4.構造器Constructor是否可被override
構造器不能被重寫,不能用static修飾構造器,只能用public
private protected這三個權限修飾符,且不能有返回語句。
5.訪問控制符public,protected,private,以及默認的區別
private只有在本類中才能訪問;
public在任何地方都能訪問;
protected在同包內的類及包外的子類能訪問;
默認不寫在同包內能訪問。
6是否能夠繼承String類#
String類是final類故不能夠繼承,一切由final修飾過的都不能繼承。
7.String和StringBuffer、StringBuilder的區別
可變性
String類中使用字符數組保存字符串,private
final char value[],因此string對象是不可變的。StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字符數組保存字符串,char[]
value,這兩種對象都是可變的。
線程安全性
String中的對象是不可變的,也就能夠理解爲常量,線程安全。AbstractStringBuilder是StringBuilder與StringBuffer的公共父類,定義了一些字符串的基本操做,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer對方法加了同步鎖或者對調用的方法加了同步鎖,因此是線程安全的。StringBuilder並無對方法進行加同步鎖,因此是非線程安全的。
性能
每次對String 類型進行改變的時候,都會生成一個新的String 對象,而後將指針指向新的String 對象。StringBuffer每次都會對
StringBuffer 對象自己進行操做,而不是生成新的對象並改變對象引用。相同狀況下使用
StirngBuilder 相比使用
StringBuffer 僅能得到10%~15% 左右的性能提高,但卻要冒多線程不安全的風險。
8.hashCode和equals方法的關係
equals相等,hashcode必相等;hashcode相等,equals可能不相等。
9.抽象類和接口的區別
語法層次
抽象類和接口分別給出了不一樣的語法定義。
設計層次
抽象層次不一樣,抽象類是對類抽象,而接口是對行爲的抽象。抽象類是對整個類總體進行抽象,包括屬性、行爲,可是接口倒是對類局部(行爲)進行抽象。抽象類是自底向上抽象而來的,接口是自頂向下設計出來的。
跨域不一樣
抽象類所體現的是一種繼承關係,要想使得繼承關係合理,父類和派生類之間必須存在"is-a"
關係,即父類和派生類在概念本質上應該是相同的。對於接口則否則,並不要求接口的實現者和接口定義在概念本質上是一致的,僅僅是實現了接口定義的契約而已,"like-a"的關係。
10.自動裝箱與拆箱
裝箱:將基本類型用它們對應的引用類型包裝起來;
拆箱:將包裝類型轉換爲基本數據類型;
Java使用自動裝箱和拆箱機制,節省了經常使用數值的內存開銷和建立對象的開銷,提升了效率,由編譯器來完成,編譯器會在編譯期根據語法決定是否進行裝箱和拆箱動做。
11.什麼是泛型、爲何要使用以及泛型擦除
泛型,即「參數化類型」。
建立集合時就指定集合元素的類型,該集合只能保存其指定類型的元素,避免使用強制類型轉換。
Java編譯器生成的字節碼是不包涵泛型信息的,泛型類型信息將在編譯處理是被擦除,這個過程即類型擦除。泛型擦除能夠簡單的理解爲將泛型java代碼轉換爲普通java代碼,只不過編譯器更直接點,將泛型java代碼直接轉換成普通java字節碼。
類型擦除的主要過程以下:
1).將全部的泛型參數用其最左邊界(最頂級的父類型)類型替換。
2).移除全部的類型參數。
12.Java中的集合類及關係圖
List和Set繼承自Collection接口。
Set無序不容許元素重複。HashSet和TreeSet是兩個主要的實現類。
List有序且容許元素重複。ArrayList、LinkedList和Vector是三個主要的實現類。
Map也屬於集合系統,但和Collection接口不要緊。Map是key對value的映射集合,其中key列就是一個集合。key不能重複,可是value能夠重複。HashMap、TreeMap和Hashtable是三個主要的實現類。
SortedSet和SortedMap接口對元素按指定規則排序,SortedMap是對key列進行排序。
13.HashMap實現原理
具體原理參考文章:
深刻Java集合學習系列:HashMap的實現原理 - 莫等閒 - ITeye技術網站
HashMap的工做原理 - 全棧開發者
14.HashTable實現原理
具體原理參考文章:
Java 集合系列11之 Hashtable詳細介紹(源碼解析)和使用示例 - 若是天空不死 - 博客園
【源碼】Hashtable源碼剖析 - RowandJJ的小窩 - 博客頻道 - CSDN.NET
15.HashMap和HashTable區別
1).HashTable的方法前面都有synchronized來同步,是線程安全的;HashMap未經同步,是非線程安全的。
2).HashTable不容許null值(key和value都不能夠) ;HashMap容許null值(key和value均可以)。
3).HashTable有一個contains(Object
value)功能和containsValue(Object
value)功能同樣。
4).HashTable使用Enumeration進行遍歷;HashMap使用Iterator進行遍歷。
5).HashTable中hash數組默認大小是11,增長的方式是old*2+1;HashMap中hash數組的默認大小是16,並且必定是2的指數。
6).哈希值的使用不一樣,HashTable直接使用對象的hashCode; HashMap從新計算hash值,並且用與代替求模。
16.ArrayList和vector區別
ArrayList和Vector都實現了List接口,都是經過數組實現的。
Vector是線程安全的,而ArrayList是非線程安全的。
List第一次建立的時候,會有一個初始大小,隨着不斷向List中增長元素,當List 認爲容量不夠的時候就會進行擴容。Vector缺省狀況下自動增加原來一倍的數組長度,ArrayList增加原來的50%。
17.ArrayList和LinkedList區別及使用場景
區別
ArrayList底層是用數組實現的,能夠認爲ArrayList是一個可改變大小的數組。隨着愈來愈多的元素被添加到ArrayList中,其規模是動態增長的。
LinkedList底層是經過雙向鏈表實現的, LinkedList和ArrayList相比,增刪的速度較快。可是查詢和修改值的速度較慢。同時,LinkedList還實現了Queue接口,因此他還提供了offer(),
peek(), poll()等方法。
使用場景
LinkedList更適合從中間插入或者刪除(鏈表的特性)。
ArrayList更適合檢索和在末尾插入或刪除(數組的特性)。
18.Collection和Collections的區別
java.util.Collection 是一個集合接口。它提供了對集合對象進行基本操做的通用接口方法。Collection接口在Java 類庫中有不少具體的實現。Collection接口的意義是爲各類具體的集合提供了最大化的統一操做方式。
java.util.Collections 是一個包裝類。它包含有各類有關集合操做的靜態多態方法。此類不能實例化,就像一個工具類,服務於Java的Collection框架。
19.Concurrenthashmap實現原理
解析內容過多詳情私信我「面試資料」瞭解
20.Error、Exception區別
Error類和Exception類的父類都是throwable類,他們的區別是:
Error類通常是指與虛擬機相關的問題,如系統崩潰,虛擬機錯誤,內存空間不足,方法調用棧溢等。對於這類錯誤的致使的應用程序中斷,僅靠程序自己沒法恢復和和預防,遇到這樣的錯誤,建議讓程序終止。
Exception類表示程序能夠處理的異常,能夠捕獲且可能恢復。遇到這類異常,應該儘量處理異常,使程序恢復運行,而不該該隨意終止異常。
21.Unchecked
Exception和Checked Exception,各列舉幾個#
Unchecked Exception:
a. 指的是程序的瑕疵或邏輯錯誤,而且在運行時沒法恢復。
b. 包括Error與RuntimeException及其子類,如:OutOfMemoryError,
UndeclaredThrowableException, IllegalArgumentException,
IllegalMonitorStateException, NullPointerException, IllegalStateException,
IndexOutOfBoundsException等。
c. 語法上不須要聲明拋出異常。
Checked Exception:
a. 表明程序不能直接控制的無效外界狀況(如用戶輸入,數據庫問題,網絡異常,文件丟失等)
b. 除了Error和RuntimeException及其子類以外,如:ClassNotFoundException,
NamingException, ServletException, SQLException, IOException等。
c. 須要try catch處理或throws聲明拋出異常。
22.Java中如何實現代理機制(JDK、CGLIB)
JDK動態代理:代理類和目標類實現了共同的接口,用到InvocationHandler接口。
CGLIB動態代理:代理類是目標類的子類,用到MethodInterceptor接口。
23.多線程的實現方式
24.線程的狀態轉換
25.如何中止一個線程
26.什麼是線程安全
27.如何保證線程安全
28.synchronized如何使用
29.synchronized和Lock的區別
30.多線程如何進行等待通知/信息交互
31.sleep和wait的區別(考察的方向是是否會釋放鎖)
該知識點解析內容過多詳情私信我「面試資料」瞭解(文末彩蛋)
圖片描述(最多50字)
32.多線程與死鎖
死鎖是指兩個或兩個以上的進程在執行過程當中,因爭奪資源而形成的一種互相等待的現象,若無外力做用,它們都將沒法推動下去。
產生死鎖的緣由:
一.由於系統資源不足。
二.進程運行推動的順序不合適。
三.資源分配不當。
33.如何才能產生死鎖
產生死鎖的四個必要條件:
一.互斥條件:所謂互斥就是進程在某一時間內獨佔資源。
二.請求與保持條件:一個進程因請求資源而阻塞時,對已得到的資源保持不放。
三.不剝奪條件:進程已得到資源,在末使用完以前,不能強行剝奪。
四.循環等待條件:若干進程之間造成一種頭尾相接的循環等待資源關係。
34.死鎖的預防
打破產生死鎖的四個必要條件中的一個或幾個,保證系統不會進入死鎖狀態。
一.打破互斥條件。即容許進程同時訪問某些資源。可是,有的資源是不容許被同時訪問的,像打印機等等,這是由資源自己的屬性所決定的。因此,這種辦法並沒有實用價值。
二.打破不可搶佔條件。即容許進程強行從佔有者那裏奪取某些資源。就是說,當一個進程已佔有了某些資源,它又申請新的資源,但不能當即被知足時,它必須釋放所佔有的所有資源,之後再從新申請。它所釋放的資源能夠分配給其它進程。這就至關於該進程佔有的資源被隱蔽地強佔了。這種預防死鎖的方法實現起來困難,會下降系統性能。
三.打破佔有且申請條件。能夠實行資源預先分配策略。即進程在運行前一次性地向系統申請它所須要的所有資源。若是某個進程所需的所有資源得不到知足,則不分配任何資源,此進程暫不運行。只有當系統可以知足當前進程的所有資源需求時,才一次性地將所申請的資源所有分配給該進程。因爲運行的進程已佔有了它所需的所有資源,因此不會發生佔有資源又申請資源的現象,所以不會發生死鎖。
四.打破循環等待條件,實行資源有序分配策略。採用這種策略,即把資源事先分類編號,按號分配,使進程在申請,佔用資源時不會造成環路。全部進程對資源的請求必須嚴格按資源序號遞增的順序提出。進程佔用了小號資源,才能申請大號資源,就不會產生環路,從而預防了死鎖。
35.什麼叫守護線程,用什麼方法實現守護線程
36.Java線程池技術及原理
37.java併發包concurrent及經常使用的類
38.volatile關鍵字
因爲解析內容過多詳情私信我「面試資料」瞭解(文末彩蛋)
圖片描述(最多50字)
39.Java中的NIO,BIO,AIO分別是什麼
BIO:同步並阻塞,服務器實現模式爲一個鏈接一個線程,即客戶端有鏈接請求時服務器端就須要啓動一個線程進行處理,若是這個鏈接不作任何事情會形成沒必要要的線程開銷,固然能夠經過線程池機制改善。BIO方式適用於鏈接數目比較小且固定的架構,這種方式對服務器資源要求比較高,併發侷限於應用中,JDK1.4之前的惟一選擇,但程序直觀簡單易理解。
NIO:同步非阻塞,服務器實現模式爲一個請求一個線程,即客戶端發送的鏈接請求都會註冊到多路複用器上,多路複用器輪詢到鏈接有I/O請求時才啓動一個線程進行處理。NIO方式適用於鏈接數目多且鏈接比較短(輕操做)的架構,好比聊天服務器,併發侷限於應用中,編程比較複雜,JDK1.4開始支持。
AIO:異步非阻塞,服務器實現模式爲一個有效請求一個線程,客戶端的I/O請求都是由OS先完成了再通知服務器應用去啓動線程進行處理.AIO方式使用於鏈接數目多且鏈接比較長(重操做)的架構,好比相冊服務器,充分調用OS參與併發操做,編程比較複雜,JDK7開始支持。
IO和NIO區別
一.IO是面向流的,NIO是面向緩衝區的。
二.IO的各類流是阻塞的,NIO是非阻塞模式。
三.Java NIO的選擇器容許一個單獨的線程來監視多個輸入通道,你能夠註冊多個通道使用一個選擇器,而後使用一個單獨的線程來「選擇」通道:這些通道里已經有能夠處理的輸入,或者選擇已準備寫入的通道。這種選擇機制,使得一個單獨的線程很容易來管理多個通道。
41.序列化與反序列化
把對象轉換爲字節序列的過程稱爲對象的序列化。
把字節序列恢復爲對象的過程稱爲對象的反序列化。
對象的序列化主要有兩種用途:
一.把對象的字節序列永久地保存到硬盤上,一般存放在一個文件中;
二.在網絡上傳送對象的字節序列。
當兩個進程在進行遠程通訊時,彼此能夠發送各類類型的數據。不管是何種類型的數據,都會以二進制序列的形式在網絡上傳送。發送方須要把這個Java對象轉換爲字節序列,才能在網絡上傳送;接收方則須要把字節序列再恢復爲Java對象。
42.常見的序列化協議有哪些
Protobuf, Thrift, Hessian, Kryo
43.內存溢出和內存泄漏的區別
內存溢出是指程序在申請內存時,沒有足夠的內存空間供其使用,出現out of memory。
內存泄漏是指分配出去的內存再也不使用,可是沒法回收。
44.Java內存模型及各個區域的OOM,如何重現OOM
這部份內容很重要,詳細閱讀《深刻理解Java虛擬機》,也能夠詳細閱讀這篇文章
45.出現OOM如何解決
一. 可經過命令按期抓取heap dump或者啓動參數OOM時自動抓取heap dump文件。
二. 經過對比多個heap dump,以及heap dump的內容,分析代碼找出內存佔用最多的地方。
三. 分析佔用的內存對象,是不是由於錯誤致使的內存未及時釋放,或者數據過多致使的內存溢出。
47.Java內存管理及回收算法
閱讀這篇文章:Java 內存區域和GC機制 - Leo Chin - 博客園
48.Java類加載器及如何加載類(雙親委派)
閱讀文章:
https://www.ibm.com/developer...(推薦)
深刻理解Java類加載器(1):Java類加載原理解析 - Jack Zhou的專欄 - 博客頻道 - CSDN.NET
50.Statement和PreparedStatement之間的區別
一.PreparedStatement是預編譯的,對於批量處理能夠大大提升效率. 也叫JDBC存儲過程
二.使用
Statement 對象。在對數據庫只執行一次性存取的時侯,用
Statement 對象進行處理。PreparedStatement
對象的開銷比Statement大,對於一次性操做並不會帶來額外的好處。
三.statement每次執行sql語句,相關數據庫都要執行sql語句的編譯,preparedstatement是預編譯得,
preparedstatement支持批處理
四:代碼片斷1:
String updateString = "UPDATE COFFEES SET SALES = 75 " + "WHERE
COF_NAME LIKE ′Colombian′";
stmt.executeUpdate(updateString);
代碼片斷2:
PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET
SALES = ? WHERE COF_NAME LIKE ? ");
updateSales.setInt(1, 75);
updateSales.setString(2, "Colombian");
updateSales.executeUpdate();
片段2和片段1的區別在於,後者使用了PreparedStatement對象,而前者是普通的Statement對象。PreparedStatement對象不只包含了SQL語句,並且大多數狀況下這個語句已經被預編譯過,於是當其執行時,只需DBMS運行SQL語句,而沒必要先編譯。當你須要執行Statement對象屢次的時候,PreparedStatement對象將會大大下降運行時間,固然也加快了訪問數據庫的速度。
這種轉換也給你帶來很大的便利,沒必要重複SQL語句的句法,而只需更改其中變量的值,即可從新執行SQL語句。選擇PreparedStatement對象與否,在於相同句法的SQL語句是否執行了屢次,並且兩次之間的差異僅僅是變量的不一樣。若是僅僅執行了一次的話,它應該和普通的對象毫無差別,體現不出它預編譯的優越性。
五.執行許多SQL語句的JDBC程序產生大量的Statement和PreparedStatement對象。一般認爲PreparedStatement對象比Statement對象更有效,特別是若是帶有不一樣參數的同一SQL語句被屢次執行的時候。PreparedStatement對象容許數據庫預編譯SQL語句,這樣在隨後的運行中能夠節省時間並增長代碼的可讀性。
然而,在Oracle環境中,開發人員實際上有更大的靈活性。當使用Statement或PreparedStatement對象時,Oracle數據庫會緩存SQL語句以便之後使用。在一些狀況下,因爲驅動器自身須要額外的處理和在Java應用程序和Oracle服務器間增長的網絡活動,執行PreparedStatement對象實際上會花更長的時間。
然而,除了緩衝的問題以外,至少還有一個更好的緣由使咱們在企業應用程序中更喜歡使用PreparedStatement對象,那就是安全性。傳遞給PreparedStatement對象的參數能夠被強制進行類型轉換,使開發人員能夠確保在插入或查詢數據時與底層的數據庫格式匹配。
當處理公共Web站點上的用戶傳來的數據的時候,安全性的問題就變得極爲重要。傳遞給PreparedStatement的字符串參數會自動被驅動器忽略。最簡單的狀況下,這就意味着當你的程序試着將字符串「D'Angelo」插入到VARCHAR2中時,該語句將不會識別第一個「,」,從而致使悲慘的失敗。幾乎不多有必要建立你本身的字符串忽略代碼。
在Web環境中,有惡意的用戶會利用那些設計不完善的、不能正確處理字符串的應用程序。特別是在公共Web站點上,在沒有首先經過PreparedStatement對象處理的狀況下,全部的用戶輸入都不該該傳遞給SQL語句。此外,在用戶有機會修改SQL語句的地方,如HTML的隱藏區域或一個查詢字符串上,SQL語句都不該該被顯示出來。
51.servlet生命週期及各個方法
參考文章Servlet 生命週期、工做原理
52.servlet中如何自定義filter
參考文章Servlet Filter - javawebsoa - 博客園
53.JSP原理
參考文章JSP運行原理及運行過程 - 韓學敏 專欄 - 博客頻道 - CSDN.NET
54.JSP和Servlet的區別
(1)JSP經編譯後就變成了「類servlet」。
(2)JSP由HTML代碼和JSP標籤構成,更擅長頁面顯示;Servlet更擅長流程控制。
(3)JSP中嵌入JAVA代碼,而Servlet中嵌入HTML代碼。
55.JSP的動態include和靜態include
(1)動態include用jsp:include動做實現,如<jsp:include page="abc.jsp" flush="true" />,它老是會檢查所含文件中的變化,適合用於包含動態頁面,而且能夠帶參數。會先解析所要包含的頁面,解析後和主頁面合併一塊兒顯示,即先編譯後包含。
(2)靜態include用include僞碼實現,不會檢查所含文件的變化,適用於包含靜態頁面,如<%@
include file="qq.htm" %>,不會提早解析所要包含的頁面,先把要顯示的頁面包含進來,而後統一編譯,即先包含後編譯。
56.Struts中請求處理過程
參考文章struts2請求過程源碼分析 - 殘劍_ - 博客園
57.MVC概念
參考文章MVC的概念 - 一江春水 - 博客園
58.Springmvc與Struts區別
參考文章:
同是流行MVC框架,比較Strtus2和SpringMVC的區別 - 湯長海的博客 - 博客頻道 - CSDN.NET
SpringMVC與Struts2區別與比較總結 - Java我人生的技術博客 - 博客頻道 - CSDN.NET
59.Hibernate/Ibatis二者的區別
參考文章Hibernate與 MyBatis的比較
60.Hibernate一級和二級緩存
參考文章Hibernate緩存:一級緩存和二級緩存 - JavaQ - 博客頻道 - CSDN.NET
61.簡述Hibernate常見優化策略
參考文章Hibernate性能優化的經常使用措施 - 觀千劍然後識器,操千曲然後曉聲。 - 博客頻道 - CSDN.NET
62.Springbean的加載過程(推薦看Spring的源碼)
參考文章看看Spring的源碼(一)——Bean加載過程
63.Springbean的實例化(推薦看Spring的源碼)
參考文章看看Spring的源碼(二)——bean實例化
64.Spring如何實現AOP和IOC(推薦看Spring的源碼)
參考文章Java輕量級業務層框架Spring兩大核心IOC和AOP原理
65.Springbean注入方式
參考文章spring四種依賴注入方式 - 上善若水任方圓 - ITeye技術網站
66.Spring的事務管理
這個主題的參考文章沒找到特別好的,http://blog.csdn.net/trigl/ar...。
67.Spring事務的傳播特性
參考文章Spring事務的傳播特性 - 陳建秋 - 博客頻道 - CSDN.NET
68.springmvc原理
參考文章SpringMVC工做原理_張曉龍_新浪博客
69.springmvc用過哪些註解
參考文章詳解Spring MVC 4經常使用的那些註解
70.Restful有幾種請求
參考文章,http://www.infoq.com/cn/artic...,該篇寫的比較全。
71.Restful好處
(1)客戶-服務器:客戶-服務器約束背後的原則是分離關注點。經過分離用戶接口和數據存儲這兩個關注點,改善了用戶接口跨多個平臺的可移植性;同時經過簡化服務器組件,改善了系統的可伸縮性。
(2)無狀態:通訊在本質上是無狀態的,改善了可見性、可靠性、可伸縮性.
(3)緩存:改善了網絡效率減小一系列交互的平均延遲時間,來提升效率、可伸縮性和用戶可覺察的性能。
(4)統一接口:REST架構風格區別於其餘基於網絡的架構風格的核心特徵是,它強調組件之間要有一個統一的接口。
72.Tomcat,Apache,JBoss的區別
Apache:HTTP服務器(WEB服務器),相似IIS,能夠用於創建虛擬站點,編譯處理靜態頁面,能夠支持SSL技術,支持多個虛擬主機等功能。
Tomcat:Servlet容器,用於解析jsp,Servlet的Servlet容器,是高效,輕量級的容器。缺點是不支持EJB,只能用於java應用。
Jboss:應用服務器,運行EJB的J2EE應用服務器,遵循J2EE規範,可以提供更多平臺的支持和更多集成功能,如數據庫鏈接,JCA等,其對Servlet的支持是經過集成其餘Servlet容器來實現的,如tomcat和jetty。
73.memcached和redis的區別
(1)性能對比:因爲Redis只使用單核,而Memcached可使用多核,因此平均每個核上Redis在存儲小數據時比Memcached性能更高。而在100k以上的數據中,Memcached性能要高於Redis,雖然Redis最近也在存儲大數據的性能上進行優化,可是比起Memcached,仍是稍有遜色。
(2)內存使用效率對比:使用簡單的key-value存儲的話,Memcached的內存利用率更高,而若是Redis採用hash結構來作key-value存儲,因爲其組合式的壓縮,其內存利用率會高於Memcached。
(3)Redis支持服務器端的數據操做:Redis相比Memcached來講,擁有更多的數據結構和並支持更豐富的數據操做,一般在Memcached裏,你須要將數據拿到客戶端來進行相似的修改再set回去。這大大增長了網絡IO的次數和數據體積。在Redis中,這些複雜的操做一般和通常的GET/SET同樣高效。因此,若是須要緩存可以支持更復雜的結構和操做,那麼Redis會是不錯的選擇。
74.如何理解分佈式鎖
參考文章:
分佈式鎖1 Java經常使用技術方案
http://blog.csdn.net/nicewura...。
75.你知道的開源協議有哪些
常見的開源協議有GPL、LGPL、BSD、Apache Licence
vesion 2.0、MIT,詳細內容參考文章:
http://blog.jobbole.com/44175/、http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html。
76.json和xml區別
XML:
(1)應用普遍,可擴展性強,被普遍應用各類場合;
(2)讀取、解析沒有JSON快;
(3)可讀性強,可描述複雜結構。
JSON:
(1)結構簡單,都是鍵值對;
(2)讀取、解析速度快,不少語言支持;
(3)傳輸數據量小,傳輸速率大大提升;
(4)描述複雜結構能力較弱。
77.設計模式
參考文章:http://www.cnblogs.com/beijig...。
78.設計模式的六大原則
參考文章http://www.uml.org.cn/sjms/20...。
79.用一個設計模式寫一段代碼或畫出一個設計模式的UML
參考文章23種設計模式 - 郗曉勇 - 博客園
80.高內聚,低耦合方面的理解
參考文章http://my.oschina.net/heweipo...。
81.深度優先和廣度優先算法
推薦看書籍複習!可參考文章:
九、深度優先算法,圖的遍歷 - EdwardLewis的日誌 - 網易博客
十、廣度優先搜索,圖的遍歷 - EdwardLewis的日誌 - 網易博客
深度優先搜索與廣度優先搜索 - AndyElvis的專欄 - 博客頻道 - CSDN.NET
樹的深度優先與廣度優先遍歷 - driftcloudy - ITeye技術網站
82.排序算法及對應的時間複雜度和空間複雜度
推薦看書籍複習!可參考文章:
各類排序算法的分析及java實現 - 殘劍_ - 博客園
經常使用排序算法的時間複雜度和空間複雜度 - 小僧的博客 - 博客頻道 - CSDN.NET
常見排序算法小結 - Simple life - 博客頻道 - CSDN.NET
83.排序算法編碼實現
參考各類排序算法的分析及java實現 - 殘劍_ - 博客園
84.查找算法
參考七大查找算法
85.B+樹
參考B樹、B-樹、B+樹、B*樹都是什麼 - syx278250658 - 博客園
86.KMP算法
推薦閱讀數據複習!參考【經典算法】--KMP,深刻講解next數組的求解 - c_cloud - 博客園
87.hash算法及經常使用的hash算法
參考常見hash算法的原理
88.如何判斷一個單鏈表是否有環
參考文章:
如何判斷一個單鏈表是否有環?
http://my.oschina.net/u/23916...{{totalPage}}
89.隊列、棧、鏈表、樹、堆、圖
推薦閱讀數據複習!
90.linux經常使用命令
參考Linux經常使用操做命令
91.如何查看內存使用狀況
參考linux系統下查看CPU、內存負載狀況 - JavaQ - 博客頻道 - CSDN.NET
92.Linux下如何進行進程調度
推薦閱讀書籍複習,參考文章:
Linux進程調度原理 - aitao - 博客園
Linux進程調度機制 - rainharder的專欄 - 博客頻道 - CSDN.NET
93.產生死鎖的必要條件
參考操做系統:死鎖的產生、條件、和解鎖_君臨天下_新浪博客
94.死鎖預防
參考操做系統:死鎖的產生、條件、和解鎖_君臨天下_新浪博客
95.數據庫範式
參考數據庫三大範式的理解
96.數據庫事務隔離級別
參考數據庫事務隔離級別 - FG2006的專欄 - 博客頻道 - CSDN.NET
97.數據庫鏈接池的原理
參考談談數據庫鏈接池的原理 - 鴻軍 - 博客頻道 - CSDN.NET
98.樂觀鎖和悲觀鎖
參考深刻理解樂觀鎖與悲觀鎖 - OPEN 開發經驗庫
99.如何實現不一樣數據庫的數據查詢分頁
參考不一樣數據庫的分頁查詢實現方法總結 - yztezhl的專欄 - 博客頻道 - CSDN.NET
100.SQL注入的原理,如何預防
參考談談六個防止SQL注入式攻擊的建議-阿里雲資訊網
101.數據庫索引的實現(B+樹介紹、和B樹、R樹區別)
參考文章:
數據庫索引的實現原理 - 輝仔 の專欄 - 博客頻道 - CSDN.NET
由淺入深理解數據庫中索引的底層實現 | 學步園
102.SQL性能優化
參考文章:
高手詳解SQL性能優化十條經驗 - 51CTO.COM
Oracle SQL性能優化 - 一江水 - 博客園
103.數據庫索引的優缺點以及何時數據庫索引失效
參考文章:
數據庫索引的做用和優勢缺點以及索引的11中用法 - 技術與人生 - 博客園
正確高效使用數據庫不可不知的索引失效問題 - simplefrog - 博客園
SQL優化避免索引失效 - OPEN 開發經驗庫
Colin Lau Oracle
哪些狀況下索引會失效? - 曾是土木人 - 博客園
104.Redis的數據類型
參考Redis五種數據類型介紹 - hechurui的專欄 - 博客頻道 - CSDN.NET
105.OSI七層模型以及TCP/IP四層模型
參考文章:
OSI七層協議模型和TCP/IP四層模型比較 - SprintfWater的專欄 - 博客頻道 - CSDN.NET
OSI七層模型及TCP/IP四層模型 - 五塵 - 博客園
TCP/IP四層模型和OSI七層模型的概念 - superjunjin的專欄 - 博客頻道 - CSDN.NET
106.HTTP和HTTPS區別
參考:
HTTP和HTTPS詳解 - 小M的專欄 - 博客頻道 - CSDN.NET
HTTP與HTTPS的區別-馬海祥博客
107.HTTP報文內容
參考文章:
HTTP請求報文和HTTP響應報文-博客-雲棲社區-阿里雲
http報文詳解 - klguang - 博客園
HTTP報文詳解 - 蔡少東的我的頁面
108.get提交和post提交的區別
參考文章:
淺談HTTP中Get與Post的區別 - hyddd - 博客園
詳解HTTP中GET和POST的區別 | 果凍想
109.get提交是否有字節限制,若是有是在哪限制的
參考詳解HTTP中GET和POST的區別 | 果凍想
110.TCP的三次握手和四次揮手
閱讀TCP的三次握手和四次揮手
111.session和cookie的區別
參考cookie 和session 的區別詳解
112.HTTP請求中Session實現原理
參考Session實現原理 - 洛少的專欄 - 博客頻道 - CSDN.NET
113.redirect與forward區別
參考forward和redirect的區別 - 簡單愛_wxg - 博客園
114.TCP和UDP區別
參考TCP和UDP的區別(轉) - bizhu - 博客園
讀者福利
轉發此文關注我536976563便可領取小編精心準備的架構書籍(電子版)、面試文檔以及答案詳解。