華為面試題庫(kù)_第1頁(yè)
華為面試題庫(kù)_第2頁(yè)
華為面試題庫(kù)_第3頁(yè)
華為面試題庫(kù)_第4頁(yè)
華為面試題庫(kù)_第5頁(yè)
已閱讀5頁(yè),還剩71頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

華為面試題庫(kù)資料僅供參考一、華為題庫(kù)tcpip應(yīng)用層之上的幾個(gè)協(xié)議具體說(shuō)明內(nèi)容:OSI是一個(gè)開放性的通信系統(tǒng)互連參考模型,她是一個(gè)定義得非常好的協(xié)議規(guī)范。OSI模型有7層結(jié)構(gòu),每層都能夠有幾個(gè)子層。OSI的7層從上到下分別是7應(yīng)用層6表示層5會(huì)話層4傳輸層3網(wǎng)絡(luò)層2數(shù)據(jù)鏈路層1物理層;其中高層(即7、6、5、4層)定義了應(yīng)用程序的功能,下面3層(即3、2、1層)主要面向經(jīng)過(guò)網(wǎng)絡(luò)的端到端的數(shù)據(jù)流。其中傳輸層包含tcpudpspx等協(xié)議Tcpip模型是一系列網(wǎng)絡(luò)協(xié)議的總稱。Tcpip模型的四層結(jié)構(gòu): 這些協(xié)議分成四個(gè)層次,上一層的協(xié)議都以下一層的協(xié)議為基礎(chǔ)。從下到上的四層,連接層(LindLayer)、網(wǎng)絡(luò)層(InternetLayer)、傳輸層(TransportLayer)、應(yīng)用層(ApplicationLayer)。連接層負(fù)責(zé)建立電路連接,是整個(gè)網(wǎng)絡(luò)的物理基礎(chǔ),典型的協(xié)議包括以太網(wǎng)、ADSL等。數(shù)據(jù)鏈路層。這個(gè)層次為待傳送的數(shù)據(jù)加入一個(gè)以太網(wǎng)協(xié)議頭,并進(jìn)行CRC編碼,為最后的數(shù)據(jù)傳輸做準(zhǔn)備。再往下則是硬件層次了,負(fù)責(zé)網(wǎng)絡(luò)的傳輸,這個(gè)層次的定義包括網(wǎng)線的制式,網(wǎng)卡的定義等等(這些我們就不用關(guān)心了,我們也不做網(wǎng)卡),因此有些書并不把這個(gè)層次放在tcp/ip協(xié)議族里面,因?yàn)樗鼛缀鹾蛅cp/ip協(xié)議的編寫者沒(méi)有任何的關(guān)系。發(fā)送協(xié)議的主機(jī)從上自下將數(shù)據(jù)按照協(xié)議封裝,而接收數(shù)據(jù)的主機(jī)則按照協(xié)議從得到的數(shù)據(jù)包解開,最后拿到需要的數(shù)據(jù)。這種結(jié)構(gòu)非常有棧的味道,因此某些文章也把tcp/ip協(xié)議族稱為tcp/ip協(xié)議棧。網(wǎng)絡(luò)層負(fù)責(zé)分配地址和傳送二進(jìn)制數(shù)據(jù),主要協(xié)議是IP協(xié)議。傳輸層負(fù)責(zé)傳送文本數(shù)據(jù),主要協(xié)議是TCP協(xié)議、UDP協(xié)議應(yīng)用層負(fù)責(zé)傳送各種最終形態(tài)的數(shù)據(jù),是直接與用戶打交道的層,典型協(xié)議是HTTP、FTP等。TCP/IP詳解學(xué)習(xí)筆記(1)-基本概念互聯(lián)網(wǎng)IP地址:現(xiàn)在,一般使用的IP地址是一個(gè)32bit的數(shù)字,也就是我們常說(shuō)的IPv4標(biāo)準(zhǔn),這32bit的數(shù)字分成四組,也就是常見(jiàn)的55的樣式。IPv4標(biāo)準(zhǔn)上,地址被分為五類,我們常見(jiàn)的是B類地址。具體的分類請(qǐng)參考其它文檔。需要注意的是IP地址是網(wǎng)絡(luò)號(hào)+主機(jī)號(hào)的組合,這非常重要。32Bit分成四組,一組8bit2^8=16*16=256域名系統(tǒng)域名系統(tǒng)是一個(gè)分布的數(shù)據(jù)庫(kù),它提供將主機(jī)名(就是網(wǎng)址啦)轉(zhuǎn)換成IP地址的服務(wù)。RFCRFC是什么?RFC就是tcp/ip協(xié)議的標(biāo)準(zhǔn)文檔,在這里我們能夠看到RFC那長(zhǎng)長(zhǎng)的定義列表,現(xiàn)在它一共有4000多個(gè)協(xié)議的定義,當(dāng)然,我們所要學(xué)習(xí)的,也就是那么十幾個(gè)協(xié)議而已。端口號(hào)(port)注意,這個(gè)號(hào)碼是用在TCP,UDP上的一個(gè)邏輯號(hào)碼,并不是一個(gè)硬件端口,我們平時(shí)說(shuō)把某某端口封掉了,也只是在IP層次把帶有這個(gè)號(hào)碼的IP包給過(guò)濾掉了而已。

應(yīng)用編程接口現(xiàn)在常見(jiàn)的編程接口有socket和TLI。而前面的有時(shí)候也叫做“Berkeleysocket”,可見(jiàn)Berkeley對(duì)于網(wǎng)絡(luò)的發(fā)展有多大的貢獻(xiàn)。TCP/IP詳解學(xué)習(xí)筆記(2)-數(shù)據(jù)鏈路層數(shù)據(jù)鏈路層有三個(gè)目的:

為IP模塊發(fā)送和

接收IP數(shù)據(jù)報(bào)。

為ARP模塊發(fā)送ARP請(qǐng)求和接收ARP應(yīng)答。

為RARP發(fā)送RARP請(qǐng)

求和接收RARP應(yīng)答ip大家都聽(tīng)說(shuō)過(guò)。至于ARP和RARP,ARP叫做地址解析協(xié)議,是用IP地址換MAC地址的一種協(xié)議,而RARP則叫做逆地址解析協(xié)議,在tcp/ip協(xié)議的后面章節(jié)會(huì)介紹它們(在局域網(wǎng)里面用ARP協(xié)議能夠很容易的搞癱瘓網(wǎng)絡(luò)哦)數(shù)據(jù)鏈路層的協(xié)議還是很多的,有我們最常見(jiàn)的以太網(wǎng)(就是平時(shí)我們用的網(wǎng)卡)協(xié)議,也有不太常見(jiàn)的令牌環(huán),還有FDDI,當(dāng)然,還有國(guó)內(nèi)現(xiàn)在相當(dāng)普及的PPP協(xié)議(就是adsl寬帶),以及一個(gè)loopback協(xié)議。聯(lián)系linux里面的ifconfig-a命令,這個(gè)命令一般會(huì)得到如下的結(jié)果其中,eth0就是以太網(wǎng)接口,而lo則是loopback接口。這也說(shuō)明這個(gè)主機(jī)在網(wǎng)絡(luò)鏈路層上至少支持loopback協(xié)議和以太網(wǎng)協(xié)議。以太網(wǎng)(Ether-net)的定是指數(shù)字設(shè)備公司(

DigitalEquipmentCorp.)、英特爾公司(IntelCorp.)和Xerox公司在1982年聯(lián)合公布的一個(gè)標(biāo)準(zhǔn),這個(gè)標(biāo)準(zhǔn)里面使用了一種稱作CSMA/CD的接入方法。而IEEE802提供的標(biāo)準(zhǔn)集802.3(還有一部分定義到了802.2中)也提供了一個(gè)CSMA/CD的標(biāo)準(zhǔn)。這兩個(gè)標(biāo)準(zhǔn)稍有不同,TCP/IP協(xié)議對(duì)這種情況的處理方式如下:·

