1. 程式人生 > >Java工程師修煉之道! | 送10本書籍

Java工程師修煉之道! | 送10本書籍

作者:著有《Java工程師修煉之道》

出處:來自Java工程師修煉之道一書節選內容

一、軟體開發的核心原則

此處所說的是軟體開發應該遵循的一些核心原則:

1、Don’t Repeat Yourself: 這是軟體開發的一個基礎原則,即不要做重複性勞動。也是現在所說的“極客文化”的一種。程式碼重複、工作重複在軟體開發中都是不合理的存在。利用各種手段消除這些重複是軟體開發的一個核心工作準則。

2、Keep it simple stupid:即KISS原則。在做軟體設計的工作中,很多時候都不要想得過於複雜,也不要過度設計和過早優化,用最簡單且行之有效的方案也就避免了複雜方案帶來的各種額外成本。既有利於後續的維護,也利於進一步的擴充套件。

3、You Ain’t Gonna Need It: 即YAGNI原則。只需要將應用程式必需的功能包含進來,而不要試圖新增任何其他你認為可能需要的功能。因為在一個軟體中,往往80%的請求都花費在20%的功能上。

4、Done is better than perfect: 在面對一個開發任務時,最佳的一個思路就是先把東西做出來,再去迭代優化。如果一開始就面面俱到,考慮到各種細節,那麼很容易陷入牛角尖而延誤專案進度。

5、Choose the most suitable things: 這是在做方案選擇、技術選型時候的一個很重要的原則。在面對許多技術方案、開源實現的時候,務必做到的是不能盲目求新,要選擇最合適的而非被吹得天花亂墜的。

二、軟體過程

一個軟體的生命週期中,除了開發還有很多其他步驟,也都是需要掌握的一些技術。

1、專案管理:專案管理對於一個軟體的開發是非常重要的,能夠保證專案進度有條不紊地進行,在可控的時間內以一定的質量交付。瀑布開發模型、螺旋開發模型是傳統的專案管理模型。在網際網路的開發工作中,敏捷開發則是比較受推崇的開發方式。所謂敏捷開發即快速實現原型,然後快速迭代。Scrum是目前普遍流行的敏捷開發方式之一。

2、測試驅動開發:在平時的開發過程中,目前比較流行也是行之有效的一種方式就是Test Driven Develop,即測試驅動開發。此種方式的核心就是編寫單元測試。簡單來講,就是先完成某一個功能的單元測試用例,然後在逐步消除測試用例的編譯錯誤的過程中完成功能的開發。

3、續整合:某一個軟體功能完成開發之後,後續還有測試、預釋出、部署等過程。整個過程稱之為整合,而持續整合指的是無需人工干預可以不斷地進行這個過程。Jenkins、Quick Build都是比較典型的持續整合工具。

三、日常開發

日常開發指的是一些日常需要掌握的技能、工具等。

1、編輯器:開發中現在用的比較多的編輯器包括Emacs、Vim和SublimeText。筆者用的最多的就是SublimeText,基本能夠滿足自己的開發需求,包括編寫指令碼程式碼、檢視程式碼檔案等。Vim和Emacs這兩款編輯器相對SublimeText來說需要記住很多命令,有一定的上手門檻。

2、原始碼版本管理:程式碼的版本管理工具由CVS到SVN再到現在的Git,已經在事實上形成了以分散式版本管理為主的版本管理方案。基於Git,可以採用Git Flow做為原始碼管理模型。

3、專案工具:Github是一個第三方Git中央倉庫,目前是世界最大的開原始碼庫,也能夠做為私人的程式碼管理軟體;Facebook開源的Phabrictor提供了非常強大的任務管理、Bug管理、測試、程式碼管理等,但其上手門檻相對較高;禪道是國人開發的一款專案管理工具,但是其免費版功能有限;以Tower.im為代表的第三方專案管理服務也是一個可選擇的方案,風險在於資料都不再是私有的。

四、執行環境

