日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

無論你是參與Java面試還是C#面試,設(shè)計模式和軟

系統(tǒng) 2180 0

無論你是參與Java面試還是C#面試,設(shè)計模式和軟件設(shè)計問題在程序員面試中是必不可少的一部分。編程和設(shè)計技兩者相得益彰,一名出色的程序員也是一名出色的設(shè)計師,他們懂得如何利用代碼來解決問題或者軟件設(shè)計,但是這些技能需要不斷提升。這就要求你不斷的保持設(shè)計理念,無論編程項目的大小,從失敗中總結(jié)經(jīng)驗。

從面向?qū)ο蟮脑O(shè)計原則開始學(xué)習(xí)是個不錯的起點。本文總結(jié)了在各種面試過程中經(jīng)常被提及的一些設(shè)計問題。文中分為兩部分,一類為初學(xué)者,另一類專為中高級技術(shù)人員準(zhǔn)備。

一、入門級程序員的面試題:

這些軟件設(shè)計和設(shè)計模式的先關(guān)問題大多會出現(xiàn)在初學(xué)者面試情景中,什么是設(shè)計模式?特定的設(shè)計模式又是什么?等等這些概念,也許你很輕易回答這些概念,但文內(nèi)提供的這些問題也許能給你帶來更多價值。

1. 什么是設(shè)計模式?在你編碼過程中使用了哪些設(shè)計模式?

每位程序員都會利用自身經(jīng)歷來回答這些特定的設(shè)計問題。設(shè)計模式是代碼重用的擴展。

2. 你能說出在標(biāo)準(zhǔn)的JDK庫中使用的一些設(shè)計模式嗎?

Decorator設(shè)計模式 常被用于各種Java IO類中,Singleton模式常被用在運行環(huán)節(jié)中,Calendar以及各種其他類,F(xiàn)actory(工廠)模式常被用于各種不可變類,比如Boolean。Boolean.valueOf和Observer模式常被用于Swing和許多事件監(jiān)聽器框架中。

3. 在Java中Singleton設(shè)計模式是什么?為線程安全Singleton編碼。

Singleton模式在整個系統(tǒng)中主要是共享模式。在整個應(yīng)用程序?qū)嵗兄槐3忠粋€特定的類,這是由所以模塊共享決定的。Java.lang.Runtime是Singleton設(shè)計模式中一個典型范例。關(guān)于此問題你可以 查看 更多。從Java 5版本開始,你可以為安全線程singleton模式使用 enum

4. 使用Factory模式主要優(yōu)勢是什么?你會在哪種情況下使用?

Factory模式最主要的優(yōu)勢在于當(dāng)創(chuàng)建對象時可提高封裝水平。如果你使用Factory模式來創(chuàng)建對象,你可以在后期重置最初產(chǎn)品的裝置或者無須任何客戶層就可實現(xiàn)更先進更高性能的類。可以查看我曾發(fā)表過的有關(guān) Factory模式 的更多細節(jié)及優(yōu)點。

5. Java中Observer設(shè)計模式是什么?

Observer設(shè)計模式基于對象的變化而改變。比如:天氣系統(tǒng),在這里必須將天氣變化的視圖呈現(xiàn)給觀眾。這里天氣項目是主體而非不同的觀察者。通過這篇 文章 ,查看在Java中Observer模式。

6. 例舉一個在Java中使用Decorator模式的案例?它從事的是對象級別還是類級別?

Decorator模式可提高個體對象的能力。Java IO廣泛使用Decorator模式和Buffered類型的一些經(jīng)典例子,比如BufferedReader和BufferedWriter,增強讀者和作家執(zhí)行Buffer級別的閱讀和寫作從而提高性能。了解 更多

7. 什么是MVC設(shè)計模式?請例舉一個MVC設(shè)計模式案例。

8. Java中FrontController設(shè)計模式是什么?請例舉一個FrontController設(shè)計模式案例。

9. Responsibility設(shè)計模式是什么?

10. Adapter設(shè)計模式是什么?請例舉一個在Java中的Adapter設(shè)計模式案例。

二、進階級程序員的面試題:

1. 舉例說明你什么時候會用抽象類,什么時候更愿意使用接口?

這是一個很常見的面試問題,并不算難。接口和抽象類都按照“不為實現(xiàn)寫代碼”的設(shè)計原則,這是為了增加代碼的靈活性,以應(yīng)付不斷變化的要求。下面是一些幫助你回答這個問題的指南:

  • 在Java中,你只能繼承一個類,但實現(xiàn)多個接口。所以你繼承一個類的時候就無法再繼承別的類了。
  • 接口是用來代表形容詞或行為,例如Runnable、Clonable、Serializable等。因此,如果您使用一個抽象類來實現(xiàn)Runnable和Clonacle,你就不可以使你的類同時實現(xiàn)這兩個功能,而如果接口的話就沒問題。
  • 抽象類是比接口稍快,所以很在乎時間的應(yīng)用盡量使用抽象類。
  • 如果多個繼承層次的共同行為在在同一個地方編寫更好,那么抽象類會是更好的選擇。有時候可以在接口里定義函數(shù)但是在抽象類里默認功能就能實現(xiàn)接口和抽象類共同工作了。了解 Java接口

