這篇文章翻譯自一位外國友人的關(guān)于面試后端程序員的文章先誉,我比較喜愛這篇文章湿刽。一是因?yàn)樗鼧O大的拓寬了我的視角的烁,另一方面是其中的一些問題非常具有啟發(fā)性褐耳。不僅對(duì)于面試者,對(duì)于面試官來說也是個(gè)不錯(cuò)的參考渴庆。于是迫不及待的翻譯了一下铃芦,給各位看官做個(gè)參考雅镊。
原文參見 @arialdomartini的: Back-End Developer Interview Questions
以下是原文翻譯。
- 通用問題
- 開放式問題
- 設(shè)計(jì)模式相關(guān)問題
- 代碼設(shè)計(jì)相關(guān)問題
- 語言相關(guān)問題
- Web相關(guān)問題
- 數(shù)據(jù)庫相關(guān)問題
- 非關(guān)系型數(shù)據(jù)庫相關(guān)問題
- 代碼版本管理相關(guān)問題
- 并發(fā)問題
- 分布式系統(tǒng)相關(guān)問題
- 軟件生命周期和團(tuán)隊(duì)管理相關(guān)問題
- 邏輯和算法相關(guān)問題
- 軟件架構(gòu)相關(guān)問題
- 面向服務(wù)架構(gòu)(SOA)和微服務(wù)(Microservice)相關(guān)問題
- 安全相關(guān)問題
- 比爾蓋茨式問題
- 代碼示例問題
通用問題:
- 語言設(shè)計(jì)中空引用(null reference)的存在有什么問題刃滓?假設(shè)你想要將空引用的概念從你的首選語言中移除仁烹,可能導(dǎo)致什么結(jié)果?
- 為什么函數(shù)式編程重要咧虎?什么時(shí)候適用函數(shù)式語言卓缰?
- 設(shè)計(jì)(design)、架構(gòu)(architecture)砰诵、功能(functionality)和美學(xué)(aesthetic)之間有什么區(qū)別征唬?討論一下。
- 微軟茁彭、谷歌总寒、歐朋(opera)和火狐這類公司是如何從他們的瀏覽器中獲利的?
- 為什么打開TCP套接字有很大的開銷理肺?
- 封裝的重要性體現(xiàn)在哪兒摄闸?
- 什么是實(shí)時(shí)系統(tǒng)?它與普通系統(tǒng)有什么區(qū)別妹萨?
- 實(shí)時(shí)語言(real-time language)和堆內(nèi)存分配(heap memory allocation)之間的關(guān)系是什么年枕?
- 不變性(Immutability)是指: (變量的)值只能在創(chuàng)建的時(shí)候被設(shè)置一次,之后就不能被改變眠副。為什么不變性對(duì)寫更加安全的代碼有幫助画切?
- 可變值(mutable values)和不可變值(immutable values)有哪些優(yōu)缺點(diǎn)?
- 什么是O/R阻抗失衡(Object-Relational impedence mismatch)囱怕?
- 如果你需要使用緩存霍弹,你使用哪些原則來確定緩存的大小娃弓?
- TCP和HTTP有什么區(qū)別典格?
- 在客戶端渲染(client-side rendering)和服務(wù)端渲染(server-side rendering)之間,你是如何權(quán)衡的台丛?
- 如何在一個(gè)不可靠的協(xié)議之上構(gòu)建一個(gè)可靠的通信協(xié)議耍缴?
開放式問題:
- 為什么人們會(huì)抵制變化?
- 如何向你的祖母解釋什么是線程挽霉?
- 作為一個(gè)軟件工程師防嗡,你想要既要有創(chuàng)新力,又要產(chǎn)出具有可預(yù)測(cè)性侠坎。采用什么策略才能使這兩個(gè)目標(biāo)可以共存呢蚁趁?
- 什么是好的代碼?
- 解釋什么是流(Streaming)和如何實(shí)現(xiàn)一個(gè)流实胸?
- 假設(shè)你的公司給你一周的時(shí)間他嫡,用來改善你和同事的生活: 你將如何使用這一周番官?
- 本周你學(xué)了什么?
- 所有的設(shè)計(jì)中都會(huì)有美學(xué)元素(aesthetic element)的存在钢属。問題是徘熔,你認(rèn)為美學(xué)元素是你的朋友還是敵人?
- 列出最近你讀過的5本書淆党。
- 假設(shè)目前有個(gè)大型公司(非常有錢)酷师,他們的開發(fā)流程是瀑布式流程(Waterfall),如果需要你在他們公司引入持續(xù)交付(Continue Devivery)染乌,你會(huì)怎么做窒升?
- 我們來談?wù)劇?em>重復(fù)造輪子“,”非我發(fā)明癥“, “吃自己做出來的狗糧“的這些做法吧。
(注: 重復(fù)造輪子: Reinventing the wheel; 非我發(fā)明癥:Not Invented Here Syndrome; 吃自己做出來的狗糧: Eating Your Own Dog Food)
- 在你當(dāng)前的工作流中慕匠,什么事情是你計(jì)劃下一步需要自動(dòng)化的饱须?
- 為什么寫軟件是困難的?是什么使軟件的維護(hù)變得困難台谊?
- 你更喜歡在全新項(xiàng)目(Green Field Project)上工作還是在已有項(xiàng)目(Brown Field Project)基礎(chǔ)上工作蓉媳?為什么?
- 當(dāng)你在瀏覽器地址欄輸入google.com回車之后都發(fā)生了什么?
- 當(dāng)操作系統(tǒng)CPU處于空閑的時(shí)候锅铅,它可能在處理哪些事情酪呻?
- 如何向一個(gè)5歲的孩子解釋什么是Unicode/數(shù)據(jù)庫事務(wù)?
- 如何維護(hù)單體架構(gòu)(monolithic architecture)盐须?
- 一個(gè)”專業(yè)的開發(fā)者”意味著什么玩荠?
- 軟件開發(fā)是藝術(shù)、是技藝還是工程贼邓?你的觀點(diǎn)是什么阶冈?
- “喜歡這個(gè)的人也喜歡…”,如何在一個(gè)電子商務(wù)商店里實(shí)現(xiàn)這種功能塑径?
- 為什么在創(chuàng)新上女坑,企業(yè)會(huì)比創(chuàng)業(yè)公司慢些?
- 為什么說统舀,你不應(yīng)該嘗試應(yīng)用自己發(fā)明或者設(shè)計(jì)的密碼學(xué)匆骗?
設(shè)計(jì)模式相關(guān)問題:
- 請(qǐng)用一個(gè)例子表明,全局對(duì)象是邪惡的存在誉简。
- 假設(shè)你工作的系統(tǒng)不支持事務(wù)性碉就,你會(huì)如何從頭開始實(shí)現(xiàn)它?
- 什么是好萊塢原則(Hollywood Principles)闷串?
- 關(guān)于迪米特法則(最少知識(shí)原則): 寫一段代碼違反它, 然后修復(fù)它瓮钥。
(注: 迪米特法則:the Law of Demeter, 最少知識(shí)原則: the Principle of Least Knowledge)
- Active-Record模式有什么限制和缺陷?
- Data-Mapper模式和Active-Record模式有什么區(qū)別?
- 空對(duì)象模式(Null Object Pattern)的目的是什么骏庸?
- 為什么組合(Composition)比繼承(Inheritance)更好?
- 什么是反腐敗層(Anti-corruption Layer)?
- 你可以寫一個(gè)線程安全的單例(Singleton)類嗎年叮?
- 數(shù)據(jù)抽象(Data Abstraction)能力是指能改變實(shí)現(xiàn)而不影響客戶端的這種能力具被。請(qǐng)構(gòu)造一個(gè)一個(gè)例子,違反這個(gè)特性只损,并且嘗試修復(fù)它一姿。
- 你是如何處理依賴關(guān)系地獄(Dependency Hell)的?
- 為什么說goto語句是惡魔般的存在跃惫?
- 健壯性是進(jìn)行軟件設(shè)計(jì)時(shí)的一個(gè)通用原則叮叹,它建議 “發(fā)送時(shí)要保守,接收時(shí)要開放”爆存。這也經(jīng)常被寫成蛉顽,“做一個(gè)有耐心的讀者,做一個(gè)謹(jǐn)慎的作者”先较。你能解釋一些這背后的邏輯嗎携冤?
譯者注: “發(fā)送時(shí)要保守,接收時(shí)要開發(fā)”的原文是: “Be conservative in what you send, be liberal in what you accept”闲勺,有點(diǎn)類似于“嚴(yán)于律己曾棕,寬于待人”的意味。
代碼設(shè)計(jì)相關(guān)問題:
- 你在進(jìn)行軟件設(shè)計(jì)時(shí)會(huì)考慮軟件測(cè)試嗎菜循?軟件測(cè)試是如何影響軟件設(shè)計(jì)的翘地?
- 內(nèi)聚和耦合的區(qū)別是什么?
- 重構(gòu)在哪些場(chǎng)景下有用癌幕?
- 代碼中的注釋有用嗎衙耕?
- 設(shè)計(jì)和架構(gòu)有什么區(qū)別?
- 為什么在測(cè)試驅(qū)動(dòng)開發(fā)(TDD)中是先寫測(cè)試勺远,再寫代碼臭杰?
- C++支持多繼承,Java允許類實(shí)現(xiàn)多個(gè)接口谚中。這些特性對(duì)正交性有什么影響渴杆?使用多繼承和使用多接口有區(qū)別嗎?[這個(gè)問題來自Andrew .Hunt 和 David Thomas寫的《程序員修煉之道》]
- 在存儲(chǔ)過程(Stored Procedures)中寫業(yè)務(wù)邏輯有什么優(yōu)缺點(diǎn)宪塔?
語言相關(guān)問題:
- 告訴我你的首選語言的三個(gè)最壞的缺陷磁奖。
- 為什么現(xiàn)在函數(shù)式編程這么越來越受關(guān)注?
- 閉包是什么某筐?它有什么用途比搭?閉包和類有什么共同點(diǎn)?
- 泛型有什么用途南誊?
- 什么是高階函數(shù)身诺?有什么用途蜜托?用你的首選語言寫個(gè)例子出來。
- 討論一下霉赡,如何寫一個(gè)循環(huán)橄务,然后把它轉(zhuǎn)換成遞歸函數(shù),要避免易變性穴亏。
- 有些語言將函數(shù)視為第一公民蜂挪,這是什么意思?
- 用一個(gè)例子說明匿名函數(shù)是有用的嗓化。
- 什么是動(dòng)態(tài)方法調(diào)度(Dynamic Method Dispatch)棠涮?
- 名字空間(Namespace)有什么用?有什么可以替代它的嗎刺覆?
- 談?wù)凧ava和C#之間的互操作性(Interoperability) (任選其他兩門語言都行)
- 為什么很多軟件工程師不喜歡Java严肪?
- 你認(rèn)為好的語言好在哪里?差的語言差在哪里谦屑?
- 寫兩個(gè)函數(shù)诬垂,一個(gè)是”引用透明的(Referentially Transparent)”,另一個(gè)是”引用不透明的(Referentially Opaque)”伦仍。討論之结窘。
- 什么是棧?什么是堆充蓝?
- 為什么一個(gè)語言中隧枫,”函數(shù)是第一公民”是很重要的?
- 模式匹配(Pattern Matching)和Switch語句(Switch clauses)的區(qū)別在哪兒谓苟?
- 為什么有些語言設(shè)計(jì)上沒有異常機(jī)制官脓?這有什么優(yōu)缺點(diǎn)?
- 如果
Cat
是一個(gè)Animal
, 那么TaskCare<Cat>
是一個(gè)TakeCare<Animal>
嗎涝焙?
web相關(guān)問題:
- 為什么”第一方cookie(first-party cookie)”和”第三方cookie(third-party cookie)”被如此不同的對(duì)待卑笨?
數(shù)據(jù)庫相關(guān)問題:
- 如果要你將一個(gè)項(xiàng)目從MySQL遷移至PostgreSQL中,你會(huì)如何遷移仑撞?
- 為什么
SELECT * FROM table WHERE field = null
不能匹配空的字段赤兴? - 什么是ACID(原子性,一致性隧哮,隔離性桶良,持久性)原則?
- 你是如何進(jìn)行數(shù)據(jù)庫模式(Database schema)遷移的沮翔?
- 延遲加載(lazy loading)是如何實(shí)現(xiàn)的陨帆?什么場(chǎng)景下有用?他有什么缺陷?
- 什么是N+1問題疲牵?
- 如何找出應(yīng)用中開銷最大的查詢承二?
非關(guān)系型數(shù)據(jù)庫相關(guān)問題:
- 什么是最終一致性(Eventual Consistency)?
- 關(guān)于CAP理論纲爸,舉一些CP亥鸠、AP、CA系統(tǒng)的例子缩焦。
- NoSQL是如何解決可伸縮性的挑戰(zhàn)的?
- 什么情況下你會(huì)使用類似于MongoDB的文檔數(shù)據(jù)庫而不是關(guān)系型數(shù)據(jù)庫(如Mysql或者PostgreSQL)责静?
代碼版本管理相關(guān)問題:
- 為什么在Mercurial或者git中(管理)分支比SVN容易袁滥?
- 分散式版本控制系統(tǒng)(比如git),相比集中式版本控制系統(tǒng)(如svn)有哪些優(yōu)勢(shì)和劣勢(shì)灾螃?
(注:集中式版本控制系統(tǒng): Centralized Version Control Systems题翻;分散式版本控制系統(tǒng): Distributed Version Control Systems)
- 能描述一下什么是GitHubFlow和GitFlow工作流嗎?
- 什么是rebase腰鬼?
- 為什么合并操作(merge)在Mercurial和git中比在SVN和CVS中容易嵌赠?
并發(fā)問題:
- 為什么我們需要并發(fā)呢?解釋一下熄赡。
- 為什么測(cè)試多線程/并發(fā)代碼這么困難姜挺?
- 什么是競(jìng)爭(zhēng)條件(Race Condition)?用任何一個(gè)語言寫一個(gè)例子彼硫。
- 什么是死鎖炊豪?用代碼解釋一下。
- 什么是餓死拧篮?
- 什么是Wait-Free算法词渤?
分布式系統(tǒng)相關(guān)問題:
- 怎么測(cè)試一個(gè)分布式系統(tǒng)?
- 什么場(chǎng)景下你會(huì)在兩個(gè)系統(tǒng)中采用異步通信機(jī)制串绩?
- 遠(yuǎn)程過程調(diào)用的通用缺點(diǎn)是什么缺虐?
- 如果你為了可擴(kuò)展性和魯棒性而構(gòu)建一個(gè)分布式的系統(tǒng),分別在封閉安全的網(wǎng)絡(luò)環(huán)境情況下礁凡,和地理上的位置不同但是網(wǎng)絡(luò)環(huán)境不是封閉和安全的情況下高氮,你會(huì)考慮什么不同的事情?
- 在Web應(yīng)用中如何管理容錯(cuò)性顷牌?在桌面端呢纫溃?
- 在分布式系統(tǒng)中,如何處理故障韧掩?
- 讓我們來談?wù)劸W(wǎng)絡(luò)分裂(network partitions)后有的幾種恢復(fù)的手段吧紊浩。
- 你認(rèn)為分布式計(jì)算中有哪些謬論?
- 你在什么時(shí)候會(huì)使用Request/Response模式,什么時(shí)候使用Publish/Subscribe模式坊谁?
軟件生命周期和團(tuán)隊(duì)管理相關(guān)問題:
- 什么是敏捷(Agility)费彼?
- 你是如何處理遺留代碼(Legacy Code)的?
- 假設(shè)我是你們公司的CEO口芍,請(qǐng)向我解釋什么是看板箍铲,并且說服我在它上面投資。
- 敏捷(Agility)和瀑布(Waterfall)之間的最大區(qū)別是什么鬓椭?
- 作為團(tuán)隊(duì)管理者颠猴,你對(duì)會(huì)議太多這個(gè)問題是如何處理的?
- 你會(huì)如何處理延期很長(zhǎng)時(shí)間了的項(xiàng)目小染?
- “個(gè)體與交互重于過程和工具“和”客戶協(xié)作重于合同談判“占了敏捷宣言(Agile Manifesto)的一半翘瓮,談?wù)撘幌逻@兩個(gè)觀念。
- 如果你是你們公司的CTO裤翩,你會(huì)采取什么樣的決策资盅?
- 你覺得項(xiàng)目經(jīng)理有用嗎?
- 如果要你組織一個(gè)彈性工作制的開發(fā)團(tuán)隊(duì)(即沒有強(qiáng)制工作時(shí)間的要求)踊赠,并且假期制度是”按需休假”呵扛,你會(huì)如何做?
- 你會(huì)如何管理一個(gè)人員流動(dòng)非常高的團(tuán)隊(duì)筐带?如何在不加薪的條件下說服團(tuán)隊(duì)成員不要離開今穿?
- 除了代碼之外,你最關(guān)注你的同事的哪3項(xiàng)素質(zhì)伦籍?
- 關(guān)于代碼荣赶,你最希望非技術(shù)人員能知道的的三件事是什么?
邏輯和算法相關(guān)問題:
- 只用LIFO棧如何構(gòu)造一個(gè)FIFO隊(duì)列鸽斟?只用FIFO隊(duì)列如何構(gòu)造一個(gè)LIFO棧拔创?
- 寫一段有棧溢出的代碼。
- 寫一個(gè)尾遞歸版本的階乘函數(shù)富蓄。
- 使用任何一個(gè)語言剩燥,寫一個(gè)REPL,功能是echo你輸入的字符串立倍。然后將它演化成一個(gè)逆波蘭表達(dá)式的計(jì)算器灭红。
- 如果需要你設(shè)計(jì)一個(gè)文件系統(tǒng)磁盤碎片整理程序,你會(huì)如何設(shè)計(jì)口注?
- 寫一個(gè)生成隨機(jī)迷宮的程序变擒。
- 寫一段有內(nèi)存泄漏的示例代碼。
- 隨機(jī)生成一個(gè)的數(shù)字序列寝志,里面每個(gè)數(shù)字都不同娇斑。
- 寫一個(gè)簡(jiǎn)單的垃圾回收系統(tǒng)策添。
- 使用任何一門語言,寫一個(gè)基本的消息代理毫缆。
- 寫一個(gè)基礎(chǔ)的web服務(wù)器唯竹,然后畫一張線路圖,展示你將來還想要實(shí)現(xiàn)的功能苦丁。
- 如何對(duì)一個(gè)10GB的文件進(jìn)行排序浸颓?如果是10TB的數(shù)據(jù),你會(huì)采用什么方法旺拉?
- 請(qǐng)實(shí)現(xiàn)
rnd()
函數(shù)
軟件架構(gòu)相關(guān)問題:
- 什么情況下緩存是沒用的产上,甚至是危險(xiǎn)的?
- 為什么事件驅(qū)動(dòng)的架構(gòu)能提高可擴(kuò)展性(scalability)蛾狗?
- 什么樣的代碼是可讀性強(qiáng)的代碼晋涣?
- 緊急設(shè)計(jì)(Emergent Design)和演化架構(gòu)(Evolutionary Architecture)之間的區(qū)別是什么?
- 橫向擴(kuò)展(scale out) vs 縱向擴(kuò)展(scale up): 有什么區(qū)別淘太?分別在什么場(chǎng)景下使用姻僧?
- 分布式系統(tǒng)中如何處理”故障切換(failover)”和”用戶會(huì)話(user session)”规丽?
- 什么是CQRS(Command Query Responsibility Segregation)?他和最早的Command-Query Separation原則有什么區(qū)別蒲牧?
- 什么是三層架構(gòu)?
- 如何設(shè)計(jì)一個(gè)可擴(kuò)展性高的系統(tǒng)赌莺?
- 處理C10k問題的策略有哪些冰抢?
- 如果讓你來設(shè)計(jì)一個(gè)去中心化的P2P系統(tǒng),你會(huì)如何設(shè)計(jì)艘狭?
- 為什么CGI的擴(kuò)展性不好挎扰?
- 在設(shè)計(jì)系統(tǒng)時(shí),你如何防止供應(yīng)商依賴(Vendor Lock-in)巢音?
- 在可擴(kuò)展性上遵倦,發(fā)布/訂閱(Publish-Subscribe)模式有什么缺點(diǎn)?
- 80年代以后官撼,CPU有哪些變化梧躺?這些變化,對(duì)編程產(chǎn)生了什么影響傲绣?
- 性能生命周期(performace lifecycle)中掠哥,你認(rèn)為哪個(gè)部分是需要考慮進(jìn)去的? 如何管理秃诵?
- 除了惡意攻擊造成的拒絕服務(wù)現(xiàn)象以外续搀,哪些設(shè)計(jì)或者架構(gòu)上的問題會(huì)導(dǎo)致拒絕服務(wù)?
- 性能和可擴(kuò)展性之間有什么關(guān)系菠净?
- 什么時(shí)候緊耦合是OK的禁舷?
- 一個(gè)系統(tǒng)要有什么特征才能適配云計(jì)算環(huán)境(Cloud Ready)彪杉?
- Does unity of design imply an aristocracy of architects?
面向服務(wù)架構(gòu)(SOA)和微服務(wù)(Microservice)相關(guān)問題:
- 在SOA中,為什么長(zhǎng)期存活的事務(wù)(Long-lived transation)不被看好榛了,而Saga卻被看好在讶?
- SOA和MicroService之間有什么區(qū)別?
- 我們來談?wù)刉eb服務(wù)的版本管理霜大、版本兼容性构哺、重大變更管理這些事情吧.
- 在saga中事務(wù)和補(bǔ)償操作(compensation operation)之間的區(qū)別是什么?在SOA中呢战坤?
- 微服務(wù)不能做得太”微”曙强,你認(rèn)為什么時(shí)候微服務(wù)太”微”了?
- MicroService架構(gòu)的優(yōu)劣是什么途茫?
安全相關(guān)問題:
- 什么是雙因素認(rèn)證(Two Factor Authentication)碟嘴?在一個(gè)已有的Web應(yīng)用中,你如何實(shí)現(xiàn)這種機(jī)制囊卜?
比爾蓋茨式問題:
- 如果你把一面鏡子放在掃描儀上娜扇,會(huì)發(fā)生什么?
- 假設(shè)有一個(gè)和你完全一樣的克隆人栅组,而他是你的上司雀瓢,你愿意和他工作嗎?
- 現(xiàn)在請(qǐng)你面試一下我玉掸。
- 為什么Quora上的回答會(huì)比Yahoo Answer上的回答好刃麸?
- 對(duì)手是現(xiàn)代語言,你的任務(wù)是要為Cobol辯護(hù)司浪,你會(huì)如何進(jìn)行泊业?
- 10年后的你是什么樣子?
- 假設(shè)你是我老板啊易,我被解雇了吁伺。你會(huì)如何通知我?
- 我想要重構(gòu)一個(gè)系統(tǒng)租谈,而你想要從頭重寫篮奄。我們來爭(zhēng)論一下該怎么弄吧。然后我們反轉(zhuǎn)角色垦垂,再爭(zhēng)論一下宦搬。
- 老板要你對(duì)公司撒謊,你的反應(yīng)是什么劫拗?
- 如果你可以穿越到以前间校,你會(huì)給年輕時(shí)候的你什么建議?
代碼示例問題:
- 這段Javascript函數(shù)的輸出是什么页慷?
function hookupevents() {
for (var i = 0; i < 3; i++) {
document.getElementById("button" + i)
.addEventListener("click", function() {
alert(i);
});
}
}
- 關(guān)于類型擦除(Type Erasure)憔足,這段Java代碼的輸出是什么胁附?為什么?
ArrayList<Integer> li = new ArrayList<Integer>();
ArrayList<Float> lf = new ArrayList<Float>();
if (li.getClass() == lf.getClass()) // evaluates to true
System.out.println("Equal");
- 你能指出哪兒有內(nèi)存泄漏嗎滓彰?
public class Stack {
private Object[] elements;
private int size = 0;
private static final int DEFAULT_INITIAL_CAPACITY = 16;
public Stack() {
elements = new Object[DEFAULT_INITIAL_CAPACITY];
}
public void push(Object e) {
ensureCapacity();
elements[size++] = e;
}
public Object pop() {
if (size == 0)
throw new EmptyStackException();
return elements[--size];
}
/**
* Ensure space for at least one more element, roughly
* doubling the capacity each time the array needs to grow.
*/
private void ensureCapacity() {
if (elements.length == size)
elements = Arrays.copyOf(elements, 2 * size + 1);
}
}
-
if
語句控妻,或者更加通用點(diǎn),條件表達(dá)式通常是過程式編程/命令式編程的形式揭绑。你能去掉這段代碼中的switch
語句弓候,用面向?qū)ο蟮姆绞絹硇薷倪@段代碼嗎?
public class Formatter {
private Service service;
public Formatter(Service service) {
this.service = service;
}
public String doTheJob(String theInput) {
String response = service.askForPermission();
switch (response) {
case "FAIL":
return "error";
case "OK":
return String.format("%s%s", theInput, theInput);
default:
return null;
}
}
}
- 你能去掉這里的
if
語句他匪,將它改成更加面向?qū)ο髥幔?/li>
public class TheService {
private final FileHandler fileHandler;
private final FooRepository fooRepository;
public TheService(FileHandler fileHandler, FooRepository fooRepository) {
this.fileHandler = fileHandler;
this.fooRepository = fooRepository;
}
public String Execute(final String file) {
final String rewrittenUrl = fileHandler.getXmlFileFromFileName(file);
final String executionId = fileHandler.getExecutionIdFromFileName(file);
if ((executionId == "") || (rewrittenUrl == "")) {
return "";
}
Foo knownFoo = fooRepository.getFooByXmlFileName(rewrittenUrl);
if (knownFoo == null) {
return "";
}
return knownFoo.DoThat(file);
}
}
- 如何重構(gòu)這段代碼菇存?
function()
{
HRESULT error = S_OK;
if(SUCCEEDED(Operation1()))
{
if(SUCCEEDED(Operation2()))
{
if(SUCCEEDED(Operation3()))
{
if(SUCCEEDED(Operation4()))
{
}
else
{
error = OPERATION4FAILED;
}
}
else
{
error = OPERATION3FAILED;
}
}
else
{
error = OPERATION2FAILED;
}
}
else
{
error = OPERATION1FAILED;
}
return error;
}
作者:王爵nice
鏈接:https://www.zhihu.com/question/67846139/answer/257359743
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)邦蜜,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處依鸥。
添加小編微信:grey0805,加入知識(shí)分享小分隊(duì)悼沈,別掉隊(duì)哦贱迟!