後端應用開發完成之後是需要部署到伺服器上對外提供服務的。從最開始的直接在物理機上部署服務到後來的虛擬環境、雲環境再到現在火熱的容器,直至最近興起的無伺服器技術。都是為了讓服務的執行環境能夠更加便於建立、更容易維護、更容易擴充套件。

1、Linux: 說到後端伺服器肯定繞不過Linux。至少現在網際網路的後端服務絕大多數都是部署在Linux的各種伺服器版本中的。其中CentOS、Ubuntu以及Debian是用的比較多的版本。對於Linux,需要熟練掌握的就是很多常用Shell命令如ps、netstat、lsof、ss、df、dh等等。此外,很多效能分析命令如top、vmstat、iostat、sar等也需要熟練使用。

2、應用伺服器:就Java來講,很多時候開發的都是Web應用,以HTTP協議對外提供服務。除了對效能要求比較苛刻的情況下會自己構建HTTP服務之外,大部分情況是需要依賴於支援Java程式的應用伺服器的。目前最為常用的有:Tomcat、Jetty。嚴格來講,這兩者只是Servlet容器,真正的JavaEE應用伺服器如Jboss、Weblogic在網際網路領域很少使用。當然,這些軟體並沒有提供URL重寫、請求委託等Web伺服器功能,還不足以擔當完整Web伺服器的角色。Nginx則是目前最為流行的Web伺服器。

3、負載均衡:在高併發流量環境下,後端服務會以叢集的模式對外提供服務。在叢集的前面,需要負載均衡器將請求分配到叢集的各個結點上。LVS是最為流行的四層負載均衡軟體,HAProxy是另一個即支援四層又支援七層負載均衡的軟體,Nginx則是七層負載均衡最為流行的解決方案。當然,效能最為好的負載均衡方案是以F5為代表的硬體負載均衡,但由於其昂貴的成本因此在網際網路團隊中很少使用。此外,這裡需要補充的是為了保證同等角色的服務的高可用,如LVS經常作為流量的入口,因此會部署多個LVS結點互為主備防止一個掛掉的時候造成服務不可用。而實現互為主備的技術目前用的最多的就是Keepalived。

4、虛擬化:虛擬化技術是前幾年經常用來做私有云的一種技術。即將自己的物理主機通過虛擬化技術分裂為多個虛擬主機,能夠隔離資源。其中,VPS(虛擬專用伺服器)的代表技術包括:微軟的Virtual Server、VMware的ESX Server、SWsoft的Virtuozzo。此外,OpenStack提供的構建私有IIAS的功能、Cloud Foundry提供的構建私有平臺執行環境以及Docker帶來的容器服務都是虛擬化技術的一種。

五、第三方服務

雖然從根本上講所有的軟體服務都是可以自己開發的或者部署到自己伺服器上的。但是受限於成本、週期或者其他客觀因素,很多服務還是需要使用第三方的。

1、IAAS:Infrastructure As A Service, 是雲端計算最開始的一種模式,現在基本上所有的雲服務商都有IAAS的服務。其中,全球最強大的雲服務提供商是亞馬遜的AWS,國內的則當屬阿里雲。就目前來看,即使是強如AWS也會出現一些運維故障,因此國內的這些雲端計算提供商很多時候的服務健壯性、運維響應更是經常被人吐糟。就筆者自己的經歷來看。2010年左右,盛大雲的雲服務其實做的還不錯,但後來由於種種原因現在基本已經沒啥份額了。國內除了阿里雲,UCloud算是專注做雲端計算的一個比較靠譜的公司了。此外,還有一個青雲,做的東西略顯高大上,也是一個不錯的選擇。當然,現在這些雲服務商早就不僅僅是IAAS了,也做了很多PAAS的服務。

2、PAAS:Platform As A Service,即只需要提交程式碼到指定的執行環境,其他的諸如程式碼打包、部署、IP繫結都由平臺完成。除了可以使用Cloud Foundry構建自己的PAAS平臺以外,現在最為流行的第三方PAAS服務有:新浪的SAE、百度的BAE以及Google的GAE。

