面試java高階工程師、專案經理等的常見問題

hi_kevin發表於2020-04-05
1、 類、物件的概念:

1) 類:具有共同屬性和行為的物件的抽象。類是建立物件的模板。

2) 物件:現實世界中的實體。在計算機中,是指可標識的儲存區域。

3) 類是物件的抽象、物件是類的例項。

2、 抽象:是從特定的例項中抽取共同性質形成一般化概念的過程。

3、 介面與抽象類:

1)介面和抽象類都用於抽象,介面是抽象類的抽象。

2)介面中只有方法宣告,沒有實現(無方法體);在介面中宣告的方法具有public和abstract屬性,一個類可以實現多個介面(即多繼承),介面以‘,’分隔;介面中的方法必須全部實現。

3)抽象類可以有部分方法實現,抽象類必須通過繼承才能使用。

4、內部類(Inner Class):

1)內部類是巢狀在另一個類中的類。

2)內部類用於名稱隱藏和程式程式碼的組織,另外內部類擁有直接訪問其外部類所有成員(包括private的)的許可權(無需任何關鍵字修飾)。

3)內部類不可以在其他類或main方法裡例項化,必須使用如下方法(非靜態內部類)

外部類.內部類 物件名=new 外部類().new 內部類();

靜態內部類呼叫方式:

外部類.內部類 物件名=new 外部類.內部類();

4)非靜態內部類不可以宣告靜態成員;靜態內部類的非靜態成員可以訪問其外部類的靜態成員,宣告為靜態的成員不可以訪問外部的非靜態成員。

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關鍵字的使用:

1)類成員,直接使用 類名.成員 呼叫。

2)靜態方法只能訪問靜態成員。

3)靜態方法不能使用this、super關鍵字。

4)靜態方法不能被非靜態方法重寫或過載。

7、final關鍵字:

1)被final修飾的變數為常量不能改變。

2)被final修飾的方法不可以重寫。

3)被final修飾的類不能被繼承。

8、abstract關鍵字:

1)被abstract修飾的類不能例項化。

2)被abstract修飾的方法只能在子類中實現。

9、native關鍵字:非Java語言的編寫,例如JNI技術。

10、synchronized關鍵字:多執行緒的同步訪問控制。

11、分類列舉伺服器和元件技術:

1)伺服器端技術:Jsp、Servlet;

2)元件技術:JavaBean、EJB。

12、Http與Https:Https即多了安全的Http,s(Security Socket Layer)指加密套接字協議層(簡寫SSL)。

13、OSI(Open System Interconnection)網路抽象模型:

1)由國際標準化組織(ISO)提出。

2)將網際網路分為七層,從下至上分別為:物理層(physical)、資料鏈路層(data link)、網路層(network)、傳送層(transport)、會話層(session)、表示層(presentation)、應用層(application)。底層通過提供介面支援上層功能。各層詳解:

物理層:LAN/ATM,為硬體層。

資料鏈路層:LAN/ATM

網路層:IP協議,IOS

傳輸層:TCP/UDP協議,支援Java Socket。

會話層:

表示層:HTML、XML

應用層:HTTP協議,使用Java Servlet/JSP

<第八層(Web服務層):SOAP/UDDI>

14、J2EE的容器與伺服器:

容器負責EJB元件中生命週期的控制;

伺服器包含在容器外,提供系統級操作底層服務,包括事務、事件、多執行緒……。

15、繼承限制:

父類物件不可以賦給子類物件,因為子類可能具有更多的成員,反之可以。

16、邏輯操作:c=(a>b)?a:b;等同於下式

if(a>b) c=a; else c=b;

17、列舉常見集合框架型別:

1)List、Set、Map。由這三個介面實現出ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等常用集合框架。

2)Vector屬於重量級元件不推薦使用。

3)Map型別維護鍵/值對,Hashtable與HashMap相近但效率略低於HashMap、高於TreeMap,TreeMap優點是可以排序。

4)Set型別可裝入唯一值,HashSet效率高於TreeSet但TreeSet可以維護內部元素的排序狀態。

5)List型別可按某種特定順序維護元素。ArrayList允許快速隨機訪問,但如果新增或刪除位於中間的元素時效率很低;LikedList提供最佳循序訪問及快速的中間位置新增刪除元素,並有addFirst、addLast、getFirst、getLast、removeFirst、removeLast方法。

18、物件導向的特徵:

1)繼承:通過子類可以實現繼承,子類繼承父類的所有狀態和行為,同時新增自身的狀態和行為。

2)封裝:將程式碼及處理資料繫結在一起的一種程式設計機制,該機制保證程式和資料不受外部干擾。

