1. 程式人生 > >軟體開發軟技能:“從無意識的故障中學習”模式

軟體開發軟技能:“從無意識的故障中學習”模式

本文要點

  • 軟技術模式是經證實可解決常見問題的個人和人際互動行為的組合。
  • 系統故障幾乎不可能完全避免,但同時每次故障也都帶來了改進的機會。
  • “從無意識的故障中學習”模式指導我們在故障事件後改進系統的彈性。
  • 該模型有四個獨立的步驟:識別故障、快速解決即時影響、分析根本原因和故障期的系統行為,最終形成並實現改進思路。
  • 召開事件分析會時必須開放、坦誠、不加責備,這樣才能促成藉助故障改進系統彈性。

什麼是軟技術模式?

軟體開發人員需要強大的軟技能以有效地解決我們所面對的許多問題。

Peter F Drucker ,著名的管理教育家,他告訴我們,“做正確的事比正確地做事更重要。”直觀上,這句格言說得很對。對於程式設計師來說,做一個沒人需要的偉大產品又有什麼價值?

軟技能,包括交流、協作,以及解決問題,界定了我們“做正確的事”的能力。我們的硬(技術)技能只能幫我們“正確地做事”。所以,從有效交付價值這一方面來說,我們的軟技能自然比硬技能更重要了。

自1995年“四人幫”向我們提出“ 設計模式:可複用面向物件軟體的基礎 ”以來,軟體開發人員就已經清楚知名模式的好處了。我們知道,儘管我們所遇到的問題不可能完全一樣,但經常還是能從中找出共同點的。

一旦我們找出這樣的共同點,就能夠把實證有效的解決方案轉換成確定的可複用模式了。這些模式不僅幫我們有效地解決常見硬技能問題,還可以降低我們的決策時間,提升對解決方案的共同理解。

那麼,如果我們可以從解決硬技能問題的模式中獲得收益,能不能也從軟技能問題獲得同樣的收益呢?

在本文中,我們將看一下能幫我們從下述系統故障中促成重大改進的“ 軟技能模式 ”。我們將步入“從無意識的故障中學習”模式。

為什麼是這個模式?

軟體系統有時就是會出故障,這是無法迴避的現實。這些故障會影響系統的使用者,於是開發人員的首要目標就成了把故障及其影響降到最低。幸運的是,每個故障也都同時帶來了改進系統彈性的機會。

“從無意識的故障中學習”的模式是個四步法,其中先識別無意識的系統故障,儘可能快地解決以降低影響,然後進行分析以確定根本原因,基於分析結果得出改進思路並予以實施。

這個模式看上去說得非常直白,很多人乍一看都覺得平平無奇。然而,只有有效徹底地分析,把改進思路落到實處執行,才能從這種做法獲得實際的收益。這種模式說了一種在系統故障發生後獲得實際系統提升的有效方法。

從無意識中學習的實際案例就在我們身邊。防洪堤、建築物裡的自動噴水滅火系統、保險絲,還有汽車裡的安全氣囊,這些只是人類對之前故障作出迴應的一小部分案例。

什麼是“從無意識的故障中學習”模式

“從無意識的故障中學習”模式描述了一個確保從系統的非預期故障中獲取最大價值的有效方法。為了這個模式的目的,考慮系統涉及的任何基於軟體的解決方案或產品。

這個模式的靈感是受到了 Matthew Syed 的《黑盒思考》一書的啟發。Syed介紹這本書說:“……它講的是積極自發地研究那些發生故事時常常存在但我們又很少予以開發的經驗教訓”

事實上,說每次系統故障都可以避免純屬事後諸葛亮。然而,故障在所難免,即使做了最大努力的準備,有些故障仍然有可能發生。這個模式幫我們從所有嚴重的故障中獲得有價值的經驗教訓:從未遂故障到已造成嚴重執行中斷。在廣泛關注的故障中通常都會浮現出可顯著改善系統的新思路,用心去發現吧。即使用於未遂故障和一般故障,這個模式也能形成改進思路。這些思路會對系統彈性有很大幫助,只要它們得以落實。

