Java技術(shù)點(diǎn)簡(jiǎn)要

java 基礎(chǔ)

八種基本數(shù)據(jù)類型的大小,以及他們的封裝類

第一類:整型 byte short int long
第二類:浮點(diǎn)型 float double
第三類:邏輯型 boolean(它只有兩個(gè)值可取true false)
第四類:字符型 char
在棧中可以直接分配內(nèi)存的數(shù)據(jù)是基本數(shù)據(jù)類型。

Byte, Short, Integer, Long
Float, Double
Boolean
Character

字節(jié)大?。?/p>

boolean 布爾型 1/8
byte 字節(jié)類型 1
char 字符型 2 一個(gè)字符能存儲(chǔ)一個(gè)中文漢字
short 短整型 2
int 整數(shù)類型 4
float 浮點(diǎn)類型(單精度) 4
long 長(zhǎng)整形 8
double 雙精度類型(雙精度) 8

java中默認(rèn)的整數(shù)類型是int類型,如果要定義為float型,則要在數(shù)值后加上l或L;

默認(rèn)的浮點(diǎn)型也是雙精度浮點(diǎn),如果要定義為float型,則要在數(shù)值后加上f或F。

一個(gè)字節(jié)等于8位,一個(gè)字節(jié)等于256個(gè)數(shù),就是-128到127一共256。
kB就是kBytes Bytes就是“字節(jié)”的意思!
K就是千的意思,因?yàn)橛?jì)算機(jī)是通過二進(jìn)制來計(jì)算,10個(gè)1正好是1024
1Bytes(字節(jié))= 8bit(比特)

一個(gè)英文字母或一個(gè)阿拉伯?dāng)?shù)字就是一個(gè)字符,占用一個(gè)字節(jié)
一個(gè)漢字就是兩個(gè)字符,占用兩個(gè)字節(jié)。

一般講大小是用Bytes,大寫的“B”,講網(wǎng)絡(luò)速率是用bit,注意是小寫的“b”。
例:一個(gè)文件有8MBytes
例:我下載文件的速率是256KB/s,即2Mbit,這通常就是我們寬帶上網(wǎng)的速率。

基本數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換
byte->short,char -> int -> long
float -> double
int -> float
long -> double
記?。盒】赊D(zhuǎn)大,大轉(zhuǎn)小會(huì)失去精度?。。?/p>

引用數(shù)據(jù)類型

是數(shù)據(jù)的引用在棧中,但是他的對(duì)象在堆中。
String, Object, Class, Enum

Switch能否用string做參數(shù)

jdk1.7后,整形,枚舉類型,boolean,字符串都可以。

為什么jdk1.7后又可以用string類型作為switch參數(shù)呢?
其實(shí),jdk1.7并沒有新的指令來處理switch string,而是通過調(diào)用switch中string.hashCode,將string轉(zhuǎn)換為int從而進(jìn)行判斷。

具體可以參考:http://freish.iteye.com/blog/1152921

equals與==的區(qū)別

對(duì)象類型不同
1、equals():是超類Object中的方法。
2、==:是操作符。

比較的對(duì)象不同
equals():用來檢測(cè)兩個(gè)對(duì)象是否相等,即兩個(gè)對(duì)象的內(nèi)容是否相等。
==:用于比較引用和比較基本數(shù)據(jù)類型時(shí)具有不同的功能。

運(yùn)行速度不同
equals():沒有==運(yùn)行速度快。
==:運(yùn)行速度比equals()快,因?yàn)?=只是比較引用。

對(duì)equals重新需要注意五點(diǎn):
1、自反性:對(duì)任意引用值X,x.equals(x)的返回值一定為true;
2、對(duì)稱性:對(duì)于任何引用值x,y,當(dāng)且僅當(dāng)y.equals(x)返回值為true時(shí),x.equals(y)的返回值一定為true;
3、傳遞性:如果x.equals(y)=true, y.equals(z)=true,則x.equals(z)=true ;
4、 一致性:如果參與比較的對(duì)象沒任何改變,則對(duì)象比較的結(jié)果也不應(yīng)該有任何改變;
5、非空性:任何非空的引用值X,x.equals(null)的返回值一定為false 。

== 比較的是變量(棧)內(nèi)存中存放的對(duì)象的(堆)內(nèi)存地址,用來判斷兩個(gè)對(duì)象的地址是否相同,即是否是指相同一個(gè)對(duì)象。比較的是真正意義上的指針操作。
1、比較的是操作符兩端的操作數(shù)是否是同一個(gè)對(duì)象。
2、兩邊的操作數(shù)必須是同一類型的(可以是父子類之間)才能編譯通過。
3、比較的是地址,如果是具體的阿拉伯?dāng)?shù)字的比較,值相等則為true,如:int a=10 與 long b=10L 與 double c=10.0都是相同的(為true),因?yàn)樗麄兌贾赶虻刂窞?0的堆。