3、域名:有個可以提供服務的應用後,那麼域名也是一個必須的基礎設施。一個好的域名不僅僅代表企業的形象,也能夠更加方便使用者的記憶與傳播。目前購買域名可以通過國外的name.com、godaddy以及國內的萬網等。有了域名之後下一步就得進行備案,域名提供商一般都提供了配套服務或者去找一些代理也可以辦下來。此外,對於域名的解析,域名提供商一般會內建解析功能,也可以使用獨立的DNS服務,如dnspod。

4、CDN: 內容分發網路,即就近請求的一種技術實現。服務提供方將會被大量訪問的內容在全國的多個結點都做快取,這樣當用戶訪問時就能夠就近選擇,從而減少網路傳輸延時,提高訪問速度。國內目前七牛和又拍都提供了不錯的CDN服務,當然像阿里雲、UCloud這種綜合雲服務商也都有CDN服務。

5、郵件傳送:這個主要需要依賴郵件伺服器,然後通過SMTP協議就可以實現傳送。可以選擇自己搭建,也可以選擇諸如騰訊郵箱、網易郵箱等。

6、簡訊傳送:使用簡訊傳送驗證碼、營銷簡訊是很常見的應用場景。由於簡訊是需要運營商支援的,所以這一塊基本上都是需要依賴第三方代理的。市面上也有很多簡訊閘道器代理。

7、訊息推送:在移動應用上,推送已經成為一個標配功能。目前個推應該是第三方推送服務中的佼佼者,而且由於其客戶很多,在聯盟喚醒上有很大的優勢。

8、開放平臺:通過開放平臺,可以使用OAuth等協議獲取使用者在第三方平臺上的資訊實現第三方平臺登入等。目前,微博、微信、QQ是最常見的第三方登入方式,基本上都是使用OAuth協議為第三方開發者提供服務的。

9、支付介面:支付介面是很多內建購買功能軟體的必備元件。目前,接入最多的無非是支付寶和微信,都提供了開放平臺供商家接入。當然,也有直接繫結銀行卡支付的,此時需要走的就是銀行或者銀聯的閘道器介面。

七、計算機基礎科學知識

對於像資料結構、演算法、計算機網路、作業系統、計算機組成原理這些電腦科學基礎知識,不管是後端還是其他領域都是必須的技能,也是所有軟體開發的基礎。紮實的電腦科學基礎才能讓你在學習、使用某種技術開發軟體、除錯軟體、排查問題時能夠心裡有底、有據可循。

1、資料結構:資料結構是組成程式的基礎。經典的資料結構包括:字串、陣列、連結串列、雜湊表、樹(二叉樹、平衡樹、紅黑樹、B樹)、堆疊、佇列、圖。

2、演算法: 經典的排序和查詢演算法在平時的開發工作中經常會用到,如:氣泡排序、插入排序、選擇排序、歸併排序、快速排序、希爾排序、堆排序以及二分查詢等。此外,在函式/方法的演算法實現中要注意遞迴和迭代各自的優缺點。而衡量演算法效能無外乎空間複雜度和時間複雜度。

3、業務相關演算法:除了上面的基本演算法之外,業務中還會經常涉及到一些更為複雜的演算法,如:壓縮演算法、LRU快取演算法、快取一致性、編譯原理中的狀態機等。此外,目前越來越火的機器學習中有很多演算法也是在很多業務場景中有很大用途的,如:用於文字分詞的結巴分詞和中科院ICTCLAS;用於關鍵詞提取的TF-IDF和TextRank;用於計算文字相似度的主題模型、Word2Vec、餘弦相似度以及歐幾里得距離;用於文字分類的樸素貝葉斯;用於推薦的聚類、協同過濾、使用者畫像、隱語義模型等。