怎麼使用這個模式

讓我們來看看怎麼使用這個模式,一步一步地來。你將發現該模式中的每一步在上文圖表中都已經定義好了。我將重點介紹每一步中最主要的軟技能。

第一步:系統發生故障

這是此模式的切入點。系統以非預期和非最佳的方式運轉。這可能就會導致對系統使用或輸出的負面影響。以下步驟將幫助你解決這個問題,並從長遠出發改善你的系統。

第二步:解決故障導致的即時影響

如果這個故障導致了負面的影響,那麼就應該立即予以解決。“ 破損系統的危機處理 ”模式針對這個行動詳細詳細描述了一個有效方式。需要重點考慮的是確保任何行為不帶來更糟的影響。

在這一步中,將應用的軟技能包括:冷靜、問題解決技能、風險意識、協作和交流技能。

一旦系統恢復到正常狀態,你就可以前往下一步了。

第三步:分析什麼出現了差錯:根本原因和系統的行為

在這一步,會用到許多的軟技能。需要執行根本原因分析以理解什麼導致系統出現了故障。需要用邏輯思維和分析思維去理解在故障期系統到底有著怎樣的行為。使用協作能力發揮更多人的力量。

有許多 理解和實踐 可用於執行根本原因分析。研究系統故障時,經實驗證明有個稱之為“五個為什麼”的方法通常比較有效。維基百科為這個“五個為什麼”法提供了簡單的示例:

  1. 汽車打不著火了。(問題)
  2. 為什麼?電池不行了。(第一個為什麼)
  3. 為什麼?交流發電機不運轉了。(第二個為什麼)
  4. 為什麼?交流發電機履帶斷了。(第三個為什麼)
  5. 為什麼?交流發電機履帶超過使用壽命後沒有更換。(第四個為什麼)
  6. 為什麼?汽車沒有按照建議的售後日期保養。(第五個為什麼,根本原因出現)

“五個為什麼”確保充分深入地研究,以找出實際的根本原因,而不只是浮在表面上的影響。修改這些影響是很有必要的,但是解決根本原因能得到更多的好處。在上例中,我們應更換交流發電機的履帶,而不應該只解決這個具體的問題。修正根本原因,按期保養,會得到更多的好處。

找出根本原因能避免同樣的故障再次發生。在故障發生時,把系統行為徹底想清楚可能會得到更多的益處。根本原因讓你的系統按反常的方式來運轉。修正根本原因也就掐死了進入這種反常方式的入口。分析反常方式本身經常為帶來額外的改進機會,比根本原因覆蓋更多的可能性。

為了理解故障發生時分析系統行為時可能帶來的好處,讓我們假設正在森林遠足。因為我們不瞭解這一區域,所以得依賴些路標。不久,我們到了一個路口,它的路標牌倒在地上。我們不清楚該往哪裡走了。現在,我們就處於了反常方式,做些什麼呢?根本原因很清楚,那就是路標倒了,但我們的行為將決定其影響。如果我們選擇了錯誤的道路,或者驚慌尖叫著到處亂跑,可能就想回到原路了,認為“回到之前的路上可能會更好”。我們得到的經驗,不是出自於根本原因,而是出自於對行為的分析。

第四步:在經驗總結的基礎上進行改進

在上一步,你找出了故障的根本原因,對故障發生時的系統行為有充分的瞭解。在這一步,你將使用這一新的經驗去形成改進思路,決擇實現其中的哪些思路。最後的環節將是試驗並度量改進思路的效果。

形成思路

在許多情況下,根本原因和系統行為會帶來明顯的改進思路。繼續延伸上一步中提到的汽車的那個例子,通過分析清晰可見,除了替換履帶之外,我們還需要按時進行保養。