String s="abce"是一種非常特殊的形式,和new 有本質(zhì)的區(qū)別。它是java中唯一不需要new 就可以產(chǎn)生對(duì)象的途徑。
以String s="abce";形式賦值在java中叫直接量,它是在常量池中而不是象new一樣放在壓縮堆中。這種形式的字符串,在JVM內(nèi)部發(fā)生字符串拘留,即當(dāng)聲明這樣的一個(gè)字符串后,JVM會(huì)在常量池中先查找有有沒有一個(gè)值為"abcd"的對(duì)象。
如果有,就會(huì)把它賦給當(dāng)前引用. 即原來那個(gè)引用和現(xiàn)在這個(gè)引用指點(diǎn)向了同一對(duì)象,如果沒有,則在常量池中新創(chuàng)建一個(gè)“abcd"”,下一次如果有Strings1="abcd";又會(huì)將s1指向“abcd”這個(gè)對(duì)象,即以這形式聲明的字符串,只要值相等,任何多個(gè)引用都指向同一對(duì)象。
而String s = new String("abcd”);和其它任何對(duì)象一樣.每調(diào)用一次就產(chǎn)生一個(gè)對(duì)象,只要它們調(diào)用。
也可以這么理解:String str="hello”;先在內(nèi)存中找是不是有“hello”這個(gè)對(duì)象,如果有,就讓str指向那個(gè)“hello”。如果內(nèi)存里沒有"hello",就創(chuàng)建一個(gè)新的對(duì)象保存"hello”.String str=new String(“hello")就是不管內(nèi)存里是不是已經(jīng)有"hello"這個(gè)對(duì)象,都新建一個(gè)對(duì)象保存"hello"。

自動(dòng)裝箱,常量池

參考:http://www.itdecent.cn/p/c4b76e2a905a

Object有哪些公用方法

參考:http://www.itdecent.cn/p/f140ac279fd1
getClass()
hasCode()
equals()
toString()
toHexString()
numberOfLeadingZeros()
clone()
finalize()
notify()
notifyAll()
wait()

Java的四種引用,強(qiáng)弱軟虛,用到的場(chǎng)景

  • 強(qiáng)引用-FinalReference
    強(qiáng)引用是平常中使用最多的引用,強(qiáng)引用在程序內(nèi)存不足(OOM)的時(shí)候也不會(huì)被回收,使用方式:
    String str = new String("str");
    這個(gè)str就是強(qiáng)引用。

  • 軟引用-SoftReference
    軟引用在程序內(nèi)存不足時(shí),會(huì)被回收,使用方式:
    // 注意:wrf這個(gè)引用也是強(qiáng)引用,它是指向SoftReference這個(gè)對(duì)象的,
    // 這里的軟引用指的是指向new String("str")的引用,也就是SoftReference類中T
    SoftReference<String> wrf = new SoftReference<String>(new String("str"));
    可用場(chǎng)景:
    創(chuàng)建緩存的時(shí)候,創(chuàng)建的對(duì)象放進(jìn)緩存中,當(dāng)內(nèi)存不足時(shí),JVM就會(huì)回收早先創(chuàng)建的對(duì)象。PS:圖片編輯器,視頻編輯器之類的軟件可以使用這種思路。
    軟引用使用例子傳送門:https://www.cnblogs.com/mjorcen/p/3968018.html

  • 弱引用-WeakReference
    弱引用就是只要JVM垃圾回收器發(fā)現(xiàn)了它,就會(huì)將之回收,使用方式:
    WeakReference<String> wrf = new WeakReference<String>(str);
    **可用場(chǎng)景: **
    Java源碼中的java.util.WeakHashMap中的key就是使用弱引用,我的理解就是,一旦我不需要某個(gè)引用,JVM會(huì)自動(dòng)幫我處理它,這樣我就不需要做其它操作。
    弱引用使用例子傳送門:http://www.importnew.com/21206.html

  • 虛引用-PhantomReference
    虛引用的回收機(jī)制跟弱引用差不多,但是它被回收之前,會(huì)被放入ReferenceQueue中。注意哦,其它引用是被JVM回收后才被傳入ReferenceQueue中的。由于這個(gè)機(jī)制,所以虛引用大多被用于引用銷毀前的處理工作。還有就是,虛引用創(chuàng)建的時(shí)候,必須帶有ReferenceQueue,使用例子:
    PhantomReference<String> prf = new PhantomReference<String>(new String("str"), new ReferenceQueue<>());
    可用場(chǎng)景:
    對(duì)象銷毀前的一些操作,比如說資源釋放等。Object.finalize()雖然也可以做這類動(dòng)作,但是這個(gè)方式即不安全又低效(傳送門:http://blog.csdn.net/aitangyong/article/details/39450341),so。

強(qiáng)調(diào)
上訴所說的幾類引用,都是指對(duì)象本身的引用,而不是指Reference<T>的四個(gè)子類的引用(SoftReference<T>等)。

Hashcode的作用

hashCode()方法返回當(dāng)前對(duì)象運(yùn)行時(shí)的hash碼,是用于支持散列表數(shù)據(jù)結(jié)構(gòu),因?yàn)樯⒘斜碓谶M(jìn)行數(shù)據(jù)存儲(chǔ)時(shí)依賴hash碼決定數(shù)據(jù)存儲(chǔ)的邏輯位置。

HashMap的hashcode的作用

因?yàn)樯⒘斜碓谶M(jìn)行數(shù)據(jù)存儲(chǔ)時(shí)依賴hash碼決定數(shù)據(jù)存儲(chǔ)的邏輯位置。

為什么重載hashCode方法?

對(duì)這兩個(gè)對(duì)象中的任一對(duì)象上調(diào)用 hashCode方法不要求一定生成不同的整數(shù)結(jié)果,為不相等的對(duì)象生成不同整數(shù)結(jié)果可以提高哈希表的性能。

ArrayList、LinkedList、Vector的區(qū)別

1. 從存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)分析

ArrayList:數(shù)組

Vector:數(shù)組

LinkedList:雙向鏈表

數(shù)組:可以根據(jù)下標(biāo)快速查找,所以大部分情況下,查詢快。但是如果要進(jìn)行增刪操作的時(shí)候,會(huì)需要移動(dòng)修改元素后面的所有元素,所以增刪的開銷比較大,數(shù)組的對(duì)增刪操作的執(zhí)行效率低。而采用數(shù)組作為數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)的ArrayList、Vector也存在這些特性,查詢速度快(可以根據(jù)下標(biāo)直接取,比迭代查找更快),增刪慢。

鏈表:增加和刪除元素方便,增加或刪除一個(gè)元素,僅需處理結(jié)點(diǎn)間的引用即可。就像人手拉手連成一排,要增加或刪除某個(gè)人只要附近的兩個(gè)人換一個(gè)人牽手,對(duì)已經(jīng)牽好手的人沒影響。無論在哪里換人耗費(fèi)的資源和時(shí)間都是一樣的。但是查詢不方便,需要一個(gè)個(gè)對(duì)比,無法根據(jù)下標(biāo)直接查找。而采用鏈表結(jié)構(gòu)存儲(chǔ)的LinkedList也有這些特性,增刪方便,查詢慢(指的是隨機(jī)查詢,不是順序查詢)。

2. 從繼承上分析

都實(shí)現(xiàn)了List接口,也就是說都實(shí)現(xiàn)了get(int location)、remove(int location)等“根據(jù)索引值來獲取、刪除節(jié)點(diǎn)的函數(shù)”。數(shù)組結(jié)構(gòu)根據(jù)下標(biāo)取值很容易,LinkedList雙向列表的實(shí)現(xiàn)也比較簡(jiǎn)單,通過計(jì)數(shù)索引值實(shí)現(xiàn),從鏈表長(zhǎng)度的1/2開始查找,下標(biāo)大了就從表頭開始找,小了就從表尾開始找。

3. 從并發(fā)安全上分析