4、計算機網路: TCP/IP協議是網路最根本的協議,其七層/四層協議棧的設計都是非常精華的東西,連線的建立、斷開以及連線的各種狀態的轉換都是排查、解決網路問題的根本依據。從TCP/IP往上,HTTP協議是現在絕大多數後端應用對外提供的協議,發展到現在已經將要步入HTTP2.0時代,帶來了持久連線、連線複用等令人振奮的新特性。此外,基於HTTP的HTTPS協議由於其安全性在逐漸的成為後端服務對外開放的主流協議。業務層面,基於HTTP協議的RESTful規範正成為對外介面的主流規範,而OAuth2.0協議也在成為開放平臺對外的主流協議。除了HTTP之外,SMTP是另一個基於TCP/IP的應用協議,主要用在傳送郵件上。

5、設計模式: 在軟體開發中,前人的經驗形成了很多經典設計模式供我們使用,能夠使得軟體的實現可服用、可擴充套件、可維護。經典的工廠模式、簡單工廠模式、單例模式、觀察者模式、代理模式、建築者模式、門面模式、介面卡模式、裝飾器模式在日常的很多開發場景下都具有很重要的意義。

八、資料

現在網際網路的所有業務其實都是圍繞資料來進行的。而資料傳輸、資料儲存、資料分析處理都是關鍵的部分。

1、快取記憶體:目前用的最為廣泛的快取軟體Redis能夠支援豐富的資料結構,如:字串、列表、有序集合等多種資料的儲存。瞭解快取實現的原理、記憶體淘汰的策略能夠更好地使用快取。此外由於快取的成本較高,在使用快取的時候一定要做好量化和儲存優化工作。

2、資料庫:掌握資料庫的很大一個關鍵點就在於對索引的使用,可以說,正確地使用索引就基本等於掌握了資料庫的使用。目前絕大多資料庫都是使用B樹做為索引的資料結構,目的就是為了利用磁碟順序讀寫的特性。不同的資料庫由於本身設計目的的不同,都有一些獨特的優勢,如:MongoDB天然支援sharding,但受限於NoSQL,在重事務、有關聯關係的場景下並不適用;HBase使用LSM作為底層資料結構,犧牲了讀效能來換取高速的寫效能。

3、搜尋引擎:搜尋引擎主要應對全文檢索以及多維度查詢的業務場景。掌握搜尋引擎使用的資料結構、叢集方式、配置的關鍵點有助於更好地使用搜索引擎服務於業務應用。

4、訊息佇列:訊息佇列有兩種角色:生產者和消費者,兩種角色對於訊息佇列的需求也不一樣。其中,對於消費者來說,訊息消費的方式包括髮布-訂閱和佇列兩種。訊息佇列在語義保證上分為:At Most Once、At Least Once、Exactly Once三種模式,需要更具特定的業務場景選擇合適的語義保證。此外,訊息佇列對於高可用、訊息安全的保證決定了此訊息佇列的可靠性。

5、資料儲存和處理:資料儲存下來最終還是要用來做分析和處理的。資料的處理分為離線處理和實時處理。離線處理的優勢在於能夠處理大量資料,但是一般會有T+1的延遲,適用於計算量大但是對於結果允許有延時的場景。但對於離線資料分析,還有一個很關鍵的就是資料傾斜問題。所謂資料傾斜指的是region資料分佈不均,造成有的結點負載很低,而有些卻負載很高,從而影響整體的效能。因此,處理好資料傾斜問題對於離線資料處理是很關鍵的。而實時處理一般是流式處理方式,適用於資料能夠轉換為資料流,對於結果要求及時性的場景。對於實時資料分析,需要注意的就是實時資料處理結果寫入儲存的時候,要考慮併發的問題,雖然對於Storm的Bolt程式來說不會有併發的問題,但是寫入的儲存介質是會面臨多工同時讀寫的。通常採用的方案就是採用時間視窗的方式對資料做緩衝後批量寫入。

6、資料同步:資料倉庫的資料來源除了直接的日誌外還有一個很關鍵的就是業務資料庫。從業務資料庫到資料倉庫的過程稱為資料同步。有基於SQL的同步方案,也有基於MySQL binglog的增量同步方案。

九、Java

對於Java方面的技能來說,主要有兩個大的部分,包括Java程式設計和JVM。

先來看一下Java程式設計部分,這也是Java工程師最最基礎的技能。

