自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

扒一扒那些和編程語言無關(guān)的技術(shù)

開發(fā) 開發(fā)工具
“負(fù)載均衡,分布式,集群,高可用......” 這些“高深”的技術(shù)在日常Coding也不常用, 略過不談,主要扒一扒工程中常用的、編程語言無關(guān)的具體技術(shù)。

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

一般來說,一個(gè)人能精通一門語言,然后會(huì)使用另外一種語言就不錯(cuò)了。

既然編程語言學(xué)不完,能不能把重點(diǎn)放到編程語言無關(guān)的技術(shù)上呢?

首先能想到的就是數(shù)據(jù)結(jié)構(gòu)和算法,它的重要性已經(jīng)不用再強(qiáng)調(diào)了,直接跳過。 

“負(fù)載均衡,分布式,集群,高可用......” 這些“高深”的技術(shù)在日常Coding也不常用, 略過不談,主要扒一扒工程中常用的、編程語言無關(guān)的具體技術(shù)。 

[[224848]]

1.HTTP

HTTP誕生于1991年,是互聯(lián)網(wǎng)領(lǐng)域一個(gè)基石性的協(xié)議。全世界電腦上的內(nèi)容能互聯(lián)起來,全拜HTTP所賜。

程序員主要通過HTTP來傳輸XML, JSON等數(shù)據(jù)。日常使用的就是GET、POST方法,但HTTP可不僅僅只有這些,它的細(xì)節(jié)相當(dāng)多, 我覺得程序員至少應(yīng)該掌握這些:

Cookie: domain, path, expiration

HTTP狀態(tài)碼

HTTP長連接  ,由此擴(kuò)展到websocket。

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

緩存 :Last-Modified和ETag

chunked :分塊傳輸

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

2.socket

socket是對(duì)TCP/IP的抽象, 網(wǎng)絡(luò)編程肯定繞不過socket,絕大部分語言都提供了socket相關(guān)的API。

工作中直接對(duì)socket編程的機(jī)會(huì)不多,大多都是封裝好的, 但是要理解socket在客戶端和服務(wù)器端的區(qū)別,服務(wù)器端是如何維護(hù)連接的, 這就會(huì)引出一個(gè)重要的技術(shù):I/O多路復(fù)用(select/poll/epoll) ,也是ngnix,redis等著名軟件的基礎(chǔ)。

I/O多路復(fù)用是I/O模型之一,其他還有同步阻塞,同步非阻塞,信號(hào)驅(qū)動(dòng)和異步。

這方面最經(jīng)典的書應(yīng)該是《Unix網(wǎng)絡(luò)編程了》。

3.安全基礎(chǔ)

如果說socket,HTTP建立了傳輸?shù)耐ǖ?,Hash技術(shù),對(duì)稱/非對(duì)稱加密, 數(shù)字簽名等安全基礎(chǔ)就是安全的守護(hù)者。

去看看最近大熱的區(qū)塊鏈,會(huì)發(fā)現(xiàn)這些安全基礎(chǔ)是區(qū)塊鏈基本的技術(shù)支撐。

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

HTTPS:使用“非對(duì)稱加密”來傳輸“對(duì)稱加密的密鑰”,使用Hash,數(shù)字簽名來確保身份的合法性。

Secure Shell : 使用RSA的方式登錄服務(wù)器

Hash的用途更為廣泛:

用戶密碼的存儲(chǔ): 現(xiàn)在基本上沒有網(wǎng)站存儲(chǔ)明文密碼了,基本上都是把密碼加salt生成hash 值以后來保存。

HashMap等數(shù)據(jù)結(jié)構(gòu): 使用Hash來生成key 。

Memcached :分布式一致性Hash算法。

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

如果是做Web開發(fā),還必須得掌握XSS/CSRF/SQL注入等常見的Web攻擊技術(shù)和和應(yīng)對(duì)方案

4.并發(fā)編程

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

擴(kuò)展開去還有線程池,各種并發(fā)模型如Actor, Channel等等。

5.OOD/OOP(面向?qū)ο蟮脑O(shè)計(jì)/編程)

只要使用面向?qū)ο缶幊陶Z言,就要修煉OOD內(nèi)功,用OO的語言寫面向過程的程序?qū)嵲谑且患杀氖虑椤?/p>

OOD/OOP的核心就是“抽象”, 什么是抽象? 其實(shí)就是擯棄了細(xì)節(jié),找到那些本質(zhì)不變的部分。  舉個(gè)例子, Java中的List 是對(duì)一個(gè)可以通過下標(biāo)順序訪問的集合的抽象,管你是什么ArrayList, LinkedList, 都是List。

有了“抽象”,就可以針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程。就像一個(gè)領(lǐng)導(dǎo),說話的層次高,說出的話比較含糊。

正是由于這個(gè)特點(diǎn),具體的實(shí)現(xiàn)可以替換,可以擴(kuò)展,靈活性很高。

