平常理解

{

}
1. 什麼叫線程安全?servlet是線程安全嗎?
{
答:若是你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。若是每次運行結果和單線程運行的結果是同樣的,並且其餘的變量的值也和預期的是同樣的,就是線程安全的。 或者說:一個類或者程序所提供的接口對於線程來講是原子操做或者多個線程之間的切換不會致使該接口的執行結果存在二義性,也就是說咱們不用考慮同步的問題。
servlet不是線程安全的,每一個servlet都只被實例化一次,每一個調用都是servlet的同一個實例,而且對類變量沒有線程安全,數據量大的時候容易照成異常。
}html

2. 同步有幾種實現方法?
{
答:同步的實現方面有兩種,分別是synchronized,wait與notify
}

Thread join yield
{
thread.Join把指定的線程加入到當前線程,能夠將兩個交替執行的線程合併爲順序執行的線程。好比在線程B中調用了線程A的Join()方法,直到線程A執行完畢後,纔會繼續執行線程B。
thread.yield 當前線程回到可執行狀態,以便讓具備相同優先級的線程進入執行狀態,但不是絕對的
}java

ThreadLocal
{
ThreadLocal和線程同步機制都是爲了解決多線程中相同變量的訪問衝突問題,那麼,ThreadLocal和線程同步機制相比有什麼優點呢?
在同步機制中,經過對象的鎖機制保證同一時間只有一個線程訪問變量。這時該變量是多個線程共享的,使用同步機制要求程序縝密的分析何時對變量進行讀寫,何時須要鎖定某個對象,何時釋放對象鎖等繁雜的問題,程序設計和編寫難度相對較大
而ThreadLocal則從另外一個角度來解決多線程的併發訪問。ThreadLocal爲每個線程提供一個獨特的變量副本,從而隔離了多個線程對訪問數據的衝突。由於每個線程都擁有本身的變量副本,從而也就沒有必要對該變量進行同步了。ThreadLocal提供了線程安全的對象封裝,在編寫多線程代碼時,能夠把不安全的變量封裝進ThreadLocal。看了
歸納起來講,對於多線程資源共享的問題,同步機制採用了「以時間換空間」的方式:訪問串行化,對象共享化。而ThreadLocal採用了「以空間換時間」的方式:訪問並行化,對象獨享化。前者僅提供一份變量,讓不一樣的線程排隊訪問,然後者爲每個線程都提供了一份變量,所以能夠同時訪問而互不影響。
}node

JVM 處理器重排序
{
通常來講,處理器爲了提升程序運行效率,可能會對輸入代碼進行優化,它不保證程序中各個語句的執行前後順序同代碼中的順序一致,可是它會保證程序最終執行結果和代碼順序執行的結果是一致的。
i = 1; //語句1 
flag = true; //語句2

語句1.語句2 執行順序不肯定,他麼之間的執行 沒有數據依賴關係

int a = 10; //語句1
int r = 2; //語句2
a = a + 3; //語句3
r = a*a; //語句4
語句3 必須在語句4以前執行
若是一個指令Instruction2必須用到Instruction1的結果,那麼處理器會保證Instruction1會在Instruction2以前執行

雖然重排序不會影響單個線程內程序執行的結果 可是會影響到線程併發執行的正確性。mysql

也就是說,要想併發程序正確地執行,必需要保證原子性、可見性以及有序性。只要有一個沒有被保證,就有可能會致使程序運行不正確。
}linux