1、IDE: 目前用的最多的Java IDE當屬Eclipse和Intellij IDEA。前者是老牌IDE,逐步淘汰了Jbuilder以及Netbeans,佔領了大部分Java IDE市場。後者則是後起之秀,由於其增量編譯、智慧分析程式碼等帶來的效能提升,現在已經得到了大規模使用,大有取代Eclipse之勢。

2、核心語法:目前用的最多的當屬JDK6的Java語法。而到了Java7引入了try with resource、switch string、diamonds等語法。Java8則又引入了lambda、stream等語法。

3、集合類:集合類是Java語言中非常精華的部分,包括:HashMap、ArrayList、LinkedList、HashSet、TreeSet以及執行緒安全的ConcurrentHashMap、ConcurrentLinkedQueue等執行緒安全集合。瞭解他們的實現原理以及查詢、修改的效能以及使用場景是非常必要的。

4、工具類:Google Guava、Apache commons、FastJson提供了很多JDK本身沒有的工具類、集合等。此外,ASM位元組碼操作以及CGLIB程式碼生成能夠提供更底層的java程式設計功能。

5、高階特性:拋開Java核心的基本程式設計,併發程式設計、泛型、網路程式設計、序列化RPC都屬於java的高階程式設計特性。其中併發程式設計需要掌握Executors提供的各種併發工具、Java7帶來的fork/join框架以及CountDownLatch、Semaphore、CyclicBarrier等同步工具;網路程式設計要區分好BIO、NIO以及AIO;序列化中除了JDK自帶的序列化實現之外,Protobuf和Kryo是比較高效的第三方實現;RPC的實現中,Thrift、Hessian、Dubbo以及RMI則是比較常用的幾個協議,其中的Hessian是基於Http協議的,Dubbo是基於TCP協議,而Thrift則同時支援。

6、JavaEE: JavaEE現在是Java應用最為普遍的一個領域。Servlet是JavaEE中最根本的元件之一。而Servlet3.0帶來的非同步Servlet提高了其處理請求的效能。

7、專案構建:目前用的最多的Java專案構建工具包括Maven和Gradle,提供了原始碼包依賴管理、編譯、打包、部署等一系列功能。

8、程式設計框架:Spring是Java程式設計中避不開的一個框架,發展到現在除了Spring核心的IOC、AOP之外,SpringMVC、Spring Data、Spring Cloud、Spring Boot等等都給Java開發者們帶來了開發上的便利,大大提高了開發效率;ORM框架MyBatis也是Java領域比較火的框架之一,實現了資料庫記錄到Java物件的對映操作;Jersey則提供了從客戶端到服務端的一整套符合RESTful規範的開發框架。此外,Vert.x、Spring Flux這種非常適用於IO密集型應用的非同步響應式程式設計框架也開始興起。

9、測試:測試是任何程式設計都需要的一步。黑盒測試主要指的通常進行的功能測試,白盒測試則主要指的對程式碼功能、質量進行的測試。此外,關鍵的單元測試則是開發工程師需要著重注意的地方,“測試驅動開發”的理念也是值得推崇的開發方式。JUnit是目前Java中實現單元測試的主流方案。

一般來說掌握上面所述的Java程式設計技能是能夠應付大多程式設計工作的。但是如果在程式碼層面已經做到最大努力卻還是達不到效能要求的時候,就需要在JVM虛擬機器層面做一些努力了。可以說掌握JVM相關技術是Java開發進階的一個關鍵步驟。

1、虛擬機器實現: Java的虛擬機器實現除了我們常用的HotSpot外,還有JRockit、J9以及移動平臺的Dalvkit、ART(Android4.4後引入)。我們通常鎖描述的JVM優化絕大多是是針對HotSpot虛擬機器來說的。

2、類載入機制:JVM的類載入機器遵循雙親委派原則,即當前類載入器需要先去請求父載入器去載入當前類,如果無法完成自己才去嘗試進行載入。OSGI框架則打破了此機制,採用了平等的、網狀的類載入機制,以實現模組化的載入方案。