Vector:線程安全

ArrayList:非線程安全

LinkedList: 非線程安全

4. 數(shù)據(jù)增長(zhǎng)分析

Vector:缺省的情況下,增長(zhǎng)為原數(shù)組長(zhǎng)度的一倍。說到缺省,說明他其實(shí)是可以自主設(shè)置初始化大小的。

ArrayList:自動(dòng)增長(zhǎng)原數(shù)組的50%。

參考:
http://www.itdecent.cn/p/bd6ee6eca25b

String、StringBuffer與StringBuilder的區(qū)別

如果要操作少量的數(shù)據(jù)用 = String
單線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) = StringBuilder
多線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) = StringBuffer

http://www.itdecent.cn/p/6c8c0e7391d5

Map、Set、List、Queue、Stack的特點(diǎn)與用法

http://www.itdecent.cn/p/8351173a24f3

HashMap和HashTable的區(qū)別

HashTable不能有null的key,HashTable是線程安全的
http://www.itdecent.cn/p/82dcdb99b014

JDK7與JDK8中HashMap的實(shí)現(xiàn)

在JDK1.6,JDK1.7中,HashMap采用位桶+鏈表實(shí)現(xiàn),即使用鏈表處理沖突,同一hash值的鏈表都存儲(chǔ)在一個(gè)鏈表里。但是當(dāng)位于一個(gè)桶中的元素較多,即hash值相等的元素較多時(shí),通過key值依次查找的效率較低。而JDK1.8中,HashMap采用位桶+鏈表+紅黑樹實(shí)現(xiàn),當(dāng)鏈表長(zhǎng)度超過閾值(8)時(shí),將鏈表轉(zhuǎn)換為紅黑樹,這樣大大減少了查找時(shí)間。
http://www.itdecent.cn/p/89ae11765524

HashMap和ConcurrentHashMap的區(qū)別,HashMap的底層源碼

http://www.itdecent.cn/p/82dcdb99b014

ConcurrentHashMap使用了分段鎖技術(shù)來提高了并發(fā)度,不在同一段的數(shù)據(jù)互相不影響,多個(gè)線程對(duì)多個(gè)不同的段的操作是不會(huì)相互影響的。每個(gè)段使用一把鎖。

ConcurrentHashMap能完全替代HashTable嗎

在多線程的環(huán)境中,相對(duì)于HashTable,ConcurrentHashMap會(huì)帶來很大的性能提升!

為什么HashMap是線程不安全的

HashMap會(huì)進(jìn)行resize操作,在resize操作的時(shí)候會(huì)造成線程不安全。下面將舉兩個(gè)可能出現(xiàn)線程不安全的地方。

  1. put的時(shí)候?qū)е碌亩嗑€程數(shù)據(jù)不一致
  2. get操作可能因?yàn)閞esize而引起死循環(huán)(cpu100%)
    http://www.itdecent.cn/p/e2f75c8cce01

如何線程安全的使用HashMap

這個(gè)無非就是以下三種方式:

  • Hashtable
  • ConcurrentHashMap
  • Synchronized Map

多并發(fā)情況下HashMap是否還會(huì)產(chǎn)生死循環(huán)

HashMap在并發(fā)執(zhí)行put操作時(shí)會(huì)引起死循環(huán),導(dǎo)致CPU利用率接近100%。因?yàn)槎嗑€程會(huì)導(dǎo)致HashMap的Node鏈表形成環(huán)形數(shù)據(jù)結(jié)構(gòu),一旦形成環(huán)形數(shù)據(jù)結(jié)構(gòu),Node的next節(jié)點(diǎn)永遠(yuǎn)不為空,就會(huì)在獲取Node時(shí)產(chǎn)生死循環(huán)。

TreeMap、HashMap、LinkedHashMap的區(qū)別

共同點(diǎn):
HashMap,LinkedHashMap,TreeMap都屬于Map;Map 主要用于存儲(chǔ)鍵(key)值(value)對(duì),根據(jù)鍵得到值,因此鍵不允許鍵重復(fù),但允許值重復(fù)。
不同點(diǎn):

  1. HashMap里面存入的鍵值對(duì)在取出的時(shí)候是隨機(jī)的,也是我們最常用的一個(gè)Map.它根據(jù)鍵的HashCode值存儲(chǔ)數(shù)據(jù),根據(jù)鍵可以直接獲取它的值,具有很快的訪問速度。在Map 中插入、刪除和定位元素,HashMap 是最好的選擇。
  2. TreeMap取出來的是排序后的鍵值對(duì)。但如果您要按自然順序或自定義順序遍歷鍵,那么TreeMap會(huì)更好。
  3. LinkedHashMap 是HashMap的一個(gè)子類,如果需要輸出的順序和輸入的相同,那么用LinkedHashMap可以實(shí)現(xiàn). (應(yīng)用場(chǎng)景:購(gòu)物車等需要順序的)

Collection包結(jié)構(gòu),與Collections的區(qū)別

Collection
1、Collection是集合類的頂級(jí)接口;
2、實(shí)現(xiàn)接口和類主要有Set、List、LinkedList、ArrayList、Vector、Stack、Set;

Collections
1、是針對(duì)集合類的一個(gè)幫助類,提供操作集合的工具方法;
2、一系列靜態(tài)方法實(shí)現(xiàn)對(duì)各種集合的搜索、排序、線程安全化等操作;
3、服務(wù)于Java的Collection的框架;

try?catch?finally,try里有return,finally還執(zhí)行么

即使try或catch中return了,finally中的代碼還是會(huì)執(zhí)行。
如果finally中有return,結(jié)果會(huì)根據(jù)finally中的結(jié)果返回,如果finally中沒有return,結(jié)果會(huì)按照catch的結(jié)果返回,但是不管怎么樣,都是會(huì)執(zhí)行finally的代碼。

Excption與Error包結(jié)構(gòu),OOM你遇到過哪些情況,SOF你遇到過哪些情況

http://www.itdecent.cn/p/c6f166a9051c

Java(OOP)面向?qū)ο蟮娜齻€(gè)特征與含義

1、封裝
隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外提供公共訪問方式,將變化隔離,便于使用,提高復(fù)用性和安全性。
2、繼承
提高代碼復(fù)用性;繼承是多態(tài)的前提。
3、多態(tài)
父類或接口定義的引用變量可以指向子類或具體實(shí)現(xiàn)類的實(shí)例對(duì)象。提高了程序的拓展性。