原子性、可見性以及有序性
{
Java內存模型並無限制執行引擎使用處理器的寄存器或者高速緩存來提高指令執行速度,也沒有限制編譯器對指令進行重排序。也就是說,在java內存模型中,也會存在緩存一致性問題和指令重排序的問題。
原子性
簡單的讀取、賦值(並且必須是將數字賦值給某個變量,變量之間的相互賦值不是原子操做)纔是原子操做。
x = 10; //語句1
y = x; //語句2 讀取x 賦值給y
x++; //語句3 讀取x x+1操做 賦值給x 三步
x = x + 1; //語句4 讀取x x+1操做 賦值給x 三步
只有語句1是原子性的
Java內存模型只保證了基本讀取和賦值是原子性操做,若是要實現更大範圍操做的原子性,能夠經過synchronized和Lock來實現。因爲synchronized和Lock可以保證任一時刻只有一個線程執行該代碼塊,那麼天然就不存在原子性問題了,從而保證了原子性nginx

可見性
對於可見性,Java提供了volatile關鍵字來保證可見性。
保證了不一樣線程對這個volatile修飾的變量進行操做時的可見性,即一個線程修改了某個變量的值,這新值對其餘線程來講是當即可見的。web

當一個共享變量被volatile修飾時,它會保證修改的值會當即被更新到主存,當有其餘線程須要讀取時,它會去內存中讀取新值。而普通的共享變量不能保證可見性,由於普通共享變量被修改以後,何時被寫入主存是不肯定的,當其餘線程去讀取時,此時內存中可能仍是原來的舊值,所以沒法保證可見性。另外,經過synchronized和Lock也可以保證可見性,synchronized和Lock能保證同一時刻只有一個線程獲取鎖而後執行同步代碼,而且在釋放鎖以前會將對變量的修改刷新到主存當中。所以能夠保證可見性。redis

有序性
在Java內存模型中,容許編譯器和處理器對指令進行重排序,可是重排序過程不會影響到單線程程序的執行,卻會影響到多線程併發執行的正確性。
Java內存模型具有一些先天的「有序性」,即不須要經過任何手段就可以獲得保證的有序性,這個一般也稱爲 happens-before 原則。若是兩個操做的執行次序沒法從happens-before原則推導出來,那麼它們就不能保證它們的有序性,虛擬機能夠隨意地對它們進行重排序
}算法

happens-before原則spring

{
下面就來具體介紹下happens-before原則(先行發生原則):

程序次序規則:一個線程內,按照代碼順序,書寫在前面的操做先行發生於書寫在後面的操做
鎖定規則:一個unLock操做先行發生於後面對同一個鎖額lock操做
volatile變量規則:對一個變量的寫操做先行發生於後面對這個變量的讀操做
傳遞規則:若是操做A先行發生於操做B,而操做B又先行發生於操做C,則能夠得出操做A先行發生於操做C

線程啓動規則:Thread對象的start()方法先行發生於此線程的每一個一個動做
線程中斷規則:對線程interrupt()方法的調用先行發生於被中斷線程的代碼檢測到中斷事件的發生
線程終結規則:線程中全部的操做都先行發生於線程的終止檢測,咱們能夠經過Thread.join()方法結束、Thread.isAlive()的返回值手段檢測到線程已經終止執行
對象終結規則:一個對象的初始化完成先行發生於他的finalize()方法的開始

這8條原則摘自《深刻理解Java虛擬機》。
這8條規則中,前4條規則是比較重要的,後4條規則都是顯而易見的。
}

3. volatile有什麼用?可否用一句話說明下volatile的應用場景?
{
http://www.importnew.com/18126.html
保證了不一樣線程對這個volatile修飾的變量進行操做時的可見性,即一個線程修改了某個變量的值,這新值對其餘線程來講是當即可見的。

因爲程序運行過程當中的臨時數據是存放在主存(物理內存)當中的,這時就存在一個問題,因爲CPU執行速度很快,而從內存讀取數據和向內存寫入數據的過程跟CPU執行指令的速度比起來要慢的多,所以若是任什麼時候候對數據的操做都要經過和內存的交互來進行,會大大下降指令執行的速度。所以在CPU裏面就有了高速緩存。也就是,當程序在運行過程當中,會將運算須要的數據從主存複製一份到CPU的高速緩存當中,那麼CPU進行計算時就能夠直接從它的高速緩存讀取數據和向其中寫入數據,當運算結束以後,再將高速緩存中的數據刷新到主存當中

Java內存模型規定全部的變量都是存在主存當中(相似於前面說的物理內存),每一個線程都有本身的工做內存(相似於前面的高速緩存)。線程對變量的全部操做都必須在工做內存中進行,而不能直接對主存進行操做。而且每一個線程不能訪問其餘線程的工做內存。

應用場景
synchronized關鍵字是防止多個線程同時執行一段代碼,那麼就會很影響程序執行效率,而volatile關鍵字在某些狀況下性能要優於synchronized,可是要注意volatile關鍵字是沒法替代synchronized關鍵字的,由於volatile關鍵字沒法保證操做的原子性。一般來講,使用volatile必須具有如下2個條件:

1)對變量的寫操做不依賴於當前值