說起來簡單,做起來確很難,因?yàn)檫@個(gè)東西有點(diǎn)“玄妙”,需要自己去修煉,去體會(huì)哪些SOLID原則,去領(lǐng)悟設(shè)計(jì)模式背后的思想,而不是學(xué)習(xí)招式。

閱讀優(yōu)秀源碼是個(gè)很好的途徑,看看大牛們是怎么抽象出哪些“不變”的部分的。

6.數(shù)據(jù)庫

關(guān)系數(shù)據(jù)庫也幾乎是每個(gè)系統(tǒng)的必備,即使是Android開發(fā)也需要利用sqlite這樣的輕型數(shù)據(jù)庫。

所以程序員要會(huì)根據(jù)需求來設(shè)計(jì)表,掌握基本的SQL操作。

深入一點(diǎn)的話,事務(wù)和索引是理解關(guān)系數(shù)據(jù)庫的兩個(gè)重頭戲。

需要理解事務(wù)的特性和隔離級(jí)別,理解Undo/Redo日志的原理。

理解MVCC這個(gè)常見的并發(fā)控制技術(shù)。

理解索引的實(shí)現(xiàn)原理,以及在特定數(shù)據(jù)庫如MySQL的實(shí)現(xiàn)。查詢和索引的關(guān)系。

7.函數(shù)式編程思想

函數(shù)式編程已經(jīng)誕生很久很久了,雖然沒有成為主流,但是它的思想?yún)s在很多語言中生根,發(fā)芽,結(jié)果。

很多語言都擁抱了函數(shù)式編程的思想,JavaScript,Python, Ruby, Scala..... 也包括非常“保守”的Java。

不僅如此,函數(shù)式編程中的Map 和 Reduce 的思想還在大數(shù)據(jù)的領(lǐng)域大放異彩。

我估計(jì)以后使用函數(shù)式編程的機(jī)會(huì)越來越多,了解它的思想有極大好處。

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

8.測試和重構(gòu)

掌握單元測試已經(jīng)是程序員的必備技能了, 如果還不會(huì)的話,趕緊去補(bǔ)上吧。

需要注意的是,一定要讓單元測試有這么幾個(gè)特點(diǎn):

1.  單元測試是“白盒測試”, 應(yīng)該覆蓋各個(gè)分支流程、異常條件

2.  單元測試面向的是一個(gè)單元("Unit"), 是java中的一個(gè)類或者幾個(gè)類組成的單元。

3.  單元測試運(yùn)行一定要快!

4.  單元測試一定是可重復(fù)執(zhí)行的

5.  單元測試之間不能有相互依賴,應(yīng)該是獨(dú)立的。

6.  單元測試代碼和業(yè)務(wù)代碼同等重要, 要一并維護(hù)。

另外還有自動(dòng)化的功能測試, 性能測試,都是應(yīng)該了解,甚至掌握的技能。

重構(gòu)也是一大技能,在保證功能不改變的情況下,讓代碼變得更好。

Martin Flower的書《重構(gòu)》中介紹了巨多的重構(gòu)方法, 我覺得最最常用的是兩個(gè):

變量重命名: 用清晰的名稱體現(xiàn)代碼的意圖

提取函數(shù):將大函數(shù)拆分成小函數(shù),消除重復(fù),讓代碼更容易閱讀

當(dāng)然,重構(gòu)需要IDE的支持,在這一點(diǎn)上靜態(tài)類型語言要比動(dòng)態(tài)類型語言表現(xiàn)得更好。

9.版本管理

公司的源碼肯定是要納入版本管理的,如果你的公司還在通過程序員之間復(fù)制的方式來共享代碼,我建議馬上跑路。

如今程序員也愛社交,不會(huì)使用Git/GitHub簡直不好意思和人打招呼。

初學(xué)者不要把它想得很復(fù)雜,自己找個(gè)教程,動(dòng)手做幾次,很快就掌握了。

10.正則表達(dá)式

這個(gè)不多說,對(duì)文本進(jìn)行查找、替換非常有用。

【本文為51CTO專欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請通過作者微信公眾號(hào)coderising獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2019-10-21 10:59:52

編程語言JavaC

2023-01-30 22:10:12

BeanSpring容器

2015-08-18 09:12:54

app推廣渠道

2015-09-16 14:11:47

2022-07-11 20:46:39

AQSJava

2019-09-10 07:29:44

2019-01-03 11:09:19

2019-02-25 22:46:39

2020-01-15 15:29:52

InnoDB數(shù)據(jù)硬盤

2025-04-30 07:26:04

2022-09-30 09:40:39

智能汽車

2015-09-16 14:04:06

大數(shù)據(jù)巨頭

2023-04-10 23:05:54

NacosOpenFeignRibbon

2015-10-15 13:38:39

2015-12-15 09:51:42

大公司技術(shù)知乎

2015-09-21 10:07:31

2017-09-07 18:45:51

C#

2021-05-13 05:25:16

數(shù)據(jù)分析數(shù)分培訓(xùn)大數(shù)據(jù)

2019-04-28 14:24:54

吳亦凡流量數(shù)據(jù)

2020-12-09 09:22:53

GETPOSTWeb
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)