http://www.itdecent.cn/p/9b7800328127

Override和Overload的含義去區(qū)別

Overload是重載的意思,表示在同一個(gè)類中,允許存在一個(gè)以上的同名函數(shù),只要他們的參數(shù)個(gè)數(shù)或者參數(shù)類型不同即可。
Override是覆蓋的意思,也就是重寫,它與返回值類型無關(guān),只看參數(shù)列表。

兩者不同主要體現(xiàn)在:
1,目的
overload用于增加程序的可讀性(做法不同,但是做的同一事情)。 override用于提供其超級(jí)類已經(jīng)提供的方法的特定實(shí)現(xiàn)。

2,范圍
overload 在相同的類范圍內(nèi)內(nèi)執(zhí)行。 override發(fā)生在兩類具有繼承(繼承)的關(guān)系。

3, 參數(shù)
overload參數(shù)必須不同。 override參數(shù)必須相同。

4,多態(tài)性
overload 靜態(tài)多態(tài), 調(diào)用的函數(shù)在編譯時(shí)被選中。
override 是運(yùn)行時(shí)多態(tài)性的。

5,返回類型
overload中可以相同或不同。但你必須改變參數(shù)。
override必須是相同的或協(xié)變的。

重寫Override表示子類中的方法可以與父類中的某個(gè)方法的名稱和參數(shù)完全相同,通過子類創(chuàng)建的實(shí)例對(duì)象調(diào)用這個(gè)方法時(shí),將調(diào)用子類中定義的方法,這相當(dāng)于把父類中定義的那個(gè)完全相同的方法給覆蓋掉了,這也是面向?qū)ο缶幊痰亩鄳B(tài)的一種表現(xiàn)。子類覆蓋父類方法時(shí)只能拋出父類的異?;蛘弋惓5淖宇惢蛘吒割惍惓5淖蛹?yàn)樽宇惪梢越鉀Q父類的一些問題,但不能比父類有更多的問題。

重載overload的特點(diǎn)就是與返回值無關(guān),只看參數(shù)列表,所以重載的方法是可以改變返回值類型的。所以,如果兩個(gè)方法的參數(shù)列表完全一樣,是不能通過讓他們的返回值類型不同來實(shí)現(xiàn)重載的。

Interface與abstract類的區(qū)別

(01). abstract class 在Java中表示的是一種繼承關(guān)系,一個(gè)類只能使用一次繼承關(guān)系。但是,一個(gè)類卻可以實(shí)現(xiàn)多個(gè)interface。

(02). 在abstract class 中可以有自己的數(shù)據(jù)成員,也可以有非abstarct的方法,而在interface中,只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員(也就是必須是static final的,不過在 interface中一般不定義數(shù)據(jù)成員),所有的方法都是public abstract的。

(03). 抽象類中的變量默認(rèn)是 friendly 型,其值可以在子類中重新定義,也可以重新賦值。接口中定義的變量默認(rèn)是public static final 型,且必須給其賦初值,所以實(shí)現(xiàn)類中不能重新定義,也不能改變其值。

(04). abstract class和interface所反映出的設(shè)計(jì)理念不同。其實(shí)abstract class表示的是"is-a"關(guān)系,interface表示的是"like-a"關(guān)系。

(05). 實(shí)現(xiàn)抽象類和接口的類必須實(shí)現(xiàn)其中的所有方法。抽象類中可以有非抽象方法。接口中則不能有實(shí)現(xiàn)方法。

abstract class 和 interface 是 Java語言中的兩種定義抽象類的方式,它們之間有很大的相似性。但是對(duì)于它們的選擇卻又往往反映出對(duì)于問題領(lǐng)域中的概念本質(zhì)的理解、對(duì)于設(shè)計(jì)意圖的反映是否正確、合理,因?yàn)樗鼈儽憩F(xiàn)了概念間的不同的關(guān)系。

static class與non static class的區(qū)別

static class:
1、用static修飾的是內(nèi)部類,此時(shí)這個(gè)內(nèi)部類變?yōu)殪o態(tài)內(nèi)部類;對(duì)測(cè)試有用;
2、內(nèi)部靜態(tài)類不需要有指向外部類的引用;
3、靜態(tài)類只能訪問外部類的靜態(tài)成員,不能訪問外部類的非靜態(tài)成員;

non static class:
1、非靜態(tài)內(nèi)部類需要持有對(duì)外部類的引用;
2、非靜態(tài)內(nèi)部類能夠訪問外部類的靜態(tài)和非靜態(tài)成員;
3、一個(gè)非靜態(tài)內(nèi)部類不能脫離外部類實(shí)體被創(chuàng)建;
4、一個(gè)非靜態(tài)內(nèi)部類可以訪問外部類的數(shù)據(jù)和方法;

java多態(tài)的實(shí)現(xiàn)原理

多態(tài)機(jī)制包括靜態(tài)多態(tài)(編譯時(shí)多態(tài))和動(dòng)態(tài)多態(tài)(運(yùn)行時(shí)多態(tài)),靜態(tài)多態(tài)比如說重載,動(dòng)態(tài)多態(tài)是在編譯時(shí)不能確定調(diào)用哪個(gè)方法,得在運(yùn)行時(shí)確定。動(dòng)態(tài)多態(tài)的實(shí)現(xiàn)方法包括子類繼承父類和類實(shí)現(xiàn)接口。當(dāng)多個(gè)子類上轉(zhuǎn)型(不知道這么說對(duì)不)時(shí),對(duì)象調(diào)用的是相應(yīng)子類的方法,這種實(shí)現(xiàn)是與JVM有關(guān)的。

在JVM中,多態(tài)的實(shí)例方法調(diào)用實(shí)際上有兩種指令:
invokevirtual指令用于調(diào)用聲明為類的方法;
invokeinterface指令用于調(diào)用聲明為接口的方法。
當(dāng)使用invokeinterface指令調(diào)用方法時(shí),就不能采用固定偏移量的辦法,只能老老實(shí)實(shí)挨個(gè)找了。

http://www.itdecent.cn/p/c83d379897b9

foreach與正常for循環(huán)效率對(duì)比

對(duì)于數(shù)組來說,for和foreach循環(huán)效率差不多,但是對(duì)于鏈表來說,for循環(huán)效率明顯比foreach低。
http://www.itdecent.cn/p/14a1afbf8c51

Java?IO與NIO

image.png