2)該變量沒有包含在具備其餘變量的不變式中

實際上,這些條件代表,能夠被寫入 volatile 變量的這些有效值獨立於任何程序的狀態,包括變量的當前狀態。

事實上,個人理解就是上面的2個條件須要保證操做是原子性操做,才能保證使用volatile關鍵字的程序在併發時可以正確執行。

下面列舉幾個Java中使用volatile的幾個場景。

1.狀態標記量
volatile boolean flag = false;

while(!flag){
doSomething();
}

public void setFlag() {
flag = true;
}

volatile boolean inited = false;
//線程1:
context = loadContext(); 
inited = true; 

//線程2:
while(!inited ){
sleep()
}
doSomethingwithconfig(context);

2.double check

class Singleton{
private volatile static Singleton instance = null;

private Singleton() {

}

public static Singleton getInstance() {
if(instance==null) {
synchronized (Singleton.class) {
if(instance==null)
instance = new Singleton();
}
}
return instance;
}
}
}
4. 請說明下java的內存模型及其工做流程。
{
答:Java把內存劃分紅兩種:一種是棧內存,一種是堆內存。
棧內存:存放對象:函數中基本類型的變量和對象的引用變量、靜態類方法 ;特色:棧有一個很重要的特殊性,就是存在棧中的數據能夠共享。
堆內存:存放對象:用來存放由new建立的對象和數組;特色:在堆中分配的內存,由Java虛擬機的自動垃圾回收器來管理。
java 內存模型 ( java memory model ):根據Java Language Specification中的說明, jvm系統中存在一個主內存(Main Memory或Java Heap Memory),Java中全部對象成員變量都儲存在主存中,對於全部線程都是共享的。每條線程都有本身的工做內存(Working Memory),工做內存中保存的是主存中某些對象成員變量的拷貝,線程對全部對象成員變量的操做都是在工做內存中進行,線程之間沒法相互直接訪問,變量傳遞均須要經過主存完成。
(1) 獲取對象監視器的鎖(lock)
(2) 清空工做內存數據, 從主存複製對象成員變量到當前工做內存, 即同步數據 (read and load)
(3) 執行代碼,改變共享變量值 (use and assign)
(4) 將工做內存數據刷回主存 (store and write)
(5) 釋放對象監視器的鎖 (unlock)

5. 爲何代碼會重排序.
{
因爲程序運行過程當中的臨時數據是存放在主存(物理內存)當中的,這時就存在一個問題,因爲CPU執行速度很快,而從內存讀取數據和向內存寫入數據的過程跟CPU執行指令的速度比起來要慢的多,所以若是任什麼時候候對數據的操做都要經過和內存的交互來進行,會大大下降指令執行的速度。所以在CPU裏面就有了高速緩存。也就是,當程序在運行過程當中,會將運算須要的數據從主存複製一份到CPU的高速緩存當中,那麼CPU進行計算時就能夠直接從它的高速緩存讀取數據和向其中寫入數據,當運算結束以後,再將高速緩存中的數據刷新到主存當中

}
6. 如何讓一段程序併發的執行,並最終彙總結果
{
cyclibarrier
它要作的事情是,讓一組線程到達一個屏障(也能夠叫同步點)時被阻塞,直到最後一個線程到達屏障時,屏障纔會開門,全部被屏障攔截的線程纔會繼續幹活。CyclicBarrier默認的構造方法是CyclicBarrier(int parties),其參數表示屏障攔截的線程數量,每一個線程調用await方法告訴CyclicBarrier我已經到達了屏障,而後當前線程被阻塞。
的應用場景
CyclicBarrier能夠用於多線程計算數據,最後合併計算結果的應用場景。好比咱們用一個Excel保存了用戶全部銀行流水,每一個Sheet保存一個賬戶近一年的每筆銀行流水,如今須要統計用戶的日均銀行流水,先用多線程處理每一個sheet裏的銀行流水,都執行完以後,獲得每一個sheet的日均銀行流水,最後,再用barrierAction用這些線程的計算結果,計算出整個Excel的日均銀行流水。
}

CyclicBarrier和CountDownLatch的區別
{
CountDownLatch的計數器只能使用一次。而CyclicBarrier的計數器可使用reset() 方法重置。因此CyclicBarrier能處理更爲複雜的業務場景,好比若是計算髮生錯誤,能夠重置計數器,並讓線程們從新執行一次。
CyclicBarrier還提供其餘有用的方法,好比getNumberWaiting方法能夠得到CyclicBarrier阻塞的線程數量。isBroken方法用來知道阻塞的線程是否被中斷。好比如下代碼執行完以後會返回true。
}
CountDownLatch{
CountDownLatch是一個同步工具類,它容許一個或多個線程一直等待,直到其餘線程的操做執行完後再執行
構造器中的計數值(count)實際上就是閉鎖須要等待的線程數量。這個值只能被設置一次,並且CountDownLatch沒有提供任何機制去從新設置這個計數值。
與CountDownLatch的第一次交互是主線程等待其餘線程。主線程必須在啓動其餘線程後當即調用CountDownLatch.await()方法。這樣主線程的操做就會在這個方法上阻塞,直到其餘線程完成各自的任務。
}
如何合理的配置java線程池?如CPU密集型的任務,基本線程池應該配置多大?IO密集型的任務,基本線程池應該配置多大?用有界隊列好仍是無界隊列好?任務很是多的時候,使用什麼阻塞隊列能獲取最好的吞吐量?
{
線程池的配置都須要結合系統真實狀況(好比是IO密集型或者是CPU密集型或者是純內存操做)和硬件環境(CPU、內存、硬盤讀寫速度、網絡情況等)來不斷嘗試達到一個符合實際的合理估算值。基本上IO密集型的線程池要比Cpu密集型的線程池大1倍左右
}
java類加載器
{

Bootstrap ClassLoader
負責加載$JAVA_HOME中jre/lib/rt.jar裏全部的class,由C++實現,不是ClassLoader子類
Extension ClassLoader
負責加載java平臺中擴展功能的一些jar包,包括$JAVA_HOME中jre/ lib / *.jar或-Djava.ext.dirs指定目錄下的jar包

App ClassLoader
負責記載classpath中指定的jar包及目錄中class
Custom ClassLoader 
屬於應用程序根據自身須要自定義的ClassLoader,如tomcat、jboss都會根據j2ee規範自行實現ClassLoader

加載過程當中會先檢查類是否被已加載,檢查順序是自底向上,從Custom ClassLoader到BootStrap ClassLoader 逐層檢查 ,只要某個classloader已加載就視爲已加載此類,
保證此類只全部ClassLoader加載一次。而加載的順序是自頂向下,也就是由上層來逐層嘗試加載此類。

先檢查是否加載(從下往上),再加載(從上往下)


}
java類加載器的雙親委派模型:
{
  雙親委派模型是一種組織類加載器之間關係的一種規範,他的工做原理是:若是一個類加載器收到了類加載的請求,它不會本身去嘗試加載這個類,而是把這個請求委派給父類加載器去完成,這樣層層遞進,最終全部的加載請求都被傳到最頂層的啓動類加載器中,只有當父類加載器沒法完成這個加載請求(它的搜索範圍內沒有找到所需的類)時,纔會交給子類加載器去 嘗試 加載.

  這樣的好處是:java類隨着它的類加載器一塊兒具有了帶有優先級的層次關係.這是十分必要的,好比java.lang.Object,它存放在\jre\lib\rt.jar中,它是全部java類的父類,所以不管哪一個類加載都要加載這個類,最終全部的加載請求都彙總到頂層的啓動類加載器中,所以Object類會由啓動類加載器來加載,因此加載的都是同一個類,若是不使用雙親委派模型,由各個類加載器自行去加載的話,系統中就會出現不止一個Object類,應用程序就會全亂了.
}
7. 何使用阻塞隊列實現一個生產者和消費者模型?請寫代碼。
8. 多讀少寫的場景應該使用哪一個併發容器,爲何使用它?好比你作了一個搜索引擎,搜索引擎每次搜索前須要判斷搜索關鍵詞是否在黑名單裏,黑名單天天更新一次。


9. 如何實現樂觀鎖(CAS)?如何避免ABA問題?
{
CAS sql : update table set value = value1 where vrsn = vrsn1;
若是V值首先由A變成B,在由B變成A 這樣CAS的時候仍是會有問題 
解決方法:不是隻是更新某個引用的值, 而是更新兩個值,包含一個引用和一個版本號。即便這個值由A變成B,而後又變爲A,版本號也將是不一樣的
}
10. 讀寫鎖能夠用於什麼應用場景?
{
}
11. 何時應該使用可重入鎖?
12. 什麼場景下可使用volatile替換synchronized?
13. 如何實現一個流控程序,用於控制請求的調用次數?


*******************************************************************************************************************************

一、 如何實現分佈式事務,大家公司是怎麼解決的?
二階段提交
二、 HashMap數據結構及實現原理,其鏈表是用來解決什麼問題的

三、 能夠自定義java.lang.String類嗎,說明爲何


ConcurrentHashMap和HashMap和HashTable
http://blog.csdn.net/basycia/article/details/51890699
HashMap本質數組加鏈表。根據key取得hash值,而後計算出數組下標,若是多個key對應到同一個下標,就用鏈表串起來,新插入的在前面。
HashTable差異爲同步和值不可非空,效率問題,具體以下介紹;ConcurrentHashMap和HashTable在於效率,算法的變動
*******************************************************************************************************************************

*******************************************************************************************************************************

六、zookeeper

1) 說說選舉算法