以太網(wǎng)的IP數(shù)據(jù)報(bào)封裝在RFC894中定義,而IEEE802網(wǎng)絡(luò)的IP數(shù)據(jù)報(bào)封裝在RFC1042中定義?!?/p>

一臺(tái)主機(jī)一定要能發(fā)送和接收RFC894定義的數(shù)據(jù)報(bào)?!?/p>

一臺(tái)主機(jī)能夠接收RFC894和RFC1042的封裝格式的混合數(shù)據(jù)報(bào)?!?/p>

一臺(tái)主機(jī)可能能夠發(fā)送RFC1042數(shù)據(jù)報(bào)。。如果主機(jī)能同時(shí)發(fā)送兩種類型的分組數(shù)

據(jù),那么發(fā)送的分組必須是能夠設(shè)置的,而且默認(rèn)條件下必須是RFC894分組。可見(jiàn),RFC1042在TCP/IP里面處于一個(gè)配角的地位。這兩種不同的數(shù)據(jù)報(bào)格式請(qǐng)參考教材。ppp(點(diǎn)對(duì)點(diǎn)協(xié)議)是從SLIP的替代品。她們都提供了一種低速接入的解決方案。而每一種數(shù)據(jù)鏈路層協(xié)議,都有一個(gè)MTU(最大傳輸單元)定義,在這個(gè)定義下面,如果IP數(shù)據(jù)報(bào)過(guò)大,則要進(jìn)行分片(fragmentation),使得每片都小于MTU,注意PPP的MTU并不是一個(gè)物理定義,而是指一個(gè)邏輯定義(個(gè)人認(rèn)為就是用程序控制)。能夠用netstat來(lái)打印出MTU的結(jié)果,比如鍵入netstat-in上文摘自上面的網(wǎng)址上面的是tcpip協(xié)議的補(bǔ)充繼承子類父類的問(wèn)題extends關(guān)鍵字理解繼承是理解面向?qū)ο蟪绦蛟O(shè)計(jì)的關(guān)鍵。在Java中,經(jīng)過(guò)關(guān)鍵字extends繼承一個(gè)已有的類,被繼承的類稱為父類(超類,基類),新的類稱為子類(派生類)。在Java中不允許多繼承。 子類能夠覆蓋父類的方法。Java中是單繼承,一個(gè)子類只能有一個(gè)直接父類。 子類包含于父類同名方法的現(xiàn)象稱為方法重寫,也成為方法覆蓋。Override。方法的重寫遵守“兩同兩小一大”規(guī)則,兩同,方法名相同,形參列表相同。兩小指的子類返回值類型應(yīng)該比父類方法返回值類型更小或者相等。子類方法聲明拋出的異常應(yīng)該比父類方法聲明拋出的異常類更小或者相等。一大,子類的訪問(wèn)權(quán)限應(yīng)該比父類方法更大或者相等。覆蓋方法和被覆蓋的方法要么都是類方法,要么都是實(shí)例方法。 java的集合對(duì)象arraylistlinklisthashsethashmap的區(qū)別arrayListLinkList1.ArrayList是實(shí)現(xiàn)了基于動(dòng)態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu)。

2.對(duì)于隨機(jī)訪問(wèn)get和set,ArrayList優(yōu)于LinkedList,因?yàn)锳rrayList能夠隨機(jī)定位,而LinkedList要移動(dòng)指針一步一步的移動(dòng)到節(jié)點(diǎn)處。(參考數(shù)組與鏈表來(lái)思考)Arraylist適合查詢linkedlist適合增刪改

3.對(duì)于新增和刪除操作add和remove,LinedList比較占優(yōu)勢(shì),只需要對(duì)指針進(jìn)行修改即可,而ArrayList要移動(dòng)數(shù)據(jù)來(lái)填補(bǔ)被刪除的對(duì)象的空間。ArrayList和LinkedList是兩個(gè)集合類,用于存儲(chǔ)一系列的對(duì)象引用(references)。例如我們能夠用ArrayList來(lái)存儲(chǔ)一系列的String或者Integer。那么ArrayList和LinkedList在性能上有什么差別呢?什么時(shí)候應(yīng)該用ArrayList什么時(shí)候又該用LinkedList呢?

java中ArrayList、LinkList區(qū)別hashset和hashmapStringbuffer和String的比較接口的說(shuō)法不能有proteced修飾的方法不能有static修飾的方法都是publicabstract修飾的方法都是publicvoid類型一個(gè)類能實(shí)現(xiàn)多個(gè)接口接口里不允許定義靜態(tài)方法,接口支持多繼承。接口的主要用途是被實(shí)現(xiàn)類實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池的原理數(shù)據(jù)庫(kù)連接池的基本思想就是為數(shù)據(jù)庫(kù)連接建立一個(gè)“緩沖池”。預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建立數(shù)據(jù)庫(kù)連接時(shí),只需從“緩沖池”中取出一個(gè),使用完畢之后再放回去。我們能夠經(jīng)過(guò)設(shè)定連接池最大連接數(shù)來(lái)防止系統(tǒng)無(wú)盡的與數(shù)據(jù)庫(kù)連接。更為重要的是我們能夠經(jīng)過(guò)連接池的管理機(jī)制監(jiān)視數(shù)據(jù)庫(kù)的連接的數(shù)量﹑使用情況,為系統(tǒng)開發(fā)﹑測(cè)試及性能調(diào)整提供依據(jù)。collectionIterator接口arraylisthashsethashmaplinklist使用jdbc鏈接java的codeJDBC連接各種數(shù)據(jù)庫(kù)的方法(經(jīng)典)SqlserverPublic

void

FindAllUsers(){

//1、裝載sqlserver驅(qū)動(dòng)對(duì)象

DriverManager.registerDriver(new

SQLServerDriver());

//2、經(jīng)過(guò)JDBC建立數(shù)據(jù)庫(kù)連接

Connection

con

=DriverManager.getConnection("jdbc:sqlserver://:1433;DatabaseName=customer",

"sa",

"123");

//3、創(chuàng)立狀態(tài)

Statement

state

=con.createStatement();

//4、查詢數(shù)據(jù)庫(kù)并返回結(jié)果

ResultSet

result

=state.executeQuery("select

*

from

users");

//5、輸出查詢結(jié)果

while(result.next()){

System.out.println(result.getString("email"));

}

//6、斷開數(shù)據(jù)庫(kù)連接

result.close();

state.close();

con.close();

}

1)連接Oracle8/8i/9i/10g/11g(thin模式)Class.forName("oracle.JDBC.driver.OracleDriver").newInstance();Stringurl="JDBC:oracle:thin:@localhost:1521:orcl"