通過定義故障期間希望系統採取什麼行為,也可以形成改進思路。有這麼一個例子,對一次系統故障進行原因分析,得出結論是因為你僅有的伺服器上的硬碟驅動器壞了。在這種情況下你可以發現,如果有第二臺“熱”伺服器在跑的話,故障帶來的影響將得到極大地降低。

形成的思路不應侷限於實體的系統,也就是執行中的程式碼。改進系統被使用的方式,以及分析系統故障時識別易界定故障的能力。

思路的形成應具有創新性和“遠大夢想”。要了解一些約束,如成本、時間、所需的技能等,但不能被其束縛。

選擇要實現的思路

選擇要實施的思路時,你可以最終選擇一個、一些或所有思路,也可以一個都不選。選擇要實現哪個思路時,需要做三個主觀測驗:

  • 其預期收益是否會高於預期的成本?
  • 你相信這個思路可以得到有效地實現嗎?
  • 有高階管理者支援這個思路,可以為也這個思路的實現清除障礙的嗎?

如果任意一個測驗回覆為否,那麼就應該放棄這個思路。至於尚存的思路,還要通過一項最終測驗:你們有資源實現所有這些的思路嗎?如果沒有,就使用競爭分析敲定最終的選擇。

實現選擇的思路

只有實現了思路所描述的預期變化,才能從思路中得到價值。在真正實現之前,思路只是組織的成本而非收益。就像買了本從未閱讀的書一樣。

按這個模式來做,選中的只是那些有最大可能實現的思路。通常,最難的一步就是邁出第一步。就像書架上那些你還未閱讀的書一樣,翻開第一頁看起來總是那樣艱難。果斷開始動手吧。如果你們遇到障礙,就請支援這個思路的高階管理者去解決它們。

度量和檢驗取得的價值

有效的開發過程會不斷地評估是否正在實現預期價值,並有針對性地調整整個過程。從改進思路中實現價值也沒有什麼不同。定期重新評估這三項測驗:這個思路仍然具有收益、價值和支持者嗎?隨機應變,如有必要,也可以放棄它。

當一個思路已經實現時,就該評估取得的收益了。有兩種評估方法可以用於評估和檢驗。

儘可能客觀地比較相關度量值的前後變化。以量化資料比較清楚地展示這一變化帶來的價值。比如這樣的一個度量,“在這個變化之前,系統可以處理10個併發事務。而現在,它可以處理100個併發了。”

量化度量也不是總有效。也可以通過測試一個特定的場景來證明價值。例如:“以前,錯誤通常是由第一個受到影響的使用者發現的,這往往會帶來投訴。改變之後,所有系統錯誤都由系統來捕獲,並立即自動地把簡訊發給支援團隊。這就有機會在影響到使用者之前就予以修復了。”

結果1:改進系統彈性

遵循這一模式得到的主要結果是現在系統比故障發生前更有彈性了。按照這一模式中的步驟來做,應可以幫助你找到改進思路,選擇最有收益的那一個,並通過實現它們得到價值。至少,系統再次遇到相同的問題時能有更好的結果。當然,獲取的價值依賴於實現思路的數量和效力。

結果2:更充分地理解系統

這一模式的步驟需要你深入理解你的系統在正常和非正常情況下的行為。這個過程涉及到了許多的人,所以理解不僅要更加深入,還得更加廣泛。更充分地理解很可能對下一步增強系統和改善過程產生積極影響。更好地理解系統,能讓你可以更好地控制它。

結果3:更有效的響應故障的文化

正如我們看到的,積極坦誠地處理故障能對系統帶來重大改進。此外,如果組織有隱瞞故障的文化,大家為了怕受到責備而拒絕承認或找藉口,那麼就錯失了學習的機會。失敗驅動過程的重複模式將消除恐懼,讓大家更加坦誠,推動繼續前進。當然,坦誠的文化比推卸責任的文化能讓人更加愉快地工作。

行動的模式