http://www.itdecent.cn/p/079a0cecd967

java反射的作用與原理

反射是框架設(shè)計(jì)的靈魂

反射的實(shí)現(xiàn)原理:

  1. 反射類及反射方法的獲取,都是通過從列表中搜尋查找匹配的方法,所以查找性能會(huì)隨類的大小方法多少而變化;
  2. 每個(gè)類都會(huì)有一個(gè)與之對(duì)應(yīng)的Class實(shí)例,從而每個(gè)類都可以獲取method反射方法,并作用到其他實(shí)例身上;
  3. 反射也是考慮了線程安全的,放心使用;
  4. 反射使用軟引用relectionData緩存class信息,避免每次重新從jvm獲取帶來的開銷;
  5. 反射調(diào)用多次生成新代理Accessor, 而通過字節(jié)碼生存的則考慮了卸載功能,所以會(huì)使用獨(dú)立的類加載器;
  6. 當(dāng)找到需要的方法,都會(huì)copy一份出來,而不是使用原來的實(shí)例,從而保證數(shù)據(jù)隔離;
  7. 調(diào)度反射方法,最終是由jvm執(zhí)行invoke0()執(zhí)行;

1,JAVA反射機(jī)制是在運(yùn)行狀態(tài)中
對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;
對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;
這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為java語言的反射機(jī)制。

2,反射提供的功能:
在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類
在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象
在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法
在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法

http://www.itdecent.cn/p/182b981d53d7

泛型常用特點(diǎn)

java中的泛型只是在程序源碼中存在,在編譯后的字節(jié)碼文件中,就已經(jīng)替換為原來的原生類型(Raw Type,也成為裸類型),并且在相應(yīng)的地方插入了強(qiáng)制轉(zhuǎn)換代碼,因此對(duì)于運(yùn)行期的Java語言來講,所有的泛型容器都是一樣的,泛型技術(shù)實(shí)際上是Java的一顆語法糖,Java語言的泛型實(shí)際方法稱為類型擦除,基于這種方法實(shí)現(xiàn)的泛型稱為偽泛型。
java1.4或更早版本的開發(fā)背景的人都知道,在集合中存儲(chǔ)對(duì)象并在使用前進(jìn)行類型轉(zhuǎn)換是多么的不方便。泛型防止了那種情況的發(fā)生。泛型的好處是在編譯的時(shí)候檢查類型安全。泛型提供了編譯期的類型安全,確保你只能把正確類型的對(duì)象放入集合中,避免了在運(yùn)行時(shí)出現(xiàn)ClassCastException。泛型是通過類型擦除來實(shí)現(xiàn)的,編譯器在編譯時(shí)擦除了所有類型相關(guān)的信息,所以在運(yùn)行時(shí)不存在任何類型相關(guān)的信息。例如List<String>在運(yùn)行時(shí)僅用一個(gè)List來表示。這樣做的目的,是確保能和Java 5之前的版本開發(fā)二進(jìn)制類庫進(jìn)行兼容。你無法在運(yùn)行時(shí)訪問到類型參數(shù),因?yàn)榫幾g器已經(jīng)把泛型類型轉(zhuǎn)換成了原始類型。List<String>不能轉(zhuǎn)為L(zhǎng)ist<Object>,因?yàn)榉盒偷念愋筒灰粯?,這種轉(zhuǎn)換只能在子類與父類之間轉(zhuǎn)換,雖然Object是String的父類,但是List<Object>和List<String>在編譯器看來,是兩種完全不同的東西,不允許你這樣轉(zhuǎn)換。并沒有什么父子類的關(guān)系,僅僅是表示一個(gè)用來裝Obejct型對(duì)像,一個(gè)用來裝String。

http://www.itdecent.cn/p/3dbdcd9bd67e

在Java泛型中通過extends關(guān)鍵字可以提供協(xié)變的泛型類型轉(zhuǎn)換,通過supper可以提供逆變的泛型類型轉(zhuǎn)換。
http://www.itdecent.cn/p/104d9a2e7c3c

解析XML的幾種方式的原理與特點(diǎn):DOM、SAX

SAX采用事件驅(qū)動(dòng),在相應(yīng)事件觸發(fā)的時(shí)候,會(huì)調(diào)用用戶編寫好的方法。
SAX、pull是走馬觀花式閱讀方式,DOM是酌字酌句的閱讀。
SAX、pull解析的方式是同步的,即解析器到哪里,就對(duì)哪里進(jìn)行解析. 而DOM是已經(jīng)文件解析好后,供用戶提取xml

http://www.itdecent.cn/p/47bdfe447774

http://www.itdecent.cn/p/7e6147934edc

Java1.7與1.8,1.9,10 新特性

http://www.itdecent.cn/p/64e60f7ccaeb

設(shè)計(jì)模式:?jiǎn)卫?、工廠、適配器、責(zé)任鏈、觀察者等等

http://www.itdecent.cn/p/a560d64ef123

JNI的使用

http://www.itdecent.cn/p/5230734d7f62

AOP與OOP的區(qū)別

AOP(Aspect Oriented Programming) 面向切面編程,是目前軟件開發(fā)中的一個(gè)熱點(diǎn),是Spring框架內(nèi)容,利用AOP可以對(duì)業(yè)務(wù)邏輯的各個(gè)部分隔離,從而使的業(yè)務(wù)邏輯各部分的耦合性降低,提高程序的可重用性,踢開開發(fā)效率,主要功能:日志記錄,性能統(tǒng)計(jì),安全控制,事務(wù)處理,異常處理等。

AOP實(shí)現(xiàn)原理是java動(dòng)態(tài)代理,但是jdk的動(dòng)態(tài)代理必須實(shí)現(xiàn)接口,所以spring的aop是用cglib這個(gè)庫實(shí)現(xiàn)的,cglis使用里asm這個(gè)直接操縱字節(jié)碼的框架,所以可以做到不使用接口的情況下實(shí)現(xiàn)動(dòng)態(tài)代理。

AOP與OOP的卻別:

OOP面向?qū)ο缶幊蹋槍?duì)業(yè)務(wù)處理過程的實(shí)體及其屬性和行為進(jìn)行抽象封裝,以獲得更加清晰高效的邏輯單元?jiǎng)澐?。而AOP則是針對(duì)業(yè)務(wù)處理過程中的切面進(jìn)行提取,它所面對(duì)的是處理過程的某個(gè)步驟或階段,以獲得邏輯過程的中各部分之間低耦合的隔離效果。這兩種設(shè)計(jì)思想在目標(biāo)上有著本質(zhì)的差異。