//orcl為Oracle數(shù)據(jù)庫(kù)的SIDStringuser="test";Stringpassword="test";Connectioncon=DriverManager.getConnection(url,user,password);2)連接DB2數(shù)據(jù)庫(kù)Class.forName("com.ibm.db2.jcc.DB2Driver");Stringurl="JDBC:db2://localhost:5000/testDb";Stringuser="test";Stringpassword="test";Connectioncon=DriverManager.getConnection(url,user,password);3)連接MySQL數(shù)據(jù)庫(kù)Class.forName("com.mysql.jdbc.Driver");Stringurl="JDBC:mysql://localhost:8080/testDB";Stringuser="test";Stringpassword="test";Connectioncon=DriverManager.getConnection(url,user,password);4)連接SQLServer數(shù)據(jù)庫(kù)Class.forName("com.microsoft.JDBC.sqlserver.SQLServerDriver");Stringurl="JDBC:microsoft:sqlserver://localhost:1433;DatabaseName=testDb";Stringuser="test";Stringpassword="test";Connectioncon=DriverManager.getConnection(url,user,password);5)連接PostgreSQL數(shù)據(jù)庫(kù)Class.forName("org.postgresql.Driver");Stringurl="JDBC:postgresql://localhost/testDb";Stringuser="test";Stringpassword="test";Connectioncon=DriverManager.getConnection(url,user,password);6)連接Access數(shù)據(jù)庫(kù)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Stringurl="JDBC:odbc:Driver={MicrosoftAccessDriver(*.mdb)};DBQ="+application.getRealPath("/Data/testDb/mdb");Connectionconn=DriverManager.getConnection(url,"","");7連接Sybase數(shù)據(jù)庫(kù)Class.forName("com.sybase.JDBC.SybDriver");Stringurl="JDBC:sybase:Tds:localhost:5007/testDb";Propertiespro=System.getProperties();pro.put("user","userId");pro.put("password","user_password");Connectioncon=DriverManager.getConnection(url,pro);8連接informix數(shù)據(jù)庫(kù)Class.forName("rmix.JDBC.ifxDriver");Stringurl="JDBC:informix-sqli:localhost:1533/testDb:INFORMIXSERVER=myserver"user=testUser;password=testpassword";Connectioncon=DriverManager.getConnection(url);就是那個(gè)保存數(shù)組面試題目問(wèn)題dataset和list的使用區(qū)別java框架問(wèn)題spring3.0springstrutshibernate內(nèi)存溢出為何會(huì)出現(xiàn)內(nèi)存溢出如何處理內(nèi)存溢出dataset的幾個(gè)實(shí)現(xiàn)標(biāo)準(zhǔn)html寫界面的code前臺(tái)界面的一些封裝類能夠直接使用的有哪些JavaScript內(nèi)置對(duì)象JavaScriptDOM對(duì)象什么是線程安全什么是不安全?shh架構(gòu)struts關(guān)于action的使用還有就是java的一些細(xì)節(jié)問(wèn)題我記不住了你網(wǎng)上搜搜華為java面試會(huì)有好多看看就好了.二、面試十大算法題目字符串如果IDE沒(méi)有代碼自動(dòng)補(bǔ)全功能,因此你應(yīng)該記住下面的這些方法。鏈表在Java中,鏈表的實(shí)現(xiàn)非常簡(jiǎn)單,每個(gè)節(jié)點(diǎn)Node都有一個(gè)值val和指向下個(gè)節(jié)點(diǎn)的鏈接next。classNode{ intval; Nodenext; Node(intx){ val=x; next=null; }}將這些全部實(shí)現(xiàn),而且記憶。常見(jiàn)排序算法:說(shuō)明各個(gè)排序算法的具體實(shí)現(xiàn)。關(guān)于直觀展示各個(gè)排序算法的gif圖片。Verygood程序員必知的8種算法集中排序算法的比較快速排序:基本思想:先從隊(duì)列中取出一個(gè)數(shù)據(jù)作為基準(zhǔn)。分區(qū)過(guò)程,將比這個(gè)數(shù)大的都放它右邊,比它小的都放左邊。在針對(duì)左右區(qū)間,分別執(zhí)行上述操作,直到左右區(qū)間都只剩下一個(gè)數(shù)。采用的核心思路是遞歸的思路:挖坑填數(shù)加分治法(1)基本思想:選擇一個(gè)基準(zhǔn)元素,一般選擇第一個(gè)元素或者最后一個(gè)元素,經(jīng)過(guò)一趟掃描,將待排序列分成兩部分,一部分比基準(zhǔn)元素小,一部分大于等于基準(zhǔn)元素,此時(shí)基準(zhǔn)元素在其排好序后的正確位置,然后再用同樣的方法遞歸地排序劃分的兩部分。(2)實(shí)例:實(shí)現(xiàn):privatevoidquickSort(int[]array,intfrom,intto){

if(from<to){

inttemp=array[to];

inti=from-1;

for(intj=from;j<to;j++){

if(array[j]<=temp){

i++;

inttempValue=array[j];

array[j]=array[i];

array[i]=tempValue;

}

}

array[to]=array[i+1];

array[i+1]=temp;

quickSort(array,from,i);

quickSort(array,i+1,to);

}

}歸并排序介紹:歸并排序(Mergesort,臺(tái)灣譯作:合并排序)是建立在歸并操作上的一種有效的\o"排序"排序\o"算法"算法。該算法是采用\o"分治法"分治法(DivideandConquer)的一個(gè)非常典型的應(yīng)用步驟:申請(qǐng)空間,使其大小為兩個(gè)已經(jīng)排序序列之和,該空間用來(lái)存放合并后的序列設(shè)定兩個(gè)指針,最初位置分別為兩個(gè)已經(jīng)排序序列的起始位置比較兩個(gè)指針?biāo)赶虻脑?,選擇相對(duì)小的元素放入到合并空間,并移動(dòng)指針到下一位置重復(fù)步驟3直到某一指針達(dá)到序列尾將另一序列剩下的所有元素直接復(fù)制到合并序列尾(1)基本排序:歸并(Merge)排序法是將兩個(gè)(或兩個(gè)以上)有序表合并成一個(gè)新的有序表,即把待排序序列分為若干個(gè)子序列,每個(gè)子序列是有序的。然后再把有序子序列合并為整體有序序列。(2)實(shí)例:實(shí)現(xiàn)-1publicvoidmergeSort(int[]data,intleft,intright){

//TODOAuto-generatedmethodstub

if(left<right){

//找出中間索引

intcenter=(left+right)/2;

//對(duì)左邊數(shù)組進(jìn)行遞歸

mergeSort(data,left,center);

//對(duì)右邊數(shù)組進(jìn)行遞歸

mergeSort(data,center+1,right);

//合并

merge(data,left,center,right);

}

}