注意:本故事及其人物純屬虛構(除了我)。

我的手機在1點24分響了:那隻意味著一件事。“Kevin,生產系統宕了——什麼都不工作了!新加坡的使用者非常生氣。你們改過什麼?”我們的支援團隊領導慌亂地叫著。“早上好,ED…”,我儘量條理清晰、冷靜地回覆他,“…你看能否和Fiona一起開個電話會議,給我5分鐘。我們看看問題出在哪裡。”

我(Kevin,倫敦研發經理)、ED(紐約,支援領導)和Fiona(新加坡研發經理)召開了一個電話會議。在其他人的幫助下,花了大約4個小時搞明白什麼出了差錯,然後把系統回退了一個版本。我們遵循“破損系統的危機處理”模式,將保留這四個小時的細節。這個“從無意識的故障中學習”的模式主要關注危機解除和系統恢復正常之後發生了什麼。

不久之後,系統被修復了,Ed和我收到Gail的郵件,她是新加坡銷售團隊的領導,我們系統的一位主要使用者。郵件中說:

“新銷售系統無法使用了,這是最近兩個月裡第15次了。怎麼沒測試過新的資料?我正在親自做事件分析,一個小時了。打電話給每個與此相關的人。馬上!”

我知道要發生什麼了。很明顯,Gail對已經對發生了什麼事和誰應該捱罵已經有了判斷。那一刻,我都忍不住想按她說的去做了,畢竟,她發火的主要目標並不是我。Hardeep是這次變更的開發人員。他幫我們發現並解決了問題。但是,他解釋不了為什麼在他執行的大量測試中沒暴露出來。

我拿起電話小心謹慎地打給Gail。我清楚我必須做正確的事,即使要冒招致負面責備的風險。“嗨,GAIL。對於這次分析會,我只想先簡單地聊一聊。我們可以把它推遲24小時嗎?在我們修復這個問題的同時,我發現了有些東西看起來有些不太對。它們可能解釋了為什麼Hardeep那麼確信他適當地測試了變更。”Gail聽起來很激動,回覆道,“真的?好吧。我現在有很多事得解決。明天,不能再晚了。必須做到。銷售系統宕掉了我們還怎麼賣東西呢?”

我們的銷售系統從許多來源接收資料。Hardeep開發的變更增加了一些新的欄位到已有的營銷資料的輸入提要中(一個純文字檔案)。該輸入提要是我們系統的關鍵,流程的其餘部分都依賴這個資料。

根本原因分析確定了發生的問題,因為更新的資料提要中首次包含了一些以科學符號表示的值(就像1.5E-5)。我們的生產系統因為“E”這個字元沒把這些值看作數字,於是就報了錯。在大量的測試期間沒發現它,因為測試環境使用的資料與生產環境差異很大。在測試環境使用科學符號表示的值沒出現問題。

我草繪了一張圖,展示了變更之後正常的系統流程和實際做出的行為,以便會議期間使用。

在故障期對系統行為的研究得到了一些驚人的發現。首先,我們發現不良資料導致的這個錯誤沒有被丟擲,一直都到了整個過程非常靠後的階段。因為資料是以非結構化方式儲存的,所以資料載入過程並沒受到影響。發現不良資料太晚了,也就是說沒時間去修正它。第二,很明顯整個系統依賴於這些資料。沒有它系統就沒法用。它不僅僅包括營銷資料,還有很多其他資料。

Ed在第二天主持了這個分析會。我們花了兩個小時過了一下所有的細節。為使再次發生同一事件時能有更好的系統行為,我們給這張草圖加了點變化。第一個變化是會立即捕獲到異常並通知資料提供者。第二個變化是,如果他們不能在臨界時間傳送正確的資料,就讓我們能夠複用最近的好資料。有這兩個變化,再次出現這個問題的影響就微不足道了,銷售系統仍然可以使用。

