技術思考框架 抽象 思路 考量 優化 細節

2022-01-13 07:24:54 字數 2290 閱讀 4374

如何思考問題與思考具體問題同等重要。

如何思考乙個技術問題?如何高效地理解某個技術 ?如何快速學習乙個新的技術點 ? 這都需要乙個好的技術思考框架。缺乏思考框架,知識和技術就變成一堆細節的堆砌,缺乏關聯,難以理解和記憶,也就難以掌握和應用。

本文來探索一種好的技術思考框架。

抽象

抽象非常重要。乙個典型的例子是刪除操作。刪除操作提供的是「使用者不可見」的抽象。可以採用兩種思路:

可以看到,提供良好的抽象,而不是直覺上按照使用者的要求去做,往往會帶來更靈活的設計空間。

抽象最好能用一句話概括。比如,文字編輯器(ui介面)提供的是「所見即所得」的抽象;理財產品提供的是符合利率模型的計算抽象。

思路

思路是如何去基本實現的問題。在問題討論初期,提出盡可能多種思路,應對不同的場景。比如排序,就有插入排序、氣泡排序、快速排序、合併排序、希爾排序、桶排序、外部排序、多關鍵字排序等。不同的排序具有不同的特性,在不同的場景下使用。挖掘盡可能多的思路,有助於拓展對問題的思考。好的思路是成功的一半。

考量和優化

考量和優化往往需要豐富的開發實踐經驗。知道往哪個方向使力,如何使力,需要解決什麼技術難點等。

細節

在掌握巨集觀視角後,細節的打磨尤為重要。細節處理不當,可能會導致整體工作前功盡棄。程式設計師或工程師的一大特質,即是體現在細節的考慮和思維的縝密上。

考慮各種錯誤和異常,考慮依賴服務、伺服器、網路等的不可靠,是做好細節工作的必要前提。

以 redis 持久化為例。

抽象

持久化,即是給使用者提供乙個「資料儲存了、即使掉電或重啟也能從某處找回資料」的抽象。

思路

如何實現 redis 持久化 ? 持久化就是將 redis 記憶體資料庫的資料集狀態儲存在某個磁碟檔案裡。可以基於兩種思路:

考量

實際工程中要考慮什麼因素呢 ?

優化

針對上述考量因素,可制定相應優化措施:

細節

rdb 機制的細節:

aof 機制的細節:

aof 重寫集合: 為了避免緩衝區溢位,重寫集合時,可根據 redis_aof_rewrite_items_per_cmd 配置,乙個數量為 n 的很大的集合,會拆分為 ( n / redis_aof_rewrite_items_per_cmd +1 ) 個重寫命令;

應用啟動時,預設載入 rdb 檔案;恢復資料庫狀態時,優先使用 aof 機制,若 aof 關閉,則採用 rdb 機制。

以高併發處理為例。如何應對高併發流量呢?這是網際網路應用必然面對的乙個重大挑戰。

抽象

高併發流量問題,本質是資源有限的問題。即是用有限的資源去應對不確定性的巨大流量的矛盾。假設有足夠的資源,加以適當的水平擴充套件,高併發也不算什麼事。難在用現有的架構、現有的資源來應對巨大流量,而且無論預留多少資源,總是不一定能承載未來可能降臨的超過負載能力的峰值流量。

思路

既然是資源有限的問題,那麼思路也就三條:

考量

優化

提公升服務能力:

加資源(在不同層面):

限流: 仍然無法承載的流量,採用限流處理掉。

細節

高併發實際上是乙個實戰性很強的事情。沒有經過高併發流量的洗禮,只談理論終究還是隔著點。不過,至少要了解相關理論,才能在實戰中積極運用並積累經驗。

從上述示例可以看到:

抽象、考量和優化,需要建基於乙個比較豐富的技術體系結構。為什麼考慮這個問題而不考慮那個問題?為什麼選擇優化這個而不是優化那個?良好的技術體系結構可以串聯起所有的知識、技術、經驗,使其關聯清晰可見,並提供強有力的理論指導。

因此,打造乙個適合自己的技術體系結構非常重要,這也是未來的核心競爭力之一。比如 「網際網路應用服務端的常用技術思想與機制綱要」 即是圍繞「資料處理」這個中心主題,從靈活性、高效能、高可用、高可靠、一致性、海量、安全、自動化、智慧型化八個方面打造的技術體系結構。這個體系結構幾乎可以容納各種技術流派和技術優化手段。

合適的抽象會帶來更靈活的設計空間和思路,而考量則會決定優化的大方向,在優化的過程中解決細節問題。在學習技術的過程中,要逐步打造適合自己的技術體系結構,不斷充實這個體系結構,從而具備更強的系統思考力和技術吸收力。

抽象程度思考

軟體設計的重點在於抽象 不記得這句話是哪位說的了,我想改正一下 保證軟體靈活性設計的重點是抽象 由此可知,抽象的作用是 保證軟體的靈活性設計 越來越多的語言 平台構建在oo思想之上,這充分說明了oo的正確性。oo,一種思想,一種談到軟體設計時必須涉及的思想,越來越多的人開始追捧它,當然,我也是其中之...

培養抽象思考能力

數學被視為科學之母,可以被廣泛的應用其它學科,要討論為何數學這麼乙個純綷的學科具有什麼樣的特質,使其可以被使用於各個領域,其實乙個最簡單的回答就是 抽象 抽象這兩個字,究其字面意義要行解釋,本身就很 抽象 我們舉個實際的例子 1 1 2 就是抽象,您可以具體的在數字後面加上單位,像是蘋果 狗 人等具...

培養抽象思考能力

數學被視為科學之母,可以被廣泛的應用其它學科,要討論為何數學這麼乙個純綷的學科具有什麼樣的特質,使其可以被使用於各個領域,其實乙個最簡單的回答就是 抽象 抽象這兩個字,究其字面意義要行解釋,本身就很 抽象 我們舉個實際的例子 1 1 2 就是抽象,您可以具體的在數字後面加上單位,像是蘋果 狗 人等具...