舉例:

對(duì)于“雇員”這樣一個(gè)業(yè)務(wù)實(shí)體進(jìn)行封裝,自然是OOP的任務(wù),我們可以建立一個(gè)“Employee”類,并將“雇員”相關(guān)的屬性和行為封裝其中。而用AOP 設(shè)計(jì)思想對(duì)“雇員”進(jìn)行封裝則無從談起。

同樣,對(duì)于“權(quán)限檢查”這一動(dòng)作片段進(jìn)行劃分,則是AOP的目標(biāo)領(lǐng)域。

OOP面向名次領(lǐng)域,AOP面向動(dòng)詞領(lǐng)域。

總之AOP可以通過預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)在不修改源碼的情況下,給程序動(dòng)態(tài)同意添加功能的一項(xiàng)技術(shù)。

多線程

什么是線程?

什么是線程安全和線程不安全?

什么是自旋鎖?

什么是Java內(nèi)存模型?

什么是CAS?

什么是樂觀鎖和悲觀鎖?

什么是AQS?

什么是原子操作?在Java Concurrency API中有哪些原子類(atomic classes)?

什么是Executors框架?

什么是阻塞隊(duì)列?如何使用阻塞隊(duì)列來實(shí)現(xiàn)生產(chǎn)者-消費(fèi)者模型?

什么是Callable和Future?

什么是FutureTask?

什么是同步容器和并發(fā)容器的實(shí)現(xiàn)?

什么是多線程??jī)?yōu)缺點(diǎn)?

什么是多線程的上下文切換?

ThreadLocal的設(shè)計(jì)理念與作用?

ThreadPool(線程池)用法與優(yōu)勢(shì)?

Concurrent包里的其他東西:ArrayBlockingQueue、CountDownLatch等等。

synchronized和ReentrantLock的區(qū)別?

Semaphore有什么作用?

Java Concurrency API中的Lock接口(Lock interface)是什么?對(duì)比同步它有什么優(yōu)勢(shì)?

Hashtable的size()方法中明明只有一條語句”return count”,為什么還要做同步?

ConcurrentHashMap的并發(fā)度是什么?

ReentrantReadWriteLock讀寫鎖的使用?

CyclicBarrier和CountDownLatch的用法及區(qū)別?

LockSupport工具?

Condition接口及其實(shí)現(xiàn)原理?

Fork/Join框架的理解?

wait()和sleep()的區(qū)別?

線程的五個(gè)狀態(tài)(五種狀態(tài),創(chuàng)建、就緒、運(yùn)行、阻塞和死亡)?

start()方法和run()方法的區(qū)別?

Runnable接口和Callable接口的區(qū)別?

volatile關(guān)鍵字的作用?

Java中如何獲取到線程dump文件?

線程和進(jìn)程有什么區(qū)別?

線程實(shí)現(xiàn)的方式有幾種(四種)?

高并發(fā)、任務(wù)執(zhí)行時(shí)間短的業(yè)務(wù)怎樣使用線程池?并發(fā)不高、任務(wù)執(zhí)行時(shí)間長(zhǎng)的業(yè)務(wù)怎樣使用線程池?并發(fā)高、業(yè)務(wù)執(zhí)行時(shí)間長(zhǎng)的業(yè)務(wù)怎樣使用線程池?

如果你提交任務(wù)時(shí),線程池隊(duì)列已滿,這時(shí)會(huì)發(fā)生什么?

鎖的等級(jí):方法鎖、對(duì)象鎖、類鎖?

如果同步塊內(nèi)的線程拋出異常會(huì)發(fā)生什么?

并發(fā)編程(concurrency)并行編程(parallellism)有什么區(qū)別?

如何保證多線程下 i++ 結(jié)果正確?

一個(gè)線程如果出現(xiàn)了運(yùn)行時(shí)異常會(huì)怎么樣?

如何在兩個(gè)線程之間共享數(shù)據(jù)?

生產(chǎn)者消費(fèi)者模型的作用是什么?

怎么喚醒一個(gè)阻塞的線程?

Java中用到的線程調(diào)度算法是什么

單例模式的線程安全性?

線程類的構(gòu)造方法、靜態(tài)塊是被哪個(gè)線程調(diào)用的?

同步方法和同步塊,哪個(gè)是更好的選擇?

如何檢測(cè)死鎖?怎么預(yù)防死鎖?

設(shè)計(jì)模式

裝飾器模式

工廠模式

單例模式

觀察者模式

動(dòng)態(tài)代理模式

適配器模式

模板模式

策略模式

image

JVM

內(nèi)存模型以及分區(qū),需要詳細(xì)到每個(gè)區(qū)放什么。

對(duì)象創(chuàng)建方法,對(duì)象的內(nèi)存分配,對(duì)象的訪問定位。

GC的兩種判定方法:引用計(jì)數(shù)與引用鏈。

GC的三種收集方法:標(biāo)記清除、標(biāo)記整理、復(fù)制算法的原理與特點(diǎn),分別用在什么地方,如果讓你優(yōu)化收集方法,有什么思路?

GC收集器有哪些?CMS收集器與G1收集器的特點(diǎn)。

Minor?GC與Full?GC分別在什么時(shí)候發(fā)生?

幾種常用的內(nèi)存調(diào)試工具:jmap、jstack、jconsole。

類加載的五個(gè)過程:加載、驗(yàn)證、準(zhǔn)備、解析、初始化。

雙親委派模型:Bootstrap?ClassLoader、Extension?ClassLoader、ApplicationClassLoader。

分派:靜態(tài)分派與動(dòng)態(tài)分派。

JVM過去過來就問了這么些問題,沒怎么變,內(nèi)存模型和GC算法這塊問得比較多,可以在網(wǎng)上多找?guī)灼┛蛠砜纯础?/p>

推薦書籍:《深入理解java虛擬機(jī)》

數(shù)據(jù)結(jié)構(gòu)與算法

鏈表與數(shù)組。

隊(duì)列和棧,出棧與入棧。

鏈表的刪除、插入、反向。

字符串操作。

Hash表的hash函數(shù),沖突解決方法有哪些。

各種排序:冒泡、選擇、插入、希爾、歸并、快排、堆排、桶排、基數(shù)的原理、平均時(shí)間復(fù)雜度、最壞時(shí)間復(fù)雜度、空間復(fù)雜度、是否穩(wěn)定。