3、執行時記憶體組成: 程式計數器、堆疊、方法區、堆、堆外記憶體,這些一起組成了JVM的執行時記憶體。

4、Java記憶體模型:Java的主記憶體+執行緒私有記憶體的模型是執行緒安全問題產生的根本。

5、GC原理和調優:與C、C++這些語言相比,GC是Java的優勢,但因為GC的細節被JVM遮蔽了,在對記憶體、效能要求非常苛刻的情況下難以進行自由控制,某種程度這也是劣勢。如果想在某些場景下發揮GC的最大效能,能做的就是對GC的各種引數做優化配置,如新生代和老年代的垃圾回收器選擇、各種垃圾回收引數的配置等。此外,很多時候由於程式碼質量或者外部客觀因素,造成了JVM頻繁GC,需要使用相關的工具快速進行問題定位和解決。

6、效能調優和監控工具:JDK自帶了很多強大的調優和監控工具,包括jmap、jstack、jcmd、jconsole、jinfo等。此外,btrace是一款非常強大的線上問題動態排查工具,能夠無須重啟Java程序,動態的插入一些程式碼邏輯,從而攔截程式碼執行邏輯列印日誌,從而排查問題。

十、系統架構

一個應用從0開始一般會經歷單體應用、垂直應用到分散式服務架構的演化。如下圖所示:

1、單體應用:當應用規模、團隊規模比較小的時候,只需要一個包括了所有功能的應用即可。減少部署結點,也減少了部署成本。此時,對資料庫的ORM操作是架構實現的關鍵點。

2、垂直應用:當應用的使用者規模越來越大,請求量越來越高的時候。單體應用增加結點帶來的資源浪費會凸現出來,因為絕大多數介面請求量並沒有特別大,根本沒必要擴充到多個結點。此時,就可以將單體應用拆分成互不相關的幾個應用,分別對外提供服務。此時,加速每個應用開發的MVC框架是架構實現的關鍵點。

3、分散式服務:當垂直應用越來越多,應用之間的互動不可避免。抽離核心業務單獨部署,逐漸形成穩定的服務中心。而隨著團隊規模的相應擴大,服務會隨著團隊的增多變得越來越多,粒度也會變得越來越小,也就逐步形成了分散式服務的架構,而當粒度細到某種程度、服務數量多到一定程度則可以稱之為微服務。即在設計好業務邊界之後將原來的單體應用分解成一個個細粒度的服務,彼此之間通過某種方式進行通訊。微服務架構的關鍵在於如何做好服務的治理、排程、維護工作。目前,Dubbo算是微服務架構中用的比較多的框架,但Dubbo僅僅解決了微服務架構中的一部分問題。Spring Cloud則基本上涵蓋了微服務架構的各個方面。

十一、部署架構

對於Web應用來說,LVS+Nginx+Tomcat+MySQL+Redis即可構成一個簡單通用的部署架構,如下圖所示:

1、LVS作為最前置的結點,負責在網路第四層轉發流量、負載均衡。

2、多個LVS使用Keepalived互為主備實現高可用。

3、Nginx作為反向代理,負責在網路第七層轉發流量、負載均衡。

4、Tomcat做為業務容器,主要的應用程式碼都在這裡面。

5、Redis作為快取,隔離高併發請求和後端資料庫。

6、MySQL以主從模式對資料做持久化。

其中,虛線部分是資料庫層,採用的是主從模式。也可以使用Redis Cluster(Codis等)以及MySQL Cluster(Cobar等)來替換。

本次送書活動規則1

1、本次活動在評論區隨機抽取6名幸運吃瓜群眾!從留言中選取出累積留言總數最多6小夥伴!

2、截止日期:2018年05月25日23時00分,幸運的小夥伴名單評論區留言會置頂,獲獎的小夥伴請在一個工作日內在公眾號介面聯絡我,傳送手機號、姓名、收貨地址,逾期則認為放棄處理;

3、注意啦!經常關注Java後端技術公眾號留言點讚的小夥伴會自帶紅藍buff加成哦!有更大的機率獲得獎品哦!詳見往期推文《專業演算法解密