publicvoidmerge(int[]data,intleft,intcenter,intright){

//TODOAuto-generatedmethodstub

int[]tmpArr=newint[data.length];

intmid=center+1;

//third記錄中間數(shù)組的索引

intthird=left;

inttmp=left;

while(left<=center&&mid<=right){

//從兩個(gè)數(shù)組中取出最小的放入中間數(shù)組

if(data[left]<=data[mid]){

tmpArr[third++]=data[left++];

}else{

tmpArr[third++]=data[mid++];

}

}

//剩余部分依次放入中間數(shù)組

while(mid<=right){

tmpArr[third++]=data[mid++];

}

while(left<=center){

tmpArr[third++]=data[left++];

}

//將中間數(shù)組中的內(nèi)容復(fù)制回原數(shù)組

while(tmp<=right){

data[tmp]=tmpArr[tmp++];

}

System.out.println(Arrays.toString(data));

}堆排序介紹:堆積排序(Heapsort)是指利用\o"堆(數(shù)據(jù)結(jié)構(gòu))"堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。堆是一個(gè)近似\o"完全二叉樹"完全二叉樹的結(jié)構(gòu),并同時(shí)滿足堆性質(zhì):即子結(jié)點(diǎn)的鍵值或索引總是小于(或者大于)它的父節(jié)點(diǎn)。步驟:(1)基本思想:堆排序是一種樹形選擇排序,是對(duì)直接選擇排序的有效改進(jìn)。堆的定義如下:具有n個(gè)元素的序列(h1,h2,...,hn),當(dāng)且僅當(dāng)滿足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1)(i=1,2,...,n/2)時(shí)稱之為堆。在這里只討論滿足前者條件的堆。由堆的定義能夠看出,堆頂元素(即第一個(gè)元素)必為最大項(xiàng)(大頂堆)。完全二叉樹能夠很直觀地表示堆的結(jié)構(gòu)。堆頂為根,其它為左子樹、右子樹。初始時(shí)把要排序的數(shù)的序列看作是一棵順序存儲(chǔ)的二叉樹,調(diào)整它們的存儲(chǔ)序,使之成為一個(gè)堆,這時(shí)堆的根節(jié)點(diǎn)的數(shù)最大。然后將根節(jié)點(diǎn)與堆的最后一個(gè)節(jié)點(diǎn)交換。然后對(duì)前面(n-1)個(gè)數(shù)重新調(diào)整使之成為堆。依此類推,直到只有兩個(gè)節(jié)點(diǎn)的堆,并對(duì)它們作交換,最后得到有n個(gè)節(jié)點(diǎn)的有序序列。從算法描述來(lái)看,堆排序需要兩個(gè)過(guò)程,一是建立堆,二是堆頂與堆的最后一個(gè)元素交換位置。因此堆排序有兩個(gè)函數(shù)組成。一是建堆的滲透函數(shù),二是重復(fù)調(diào)用滲透函數(shù)實(shí)現(xiàn)排序的函數(shù)。(2)實(shí)例:初始序列:46,79,56,38,40,84建堆:交換,從堆中踢出最大數(shù)剩余結(jié)點(diǎn)再建堆,再交換踢出最大數(shù)依次類推:最后堆中剩余的最后兩個(gè)結(jié)點(diǎn)交換,踢出一個(gè),排序完成。publicvoidheapSort(int[]a){

System.out.println("開始排序");

intarrayLength=a.length;

//循環(huán)建堆

for(inti=0;i<arrayLength;i++){

//建堆

buildMaxHeap(a,arrayLength-1-i);

//交換堆頂和最后一個(gè)元素

swap(a,0,arrayLength-1-i);

System.out.println(Arrays.toString(a));

}

}

privatevoidswap(int[]data,inti,intj){

inttemp=data[i];

data[i]=data[j];

data[j]=temp;

}

privatevoidbuildMaxHeap(int[]data,intlastIndex){

//從lastIndex處節(jié)點(diǎn)(最后一個(gè)節(jié)點(diǎn))的父節(jié)點(diǎn)開始

for(inti=(lastIndex-1)/2;i>=0;i--){

//k保存正在判斷的節(jié)點(diǎn)

intk=i;

//如果當(dāng)前k節(jié)點(diǎn)的子節(jié)點(diǎn)存在

while(k*2+1<=lastIndex){

//k節(jié)點(diǎn)的左子節(jié)點(diǎn)的索引

intbiggerIndex=2*k+1;

//如果biggerIndex小于lastIndex,即biggerIndex+1代表的k節(jié)點(diǎn)的右子節(jié)點(diǎn)存在

if(biggerIndex<lastIndex){

//若果右子節(jié)點(diǎn)的值較大

if(data[biggerIndex]<data[biggerIndex+1]){

//biggerIndex總是記錄較大子節(jié)點(diǎn)的索引

biggerIndex++;

}

}

//如果k節(jié)點(diǎn)的值小于其較大的子節(jié)點(diǎn)的值

if(data[k]<data[biggerIndex]){

//交換她們

swap(data,k,biggerIndex);

//將biggerIndex賦予k,開始while循環(huán)的下一次循環(huán),重新保證k節(jié)點(diǎn)的值大于其左右子節(jié)點(diǎn)的值

k=biggerIndex;

}else{

break;

}

}

}

}選擇排序選擇排序(Selectionsort)是一種簡(jiǎn)單直觀的\o"排序算法"排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再?gòu)氖S辔磁判蛟刂欣^續(xù)尋找最小元素,然后放到排序序列末尾。以此類推,直到所有元素均排序完畢。簡(jiǎn)單選擇排序:(1)基本思想:在要排序的一組數(shù)中,選出最小的一個(gè)數(shù)與第一個(gè)位置的數(shù)交換;然后在剩下的數(shù)當(dāng)中再找最小的與第二個(gè)位置的數(shù)交換,如此循環(huán)到倒數(shù)第二個(gè)數(shù)和最后一個(gè)數(shù)比較為止。(2)實(shí)例:實(shí)現(xiàn)-1publicvoidselectSort(int[]a){

intposition=0;

for(inti=0;i<a.length;i++){

intj=i+1;

position=i;

inttemp=a[i];

for(;j<a.length;j++){

if(a[j]<temp){

temp=a[j];

position=j;

}

}

a[position]=a[i];

a[i]=temp;

}

}冒泡排序與交換排序有點(diǎn)類似冒泡排序(BubbleSort,臺(tái)灣譯為:泡沫排序或氣泡排序)是一種簡(jiǎn)單的\o"排序算法"排序算法。它重復(fù)地走訪過(guò)要排序的數(shù)列,一次比較兩個(gè)元素,如果她們的順序錯(cuò)誤就把她們交換過(guò)來(lái)。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說(shuō)該數(shù)列已經(jīng)排序完成。這個(gè)算法的名字由來(lái)是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端。步驟:比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換她們兩個(gè)。對(duì)每一對(duì)相鄰元素作同樣的工作,從開始第一對(duì)到結(jié)尾的最后一對(duì)。在這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù)。針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。持續(xù)每次對(duì)越來(lái)越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。(1)基本思想:在要排序的一組數(shù)中,對(duì)當(dāng)前還未排好序的范圍內(nèi)的全部數(shù),自上而下對(duì)相鄰的兩個(gè)數(shù)依次進(jìn)行比較和調(diào)整,讓較大的數(shù)往下沉,較小的往上冒。即:每當(dāng)兩相鄰的數(shù)比較后發(fā)現(xiàn)它們的排序與排序要求相反時(shí),就將它們互換。(2)實(shí)例:實(shí)現(xiàn)1-第一種實(shí)現(xiàn)方式bymyselfpublicvoidBubbleSort(int[]a){

for(inti=0;i<a.length;i++){

for(intj=i+1;j<a.length;j++){

if(a[i]>a[j]){

swap(a,i,j);

//inttemp;

//temp=a[j];

//a[j]=a[i];

//a[i]=temp;

}

}

}

}