快排的partition函數(shù)與歸并的Merge函數(shù)。

對(duì)冒泡與快排的改進(jìn)。

二分查找,與變種二分查找。

二叉樹、B+樹、AVL樹、紅黑樹、哈夫曼樹。

二叉樹的前中后續(xù)遍歷:遞歸與非遞歸寫法,層序遍歷算法。

圖的BFS與DFS算法,最小生成樹prim算法與最短路徑Dijkstra算法。

KMP算法。

排列組合問題。

動(dòng)態(tài)規(guī)劃、貪心算法、分治算法。(一般不會(huì)問到)

大數(shù)據(jù)處理:類似10億條數(shù)據(jù)找出最大的1000個(gè)數(shù).........等等

算法的話其實(shí)是個(gè)重點(diǎn),因?yàn)樽詈蠖际且銓懘a,所以算法還是需要花不少時(shí)間準(zhǔn)備,這里有太多算法題,寫不全,我的建議是沒事多在OJ上刷刷題(??途W(wǎng)、leetcode等),劍指offer上的算法要能理解并自己寫出來,編程之美也推薦看一看

數(shù)據(jù)庫

事務(wù)四大特性(ACID)原子性、一致性、隔離性、持久性

數(shù)據(jù)庫隔離級(jí)別,每個(gè)級(jí)別會(huì)引發(fā)什么問題,mysql默認(rèn)是哪個(gè)級(jí)別

innodb和myisam存儲(chǔ)引擎的區(qū)別

MYSQL的兩種存儲(chǔ)引擎區(qū)別(事務(wù)、鎖級(jí)別等等),各自的適用場(chǎng)景

查詢語句不同元素(where、jion、limit、group by、having等等)執(zhí)行先后順序

數(shù)據(jù)庫的優(yōu)化(從sql語句優(yōu)化和索引兩個(gè)部分回答)

索引有B+索引和hash索引,各自的區(qū)別

B+索引數(shù)據(jù)結(jié)構(gòu),和B樹的區(qū)別

索引的分類(主鍵索引、唯一索引),最左前綴原則,哪些情況索引會(huì)失效

聚集索引和非聚集索引區(qū)別。

有哪些鎖(樂觀鎖悲觀鎖),select時(shí)怎么加排它鎖

關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫區(qū)別

數(shù)據(jù)庫三范式,根據(jù)某個(gè)場(chǎng)景設(shè)計(jì)數(shù)據(jù)表(可以通過手繪ER圖)

數(shù)據(jù)庫的讀寫分離、主從復(fù)制

使用explain優(yōu)化sql和索引

long_query怎么解決

內(nèi)連接、外連接、交叉連接、笛卡兒積等

死鎖判定原理和具體場(chǎng)景,死鎖怎么解決

varchar和char的使用場(chǎng)景。

mysql并發(fā)情況下怎么解決(通過事務(wù)、隔離級(jí)別、鎖)

數(shù)據(jù)庫崩潰時(shí)事務(wù)的恢復(fù)機(jī)制(REDO日志和UNDO日志)

查詢語句不同元素(where、jion、limit、group by、having等等)執(zhí)行先后順序

Spring

IOC和DI是什么?

Spring IOC 的理解,其初始化過程?

BeanFactory 和 FactoryBean的區(qū)別?

BeanFactory和ApplicationContext的區(qū)別?

ApplicationContext 上下文的生命周期?

Spring Bean 的生命周期?

Spring AOP的實(shí)現(xiàn)原理?

Spring 是如何管理事務(wù)的,事務(wù)管理機(jī)制?

Spring 的不同事務(wù)傳播行為有哪些,干什么用的?

Spring 中用到了那些設(shè)計(jì)模式?

Spring MVC 的工作原理?

Spring如何解決循環(huán)依賴?

Spring 如何保證 Controller 并發(fā)的安全?

Netty

BIO、NIO和AIO

Netty 的各大組件

Netty的線程模型

TCP 粘包/拆包的原因及解決方法

了解哪幾種序列化協(xié)議?包括使用場(chǎng)景和如何去選擇

Netty的零拷貝實(shí)現(xiàn)

Netty的高性能表現(xiàn)在哪些方面

緩存

Redis用過哪些數(shù)據(jù)數(shù)據(jù),以及Redis底層怎么實(shí)現(xiàn)

Redis緩存穿透,緩存雪崩

如何使用Redis來實(shí)現(xiàn)分布式鎖

Redis的并發(fā)競(jìng)爭(zhēng)問題如何解決

Redis持久化的幾種方式,優(yōu)缺點(diǎn)是什么,怎么實(shí)現(xiàn)的

Redis的緩存失效策略

Redis集群,高可用,原理

Redis緩存分片

Redis的數(shù)據(jù)淘汰策略

image

技術(shù)框架

看過哪些開源框架的源碼

為什么要用Redis,Redis有哪些優(yōu)缺點(diǎn)?Redis如何實(shí)現(xiàn)擴(kuò)容?

Netty是如何使用線程池的,為什么這么使用

為什么要使用Spring,Spring的優(yōu)缺點(diǎn)有哪些

Spring的IOC容器初始化流程

Spring的IOC容器實(shí)現(xiàn)原理,為什么可以通過byName和ByType找到Bean

Spring AOP實(shí)現(xiàn)原理

消息中間件是如何實(shí)現(xiàn)的,技術(shù)難點(diǎn)有哪些

技術(shù)深度

事務(wù)的實(shí)現(xiàn)原理

有沒有看過JDK源碼,看過的類實(shí)現(xiàn)原理是什么。

HTTP協(xié)議

TCP協(xié)議

一致性Hash算法

JVM如何加載字節(jié)碼文件

類加載器如何卸載字節(jié)碼

IO和NIO的區(qū)別,NIO優(yōu)點(diǎn)

Java線程池的實(shí)現(xiàn)原理,keepAliveTime等參數(shù)的作用。

HTTP連接池實(shí)現(xiàn)原理

數(shù)據(jù)庫連接池實(shí)現(xiàn)原理

數(shù)據(jù)庫的實(shí)現(xiàn)原理

分布式

什么是CAP定理

CAP 理論和 BASE 理論

CAP 理論

CAP 理論和最終一致性

最終一致性實(shí)現(xiàn)方式

CAP 理論和 BASE 理論

