聲明:本文問題來自但不限於Xoper.ducky大牛的面試總結,網址:http://www.nowcoder.com/discuss/3043,歡迎各位進行補充 java
1. 九種基本數據類型的大小,以及他們的封裝類。 面試
int Integer 算法
short Short 設計模式
long Long 數組
byte Byte 瀏覽器
float Float 緩存
double Double 安全
char Char 服務器
boolean Boolean 網絡
String(不算基本數據類型) Stringbuffer、Stringbuilder(非線程安全)
2. Switch可否用string作參數?
Java 1.7以前只能支持byte、short、int、char或其封裝類及enum類型,1.7及以上才支持string,boolean類型也是不支持的,會報如下錯誤:Cannot switch on a value of type boolean. Only convertible int values or enum constants are permitted
3. equals與==的區別。
(1) 對字符串變量來講:==比較兩個對象的地址是否一致,equals比較兩個對象的值.
String s3 = 「abc」, s4 = 「abc」
String s1 = new String(「abc」);
String s2 = new String(「abc」);
s1 == s2 //false 由於兩個對象存放的地址不一致
s1.equals(s2) // true 由於兩個對象的值都是」abc」
(2) 對於基本數據類型,只能用==判斷,不能用equals(),而對於基本數據類型的封裝類或者其餘自定義類(沒有重寫equals方法)來講,==比較的是地址,equals()比較的是內容
(3) s3 == s4 // true,由於s3和s4指向的都是同一塊內存地址
(4) StringBuffer s5 = new StringBuffer(「a」) ;
StringBuffer s6 = new StringBuffer(「a」) ;
s5.equals(s6) // false ,由於StringBuffer沒有重寫equals()方法,比較的仍是內存地址,顯然兩個對象內存地址是不同的。
4. Object有哪些公用方法?
wait()、notify()、notifyAll()、equals()---用來比較兩個對象地址是否一致
hashCode() – 標誌對象的惟一值
toString() – 對象的字符串表達形式
5. Java的四種引用,強弱軟虛,用到的場景。
強引用(StrongReference)--- 強引用是使用最廣泛的引用。若是一個對象具備強引用,那垃圾回收器毫不會回收它。當內存空間不足,Java虛擬機寧願拋出OutOfMemoryError錯誤,使程序異常終止,也不會靠隨意回收具備強引用的對象來解決內存不足的問題。
軟引用(SoftReference)---若是一個對象只具備軟引用,則內存空間足夠,垃圾回收器就不會回收它;若是內存空間不足了,就會回收這些對象的內存。只要垃圾回收器沒有回收它,該對象就能夠被程序使用。軟引用可用來實現內存敏感的高速緩存。
軟引用能夠和一個引用隊列(ReferenceQueue)聯合使用,若是軟引用所引用的對象被垃圾回收器回收,Java虛擬機就會把這個軟引用加入到與之關聯的引用隊列中。SoftReference是強引用,它保存的對象實例,除非JVM即將OutOfMemory,不然不會被GC回收。這個特性使得它特別適合設計對象Cache。對於Cache,咱們但願被緩存的對象最好始終常駐內存,可是若是JVM內存吃緊,爲了避免發生OutOfMemoryError致使系統崩潰,必要的時候也容許JVM回收Cache的內存,待後續合適的時機再把數據從新Load到Cache中
弱引用(WeakReference)---WeakReference是弱引用,其中保存的對象實例能夠被GC回收掉。這個類一般用於在某處保存對象引用,而又不干擾該對象被GC回收,一般用於Debug、內存監視工具等程序中。由於這類程序通常要求即要觀察到對象,又不能影響該對象正常的GC過程。
虛引用(PhantomReference)---就是形同虛設,與其餘幾種引用都不一樣,虛引用並不會決定對象的生命週期。若是一個對象僅持有虛引用,那麼它就和沒有任何引用同樣,在任什麼時候候均可能被垃圾回收器回收。
虛引用主要用來跟蹤對象被垃圾回收器回收的活動。虛引用與軟引用和弱引用的一個區別在於:虛引用必須和引用隊列 (ReferenceQueue)聯合使用。當垃圾回收器準備回收一個對象時,若是發現它還有虛引用,就會在回收對象的內存以前,把這個虛引用加入到與之 關聯的引用隊列中。
6. HashCode的做用
對象區別於其餘對象的標識
7. ArrayList、LinkedList、Vector的區別
ArrayList相似於C中的數組,查找方便,插入複雜,LinedList相似於C中的鏈表,插入簡單,查找複雜度較高。而Vector相似於ArrayList,可是在Java 1.5之後就不推薦使用了。
8. String、StringBuffer與StringBuilder的區別。
StringBuffer是String的封裝類,都是線程安全的,若是字符串的內容常常改變,則最好用,StringBuffer,而StringBuilder也是可變字符串,可是非線程安全,所以正常狀況下會比StringBuffer快。
9. Map、Set、List、Queue、Stack的特色與用法。
map 根據key 找value
set 元素不能重複
list 相似數組
Queue 隊列,先進先出
Stack 棧,後進先出
10. HashMap和HashTable的區別。
1. 當須要同步時,用Hashtable,反之用HashMap。可是,由於在須要時,HashMap能夠被同步,HashMap的功能比Hashtable的功能更多,並且它不是基於一個陳舊的類的,因此有人認爲,在各類狀況下,HashMap都優先於Hashtable。
2. 只有HashMap可讓你將空值做爲一個表的條目的key或value。HashMap中只有一條記錄能夠是一個空的key,但任意數量的條目能夠是空的value
11. HashMap和ConcurrentHashMap的區別,HashMap的底層源碼。
有併發訪問的時候用ConcurrentHashMap,效率比用鎖的HashMap好。
HashMap底層源碼用(Entry)數組+鏈表的形式實現,詳情請看這裏:
12. TreeMap、HashMap、LindedHashMap的區別。
LinkedHashMap也是一個HashMap,可是內部維持了一個雙向鏈表,能夠保持順序
TreeMap 能夠用於排序(根據鍵排序,默認是升序),HashSet是經過HashMap實現的,TreeSet是經過TreeMap實現的,只不過Set用的只是Map的key,Map的key和Set都有一個共同的特性就是集合的惟一性.TreeMap更是多了一個排序的功能.
13. Collection包結構,與Collections的區別。
Collection ---List ---ArrayList, LinkedList, Vector
Set ---HashSet, TreeSet
Map—HashMap,TreeMap,HashTable
Collection是集合類的上級接口,子接口主要有Set 和List、Map。
Collections是針對集合類的一個幫助類,提供了操做集合的工具方法:一系列靜態方法實現對各類集合的搜索、排序、線程安全化等操做。
14. try catch finally,try裏有return,finally還執行麼?
必須執行.若是try裏有return,finally也有return,會執行finally中的return.
15. Excption與Error包結構。OOM你遇到過哪些狀況,SOF你遇到過哪些狀況。
16. Java面向對象的三個特徵與含義。
繼承
封裝
多態.
17. Override和Overload的含義去區別。
override --- 重寫父類的函數
overload – 是函數重載,根據傳入的參數(個數、類型)不一樣來區別
18. Interface與abstract類的區別。
interface 是接口,能夠有常量,全部方法都默認是public,並且不能實現
abstract類 比其餘普通類多了個抽象方法,並且是必須有抽象方法
19. Static class 與non static class的區別。
內部靜態類不須要有指向外部類的引用。但非靜態內部類須要持有對外部類的引用。非靜態內部類可以訪問外部類的靜態和非靜態成員。靜態類不能訪問外部類的非靜態成員。他只能訪問外部類的靜態成員
20. java多態的實現原理。
java中 實例方法纔有多態的,在運行時動態綁定,類的成員變量是在編譯時就決定了。
class A { int a =1; int method() { return a ; } } class B extends A { int a = 2 ; int Method() { return a ; } } B bb = new B() ; System.out.println(bb.a) //結果是2 System.out.println(bb.method() ) //結果是2 A aa =(B) new B() ; System.out.println(aa.a ) // 結果是1 System.out.println(aa.method() ) //結果仍是是2,多態
21. 實現多線程的兩種方法:Thread與Runable。
1. 繼承Thread類,重寫run方法
2. 實現Runnable接口
3. 想要有返回值,用FutureTask,和Callable接口
例子:
public class CallableTest { // 建立一個計算任務,返回累加結果,構造器的參數是上界 static class SumCaller implements Callable<Long> { private Integer count; public SumCaller(Integer count) { this.count = count; } public Long call() throws Exception { long sum = 0; for (int i = 0; i < count; i++) { sum += i; } return sum; } } private static Integer COUNT = 1000000000; public static void main(String[] args) throws InterruptedException, ExecutionException { SumCaller caller = new SumCaller(COUNT); FutureTask<Long> task = new FutureTask<Long>(caller); Thread thread = new Thread(task); thread.start(); long sum = task.get(); System.out.println("sum from 1 to " + COUNT + " result = " + sum); } }
22. 線程同步的方法:synchronized、lock、reentrantLock等。
lock.lock(),加鎖,lock.unlock()釋放鎖,
reentrantLock,可重入鎖
synchronized 只有單一條件,不能設置加鎖時間等,也不能設置多個鎖
23. 鎖的等級:方法鎖、對象鎖、類鎖。
對象鎖是用於對象實例方法,或者一個對象實例上的,類鎖是用於類的靜態方法或者一個類的class對象上的,咱們知道,類的對象實例能夠有不少個,可是每一個類只有一個class對象,因此不一樣對象實例的對象鎖是互不干擾的,可是每一個類只有一個類鎖。
24. 寫出生產者消費者模式。
25. ThreadLocal的設計理念與做用。
Java中的ThreadLocal類容許咱們建立只能被同一個線程讀寫的變量。所以,若是一段代碼含有一個ThreadLocal變量的引用,即便兩個線程同時執行這段代碼,它們也沒法訪問到對方的ThreadLocal變量。雖然全部的線程都能訪問到這個ThreadLocal實例,可是每一個線程卻只能訪問到本身經過調用ThreadLocal的set()方法設置的值。即便是兩個不一樣的線程在同一個ThreadLocal對象上設置了不一樣的值,他們仍然沒法訪問到對方的值。內部實現用同步Map。
private Map values = Collections.synchronizedMap(new HashMap());
public class ThreadLocalExample { public static class MyRunnable implements Runnable { private ThreadLocal threadLocal = new ThreadLocal(); @Override public void run() { threadLocal.set((int) (Math.random() * 100D)); try { Thread.sleep(2000); } catch (InterruptedException e) { } System.out.println(threadLocal.get()); } } public static void main(String[] args) { MyRunnable sharedRunnableInstance = new MyRunnable(); Thread thread1 = new Thread(sharedRunnableInstance); Thread thread2 = new Thread(sharedRunnableInstance); thread1.start(); thread2.start(); } }
26. ThreadPool用法與優點。
在多線程環境中使用Thread Pool,能夠提升運行效率,不用每次新建一個線程,循環利用線程。
public class TestFixedThreadPool { public static void main(String[] args) { //建立一個可重用固定線程數的線程池 ExecutorService pool = Executors.newFixedThreadPool(2); //建立實現了Runnable接口對象,Thread對象固然也實現了Runnable接口 Thread t1 = new MyThread(); Thread t2 = new MyThread(); Thread t3 = new MyThread(); Thread t4 = new MyThread(); Thread t5 = new MyThread(); //將線程放入池中進行執行 pool.execute(t1); pool.execute(t2); pool.execute(t3); pool.execute(t4); pool.execute(t5); //關閉線程池 pool.shutdown(); } }
27. Concurrent包裏的其餘東西:ArrayBlockingQueue、CountDownLatch等等。
28. wait()和sleep()的區別。
1. sleep()不釋放同步鎖,wait()釋放同步鎖.
2. sleep是Thread類的方法,wait是Object的方法。wait,notify和notifyAll只能在同步控制方法或者同步控制塊裏面使用,而sleep能夠在任何地方使用
29. foreach與正常for循環效率對比。
使用for,更高效率。 使用foreach,更安全。
若是在使用foreach遍歷對象的過程當中,其餘線程修改了List的內容,例如添加或者刪除,就會出現不可知的錯誤,而使用foreach則可以正確拋出錯誤信息。
30. Java IO與NIO。
字符流:reader
writer
字節流:inputStream
outputStream
NIO : Buffer和channel
31. 反射的做用與原理。
指的是咱們能夠於運行時加載、探知、使用編譯期間徹底未知的classes。換句話說,Java程
序能夠加載一個運行時才得知名稱的class,獲悉其完整構造(但不包括methods定義),並生成其對象實體、或對其fields設值、或喚起其methods.用途:Java反射機制主要提供瞭如下功能: 在運行時判斷任意一個對象所屬的類;在運行時構造任意一個類的對象;在運行時判斷任意一個類所具備的成員變量和方法;在運行時調用任意一個對象的方法;生成動態代理。
32. 泛型經常使用特色,List<String>可否轉爲List<Object>。
若是List<Object>做爲函數參數,List<String>做爲要傳進來的參數,答案是不能。正確理解泛型概念的首要前提是理解類型擦除(type erasure)。 Java中的泛型基本上都是在編譯器這個層次來實現的。在生成的Java字節代碼中是不包含泛型中的類型信息的。使用泛型的時候加上的類型參數,會被編譯器在編譯的時候去掉。這個過程就稱爲類型擦除。如在代碼中定義的List<Object>和List<String>等類型,在編譯以後都會變成List。JVM看到的只是List,而由泛型附加的類型信息對JVM來講是不可見的。
public void inspect(List<Object> list) { for (Object obj : list) { System.out.println(obj); } list.add(1); //這個操做在當前方法的上下文是合法的。 } public void test() { List<String> strs = new ArrayList<String>(); inspect(strs); //編譯錯誤 }
public void wildcard(List<?> list) { list.add(1);//編譯錯誤 }如上所示,試圖對一個帶通配符的泛型類進行操做的時候,老是會出現編譯錯誤。其緣由在於通配符所表示的類型是未知的。
由於對於List<?>中的元素只能用Object來引用,在有些狀況下不是很方便。在這些狀況下,可使用上下界來限制未知類型的範圍。 如List<? extends Number>說明List中可能包含的元素類型是Number及其子類。而List<? super Number>則說明List中包含的是Number及其父類。當引入了上界以後,在使用類型的時候就可使用上界類中定義的方法。好比訪問 List<? extends Number>的時候,就可使用Number類的intValue等方法。
33. 解析XML的幾種方式的原理與特色:DOM、SAX、PULL。
DOM解析:將整個XML加載到內存中,比較方便插入和查找相鄰節點,可是耗內存,手機用得較少
SAX解析:simple API for XML,SAX解析XML文件採用的是事件驅動,進而調用一些回調方法(CallBack),好比
startDocument()endDocument()startElement(String namespaceURI, String localName, String qName, Attributes atts)endElement(String uri, String localName, String name)characters(char[] ch, int start, int length)SAX解析適用於移動設備PULL解析:和SAX相似,Android自帶jar包,根據EventType來進行,好比XmlPullParser.START_DOCUMENTXmlPullParser.END_DOCUMENTXmlPullParser.START_TAGXmlPullParser.END_TAGXmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); parser.setInput(inputStream, "utf-8"); int eventType = parser.getEventType();eventType = parser.next();
34. Java與C++對比。
35. Java1.7與1.8新特性。
1.7
1. map集合支持併發請求,且能夠寫成 Map map = {name:"xxx",age:18};
2.switch中可使用字串了
3. 運用List<String> tempList = new ArrayList<>(); 即泛型實例化類型自動推斷
4. 兩個char間的equals bool Character.equalsIgnoreCase(char ch1, char ch2)
1.8
1. lambda 表達式:
原來代碼:
List<String> names = Arrays.asList("peter", "anna", "mike", "xenia"); Collections.sort(names, new Comparator<String>() { @Override public int compare(String a, String b) { return b.compareTo(a); } }); 加入lambda表達式: Collections.sort(names, (String a, String b) -> { return b.compareTo(a); });加入lambda表達式:
Collections.sort(names, (String a, String b) -> { return b.compareTo(a); });更簡潔:
Collections.sort(names, (String a, String b) -> b.compareTo(a));更更簡潔:
Collections.sort(names, (a, b) -> b.compareTo(a));
2 函數式接口:
更多請看這裏:http://www.jb51.net/article/48304.htm
36. 設計模式:單例、工廠、適配器、責任鏈、觀察者等等。
37. JNI的使用。
1. 內存模型以及分區,須要詳細到每一個區放什麼。
2. 堆裏面的分區:Eden,survival from to,老年代,各自的特色。
3. 對象建立方法,對象的內存分配,對象的訪問定位。
4. GC的兩種斷定方法:引用計數與引用鏈。
5. GC的三種收集方法:標記清除、標記整理、複製算法的原理與特色,分別用在什麼地方,若是讓你優化收集方法,有什麼思路?
6. GC收集器有哪些?CMS收集器與G1收集器的特色。
7. Minor GC與Full GC分別在何時發生?
8. 幾種經常使用的內存調試工具:jmap、jstack、jconsole。
9. 類加載的五個過程:加載、驗證、準備、解析、初始化。
10. 雙親委派模型:Bootstrap ClassLoader、Extension ClassLoader、ApplicationClassLoader。
11. 分派:靜態分派與動態分派。
1. 進程和線程的區別。
線程做爲調度和分配的基本單位,進程做爲擁有資源的基本單位
2. 死鎖的必要條件,怎麼處理死鎖。
1. 循環等待
2. 非搶佔
3. 互斥使用
4.佔有並等待
處理死鎖:死鎖避免----銀行家算法-包含資源請求算法和安全性算法
死鎖檢測算法
3. Window內存管理方式:段存儲,頁存儲,段頁存儲。
4. 進程的幾種狀態。
運行、就緒、阻塞
5. IPC幾種通訊方式。
共享內存、消息傳遞、管道、信號量
6. 什麼是虛擬內存。
操做系統的主要組成部分:進程和線程的管理,存儲管理,設備管理,文件管理。虛擬內存是一些系統頁文件,存放在磁盤上,每一個系統頁文件大小爲4K,物 理內存也被分頁,每一個頁大小也爲4K,這樣虛擬頁文件和物理內存頁就能夠對應,實際上虛擬內存就是用於物理內存的臨時存放的磁盤空間。頁文件就是內存頁, 物理內存中每頁叫物理頁,磁盤上的頁文件叫虛擬頁,物理頁+虛擬頁就是系統全部使用的頁文件的總和。
7. 虛擬地址、邏輯地址、線性地址、物理地址的區別。
1. OSI與TCP/IP各層的結構與功能,都有哪些協議。
OSI分層 (7層):物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。
TCP/IP分層(4層):網絡接口層、 網際層、運輸層、 應用層。
五層協議 (5層):物理層、數據鏈路層、網絡層、運輸層、 應用層。
每一層的協議以下:
物理層:RJ4五、CLOCK、IEEE802.3 (中繼器,集線器,網關)
數據鏈路:PPP、FR、HDLC、VLAN、MAC (網橋,交換機)
網絡層:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
傳輸層:TCP、UDP、SPX
會話層:NFS、SQL、NETBIOS、RPC
表示層:JPEG、MPEG、ASII
應用層:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
每一層的做用以下:
物理層:經過媒介傳輸比特,肯定機械及電氣規範(比特Bit)
數據鏈路層:將比特組裝成幀和點到點的傳遞(幀Frame)
網絡層:負責數據包從源到宿的傳遞和網際互連(包PackeT)
傳輸層:提供端到端的可靠報文傳遞和錯誤恢復(段Segment)
會話層:創建、管理和終止會話(會話協議數據單元SPDU)
表示層:對數據進行翻譯、加密和壓縮(表示協議數據單元PPDU)
應用層:容許訪問OSI環境的手段(應用協議數據單元APDU)
2. TCP與UDP的區別。
TCP提供面向鏈接的、可靠的數據流傳輸,而UDP提供的是非面向鏈接的、不可靠的數據流傳輸。
TCP傳輸單位稱爲TCP報文段,UDP傳輸單位稱爲用戶數據報。
TCP注重數據安全性,UDP數據傳輸快,由於不須要鏈接等待,少了許多操做,可是其安全性卻通常。
3. TCP報文結構。
4. TCP的三次握手與四次揮手過程,各個狀態名稱與含義,TIMEWAIT的做用。
5. TCP擁塞控制。
6. TCP滑動窗口與回退N針協議。
7. Http的報文結構。
8. Http的狀態碼含義。
狀態碼
狀態描述
簡要說明200
OK
客戶端請求成功201
Created
請求已經被實現,並且有一個新的資源已經依據請求的須要而建立,且其URI已經隨Location頭信息返回。301
Moved Permanently
被請求的資源已永久移動到新位置,而且未來任何對此資源的引用都應該使用本響應返回的若干個URI之一302
Found
在響應報文中使用首部「Location: URL」指定臨時資源位置304
Not Modified
條件式請求中使用403
Forbidden
請求被服務器拒絕404
Not Found
服務器沒法找到請求的URL405
Method Not Allowed
不容許使用此方法請求相應的URL500
Internal Server Error
服務器內部錯誤502
Bad Gateway
代理服務器從上游收到了一條僞響應503
Service Unavailable
服務器此時沒法提供服務,但未來可能可用505
HTTP Version Not Supported
服務器不支持,或者拒絕支持在請求中使用的HTTP版本。這暗示着服務器不能或不肯使用與客戶端相同的版本。響應中應當包含一個描述了爲什麼版本不被支持以及服務器支持哪些協議的實體。
9. Http request的幾種類型。
OPTIONS:返回服務器針對特定資源所支持的HTTP請求方法。也能夠利用向Web服務器發送'*'的請求來測試服務器的功能性。
HEAD:向服務器索要與GET請求相一致的響應,只不過響應體將不會被返回。這一方法能夠在沒必要傳輸整個響應內容的狀況下,就能夠獲取包含在響應消息頭中的元信息。
GET:向特定的資源發出請求。
POST:向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會致使新的資源的建立和/或已有資源的修改。
PUT:向指定資源位置上傳其最新內容。
DELETE:請求服務器刪除Request-URI所標識的資源。
TRACE:回顯服務器收到的請求,主要用於測試或診斷。
CONNECT:HTTP/1.1協議中預留給可以將鏈接改成管道方式的代理服務器。
10. Http1.1和Http1.0的區別
1. HTTP 1.0規定瀏覽器與服務器只保持短暫的鏈接,而HTTP 1.1 支持長鏈接
2. HTTP 1.1支持持久鏈接,在一個TCP鏈接上能夠傳送多個HTTP請求和響應,減小了創建和關閉鏈接的消耗和延遲。HTTP1.1還容許客戶端不用等待上一次請求結果返回,就能夠發出下一次請求,但服務器端必須按照接收到客戶端請求的前後順序依次回送響應結果,以保證客戶端可以區分出每次請求的響應內容,這樣也顯著地減小了整個下載過程所須要的時間。
3. HTTP 1.1還提供了與身份認證、狀態管理和Cache緩存等機制相關的請求頭和響應頭。
4. HTTP 1.1中增長Host請求頭字段後,WEB瀏覽器可使用主機頭名來明確表示要訪問服務器上的哪一個WEB站點,這才實現了在一臺WEB服務器上能夠在同一個IP地址和端口號上使用不一樣的主機名來建立多個虛擬WEB站點。
11. Http怎麼處理長鏈接。
http長鏈接即持久鏈接是http1.1版本的一個特性,即一個http鏈接創建完成一個請求-迴應後,能夠不須要馬上關閉,能夠重複使用。http的長鏈接是能夠發送多個請求而不用等待每一個響應的。
12. Cookie與Session的做用於原理。
13. 電腦上訪問一個網頁,整個過程是怎麼樣的:DNS、HTTP、TCP、OSPF、IP、ARP。
14. Ping的整個過程。ICMP報文是什麼。
15. C/S模式下使用socket通訊,幾個關鍵函數。
Server : listen(port)
accept()
Client : connect(ip_address, port)
16. IP地址分類。
A : 0開頭 (1.0.0.0 ~ 126.255.255.255) 政府
B:10開頭 (128.0.0.0 ~ 191.255.255.255) 企業
C:110開頭 (192.0.0.0 ~ 233.255.255.255) 我的
D:1110開頭(224.0.0.1~239.255.255.254) 組播
E:11110開頭(240.0.0.1~255.255.255.254) 實驗
全1 : 廣播地址
全0 : 網絡地址
17. 路由器與交換機區別。
路由器是3層設備,工做在網絡層,交換機工做與數據鏈路層,是第2層設備。交換機內部的CPU會在每一個端口成功鏈接時,經過ARP協議學習它的MAC地址,保存成一張 ARP表。在從此的通信中,發往該MAC地址的數據包將僅送往其對應的端口,而不是全部的端口。所以,交換機可用於劃分數據鏈路層廣播,即衝突域;但它不 能劃分網絡層廣播,即廣播域。路由器的一個做用是連通不一樣的網絡,另外一個做用是選擇信息傳送的線路。
1. Activity與Fragment的生命週期。
2. Acitivty的四中啓動模式與特色。
3. Activity緩存方法。
4. Service的生命週期,兩種啓動方法,有什麼區別。
5. 怎麼保證service不被殺死。
6. 廣播的兩種註冊方法,有什麼區別。
7. Intent的使用方法,能夠傳遞哪些數據類型。
8. ContentProvider使用方法。
9. Thread、AsycTask、IntentService的使用場景與特色。
10. FrameLayout , LinearLayout AbsoluteLayout 、 RelativeLayout 、 TableLayout各自特色及繪製效率對比。
11. Android的數據存儲形式。
12. Sqlite的基本操做。
13. Android中的MVC模式。
14. Merge、ViewStub的做用。
15. Json有什麼優劣勢。
16. 動畫有哪兩類,各有什麼特色?
17. Handler、Loop消息隊列模型,各部分的做用。
18. 怎樣退出終止App。
19. Asset目錄與res目錄的區別。
20. Android怎麼加速啓動Activity。
21. Android內存優化方法:ListView優化,及時關閉資源,圖片緩存等等。
22. Android中弱引用與軟引用的應用場景。
23. Bitmap的四中屬性,與每種屬性隊形的大小。
24. View與View Group分類。自定義View過程:onMeasure()、onLayout()、onDraw()。
25. Touch事件分發機制。
26. Android長鏈接,怎麼處理心跳機制。
27. Zygote的啓動過程。
28. Android IPC:Binder原理。
29. 你用過什麼框架,是否看過源碼,是否知道底層原理。
30. Android5.0、6.0新特性。
1. 鏈表與數組。
2. 隊列和棧,出棧與入棧。
3. 鏈表的刪除、插入、反向。
4. 字符串操做。
5. Hash表的hash函數,衝突解決方法有哪些。
6. 各類排序:冒泡、選擇、插入、希爾、歸併、快排、堆排、桶排、基數的原理、平均時間複雜度、最壞時間複雜度、空間複雜度、是否穩定。
7. 快排的partition函數與歸併的Merge函數。
8. 對冒泡與快排的改進。
9. 二分查找,與變種二分查找。
10. 二叉樹、B+樹、AVL樹、紅黑樹、哈夫曼樹。
11. 二叉樹的前中後續遍歷:遞歸與非遞歸寫法,層序遍歷算法。
12. 圖的BFS與DFS算法,最小生成樹prim算法與最短路徑Dijkstra算法。
13. KMP算法。
14. 排列組合問題。
15. 動態規劃、貪心算法、分治算法。(通常不會問到)
16. 大數據處理:相似10億條數據找出最大的1000個數.........等等
1. XXX(某個比較重要的點)是怎麼實現的?
2. 你在項目中遇到的最大的困難是什麼,怎麼解決的?
3. 項目某個部分考慮的不夠全面,若是XXXX,你怎麼優化?
4. XXX(一個新功能)須要實現,你有什麼思路?
1. 貴公司一貫以XXX著稱,能不能說明一下公司這方面的特色?
2. 貴公司XXX業務發展很好,這是公司發展的重點麼?
3. 對技術和業務怎麼看?
4. 貴公司通常的團隊是多大,幾我的負責一個產品或者業務?
5. 貴公司的開發中是否會使用到一些最新技術?
6. 對新人有沒有什麼培訓,會不會安排導師?
7. 對Full Stack怎麼看?
8. 你以爲我有哪些須要提升的地方?