如何面試java工程師
如何面試java工程師(一)
1、 類、對象的概念:
1) 類:具有共同屬性和行為的對象的抽象。類是創(chuàng)建對象的模板。
2) 對象:現(xiàn)實(shí)世界中的實(shí)體。在計(jì)算機(jī)中,是指可標(biāo)識的存儲區(qū)域。
3) 類是對象的抽象、對象是類的實(shí)例。
2、 抽象:是從特定的實(shí)例中抽取共同性質(zhì)形成一般化概念的過程。
3、 接口與抽象類:
1)接口和抽象類都用于抽象,接口是抽象類的抽象。
2)接口中只有方法聲明,沒有實(shí)現(xiàn)(無方法體);在接口中聲明的方法具有public和abstract屬性,一個(gè)類可以實(shí)現(xiàn)多個(gè)接口(即多繼承),接口以‘,’分隔;接口中的方法必須全部實(shí)現(xiàn)。
3)抽象類可以有部分方法實(shí)現(xiàn),抽象類必須通過繼承才能使用。
4、內(nèi)部類(Inner Class):
1)內(nèi)部類是嵌套在另一個(gè)類中的類。
2)內(nèi)部類用于名稱隱藏和程序代碼的組織,另外內(nèi)部類擁有直接訪問其外部類所有成員(包括private的)的權(quán)限(無需任何關(guān)鍵字修飾)。
3)內(nèi)部類不可以在其他類或main方法里實(shí)例化,必須使用如下方法(非靜態(tài)內(nèi)部類)
外部類.內(nèi)部類 對象名=new 外部類().new 內(nèi)部類();
靜態(tài)內(nèi)部類調(diào)用方式:
外部類.內(nèi)部類 對象名=new 外部類.內(nèi)部類();
4)非靜態(tài)內(nèi)部類不可以聲明靜態(tài)成員;靜態(tài)內(nèi)部類的非靜態(tài)成員可以訪問其外部類的靜態(tài)成員,聲明為靜態(tài)的成員不可以訪問外部的非靜態(tài)成員。
5、訪問修飾符限制:
Private protected friendly(default) public
同類 Y Y Y Y
同包不同類 N Y Y Y
同包子類 N Y Y Y
不同包不同類 N N N Y
不同包子類 N Y N Y
6、Static關(guān)鍵字的使用:
1)類成員,直接使用 類名.成員 調(diào)用。
2)靜態(tài)方法只能訪問靜態(tài)成員。
3)靜態(tài)方法不能使用this、super關(guān)鍵字。
4)靜態(tài)方法不能被非靜態(tài)方法重寫或重載。
7、final關(guān)鍵字:
1)被final修飾的變量為常量不能改變。
2)被final修飾的方法不可以重寫。
3)被final修飾的類不能被繼承。
8、abstract關(guān)鍵字:
1)被abstract修飾的類不能實(shí)例化。
2)被abstract修飾的方法只能在子類中實(shí)現(xiàn)。
9、native關(guān)鍵字:非Java語言的編寫,例如JNI技術(shù)。
10、synchronized關(guān)鍵字:多線程的同步訪問控制。
11、分類列舉服務(wù)器和組件技術(shù):
1)服務(wù)器端技術(shù):Jsp、Servlet;
2)組件技術(shù):JavaBean、EJB。
12、Http與Https:Https即多了安全的Http,s(Security Socket Layer)指加密套接字協(xié)議層(簡寫SSL)。
13、OSI(Open System Interconnection)網(wǎng)絡(luò)抽象模型:
1)由國際標(biāo)準(zhǔn)化組織(ISO)提出。
2)將互聯(lián)網(wǎng)分為七層,從下至上分別為:物理層(physical)、數(shù)據(jù)鏈路層(data link)、網(wǎng)絡(luò)層(network)、傳送層(transport)、會話層(session)、表示層(presentation)、應(yīng)用層(application)。底層通過提供接口支持上層功能。各層詳解:
物理層:LAN/ATM,為硬件層。
數(shù)據(jù)鏈路層:LAN/ATM
網(wǎng)絡(luò)層:IP協(xié)議,IOS
傳輸層:TCP/UDP協(xié)議,支持Java Socket。
會話層:
表示層:HTML、XML
應(yīng)用層:HTTP協(xié)議,使用Java Servlet/JSP
<第八層(Web服務(wù)層):SOAP/UDDI>
14、J2EE的容器與服務(wù)器:
容器負(fù)責(zé)EJB組件中生命周期的控制;
服務(wù)器包含在容器外,提供系統(tǒng)級操作底層服務(wù),包括事務(wù)、事件、多線程……。
15、繼承限制:
父類對象不可以賦給子類對象,因?yàn)樽宇惪赡芫哂懈嗟某蓡T,反之可以。
16、邏輯操作:c=(a>b)?a:b;等同于下式
if(a>b) c=a; else c=b;
如何面試java工程師(二)
17、列舉常見集合框架類型:
1)List、Set、Map。由這三個(gè)接口實(shí)現(xiàn)出ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等常用集合框架。
2)Vector屬于重量級組件不推薦使用。
3)Map類型維護(hù)鍵/值對,Hashtable與HashMap相近但效率略低于HashMap、高于TreeMap,TreeMap優(yōu)點(diǎn)是可以排序。
4)Set類型可裝入唯一值,HashSet效率高于TreeSet但TreeSet可以維護(hù)內(nèi)部元素的排序狀態(tài)。
5)List類型可按某種特定順序維護(hù)元素。ArrayList允許快速隨機(jī)訪問,但如果添加或刪除位于中間的元素時(shí)效率很低;LikedList提供最佳循序訪問及快速的中間位置添加刪除元素,并有addFirst、addLast、getFirst、getLast、removeFirst、removeLast方法。
18、面向?qū)ο蟮奶卣鳎?/p>
1)繼承:通過子類可以實(shí)現(xiàn)繼承,子類繼承父類的所有狀態(tài)和行為,同時(shí)添加自身的狀態(tài)和行為。
2)封裝:將代碼及處理數(shù)據(jù)綁定在一起的一種編程機(jī)制,該機(jī)制保證程序和數(shù)據(jù)不受外部干擾。
3)多態(tài):包括重載和重寫。重載為編譯時(shí)多態(tài),重寫是運(yùn)行時(shí)多態(tài)。重載必須是同類中名稱相同參數(shù)不同(包括個(gè)數(shù)不同和類型不同),但返回類型不同不構(gòu)成重載;重寫發(fā)生于子類對父類的覆蓋,子類繼承父類方法名相同、參數(shù)列表相同、返回類型相同才構(gòu)成重寫。
19、Java命名規(guī)范:必須以英文字母、下劃線(’_’)或’$’開始,其余可以有數(shù)字但不允許 包含空格,且組合后的名稱不能是Java關(guān)鍵字或保留字。
匈牙利命名法:以m開始為類成員變量,以g開始為全局變量,以v開始為本地局部變量,常量命名一般不以下劃線、美元符開始。
駝峰命名:一般稱由多個(gè)單詞或縮寫組成的變量名,并且該變量名每個(gè)單詞首字母均為大寫(一般類名全部首字母大寫,方法或?qū)傩悦谝粋(gè)字母小寫)的稱為駝峰命名。
20、Java語言共包含47個(gè)關(guān)鍵字。
21、設(shè)計(jì)模式:
一個(gè)設(shè)計(jì)模式描述了一個(gè)被證實(shí)可行的`方案。這些方案非常普遍,是具有完整定義的最常用的模式。一般模式有4個(gè)基本要素:模式名稱(pattern name)、問題(problem)、解決方案(solution)、效果(consequences)。
常見23種模式概述:
1) 抽象工廠模式(Abstract Factory):提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類。
2) 適配器模式(Adapter):將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。適配器模式使得原本由于接口不兼容而不能一起工作的類可以一起工作。
3) 橋梁模式(Bridge):將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。
4) 建造模式(Builder):將一個(gè)復(fù)雜對象的構(gòu)建與它的表示分離,使同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
5) 責(zé)任鏈模式(Chain of Responsibility):為解除請求的發(fā)送者和接收者之間耦合,而使多個(gè)對象都有機(jī)會處理這個(gè)請求。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個(gè)對象處理它。
6) 命令模式(Command):將一個(gè)請求封裝為一個(gè)對象,從而可用不同的請求對客戶進(jìn)行參數(shù)化;對請求排隊(duì)或記錄請求日志,以及支持可取消的操作。
7) 合成模式(Composite):將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。它使得客戶對單個(gè)對象和復(fù)合對象的使用具有一致性。
8) 裝飾模式(Decorator):動態(tài)地給一個(gè)對象添加一些額外的職責(zé)。就擴(kuò)展功能而言,它能生成子類的方式更為靈活。
9) 門面模式(Facade):為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,門面模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。
10) 工廠方法(Factory Method):定義一個(gè)用于創(chuàng)建對象的接口,讓子類決定將哪一個(gè)類實(shí)例化。Factory Method 使一個(gè)類的實(shí)例化延遲到其子類。
11) 享元模式(Flyweight):運(yùn)用共享技術(shù)以有效地支持大量細(xì)粒度的對象。
12) 解釋器模式(Interpreter):給定一個(gè)語言,定義它的語法的一種表示,并定義一個(gè)解釋器,該解釋器使用該表示解釋語言中的句子。
13) 迭代子模式(Iterator):提供一種方法順序訪問一個(gè)聚合對象中的各個(gè)元素,而又不需暴露該對象的內(nèi)部表示。
14) 調(diào)停者模式(Mediator):用一個(gè)中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式的內(nèi)部表示。
15) 備忘錄模式(Memento):在不破壞封裝性的前提下,捕獲一個(gè)對象的內(nèi)部狀態(tài),并在該對象之外保存這個(gè)狀態(tài)。這樣以后就可將該對象恢復(fù)到保存的狀態(tài)。
16) 觀察者模式(Observer):定義對象間的一種一對多的依賴關(guān)系,以便當(dāng)一個(gè)對象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對象都得到通知并自動刷新。
17) 原始模型模式(Prototype):用原型實(shí)例指定創(chuàng)建對象的種類,并且通過拷貝這個(gè)原型創(chuàng)建新的對象。
18) 代理模式(Proxy):為其他對象提供一個(gè)代理以控制對這個(gè)對象的訪問。
19) 單例模式(Singleton):保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。
20) 狀態(tài)模式(State):允許一個(gè)對象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為。對象看起來似乎修改了它所屬的類。
21) 策略模式(Strategy):定義一系列的算法,把它們一個(gè)個(gè)封裝起來,并且使它們可相互替換。本模式使得算法的變化可獨(dú)立于使用它的客戶。
22) 模板模式(Template Method):定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。
23) 訪問者模式(Visitor):表示一個(gè)作用于某對象結(jié)構(gòu)中的各元素的操作。該模式可以實(shí)現(xiàn)在不改變各元素的類的前提下定義作用于這些元素的新操作。
1、 你認(rèn)為一個(gè)項(xiàng)目如何進(jìn)行才正確?(比如:盡一切可能快的完成任務(wù)或完全按照類似CMM來操作)
根據(jù)林銳博士的觀點(diǎn):企業(yè)的根本目標(biāo)是合法地賺取盡可能多的利潤,使企業(yè)利益最大化。企業(yè)所有的特定目標(biāo)和行動都是圍繞上述根本目標(biāo)開展的,任何背離根本目標(biāo)的行動都將對企業(yè)造成傷害,應(yīng)當(dāng)杜絕。
基于此任何人都不要強(qiáng)調(diào)我將嚴(yán)格遵守XX模式,帶領(lǐng)團(tuán)隊(duì)開發(fā)出具有XX等級的產(chǎn)品,企業(yè)需要的是能夠帶領(lǐng)團(tuán)隊(duì)按時(shí)、合格的開發(fā)出產(chǎn)品的Manager。
2、 你經(jīng)?椿蜃屑(xì)研讀過的書有哪些?
不用回答你看過的課本,枚舉幾個(gè)經(jīng)典的當(dāng)然前提是必須真的看過至少瀏覽過主題和目錄。比如《Java編程思想》、《Java模式》、《人月神話》等,由于將來要做的是team中的替補(bǔ)leader或真正的leader所以你必須說出軟工的東西。
3、 你認(rèn)為你應(yīng)聘我們公司的項(xiàng)目經(jīng)理,你自身的優(yōu)勢在哪?
1)融洽,沒有領(lǐng)導(dǎo)希望你帶領(lǐng)團(tuán)隊(duì)每天打嘴仗然后他還要去開屁股(Sorry,這似乎不很文明),你必須說明你能在以往團(tuán)隊(duì)中與其他人和諧相處。
2)技術(shù),千萬不要謙虛,對方要的就是技術(shù)過硬、能力出眾的人才,你只需要說明你成功解決過什么難題并且你對J2EE、XX中間件、XX系統(tǒng)有多么的熟悉。
4、 如果給你一個(gè)Team,公司決定讓你的Team開發(fā)A產(chǎn)品,OK這恰好是你的強(qiáng)項(xiàng),你們很快開發(fā)出來了,但很沮喪的結(jié)果是它(你們的產(chǎn)品)沒有銷路;經(jīng)過討論公司又決定讓你的Team開發(fā)B產(chǎn)品,OK這恰好又是你的強(qiáng)項(xiàng),你們很快開發(fā)出來了,但很沮喪的結(jié)果是它(你們的產(chǎn)品)又沒有銷路。請問你怎么面對這個(gè)問題,你是否覺得決策層很無能甚至要推翻他或者去一個(gè)更有前途的公司?
不要以為這個(gè)故事很單純,這應(yīng)該是人力在考核你。你一定要告訴她(人力多半是女的),我個(gè)人對于失敗的項(xiàng)目肯定會難過(是的,我想了很久才想出“難過”這個(gè)詞,它很中性),不過我認(rèn)為這恰恰認(rèn)證了公司在革新和新技術(shù)探索方面的魄力(自己想怎么說,如果天下人都說這句那才是悲劇呢),我肯定會以個(gè)人的名義向領(lǐng)導(dǎo)層提出我自己的建議和看法當(dāng)然它未必正確,我不會離開公司,因?yàn)橛悬c(diǎn)小挫折未嘗不是好事。(你應(yīng)該在這個(gè)問題上好好想想,盡量發(fā)揮到10分鐘)
5、 你認(rèn)為項(xiàng)目中最重要的是哪些過程?
分析、設(shè)計(jì)階段(也可以加上測試,但千萬別說編碼或開發(fā)階段),根據(jù)《人月神話》的觀點(diǎn):1/3 計(jì)劃;1/6 編碼;1/4 構(gòu)件測試和早期系統(tǒng)測試;1/4 系統(tǒng)測試,所有的構(gòu)件已完成
但根據(jù)國內(nèi)目前的狀況一般公司不會有很多的分析與設(shè)計(jì)時(shí)間(這取決于公司規(guī)模和時(shí)間成本),這樣在一個(gè)工期很緊張的項(xiàng)目中我們應(yīng)該盡量分配出進(jìn)度優(yōu)先級來,首先拿出客戶最希望看到的和最能證明成果的東西來,其他的留待2期甚至3期去作,你可以告訴客戶需要進(jìn)一步調(diào)試(專業(yè)人員的欺騙手段,實(shí)際上就是在進(jìn)行后續(xù)的開發(fā))。
6、 如果給你一個(gè)4-6個(gè)人的Team,那么你怎么分配他們、管理他們?
管理能力和經(jīng)驗(yàn)的綜合題,可能沒有人有相同的觀點(diǎn),那你可以按照某些思路來側(cè)面解答:我會挑選一個(gè)技術(shù)過硬的人作為我的替補(bǔ)和項(xiàng)目的輕騎兵,是的團(tuán)隊(duì)中必須有機(jī)動人員,否則你的項(xiàng)目十有八九會夭折。其他的人會被平均的分配任務(wù)。
我們會在每周進(jìn)行全面的任務(wù)分配,每個(gè)人獲取一周的大概工作,然后每天的工作由他自己完成并匯報(bào)。(很好,如果答出這些就差不多了,多說可能會出現(xiàn)漏洞)
7、 簡述常用的軟件開發(fā)文檔。
1) 可行性研究報(bào)告(某些公司或模型沒有)
2) 項(xiàng)目開發(fā)計(jì)劃
3) 軟件需求說明書(必有)
4) 數(shù)據(jù)要求說明書
5) 概要設(shè)計(jì)說明書(必有)
6) 詳細(xì)設(shè)計(jì)說明書(必有)
7) 數(shù)據(jù)庫設(shè)計(jì)說明書(必有)
8) 用戶手冊(一般會有)
9) 操作手冊(必有)
10) 模塊開發(fā)卷宗
11) 測試計(jì)劃(必有)
12) 測試分析報(bào)告
13) 開發(fā)進(jìn)度月報(bào)
14) 項(xiàng)目開發(fā)總結(jié)報(bào)告
8、 簡述類的關(guān)系。
1) 當(dāng)一個(gè)類是“一種”另一個(gè)類時(shí):is-a關(guān)系
2) 當(dāng)兩個(gè)類之間有關(guān)聯(lián)時(shí):
一個(gè)類“包含”另一個(gè)類:has-a關(guān)系
一個(gè)類“使用”另一個(gè)類
還可以細(xì)分有聚合和組合(UML寶典)或聚集和組成(包括國內(nèi)某些知名學(xué)術(shù)團(tuán)體都這么說)。
聚集(aggregation)表示整體與各部分之間的關(guān)系。例如汽車與輪胎,沒有了汽車輪胎依然是一個(gè)整體。(用空心菱形表示)
組成是一種整體和部分所屬更強(qiáng)的聚集關(guān)系,每個(gè)部分只能屬于一個(gè)整體,沒有整體部分也就沒有存在的價(jià)值。比如桌子和桌腿,沒有桌子也就沒有桌腿的價(jià)值了。(用實(shí)心菱形表示)
【如何面試java工程師】相關(guān)文章:
Java工程師面試題11-09
Java高級工程師面試總結(jié)11-14
java中級工程師面試題11-14
2017年Java工程師面試題10-12
Java工程師面試題及答案09-16
java工程師面試自我介紹2篇02-09
潤信Java開發(fā)工程師面試題11-20
2017年的Java工程師面試題11-13
Java工程師面試常考試題及答案09-10