2) 有哪幾種節點類型

3) 有哪些應用場景

4) 如何部署集羣,至少有幾臺機器?

*******************************************************************************************************************************

nginx

*******************************************************************************************************************************
nginx
正向代理與方向代理
{
正向代理:針對客戶端而言, 代理服務器代理客戶端,轉發請求,並將得到的內容返回給客戶端。
反向代理:針對客戶端而言, 代理服務器就像是原始服務器,代理集羣的web節點服務器返回結果。

正向代理:代理端代理的是客戶端。
反向代理:代理端代理的是服務端。
}
負載均衡策略
{有2種:內置策略和擴展策略。
內置策略爲輪詢,加權輪詢,Ip hash。 
1.加權值越大,接受更多的請求 2.對客戶端請求的ip進行hash操做,而後根據hash結果將同一個客戶端ip的請求分發給同一臺服務器進行處理,能夠解決session不共享的問題
擴展策略
}

*******************************************************************************************************************************
十二、mysql

1) 如何進行sql優化?如何進行性能檢測
2) 有哪幾種索引類型及應用場景
{

FULLTEXT
目前只有MyISAM引擎支持 只有 CHAR、VARCHAR ,TEXT 列上能夠建立全文索引
它的出現是爲了解決WHERE name LIKE 「%word%"這類針對文本的模糊查詢效率較低的問題。在沒有全文索引以前,這樣一個查詢語句是要進行遍歷數據表操做的,可見,在數據量較大時是極其的耗時的
Hash
其實,hash就是一種(key=>value)形式的鍵值對,如數學中的函數映射,容許多個key對應相同的value,但不容許一個key對應多個value。正是因爲這個特性,hash很適合作索引,爲某一列或幾列創建hash索引,就會利用這一列或幾列的值經過必定的算法計算出一個hash值,對應一行或幾行數據
(1)Hash 索引僅僅能知足"=","IN"和"<=>"查詢,不能使用範圍查詢。 
因爲 Hash 索引比較的是進行 Hash 運算以後的 Hash 值,因此它只能用於等值的過濾,不能用於基於範圍的過濾,由於通過相應的 Hash 算法處理以後的 Hash 值的大小關係,並不能保證和Hash運算前徹底同樣。 
(2)Hash 索引沒法被用來避免數據的排序操做。 
因爲 Hash 索引中存放的是通過 Hash 計算以後的 Hash 值,並且Hash值的大小關係並不必定和 Hash 運算前的鍵值徹底同樣,因此數據庫沒法利用索引的數據來避免任何排序運算; 
(3)Hash 索引不能利用部分索引鍵查詢。 
對於組合索引,Hash 索引在計算 Hash 值的時候是組合索引鍵合併後再一塊兒計算 Hash 值,而不是單獨計算 Hash 值,因此經過組合索引的前面一個或幾個索引鍵進行查詢的時候,Hash 索引也沒法被利用。 
(4)Hash 索引在任什麼時候候都不能避免表掃描。 
前面已經知道,Hash 索引是將索引鍵經過 Hash 運算以後,將 Hash運算結果的 Hash 值和所對應的行指針信息存放於一個 Hash 表中,因爲不一樣索引鍵存在相同 Hash 值,因此即便取知足某個 Hash 鍵值的數據的記錄條數(沒法屋頂這個hash值具體對應哪一個),也沒法從 Hash 索引中直接完成查詢,仍是要經過訪問表中的實際數據進行相應的比較,並獲得相應的結果。
(5)Hash 索引遇到大量Hash值相等的狀況後性能並不必定就會比B-Tree索引高。 
對於選擇性比較低的索引鍵,若是建立 Hash 索引,那麼將會存在大量記錄指針信息存於同一個 Hash 值相關聯。這樣要定位某一條記錄時就會很是麻煩,會浪費屢次表數據的訪問,而形成總體性能低下。

BTREE

BTREE索引就是一種將索引值按必定的算法,存入一個樹形的數據結構中,相信學過數據結構的童鞋都對當初學習二叉樹這種數據結構的經歷記憶猶新,反正愚安我當時爲了軟考但是被這玩意兒好好地折騰了一番,不過那次考試好像沒怎麼考這個。如二叉樹同樣,每次查詢都是從樹的入口root開始,依次遍歷node,獲取leaf。

BTREE在MyISAM裏的形式和Innodb稍有不一樣

在 Innodb裏,有兩種形態:一是primary key形態,其leaf node裏存放的是數據,並且不只存放了索引鍵的數據,還存放了其餘字段的數據。二是secondary index,其leaf node和普通的BTREE差很少,只是還存放了指向主鍵的信息.

而在MyISAM裏,主鍵和其餘的並無太大區別。不過和Innodb不太同樣的地方是在MyISAM裏,leaf node裏存放的不是主鍵的信息,而是指向數據文件裏的對應數據行的信息.

RTREE

RTREE在mysql不多使用,僅支持geometry數據類型,支持該類型的存儲引擎只有MyISAM、BDb、InnoDb、NDb、Archive幾種


各類索引的使用狀況

(1)對於BTREE這種Mysql默認的索引類型,具備廣泛的適用性

(2)因爲FULLTEXT對中文支持不是很好,在沒有插件的狀況下,最好不要使用。其實,一些小的博客應用,只須要在數據採集時,爲其創建關鍵字列表,經過關鍵字索引,也是一個不錯的方法,至少愚安我是常常這麼作的。

(3)對於一些搜索引擎級別的應用來講,FULLTEXT一樣不是一個好的處理方法,Mysql的全文索引創建的文件仍是比較大的,並且效率不是很高,即使是使用了中文分詞插件,對中文分詞支持也只是通常。真要碰到這種問題,Apache的Lucene或許是你的選擇。

(4)正是由於hash表在處理較小數據量時具備無可比擬的素的優點,因此hash索引很適合作緩存(內存數據庫)。如mysql數據庫的內存版本Memsql,使用量很普遍的緩存工具Mencached,NoSql數據庫redis等,都使用了hash索引這種形式。固然,不想學習這些東西的話Mysql的MEMORY引擎也是能夠知足這種需求的。

(5)至於RTREE,愚安我至今尚未使用過,它具體怎麼樣,我就不知道了。有RTREE使用經歷的同窗,到時能夠交流下!

}