3)多型:包括過載和重寫。過載為編譯時多型,重寫是執行時多型。過載必須是同類中名稱相同引數不同(包括個數不同和型別不同),但返回型別不同不構成過載;重寫發生於子類對父類的覆蓋,子類繼承父類方法名相同、引數列表相同、返回型別相同才構成重寫。

19、Java命名規範:必須以英文字母、下劃線(’_’)或’$’開始,其餘可以有數字但不允許 包含空格,且組合後的名稱不能是Java關鍵字或保留字。

匈牙利命名法:以m開始為類成員變數,以g開始為全域性變數,以v開始為本地區域性變數,常量命名一般不以下劃線、美元符開始。

駝峰命名:一般稱由多個單詞或縮寫組成的變數名,並且該變數名每個單詞首字母均為大寫(一般類名全部首字母大寫,方法或屬性名第一個字母小寫)的稱為駝峰命名。

20、Java語言共包含47個關鍵字。

21、設計模式:

一個設計模式描述了一個被證實可行的方案。這些方案非常普遍,是具有完整定義的最常用的模式。一般模式有4個基本要素:模式名稱(pattern name)、問題(problem)、解決方案(solution)、效果(consequences)。

常見23種模式概述:

1) 抽象工廠模式(Abstract Factory):提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。

2) 介面卡模式(Adapter):將一個類的介面轉換成客戶希望的另外一個介面。介面卡模式使得原本由於介面不相容而不能一起工作的類可以一起工作。

3) 橋樑模式(Bridge):將抽象部分與它的實現部分分離,使它們都可以獨立地變化。

4) 建造模式(Builder):將一個複雜物件的構建與它的表示分離,使同樣的構建過程可以建立不同的表示。

5) 責任鏈模式(Chain of Responsibility):為解除請求的傳送者和接收者之間耦合,而使多個物件都有機會處理這個請求。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個物件處理它。

6) 命令模式(Command):將一個請求封裝為一個物件,從而可用不同的請求對客戶進行引數化;對請求排隊或記錄請求日誌,以及支援可取消的操作。

7) 合成模式(Composite):將物件組合成樹形結構以表示“部分-整體”的層次結構。它使得客戶對單個物件和複合物件的使用具有一致性。

8) 裝飾模式(Decorator):動態地給一個物件新增一些額外的職責。就擴充套件功能而言,它能生成子類的方式更為靈活。

9) 門面模式(Facade):為子系統中的一組介面提供一個一致的介面,門面模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。

10) 工廠方法(Factory Method):定義一個用於建立物件的介面,讓子類決定將哪一個類例項化。Factory Method 使一個類的例項化延遲到其子類。

11) 享元模式(Flyweight):運用共享技術以有效地支援大量細粒度的物件。

12) 直譯器模式(Interpreter):給定一個語言,定義它的語法的一種表示,並定義一個直譯器,該直譯器使用該表示解釋語言中的句子。

13) 迭代子模式(Iterator):提供一種方法順序訪問一個聚合物件中的各個元素,而又不需暴露該物件的內部表示。

14) 調停者模式(Mediator):用一箇中介物件來封裝一系列的物件互動。中介者使各物件不需要顯式的內部表示。

15) 備忘錄模式(Memento):在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到儲存的狀態。

16) 觀察者模式(Observer):定義物件間的一種一對多的依賴關係,以便當一個物件的狀態發生改變時,所有依賴於它的物件都得到通知並自動重新整理。

17) 原始模型模式(Prototype):用原型例項指定建立物件的種類,並且通過拷貝這個原型建立新的物件。

18) 代理模式(Proxy):為其他物件提供一個代理以控制對這個物件的訪問。

19) 單例模式(Singleton):保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。

20) 狀態模式(State):允許一個物件在其內部狀態改變時改變它的行為。物件看起來似乎修改了它所屬的類。

21) 策略模式(Strategy):定義一系列的演算法,把它們一個個封裝起來,並且使它們可相互替換。本模式使得演算法的變化可獨立於使用它的客戶。

22) 模板模式(Template Method):定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。

23) 訪問者模式(Visitor):表示一個作用於某物件結構中的各元素的操作。該模式可以實現在不改變各元素的類的前提下定義作用於這些元素的新操作。

1、 你認為一個專案如何進行才正確?(比如:盡一切可能快的完成任務或完全按照類似CMM來操作)

根據林銳博士的觀點:企業的根本目標是合法地賺取儘可能多的利潤,使企業利益最大化。企業所有的特定目標和行動都是圍繞上述根本目標開展的,任何背離根本目標的行動都將對企業造成傷害,應當杜絕。

