一,數據庫的備份與導入
1),數據庫的備份
1.導出整個數據庫
mysqldump -u 用戶名 -p 數據庫名 > 導出的文件名
例:mysqldump -u dbadmin -p myblog > /home/zhangy/blog/database_bak/myblog.sql
2.導出一個表
mysqldump -u 用戶名 -p 數據庫名 表名> 導出的文件名
例:mysqldump -u dbadmin -p myblog wp_users> /home/zhangy/blog/database_bak/blog_users.sql
3.導出一個數據庫結構
mysqldump -u dbadmin -p -d --add-drop-table myblog > /home/zhangy/blog/database_bak/blog_struc.sql
說明:-d 沒有數據 --add-drop-table 在每一個create語句以前增長一個drop table
4.導出數據庫一個表結構
mysqldump -u dbadmin -p -d --add-drop-table myblog wp_users> /home/zhangy/blog/database_bak/blog_users_struc.sql
說明:-d 沒有數據 --add-drop-table 在每一個create語句以前增長一個drop table
2),數據庫的導入
1,用 mysqldump 備份出來的文件是一個能夠直接倒入的 SQL 腳本,有兩種方法能夠將數據導入。
例如:
#/usr/local/mysql/bin/mysql -u root -p ***** myblog < /home/zhangy/blog/database_bak/myblog.sql
這種方法,我之前常常如今不多用了,由於很容易產生亂碼,由於:
a,導出數據庫時,你若是忘了設置導出字符集的話,在導入的時候,就有可能會出問題.
b,假如,你導出時設置導出時設置了utf8的編碼,可是你又把你的數據庫如今的字符集改爲了gb2312的.這樣又會亂碼。
2,用 source 語句
例如:
mysql -u dbadmin -p
use myblog;
set names utf8; #這裏的字符集根你的將要導入的數據庫的字符集一至。
source /home/zhangy/blog/database_bak/myblog.sql;
11: socket編程
兩個程序(進程)運行時,它們經過從套接字讀出和寫入數據彼此之間進行通訊。
網絡應用程序,經過socket進行通訊。 socket將發送方的數據經過socket通訊(指定IP, 端口,協議)傳遞到接收方。
網絡層的「ip地址」能夠惟一標識網絡中的主機,而傳輸層的「協議+端口」能夠惟一標識主機中的應用程序(進程)。這樣利用三元組(ip地址,協議,端口)就能夠標識網絡的進程了,網絡中的進程通訊就能夠利用這個標誌與其它進程進行交互。
網絡中的進程是經過socket來通訊的
https://blog.csdn.net/m0_37947204/article/details/80489431
http://www.javashuo.com/article/p-drqmpbyr-gs.html
https://www.cnblogs.com/wangcq/p/3520400.html
12:爲何有進程了,還要有線程
由於進程是系統分配資源的最小單位,進程切換開銷大。
線程容許在同一個進程中同時存在多個程序控制流,線程會共享進程範圍內的資源。
緣由: 線程是比進程更輕量級的調度執行單位。線程的引入,能夠把一個進程的資源分配和執行調度分開,各個線程便可以共享進程資源(內存地址,文件I/O等),又能夠獨立調度(線程是CPU調度的基本單位)。
13:多路複用和多路分解
多路複用:將多個進程的套接字的數據取出,爲各個數據添加上協議(ip,端口號), 組成分組,發送出去。
多路分解: 將套接字中的數據分解,發給各個進程,叫作多路分解。
IO多路複用:就是多個客戶端線程發送過來IO請求,來的都放進來,而不是每一個鏈接爲其開啓一個服務端進程。服務端將其放到一個隊列中,而後服務端一個線程對這個隊列進行處理。處理完返回。至關於一個事件循環Event loop.
後臺就一個線程,避免了線程切換和後天線程搶奪資源, 可能單cpu
14:校驗和
一個十六進制數,
0x8732ACD87
前4爲和後四位化成二進制,相加獲得一個和,若是最高位有進位,就和的最後+1。 而後取反
15: 創建兩個列的索引,複合查詢 。符合索引的有效索引爲最長前綴匹配。 例如 index(A,B,C) 那麼有效索引爲:(A),(A,B),(A,B,C)
16:String intern的用法
http://www.javashuo.com/article/p-xwueyuaf-eo.html
上面是jdk源碼中對intern方法的詳細解釋。簡單來講就是intern用來返回常量池中的某字符串,若是常量池中已經存在該字符串,則直接返回常量池中該對象的引用。不然,在常量池中加入該對象,而後 返回引用。下面的一個例子詳細的解釋了intern的做用過程:
例如: jdk 1.7以後,將會在堆上建立對象,在常量池中保存符號引用, String.intern()返回字符串的首次出現的實例引用。
String st2=new StringBuilder("計算機").append("軟件").toString(); System.out.println(st2.intern()==st2); String st3=new StringBuilder("計算機").append("軟件").toString(); System.out.println(st3.intern()==st3); System.out.println(st3.intern()==st2); /**結果 true false true */
st3.intern()是首次計算機軟件出現的實例引用(在常量池中)。
17:String 的equals 和==的區別
==是對象引用的比較
equals是邏輯一致性比較,對象覆蓋了該方法,將會按照對象設定的比較方式進行比較。
String 覆蓋了equals方法
public final class String implements Serializable, Comparable<String>, CharSequence { public boolean equals(Object var1) { if (this == var1) { return true; } else { if (var1 instanceof String) { String var2 = (String)var1; int var3 = this.value.length; if (var3 == var2.value.length) { char[] var4 = this.value; char[] var5 = var2.value; for(int var6 = 0; var3-- != 0; ++var6) { if (var4[var6] != var5[var6]) { return false; } } return true; } } return false; } } }
String s1 = new String("abc"); String s2 = new String("abc"); System.out.println(s1 == s2); System.out.println(s1.equals(s2)); /**結果 false true */
18:Java 中的編譯期常量是什麼?使用它又什麼風險?
風險:使用了一個其它Jar包的編譯器常量,jar包的發佈者有可能會改變它的值。而你不知道,還在使用,解決方法,當更新Jar依賴時,要從新編譯。
公共靜態不可變(public static final )變量也就是咱們所說的編譯期常量,這裏的 public 可選的。實際上這些變量在編譯時會被替換掉,由於編譯器知道這些變量的值,而且知道這些變量在運行時不能改變。這種方式存在的一個問題是你使用了一個內部的或第三方庫中的公有編譯時常量,可是這個值後面被其餘人改變了,可是你的客戶端仍然在使用老的值,甚至你已經部署了一個新的jar。爲了不這種狀況,當你在更新依賴 JAR 文件時,確保從新編譯你的程序。
19:運行時常量池
運行時常量池是方法區的一部分,存放編譯器生成的各類字面量和符號引用, 字面量和符號引用 是Class文件的一部分。
方法區用於存放類信息,常量,靜態變量,編譯後的代碼。
20: BIO,NIO,AIO. Selector
http://www.javashuo.com/article/p-sqmzvpaz-nh.html
http://www.javashuo.com/article/p-qkkfaxit-kk.html
BIO同步阻塞:BIO 每一個鏈接須要服務器建立一個線程。
NIO 同步非阻塞:NIO的最重要的地方是當一個鏈接建立後,不須要對應一個線程,這個鏈接會被註冊到多路複用器上面,因此全部的鏈接只須要一個線程就能夠搞定,當這個線程中的多路複用器進行輪詢的時候,發現鏈接上有請求的話,纔開啓一個線程進行處理,也就是一個請求一個線程模式。
非阻塞:須要while輪詢
AIO 異步阻塞:經過read,write異步操做來完成,
與NIO不一樣,當進行讀寫操做時,只須直接調用API的read或write方法便可。這兩種方法均爲異步的,對於讀操做而言,當有流可讀取時,操做系統會將可讀的流傳入read方法的緩衝區,並通知應用程序;對於寫操做而言,當操做系統將write方法傳遞的流寫入完畢時,操做系統主動通知應用程序。 便可以理解爲,read/write方法都是異步的,完成後會主動調用回調函數。
同步和異步:
同步和異步是針對應用程序和內核的交互而言的,同步指的是用戶進程觸發IO操做並等待或者輪詢的去查看IO操做是否就緒,而異步是指用戶進程觸發IO操做之後便開始作本身的事情,而當IO操做已經完成的時候會獲得IO完成的通知。
Selector 是一個選擇器,輪詢器。 用於NIO同步非阻塞。
http://www.importnew.com/26258.html
select將會採用輪詢的方式對隊列中的全部鏈接進行查詢,獲取有效的鏈接。可是,當鏈接特別多時,例如1000000個鏈接,可是有效請求特別少時,例如100個,那麼將會形成極大的浪費。
epoll將活躍鏈接保存在一個紅黑樹中,每次只查詢活躍鏈接。 已經取代了select/poll.
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package java.nio.channels; import java.io.Closeable; import java.io.IOException; import java.nio.channels.spi.SelectorProvider; import java.util.Set; public abstract class Selector implements Closeable { protected Selector() { } public static Selector open() throws IOException { return SelectorProvider.provider().openSelector(); } public abstract boolean isOpen(); public abstract SelectorProvider provider(); public abstract Set<SelectionKey> keys(); public abstract Set<SelectionKey> selectedKeys(); public abstract int selectNow() throws IOException; public abstract int select(long var1) throws IOException; public abstract int select() throws IOException; public abstract Selector wakeup(); public abstract void close() throws IOException; }
21: 瞭解的設計模式
a:工廠模式
http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html
http://www.cnblogs.com/java-my-life/archive/2012/04/07/2433939.html
c: 適配器模式:
http://www.cnblogs.com/java-my-life/archive/2012/04/13/2442795.html
d: 觀察者模式
http://www.cnblogs.com/java-my-life/archive/2012/05/16/2502279.html
e: 策略模式
http://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html
f: 代理模式
http://www.cnblogs.com/java-my-life/archive/2012/04/23/2466712.html
解釋:
狀態模式:狀態決定行爲, 狀態是一個接口,狀態(子類對象不一樣)不一樣,行爲不一樣。
策略模式:客戶端選擇不一樣的策略,選擇不一樣的計算方法
工廠模式:各個零部件(產品零部件)的工廠,工程師組裝
抽象工廠模式:每個產品,構成一個產品族,有產品工廠生成
建造者模式:一個統領,指揮建造者一步一步構建產品對象。 統領,建造者,產品(part1,part2).
適配器模式:適配類(ada.method1)沒有須要的目標對象(target.method1,target.method2)中的方法,就建造一個適配器(method1(){ada.method1},method2),繼承適配類和目標對象,將目標對象的方法用適配類方法重寫.
觀察者模式:爲主題添加觀察者對象(繼承自抽象觀察者),當主題變化時,通知觀察者。 有推模式和拉模式,推模式是將主題變化的狀態推給觀察者,拉模式是將主題對象直接給觀察者,由觀察者本身從主題對象中獲取內容。
代理模式:爲一個類建立一個代理類,其中,代理類和被代理的類(目標類)實現了相同的接口,代理類也實現了InvocationHandler。 生成的代理類中有目標類的方法和hashCode,equals,toString方法,當調用這幾個方法時>會調用super(invocaitonHandler)>會調用invoke方法>調用method.invoke(target)>調用了目標類了的方法。
22:緩存策略
http://www.javashuo.com/article/p-firrwpbx-gv.html
23:redis
redis底層是用字典(dict)數據結構存儲的。
dict裏面有兩個哈希表,每一個哈希表的桶裏面存儲dictEntry鏈表,dictEntry存儲具體的key和value。
redis支持的數據類型hashtable是用開鏈表的形式(和hashMap差很少)。
Redis也是惰性刪除,即要用到數據時,先檢查key是否過時,過時則刪除,而後返回錯誤。單純的靠惰性刪除,上面說過可能會致使內存浪費,因此Redis也有補充方案,Redis裏面有個定時執行的函數,叫servercron,它是維護服務器的函數,在它裏面,會對過時數據進行刪除,注意不是全刪,而是在必定的時間內,對每一個數據庫的expire dict裏面的數據隨機選取出來,若是過時,則刪除,不然再選,直到規定的時間到。即隨機選取過時的數據刪除,這個操做的時間分兩種,一種較長,一種較短,通常執行短期的刪除,每隔必定的時間,執行一次長時間的刪除。這樣能夠有效的緩解光采用惰性刪除而致使的內存浪費問題。
redis持久化
1:保存redis數據庫文件 RDB ,後臺線程執行bgsave
2: 保存redis命令
2.1 根據aof_buf 向aof文件中輸入命令
2.2 aof_rewrite命令能夠根據數據庫生成操做命令(逆向),將生成的命令存入aof
aof命令載入的時候,redis生成一個假的客戶端,去執行這些命令,最後將原來 的數據恢復出來。
Redis是單event loop的,主線程是單線程的。
24: epoll
http://www.javashuo.com/article/p-wsiwtuxy-m.html
http://www.javashuo.com/article/p-bfjmamzc-mt.html
https://www.jianshu.com/p/36197dac65d9
select 使用掃描全表的形式找出活躍的鏈接,有最大fd限制,1024。 10萬個fd至少須要100個進程
epoll首先create是建立對象的epoll對象(事件)的,ctl操做爲紅黑樹添加,更新事件。當有有效事件發生時,經過事件的回調函數callback事件添加到了雙向鏈表rlist中。
await查詢雙向鏈表中有無事件便可,有的話處理,沒有等待。
25:複合索引的匹配策略,左向最長匹配
例如一個索引index(a,b,c), 那麼可使用索引的選擇項爲:
select * from table a=''
select * from table a='' and b='';
select * from table a='' and b='' and c='';
26: 修飾符的做用範圍從大到小 public - protected- default-private
27:進程間通訊方式: http://www.javashuo.com/article/p-vifdlolq-bd.html
近日想總結下進程間,線程間的通訊方式,在網上搜索了下,感受寫的很好,照搬過來,當作加深記憶。
幾種進程間的通訊方式
(1) 管道(pipe):管道是一種半雙工的通訊方式,數據只能單向流動,並且只能在具備血緣關係的進程間使用。進程的血緣關係一般指父子進程關係。
(2)有名管道(named pipe):有名管道也是半雙工的通訊方式,可是它容許無親緣關係進程間通訊。
(3)信號量(semophore):信號量是一個計數器,能夠用來控制多個進程對共享資源的訪問。它一般做爲一種鎖機制,防止某進程正在訪問共享資源時,其餘進程也訪問該資源。所以,主要做爲進程間以及同一進程內不一樣線程之間的同步手段。
(4)消息隊列(message queue):消息隊列是由消息組成的鏈表,存放在內核中 並由消息隊列標識符標識。消息隊列克服了信號傳遞信息少,管道只能承載無格式字節流以及緩衝區大小受限等缺點。
(5)信號(signal):信號是一種比較複雜的通訊方式,用於通知接收進程某一事件已經發生。
(6)共享內存(shared memory):共享內存就是映射一段能被其餘進程所訪問的內存,這段共享內存由一個進程建立,但多個進程均可以訪問,共享內存是最快的IPC方式,它是針對其餘進程間的通訊方式運行效率低而專門設計的。它每每與其餘通訊機制,如信號量配合使用,來實現進程間的同步和通訊。
(7)套接字(socket):套接口也是一種進程間的通訊機制,與其餘通訊機制不一樣的是它能夠用於不一樣及其間的進程通訊。
幾種線程間的通訊機制
一、鎖機制
1.1 互斥鎖:提供了以排它方式阻止數據結構被併發修改的方法。
1.2 讀寫鎖:容許多個線程同時讀共享數據,而對寫操做互斥。
1.3 條件變量:能夠以原子的方式阻塞進程,直到某個特定條件爲真爲止。對條件測試是在互斥鎖的保護下進行的。條件變量始終與互斥鎖一塊兒使用。
二、信號量機制:包括無名線程信號量與有名線程信號量
三、信號機制:相似於進程間的信號處理。
線程間通訊的主要目的是用於線程同步,因此線程沒有象進程通訊中用於數據交換的通訊機制。
28:求一個環形鏈表的長度,
能夠取一個節點做爲頭節點,而後將該節點賦值爲head, 再一次向下取節點,並判斷是否等於頭節點,直到等於頭結點,結束。
29:死鎖產生的條件和預防
http://www.javashuo.com/article/p-byvlpsof-gq.html
30:深複製與淺複製 https://www.jianshu.com/p/aa6d493603d3
淺複製:僅僅複製一個對象的引用,clone就是淺複製。 克隆對象和原對象指向相同的位置。改變淺複製的引用的值,也將改變原對象的值。
深複製:經過序列化將對象寫到流裏面,而後經過反序列化復原原對象。 改變深複製對象的值,不會改變原對象的值。
31:TCP的狀態
http://blog.51cto.com/jinlong/2065461
32:悲觀鎖和樂觀鎖 http://www.javashuo.com/article/p-qpuqpsfi-gk.html
首先介紹一些樂觀鎖與悲觀鎖:
悲觀鎖:老是假設最壞的狀況,每次去拿數據的時候都認爲別人會修改,因此每次在拿數據的時候都會上鎖,這樣別人想拿這個數據就會阻塞直到它拿到鎖。傳統的關係型數據庫裏邊就用到了不少這種鎖機制,好比行鎖,表鎖等,讀鎖,寫鎖等,都是在作操做以前先上鎖。再好比Java裏面的同步原語synchronized關鍵字的實現也是悲觀鎖。
樂觀鎖:顧名思義,就是很樂觀,每次去拿數據的時候都認爲別人不會修改,因此不會上鎖,可是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,可使用版本號等機制。樂觀鎖適用於多讀的應用類型,這樣能夠提升吞吐量,像數據庫提供的相似於write_condition機制,其實都是提供的樂觀鎖。在Java中java.util.concurrent.atomic包下面的原子變量類就是使用了樂觀鎖的一種實現方式CAS實現的。
33:裝態碼
200 OK
問題
主動發起關閉鏈接的操做的一方將達到TIME_WAIT狀態,並且這個狀態要保持Maximum Segment Lifetime的兩倍時間。爲何要這樣作而不是直接進入CLOSED狀態?
緣由:
- 保證TCP協議的全雙工鏈接可以可靠關閉
- 保證此次鏈接的重複數據段從網絡中消失
解釋
- 若是Client直接CLOSED了,那麼因爲IP協議的不可靠性或者是其它網絡緣由,致使Server沒有收到Client最後回覆的ACK。那麼Server就會在超時以後繼續發送FIN,此時因爲Client已經CLOSED了,就找不到與重發的FIN對應的鏈接,最後Server就會收到RST而不是ACK,Server就會覺得是鏈接錯誤把問題報告給高層。這樣的狀況雖然不會形成數據丟失,可是卻致使TCP協議不符合可靠鏈接的要求。因此,Client不是直接進入CLOSED,而是要保持TIME_WAIT,當再次收到FIN的時候,可以保證對方收到ACK,最後正確的關閉鏈接。
- 若是Client直接CLOSED,而後又再向Server發起一個新鏈接,咱們不能保證這個新鏈接與剛關閉的鏈接的端口號是不一樣的。也就是說有可能新鏈接和老鏈接的端口號是相同的。通常來講不會發生什麼問題,可是仍是有特殊狀況出現:假設新鏈接和已經關閉的老鏈接端口號是同樣的,若是前一次鏈接的某些數據仍然滯留在網絡中,這些延遲數據在創建新鏈接以後纔到達Server,因爲新鏈接和老鏈接的端口號是同樣的,又由於TCP協議判斷不一樣鏈接的依據是socket pair,因而,TCP協議就認爲那個延遲的數據是屬於新鏈接的,這樣就和真正的新鏈接的數據包發生混淆了。因此TCP鏈接還要在TIME_WAIT狀態等待2倍MSL,這樣能夠保證本次鏈接的全部數據都從網絡中消失。
35: 判斷一個鏈表中是否有環, http://www.javashuo.com/article/p-hmasbovi-ex.html
36: String ,StringBuffer,StringBuilder http://www.javashuo.com/article/p-pzzvfptq-mr.html
37: jvm何時會進行full gc.
a:當老年代的最大可用的連續空間大於新生代全部對象的總空間時。 容許minor gc
b: 當老年代的最大可用的連續空間S小於新生代全部對象的總空間時, 可是開啓了HandlePromotionFailure=true設置容許擔保失敗時,而且S大於歷次晉升到老年代對象的平均大小。容許發生minor gc
c: jdk1.6以後,HandlePromotionFailure已經再也不使用,只要老年代的最大可用的連續空間大於新生代全部對象的總空間 或者 大於歷次晉升到老年代對象的平均大小。容許發生minor gc
何時會進行full gc.
d: 老年代的最大可用的連續空間小於歷次晉升到老年代對象的平均大小,進行full gc。
當老年代的最大可用的連續空間小於新生代全部對象的總空間時,開啓了HandlePromotionFailure=false不容許擔保失敗時,將進行full gc。
38:Spring Boot 啓動流程,啓動解析
http://www.javashuo.com/article/p-yytkatbe-ew.html
http://www.javashuo.com/article/p-flhyhcgb-dz.html
Spring 事務原理
http://www.javashuo.com/article/p-pqkcmraz-ce.html
Spring 事務傳播機制:http://www.javashuo.com/article/p-fhpapdbr-dg.html
39:elasticsearch 原理
http://www.javashuo.com/article/p-zksoblfe-bo.html
倒排索引:http://www.javashuo.com/article/p-dampwjyp-by.html
倒排索引,和MyISAM的全文檢索同樣,用單詞找文檔。單詞作鍵,文檔列表做爲值。
單詞1:【記錄1,記錄2】
單詞2:【記錄1,記錄3,記錄5】
40:iPv4 和ipv6所包含的字段
ipv4: 版本號,首部長度,服務類型(將要求低時延,高吞吐量,或可靠性的數據報區別開來),數據報長度,標籤,標識,片偏移,壽命,上層協議,校驗和,選項,源ip,目的ip,數據。
ipv6: 版本號,流量類型,流標籤,有效載荷長度,跳限制,下一個首部,源ip,目的ip,數據。
tcp: 源端口號,目的端口號,序列號,確認號,校驗和,窗口,數據,選項 等。
udp:源端口號,目的端口號,長度,校驗和,數據。
41:經常使用linux命令
http://www.javashuo.com/article/p-gvkrzyvd-m.html
42:項目中設置的jvm大小 871.12MB
43: Integer 詳解
https://www.jianshu.com/p/9cb9c61b0986
44: Compable 和Compartor
http://www.javashuo.com/article/p-ofkjiiep-bm.html
45: 不使用第三方變量的交換,+-法,異或^
a = a + b;
b = a - b;
a = a - b;
46: 方法重載和重寫的區別
方法重寫(overriding):
一、也叫子類的方法覆蓋父類的方法,要求返回值、方法名和參數都相同。
二、子類拋出的異常不能超過父類相應方法拋出的異常。(子類異常不能超出父類異常)
三、子類方法的的訪問級別不能低於父類相應方法的訪問級別(子類訪問級別不能低於父類訪問級別)
方法重載(overloading):重載是在同一個類中的兩個或兩個以上的方法,擁有相同的方法名,可是參數卻不相同,方法體也不相同,最多見的重載的例子就是類的構造函數,能夠參考API幫助文檔看看類的構造方法
47:線程池
http://www.cnblogs.com/dolphin0520/p/3932921.html
https://blog.csdn.net/cjh94520/article/details/70545202/
爲何要有線程池:1:由於線程的建立和銷燬cpu開銷比較大,2:由於無限制的建立線程池,資源消耗比較大。3:建立線程不是越多越好,必定程度便可。超過必定限度,性能反而會下降 4:穩定性,建立線程的數量受到多個因素的制約,例如JVM啓動參數,Thread請求參數中請求的棧大小以及操做系統的支持。若是破壞了這些限制,極可能拋出OutOfMemoryError 。
線程池的好處:
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit, BlockingQueue<Runnable> workQueue,RejectedExecutionHandler handler);
1:maximumPoolSize線程池能建立的最大線程數量>穩定性增強。
2:corePoolSize 核心線程數量,這些線程一直在一個while死循環中運行(從workQueue總獲取任務,執行), 其他的線程 (maximumPoolSize-corePoolSize) 個線程,當超過必定時間時,會銷燬。這樣可以保證資源開銷不會太大。
3:long keepAliveTime,TimeUnit unit, 活躍時間和時間單位
4:workQueue 任務隊列,當執行exec.execute(task)時,將會將task添加到workQueue中。 而後while循環中的線程,取出任務,最後仍是執行了Runnable.run()。
5:ThreadFactory 線程工廠,用來建立線程
6: handle ,當執行出現錯誤時,選擇的處理策略,a:拋出異常,b:丟棄任務等。
線程池的大小http://www.javashuo.com/article/p-qmesfdwy-gh.html
48:spring boot特性,啓動流程 http://www.javashuo.com/article/p-yytkatbe-ew.html
Spring 啓動流程:http://www.javashuo.com/article/p-kikedxkm-cn.html
http://www.javashuo.com/article/p-flhyhcgb-dz.html
AOP, DI, IOC
49:Spring 如何保證線程安全的
由於Spring中的Bean實例是單例的, 每一個線程獲取的時候,會用一個ThreadLocal爲每一個線程建立一個Bean副本進行操做,保證了線程安全。
50:系統性能瓶頸
http://www.javashuo.com/article/p-yauekoey-cw.html
https://blog.csdn.net/smooth00/article/details/63680191
51: Spring Boot啓動方式
Runner
52: 類加載器:
http://www.javashuo.com/article/p-zoasinon-cr.html
53: 測試工具:JEMTER
http://www.javashuo.com/article/p-fkdouhnu-nq.html
http://www.javashuo.com/article/p-tvwoymlh-dg.html
測試結果:
首次查詢:500次請求須要6秒
第二次查詢:500次請求須要3秒
54:高併發寫入:
https://segmentfault.com/q/1010000005931313
55: 將某個字段不可持久化修飾符
transient
56:什麼是微服務
https://blog.csdn.net/wuxiaobingandbob/article/details/78642020?locationNum=1&fps=1
https://www.oschina.net/news/70121/microservice
57:如何保證線程安全
https://blog.csdn.net/jinggod/article/details/78275763?utm_source=blogxgwz0
https://blog.csdn.net/zhouzhaoxiong1227/article/details/74932180/
58:elasticsearch 優化
https://yq.aliyun.com/articles/38285
http://www.javashuo.com/article/p-nkkxdaqt-no.html
59:CAS 適合讀多寫少的場景,例如秒殺活動。
java.util.concurrent包中的類都是用CAS原理完成的。
60:反射原理:http://www.javashuo.com/article/p-ourbsjow-dz.html
所以咱們就能夠經過Class對象去得到成員變量的值,也就是咱們想要獲得的變量名、修飾符列表、方法名等等,這就是反射的基本原理
61:分析進程狀態的linux命令,查詢哪個進程消耗資源過多等
ps
top
java中的命令jps
62:對象鎖和類鎖的做用範圍
http://www.javashuo.com/article/p-kfirwuti-ex.html
63:爲何3次握手:
http://blog.51cto.com/zhangxinbei/1829125
64:如何保證多人同時安全修改數據庫
a: 在業務層使用框架自帶的事務,
b: 在業務層使用鎖,防止併發修改
c: 在數據層(數據庫層sql語句)使用事務
d: 在數據層(數據庫層sql語句)使用版本控制
https://bbs.csdn.net/topics/390466595?page=1
https://blog.csdn.net/baimin7657/article/details/8062939
65:先後端交互原理
https://blog.csdn.net/SoftwareTester_zys/article/details/79989956
http://www.javashuo.com/article/p-vtfefylr-g.html
http://www.cnblogs.com/nalanshawn/p/9351782.html
66:無狀態和有狀態
http://www.javashuo.com/article/p-dcwrgfzk-gc.html
67:post和put的區別
http://www.javashuo.com/article/p-ywputvlx-gk.html
68: restful和web service 的區別
http://www.javashuo.com/article/p-tepbeyuy-w.html
https://www.zhihu.com/question/28570307
https://blog.csdn.net/angus_17/article/details/80693165
http://www.javashuo.com/article/p-enjuqfer-cb.html
https://blog.csdn.net/angus_17/article/details/80693165
69:如何防止網站被爬蟲
http://www.javashuo.com/article/p-dsjjegga-gv.html
https://bbs.csdn.net/topics/392070282
70:微服務:
微服務就是把不相關的服務構成一個獨立單元。服務之間相互調用。
71:形成內存泄漏的緣由.