publicvoidswap(int[]args,inta,intb){

inttemp;

temp=args[b];

args[b]=args[a];

args[a]=temp;

}此實(shí)現(xiàn)類似于交換排序?qū)崿F(xiàn)-2正宗的冒泡排序publicstaticvoidbubbleSort(int[]array){

//下兩種選擇一種即可

///方式1

for(inti=array.length-1;i>0;i--){

for(intj=0;j<i;j++){

if(array[j]>array[j+1]){

Sort.swap(array,j,j+1);//交換j和j+1

}

}

}

///方式2

for(inti=0;i<array.length;i++){

for(intj=0;j<array.length-1-i;j++){

if(array[j]>array[j+1]){

Sort.swap(array,j,j+1);//交換j和j+1

}

}

}

}插入排序介紹:插入排序(InsertionSort)的算法描述是一種簡(jiǎn)單直觀的\o"排序算法"排序算法。它的工作原理是經(jīng)過(guò)構(gòu)建有序序列,對(duì)于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。插入排序在實(shí)現(xiàn)上,一般采用in-place排序(即只需用到O(1)的額外空間的排序),因而在從后向前掃描過(guò)程中,需要重復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間。步驟:從第一個(gè)元素開始,該元素能夠認(rèn)為已經(jīng)被排序取出下一個(gè)元素,在已經(jīng)排序的元素序列中從后向前掃描如果該元素(已排序)大于新元素,將該元素移到下一位置重復(fù)步驟3,直到找到已排序的元素小于或者等于新元素的位置將新元素插入到該位置中重復(fù)步驟2(1)基本思想:在要排序的一組數(shù)中,假設(shè)前面(n-1)[n>=2]個(gè)數(shù)已經(jīng)是排好順序的,現(xiàn)在要把第n個(gè)數(shù)插到前面的有序數(shù)中,使得這n個(gè)數(shù)也是排好順序的。如此重復(fù)循環(huán),直到全部排好順序。(2)實(shí)例實(shí)現(xiàn)-1publicvoidinsertSort(int[]args){

for(inti=0;i<args.length;i++){

intj=i-1;

intkey=args[i];

while(j>=0&&args[j]>key){

args[j+1]=args[j];

args[j]=key;

j--;

}

}

}實(shí)現(xiàn)-2publicvoidinsertSort(int[]args){

for(inti=0;i<args.length;i++){

intj=i-1;

intkey=args[i];

for(;j>=0&&args[j]>key;j--){

args[j+1]=args[j];

//args[j]=key;

}

args[j+1]=key;

}

}希爾排序是針對(duì)插入排序的一個(gè)直接優(yōu)化。介紹:希爾排序,也稱遞減增量排序算法,是\o"插入排序"插入排序的一種高速而穩(wěn)定的改進(jìn)版本。希爾排序是基于插入排序的以下兩點(diǎn)性質(zhì)而提出改進(jìn)方法的:1、插入排序在對(duì)幾乎已經(jīng)排好序的數(shù)據(jù)操作時(shí),效率高,即能夠達(dá)到\o"線性排序"線性排序的效率2、但插入排序一般來(lái)說(shuō)是低效的,因?yàn)椴迦肱判蛎看沃荒軐?shù)據(jù)移動(dòng)一位>希爾排序(最小增量排序)1)基本思想:算法先將要排序的一組數(shù)按某個(gè)增量d(n/2,n為要排序數(shù)的個(gè)數(shù))分成若干組,每組中記錄的下標(biāo)相差d.對(duì)每組中全部元素進(jìn)行直接插入排序,然后再用一個(gè)較小的增量(d/2)對(duì)它進(jìn)行分組,在每組中再進(jìn)行直接插入排序。當(dāng)增量減到1時(shí),進(jìn)行直接插入排序后,排序完成。(2)實(shí)例:實(shí)現(xiàn):publicvoidshellSort(int[]a){

doubled1=a.length;

inttemp=0;

while(true){

d1=Math.ceil(d1/2);//math.ceil(x)返回大于參數(shù)x的最小整數(shù),即對(duì)浮點(diǎn)數(shù)向上取整

intd=(int)d1;

for(intx=0;x<d;x++){

for(inti=x+d;i<a.length;i+=d){

intj=i-d;

temp=a[i];

for(;j>=0&&a[j]>temp;j-=d){

a[j+d]=a[j];

//a[j]=temp;

}

a[j+d]=temp;

}

}

if(d==1){

break;

}

}

}基數(shù)排序(1)基本思想:將所有待比較數(shù)值(正整數(shù))統(tǒng)一為同樣的數(shù)位長(zhǎng)度,數(shù)位較短的數(shù)前面補(bǔ)零。然后,從最低位開始,依次進(jìn)行一次排序。這樣從最低位排序一直到最高位排序完成以后,數(shù)列就變成一個(gè)有序序列。(2)實(shí)例:實(shí)現(xiàn)publicvoidsort(int[]array){

//首先確定排序的趟數(shù);

intmax=array[0];

for(inti=1;i<array.length;i++){

if(array[i]>max){

max=array[i];

}

}

inttime=0;

//判斷位數(shù);

while(max>0){

max/=10;

time++;

}

//建立10個(gè)隊(duì)列;

List<ArrayList>queue=newArrayList<ArrayList>();

for(inti=0;i<10;i++){

ArrayList<Integer>queue1=newArrayList<Integer>();

queue.add(queue1);

}

//進(jìn)行time次分配和收集;

for(inti=0;i<time;i++){

//分配數(shù)組元素;

for(intj=0;j<array.length;j++){

//得到數(shù)字的第time+1位數(shù);

intx=array[j]%(int)Math.pow(10,i+1)/(int)Math.pow(10,i);

ArrayList<Integer>queue2=queue.get(x);

queue2.add(array[j]);

queue.set(x,queue2);

}

intcount=0;//元素計(jì)數(shù)器;

//收集隊(duì)列元素;

for(intk=0;k<10;k++){

while(queue.get(k).size()>0){

ArrayList<Integer>queue3=queue.get(k);

array[count]=queue3.get(0);

queue3.remove(0);

count++;

}

}

}//endfor

}遞歸vs迭代三、面經(jīng)1-2-3面經(jīng)-1博主畢業(yè)快滿三年了,由于種種原因想換一份工作。學(xué)了7年計(jì)算機(jī)技術(shù),在當(dāng)前的行業(yè)用到的技術(shù)不多,還是想去尋找一份互聯(lián)網(wǎng)行業(yè)的工作,這樣更能學(xué)以致用發(fā)揮自己的特長(zhǎng)。從上次更新博客到現(xiàn)在已經(jīng)三周左右了,這三周博客基本斷更了,現(xiàn)在找工作也基本收尾了,來(lái)聊一聊我所遇到的一些面試經(jīng)歷,希望給各位尋求新機(jī)會(huì)的小伙伴一個(gè)參考??偣裁嫱?家收了7個(gè)offer,應(yīng)該算是比較成功的吧。博文中主要還是聊一下技術(shù)相關(guān)的,博文中所涉及的公司均以代號(hào)標(biāo)志,不便透露細(xì)節(jié)。第一家面試的公司是一家互聯(lián)網(wǎng)創(chuàng)業(yè)公司,這里簡(jiǎn)稱D,博主對(duì)這家公司的印象還是不錯(cuò)的,共面試了5輪,筆試一輪,技術(shù)面3輪,最后一輪是HR面。雖然公司總共員工只有小幾百人,可是做事比較專業(yè),很多大型的成熟公司也未必做得更好。首先說(shuō)說(shuō)筆試,很多一些小的公司,就是從網(wǎng)上題庫(kù)中拉點(diǎn)選擇題讓你做做,之后的面試和筆試題無(wú)關(guān),這里我遇到的筆試題是和第一輪技術(shù)面相關(guān)的,有點(diǎn)小套路。筆試題據(jù)博主的回憶,共有這么些題(都是簡(jiǎn)答題):1.寫出java中synchronized的使用方式。能夠參考:Java多線程知識(shí)小抄集(一)2.Java中設(shè)置最大堆和最小堆內(nèi)存的參數(shù)是什么?-Xmx-Xms3.volatile的作用??jī)牲c(diǎn):內(nèi)存可見(jiàn)性;防止指令重排序;4.寫一個(gè)二分查找算法5.寫一個(gè)你熟悉的設(shè)計(jì)模式,畫出UML圖,說(shuō)出此模式的作用以及寫出此模式的主要方法。6.一道設(shè)計(jì)題。(略)7.BeanFactory和ApplicationContext的區(qū)別。(Sping的容器能夠分為兩種類型:1.BeanFactory:(org.springframework.beans.factory.BeanFactory接口定義)是最簡(jiǎn)答的容器,提供了基本的DI支持。最常見(jiàn)的BeanFactory實(shí)現(xiàn)就是XmlBeanFactory類,它根據(jù)XML文件中的定義加載beans,該容器從XML文件讀取配置元數(shù)據(jù)并用它去創(chuàng)立一個(gè)完全配置的系統(tǒng)或應(yīng)用。2.ApplicationContext應(yīng)用上下文:org.springframework.context.ApplicationContext)基于BeanFactory之上構(gòu)建,并提供面向應(yīng)用的服務(wù)。)(第4,5題在下面會(huì)解釋)第一輪技術(shù)面主要根據(jù)簡(jiǎn)歷以及筆試題進(jìn)行論述。先將筆試題,首先是寫出一個(gè)熟悉的設(shè)計(jì)模式,那當(dāng)然寫個(gè)單例咯,這個(gè)最簡(jiǎn)單嘛,主要是UML圖也特別好畫。詳細(xì)能夠參考設(shè)計(jì)模式:?jiǎn)卫J剑⊿ingleton)。博主寫的是內(nèi)部類的寫法:這種寫法是懶漢式線程安全的寫法。面試官問(wèn)到一個(gè)問(wèn)題:為什么這種寫法是線程安全的?那么這里就設(shè)計(jì)到一個(gè)JVM加載的知識(shí):JVM內(nèi)部機(jī)制能夠保證在執(zhí)行類構(gòu)造器()方法的時(shí)候是線程安全的,詳細(xì)能夠參考博文:Java虛擬機(jī)類加載機(jī)制。。這里博主還特意說(shuō)了虛擬機(jī)規(guī)范嚴(yán)格規(guī)定了有且只有5種情況(JDK7)必須對(duì)類進(jìn)行初始化(執(zhí)行類構(gòu)造器()方法):遇到new,getstatic,putstatic,invokestatic這失調(diào)字節(jié)碼指令時(shí),如果類沒(méi)有進(jìn)行過(guò)初始化,則需要先觸發(fā)其初始化。生成這4條指令的最常見(jiàn)的Java代碼場(chǎng)景是:使用new關(guān)鍵字實(shí)例化對(duì)象的時(shí)候、讀取或設(shè)置一個(gè)類的靜態(tài)字段(被final修飾、已在編譯器把結(jié)果放入常量池的靜態(tài)字段除外)的時(shí)候,以及調(diào)用一個(gè)類的靜態(tài)方法的時(shí)候。使用java.lang.reflect包的方法對(duì)類進(jìn)行反射調(diào)用的時(shí)候,如果類沒(méi)有進(jìn)行過(guò)初始化,則需要先觸發(fā)其初始化。當(dāng)初始化一個(gè)類的時(shí)候,如果發(fā)現(xiàn)其父類還沒(méi)有進(jìn)行過(guò)初始化,則需要先觸發(fā)其父類的初始化。當(dāng)虛擬機(jī)啟動(dòng)時(shí),用戶需要指定一個(gè)要執(zhí)行的主類(包含main()方法的那個(gè)類),虛擬機(jī)會(huì)先初始化這個(gè)主類。當(dāng)使用jdk1.7動(dòng)態(tài)語(yǔ)言支持時(shí),如果一個(gè)java.lang.invoke.MethodHandle實(shí)例最后的解析結(jié)果REF_getstatic,REF_putstatic,REF_invokeStatic的方法句柄,而且這個(gè)方法句柄所對(duì)應(yīng)的類沒(méi)有進(jìn)行初始化,則需要先出觸發(fā)其初始化。特別是第5點(diǎn),是個(gè)特別偏冷的知識(shí)點(diǎn),當(dāng)你記住這個(gè)的時(shí)候,能夠給面試官留下一個(gè)很好的印象。在后面的博文中會(huì)經(jīng)常涉及這種冷知識(shí),能夠讓你的面試過(guò)程添加幾處亮點(diǎn)。下面就是要說(shuō)明一下的二分查找法(首先確保被排序的數(shù)組有序),這里有兩種寫法:遞歸和非遞歸的寫法。博主憋了一個(gè)遞歸的算法,不過(guò)最好還是用非遞歸的寫法。二分查找法還是很容易的,關(guān)鍵這里引申出了變種算法,譬如:給你一個(gè)key,找出這個(gè)數(shù)組中最左邊的key,或者最右邊的key。當(dāng)然還有其它變種算法,有興趣的朋友能夠自行查找相關(guān)資料。接下去就根據(jù)簡(jiǎn)歷聊一聊項(xiàng)目和Java基礎(chǔ)了。下面稍微列舉一些問(wèn)題:1.Memcached和Redis的區(qū)別?參考:Redis和Memcached的區(qū)別2.ActiveMQ的集群配置方式有哪些?(基于共享文件,基于數(shù)據(jù)庫(kù),基于Zookeeper等)3.Mybatis的一些知識(shí)點(diǎn)。(略)4.虛擬機(jī)的類加載機(jī)制。(加載-驗(yàn)證-準(zhǔn)備-解析-初始化,詳細(xì)能夠參考

Java虛擬機(jī)類加載機(jī)制))5.內(nèi)部類相關(guān)知識(shí)點(diǎn)。6.面向?qū)ο蟮脑O(shè)計(jì)原則?參考:面向?qū)ο蟮脑O(shè)計(jì)原則7.SpringAop的原理?動(dòng)態(tài)代理。8.Spring常見(jiàn)的注解?9.NIO的相關(guān)。參考:攻破JAVANIO技術(shù)壁壘10.數(shù)據(jù)庫(kù)優(yōu)化相關(guān)。(博主基本不直接接觸數(shù)據(jù)庫(kù),so遇到此類問(wèn)題直接say:Idon’tknow.有興趣的小伙伴能夠自行查閱一些資料,譬如數(shù)據(jù)訪問(wèn)優(yōu)化漏斗法則。)11.linux下查看文件有哪些方式?cattacheadtailmorelessnlvimvigvim技術(shù)面二面約好的10:00電面,11:30也沒(méi)來(lái),后來(lái)咨詢了HR才說(shuō)面試官出差去了。。。好吧,畢竟公司還在創(chuàng)業(yè)初期,管理上有疏忽能夠理解。第二次約的2面同樣是10:00,這次是10:27來(lái)的電話。額。。。這此的面試官仿佛是CTO,面的也比較深一些:1.談?wù)勀銓?duì)HashMap的理解,怎么樣去保證線程安全?博主對(duì)HashMap巴拉巴拉的一陣,能夠參考:Java集合框架:HashMap.