2. 設(shè)計一個能接收不同硬幣、出售不同貨物的自動售貨機。

這是一個比較開放的設(shè)計問題,你可以使用它練習(xí)文檔設(shè)計、寫代碼和JUnit單元測試,而不是僅僅是解決問題。這道題的目標(biāo)絕不會僅僅是想測出你多久能夠得到解決方案。理想情況下,這個問題應(yīng)該在3小時內(nèi)給出一個可工作版本。

3. 你有一個Smartphone類和它派生類iPhone、 AndroidPhone、WindowsPhone等,以及以品牌名稱命名的派生類如SonyPhone等。你該如何設(shè)計這一類的系統(tǒng)?

這是另一種設(shè)計模式的練習(xí),你充分利用面向?qū)ο蟮脑O(shè)計技巧,保證它有足夠的靈活性來支持新產(chǎn)品,并且在現(xiàn)有模型改變時能夠保證足夠的穩(wěn)定性。

4. 在Java中,什么時候該使用overload,什么時候使用override?

對于一個經(jīng)驗豐富的設(shè)計師來說這是一個非常簡單的問題。重載和覆蓋在Java里實現(xiàn)的都是同一個功能,但overload的輸入變量不同,override則完全相同。

5. 設(shè)計ATM機

我們幾乎都使用過ATM機,但你想過該怎么設(shè)計它嗎?金融系統(tǒng)的設(shè)計原則之一就是必須能在所有預(yù)期情況下都能夠正常運行。所以無論是發(fā)生斷電還是什么其它暴力問題,ATM機都必須能夠保證正確的狀態(tài)。 考慮下鎖、事務(wù)處理、錯誤狀態(tài)、臨界條件等等。即使你拿不定確切的設(shè)計方案,但是能夠指出非功能性需求、提出一些問題或者考慮考慮臨界條件都會對你有幫助。

6. 假設(shè)你正在設(shè)計市場數(shù)據(jù)類來保證能夠切換不同的信息供應(yīng)商,比如Reuters、wombat等等,或者直接交換信息,你該如何設(shè)計這個市場信息系統(tǒng)?

這是非常有趣的設(shè)計面試問題,實際上在大型投資銀行里是個很普遍的問題。關(guān)鍵在于你需要提供擁有g(shù)etBid()、getPrice()和getLevel()方法的MarketData接口供客戶請求,同時還需要有一個使用依賴注入的MarketDataProvider組件。這樣在你改變MarketDataProvider時就不會對系統(tǒng)產(chǎn)生影響,因為客戶是通過MarketData接口或者類調(diào)用方法的。

7. 為什么Java里不允許從靜態(tài)方法中獲取非靜態(tài)變量?

Java里不允許從靜態(tài)方法中獲取非靜態(tài)變量僅僅是因為非靜態(tài)變量會和特定的對象實例相關(guān)聯(lián),而靜態(tài)變量不會。你也可以看看 這篇文章 的詳細解釋。

8. 用Java設(shè)計一個并發(fā)規(guī)則管道?

并發(fā)編程和并行設(shè)計非常熱門,因為它能更高效地利用現(xiàn)在越來越先進的處理器,而且Java被認為是多線程語言也主要因為此原因。設(shè)計一個并發(fā)系統(tǒng)的關(guān)鍵在于線程安全、不可變性、本地變量,還有避免使用局部變量和實例變量。你只需要保證多個線程能夠在同一時間執(zhí)行同一個類,所以最佳解決方案就是每個線程只操作自己的數(shù)據(jù),盡量使用最小的同步,尤其是在管道開始時。這個問題可以從初始討論到最終類和接口的編寫實現(xiàn),但是只要你記得注意并發(fā)問題的關(guān)鍵,比如 競爭狀態(tài) 死鎖 、內(nèi)存沖突、原子操作、 ThreadLocal 變量等等,盡量繞過這些問題。

以上這些設(shè)計模式經(jīng)常出現(xiàn)在面試環(huán)節(jié)中,比如Google,Amazon, Microsoft等。如果您在面試過程中遇到了一些有趣的話題,不妨與我們分享下。

無論你是參與Java面試還是C#面試,設(shè)計模式和軟件設(shè)計問題在程序員面試中是必不可少的一部分。編程和設(shè)計技兩者相得益彰,一名出色的程序員也是一名出色的設(shè)計師,他


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 武冈市| 肃南| 鱼台县| 灵川县| 永嘉县| 平罗县| 太康县| 金门县| 大英县| 巴东县| 屏山县| 泾阳县| 衡东县| 河西区| 津南区| 阳江市| 高唐县| 边坝县| 濮阳县| 白沙| 安庆市| 新营市| 巫溪县| 时尚| 莱西市| 大关县| 长治县| 岑溪市| 慈利县| 晴隆县| 怀柔区| 项城市| 长兴县| 湘阴县| 富阳市| 鄂托克前旗| 乳山市| 上高县| 平阳县| 遂宁市| 九江县|