3) 主備同步是如何進行的,原理是什麼
{
主庫將數據變動寫到二進制的日誌中,從庫去主庫中拉日誌,寫到從庫的日誌中,從庫有線程去讀取日誌,寫到從庫裏面
}
4) 分庫分表有哪幾種分法,如何解決數據分佈不均勻的問題,若是避免查詢某個字段掃全庫全表的狀況

5) 事務隔離級別有哪幾種,默認是哪一個
Read uncommitted 、Read committed 、Repeatable read 、Serializable
6) 如何解決幻讀問題

7) 讀寫分離方案

8) 有哪幾種引擎及應用場景

1三、 mybatis佔位符的#和$有什麼區別

1四、 如何實現分佈鎖,須要考慮的問題

1五、 spring事務傳播機制有哪些,如何用jdbc實現require_new

1六、 java集合經常使用類及數據結構

*******************************************************************************************************************************

*******************************************************************************************************************************

1八、設計模式

1) 說說六大設計原則

2) 你會哪些設計模式

3) 裝飾模式和代理模式有什麼區別

4) 單例模式有哪幾種寫法,有哪些注意的地方

5) 怎麼實現策略模式

6) spring中用到了哪些設計模式

1九、 線程有哪幾種狀態流轉

20、 spring ioc aop是什麼,實現動態代理有哪些方式,代理類和原來的類之間是什麼關係

