更新時間:2019年12月06日11時20分 來源:網(wǎng)絡(luò) 瀏覽次數(shù):
java基礎(chǔ)以及多個“比較”
1.Collections.sort排序內(nèi)部原理
在Java 6中Arrays.sort()和Collections.sort()使用的是MergeSort,而在Java 7中,內(nèi)部實現(xiàn)換成了TimSort,其對對象間比較的實現(xiàn)要求更加嚴格。
2.hashMap原理,java8做的改變
從結(jié)構(gòu)實現(xiàn)來講,HashMap是數(shù)組+鏈表+紅黑樹(JDK1.8增加了紅黑樹部分)實現(xiàn)的。HashMap只允許一條記錄的鍵為null,允許多條記錄的值為null。HashMap非線程安全。ConcurrentHashMap線程安全。解決碰撞:當出現(xiàn)沖突時,運用拉鏈法,將關(guān)鍵詞為同義詞的結(jié)點鏈接在一個單鏈表中,散列表長m,則定義一個由m個頭指針組成的指針數(shù)組T,地址為i的結(jié)點插入以T(i)為頭指針的單鏈表中。Java8中,沖突的元素超過限制(8),用紅黑樹替換鏈表。
3.String 和 StringBuilder 的區(qū)別
1)可變與不可變:String不可變,每一次執(zhí)行“+”都會新生成一個新對象,所以頻繁改變字符串的情況中不用String,以節(jié)省內(nèi)存。
2)是否多線程安全:StringBuilder并沒有對方法進行加同步鎖,所以是非線程安全的。StringBuffer和String均線程安全。
4.Vector 與 Array 的區(qū)別
1)ArrayList在內(nèi)存不夠時默認是擴展50% + 1個,Vector是默認擴展1倍。
2)Vector屬于線程安全級別的,但是大多數(shù)情況下不使用Vector,因為線程安全需要更大的系統(tǒng)開銷。
5.HashMap 與 Hashtable 的區(qū)別
1) 歷史原因: Hashtable繼承Dictonary類, HashMap繼承自abstractMap
2) HashMap允許空的鍵值對, 但只能有一個空對象,而HashTable不允許。
3) HashTable同步,而HashMap非同步,效率上比HashTable要高
6.ConncurrentHashMap和hashtable比較(兩個線程并發(fā)訪問map中同一條鏈,一個線程在尾部刪除,一個線程在前面遍歷查找,問為什么前面的線程還能正確的查找到后面被另一個線程刪除的節(jié)點)
ConcurrentHashMap融合了hashtable和hashmap二者的優(yōu)勢。hashtable是做了同步的,即線程安全,hashmap未考慮同步。所以hashmap在單線程情況下效率較高。hashtable在的多線程情況下,同步操作能保證程序執(zhí)行的正確性。但是hashtable是阻塞的,每次同步執(zhí)行的時候都要鎖住整個結(jié)構(gòu),ConcurrentHashMap正是為了解決這個問題而誕生的,
ConcurrentHashMap允許多個修改操作并發(fā)進行,其關(guān)鍵在于使用了鎖分離技術(shù)(一個Array保存多個Object,使用這些對象的鎖作為分離鎖,get/put時隨機使用任意一個)。它使用了多個鎖來控制對hash表的不同部分進行的修改。在JDK 1.6中,有HashEntry結(jié)構(gòu)存在,每次插入將新添加節(jié)點作為鏈的頭節(jié)點(同HashMap實現(xiàn)),而且每次刪除一個節(jié)點時,會將刪除節(jié)點之前的所有節(jié)點拷貝一份組成一個新的鏈,而將當前節(jié)點的上一個節(jié)點的next指向當前節(jié)點的下一個節(jié)點,從而在刪除以后有兩條鏈存 在,因而可以保證即使在同一條鏈中,有一個線程在刪除,而另一個線程在遍歷,它們都能工作良好,因為遍歷的線程能繼續(xù)使用原有的鏈。
Java8中,采用volatile HashEntry保存數(shù)據(jù),table元素作為鎖;從table數(shù)組+單向鏈表加上了紅黑樹。紅黑樹是一種特別的二叉查找樹,特性為:1.節(jié)點為紅或者黑 2.根節(jié)點為黑 3.葉節(jié)點為黑 4.一節(jié)點為紅,則葉節(jié)點為黑 5.一節(jié)點到其子孫節(jié)點所有路徑上的黑節(jié)點數(shù)目相同。
7.ArrayList與 LinkedList 的區(qū)別?
頗為明顯的區(qū)別是
ArrrayList 底層的數(shù)據(jù)結(jié)構(gòu)是數(shù)組,支持隨機訪問,而 LinkedList 的底層數(shù)據(jù)結(jié)構(gòu)書鏈表,不支持隨機訪問。使用下標訪問一個元素,ArrayList 的時間復(fù)雜度是 O(1),而 LinkedList 是 O(n)。LinkedList是雙向鏈表
8.Java 中,Comparator 與Comparable 有什么不同?
Comparable 接口用于定義對象的自然順序,是排序接口,而 comparator 通常用于定義用戶定制的順序,是比較接口。我們?nèi)绻枰刂颇硞€類的次序,而該類本身不支持排序(即沒有實現(xiàn)Comparable接口),那么我們就可以建立一個“該類的比較器”來進行排序。Comparable 總是只有一個,但是可以有多個 comparator 來定義對象的順序。
9.抽象類是什么?它與接口有什么區(qū)別?你為什么要使用過抽象類?
抽象類是指不允許被實例化的類;一個類只能使用一次繼承關(guān)系。但是,一個類卻可以實現(xiàn)多個interface。
abstract class和interface所反映出的設(shè)計理念不同。其實abstract class表示的是"is-a"關(guān)系,interface表示的是"like-a"關(guān)系
實現(xiàn)抽象類和接口的類必須實現(xiàn)其中的所有方法。抽象類中可以有非抽象方法。接口中則不能有實現(xiàn)方法。但在Java8中允許接口中有靜態(tài)默認的方法。
接口中定義的變量默認是public static final 型,且必須給其初值,所以實現(xiàn)類中不能重新定義,也不能改變其值。抽象類中的變量默認是 friendly 型,其值可以在子類中重新定義,也可以重新賦值。
子類中實現(xiàn)父類中的抽象方法時,可見性可以大于等于父類中的;而接口實現(xiàn)類中的接口 方法的可見性只能與接口中相同(public)。
用抽象類是為了重用。減少編碼量,降低耦合性。
10.描述 Java 中的重載和重寫?
重載和重寫都允許你用相同的名稱來實現(xiàn)不同的功能,但是重載是編譯時活動,而重寫是運行時活動。你可以在同一個類中重載方法,但是只能在子類中重寫方法。重寫必須要有繼承
重寫:(1)在子類中可以根據(jù)需要對從基類中繼承來的方法進行重寫。(2)重寫的方法和被重寫的方法必須具有相同方法名稱、參數(shù)列表和返回類型。(3)重寫方法不能使用比被重寫的方法更嚴格的訪問權(quán)限。
重載的時候,方法名要一樣,但是參數(shù)類型和個數(shù)不一樣,返回值類型可以相同也可以不相同。無法以返回型別作為重載函數(shù)的區(qū)分標準。
11.Collection與Collections的區(qū)別是什么?
Collection是Java集合框架中的基本接口;
Collections是Java集合框架提供的一個工具類,其中包含了大量用于操作或返回集合的靜態(tài)方法。
12.Java中多態(tài)的實現(xiàn)原理
所謂多態(tài),指的就是父類引用指向子類對象,調(diào)用方法時會調(diào)用子類的實現(xiàn)而不是父類的實現(xiàn)。多態(tài)的實現(xiàn)的關(guān)鍵在于“動態(tài)綁定”。
13.object中定義了哪些方法?
clone(), equals(), hashCode(), toString(), notify(), notifyAll(),
wait(), finalize(), getClass()
14.Java泛型和類型擦除?
泛型即參數(shù)化類型,在創(chuàng)建集合時,指定集合元素的類型,此集合只能傳入該類型的參數(shù)。類型擦除:java編譯器生成的字節(jié)碼不包含泛型信息,所以在編譯時擦除:1.泛型用top1父類替換;2.移除。
15.說出 5 個 JDK 1.8 引入的新特性?
Java 8 在 Java 歷史上是一個開創(chuàng)新的版本,下面 JDK 8 中 5 個主要的特性:
Lambda 表達式;允許像對象一樣傳遞匿名函數(shù) Stream API,充分利用現(xiàn)代多核 CPU,可以寫出很簡潔的代碼 ;Date 與 Time API,最終,有一個穩(wěn)定、簡單的日期和時間庫可供你使用 擴展方法,現(xiàn)在,接口中可以有靜態(tài)、默認方法; 重復(fù)注解,現(xiàn)在你可以將相同的注解在同一類型上使用多次。
16.java中public,private,protected以及默認關(guān)鍵字的訪問范圍:
Protected可在包內(nèi)及包外子類訪問,default只能同一包內(nèi)訪問,prvate只能同一類
17. 常用數(shù)據(jù)結(jié)構(gòu):
集合,線性結(jié)構(gòu)(數(shù)組,隊列,鏈表和棧),樹形結(jié)構(gòu),圖狀結(jié)構(gòu)
18.Java 中的 TreeMap 是采用什么樹實現(xiàn)的?(答案)
Java 中的 TreeMap 是使用紅黑樹實現(xiàn)的。
19. 匿名內(nèi)部類是什么?如何訪問在其外面定義的變量?
匿名內(nèi)部類也就是沒有名字的內(nèi)部類,匿名內(nèi)部類只能使用一次,它通常用來簡化代碼編寫。
匿名內(nèi)部類只能訪問外部類的Final變量. Java 8更加智能:如果局部變量被匿名內(nèi)部類訪問,那么該局部變量相當于自動使用了final修飾。
20. 如何創(chuàng)建單例模式?說了雙重檢查,他說不是線程安全的。如何高效的創(chuàng)建一個線程安全的單例?
一種是通過枚舉,一種是通過靜態(tài)內(nèi)部類。
21.poll() 方法和 remove() 方法的區(qū)別?
poll() 和
remove() 都是從隊列中取出一個元素,但是 poll() 在獲取元素失敗的時候會返回空,但是 remove() 失敗的時候會拋出異常。
22.寫一段代碼在遍歷 ArrayList 時移除一個元素
使用迭代器。
Iterator itr = list.iterator();
while(itr.hasNext()) {if(…) { itr.remove();} }
JVM
1.JVM如何加載一個類的過程,雙親委派模型中有哪些方法
類加載過程:加載、驗證(驗證階段作用是保證Class文件的字節(jié)流包含的信息符合JVM規(guī)范,不會給JVM造成危害)、準備(準備階段為變量分配內(nèi)存并設(shè)置類變量的初始化)、解析(解析過程是將常量池內(nèi)的符號引用替換成直接引用)、初始化。
雙親委派模型中方法:雙親委派是指如果一個類收到了類加載的請求,不會自己先嘗試加載,先找父類加載器去完成。當頂層啟動類加載器表示無法加載這個類的時候,子類才會嘗試自己去加載。當回到發(fā)起者加載器還無法加載時,并不會向下找,而是拋出ClassNotFound異常。
方法:啟動(Bootstrap)類加載器,標準擴展(Extension)類加載器,應(yīng)用程序類加載器(Application ),上下文(Custom)類加載器。意義是防止內(nèi)存中出現(xiàn)多份同樣的字節(jié)碼 。
2.GC算法(什么樣的對象算是可回收對象,可達性分析),CMS收集器
jvm是如何判斷一個對象已經(jīng)變成了可回收的“垃圾”,一般是兩個方法:引用記數(shù)法和根搜索算法。引用記數(shù)法沒辦法解決循環(huán)引用的問題,所以用根搜索。從一系列的”GC Roots“對象開始向下搜索,搜索走過的路徑稱為引用鏈。當一個對象到”GC Roots“之間沒有引用鏈時,被稱為引用不可達。引用不可到的對象被認為是可回收的對象。
幾種垃圾收集器:1,Serial New/Serial Old(串行),2,Parrallel New (并行),3,Parrallel Scavenge,4,Parrallel Old,5,CMS(CMS收集器是一個以獲得最短回收停頓時間為目標的收集器,它是一種并發(fā)收集器,采用的是Mark-sweep算法。),6,G1(是一款并行與并發(fā)收集器,并且可建立可預(yù)測的停頓時間模型,整體上是基于標記清理,局部采用復(fù)制)
3.JVM分為哪些區(qū),每一個區(qū)干嗎的?
1)方法區(qū)(method):被所有的線程共享。方法區(qū)包含所有的類信息和靜態(tài)變量。
2)堆(heap):被所有的線程共享,存放對象實例以及數(shù)組,Java堆是GC的主要區(qū)域。
3)棧(stack):每個線程包含一個棧區(qū),棧中保存一些局部變量等。
4)程序計數(shù)器:是當前線程執(zhí)行的字節(jié)碼的行指示器。
4.JVM新生代,老年代,持久代,都存儲哪些東西?
持久代主要存放的是Java類的類信息,與垃圾收集要收集的Java對象關(guān)系不大。所有新生成的對象首先都是放在年輕代的,年老代中存放的都是一些生命周期較長的對象。
5.內(nèi)存溢出和內(nèi)存泄漏:
內(nèi)存溢出:程序申請內(nèi)存時,沒有足夠的內(nèi)存,out of memory;內(nèi)存泄漏值垃圾對象無法回收,可以使用memory analyzer工具查看泄漏。
6.進程與線程:
進程值運行中的程序(獨立性,動態(tài)性,并發(fā)性),線程指進程中的順序執(zhí)行流。區(qū)別是:1.進程間不共享內(nèi)存 2.創(chuàng)建進程進行資源分配的代價要大得多,所以多線程在高并發(fā)環(huán)境中效率高。
7.序列化與反序列化:
序列化指將java對象轉(zhuǎn)化為字節(jié)序列,反序列化相反。主要是為了java線程間通訊,實現(xiàn)對象傳遞。只有實現(xiàn)了Serializable或Externalizable接口類對象才可被序列化。
8.64 位 JVM 中,int 的長度是多數(shù)?
Java 中,int 類型變量的長度是一個固定值,與平臺無關(guān),都是 32 位。意思就是說,在 32 位 和 64 位 的Java 虛擬機中,int 類型的長度是相同的。
9.Java 中 WeakReference 與 SoftReference的區(qū)別?
Java中一共有四種類型的引用。StrongReference、 SoftReference、 WeakReference 以及 PhantomReference。
StrongReference 是 Java 的默認引用實現(xiàn), 它會盡可能長時間的存活于 JVM 內(nèi),當沒有任何對象指向它時將會被GC回收。
WeakReference,顧名思義, 是一個弱引用, 當所引用的對象在JVM 內(nèi)不再有強引用時, 將被GC回收。
雖然 WeakReference 與 SoftReference 都有利于提高 GC 和 內(nèi)存的效率,但是 WeakReference ,一旦失去最后一個強引用,就會被 GC 回收,而 SoftReference 會盡可能長的保留引用直到 JVM 內(nèi)存不足時才會被回收(虛擬機保證), 這一特性使得SoftReference 非常適合緩存應(yīng)用
10.解釋 Java 堆空間及 GC?
當通過 Java 命令啟動
Java 進程的時候,會為它分配內(nèi)存。內(nèi)存的一部分用于創(chuàng)建堆空間,當程序中創(chuàng)建對象的時候,就從對空間中分配內(nèi)存。GC 是 JVM 內(nèi)部的一個進程,回收無效對象的內(nèi)存用于將來的分配。
11.Java 中堆和棧有什么區(qū)別?
JVM 中堆和棧屬于不同的內(nèi)存區(qū)域,使用目的也不同。棧常用于保存方法幀和局部變量,而對象總是在堆上分配。棧通常都比堆小,也不會在多個線程之間共享,而堆被整個 JVM 的所有線程共享。
并發(fā),鎖
1.volatile關(guān)鍵字, Lock
并發(fā)編程中:原子性問題,可見性問題,有序性問題。
volatile關(guān)鍵字能保證可見性,字能禁止指令重排序,但是不能保證原子性??梢娦灾荒鼙WC每次讀取的是新值,但是volatile沒辦法保證對變量的操作的原子性。在生成的會變語句中加入Lock關(guān)鍵字和內(nèi)存屏障。
Lock 實現(xiàn)提供了比使用synchronized 方法和語句可獲得的更廣泛的鎖定操作,它能以更優(yōu)雅的方式處理線程同步問題。用sychronized修飾的方法或者語句塊在代碼執(zhí)行完之后鎖自動釋放,而用Lock需要我們手動釋放鎖
2.MYSQL常用優(yōu)化(sql優(yōu)化,表結(jié)構(gòu)優(yōu)化等)
SQL優(yōu)化、表機構(gòu)優(yōu)化、索引優(yōu)化、緩存參數(shù)優(yōu)化
3.java每改一點都需要重新編譯打包部署,有沒有更好的方法
可以使用熱加載
4.進程間通信有哪幾種方式?
1)管道(Pipe),2)命名管道(named pipe),3)信號(Signal),4)消息(Message)隊列,5)共享內(nèi)存,6)內(nèi)存映射(mapped memory),7)信號量(semaphore),8)套接口(Socket)
5.Sychronized修飾靜態(tài)方法,鎖定類本身而不是實例,非靜態(tài)方法鎖定實例。
6. 操作系統(tǒng)什么情況下會死鎖?
所謂死鎖:是指多個進程在運行過程中因爭奪資源而造成的一種僵局。產(chǎn)生的原因:競爭資源:當系統(tǒng)中多個進程使用共享資源,并且資源不足以滿足需要,會引起進程對資源的競爭而產(chǎn)生死鎖。進程間推進的順序非法:請求和釋放資源的順序不當,也同樣會導致產(chǎn)生進程死鎖
7.產(chǎn)生死鎖的四個條件:
1.互斥條件(進程獨占資源)2.請求與保持(進程因請求資源而阻塞時,對已獲得的資源保持不放) 3.不剝奪條件(進程已獲得的資源,在末使用完之前,不能強行剝奪) 4.循環(huán)等待(若干進程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系)
8. 如何理解分布式鎖?
由于在平時的工作中,線上服務(wù)器是分布式多臺部署的,經(jīng)常會面臨解決分布式場景下數(shù)據(jù)一致性的問題,那么就要利用分布式鎖來解決這些問題。
9. 線程同步與阻塞的關(guān)系?同步一定阻塞嗎?阻塞一定同步嗎?
線程同步與否 跟 阻塞非阻塞沒關(guān)系,同步是個過程,阻塞是線程的一種狀態(tài)。多個線程操作共享變量時可能會出現(xiàn)競爭。這時需要同步來防止兩個以上的線程同時進入臨界區(qū)內(nèi),在這個過程中后進入臨界區(qū)的線程將阻塞,等待先進入的線程走出臨界區(qū)。
10. 同步和異步有什么區(qū)別?
同步和異步明顯的區(qū)別就在于。一個需要等待,一個不需要等待。同步可以避免出現(xiàn)死鎖,讀臟數(shù)據(jù)的發(fā)生,一般共享某一資源的時候用,如果每個人都有修改權(quán)限,同時修改一個文件,有可能使一個人讀取另一個人已經(jīng)刪除的內(nèi)容,就會出錯,同步就會按順序來修改。
11. 線程池
根據(jù)系統(tǒng)自身的環(huán)境情況,有效的限制執(zhí)行線程的數(shù)量,使得運行效果達到尚佳的狀態(tài)。線程主要是通過控制執(zhí)行的線程的數(shù)量,超出數(shù)量的線程排隊等候,等待有任務(wù)執(zhí)行完畢,再從隊列頭了取出任務(wù)執(zhí)行
12. 如何調(diào)用 wait()方法?使用 if 塊還是循環(huán)?為什么?
wait() 方法應(yīng)該在循環(huán)調(diào)用,因為當線程獲取到 CPU 開始執(zhí)行的時候,其他條件可能還沒有滿足,所以在處理前,循環(huán)檢測條件是否滿足會更好。
wait(),notify()和notifyall()方法是java.lang.Object類為線程提供的用于實現(xiàn)線程間通信的同步控制方法。等待或者喚醒
13. 實現(xiàn)線程的幾種方法
(1)繼承Thread類,重寫run函數(shù)
(2)實現(xiàn)Runnable接口,重寫run函數(shù)
(3)實現(xiàn)Callable接口,重寫call函數(shù)
14. 什么是多線程環(huán)境下的偽共享(false sharing)?
偽共享是多線程系統(tǒng)(每個處理器有自己的局部緩存)中一個眾所周知的性能問題。緩存系統(tǒng)中是以緩存行(cache line)為單位存儲的。緩存行是2的整數(shù)冪個連續(xù)字節(jié),一般為32-256個字節(jié)。常見的緩存行大小是64個字節(jié)。當多線程修改互相獨立的變量時,如果這些變量共享同一個緩存行,就會無意中影響彼此的性能,這就是偽共享。
相關(guān)教程推薦:Java無鎖并發(fā)編程教程
網(wǎng)絡(luò)、數(shù)據(jù)庫
1.TCP如何保證可靠傳輸?三次握手過程?
在TCP的連接中,數(shù)據(jù)流必須以正確的順序送達對方。TCP的可靠性是通過順序編號和確認(ACK)來實現(xiàn)的。TCP 連接是通過三次握手進行初始化的。三次握手的目的是同步連接雙方的序列號和確認號并交換 TCP 窗口大小信息。第一次是客戶端發(fā)起連接;第二次表示服務(wù)器收到了客戶端的請求;第三次表示客戶端收到了服務(wù)器的反饋。
2. Linux下你常用的命令有哪些?
(1)cd命令用來改變所在目錄。cd / 轉(zhuǎn)到根目錄中cd ~ 轉(zhuǎn)到用戶目錄下
(2) ls命令用來查看目錄的內(nèi)容。
(3)cp命令用來拷貝文件cp
(4)mv命令 mv t.txt Document 把文件t.txt 移動到目錄Document中。
3. 常用的hash算法有哪些?
(1)加法hash:所謂的加法Hash就是把輸入元素一個一個的加起來構(gòu)成最后的結(jié)果。
(2)位運算hash:這類型Hash函數(shù)通過利用各種位運算(常見的是移位和異或)來充分的混合輸入元素
(3)乘法hash:33*hash + key.charAt(i)
4. 什么是一致性哈希?
設(shè)計目標是為了解決因特網(wǎng)中的熱點(Hot spot)問題,一致性hash算法提出了在動態(tài)變化的Cache環(huán)境中,判定哈希算法好壞的四個定義:平衡性(Balance) ;單調(diào)性(Monotonicity) ;分散性(Spread) ;負載(Load)
5. 數(shù)據(jù)庫中的范式有哪些?
第一范式----數(shù)據(jù)庫中的表(所有字段值)都是不可分割的原子數(shù)據(jù)項。
第二范式----數(shù)據(jù)庫表中的每一列都和主鍵相關(guān),而不能只和主鍵的某一部分相關(guān)。
第三范式----數(shù)據(jù)庫表中每一列數(shù)據(jù)都和主鍵直接相關(guān),不能間接相關(guān)。范式是為了減小數(shù)據(jù)冗余。
6. 數(shù)據(jù)庫中的索引的結(jié)構(gòu)?什么情況下適合建索引?
數(shù)據(jù)庫中索引的結(jié)構(gòu)是一種排序的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)庫索引是通過B樹和變形的B+樹實現(xiàn)的。什么情況下不適合建立索引:1.對于在查詢過程中很少使用或參考的列;對于那些只有很少數(shù)據(jù)值的列;對于那些定義為image,text和bit數(shù)據(jù)類型的列;當修改性能遠大于檢索性能。
根據(jù)系統(tǒng)自身的環(huán)境情況,有效的限制執(zhí)行線程的數(shù)量,使得運行效果達到不錯。線程主要是通過控制執(zhí)行的線程的數(shù)量,超出數(shù)量的線程排隊等候,等待有任務(wù)執(zhí)行完畢,再從隊列頭了取出任務(wù)執(zhí)行
7. concurrent包下面,都用過什么?
java.util.concurrent、java.util.concurrent.atomic和java.util.concurrent.lock
8. 常用的數(shù)據(jù)庫有哪些?redis用過嗎?
Oracle數(shù)據(jù)庫、SQLServer數(shù)據(jù)庫、DB2數(shù)據(jù)庫、MongoDB數(shù)據(jù)庫、MySQL數(shù)據(jù)庫等
9. 你知道的開源協(xié)議有哪些?
GPL (GNU General Public License) :GNU通用公共許可協(xié)議
LGPL (GNU Lesser General Public License) :GNU寬通用公共許可協(xié)議
BSD(Berkeley Software Distribution) :伯克利軟件分發(fā)許可協(xié)議
MIT(Massachusetts Institute of Technology):MIT之名源自麻省理工學院
Apache (Apache License) :Apache許可協(xié)議
MPL (Mozilla Public License) :Mozilla公共許可協(xié)議
10.表單提交中,get和post區(qū)別
(1)get從服務(wù)器獲取信息,post向服務(wù)器傳信息
(2)get傳送數(shù)據(jù)量比較小,post可以比較大
(3)get安全性比較低
11. TCP 協(xié)議與 UDP 協(xié)議有什么區(qū)別?(answer答案)
TCP(Tranfer Control Protocol)的縮寫,是一種面向連接的保證傳輸?shù)膮f(xié)議,在傳輸數(shù)據(jù)流前,雙方會先建立一條虛擬的通信道??梢院苌俨铄e傳輸數(shù)據(jù)。
UDP(User DataGram Protocol)的縮寫,是一種無連接的協(xié)議,使用UDP傳輸數(shù)據(jù)時,每個數(shù)據(jù)段都是一個獨立的信息,包括完整的源地址和目的地,在網(wǎng)絡(luò)上以任何可能的 路徑傳到目的地,因此,能否到達目的地,以及到達目的地的時間和內(nèi)容的完整性都不能保證。
所以TCP必UDP多了建立連接的時間。相對UDP而言,TCP具有更高的安全性和可靠性。
TCP協(xié)議傳輸?shù)拇笮〔幌拗疲坏┻B接被建立,雙方可以按照一定的格式傳輸大量的數(shù)據(jù),而UDP是一個不可靠的協(xié)議,大小有限制,每次不能超過64K。
猜你喜歡:
Java面試題之jsp相關(guān)知識點
Java面試題之javaweb技術(shù)應(yīng)用
Java面試題之J2ee常用的設(shè)計模式
Java面試題:BS與CS的聯(lián)系與區(qū)別
Java面試題Tomcat的優(yōu)化經(jīng)驗