.然后有三種方法能夠保證hashMap的線程安全:換成HashTable;用synchronizedMap包裝一下HashMap;換成ConcurrentHashMap。然后補(bǔ)了一句ConcurrentHashMap是比較推崇的,然后就被問(wèn)了另一個(gè)問(wèn)題:說(shuō)一下ConcurrentHashMap的實(shí)現(xiàn)原理。然后解釋了一下,最后問(wèn)了個(gè)問(wèn)題:用HashMap怎么去實(shí)現(xiàn)ConcurrentHashMap?當(dāng)時(shí)想了一個(gè),覺(jué)得不okay,想說(shuō)第二個(gè)方案就被制止了?,F(xiàn)在想想:把HashMap用Collections.synchronizedMap()包裝一下替換屌Segment即可。(如果不知所云,請(qǐng)閱讀一下ConcurrentHashMap的源碼先~~)補(bǔ)充:這里還問(wèn)了平常見(jiàn)了那些線程安全的隊(duì)列,包括:ConcurrentLinkedQueue,ConcurrentLinkedDeque以及BlockingQueue系列。2.Java集合中有哪些常見(jiàn)的類?ArrayList的上級(jí)(父類或者接口)是什么,HashMap的上級(jí)又是什么?常見(jiàn)的類:Map系(HashMap,LinkedHashMap,TreeMap,WeakHashMap,EnumMap等);List系(ArrayList,LinkedList,Vector,Stack等);Set系(HashSet,LinkedHashSet,TreeSet);工具類(Collections,Arrays)。這里如果說(shuō)出來(lái)了,就必須對(duì)其十分了解,比如博主在另一家互聯(lián)網(wǎng)公司W(wǎng)的面試過(guò)程中就被問(wèn)到:你對(duì)java集合了解有多少?博主說(shuō):我看過(guò)所有集合的源碼。然后就被問(wèn)到:Collections.sort()里面的實(shí)現(xiàn)是什么排序算法?這個(gè)問(wèn)題確實(shí)夠冷門的!幸虧看過(guò),不然就被打臉了。。(TimSort,加強(qiáng)型歸并排序)ArrayListextendsAbstractListimplementsList,RandomAccess,Cloneable,Serializable.然后AbstractList又繼承了AbstractCollection.然后List和AbstractCollection又都implements了Collection.HashMapextendsAbstractMapimplementsMap,Cloneable,Serializable.3.css導(dǎo)入方式?這個(gè)只要2周不沒(méi)看過(guò)就會(huì)忘記。。博主當(dāng)時(shí)就忘記了。。超簡(jiǎn)單的題,可是又是最不起眼的題,細(xì)節(jié)做的不夠好。4.js中的ajax操作的方式?這個(gè)寫的太多了,因此答起來(lái)很easy5.一句話概括NIO。博主說(shuō)了一通,包括Reactor模式神馬的??墒敲嬖嚬僬f(shuō):你說(shuō)的也很對(duì),可是不是我想要的結(jié)果。斯巴達(dá)。。。6.設(shè)計(jì)數(shù)據(jù)庫(kù)的一道題,比較簡(jiǎn)單,不贅述。7.常見(jiàn)的linux命令?(這個(gè)被用了好多次了)8.SpringIOC的原理?答案:基于反射9.數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別?UncommitRead;CommitRead;RepeatedRead;Serializable.10.memcached與Redis的區(qū)別?技術(shù)三面之前說(shuō)過(guò)博主對(duì)數(shù)據(jù)庫(kù)相關(guān)的知識(shí),除了會(huì)寫SQL之外,其它的基本白癡。這次面試將近40mins,差不多被問(wèn)了30mins的數(shù)據(jù)庫(kù)的知識(shí)。比如:數(shù)據(jù)庫(kù)優(yōu)化;訪問(wèn)多少條數(shù)據(jù),數(shù)據(jù)庫(kù)的反應(yīng)延遲是多少;表和視圖的區(qū)別。當(dāng)然還有一些其它的,譬如Spring中的注解在xml文件中怎么配置?面試過(guò)程中有兩種問(wèn)題比較難答:第一種,冷門知識(shí),比如Colletions.sort()用到什么排序算法?第二種就是上面的這種特別簡(jiǎn)單,用過(guò)的都知道,可是像這種在Spring配置文件中配置完之后就基本不動(dòng)了,因此特別容易遺忘。還有類似的比如:Spring中的自動(dòng)裝配怎么配置?HR面最后是HR面,這個(gè)最簡(jiǎn)單,只要言語(yǔ)不過(guò)激都是okay的,主要談?wù)勗谠瓉?lái)公司主要做什么,為什么要換份新工作,期望薪資神馬的。(ps:談薪資是門藝術(shù),同樣兩個(gè)人,面試打分也是一樣的,可是薪資會(huì)談和不會(huì)談之間可能相差很多,這門藝術(shù)博主還在研究中,雖然有所收獲,可是還是不敢出來(lái)賣弄,等博主把人事六大塊之一的薪酬領(lǐng)悟之后再來(lái)探討探討。)總結(jié)博主總結(jié)幾個(gè)心得,僅供參考:面試第一要素:不要緊張,如果你真是技術(shù)族,而且對(duì)技術(shù)有所癡迷,一聊起技術(shù)來(lái)根本不會(huì)緊張。面試第二要素:要對(duì)簡(jiǎn)歷上的內(nèi)容了如指掌,包括原理源碼,如果略懂或者根本就是用了幾天就再也沒(méi)用過(guò)的技術(shù)就從簡(jiǎn)歷上刪掉吧,否則被面試官抓住不放就糟糕了。面試第三要素:學(xué)會(huì)引導(dǎo)面試,掌握主動(dòng)權(quán)。這門技藝需要多去混點(diǎn)面筋,然后自我優(yōu)化之后,一般都能夠掌握。面試第四要素:做人要低調(diào)。面試你這個(gè)職位的人的技術(shù)肯定比這個(gè)職位高好幾個(gè)level,不要覺(jué)得你回答了你非常熟悉的問(wèn)題就高調(diào)起來(lái),面試官隨時(shí)能夠挖出一堆坑來(lái)讓你往里面跳。面試第五要素:要自信。有些面試官會(huì)對(duì)某些你回答完問(wèn)題之后會(huì)補(bǔ)一句:你確定?這時(shí)候就要看你自己了,有可能面試官再提醒你,也有可能再詐你。歸根結(jié)底還是要技術(shù)掌握的夠硬,底氣就足一些。面經(jīng)-2H:\01--B.——個(gè)人文檔\gxy\簡(jiǎn)歷\2面經(jīng)-3H:\01--B.——個(gè)人文檔\gxy\簡(jiǎn)歷\3面經(jīng)-4H:\01--B.——個(gè)人文檔\gxy\簡(jiǎn)歷\4四、常見(jiàn)工具類、集合等的操作。面向?qū)ο蠛兔嫦蜻^(guò)程的區(qū)別面向過(guò)程:優(yōu)點(diǎn):性能比面向?qū)ο蟾撸驗(yàn)轭愓{(diào)用時(shí)需要實(shí)例化,開銷比較大,比較消耗資源;比如單片機(jī)、嵌入式開發(fā)、Linux/Unix等一般采用面向過(guò)程開發(fā),性能是最重要的因素。

缺點(diǎn):沒(méi)有面向?qū)ο笠拙S護(hù)、易復(fù)用、易擴(kuò)展面向?qū)ο?/p>

