1、小策略
一、說區別的時候,先單獨說出每個的特性,再列出相同點便可。
二、當遇到本身不太擅長的問題的時候,必定不要慌張,想法設法的往本身熟悉的地方帶,好比說問到快速排序算法時,本身不是特別的懂,就能夠說本身比較瞭解簡單的二分算法和冒泡排序算法。java
2、基礎面試題
一、一個".java"源文件中是否能夠包括多個類(不是內部類)?有什麼限制?
能夠有多個類,但只能有一個public的類,而且public的類名必須與文件名相一致。c++
二、Java有沒有goto?
java中的保留字,如今沒有在java中使用。web
三、說說&和&&的區別?
- &和&&均可以用做邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都爲true時,整個運算結果才爲true,不然,只要有一方爲false,則結果爲false。
- &&還具備短路的功能,即若是第一個表達式爲false,則再也不計算第二個表達式,例如,對於if(str != null && !str.equals(「」))表達式,當str爲null時,後面的表達式不會執行,因此不會出現NullPointerException若是將&&改成&,則會拋出NullPointerException異常。If(x==33 & ++y>0) y會增加,If(x==33 && ++y>0)不會增加
- &還能夠用做位運算符,當&操做符兩邊的表達式不是boolean類型時,&表示按位與操做,咱們一般使用0x0f來與一個整數進行&運算,來獲取該整數的最低4個bit位,例如,0x31 & 0x0f的結果爲0x01。
備註:這道題先說二者的共同點,再說出&&和&的特殊之處,並列舉一些經典的例子來代表本身理解透徹深刻、實際經驗豐富。
四、啓動一個線程是用run()仍是start()? .
啓動一個線程是調用start()方法,使線程就緒狀態,之後能夠被調度爲運行狀態,一個線程必須關聯一些具體的執行代碼,run()方法是該線程所關聯的執行代碼。面試
五、switch語句可否做用在byte上,可否做用在long上,可否做用在String上?
在switch(expr1)中,expr1只能是一個整數表達式或者枚舉常量(更大字體),整數表達式能夠是int基本類型或Integer包裝類型,因爲,byte,short,char均可以隱含轉換爲int,因此,這些類型以及這些類型的包裝類型也是能夠的。jdk1.7版本後switch能夠做用再String上面,依舊不能做用在long上面。ajax
六、short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
- 對於short s1 = 1; s1 = s1 + 1; 因爲s1+1運算時會自動提高表達式的類型,因此結果是int型,再賦值給short類型s1時,編譯器將報告須要強制轉換類型的錯誤。正確爲s1=(short)s1+1
- 對於short s1 = 1; s1 += 1;因爲 += 是java語言規定的運算符,java編譯器會對它進行特殊處理,所以能夠正確編譯。
七、char型變量中能不能存貯一箇中文漢字?爲何?
- 能夠存儲,由於java中使用的編碼是Unicode編碼,一個char類型佔2個字節(16bit),放一箇中文漢字是沒有問題的。
- Unicode編碼:不選擇任何特定的編碼,直接使用字符在字符集中的編碼,這是統一的惟一方法。
八、用最有效率的方法算出2乘以8等於幾?
2 << 3
由於將一個數左移n位,就至關於乘以了2的n次方,那麼,一個數乘以8只要將其左移3位便可,而位運算cpu直接支持的,效率最高,因此,2乘以8等於幾的最效率的方法是2 << 3。算法
九、使用final關鍵字修飾一個變量時,是引用不能變,仍是引用的對象不能變?
使用final關鍵字修飾一個變量時,是指引用變量不能變,引用變量所指向的對象中的內容仍是能夠改變的。sql
十、重載(Overloading)和重寫(Override)的區別
- 重載(Overloading):多個同名函數同時存在,參數類型和參數個數不通,返回值類型可同可不一樣,統一方式處理不一樣類型的數據。這也是java特性中多態性的一種體現,一個類中的多態性。
- 重寫(Override):子類中從新父類的方法,也叫作方法覆蓋,方法名與父類相同,參數返回類型相同,子類的修飾權限不可以低於父類不一樣類之間多態的體現。
十一、"=="和equals的區別
- 「==」: 比較變量值是否相等(數值) 至關於比較的是地址
- 「equals」: 兩個獨立對象的內容是否相同 比較的是內容
舉個例子
String a = new String(「abc」)
String b = new String(「abc」)
a==b false 不一樣對象地址不相同
a.equals(b) true 比較的是a、b兩個字符串中的內容數據庫
十二、靜態變量和實例變量的區別?
- 靜態變量:靜態變量也叫作類變量,static修飾,在類中,爲類全部,只要程序加載啦字節碼文件,不用建立實例對象就會自動的爲靜態變量分配內存空間。全部對象共有,其中一個對象將其值改變,其餘對象獲得的就是改變後的結果。
- 實例變量:new了對象以後,纔會分配內存空間。當前對象私有,改變其值,不會影響其餘對象。
例如,對於下面的程序,不管建立多少個實例對象,永遠都只分配了一個staticVar變量,而且每建立一個實例對象,這個staticVar就會加1;可是,每建立一個實例對象,就會分配一個instanceVar,便可能分配多個instanceVar,而且每一個instanceVar的值都只自加了1次。
package com.fsj; public class Test9 { public static int staticVar = 0; public int instanceVar = 0; public Test9() { staticVar++; instanceVar++; System.out.println("staticVar=" + staticVar); System.out.println("instanceVar=" + instanceVar); } public static void main(String[] args) { Test9 t1 = new Test9();
1三、是否能夠從一個static方法內部發出對非static方法的調用?
不能夠。由於static方法的調用能夠直接經過類名.方法名()調用,不用建立對象。而非static方法要與對象關聯在一塊兒的,必需要建立對象以後才能夠在該對象上進行方法的調用,因此是不能夠的。apache
1四、Integer與int的區別?
Integer:默認值爲null
int:默認值爲0
int是java提供的8種原始數據類型之一。Integer是java爲int提供的封裝類。編程
1五、請說出做用域public,private,protected,以及不寫時的區別?
就至關於說出java的修飾權限的區別
做用域 |
當前類 |
同一個包 |
子孫類 |
不一樣包 |
public |
√ |
√ |
√ |
√ |
protected |
√ |
√ |
√ |
× |
friendly |
√ |
√ |
× |
× |
private |
√ |
× |
× |
× |
1六、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
- Math類中提供了三個與取整有關的方法:ceil、floor、round,這些方法的做用與它們的英文名稱的含義相對應。
- ceil的英文意義是天花板,該方法就表示向上取整,Math.ceil(11.3)的結果爲12,Math.ceil(-11.3)的結果是-11;
- floor的英文意義是地板,該方法就表示向下取整,Math.ceil(11.6)的結果爲11,Math.ceil(-11.6)的結果是-12;
- round方法,它表示「四捨五入」,算法爲Math.floor(x+0.5),即將原來的數字加上0.5後再向下取整,Math.round(11.5)=12 , Math.round(-11.5)=-11。
1七、構造器Constructor是否可被重寫(override)?
構造器Constructor不能被繼承,所以不能重寫Override,但能夠被重載Overload。
1八、接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承具體類(concrete class)? 抽象類中是否能夠有靜態的main方法?
- 接口能夠繼承接口。抽象類能夠實現(implements)接口,抽象類是否可繼承具體類。抽象類中能夠有靜態的main方法。
- 只要記住抽象類與普通類的惟一區別就是不能建立實例對象和容許有abstract方法和非abstract方法。
1九、abstract class和interface有什麼區別?
abstract class:abstract 類不能建立的實例對象。容許有abstract方法和非abstract方法。
interface:抽象類的一種特例,接口中的全部方法都必須是抽象的。
主要區別:
- 抽象類能夠有構造方法,接口中不能有構造方法。
- 抽象類中能夠有普通成員變量,接口中沒有普通成員變量。
- 抽象類中的抽象方法的訪問類型能夠是public,protected和默認類型,但接口中的抽象方法只能是public類型的,而且默認即爲public abstract類型。
- 抽象類中能夠包含靜態方法,接口中不能包含靜態方法。
- 抽象類和接口中均可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型能夠任意,但接口中定義的變量只能是public static final類型,而且默認即爲public static final類型。
20、同步和異步
- 同步:全部操做都作完,才返回給用戶,例如:銀行轉帳
- 異步:不用等全部操做都作完,就返回結果,達到局部刷新。
2一、error和exception有什麼區別?
- error:表示不是不可能恢復,可是很困難的一種嚴重問題,好比說內存溢出。不可以期望程序處理這樣的狀況。
- exception:表示一種設計或者實現問題,須要捕捉或者須要進行處理的異常,處理的是程序引發的問題,程序必須處理的。
2二、多線程有幾種實現方法?同步有幾種實現方法?
- 多線程有兩種實現方法:繼承Thread類與實現Runnable接口
- 同步的實現方面有兩種:synchronized,wait與notify
- wait():使一個線程處於等待狀態,而且釋放所持有的對象的lock。
- sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。
- notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM肯定喚醒哪一個線程,並且不是按優先級。
- Allnotity():喚醒全部處入等待狀態的線程,注意並非給全部喚醒線程一個對象的鎖,而是讓它們競爭。
2三、啓動一個線程是用run()仍是start()?
啓動一個線程是調用start()方法,使線程就緒狀態,之後能夠被調度爲運行狀態,一個線程必須關聯一些具體的執行代碼,run()方法是該線程所關聯的執行代碼。
2四、當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
分幾種狀況:
- 其餘方法前是否加了synchronized關鍵字,若是沒加,則能。
- 若是這個方法內部調用了wait,則能夠進入其餘synchronized方法。
- 若是其餘個方法都加了synchronized關鍵字,而且內部沒有調用wait,則不能。
- 若是其餘方法是static,它用的同步鎖是當前類的字節碼,與非靜態的方法不能同步,由於非靜態的方法用的是this。
2五、ArrayList和Vector的區別?
這兩個類都實現了List接口(List接口繼承了Collection接口),他們都是有序集合,即存儲在這兩個集合中的元素的位置都是有順序的,至關於一種動態的數組,咱們之後能夠按位置索引號取出某個元素,,而且其中的數據是容許重複的,這是HashSet之類的集合的最大不一樣處,HashSet之類的集合不能夠按索引號去檢索其中的元素,也不容許有重複的元素(原本題目問的與hashset沒有任何關係,但爲了說清楚ArrayList與Vector的功能,咱們使用對比方式,更有利於說明問題)。
接着才說ArrayList與Vector的區別,這主要包括兩個方面:.
- 同步性:
Vector是線程安全的,也就是說是它的方法之間是線程同步的,而ArrayList是線程序不安全的,它的方法之間是線程不一樣步的。若是隻有一個線程會訪問到集合,那最好是使用ArrayList,由於它不考慮線程安全,效率會高些;若是有多個線程會訪問到集合,那最好是使用Vector,由於不須要咱們本身再去考慮和編寫線程安全的代碼。
備註:對於Vector&ArrayList、Hashtable&HashMap,要記住線程安全的問題,記住Vector與Hashtable是舊的,是java一誕生就提供了的,它們是線程安全的,ArrayList與HashMap是java2時才提供的,它們是線程不安全的。因此,咱們講課時先講老的。
- 數據增加:
ArrayList與Vector都有一個初始的容量大小,當存儲進它們裏面的元素的個數超過了容量時,就須要增長ArrayList與Vector的存儲空間,每次要增長存儲空間時,不是隻增長一個存儲單元,而是增長多個存儲單元,每次增長的存儲單元的個數在內存空間利用與程序效率之間要取得必定的平衡。Vector默認增加爲原來兩倍,而ArrayList的增加策略在文檔中沒有明確規定(從源代碼看到的是增加爲原來的1.5倍)。ArrayList與Vector均可以設置初始的空間大小,Vector還能夠設置增加的空間大小,而ArrayList沒有提供設置增加空間的方法。
總結:即Vector增加原來的一倍,ArrayList增長原來的0.5倍。
2六、HashMap和Hashtable的區別?
從三方面來講
- 歷史緣由:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現
- 同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的
- 只有HashMap可讓你將空值做爲一個表的條目的key或value
2七、List 、Map、Set區別?
- List:存儲單列數據的集合,數據有序,而且容許重複。
- Map:數據無序,鍵值集合,鍵不能夠重複,值是能夠重複的。
- Set:數據無序,無重複對象。
2八、Collection 和 Collections的區別?
- Collection:集合類的上級接口,繼承與他的接口主要有Set 和List.
- Collections:針對集合類的一個幫助類,提供了一系列靜態方法實現對各類集合的搜索、排序、線程安全化等操做。
2九、Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==仍是equals()? 它們有何區別?
- Set裏的元素是不能重複的
- 元素重複與否是使用equals()方法進行判斷的。
- equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和類型相配的話,返回真值。
30、兩個對象值相同(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不對?
對。
若是對象要保存在HashSet或HashMap中,它們的equals相等,那麼,它們的hashcode值就必須相等。
若是不是要保存在HashSet或HashMap,則與hashcode沒有什麼關係了,這時候hashcode不等是能夠的,例如arrayList存儲的對象就不用實現hashcode,固然,咱們沒有理由不實現,一般都會去實現的。
3一、說出一些經常使用的類,包,接口,請各舉5個
要讓人家感受你對java ee開發很熟,因此,不能僅僅只列core java中的那些東西,要多列你在作s項目中涉及的那些東西。就寫你最近寫的那些程序中涉及的那些類。
-
經常使用的類:BufferedReader BufferedWriter FileReader FileWirter String Integer
java.util.Date,System,Class,List,HashMap
-
經常使用的包:java.lang java.io java.util java.sql javax.servlet,org.apache.strtuts.action,org.hibernate
-
經常使用的接口:Remote List Map Document NodeList ,Servlet,HttpServletRequest,HttpServletResponse,Transaction(Hibernate)、Session(Hibernate),HttpSession
3二、GC是什麼? 爲何要有GC?
GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會致使程序或系統的不穩定甚至崩潰,Java提供的GC功能能夠自動監測對象是否超過做用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操做方法。
3三、heap和stack有什麼區別?
- heap(堆內存):程序進入一個方法時,會爲這個方法單獨分配一塊私屬存儲空間,用於存儲這個方法內部的局部變量,當這個方法結束時,分配給這個方法的棧會釋放,這個棧中的變量也將隨之釋放。
- stack(棧內存):用於存放不放在當前方法棧中的那些數據,例如,使用new建立的對象都放在堆裏,因此,它不會隨方法的結束而消失。方法中的局部變量使用final修飾後,放在堆中,而不是棧中。
3四、說出Servlet的生命週期,並說出Servlet和CGI的區別?
- 簡述:加載和實例化–>初始化–>處理請求–>服務結束
- 生命週期:Servlet被服務器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷燬的時候調用其destroy方法。
- 與cgi的區別在於servlet處於服務器進程中,它經過多線程方式運行其service方法,一個實例能夠服務於多個請求,而且其實例通常不會銷燬,而CGI對每一個請求都產生新的進程,服務完成後就銷燬,因此效率上低於servlet。
3五、final, finally, finalize的區別?
- final :用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
- finally:異常處理語句結構的一部分,表示老是執行。
- finalize:Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,能夠覆蓋此方法提供垃圾收集時的其餘資源回收,例如關閉文件等。
3六、forward 和redirect的區別?
- forward:服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,而後把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,因此它的地址欄中仍是原來的地址。 一次請求,地址欄中的地址不改變。
- redirect:就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器從新去請求那個地址,通常來講瀏覽器會用剛纔請求的全部參數從新請求,因此session,request參數均可以獲取。兩次請求,地址欄中的地址改變。
3七、何時用assert(斷言)?
assertion(斷言)在軟件開發中是一種經常使用的調試方式,不少開發語言中都支持這種機制。在實現中,assertion就是在程序中的一條語句,它對一個boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值爲true;若是該值爲false,說明程序已經處於不正確的狀態下,系統將給出警告或退出。通常來講,assertion用於保證程序最基本、關鍵的正確性。assertion檢查一般在開發和測試時開啓。爲了提升性能,在軟件發佈後,assertion檢查一般是關閉的。
3八、數組有沒有length()這個方法? String有沒有length()這個方法?
數組沒有length()這個方法,有length的屬性。String有length()這個方法。
3九、編程題: 寫一個Singleton(單例模式)出來?
- 飽漢模式
public class Singleton { private Singleton() { } private static Singleton instance = new Singleton(); public static Singleton getInstance() { return instance; } }
- 飢漢模式
public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance() { if (instance==null) instance=new Singleton(); return instance; } }
40、Java的接口和C++的虛類的相同和不一樣處?
因爲Java不支持多繼承,而有可能某個類或對象要使用分別在幾個類或對象裏面的方法或屬性,現有的單繼承機制就不能知足要求。與繼承相比,接口有更高的靈活性,由於接口中沒有任何實現代碼。當一個類實現了接口之後,該類要實現接口裏面全部的方法和屬性,而且接口裏面的屬性在默認狀態下面都是public static,全部方法默認狀況下是public,一個類能夠實現多個接口。
4一、描述一下JVM加載class文件的原理機制?
JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java運行時系統組件。它負責在運行時查找和裝入類文件的類。
4二、什麼狀況下調用doGet()和doPost()?
Jsp頁面中的form標籤裏的method屬性爲get時調用doGet(),爲post時調用doPost()。
4三、JSP和Servlet有哪些相同點和不一樣點,他們之間的聯繫是什麼?
- Servlet:服務器端應用程序,動態web頁面。
- JSP:java servlet page,Servlet技術的擴展,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編譯後是"類servlet"。
- 不一樣:Servlet的應用邏輯是在Java文件中,而且徹底從表示層中的HTML裏分離開來。而JSP的狀況是Java和HTML能夠組合成一個擴展名爲.jsp的文件。JSP側重於視圖,Servlet主要用於控制邏輯。
4四、XML文檔定義有幾種形式?它們之間有何本質區別?解析XML文檔有哪幾種方式?
- 兩種形式:dtd schema。
- 本質區別:schema自己是xml的,能夠被XML解析器解析(這也是從DTD上發展schema的根本目的),
- 解析方式:DOM,SAX,STAX等
- DOM:處理大型文件時其性能降低的很是厲害。這個問題是由DOM的樹結構所形成的,這種結構佔用的內存較多,並且DOM必須在解析文件以前把整個文檔裝入內存,適合對XML的隨機訪問
- SAX:不現於DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML文件,不須要一次所有裝載整個文件。當遇到像文件開頭,文檔結束,或者標籤開頭與標籤結束時,它會觸發一個事件,用戶經過在其回調事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問
- STAX:Streaming API for XML (StAX)。
4五、應用服務器與WEB SERVER的區別?
- 應用服務器:Weblogic、Tomcat、Jboss;
- WEB SERVER:IIS、 Apache
4六、MVC 軟件架構思想?
- Model:模型,封裝業務,處理邏輯
- View:視圖,顯示數據
- Controller:協調
4七、String,StringBuffer,StringBuilder的區別?
- String:不可修改,適用於少許字符串操做,不須要頻繁改動字符串的狀況。
- StringBuffer:可變,線程安全,同步,適用於多線程下在字符緩衝區進行大量操做的狀況。
- StringBuilder:可變,線程不安全,非同步,適用於單線程下在字符緩衝區進行大量操做的狀況。
4八、Sql優化?
一、減小查詢字段數
二、表關聯儘可能用主鍵
三、 查詢條件儘可能避免模糊查詢
四、避免使用排序字段,排序字段儘可能使用主鍵
五、儘可能使用限制查詢條件
六、查詢條件使用有效索引
七、exist關鍵字代替in
八、distinct關鍵字慎用
4九、String s = 「a」 + 「b」 +「c」 + "d"建立了幾個對象?
一個對象
javac編譯能夠直接對字符串常量進行直接的加減
package com.fsj; public class Test9 { public static void main(String[] args) { String s1 = "a"; String s2 = s1 + "b"; String s3 = "a" + "b"; System.out.println(s2 == "ab");
50、當一個對象被看成參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏究竟是值傳遞仍是引用傳遞?
是值傳遞。Java 編程語言只有值傳遞參數。當一個對象實例做爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容能夠在被調用的方法中改變,但對象的引用是永遠不會改變的。
5一、咱們在web 應用開發過程當中常常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串?
public String translate(String str){ String tempStr = ""; try{ tempStr = new String(str.getBytes("ISO-8859-1"), "GBK"); tempStr = tempStr.trim(); }catch (Exception e){ System.err.println(e.getMessage()); } return tempStr; }
5二、定義類A 和類B 以下:
class A { int a = 1; double d = 2.0; void show() { System.out.println("Class A: a=" + a + "\td=" + d); } } class B extends A { float a = 3.0f; String d = "Java program."; void show() { super.show(); System.out.println("Class B: a=" + a + "\td=" + d); } }
(1) 若在應用程序的main 方法中有如下語句:
A a=new A();
a.show();
則輸出的結果如何?
(2) 若在應用程序的main 方法中定義類B 的對象b:
A b=new B();
b.show();
則輸出的結果如何?
輸出結果爲:
1)Class A: a=1 d=2.0 ;
2)Class A: a=1 d=2.0
Class B: a=3.0 d=Java program。
5三、String s=new String(「xyz」);建立了幾個String Object?
兩個對象,一個是"xyx",一個是指向"xyx"的引用對象s。
5四、指出下面程序的運行結果: 【基礎】
class A { static { System.out.print("1"); } public A() { System.out.print("2"); } } class B extends A { static { System.out.print("a"); } public B() { System.out.print("b"); } } public class Hello { public static void main(String[] ars) { A ab = new B();
輸出結果爲1a2b2b;
類的static 代碼段,能夠看做是類首次加載(虛擬機加載)執行的代碼,而對於類加載,首先要執行其基類的構造,再執行其自己的構造。執行順序,基類static代碼塊—>自己static代碼塊—>基類構造方法—>自己構造方法
5五、字符串操做:如何實現字符串的反轉及替換?
可用字符串構造一StringBuffer 對象,而後調用StringBuffer 中的reverse方法便可實現字符串的反轉,調用replace 方法便可實現字符串的替換。
5六、socket通訊(tcp/udp區別及JAVA的實現方式)?
- TCP:面向鏈接的傳輸層控制協議,面向字節流,把數據當作是一連串無結構的字節流,具備極高的可靠性,保證數據包按照順序準確到達,但其也有着很高的額外負擔。
- UDP:無鏈接的數據包服務,面向報文的,無擁塞控制,並不能保證數據包會被成功的送達,也不保證數據包到達的順序,但其傳輸速度很快。
- java實現方式:大多數咱們會使用TCP,偶爾纔會動用UDP,如聲音訊號,即便少許遺失,也可有可無。
5七、什麼是java序列化,如何實現java序列化?
- 序列化:就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。能夠對流化後的對象進行讀寫操做,也可將流化後的對象傳輸於網絡之間。序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。
- 實現:將須要被序列化的類實現Serializable接口,該接口沒有須要實現的方法,implements Serializable只是爲了標註該對象是可被序列化的,而後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就能夠將參數爲obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。
5八、i = 5 ,j =7 求 i | j?
i | j 或運算 先轉換爲二進制再運算
5:0101
7:0111
i | j = 0111 = 7
5九、List遍歷集合的三種方式?
List<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc");
for(String value : list){ System.out.println(value); }
for(int i =0; i<list.size();i++){ System.out.println(list.get(i)); }
Iterator it = list.iterator(); while(it.hasNext()){ System.out.println(it.next()); }
60、(1 | 2)<< 4 =?
1 | 2 按位或
0001 0010 0011
<<4 左移運算符,左移四位 至關於乘以2的4次方 (1 | 2) << 4 = 48
6一、byte b = (byte)129 b=?
byte取值 -127 ~ 128
java中正數用源碼錶示,負數用補碼錶示,第一位爲符號位
129
補碼 1000 0001 符號位爲1 因此爲負數 補碼減1 獲得反碼
反碼:1000 0000 反碼按位取反獲得源碼
源碼:1111 1111
因此 b=-127
6二、abstract方法不可以和static連用,爲何?
- static修飾的爲靜態方法,而abstract修飾的爲抽象方法,無方法體的方法,沒法調用
- abstract方法須要子類重寫,而靜態方法不能被重寫,兩者相互矛盾
6三、Integer a= 1 , Integer b = 1 , a==b? Integer c = 1000 ,Integer d = 1000,c==d?
- Integer a = 1 , Integer b = 1 , a==b true
- Integer c = 1000 , Integer d = 1000 , c==d false
這裏設計到自動裝箱和自動拆箱的知識
- 在自動裝箱時對於值從 -128 ~ 127之間的值,在內存中會被重用,Integer b = 1 沒有從新生成對象 因此 a == b true
- Integer d = 1000 裝箱後的Integer不被重用,每次裝箱都會新建一個Integer對象 因此 c == d false
6四、8大基本數據類型
- 四整型:byte short int long
- 二浮點型:float double
- 一布爾型:boolean
- 一字符型:char
6五、什麼是面向對象?
- 對象:一切皆對象,人們所研究的全部事物都是對象。
- 面向對象:不須要知道其中的具體操做。
- 例子:去飯店吃飯的時候,咱們面向服務員點菜,不須要知道菜是怎麼作的,只須要吃就能夠啦,而當買單的時候,服務員面向咱們收錢,不須要知道咱們如何吃的,只須要知道多少錢就能夠啦。
6六、Ajax的好處和壞處?
- 好處:
- 頁面無刷新,用戶體驗好
- 響應速度快,異步方式
- 進一步促使頁面和數據分離
- 壞處:
- ajax局部刷新,頁面後退無用
- 編寫時須要考慮到瀏覽器的兼容性,使用了大量的js和ajax引擎
- 對流媒體和移動設備的支持不太好
- 對搜索引擎的支持比較弱
6七、說說你常見的異常?
- 空指針異常 NullPointException
- 類型轉換異常 ClassCastException
- 數組下標越界異常 IndexOutOfBoundsException
- 文件未找到異常 FileNotFoundException
- 操做數據庫異常 SqlException
- 字符串轉換成數字異常 NumberFormatException
- 類不存在異常 ClassNotFoundException
6八、HashMap 默認的容量?
- 默認容量:16
- 負載因子:0.75
容量大於 16 * 0.75 自動擴容
6九、服務器性能優化?
- 使用內存數據庫
- 使用RDD spark的核心
- 增長緩存
- SSD代替機械硬盤
- 優化數據庫
- 選選擇合適的IO程序
- 多核處理使用
- 分佈式開發
70、java的有點和缺點?
- 優勢:
- 平臺無關性
- 無指針
- 垃圾回收機制
- 類庫
- 安全性和健全性好
- 缺點:
- 須要運行環境
- 不適合開發桌面應用程序
- 增長了產品的複雜性
7二、java和c++的區別?
- java:
- 無指針,單繼承,實現多接口
- 徹底面向對象,垃圾回收機制
- 容許預編譯,不支持其功能,顯示轉換
- c++:
- 有指針,多繼承。
- 面向對象,由程序釋放內存
- 須要預編譯,隱含轉換
7三、敏捷開發?
- 概念:敏捷開發以用戶的需求進化爲核心,採用迭代、按部就班的方法進行軟件開發。
- 優勢:
- 精確,質量,速度
- 豐富的投資回報率
- 高效的自我管理團隊
- 敏捷開發宗旨
- 個體與交互比流程與工具更具價值
- 可用的軟件比文檔更有價值
- 與客戶的協做比合做談判更有價值