基於此任何人都不要強調我將嚴格遵守XX模式,帶領團隊開發出具有XX等級的產品,企業需要的是能夠帶領團隊按時、合格的開發出產品的Manager。

2、 你經常看或仔細研讀過的書有哪些?

不用回答你看過的課本,列舉幾個經典的當然前提是必須真的看過至少瀏覽過主題和目錄。比如《Java程式設計思想》、《Java模式》、《人月神話》等,由於將來要做的是team中的替補leader或真正的leader所以你必須說出軟工的東西。

3、 你認為你應聘我們公司的專案經理,你自身的優勢在哪?

1)融洽,沒有領導希望你帶領團隊每天打嘴仗然後他還要去開屁股(Sorry,這似乎不很文明),你必須說明你能在以往團隊中與其他人和諧相處。

2)技術,千萬不要謙虛,對方要的就是技術過硬、能力出眾的人才,你只需要說明你成功解決過什麼難題並且你對J2EE、XX中介軟體、XX系統有多麼的熟悉。

4、 如果給你一個Team,公司決定讓你的Team開發A產品,OK這恰好是你的強項,你們很快開發出來了,但很沮喪的結果是它(你們的產品)沒有銷路;經過討論公司又決定讓你的Team開發B產品,OK這恰好又是你的強項,你們很快開發出來了,但很沮喪的結果是它(你們的產品)又沒有銷路。請問你怎麼面對這個問題,你是否覺得決策層很無能甚至要推翻他或者去一個更有前途的公司?

不要以為這個故事很單純,這應該是人力在考核你。你一定要告訴她(人力多半是女的),我個人對於失敗的專案肯定會難過(是的,我想了很久才想出“難過”這個詞,它很中性),不過我認為這恰恰認證了公司在革新和新技術探索方面的魄力(自己想怎麼說,如果天下人都說這句那才是悲劇呢),我肯定會以個人的名義向領導層提出我自己的建議和看法當然它未必正確,我不會離開公司,因為有點小挫折未嘗不是好事。(你應該在這個問題上好好想想,儘量發揮到10分鐘)

5、 你認為專案中最重要的是哪些過程?

分析、設計階段(也可以加上測試,但千萬別說編碼或開發階段),根據《人月神話》的觀點:1/3 計劃;1/6 編碼;1/4 構件測試和早期系統測試;1/4 系統測試,所有的構件已完成

但根據國內目前的狀況一般公司不會有很多的分析與設計時間(這取決於公司規模和時間成本),這樣在一個工期很緊張的專案中我們應該儘量分配出進度優先順序來,首先拿出客戶最希望看到的和最能證明成果的東西來,其他的留待2期甚至3期去作,你可以告訴客戶需要進一步除錯(專業人員的欺騙手段,實際上就是在進行後續的開發)。

6、 如果給你一個4-6個人的Team,那麼你怎麼分配他們、管理他們?

管理能力和經驗的綜合題,可能沒有人有相同的觀點,那你可以按照某些思路來側面解答:我會挑選一個技術過硬的人作為我的替補和專案的輕騎兵,是的團隊中必須有機動人員,否則你的專案十有八九會夭折。其他的人會被平均的分配任務。

我們會在每週進行全面的任務分配,每個人獲取一週的大概工作,然後每天的工作由他自己完成並彙報。(很好,如果答出這些就差不多了,多說可能會出現漏洞)

7、 簡述常用的軟體開發文件。

1) 可行性研究報告(某些公司或模型沒有)

2) 專案開發計劃

3) 軟體需求說明書(必有)

4) 資料要求說明書

5) 概要設計說明書(必有)

6) 詳細設計說明書(必有)

7) 資料庫設計說明書(必有)

8) 使用者手冊(一般會有)

9) 操作手冊(必有)

10) 模組開發卷宗

11) 測試計劃(必有)

12) 測試分析報告

13) 開發進度月報

14) 專案開發總結報告

8、 簡述類的關係。

1) 當一個類是“一種”另一個類時:is-a關係

2) 當兩個類之間有關聯時:

一個類“包含”另一個類:has-a關係

一個類“使用”另一個類

還可以細分有聚合和組合(UML寶典)或聚集和組成(包括國內某些知名學術團體都這麼說)。

聚集(aggregation)表示整體與各部分之間的關係。例如汽車與輪胎,沒有了汽車輪胎依然是一個整體。(用空心菱形表示)

組成是一種整體和部分所屬更強的聚集關係,每個部分只能屬於一個整體,沒有整體部分也就沒有存在的價值。比如桌子和桌腿,沒有桌子也就沒有桌腿的價值了。(用實心菱形表示)

相關文章