活動規則2

為了照顧新關注的小夥伴,累積評論肯定沒有老使用者多,所以這裡也放出了抽獎小程式,注意:僅限關注的小夥伴參與抽獎!祝大家玩的愉快!

點選圖片檢視更多推薦內容

↓↓↓

究竟啥才是網際網路架構中的高併發!

分散式之資料庫和快取雙寫一致性方案解析!

如何通過軟引用和弱引用提升JVM記憶體使用效能!

深度解析某頭條的一道TopN面試題!

相關推薦

Java工程師修煉 | 10書籍

作者:著有《Java工程師修煉之道》出處:來自Java工程師修煉之道一書節選內容一、軟體開發的核

【讀書筆記】Java 工程師修煉

日期:2018年10月19日 13:09 地點:玉泉慧谷 圖書:《Java 工程師修煉之道》2018年3月出版 一、記錄 前天晚上睡前無聊,在多看app裡搜了下 Java 相關的電子書。有 3 本成功吸引了我的注意力,其中一本就是上面提到的這個。看到的時候,已經很

Java工程師修煉

因版權問題,本文不直接提供下載資源地址,只提供第三方網站(如51cto、Pudn、指令碼之家以及其它網站)可以下載該資源的地址。點選進入第三方網站下載資源所涉及到的一切法律問題與我無關。同意的點下載連結,不同意直接關閉該網頁。Java程式設計師修煉之道 目錄: 第一部分 用J

Web前端工程師修煉(原書第4版) 中文pdf掃描版

知識 實現簡單 div font web前端 圖形 如何工作 htm log 你是否也曾想過自己創建網頁,但卻苦於沒有經驗?那麽從現在開始學習吧!本書由淺入深地講解了Web設計的一些重要概念、基本原理,以及HTML、CSS和JavaScript的具體使用方法與技巧。當你

Web前端工程師修煉 原書第4版 pdf

你是否也曾想過自己建立網頁,但卻苦於沒有經驗?那麼從現在開始學習吧!本書由淺入深地講解了Web設計的一些重要概念、基本原理,以及HTML、CSS和JavaScript的具體使用方法與技巧。當你讀完本書後,將會掌握建立適用於移動裝置的多列頁面的技巧。 《Web前端工程師修煉之道(原書第4版)》將幫助你學習

Java修煉--併發程式設計

前言 在本文將總結多執行緒併發程式設計中的常見面試題,主要核心執行緒生命週期、執行緒通訊、併發包部分。主要分成 “併發程式設計” 和 “面試指南” 兩 部分,在面試指南中將討論併發相關面經。 參考資料: 《Java併發程式設計實戰》 第一部分:併發程式設

Java修煉--集合框架

前言 Java集合框架 (Java Collections Framework, JCF) 也稱容器,這裡可以類比 C++ 中的 STL,在市面上似乎還沒能找到一本詳細介紹的書籍。在這裡主要對如下部分進行原始碼分析,及在面試中常見的問題。 例如,在阿里面試常

Java修煉--虛擬機器