會上對故障相關內容進行了總結記錄,作為本次會議的結束,內容包括一條根本原因和一個解決措施列表。每個人都同意這些措施是我們當前優先順序最高的事,比下一批要開發的特性更加重要。Hardeep很高興有機會向大家展示他費盡心血執行過的測試。甚至Fiona也對結果非常滿意。在分析會結束時她提到“感謝每個人對此做出的如此認真的付出。我發現這不像我之前所想的那樣,僅僅是因為懶惰造成的宕機。我有信心,這些措施能帶來很大的變化。大家動起手來,實現它吧。”

故障總結

“九月九日在銷售系統上做了一個變更,打算將四個新的欄位新增到營銷資料提要中。這次變更無意地修改了一些已有欄位以科學記數法傳送的值。這些非預期值被系統當成非數字來處理了。在日常批處理中試圖讀取這些值時沒有丟擲異常。但後續流程步驟卻由於這些錯誤無法啟動。因為日常批處理失敗,銷售系統就無法使用了。”

根本原因

“發生故障的原因是因為測試環境不太完備。因為測試和生產環境的差異,未在測試期間發現數據型別的問題”。

解決措施

  1. 環境:確保測試環境與生產環境一致,盡最大可能提升測試效力
  2. 資料質量:為所有資料提要載入過程增加一個校驗,確保所有的值都符合預期的資料型別。發現任何不匹配時傳送警告,予以緊急處理。
  3. 批處理依賴:修改日常批處理,如果新的資料不能及時有效,則複用前一天的資料。必要時採用舊資料總要強過無系統可用。

反模式:要避免的陷阱

在本例中,遵循該模式確保了一些良好的系統改進得以實現。在制定決策中使用該模式時,有幾件重要的事應特別注意。

我們不犯錯

我們趕緊制止這個神話吧。人人都會犯錯,如果你是一名開發人員,犯的錯就可能導致系統發生故障。關鍵是從錯誤中總結教訓,不重複犯同樣的錯誤。你所能做的,就是接受錯誤並採取措施。

學習之後不見行動

我經常見到這種反模式。首先是對危機的恐慌。然後是對解決方案興奮不已。盲目樂觀。以及最後一點:行動無優先順序。直到下一次出現危機,由同樣的問題導致的。以同樣的措施進行修復。不言而喻,只有你真的行動起來這些偉大的措施才能真正幫到你。把它們丟在待辦事項中什麼用也沒有。

得出不成熟的結論

對故障原因很容易就會做出一個過早的判斷。這很難避免,所以給你個建議,先不要把這個判斷與別人分享,直至實際上真的搞清楚了。公開發布過早的觀點,經常會導致兩種有害的影響。首先,人為帶動其他人持有同樣的觀點。甚至它完全就是錯的,公開宣告觀點也會讓人當真,而有時它其實與事實相反。在 玩計劃撲克 時,如果有人提前些打出了牌,會不會影響到你的選擇呢?第二點, 認知失調理論 告訴我們,一旦我們把觀點告訴其他人,再去改變這個觀點的個人犧牲會非常大,以至於會讓我們閉上眼不願去看任何有矛盾的證據。在我們的例子中,把分析會推遲了24個小時,讓每個人在分享觀點和下結論前有機會去收集事實依據。如果直接開會,很可能根本就得不出有價值的結論。

責備與自保

事實上,所有有價值的經驗都來自於導致出錯的故障。其實它基本與涉及到的人沒有關係。當然,也有極個別過失或故意造成損害的情況。在這種情況下,就應該對個人採取相應的措施了。開始陳述你的事實觀點時,評估一下是否存在過失或故意的情況。將精力集中在出錯的東西和如何做出改變以避免其再次發生上。在流行責備的文化中,個體將回避深入研究故障,以求自保,若不這麼做就會因為無法避免的錯誤受到責罰。這兩種情況會使組織越來越軟弱,從失敗中學習的機會也就喪失了。

我們光忙著分析了。