優(yōu)點(diǎn):易維護(hù)、易復(fù)用、易擴(kuò)展,由于面向?qū)ο笥蟹庋b、繼承、多態(tài)性的特性,能夠設(shè)計(jì)出低耦合的系統(tǒng),使系統(tǒng)更加靈活、更加易于維護(hù)

缺點(diǎn):性能比面向過(guò)程低Java的四個(gè)基本特性(抽象、封裝、繼承,多態(tài))抽象:就是把現(xiàn)實(shí)生活中的某一類東西提取出來(lái),用程序代碼表示,我們一般叫做類或者接口。抽象包括兩個(gè)方面:一個(gè)是數(shù)據(jù)抽象,一個(gè)是過(guò)程抽象。數(shù)據(jù)抽象也就是對(duì)象的屬性。過(guò)程抽象是對(duì)象的行為特征。封裝:把客觀事物封裝成抽象的類,而且類能夠把自己的數(shù)據(jù)和方法只讓可信的類或者對(duì)象操作,對(duì)不可信的進(jìn)行封裝隱藏。封裝分為屬性的封裝和方法的封裝。

繼承:是對(duì)有著共同特性的多類事物,進(jìn)行再抽象成一個(gè)類。這個(gè)類就是多類事物的父類。父類的意義在于抽取多類事物的共性。多態(tài):允許不同類的對(duì)象對(duì)同一消息做出響應(yīng)。方法的重載、類的覆蓋正體現(xiàn)了多態(tài)。重載和重寫的區(qū)別 重載:發(fā)生在同一個(gè)類中,方法名必須相同,參數(shù)類型不同、個(gè)數(shù)不同、順序不同,方法返回值和訪問(wèn)修飾符能夠不同,發(fā)生在編譯時(shí)。

