當前位置:
首頁 > 最新 > 扒一扒那些和編程語言無關的技術

扒一扒那些和編程語言無關的技術

這世界上編程語言如此之多,想學完是不可能的,也是沒有必要的。

一般來說,一個人能精通一門語言,然後會使用另外一種語言就不錯了。

既然編程語言學不完,能不能把重點放到編程語言無關的技術上呢?

首先能想到的就是數據結構和演算法,它的重要性已經不用再強調了,直接跳過。

「負載均衡,分散式,集群,高可用......」 這些「高深」的技術在日常Coding也不常用, 略過不談,主要扒一扒工程中常用的、編程語言無關的具體技術。

1

HTTP

HTTP誕生於1991年,是互聯網領域一個基石性的協議。全世界電腦上的內容能互聯起來,全拜HTTP所賜。

程序員主要通過HTTP來傳輸XML, JSON等數據。日常使用的就是GET、POST方法,但HTTP可不僅僅只有這些,它的細節相當多, 我覺得程序員至少應該掌握這些:

Cookie: domain, path, expiration

HTTP狀態碼

HTTP長連接 ,由此擴展到websocket。

HTTP重定向 ,非常有用的技術,對理解OAuth, CAS(SSO)很有幫助。

緩存 :Last-Modified和ETag

chunked :分塊傳輸

代理:正向代理/反向代理

推薦書籍

《圖解HTTP》

《HTTP權威指南》

碼農翻身文章:

《小白科普:從輸入網址到最後瀏覽器呈現頁面內容,中間發生了什麼?》

《從密碼到token, 一個授權的故事》

《機房夜話》

2

socket

socket是對TCP/IP的抽象, 網路編程肯定繞不過socket,絕大部分語言都提供了socket相關的API。

工作中直接對socket編程的機會不多,大多都是封裝好的, 但是要理解socket在客戶端和伺服器端的區別,伺服器端是如何維護連接的, 這就會引出一個重要的技術:I/O多路復用(select/poll/epoll) ,也是ngnix,redis等著名軟體的基礎。

I/O多路復用是I/O模型之一,其他還有同步阻塞,同步非阻塞,信號驅動和非同步。

這方面最經典的書應該是《Unix網路編程了》。

碼農翻身文章

《張大胖的socket》

《HTTP Server :一個差生的逆襲》

3

安全基礎

如果說socket,HTTP建立了傳輸的通道,Hash技術,對稱/非對稱加密, 數字簽名等安全基礎就是安全的守護者。

去看看最近大熱的區塊鏈,會發現這些安全基礎是區塊鏈基本的技術支撐。

他們是如此重要,到處都能看到他們的身影:

HTTPS:使用「非對稱加密」來傳輸「對稱加密的密鑰」,使用Hash,數字簽名來確保身份的合法性。

Secure Shell : 使用RSA的方式登錄伺服器

Hash的用途更為廣泛:

用戶密碼的存儲: 現在基本上沒有網站存儲明文密碼了,基本上都是把密碼加salt生成hash 值以後來保存。

HashMap等數據結構: 使用Hash來生成key 。

Memcached :分散式一致性Hash演算法。

文件傳輸校驗: 使用Hash演算法生成消息摘要,驗證文件是否被篡改。

如果是做Web開發,還必須得掌握XSS/CSRF/SQL注入等常見的Web攻擊技術和和應對方案

推薦書籍:

《白帽子講安全》

碼農翻身文章:

《一個故事講完HTTPS》

《黑客三兄弟》

《黑客三兄弟續》

4

並發編程

這是一個編程中繞不過的主題,單個線程的狀態變化, 多線程的同步與互斥,各種各樣的鎖,死鎖,ThreadLocal , volatile ,CAS...... 總之有點煩人。

擴展開去還有線程池,各種並發模型如Actor, Channel等等。

推薦書籍:

《實戰Java高並發設計》

《七周七並發模型》

5

OOD/OOP(面向對象的設計/編程)

只要使用面向對象編程語言,就要修鍊OOD內功,用OO的語言寫面向過程的程序實在是一件可悲的事情。

OOD/OOP的核心就是「抽象」, 什麼是抽象? 其實就是擯棄了細節,找到那些本質不變的部分。 舉個例子, Java中的List 是對一個可以通過下標順序訪問的集合的抽象,管你是什麼ArrayList, LinkedList, 都是List。

有了「抽象」,就可以針對介面編程,而不是針對實現編程。就像一個領導,說話的層次高,說出的話比較含糊。

正是由於這個特點,具體的實現可以替換,可以擴展,靈活性很高。

說起來簡單,做起來確很難,因為這個東西有點「玄妙」,需要自己去修鍊,去體會哪些SOLID原則,去領悟設計模式背後的思想,而不是學習招式。

閱讀優秀源碼是個很好的途徑,看看大牛們是怎麼抽象出哪些「不變」的部分的。

推薦書籍:

《Head First設計模式》

《敏捷軟體開發 原則、模式與實踐》

6

資料庫

關係資料庫也幾乎是每個系統的必備,即使是Android開發也需要利用sqlite這樣的輕型資料庫。

所以程序員要會根據需求來設計表,掌握基本的SQL操作。

深入一點的話,事務和索引是理解關係資料庫的兩個重頭戲。

需要理解事務的特性和隔離級別,理解Undo/Redo日誌的原理。

理解MVCC這個常見的並發控制技術。

理解索引的實現原理,以及在特定資料庫如MySQL的實現。查詢和索引的關係。

碼農翻身文章:

《資料庫村的旺財和小強》

7

函數式編程思想

函數式編程已經誕生很久很久了,雖然沒有成為主流,但是它的思想卻在很多語言中生根,發芽,結果。

很多語言都擁抱了函數式編程的思想,JavaScript,Python, Ruby, Scala..... 也包括非常「保守」的Java。

不僅如此,函數式編程中的Map 和 Reduce 的思想還在大數據的領域大放異彩。

我估計以後使用函數式編程的機會越來越多,了解它的思想有極大好處。

函數式編程的基本概念包括: 純函數,不變數,遞歸,高階函數。 高級一點的有Currying, 惰性求值,宏(macro)。

最著名的安利LISP的書就是《黑客與畫家》


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 碼農翻身 的精彩文章:

小白科普:「無狀態」那點事兒

TAG:碼農翻身 |