你做過事後分析嗎?如何沒有,打算如何從這些故障中總結經驗教訓呢?是的,有效的分析得花時間,但是這幾個小時就能發現系統的重大改進。不要在錯誤的方向上衝刺,在正確的方向上慢跑,你將更快到達終點。

簡單化和從經驗中吸取教訓

軟技能模式歸根結底是通過從經驗中吸取教訓以找辦法讓工作更簡單。我們自己的經驗,和其他人的經驗。將事情簡單化使我們的工作和生活更有效率,並幫我們不斷“做正確的事”。

我們可以使用模式去解決與軟技能(交流、協作、問題解決)的問題,就像我們使用它們去解決硬技能問題一樣。

考慮一下軟技能模式的潛在價值,嘗試一下“從無意識的失敗中學習”模式。我希望,如果你發現它對你有用,你也可以考慮嘗試一下其他的模式。

相關推薦

軟體開發技能意識故障學習模式

本文要點 軟技術模式是經證實可解決常見問題的個人和人際互動行為的組合。系統故障幾乎不可能完全避免,但同時每次故障也都帶來了改進的機會。“從無意識的故障中學習”模式指導我們在故障事件後改進系統的彈性。該模型有四個獨立的步驟:識別故障、快速解決即時影響、分析根本原因和故障期

(轉)Android開發書籍推薦入門到精通系列學習路線書籍介紹

成長 程序員 理論 targe base 官方 app als 自己的 Android開發書籍推薦:從入門到精通系列學習路線書籍介紹 轉自:http://blog.csdn.net/findsafety/article/details/52317506 很多時候我們都會

技能開啟程序員的職場“破冰之旅”

程序員 職場 在我們聊“軟技能”之前,先來區分下“軟技能”和“硬實力”。通常我們將自己專業方向的技能定義為 “硬技能”,以程序員為例的話,我們的算法、計算機知識和編程能力等就屬於“硬技能”,是我們吃飯的家夥,大多數人等著靠他賺錢買車買房娶妻生子,但生活質量的好壞往往由“軟技能”決定的,從兩類技能的關系

常見軟體開發模型對比瀑布、迭代、螺旋、敏捷

一、瀑布模型 模型說明 瀑布模型是將軟體生存週期的各項活動規定為按固定順序而連線的若干階段工作,形如瀑布流水,最終得到軟體產品。 1970年溫斯頓·羅伊斯(Winston Royce)提出了著名的“瀑布模型”,直到80年代早期,它一直是唯一被廣泛採用的軟體開發模型。 核心思想:瀑布模型核心思想是按

PC軟體開發技術之一在WinCC通過VBS操作SQL Server2005

  在專案中需要在一定條件滿足時,儲存一些資料到資料庫中,並可根據條件查詢。考慮到WinCC6.2以後採用的就是SQL Server2005資料庫,所以直接利用該資料庫即可,通過SQL Server Management Studio(SSMS)可以建立自己的資料庫,並按要求建立好

新興機器學習演算法監督降維到監督降維

1.前言 機器學習領域中所謂的降維就是指採用某種對映方法,將原高維空間中的資料點對映到低維度的空間中。降維的本質是學習一個對映函式 f : x->y,其中x是原始資料點的表達,目前最多使用向量

程式碼之外——《技能程式碼之外的生存指南》

    如果你是一個入行幾年進入迷茫期的程式設計師,感覺到了上升的瓶頸也經常受到亞健康的折磨,那麼《軟技能:程式碼之外的生存指南》就值得你一讀。       首先,第一篇《職業》就給人眼前一亮的感覺,

技能程式碼之外的生存指南》讀書感悟02

人在出來工作之後,想要提高自己,大部分人可以選擇且容易選擇的途徑,當然就是自學了。當然,你也可以報個培訓班,這不失為一個好途徑。但我這裡想說的是自學。對於寫程式碼的人來說,自學的方法可能要不太一樣。概括來說就是,從區域性擴充套件,由實踐鞏固。程式設計這門東西,最最底層的東西基