一致性 Hash

分布式事務(wù),兩階段提交。

如何實(shí)現(xiàn)分布式鎖

如何實(shí)現(xiàn)分布式Session

如何保證消息的一致性

負(fù)載均衡

正向代理(客戶端代理)和反向代理(服務(wù)器端代理)

CDN實(shí)現(xiàn)原理

怎么提升系統(tǒng)的QPS和吞吐量

Dubbo的底層實(shí)現(xiàn)原理和機(jī)制

描述一個(gè)服務(wù)從發(fā)布到被消費(fèi)的詳細(xì)過程

分布式系統(tǒng)怎么做服務(wù)治理

接口的冪等性的概念

消息中間件如何解決消息丟失問題

Dubbo的服務(wù)請(qǐng)求失敗怎么處理

重連機(jī)制會(huì)不會(huì)造成錯(cuò)誤

對(duì)分布式事務(wù)的理解

如何實(shí)現(xiàn)負(fù)載均衡,有哪些算法可以實(shí)現(xiàn)?

Zookeeper的用途,選舉的原理是什么?

數(shù)據(jù)的垂直拆分水平拆分。

zookeeper原理和適用場(chǎng)景

zookeeper watch機(jī)制

redis/zk節(jié)點(diǎn)宕機(jī)如何處理

分布式集群下如何做到唯一序列號(hào)

用過哪些MQ,怎么用的,和其他mq比較有什么優(yōu)缺點(diǎn),MQ的連接是線程安全的嗎

MQ系統(tǒng)的數(shù)據(jù)如何保證不丟失

列舉出你能想到的數(shù)據(jù)庫分庫分表策略;分庫分表后,如何解決全表查詢的問

系統(tǒng)架構(gòu)

如何搭建一個(gè)高可用系統(tǒng)

哪些設(shè)計(jì)模式可以增加系統(tǒng)的可擴(kuò)展性

介紹設(shè)計(jì)模式,如模板模式,命令模式,策略模式,適配器模式、橋接模式、裝飾模式,觀察者模式,狀態(tài)模式,訪問者模式。

抽象能力,怎么提高研發(fā)效率。

什么是高內(nèi)聚低耦合,請(qǐng)舉例子如何實(shí)現(xiàn)

什么情況用接口,什么情況用消息

如果AB兩個(gè)系統(tǒng)互相依賴,如何解除依賴

如何寫一篇設(shè)計(jì)文檔,目錄是什么

什么場(chǎng)景應(yīng)該拆分系統(tǒng),什么場(chǎng)景應(yīng)該合并系統(tǒng)

系統(tǒng)和模塊的區(qū)別,分別在什么場(chǎng)景下使用

實(shí)戰(zhàn)能力

有沒有處理過線上問題?出現(xiàn)內(nèi)存泄露,CPU利用率標(biāo)高,應(yīng)用無響應(yīng)時(shí)如何處理的。

開發(fā)中有沒有遇到什么技術(shù)問題?如何解決的

如果有幾十億的白名單,每天白天需要高并發(fā)查詢,晚上需要更新一次,如何設(shè)計(jì)這個(gè)功能。

新浪微博是如何實(shí)現(xiàn)把微博推給訂閱者

Google是如何在一秒內(nèi)把搜索結(jié)果返回給用戶的。

12306網(wǎng)站的訂票系統(tǒng)如何實(shí)現(xiàn),如何保證不會(huì)票不被超賣。

如何實(shí)現(xiàn)一個(gè)秒殺系統(tǒng),保證只有幾位用戶能買到某件商品。

LINUX

硬鏈接和軟連接區(qū)別

kill用法,某個(gè)進(jìn)程殺不掉的原因(進(jìn)入內(nèi)核態(tài),忽略kill信號(hào))

linux用過的命令

系統(tǒng)管理命令(如查看內(nèi)存使用、網(wǎng)絡(luò)情況)

管道的使用 |

grep的使用,一定要掌握,每次都會(huì)問在文件中查找

shell腳本

find命令

awk使用

TCP/IP

OSI與TCP/IP各層的結(jié)構(gòu)與功能,都有哪些協(xié)議。

TCP與UDP的區(qū)別。

TCP報(bào)文結(jié)構(gòu)。

TCP的三次握手與四次揮手過程,各個(gè)狀態(tài)名稱與含義,TIMEWAIT的作用。

TCP擁塞控制。

TCP滑動(dòng)窗口與回退N針協(xié)議。

Http的報(bào)文結(jié)構(gòu)。

Http的狀態(tài)碼含義。

Http?request的幾種類型。

Http1.1和Http1.0的區(qū)別

Http怎么處理長(zhǎng)連接。

Cookie與Session的作用于原理。

電腦上訪問一個(gè)網(wǎng)頁,整個(gè)過程是怎么樣的:DNS、HTTP、TCP、OSPF、IP、ARP。

Ping的整個(gè)過程。ICMP報(bào)文是什么。

C/S模式下使用socket通信,幾個(gè)關(guān)鍵函數(shù)。

IP地址分類。

路由器與交換機(jī)區(qū)別。

網(wǎng)絡(luò)其實(shí)大體分為兩塊,一個(gè)TCP協(xié)議,一個(gè)HTTP協(xié)議,只要把這兩塊以及相關(guān)協(xié)議搞清楚,一般問題不大。

推薦書籍:《TCP/IP協(xié)議族》

軟能力

如何學(xué)習(xí)一項(xiàng)新技術(shù),比如如何學(xué)習(xí)Java的,重點(diǎn)學(xué)習(xí)什么

有關(guān)注哪些新的技術(shù)

工作任務(wù)非常多非常雜時(shí)如何處理

項(xiàng)目出現(xiàn)延遲如何處理

和同事的設(shè)計(jì)思路不一樣怎么處理

如何保證開發(fā)質(zhì)量

職業(yè)規(guī)劃是什么?短期,長(zhǎng)期目標(biāo)是什么

團(tuán)隊(duì)的規(guī)劃是什么

能介紹下從工作到現(xiàn)在自己的成長(zhǎng)在那里

說說你認(rèn)為的服務(wù)端開發(fā)工程師應(yīng)該具備哪些能力

網(wǎng)絡(luò)必備,高并發(fā),JVM必會(huì),各種分布式技術(shù),看源碼的能力。

說說你認(rèn)為的架構(gòu)師是什么樣的,架構(gòu)師主要做什么

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容