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