技能程式碼之外的生存指南》讀書感悟03

楔子:    習慣。我看過很多書籍中都有提到,當然這本書中也提到:一個有所成就的人,必定有一身好的習慣。諸如,每天堅持7點起來跑步;早上9點必定計劃好一天工作;每週作一次總結;或是每天堅持讀書等。毫無疑問,好的習慣是可以影響到人的精神面貌。搖想高中那會,每天堅持早起到操場跑個

個人軟體開發職業技能計劃書

說明:類比於木匠,工具和使用工具的能力,能看懂設計圖,按照圖紙做產品,會定製工具。 一、工具 1.一種程式語言 c# 2.一種文字處理語言 python 3.開發IDE

一個遊戲是如何被開發出來的立項到Beta,遊戲開發全流程解析

我在知乎回答“想要自己做一款遊戲,需要學習哪些知識”下面簡單列舉了四個能力,分別是:程式、設計、美術、音樂。但是礙於篇幅限制,我並

測試開發必備技能安全測試漏洞靶場實戰

安全在網際網路行業,是一個對專業性較強,且敏感的一個領域,所謂"一念成佛,一念入魔",安全技術利用得當,可以為你的產品、網站更好的保駕護航,而如果心術不正,利用安全漏洞去做一些未法牟利,則容易造成承擔不必要的違法責任。 在日常很容易被大家忽略的一點,在非授權的情況下,對網站進行滲透攻擊測試,也是屬於非合規操

leetcode--數組題1排序數組刪除重復項

mov urn 示例 ber 需要 baidu i++ int 輸出 給定一個排序數組,你需要在原地刪除重復出現的元素,使得每個元素只出現一次,返回移除後數組的新長度。 不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。 示例 1:

Aways on故障系列之二數據庫有一臺無法同步

系列 意思 ip地址 pin 啟動服務 阿裏雲服務 無法連接 聯通 狀態 服務器用的阿裏雲服務器,自己做的非域Aways On主從同步。 故障描述:某臺從數據庫無法同步主數據庫的數據,查看Aways On的服務器狀態,該服務器已離線。 故障排查:     1.檢查同步面板,

演算法題 90多個數組找最大值(百度筆試題

題目:有n個長度均為m的整型陣列,陣列中的元素都是從小到大有序排列,從所有這些陣列m*n個數中,找出值最大的前k個。請給出思路和時間複雜度。 類似賽馬問題做法 本Markdown編輯器使用StackEdit修改而來,用它寫部落格,將會帶來全新的體驗哦: Markdown和擴

ML0到1 機器學習演算法思路實現全部過程最強攻略

ML:從0到1 機器學習演算法思路實現全部過程最強攻略 設計思路     相關文章 ML之FE:結合Kaggle比賽的某一案例細究Feature Engineering思路框架ML之FE:Feature Engineering——資料型別之預處

《Python程式設計入門到實踐》——學習之前

我是小白,記錄一下心得(大神別噴我,哈哈) 為了學習Python,前後試了IDEL,vim,notepad+,Sublime text3,Pycharm,visual studio code,以及糾結於系統Windows和Ubuntu18.04選擇。 感受總結一下: 1、專注於Pytho

BeanUtils使用一個map集合,拷貝到javaBean(四)

package beanutil; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; impo

Android RxJava 實戰系列磁碟 / 記憶體快取 獲取快取資料

前言 Rxjava,由於其基於事件流的鏈式呼叫、邏輯簡潔 & 使用簡單的特點,深受各大 Android開發者的歡迎。 RxJava如此受歡迎的原因,在於其提供了豐富 &

《精通資料科學線性迴歸到深度學習》筆記

《精通資料科學:從線性迴歸到深度學習》 —— Harrytsz 第 1 章 資料科學概述 The purpose of computing is insight, not numbers. —— Richard Hamming (計算的目的不在於數字,而