前言 在本文將深入討論 Java 虛擬機器相關核心知識 參考書籍: 《深入理解 Java 虛擬機器》周志明,機械工業出版社 學習課程: 【煉數成金】深入 JVM 核心—原理、診斷與優化 【龍果學院】深入理解 Java 虛擬機器( JVM 效能調優+記憶

Java修煉--設計模式

一、概述 1、設計模式是人們在面對同類型軟體工程設計問題所總結出的一些有用經驗。模式不是程式碼,而是某類問題的通用設計解決方案 2、4人組Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides總結寫了《設計

Java修煉--Web

前言 在本文中將總結 Java Web 開發技術和相關框架的核心知識。因框架知識體系比較龐大,具體每個框架的使用我將放在 ../JavaWeb 這個目錄下,包含 Spring、Strust2、Hibernate、Spring Boot 等框架。 Sprin

java程式設計師修煉

(顧客就是上帝這個口號我們已經喊了N年了,程式設計師的勞動成果最終也需要轉換為服務提供給客戶,使用者體驗至關重要,常常看到的場景是功能實現了,軟體很難使用,程式設計師有個很充足的理由我不是美工,其實注重使用者體驗跟美工八杆子也打不到一起,FoxMail的成功在很大程度是使用者體驗的成功,友好,清晰的使用者提示

Numpy 修煉10)—— 結構化陣列

  之前我們操作Numpy的陣列時,都是通過索引來操作的。針對二維陣列,使用索引可以完成對行、列的操作。但是這是非常不直觀的。可以把二維陣列想象成一個excel表格,如果表格沒有列名,操作起來會非常麻煩,針對這種情況,Numpy提供了結構化陣列用來操作每列資料。 之前我們操作Numpy

Java程式設計師修煉—併發程式設計

Java執行緒模型: 共享的、預設可見的可變狀態 搶佔式執行緒排程 所有執行緒可以很容易地共享同一程序中的物件。 能夠引用這些物件的任何執行緒都可以修改這些物件。 執行緒排程程式差不多任何時候都能在核心上調入或調出執行緒。 必須能調出執行時的方法,否則無限迴圈

Java程式設計師修煉理解1

1、Java是程式語言,也是平臺(平臺是提供執行時環境的軟體)。 2、JVM把類檔案連線起來並執行,JVM不能直接解釋Java原始檔,需要把原始檔變成位元組碼的類檔案。 3、連線Java語言和平臺的紐帶是統一的類檔案格式定義。 4、Java位元組碼首先被JVM解釋,然後被

雲計算:為什麽說存儲是雲計算發展瓶頸之一?虛擬化是解決

雲計算 虛擬機 固態硬盤 數據庫 成本 共享存儲模型文件/記錄層(File/Record Layer)提供存儲資源訪問方法,包括:文件系統,數據庫,緩存等將用戶視圖的數據單元(文件/記錄/對象)保存到存儲空間,並記錄映射關系,負責維護命名空間、存儲空間分配性能優化,分布式系統集群管理與控制

《程序員修煉》讀書筆記②

模糊 clas 算法 必須 品牌 很多 關於 性能 一是 概述 花了幾天時間看完了程序員修煉之道,有很多感悟,記錄於此,供自己開發時參考,相信對其他人也有用。 值得一提的是,這本書寫的非常好,很多大牛在走了很多彎路之後再讀這本書都很感慨沒有早些讀。 《程序員修煉之道》讀書筆

《MySQL DBA修煉》 讀書筆記(第一章 理解MySQL)

l數據庫 描述 負責 mysql權限 serve 擴展 基礎上 title 語境 1、MySQL的基礎架構 1.MySQL是一種關系數據庫產品,是建立在關系模型基礎上的數據庫。架構一般可分為應用層、邏輯層、物理層。應用層:負責和客戶端、用戶進行交互。邏輯層:負責具體的

程序員修煉:從小工到專家

合作人 測試 AI 附錄 修煉之道 資源 color 例子 項目 下載地址:網盤下載 內容簡介 · · · · · ·《程序員修煉之道:從小工到專家》內容簡介:《程序員修煉之道》由一系列獨立的部分組成,涵蓋的主題從個人責任、職業發展,知道用於使代碼保持靈活、並且易於改

大巧不工-WEB前端設計修煉pdf

客戶 margin post 了解 框架 前端開發 性能 round 測試 下載地址:網盤下載 大巧不工:Web前端設計修煉之道:全面探討Web前端設計的方法、原則、技巧和最佳實踐5大專業社區一致鼎力推薦!前端開發工程師、前端設計師、前端架構師和用戶體驗設計師等新興職業的

《程序員修煉》讀書筆記

重點 解決 意思 環境 部分 災難 就是 但是 解決方案 這周我閱讀的書目是《程序員修煉之道》,重點看了幾個章節,但是可能是因為我還沒有經歷過大的項目,所以不太能對裏面的一些觀點產生共鳴,不過裏面還是有些較為簡單的觀點讓我收獲了許多。 1、“我的源碼讓貓吃了” 在所有弱點