(點選上方公眾號,可快速關註)
來源:琴水玉,
www.cnblogs.com/lovesqcc/p/4038423.html
摘要:根據我的開發實踐及理解,梳理了作為軟體工程師解決現實問題應當具備的基礎技能。
難度:中級。
程式設計開發本質是運用程式和計算機來解決現實中的各種問題,因此,程式設計開發人員的才智發揮載體是計算機或者說計算裝置,直接武器是程式。程式員用來進行程式設計開發所需要的技能,歸結起來主要如下:
1. 理解計算模型和框架: 順序計算、併發計算 (平行計算、分散式計算); 理解應用所基於的計算模型和框架是非常重要的。傳統應用通常基於順序計算,而現代商業應用,比如雲端計算,通常基於分散式計算架構; 大規模的科學計算應用, 比如基因序列計算, 則基於平行計算。
2. 高效的資料處理:熟悉常用資料結構和演演算法設計,能夠針對計算標的設計高效的資料結構和演演算法並實現之, 滿足效能需求。
3. 大容量的資料管理與檢索:至少精通一種主流資料庫, 從資料處理中分離出的一種專門針對大量應用資料實時檢索要求的技術。
4. 系統底層機制: 行程、訊號、 記憶體管理、API 等, 理解相關概念及實現,熟悉使用Linux&MacOS;&Windows;至少一種作業系統。
5. 行程的網路通訊: TCP/IP socket , RPC ,Http , 序列化與反序列化, 熟悉網路程式設計的底層原理。
6. 程式語言: 面向過程、面向物件、指令碼語言、函式型、瀏覽器語言等,最好每種型別語言掌握一種。
7. 正則運算式:靈活地操作文字和字串。
8. 程式碼閱讀與維護: 能夠讀懂程式碼,維護程式碼,重構或擴充套件程式碼。
9. 錯誤處理技術: 異常機制、 傳回值與全域性變數、 直接退出或重續 等; 建造穩固可靠的應用的必要基礎。
10. 網路搜尋: 尋求有益資源、遠端協作夥伴及有效解答。
11. 程式質量: 保證程式的時間效能、空間效能、安全性、可靠性、可用性、 可擴充套件性、可讀性、可維護性、可移植性、使用者體驗。
12. 設計樣式: 解決實際的設計開發問題, 在現有專案的基礎上擴充套件功能模組時應該會經常用到。
13. 系統架構: 用於子系統的設計, 需要專案經驗積累。
14. 處理大資料量: 通常基於分散式計算架構,比如雲端計算基礎設施。
15. 選用可靠的工具及軟體庫、包: 首先必須確定具體需求,深入瞭解各種工具、技術與框架及其優劣,然後根據需求選擇最適合的那種。
16. 診斷和修複計算機或程式的故障: 上網搜尋已有解決方案;根據原理進行推斷和驗證猜想; 排查縮小範圍; 對比分析; 列印資訊。
18. 除了程式設計的其它使用計算機解決問題的技術和方法: 比如使用現有的軟體。
針對每個問題,將自己掌握的技術和方法整理出來,並使用示例來說明,基本上就可以瞭解自己的技術水平了,同時亦可備日後用。積微知著。人們常說的那些“大技能”,其實可以分解為大量的微技能,而積累越多的微技能,在處理問題時便有了越多的選擇和思考餘地。具體而言:
1. 語言: 至少熟悉六種程式語言,掌握兩種程式語言。 “熟悉”是指大量學習和使用過,“掌握”是指能夠使用該語言 構建大型可靠的軟體系統。 物件式,函式式, 過程式,客戶端語言,指令碼語言,資料語言。 例如, Java / Scala / Python / C / Shell / JavaScript / SQL ;
2. 工具: 編輯器 + IDE + 工程構建 + 版本控制 + 控制檯 + 瀏覽器 + 筆記軟體。 例如 Vim (Sublime) / IntellJ / Maven / Git / Shell / Chrome;
3. 方法: 自頂向下,意圖導引,自底向上; First Right, then Good ; 預先設計, 及早動手; 迭代式開發、釋出、反饋和成長 ; 預估時間;
4. 風格: K&R; C , Java 程式設計規範, 排版整潔,程式碼簡潔無冗餘, 一致, 使用地道表達正規化;
5. 模型: 序列, 併發,多行程, 多執行緒, MapReduce , B/S , 非同步, 回呼,阻塞, 非阻塞,並行,分散式;
6 思想: 結構,控制,過程, 物件, 函式,宣告, 原語, 集合, 組合, 抽象, 封裝,復用,分層,樣式,分治,快取,中斷,數學性質;
7. 演演算法: 分治, 遞迴,動態規劃, 時空權衡, 貪婪演演算法,優先順序演演算法,迭代改進,深度遍歷,廣度遍歷,問題轉化;
8. 排序: 插入排序, 選擇排序,快速排序, 堆排序, 歸併排序,基數排序,外部排序;
9. 搜尋: 順序搜尋, 二分搜尋, 雜湊搜尋, 深度優先搜尋,廣度優先搜尋,分段並行搜尋;
10. 資料結構: 點陣圖,陣列, 連結串列,棧,佇列, 二叉樹, 字串, 雜湊表,圖;Json, XML, 記錄,資料庫; Key-Value 值對集合;非結構化儲存。
11. 文字處理: find , grep, awk, sed, sort, cut, uniq, tr, ls, cat, xargs, 正則運算式;
12. 設計樣式: 工廠, 單例,原型, 模板,策略, 狀態, 觀察者, 中介者, 責任鏈, 組合, 命令, 代理,外觀,配接器,裝飾器,迭代器;
13. 應用樣式: WrapperFacade, Component Configurator, Interceptor, Extension Interface, Reactor, Proactor, Asyn Completion Token, Acceptor-Connector, Strategized Locking, Thread-Safe Interface, Double-Checked Locking Optimization, Active Object, Monitor Object, Half-Sync/Half-Async, Leader/Followers, Thread-Specific Storage ;參見《面向樣式的軟體架構:併發與聯網物件樣式》
14. 行程與網路: ps(pstree), top, kill, crontab, ifconfig, ping, telnet, netstat, tcpdump, ssh, scp, wget, curl, Socket , HTTP ; 任務管理器 ;
15. 開發框架: Servlet, Spring, Struts, ibatis , Hibernate, Aop, jQuery , Extjs, Bootstrap, Flex ;
16. 常用元件: 日誌 , 實用工具 (字串, 日期, JSON/XML, HTTP, Email) , 簽名校驗,集合容器,模板引擎,併發庫,圖表(Highcharts)等 ;
17. 執行容器: apacheHttp , tomcat, jetty, nginx , Docker,JVM, 瀏覽器,叢集;
18. 中介軟體: Tair, Zookeeper, Dubbo, 資料庫連線池,日誌服務, 快取, 定時任務,可靠訊息服務,可靠心跳服務,工作流引擎, 負載均衡 ;
19. 軟體架構: MVCDD (Model – View – Controller – Domain – DB) ;流水線,管道與過濾器; 事件驅動; 領域建模;以資料為中心的架構;
20. 測試技術: 質量風險分析,測試資料集, 測試用例,等價類劃分, 分支改寫, 域測試,正交表,決策表,狀態轉換圖,邊界測試, 空測試, 異常測試,漫遊測試, 依賴Mock;單測;介面測試;整合測試;全鏈路壓測;
21. 程式碼組織: 頭檔案, 類檔案,包機制,名字空間;
22. 軟體工程: 模組化, 封裝,面向物件,使用者故事,迭代開發,持續整合,單元測試,CodeReview,驗收測試,持續交付;
23. 測量監控: 效能測量,time ,系統/介面/業務指標,錯誤報警;
24. 學習資源: 開源專案,公開課,論文,infoq, stackoverflow , blogs, google , baidu;
25. 經典書籍: 參見《計算機專業及軟體開發推薦書籍》
看完本文有收穫?請轉發分享給更多人
關註「ImportNew」,提升Java技能