2一、 什麼是悲觀鎖和樂觀鎖,分別如何實現

2二、 java有哪幾種自帶的線程池,說說它們的應用場景

java動態代理
{
JDK的動態代理機制只能代理實現了接口的類,而不能實現接口的類就不能實現JDK的動態代理
JDK的動態代理依靠接口實現,若是有些類並無實現接口,則不能使用JDK代理,這就要使用cglib動態代理了。 
cglib是針對類來實現代理的,他的原理是對指定的目標類生成一個子類,並覆蓋其中方法實現加強,但由於採用的是繼承,因此不能對final修飾的類進行代理。

Spring AOP中,當攔截對象實現了接口時,生成方式是用JDK的Proxy類。當沒有實現任何接口時用的是GCLIB開源項目生成的攔截類的子類.
}

*******************************************************************************************************************************

2三、 說說volatile關鍵字及使用場景

2四、 怎麼排查多線程問題

2五、 session共享有哪些方案

2六、 jvm有哪些自帶命令及如何使用

2七、 說說jvm內存模式及如何調優

2八、 如何對tomcat調優

2九、 用戶登陸有哪些保障安全的手段

30、 如何減庫存,如何防止超買超賣

3一、 TCP協議爲何是三次握手四次揮手,爲何不是別的
{
這是由於服務端在LISTEN狀態下,收到創建鏈接請求的SYN報文後,把ACK和SYN放在一個報文裏發送給客戶端。而關閉鏈接時,當收到對方的FIN報文時,僅僅表示對方再也不發送數據了可是還能接收數據,己方也未必所有數據都發送給對方了,因此己方能夠當即close,也能夠發送一些數據給對方後,再發送FIN報文給對方來表示贊成如今關閉鏈接,所以,己方ACK和FIN通常都會分開發送。
}
3二、 HTTP報文有哪幾個部分