重寫:發(fā)生在父子類中,方法名、參數(shù)列表必須相同,返回值小于等于父類,拋出的異常小于等于父類,訪問(wèn)修飾符大于等于父類;如果父類方法訪問(wèn)修飾符為private則子類中就不是重寫。構(gòu)造器Constructor是否可被override構(gòu)造器不能被重寫,不能用static修飾構(gòu)造器,只能用publicprivateprotected這三個(gè)權(quán)限修飾符,且不能有返回語(yǔ)句。訪問(wèn)控制符public,protected,private,以及默認(rèn)的區(qū)別private只有在本類中才能訪問(wèn);public在任何地方都能訪問(wèn);protected在同包內(nèi)的類及包外的子類能訪問(wèn);默認(rèn)不寫在同包內(nèi)能訪問(wèn)。是否能夠繼承String類String類是final類故不能夠繼承,一切由final修飾過(guò)的都不能繼承String和StringBuffer、StringBuilder的區(qū)別可變性:String類中使用字符數(shù)組保存字符串,privatefinalcharvalue[],因此string對(duì)象是不可變的。StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字符數(shù)組保存字符串,char[]value,這兩種對(duì)象都是可變的。線程安全性:String中的對(duì)象是不可變的,也就能夠理解為常量,線程安全。AbstractStringBuilder是StringBuilder與StringBuffer的公共父類,定義了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer對(duì)方法加了同步鎖或者對(duì)調(diào)用的方法加了同步鎖,因此是線程安全的。StringBuilder并沒(méi)有對(duì)方法進(jìn)行加同步鎖,因此是非線程安全的。性能:每次對(duì)String類型進(jìn)行改變的時(shí)候,都會(huì)生成一個(gè)新的String對(duì)象,然后將指針指向新的String對(duì)象。StringBuffer每次都會(huì)對(duì)StringBuffer對(duì)象本身進(jìn)行操作,而不是生成新的對(duì)象并改變對(duì)象引用。相同情況下使用StirngBuilder相比使用StringBuffer僅能獲得10%~15%左右的性能提升,但卻要冒多線程不安全的風(fēng)險(xiǎn)。hashCode和equals方法的關(guān)系equals相等,hashcode必相等;hashcode相等,equals可能不相等。抽象類和接口的區(qū)別語(yǔ)法層次:抽象類和接口分別給出了不同的語(yǔ)法定義設(shè)計(jì)層次:抽象層次不同,抽象類是對(duì)類抽象,而接口是對(duì)行為的抽象。抽象類是對(duì)整個(gè)類整體進(jìn)行抽象,包括屬性、行為,可是接口卻是對(duì)類局部(行為)進(jìn)行抽象。跨域不同,抽象類所體現(xiàn)的是一種繼承關(guān)系,要想使得繼承關(guān)系合理,父類和派生類之間必須存在”is-a”關(guān)系,即父類和派生類在概念本質(zhì)上應(yīng)該是相同的。對(duì)于接口則不然,并不要求接口的實(shí)現(xiàn)者和接口定義在概念本質(zhì)上是一致的,僅僅是實(shí)現(xiàn)了接口定義的契約而已,”like-a”的關(guān)系。。設(shè)計(jì)層次不同,抽象類是自底向上抽象而來(lái)的,接口是自頂向下設(shè)計(jì)出來(lái)的。自動(dòng)裝箱與拆箱裝箱:將基本類型用它們對(duì)應(yīng)的引用類型包裝起來(lái);拆箱:將包裝類型轉(zhuǎn)換為基本數(shù)據(jù)類型;Java使用自動(dòng)裝箱

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論