-
1 # Java架構進階阿南
-
2 # 首席分享官100
你好,自己作為一個多年經驗的開發,面試經歷還是比較豐富的。
在我印象中,面試質量很高的面試,應該是這樣的:
1、java技術面試
1.1、java技術面全
在java技術面試過程中,面試的技術比較全,比如從java基礎到java集合、再到多執行緒、框架和快取等等方面都問到了,主要考察的還是一個幾年經驗的java 開發者的技術掌握面和知識掌握度。
1.2、java技術面深
這一塊的,在一些比較大的公司,會特別注重java知識點的深度。比如在java集合的考察中,List、set、hashMap 的底層實現以及區別。hashMap 的get方法和put方法的底層實現。在synchronize 關鍵字在靜態方法上和程式碼塊上有什麼不同,以及synchronize的底層實現。
2、專案場景與java技術實現
這一塊就比java技術面要更難一些了。比如你做的電商專案,是否做過分庫分表,如果做了分庫分表,怎麼保證全域性id的?你們系統下訂單30分鐘後訂單未付款自動取消訂單,怎麼實現的?你們的訊息佇列系統怎麼保證訊息不重複消費?等問題。
3、個人工作願景
這一塊的話,主要的考察的還是個人是否有自己的想法或職業規劃。一般在大公司都是有這種問題,這個還要自己多多思考,自己想要什麼,想做什麼樣的工作。還有就是個人價值觀與公司文化是否吻合等等,這一塊的考慮。
如果想學習java,準備java分散式訊息佇列面試,在蜻蜓FM,搜尋“淺戲網際網路”並關注,就可以有免費的網際網路高階java面試影片啦,後續不斷更新中。
-
3 # 阿風的架構筆記
從阿里的常規java技術面試角度說一說,一般都是由淺到深去問,思路是先考察基礎是否過關,再透過深度考察是否有技術熱情和深度,同時可能會透過提出一些質疑和挑戰來考察候選人是如何與不同意見進行溝通
考察內容和方式基礎知識:考察基礎的時候一般都不會太深入地去問,主要目的是考察知識面,如果發現候選人很多都不知道可能就不會繼續進入下一步的考察。JDK 集合、BIO/NIO、annotation 等虛擬機器 記憶體模型、類載入原理資料庫 索引、事務、死鎖 等併發 併發優缺點、記憶體可見性(volatile)、鎖、同步、執行緒池框架網路 TCP/HTTP常見設計模式深入考察:深入考察的時候不會像考察基礎一樣面面俱到,而是會在某個點上深入去聊,這個點的選擇可能是讓候選人自己選一個點,也可能是面試官根據簡歷內容去選,主要目的是考察候選人對某個技術點的深入掌握程度,技術是相通的,如果一個人能在某個技術點上達到很深入的程度,其他點上通常也不會有太大問題;相反如果某個人在他聲稱很瞭解的點上都支支吾吾、一知半解多半可以判斷此人要麼技術能力有限、要麼遇到問題不願深入考察、淺嘗輒止。JDK ConcurrentHashMap如何提高併發度、NIO的原理(零複製、堆外記憶體),優缺點虛擬機器 包衝突,類衝突的形成原理及解決辦法(可能會引申JDK9的模組化設計)、TCCL的存在價值分散式 一致性雜湊、RPC原理和設計(通訊協議、序列化方式、超時機制等)、負載均衡、分散式快取架構設計、分散式訊息、分散式事務、paxos(這個可能只有在技術專業型很強的職位上會去問)資料庫 資料庫效能最佳化(慢sql、索引最佳化、大事務、核心引數調優),也可能會把一些工作中碰到的詭異場景丟擲來問併發 非阻塞鎖(CAS)、併發對編譯器最佳化的影響、執行緒池調優、也肯會把工作中碰到的併發問題丟擲來問技術趨勢、docker、微服務等新技術發展歷史、帶來的福利如何準備首先要宣告的是,最好的“準備”方式一定是平時多積累、遇到問題不要逃避或者討巧、深入去思考並解決,在解決一個個問題的過程中積累解決問題的能力,形成自己的知識體系。所以這裡說的如何準備不是說臨時抱佛腳,而是如何能透過提前準備把自己平時的積累展現出來,不因為臨場的表現影響面試官對你的判斷。
針對以上列的知識點思考答案甚至擴充套件,如果能知道大部分,深入一部分就很好,這個過程主要是整理自己的知識體系回憶整理簡歷和過往專案中的”難點“、”亮點“,因為這些是用來區分候選人很重要的點,合格的面試官一定會問類似於”你在專案中經歷的最大的技術難點是什麼?“,整理一下思路,不至於在面試時候因為時間久遠而回憶不起來細節影響面試效果。溝透過程中做到有理有據,不要過於自大,也無需刻意迎合面試官。溝通的本質是資訊透明化,工作中也許我們無法做到完全客觀公正,但是在技術問題上堅持自己的客觀和原則是我認為技術人應該堅持的品格,我這裡說的堅持不是一根筋的固執已見,而是根據共同認可的事實進行邏輯推斷得出的觀點。長遠來看這種品格會帶給你足夠的技術影響力和回報。同時可以關注下,每週都是定時更新一些Java技術精彩內容分享給大家! -
4 # 可可愛愛的程式媛
目前還真沒遇到過,還在動力節點培訓學習Java,已經學了4個多月了,馬上也該準備刷面試題了!儘管四個多月有老師的輔導,自己也很努力,但是一想到後面真要面試找工作還真有點慫,不過好就好在老師們都特別負責,也特別專業,因為這個學校就是隻教Java一門語言的,所以講師們作為一線大咖,完全問不倒,我也是個特別愛問問題的人,這一點也是我學習效率提高的原因吧,希望我後面面試一切順利~
回覆列表
筆者曾就職與華為,騰訊,samsung,是一個資深碼農
1.Collections.sort排序內部原理
在Java 6中Arrays.sort()和Collections.sort()使用的是MergeSort,而在Java 7中,內部實現換成了TimSort,其對物件間比較的實現要求更加嚴格
2.hashMap原理,java8做的改變
從結構實現來講,HashMap是陣列+連結串列+紅黑樹(JDK1.8增加了紅黑樹部分)實現的。HashMap最多隻允許一條記錄的鍵為null,允許多條記錄的值為null。HashMap非執行緒安全。ConcurrentHashMap執行緒安全。解決碰撞:當出現衝突時,運用拉鍊法,將關鍵詞為同義詞的結點連結在一個單鏈表中,散列表長m,則定義一個由m個頭指標組成的指標陣列T,地址為i的結點插入以T(i)為頭指標的單鏈表中。Java8中,衝突的元素超過限制(8),用紅黑樹替換連結串列。
3.String 和 StringBuilder 的區別
1)可變與不可變:String不可變,每一次執行“+”都會新生成一個新物件,所以頻繁改變字串的情況中不用String,以節省記憶體。
2)是否多執行緒安全:StringBuilder並沒有對方法進行加同步鎖,所以是非執行緒安全的。StringBuffer和String均執行緒安全。
4.Vector 與 Array 的區別
1)ArrayList在記憶體不夠時預設是擴充套件50% + 1個,Vector是預設擴充套件1倍。2)Vector屬於執行緒安全級別的,但是大多數情況下不使用Vector,因為執行緒安全需要更大的系統開銷。
5.HashMap 與 Hashtable 的區別
1) 歷史原因: Hashtable繼承Dictonary類, HashMap繼承自abstractMap
2) HashMap允許空的鍵值對, 但最多隻有一個空物件,而HashTable不允許。 3) HashTable同步,而HashMap非同步,效率上比HashTable要高
6.ConncurrentHashMap和hashtable比較
ConcurrentHashMap融合了hashtable和hashmap二者的優勢。hashtable是做了同步的,即執行緒安全,hashmap未考慮同步。所以hashmap在單執行緒情況下效率較高。hashtable在的多執行緒情況下,同步操作能保證程式執行的正確性。但是hashtable是阻塞的,每次同步執行的時候都要鎖住整個結構,ConcurrentHashMap正是為了解決這個問題而誕生的,
ConcurrentHashMap允許多個修改操作併發進行,其關鍵在於使用了鎖分離技術(一個Array儲存多個Object,使用這些物件的鎖作為分離鎖,get/put時隨機使用任意一個)。它使用了多個鎖來控制對hash表的不同部分進行的修改。在JDK 1.6中,有HashEntry結構存在,每次插入將新新增節點作為鏈的頭節點(同HashMap實現),而且每次刪除一個節點時,會將刪除節點之前的所有節點複製一份組成一個新的鏈,而將當前節點的上一個節點的next指向當前節點的下一個節點,從而在刪除以後有兩條鏈存 在,因而可以保證即使在同一條鏈中,有一個執行緒在刪除,而另一個執行緒在遍歷,它們都能工作良好,因為遍歷的執行緒能繼續使用原有的鏈。
Java8中,採用volatile HashEntry儲存資料,table元素作為鎖;從table陣列+單向連結串列加上了紅黑樹。紅黑樹是一種特別的二叉查詢樹,特性為:1.節點為紅或者黑 2.根節點為黑 3.葉節點為黑 4.一節點為紅,則葉節點為黑 5.一節點到其子孫節點所有路徑上的黑節點數目相同。
7.ArrayList與 LinkedList 的區別?
最明顯的區別是ArrrayList 底層的資料結構是陣列,支援隨機訪問,而 LinkedList 的底層資料結構書連結串列,不支援隨機訪問。使用下標訪問一個元素,ArrayList 的時間複雜度是 O(1),而 LinkedList 是 O(n)。LinkedList是雙向連結串列
8.Java 中,Comparator 與Comparable 有什麼不同?
Comparable 介面用於定義物件的自然順序,是排序介面,而 comparator 通常用於定義使用者定製的順序,是比較介面。我們如果需要控制某個類的次序,而該類本身不支援排序(即沒有實現Comparable介面),那麼我們就可以建立一個“該類的比較器”來進行排序。Comparable 總是隻有一個,但是可以有多個 comparator 來定義物件的順序。
9.抽象類是什麼?它與介面有什麼區別?你為什麼要使用過抽象類?
抽象類是指不允許被例項化的類;一個類只能使用一次繼承關係。但是,一個類卻可以實現多個interface。
abstract class和interface所反映出的設計理念不同。其實abstract class表示的是"is-a"關係,interface表示的是"like-a"關係
實現抽象類和介面的類必須實現其中的所有方法。抽象類中可以有非抽象方法。介面中則不能有實現方法。但在Java8中允許介面中有靜態預設的方法。
用抽象類是為了重用。減少編碼量,降低耦合性。
10.描述 Java 中的過載和重寫?
過載和重寫都允許你用相同的名稱來實現不同的功能,但是過載是編譯時活動,而重寫是執行時活動。你可以在同一個類中過載方法,但是隻能在子類中重寫方法。重寫必須要有繼承
重寫:1、在子類中可以根據需要對從基類中繼承來的方法進行重寫。2、重寫的方法和被重寫的方法必須具有相同方法名稱、引數列表和返回型別。3、重寫方法不能使用比被重寫的方法更嚴格的訪問許可權。
過載的時候,方法名要一樣,但是引數型別和個數不一樣,返回值型別可以相同也可以不相同。無法以返回型別作為過載函式的區分標準。
11.Collection與Collections的區別是什麼?
Collection<E>是Java集合框架中的基本介面;
Collections是Java集合框架提供的一個工具類,其中包含了大量用於操作或返回集合的靜態方法。
12.Java中多型的實現原理
所謂多型,指的就是父類引用指向子類物件,呼叫方法時會呼叫子類的實現而不是父類的實現。多型的實現的關鍵在於“動態繫結”。
13.object中定義了哪些方法?
clone(), equals(), hashCode(), toString(), notify(), notifyAll(),wait(), finalize(), getClass()
14. Java泛型和型別擦除
泛型即引數化型別,在建立集合時,指定集合元素的型別,此集合只能傳入該型別的引數。型別擦除:java編譯器生成的位元組碼不包含泛型資訊,所以在編譯時擦除:1.泛型用最頂級父類替換;2.移除。
15.說出 5 個 JDK 1.8 引入的新特性?
Java 8 在 Java 歷史上是一個開創新的版本,下面 JDK 8 中 5 個主要的特性:Lambda 表示式;允許像物件一樣傳遞匿名函式 Stream API,充分利用現代多核 CPU,可以寫出很簡潔的程式碼 ;Date 與 Time API,最終,有一個穩定、簡單的日期和時間庫可供你使用 擴充套件方法,現在,介面中可以有靜態、預設方法; 重複註解,現在你可以將相同的註解在同一型別上使用多次。
16.java中public,private,protected以及預設關鍵字的訪問範圍:
Protected可在包內及包外子類訪問,default只能同一包內訪問,prvate只能同一類
17. 常用資料結構:
集合,線性結構(陣列,佇列,連結串列和棧),樹形結構,圖狀結構
18.Java 中的 TreeMap 是採用什麼樹實現的?(答案)
Java 中的 TreeMap 是使用紅黑樹實現的。
19. 匿名內部類是什麼?如何訪問在其外面定義的變數?
匿名內部類也就是沒有名字的內部類,匿名內部類只能使用一次,它通常用來簡化程式碼編寫。
匿名內部類只能訪問外部類的Final變數. Java 8更加智慧:如果區域性變數被匿名內部類訪問,那麼該區域性變數相當於自動使用了final修飾。
20. 如何建立單例模式?說了雙重檢查,他說不是執行緒安全的。如何高效的建立一個執行緒安全的單例?
一種是透過列舉,一種是透過靜態內部類。
21.poll() 方法和 remove() 方法的區別?
poll() 和remove() 都是從佇列中取出一個元素,但是 poll() 在獲取元素失敗的時候會返回空,但是 remove() 失敗的時候會丟擲異常。
22.寫一段程式碼在遍歷 ArrayList 時移除一個元素
使用迭代器。
Iterator itr = list.iterator();while(itr.hasNext()) {if(...) { itr.remove();} }
2. JVM
1.JVM如何載入一個類的過程,雙親委派模型中有哪些方法
類載入過程:載入、驗證(驗證階段作用是保證Class檔案的位元組流包含的資訊符合JVM規範,不會給JVM造成危害)、準備(準備階段為變數分配記憶體並設定類變數的初始化)、解析(解析過程是將常量池內的符號引用替換成直接引用)、初始化。
雙親委派模型中方法:雙親委派是指如果一個類收到了類載入的請求,不會自己先嚐試載入,先找父類載入器去完成。當頂層啟動類載入器表示無法載入這個類的時候,子類才會嘗試自己去載入。當回到最開的發起者載入器還無法載入時,並不會向下找,而是丟擲ClassNotFound異常。
方法:啟動(Bootstrap)類載入器,標準擴充套件(Extension)類載入器,應用程式類載入器(Application ),上下文(Custom)類載入器。意義是防止記憶體中出現多份同樣的位元組碼 。
2.GC演算法(什麼樣的物件算是可回收物件,可達性分析),CMS收集器
jvm是如何判斷一個物件已經變成了可回收的“垃圾”,一般是兩個方法:引用記數法和根搜尋演算法。引用記數法沒辦法解決迴圈引用的問題,所以用根搜尋。從一系列的”GC Roots“物件開始向下搜尋,搜尋走過的路徑稱為引用鏈。當一個物件到”GC Roots“之間沒有引用鏈時,被稱為引用不可達。引用不可到的物件被認為是可回收的物件。
3.JVM分為哪些區,每一個區幹嗎的?
1)方法區(method):被所有的執行緒共享。方法區包含所有的類資訊和靜態變數。
2)堆(heap):被所有的執行緒共享,存放物件例項以及陣列,Java堆是GC的主要區域。
3)棧(stack):每個執行緒包含一個棧區,棧中儲存一些區域性變數等。
4)程式計數器:是當前執行緒執行的位元組碼的行指示器。
4.JVM新生代,老年代,持久代,都儲存哪些東西?
持久代主要存放的是Java類的類資訊,與垃圾收集要收集的Java物件關係不大。所有新生成的物件首先都是放在年輕代的,年老代中存放的都是一些生命週期較長的物件。
5.記憶體溢位和記憶體洩漏:
記憶體溢位:程式申請記憶體時,沒有足夠的記憶體,out of memory;記憶體洩漏值垃圾物件無法回收,可以使用memory analyzer工具檢視洩漏。
6.程序與執行緒:
程序值執行中的程式(獨立性,動態性,併發性),執行緒指程序中的順序執行流。區別是:1.程序間不共享記憶體 2.建立程序進行資源分配的代價要大得多,所以多執行緒在高併發環境中效率高。
7.序列化與反序列化:
序列化指將java物件轉化為位元組序列,反序列化相反。主要是為了java執行緒間通訊,實現物件傳遞。只有實現了Serializable或Externalizable介面類物件才可被序列化。
8.64 位 JVM 中,int 的長度是多數?
Java 中,int 型別變數的長度是一個固定值,與平臺無關,都是 32 位。意思就是說,在 32 位 和 64 位 的Java 虛擬機器中,int 型別的長度是相同的。
9.Java 中 WeakReference 與 SoftReference的區別?
Java中一共有四種類型的引用。StrongReference、 SoftReference、 WeakReference 以及 PhantomReference。
StrongReference 是 Java 的預設引用實現, 它會盡可能長時間的存活於 JVM 內,當沒有任何物件指向它時將會被GC回收
WeakReference,顧名思義, 是一個弱引用, 當所引用的物件在JVM 內不再有強引用時, 將被GC回收
雖然 WeakReference 與 SoftReference 都有利於提高 GC 和 記憶體的效率,但是 WeakReference ,一旦失去最後一個強引用,就會被 GC 回收,而 SoftReference 會盡可能長的保留引用直到 JVM 記憶體不足時才會被回收(虛擬機器保證), 這一特性使得SoftReference 非常適合快取應用
10.解釋 Java 堆空間及 GC?
當透過 Java 命令啟動Java 程序的時候,會為它分配記憶體。記憶體的一部分用於建立堆空間,當程式中建立物件的時候,就從對空間中分配記憶體。GC 是 JVM 內部的一個程序,回收無效物件的記憶體用於將來的分配。
11.Java 中堆和棧有什麼區別?
JVM 中堆和棧屬於不同的記憶體區域,使用目的也不同。棧常用於儲存方法幀和區域性變數,而物件總是在堆上分配。棧通常都比堆小,也不會在多個執行緒之間共享,而堆被整個 JVM 的所有執行緒共享。
3. 併發,鎖
1.volatile關鍵字, Lock
併發程式設計中:原子性問題,可見性問題,有序性問題。
volatile關鍵字能保證可見性,字能禁止指令重排序,但是不能保證原子性。可見性只能保證每次讀取的是最新的值,但是volatile沒辦法保證對變數的操作的原子性。在生成的會變語句中加入Lock關鍵字和記憶體屏障。
Lock 實現提供了比使用synchronized 方法和語句可獲得的更廣泛的鎖定操作,它能以更優雅的方式處理執行緒同步問題。用sychronized修飾的方法或者語句塊在程式碼執行完之後鎖自動釋放,而用Lock需要我們手動釋放鎖
2.MYSQL常用最佳化(sql最佳化,表結構最佳化等)
SQL最佳化、表機構最佳化、索引最佳化、快取引數最佳化
3.java每改一點都需要重新編譯打包部署,有沒有更好的方法
可以使用熱載入
4.程序間通訊有哪幾種方式?
1)管道(Pipe),2)命名管道(named pipe),3)訊號(Signal),4)訊息(Message)佇列,5)共享記憶體,6)記憶體對映(mapped memory),7)訊號量(semaphore),8)套介面(Socket)
5.Sychronized修飾靜態方法,鎖定類本身而不是例項,非靜態方法鎖定例項。
6. 作業系統什麼情況下會死鎖?
所謂死鎖:是指多個程序在執行過程中因爭奪資源而造成的一種僵局。產生的原因:競爭資源:當系統中多個程序使用共享資源,並且資源不足以滿足需要,會引起程序對資源的競爭而產生死鎖。程序間推進的順序非法:請求和釋放資源的順序不當,也同樣會導致產生程序死鎖
7.產生死鎖的四個條件:
1.互斥條件(程序獨佔資源)2.請求與保持(程序因請求資源而阻塞時,對已獲得的資源保持不放) 3.不剝奪條件(程序已獲得的資源,在末使用完之前,不能強行剝奪) 4.迴圈等待(若干程序之間形成一種頭尾相接的迴圈等待資源關係)
8. 如何理解分散式鎖?
由於在平時的工作中,線上伺服器是分散式多臺部署的,經常會面臨解決分散式場景下資料一致性的問題,那麼就要利用分散式鎖來解決這些問題。
9. 執行緒同步與阻塞的關係?同步一定阻塞嗎?阻塞一定同步嗎?
執行緒同步與否 跟 阻塞非阻塞沒關係,同步是個過程,阻塞是執行緒的一種狀態。多個執行緒操作共享變數時可能會出現競爭。這時需要同步來防止兩個以上的執行緒同時進入臨界區內,在這個過程中後進入臨界區的執行緒將阻塞,等待先進入的執行緒走出臨界區。
10. 同步和非同步有什麼區別?
同步和非同步最大的區別就在於。一個需要等待,一個不需要等待。同步可以避免出現死鎖,讀髒資料的發生,一般共享某一資源的時候用,如果每個人都有修改許可權,同時修改一個檔案,有可能使一個人讀取另一個人已經刪除的內容,就會出錯,同步就會按順序來修改。
11. 執行緒池
根據系統自身的環境情況,有效的限制執行執行緒的數量,使得執行效果達到最佳。執行緒主要是透過控制執行的執行緒的數量,超出數量的執行緒排隊等候,等待有任務執行完畢,再從佇列最前面取出任務執行
12. 如何呼叫 wait()方法?使用 if 塊還是迴圈?為什麼?
wait() 方法應該在迴圈呼叫,因為當執行緒獲取到 CPU 開始執行的時候,其他條件可能還沒有滿足,所以在處理前,迴圈檢測條件是否滿足會更好。
wait(),notify()和notifyall()方法是java.lang.Object類為執行緒提供的用於實現執行緒間通訊的同步控制方法。等待或者喚醒
13. 實現執行緒的幾種方法
(1)繼承Thread類,重寫run函式 (2)實現Runnable介面,重寫run函式 (3)實現Callable介面,重寫call函式
14. 什麼是多執行緒環境下的偽共享(falsesharing)?
偽共享是多執行緒系統(每個處理器有自己的區域性快取)中一個眾所周知的效能問題。快取系統中是以快取行(cache line)為單位儲存的。快取行是2的整數冪個連續位元組,一般為32-256個位元組。最常見的快取行大小是64個位元組。當多執行緒修改互相獨立的變數時,如果這些變數共享同一個快取行,就會無意中影響彼此的效能,這就是偽共享。
4. 網路、資料庫
1.TCP如何保證可靠傳輸?三次握手過程?
在TCP的連線中,資料流必須以正確的順序送達對方。TCP的可靠性是透過順序編號和確認(ACK)來實現的。TCP 連線是透過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 TCP 視窗大小資訊。第一次是客戶端發起連線;第二次表示伺服器收到了客戶端的請求;第三次表示客戶端收到了伺服器的反饋。
2. Linux下你常用的命令有哪些?
3. 常用的hash演算法有哪些?
1.加法hash:所謂的加法Hash就是把輸入元素一個一個的加起來構成最後的結果。
2.位運算hash:這型別Hash函式透過利用各種位運算(常見的是移位和異或)來充分的混合輸入元素
3.乘法hash:33*hash + key.charAt(i)
4. 什麼是一致性雜湊?
設計目標是為了解決因特網中的熱點(Hot spot)問題,一致性hash演算法提出了在動態變化的Cache環境中,判定雜湊演算法好壞的四個定義:1、平衡性(Balance) 2、單調性(Monotonicity) 3、分散性(Spread) 4、負載(Load)
5. 資料庫中的正規化有哪些?
第一正規化----資料庫中的表(所有欄位值)都是不可分割的原子資料項。
第二正規化----資料庫表中的每一列都和主鍵相關,而不能只和主鍵的某一部分相關。
第三正規化----資料庫表中每一列資料都和主鍵直接相關,不能間接相關。正規化是為了減小資料冗餘。
6. 資料庫中的索引的結構?什麼情況下適合建索引?
資料庫中索引的結構是一種排序的資料結構,資料庫索引是透過B樹和變形的B+樹實現的。什麼情況下不適合建立索引:1.對於在查詢過程中很少使用或參考的列;對於那些只有很少資料值的列;對於那些定義為image,text和bit資料型別的列;當修改效能遠大於檢索效能。
根據系統自身的環境情況,有效的限制執行執行緒的數量,使得執行效果達到最佳。執行緒主要是透過控制執行的執行緒的數量,超出數量的執行緒排隊等候,等待有任務執行完畢,再從佇列最前面取出任務執行
7. concurrent包下面,都用過什麼?
java.util.concurrent、java.util.concurrent.atomic和java.util.concurrent.lock
8. 常用的資料庫有哪些?redis用過嗎?
Orcale,MySQL,DB2
9. 你知道的開源協議有哪些?
GPL (GNU General Public License) :GNU通用公共許可協議
LGPL (GNU Lesser General Public License) :GNU寬通用公共許可協議
BSD(Berkeley Software Distribution) :伯克利軟體分發許可協議
MIT (Massachusetts Institute of Technology):MIT之名源自麻省理工學院
Apache (Apache License) :Apache許可協議
MPL (Mozilla Public License) :Mozilla公共許可協議
10.表單提交中,get和post區別
1.get從伺服器獲取資訊,post向伺服器傳資訊 2.get傳送資料量比較小,post可以比較大 3.get安全性比較低
11. TCP 協議與 UDP 協議有什麼區別?(answer答案)
TCP(Tranfer Control Protocol)的縮寫,是一種面向連線的保證傳輸的協議,在傳輸資料流前,雙方會先建立一條虛擬的通訊道。可以很少差錯傳輸資料。
UDP(User DataGram Protocol)的縮寫,是一種無連線的協議,使用UDP傳輸資料時,每個資料段都是一個獨立的資訊,包括完整的源地址和目的地,在網路上以任何可能的 路徑傳到目的地,因此,能否到達目的地,以及到達目的地的時間和內容的完整性都不能保證。
所以TCP必UDP多了建立連線的時間。相對UDP而言,TCP具有更高的安全性和可靠性。
TCP協議傳輸的大小不限制,一旦連線被建立,雙方可以按照一定的格式傳輸大量的資料,而UDP是一個不可靠的協議,大小有限制,每次不能超過64K。