*******************************************************************************************************************************

3三、 接口安全如何作

3四、 要你實現RCP框架,你會注重什麼

3五、 linux查看cpu、內存、硬盤、網絡IO、負載、端口占用狀況、及某個具體進程的命令

3六、 說說一致性hash算法

3七、 說說類加載機制,它們是怎麼設計的

3八、 你怎麼作職業規劃的,將來三年你有什麼規劃

3九、 你目前手中有哪些offer,你會考慮咱們公司嗎,你對咱們公司有什麼想要了解的

40、 你爲何要離職(這個要慎重,千萬不要抱怨前任公司,更不要說壞話,否則你技術再牛逼也過不了)

 


*******************************************************************************************************************************

Spring Bean的生命週期
Spring AOP的定義與原理,運行時加強仍是編譯時加強
HashMap,TreeMap,Hashtable,LinkedHashMap實現原理及對比
Linux系統瞭解程度
ConcurrentHashMap實現原理
髒讀與幻讀
ThreadLocal如何實現線程隔離
ThreadLocal在Spring中的應用
類加載器與加載過程
Spring bean後處理器與容器後處理器
抽象類與接口適用場合
Java IO:BIO,NIO,AIO
CDN
base64設計目的
節點流與過濾流
Spring事務傳播行爲
volatile關鍵字
樂觀鎖與悲觀鎖
語法糖概念
搜索引擎倒排索引
線程的幾種狀態
線程間通訊
秒殺功能的實現
一致性HASH算法
操做字節碼
RPC底層實現,動態代理起所起得做用
SQL優化及數據庫索引原理,B-tree
設計模式
JAVA回調機制
延遲加載(lazyload)的實現原理
攔截器與過濾器區別
事務四種隔離級別
java中會存在內存泄漏嗎
消息中間件的意義和應用場景
CAS
Spring 事務編程式事務處理
mysql 內存鎖 get_lock,release_lock
java.util.concurrent.ExecutorService
X/Open DTP
B-tree R-tree T-tree
緩存穿透與緩存雪崩
緩存與內存數據庫

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
外部數據---數據管理中心--規則平臺 數據規則處理 符合規則--沉澱下來--供業務系統使用

數據規則平臺
對外部合做機構推送的數據進行校驗和處理, 符合業務規則的數據沉澱下來供業務系統使用,一個數據模版包含模版簡述,模塊(模塊下可有子模塊),字段,數據規則.
數據規則類型包含數據校驗,數據預警,數據清洗,數據拉平

數據預警 缺乏字段報警
數據校驗 字段是否符合該字段屬性要求 手機號 郵箱 身份證 爲空爲null 長度 
數據拉平 json字符串嵌套比較深 直接把嵌套拉平成K,V 
數據清洗 日期的轉換,

數據模版數據結構
模版簡述
模塊
字段
數據規則(模塊,字段約束)

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


授信申請,提供申請的核心能力,好比前准入.在途、渠道保護、提交申請等能力。對於外部系統來講,關心一筆貸款貸前的生命週期,只要關心平臺申請就好。

調查審批:提供信貸管控能力,包含自動審批與人工審批 人工審批會啓動調查採集流程,調查下采集結束後進入審批流程,運營人員更具調查採集的數據結合信貸決策系統給出的推薦授信得出最終的審批結論

申請成功 同步申請信息後 啓動調查採集流程 調查採集項與運營產品關聯,調查採集結束啓動審批流程 審批經過後固化授信到信貸決策系統,同步申請狀態給其餘業務系統
調查採集項
徵信報告 法院執行網信息 工商報告 匯法網信息 法人工商報告 借款人信息,大數貸模式下行業的採集數據

貸前調查報告:公司基本信息(工商信息,用戶信息),公司經營信息(銷售,流水,資產)網絡負面(匯法網 百度信息 執行網)負債狀況

授信申請後臺 提供授信申請經常使用的後臺功能,方便測試與查詢
包含後臺報名 申請查詢 在途准入 貸款准入 異步命令等功能 

機構服務聚合平臺藉助支付寶開放平臺將網商銀行資金,授信,風控等能力輸出給外部合做機構,目前主要以平臺貸和大數貸兩種合做模式基於以上兩種模式提供了一系列相對通用的接口 協議簽署,協議查詢 貸前諮詢 會員建立 合做機構數據接入 放款,還款等接口 開放平臺接口開發,測試,聯調.以及平常迭代.現主要負責大數貸業務線外部機構申貸,審批,支用,還款等流程對接

相關文章
相關標籤/搜索