摘要:后端好書(shū)閱讀與推薦系列文章后端好書(shū)閱讀與推薦后端好書(shū)閱讀與推薦續(xù)后端好書(shū)閱讀與推薦續(xù)二幾個(gè)月又過(guò)去了,又讀了幾本書(shū),同時(shí)為了深切體會(huì)到某些書(shū)里面的要點(diǎn)還專門(mén)做了一個(gè)小項(xiàng)目,這里就把讀書(shū)與小項(xiàng)目過(guò)程中的一些心得體會(huì)記錄一下。
后端好書(shū)閱讀與推薦系列文章:
后端好書(shū)閱讀與推薦
后端好書(shū)閱讀與推薦(續(xù))
后端好書(shū)閱讀與推薦(續(xù)二)
幾個(gè)月又過(guò)去了,又讀了幾本書(shū),同時(shí)為了深切體會(huì)到某些書(shū)里面的要點(diǎn)還專門(mén)做了一個(gè)小項(xiàng)目,這里就把讀書(shū)與小項(xiàng)目過(guò)程中的一些心得體會(huì)記錄一下。
Effective JavaEffective java 中文版(第2版) (豆瓣) https://book.douban.com/subje...
本書(shū)是Java領(lǐng)域的經(jīng)典之作,作者提出了幾十個(gè)經(jīng)驗(yàn)法則,能夠優(yōu)雅健壯的解決我們?nèi)粘>幊炭赡軙?huì)遇到的大部分的問(wèn)題。
本書(shū)亮點(diǎn)遍地是,挑一些代表性的:
學(xué)好一門(mén)自然語(yǔ)言有三件事:語(yǔ)法、詞匯、習(xí)慣和高效的用法;學(xué)好一門(mén)編程語(yǔ)言也類似的,我們要了解語(yǔ)言的核心,掌握常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)與API,同時(shí)為了效率要掌握一些最佳實(shí)踐。
靜態(tài)工廠方法一般來(lái)說(shuō)可以比構(gòu)造器更好的控制對(duì)象的生成,比如生成特定子類類型(根據(jù)名稱判別)、生成時(shí)機(jī)、數(shù)量(單例、緩存)等,但是要注意規(guī)范命名,以便于使用者不必去猜靜態(tài)方法的用處(因?yàn)殪o態(tài)工廠方法并不如構(gòu)造器那么特別)。
用對(duì)象池來(lái)避免創(chuàng)建對(duì)象需要對(duì)象池里面的對(duì)象是重量級(jí)的才行(如創(chuàng)建代價(jià)較大),因?yàn)榫S護(hù)輕量級(jí)對(duì)象池的代價(jià)甚至大于即時(shí)創(chuàng)建的代價(jià)。
自己在管理內(nèi)存的時(shí)候尤其容易發(fā)生內(nèi)存泄漏,所以要確保不僅你知道這個(gè)變量不被引用了,還要讓JVM知道;另外,還可以好好利用軟引用和弱引用來(lái)保證內(nèi)存不足時(shí)變量可以被回收的問(wèn)題。
不要使用 public 域,而應(yīng)該使用 private 域加 public 和 getter 這樣就保留了將來(lái)靈活修改內(nèi)部數(shù)據(jù)表示的能力,如果直接用 public 域,那么將來(lái)要修改內(nèi)部表示,那么調(diào)用者也必須修改其調(diào)用方式,這顯然不利于重構(gòu)維護(hù)的。
List 優(yōu)先于 Array 因?yàn)榉盒褪遣豢勺兊模鴶?shù)組是協(xié)變的。而且數(shù)組是具體化的,只有在運(yùn)行期才會(huì)檢查元素類型約束,但是因?yàn)榉盒筒脸?,所以在編譯期就檢查元素類型,這樣就能提前發(fā)現(xiàn)錯(cuò)誤。
參數(shù)有效性檢查,對(duì)于public方法,應(yīng)該檢查并throw 異常,對(duì)于未被導(dǎo)出的方法,檢查時(shí)應(yīng)該用assert,既能起到檢查效果,又能減少開(kāi)銷;對(duì)于類的可變組件還要選擇性的進(jìn)行保護(hù)性拷貝,避免破壞類本身
override 方法的選擇是在運(yùn)行時(shí)動(dòng)態(tài)決定的,總是選擇最具體的方法;overload 方法選擇是在編譯時(shí)靜態(tài)進(jìn)行的,完全基于編譯時(shí)類型
對(duì)于集合或者數(shù)組這些 容器 類,寧愿返回一個(gè)長(zhǎng)度為0的容器而不要返回null,避免客戶端忘了檢查而拋出空指針異常,如果擔(dān)心性能問(wèn)題可以把這個(gè)長(zhǎng)度為0的容器聲明為靜態(tài)常量(因?yàn)樗强盏?,所以可以自由共享),避免每次新建容器帶?lái)的性能消耗(其實(shí)很小)。這個(gè)在應(yīng)用中很常見(jiàn),比如web中展示列表之類的,如果在Service中返回null,那么Controller中還要檢查,不然前端渲染時(shí)foreach列表時(shí)就會(huì)報(bào)空指針異常,但是返回一個(gè)長(zhǎng)度為0的容器,就可以避免檢查,空與不空統(tǒng)一處理了
精確的計(jì)算尤其是貨幣不要使用float或者double,因?yàn)橐屢粋€(gè)浮點(diǎn)數(shù)精確的表示0.1(或者10的任何負(fù)數(shù)次方,另外,任何進(jìn)制都有不能表示的數(shù))是不可能的,而因該使用BigDicimal(數(shù)量大,精確控制小數(shù)點(diǎn))、long或者int(性能較好)。題外話,如果讓用戶損失了錢(qián),即使是一分錢(qián),都會(huì)讓你的應(yīng)用失去用戶的信任,所以該精確的地方一定要足夠精確
一般都要通過(guò)接口來(lái)引用對(duì)象而不是類,如 List
多線程中,Thread既可以充當(dāng)工作單元,又可以充當(dāng)執(zhí)行機(jī)制,但是最好要把這兩者分開(kāi),用Runable和Callabe作為工作單元(task),用executor 封裝的thread來(lái)作為執(zhí)行機(jī)制(不要直接使用thread),這樣職責(zé)劃分代碼更清晰
讀完這本書(shū),結(jié)合前面的設(shè)計(jì)模式、代碼整潔之道、重構(gòu)幾本書(shū),我感覺(jué)可以總結(jié)一點(diǎn):每一個(gè)段特定的代碼(類、函數(shù))其實(shí)都是分為作者和調(diào)用者,代碼之所以寫(xiě)的爛,是因?yàn)楹枚鄷r(shí)候我們自己一個(gè)人同時(shí)充當(dāng)了作者和調(diào)用者,所以忽略了我們作為作者應(yīng)該怎樣寫(xiě)代碼才更有利于別的調(diào)用者調(diào)用,達(dá)到可復(fù)用、低耦合、易重構(gòu)的效果,所以我們?cè)趯?xiě)一段代碼的時(shí)候不要想當(dāng)然的就把某個(gè)功能隨意的放在某段代碼實(shí)現(xiàn),而是要好好分割功能實(shí)現(xiàn)和調(diào)用,分清自己作為作者和調(diào)用者的界限,才能避免當(dāng)局者迷。
本書(shū)也比較老了,08年的,所以很多問(wèn)題都被Java7/8/9解決了,比如
List
interface 的 default 方法打破了接口不允許實(shí)現(xiàn)的規(guī)則,所以書(shū)中提到的抽象類比接口更易于演變的理由似乎不再成立
Java 8 的方法引用可以很方便的實(shí)現(xiàn)策略模式,而不需要再書(shū)中提到的(但是思想依然相同)宿主類、匿名類
但是這些并不影響我們閱讀,我們只需要看書(shū)的時(shí)候結(jié)合Java的最新特性來(lái)看就行了,況且本書(shū)主要講方法、經(jīng)驗(yàn),而不是語(yǔ)法,所以新與舊影響并不是特別大,不過(guò)實(shí)在受不了的話也有好消息,第三版好像2017.12就要出來(lái)了,引入了Java7/8/9的最新特性。這本書(shū)屬于那種沒(méi)事可以翻一翻的書(shū),因?yàn)樽龅迷蕉?,?duì)書(shū)中的經(jīng)驗(yàn)體會(huì)就越深,就越能夠應(yīng)用自如。
MongoDB In ActionMongoDB實(shí)戰(zhàn) (豆瓣) https://book.douban.com/subje...
MongoDB 我是作為幾乎的初學(xué)者來(lái)看這本書(shū)的,因?yàn)橹翱戳它c(diǎn)基礎(chǔ)知識(shí)就直接用在了項(xiàng)目里,邊用邊學(xué),雖然快速,但是難免心里有郁結(jié),因?yàn)闆](méi)成體系。這里準(zhǔn)備用這本書(shū)來(lái)系統(tǒng)的學(xué)習(xí)一下。
這本書(shū)內(nèi)容相當(dāng)豐富,從歷史講起,介紹了mongodb的基本概念,設(shè)計(jì)實(shí)例最后還講了一些高級(jí)用法如復(fù)制與分片,性能調(diào)優(yōu)等,既有開(kāi)發(fā)者視角,也有DBA視角,讀完收獲頗豐。
亮點(diǎn):
MongoDB相對(duì)于關(guān)系數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)有:可存儲(chǔ)無(wú)Schema數(shù)據(jù),讀寫(xiě)吞吐量高(鍵值存儲(chǔ)簡(jiǎn)單),擴(kuò)展方便(自動(dòng)分片,主從復(fù)制,主節(jié)點(diǎn)若發(fā)生故障從節(jié)點(diǎn)自動(dòng)轉(zhuǎn)為主節(jié)點(diǎn)),數(shù)據(jù)模型直觀(一般不需要join連表查詢);相對(duì)于其它NoSQL如redis的優(yōu)點(diǎn)有支持即時(shí)查詢(redis只支持主鍵查詢)。這也是為啥MongoDB能在關(guān)系數(shù)據(jù)庫(kù)已經(jīng)如此成熟的今天還能打下自己一片天地的原因
MongoDB應(yīng)用場(chǎng)景:WEB應(yīng)用如日志和實(shí)時(shí)分析(原子更新和固定集合,提供穩(wěn)定的計(jì)數(shù)器和日志自動(dòng)過(guò)期的功能),敏捷開(kāi)發(fā)(因?yàn)闊o(wú)模式),緩存(完整的對(duì)象表示和簡(jiǎn)單的鍵值存儲(chǔ)通常能獲得比MySQL更高的查詢速度)
shell可以很容易的查看任意方法的實(shí)現(xiàn),只要輸入不帶括號(hào)的方法就行(這是js的特性)比如db.user.save就可以看出save其實(shí)就是對(duì)insert和update一個(gè)簡(jiǎn)單的封裝,根據(jù)主鍵是否存在進(jìn)行操作選擇。
所有的MongoDB驅(qū)動(dòng)都主要有三個(gè)功能:檢查對(duì)象ID若無(wú)則生成(id可保證唯一,由4字節(jié)時(shí)間戳,3字節(jié)機(jī)器ID,2字節(jié)進(jìn)程ID,3字節(jié)進(jìn)程局部計(jì)數(shù)器組成,所以MongoDB一般不需要一個(gè)多帶帶的字段來(lái)記錄存儲(chǔ)時(shí)間了),把語(yǔ)言特定的文檔描述轉(zhuǎn)換為BSON,使用MongoDB的網(wǎng)絡(luò)協(xié)議通過(guò)TCP套接字與數(shù)據(jù)庫(kù)通訊(安全模式?jīng)Q定了通訊是否可靠)
選擇嵌套還是引用(正規(guī)化與否)的關(guān)鍵是判斷讀寫(xiě)比,選擇嵌套優(yōu)點(diǎn)是查詢只需要一次就可以查完,簡(jiǎn)單快速,但是如果要修改就需要在每個(gè)出現(xiàn)嵌套信息的地方進(jìn)行修改,但是如果確定修改的頻率較低,或者嵌套對(duì)象不出現(xiàn)在父對(duì)象以外的其他上下文,那么嵌套就足以成為合理的設(shè)計(jì)。此外,如果信息量很大那么不適合用嵌套,應(yīng)該用引用,可以避免或者推遲分片的到來(lái)。比如博客應(yīng)用中文章的評(píng)論就非常適合嵌套
更新有兩種方式,一種是通用性更新:從數(shù)據(jù)庫(kù)獲得完整對(duì)象,然后修改這個(gè)對(duì)象,然后保存,另一種是針對(duì)性更新:直接按條件修改數(shù)據(jù)庫(kù)中一些對(duì)象的某些字段。前者的好處在于通用,可以將前臺(tái)傳來(lái)的表單無(wú)論修改了那個(gè)字段都可以直接保存,無(wú)需更多拼湊,修改任何字段的方法都是相同的,便于統(tǒng)一處理,后者的好處在于性能更好,因?yàn)楣?jié)省了許多不必要字段的傳遞,而且允許原子性更新,比如inc
稀疏索引用于:不是所有文檔都要用unique索引,這樣可以避免某一類型數(shù)據(jù)(比如缺了一個(gè)字段)無(wú)法多次插入;集合中大量文檔都不包含被索引的鍵,用稀疏索引可以節(jié)約內(nèi)存
復(fù)制可以提供:冗余能夠達(dá)到容災(zāi)或者挽救誤刪數(shù)據(jù)的效果;故障遷移可以在緊急情況下切換節(jié)點(diǎn);簡(jiǎn)化維護(hù)工作,比如可以在主節(jié)點(diǎn)以外進(jìn)行大開(kāi)銷操作如備份或者大數(shù)據(jù)的索引構(gòu)建;均衡負(fù)載,讀寫(xiě)分離
分片可以解決某一類型數(shù)據(jù)過(guò)大,不能單機(jī)存儲(chǔ)的問(wèn)題,同時(shí)能保持高性能讀寫(xiě)。MongoDB自動(dòng)分片策略應(yīng)該可以替換大多我們自己手動(dòng)分片的做法
書(shū)中還提出了許多最佳實(shí)踐,比如常見(jiàn)的設(shè)計(jì)范式一對(duì)多、多對(duì)多、樹(shù)形結(jié)構(gòu),這些都對(duì)我們?cè)谠O(shè)計(jì)應(yīng)用時(shí)有較大的參考價(jià)值
看這本書(shū)有點(diǎn)不爽的一點(diǎn)就是用ruby寫(xiě)的,這一門(mén)語(yǔ)言我沒(méi)怎么接觸過(guò),但是卻因?yàn)槔习遄屛也渴餽edmine而留下了痛苦回憶,真的是我用過(guò)的框架里面部署最麻煩的,所以一直也沒(méi)有興趣去了解這門(mén)語(yǔ)言,但是還好大部分語(yǔ)言的語(yǔ)法都是相似的,并不是很影響我看這本書(shū)。
另外還有一點(diǎn)就是 MongoDB 版本3和2差別較大,最明顯的就是驗(yàn)證方式,需要及時(shí)更新。
Pro Git (Second Edition) (豆瓣) https://book.douban.com/subje...
Git也用過(guò)挺久了,但是每次遇上問(wèn)題都是直接搜索,這樣解決問(wèn)題是快,但是同樣不成體系,所以用這本書(shū)站在使用者的角度進(jìn)行學(xué)習(xí),時(shí)間有限,后面還有關(guān)于原理的部分我就省略沒(méi)看了。
亮點(diǎn):
版本控制系統(tǒng)(VCS)可以將某個(gè)文件回溯到之前的狀態(tài),甚至將整個(gè)項(xiàng)目都回退到過(guò)去某個(gè)時(shí)間點(diǎn)的狀態(tài),你可以比較文件的變化細(xì)節(jié),查出最后是誰(shuí)修改了哪個(gè)地方,從而找出導(dǎo)致怪異問(wèn)題出現(xiàn)的原因,又是誰(shuí)在何時(shí)報(bào)告了某個(gè)功能缺陷等等
集中化的版本控制利于項(xiàng)目共享,權(quán)限管理,但是受中央服務(wù)器的單點(diǎn)故障影響特別明顯,而分布式版本控制系統(tǒng)每一個(gè)用戶都有一個(gè)完整的倉(cāng)庫(kù),對(duì)單點(diǎn)故障免疫,還可以根據(jù)需要設(shè)定不同的協(xié)作流程,比如層次模型式的工作流
Git支持離線操作,保證文件完整性,一般只添加數(shù)據(jù)所以不容易誤刪(但是也使得徹底清除文件比較費(fèi)勁,比如誤上傳了密碼文件)
Git 有三種狀態(tài),你的文件可能處于其中之一:已提交(committed)、已修改(modified)和已暫存(staged)。已提交表示數(shù)據(jù)已經(jīng)安全的保存在本地?cái)?shù)據(jù)庫(kù)中。已修改表示修改了文件,但還沒(méi)保存到數(shù)據(jù)庫(kù)中。已暫存表示對(duì)一個(gè)已修改文件的當(dāng)前版本做了標(biāo)記,使之包含在下次提交的快照中
git add 是個(gè)多功能命令:可以用它開(kāi)始跟蹤新文件,或者把已跟蹤的文件放到暫存區(qū),還能用于合并時(shí)把有沖突的文件標(biāo)記為已解決狀態(tài)等。將這個(gè)命令理解為“添加內(nèi)容到下一次提交中”而不是“將一個(gè)文件添加到項(xiàng)目中”要更加合適
對(duì)一個(gè)線上項(xiàng)目要添加新功能時(shí)應(yīng)該新建一個(gè)新功能分支,如果線上項(xiàng)目出了問(wèn)題,應(yīng)切回線上分支,然后創(chuàng)建一個(gè)緊急分支來(lái)修復(fù),測(cè)試結(jié)束過(guò)后切回線上分支,合并這個(gè)緊急分支,然后推送到線上分支,最后切回新功能分支,做完后測(cè)試,在切回線上分支,合并新功能分支,推送到線上分支。這是項(xiàng)目開(kāi)發(fā)的最佳工作流實(shí)踐
與他人合作的最佳方法即是建立一個(gè)你與合作者們都有權(quán)利訪問(wèn),且可從那里推送和拉取資料的共用倉(cāng)庫(kù),倉(cāng)庫(kù)最好放到服務(wù)器上方;Git服務(wù)器可以自己搭建,還可以自己搭一個(gè)對(duì)應(yīng)的網(wǎng)頁(yè)查看器如GitWeb,也可以使用開(kāi)源的功能全面的Git服務(wù)器比如GitLab,最簡(jiǎn)單的做法是使用第三方托管如Github
集中式工作流類似于subversion:一個(gè)中心倉(cāng)庫(kù),可以接受代碼,所有人將自己的工作與之同步,模式簡(jiǎn)單,應(yīng)用廣泛;集成管理者工作流:每個(gè)開(kāi)發(fā)者擁有自己倉(cāng)庫(kù)的寫(xiě)權(quán)限和其他所有人倉(cāng)庫(kù)的讀權(quán)限。這種情形下通常會(huì)有個(gè)代表`‘官方’"項(xiàng)目的權(quán)威的倉(cāng)庫(kù)。要為這個(gè)項(xiàng)目做貢獻(xiàn),你需要從該項(xiàng)目克隆出一個(gè)自己的公開(kāi)倉(cāng)庫(kù),然后將自己的修改推送上去。接著你可以請(qǐng)求官方倉(cāng)庫(kù)的維護(hù)者拉取更新合并到主項(xiàng)目,維護(hù)者可以將你的倉(cāng)庫(kù)作為遠(yuǎn)程倉(cāng)庫(kù)添加進(jìn)來(lái)。主要優(yōu)點(diǎn)是一方都可以按照自己節(jié)奏工作,適時(shí)的合并;司令官與副官工作流:是多倉(cāng)庫(kù)工作流程的變種。一般擁有數(shù)百位協(xié)作開(kāi)發(fā)者的超大型項(xiàng)目才會(huì)用到這樣的工作方式,例如著名的 Linux 內(nèi)核項(xiàng)目。被稱為副官的各個(gè)集成管理者分別負(fù)責(zé)集成項(xiàng)目中的特定部分。所有這些副官頭上還有一位稱為司令官的總集成管理者負(fù)責(zé)統(tǒng)籌。司令官維護(hù)的倉(cāng)庫(kù)作為參考倉(cāng)庫(kù),為所有協(xié)作者提供他們需要拉取的項(xiàng)目代碼,只有當(dāng)項(xiàng)目極為龐雜,或者需要多級(jí)別管理時(shí),才會(huì)體現(xiàn)出優(yōu)勢(shì)
這本書(shū)作為工具沒(méi)啥好挑剔的,它講的全面、細(xì)致,看完再練練,把git常見(jiàn)功能弄熟悉就好,繁雜瑣碎的功能可以先不看,遇上問(wèn)題了再來(lái)查閱。
ps:github上有對(duì)應(yīng)的中文版。
Spring實(shí)戰(zhàn)(第4版) (豆瓣) https://book.douban.com/subje...
這本書(shū)可謂是涵蓋了Spring整個(gè)體系的概要書(shū),從spring mvc 到 spring security 再到 spring boot,幾乎涵蓋了我們平常開(kāi)發(fā)能用到的所有組件,讀完就可以從整體上把握spring,但是其中的每一個(gè)主題都可以多帶帶成書(shū),值得好好研究,這本書(shū)就相當(dāng)于是開(kāi)個(gè)好頭吧。
亮點(diǎn):
Spring框架是以簡(jiǎn)化Java EE應(yīng)用程序的開(kāi)發(fā)為目標(biāo)而創(chuàng)建的,主要使用pojo替換重量級(jí)的ejb,目前已經(jīng)成為Java web事實(shí)上的標(biāo)準(zhǔn)
Spring可以做很多事情,為企業(yè)級(jí)開(kāi)發(fā)提供給了豐富的功能,這些功能的底層都依賴于它的兩個(gè)核心特性,依賴注入(dependency injection,DI)和面向切面編程(aspect-oriented programming,AOP)
為了達(dá)到Spring最根本的使命:簡(jiǎn)化Java開(kāi)發(fā),Spring采取了以下4種關(guān)鍵策略:基于POJO的輕量級(jí)和最小侵入性編程;通過(guò)依賴注入和面向接口實(shí)現(xiàn)松耦合;基于切面和慣例進(jìn)行聲明式編程;通過(guò)切面和模板減少樣板式代碼。
通過(guò)DI,對(duì)象的依賴關(guān)系將由系統(tǒng)中負(fù)責(zé)協(xié)調(diào)各對(duì)象的第三方組件在創(chuàng)建對(duì)象的時(shí)候進(jìn)行設(shè)定。對(duì)象無(wú)需自行創(chuàng)建或管理它們的依賴關(guān)系,依賴關(guān)系將被自動(dòng)注入到需要它們的對(duì)象當(dāng)中去;借助AOP,可以使用各種功能層(日志,審計(jì),安全等)去包裹核心業(yè)務(wù)層。這些層以聲明的方式靈活地應(yīng)用到系統(tǒng)中,你的核心應(yīng)用甚至根本不知道它們的存在
Spring的配置風(fēng)格是可以互相搭配的,所以你可以選擇使用XML裝配一些bean,使用Spring基于Java的配置(JavaConfig)來(lái)裝配另一些bean,而將剩余的bean讓Spring去自動(dòng)發(fā)現(xiàn)。建議是盡可能地使用自動(dòng)配置的機(jī)制, 顯式配置越少越好。當(dāng)你必須要顯式配置bean的時(shí)候(比如,有些源碼不是由你來(lái)維護(hù)的,而當(dāng)你需要為這些代碼配置bean的時(shí)候),推薦使用類型安全并且比XML更加強(qiáng)大、類型安全并且對(duì)重構(gòu)友好的JavaConfig。最后,只有當(dāng)你想要使用便利的XML命名空間,并且在JavaConfig中沒(méi)有同樣的實(shí)現(xiàn)時(shí),才應(yīng)該使用XML
大多數(shù)的JSP模板都是采用HTML的形式,但是又摻雜上了各種JSP標(biāo)簽庫(kù)的標(biāo)簽,使其變得很混亂。這些標(biāo)簽庫(kù)能夠以很便利的方式為JSP帶來(lái)動(dòng)態(tài)渲染的強(qiáng)大功能,但是它也摧毀了我們想維持一個(gè)格式良好的文檔的可能性;Thymeleaf模板是原生的,不依賴于標(biāo)簽庫(kù),它通過(guò)自定義的命名空間,為標(biāo)準(zhǔn)的HTML標(biāo)簽集合添加Thymeleaf屬性。它能在接受原始HTML的地方進(jìn)行編輯和渲染。因?yàn)樗鼪](méi)有與Servlet規(guī)范耦合,因此Thymeleaf模板能夠進(jìn)入JSP所無(wú)法涉足的領(lǐng)域
ControllerAdvice最為實(shí)用的一個(gè)場(chǎng)景就是將所有的@ExceptionHandler方法收集到一個(gè)類中,這樣所有控制器的異常就能在一個(gè)地方進(jìn)行一致的處理。 例如, 我們想將DuplicateSpittleException的處理方法用到整個(gè)應(yīng)用程序的所有控制器上
Spring Security從兩個(gè)角度來(lái)解決安全性問(wèn)題。它使用Servlet規(guī)范中的Filter保護(hù)Web請(qǐng)求并限制URL級(jí)別的訪問(wèn)。Spring Security還能夠使用Spring AOP保護(hù)方法調(diào)用——借助于對(duì)象代理和使用通知,能夠確保只有具備適當(dāng)權(quán)限的用戶才能訪問(wèn)安全保護(hù)的方法
對(duì)于Spring data,簡(jiǎn)單的查詢直接在自定義的repository接口中繼承JpaRepository,然后用findByUsername這種命名風(fēng)格的方法就行,如果所需的數(shù)據(jù)無(wú)法通過(guò)方法名稱進(jìn)行恰當(dāng)?shù)孛枋?,那么可以使用@Query注解,為Spring Data提供要執(zhí)行的查詢,更復(fù)雜一點(diǎn)的可以繼承自定義的類(并非真的繼承,而是命名加上Impl后綴,Spring Data自己會(huì)合并所有的方法),然后自定義查詢方法
Java消息服務(wù)(Java Message Service ,JMS)是一個(gè)Java標(biāo)準(zhǔn),定義了使用消息代理的通用API。在JMS出現(xiàn)之前,每個(gè)消息代理都有私有的API,這就使得不同代理之間的消息代碼很難通用。但是借助JMS,所有遵從規(guī)范的實(shí)現(xiàn)都使用通用的接口,這就類似于JDBC為數(shù)據(jù)庫(kù)操作提供了通用的接口一樣。Spring對(duì)JMS的支持,包括JmsTemplate(同步)和消息驅(qū)動(dòng)POJO(異步)
Spring帶來(lái)的主要益處就是簡(jiǎn)化Java開(kāi)發(fā),Spring Boot讓這項(xiàng)任務(wù)變得更加簡(jiǎn)單。從Spring創(chuàng)建以來(lái),Spring Boot大概是Spring領(lǐng)域中最令人興奮的事情了。它在Spring之上,構(gòu)建了全新的開(kāi)發(fā)模型,移除了開(kāi)發(fā)Spring應(yīng)用中很多單調(diào)乏味的內(nèi)容
這是一本“XX大全”類的書(shū)籍,下一本書(shū)也是,這種書(shū)最適合剛進(jìn)入一個(gè)領(lǐng)域的時(shí)候看,因?yàn)槟芴峁┖芏鄥⒖迹谖覀冞M(jìn)階的學(xué)習(xí)。
深入分析Java Web技術(shù)內(nèi)幕深入分析Java Web技術(shù)內(nèi)幕 (豆瓣) https://book.douban.com/subje...
本書(shū)作者的理想很豐滿,想一次性得把Java web 全部搞定,從基本的http,dns協(xié)議,到底層的編譯原理、jvm與類加載技術(shù),到中層的servlet,到上層的框架spring,幾乎能用到的知識(shí)點(diǎn)都講到了,但是由于這個(gè)面實(shí)在太廣,很難真正的深入講解,但是本書(shū)對(duì)于了解整個(gè)Java web的體系還是非常有好處的,這也是作者多年工作的積累和經(jīng)驗(yàn),非常值得了解和學(xué)習(xí)。
亮點(diǎn):
從用戶輸入含域名的URL到瀏覽器呈現(xiàn)結(jié)果會(huì)發(fā)生如下幾件事:域名解析成IP,首先瀏覽器檢查緩存,若無(wú)則檢查操作系統(tǒng)dns緩存,若無(wú)則檢查本地dns服務(wù)器LDNS,若無(wú)則檢查根域名服務(wù)器,最終得到IP,找到對(duì)應(yīng)服務(wù)器;服務(wù)器根據(jù)請(qǐng)求相應(yīng)結(jié)果,可能有多臺(tái)(群)服務(wù)器進(jìn)行負(fù)載均衡,最終給用戶指定一個(gè)特定的服務(wù)器,服務(wù)器會(huì)檢查緩存,有的請(qǐng)求是緩存在分布式緩存里,有的是靜態(tài)文件緩存,有的還需要去數(shù)據(jù)庫(kù)取數(shù)據(jù);瀏覽器得到結(jié)果后可能還會(huì)發(fā)現(xiàn)有靜態(tài)文件比如css,js,image等,如果瀏覽器沒(méi)有緩存則又會(huì)發(fā)起另外的http請(qǐng)求這些資源,可能在cdn上,可能直接在服務(wù)器上,最終得到結(jié)果渲染頁(yè)面并緩存起來(lái),為下一次渲染加速
文件訪問(wèn)一般涉及到數(shù)據(jù)從磁盤(pán)到內(nèi)核空間,內(nèi)核空間到用戶空間(內(nèi)核空間可能會(huì)使用緩存機(jī)制);直接IO是指應(yīng)用程序跳過(guò)內(nèi)核直接訪問(wèn)磁盤(pán),比如數(shù)據(jù)庫(kù),通??梢越Y(jié)合應(yīng)用層緩存和異步IO方式提高效率;內(nèi)存映射是指操作系統(tǒng)將內(nèi)存中的一段區(qū)域與磁盤(pán)中的文件關(guān)聯(lián)起來(lái),可以減少?gòu)膬?nèi)核緩存到用戶空間緩存的數(shù)據(jù)復(fù)制操作,因?yàn)檫@兩個(gè)空間的數(shù)據(jù)是共享的
網(wǎng)絡(luò)IO優(yōu)化方式:減少網(wǎng)絡(luò)交互次數(shù),比如客戶端和服務(wù)端都設(shè)置緩存,將多個(gè)js或css合并一次發(fā)送,多個(gè)sql語(yǔ)句合并起來(lái)一次發(fā)送給數(shù)據(jù)庫(kù);減少網(wǎng)絡(luò)數(shù)據(jù)傳輸量,比如數(shù)據(jù)壓縮,協(xié)議簡(jiǎn)單化;減少編碼,盡量以字節(jié)形式發(fā)送,減少?gòu)淖址阶止?jié)的過(guò)程
大型網(wǎng)站一般不采用多帶帶的cookie或者session,而是采用分布式session框架,客戶端只需簡(jiǎn)單的發(fā)送sessionid即可,服務(wù)端的session是分布式存儲(chǔ)的,與真正的應(yīng)用服務(wù)器分開(kāi),避免均衡負(fù)載session不一致情況的發(fā)生;同時(shí),每個(gè)請(qǐng)求攜帶一個(gè)唯一的crsf_token存入session,既能防止跨站攻擊,也能防止表單重復(fù)提交
這本書(shū)還有個(gè)優(yōu)點(diǎn)就是遍布全書(shū)的設(shè)計(jì)模式講解與實(shí)例分析,不得不說(shuō)作者知識(shí)面很豐富,估計(jì)如果能把這本書(shū)提到的點(diǎn)都精通了就是真正的“架構(gòu)師”了吧。
Linux命令行大全Linux命令行大全 (豆瓣) https://book.douban.com/subje...
做后端的肯定要和Linux打交道,比如程序日志好幾百兆,怎么快速找到需要的分析內(nèi)容?訪問(wèn)突然變得緩慢,怎么檢查是帶寬問(wèn)題還是內(nèi)存問(wèn)題還是CPU問(wèn)題?這些常用操作及其對(duì)應(yīng)命令都可以在這本書(shū)里面找到答案,對(duì)于Linux系統(tǒng)的日常使用和管理,提升工作效率起到很大的幫助作用。
亮點(diǎn):
Windows中每個(gè)存儲(chǔ)設(shè)備都有一個(gè)獨(dú)立的文件系統(tǒng)樹(shù)(C盤(pán),D盤(pán)),而Linux中只有一個(gè)文件系統(tǒng)樹(shù),不同的設(shè)備只能選擇性的掛載到這個(gè)樹(shù)中的某個(gè)位置
雖然使用圖形界面可以很輕松的實(shí)現(xiàn)簡(jiǎn)單文件操作,但是對(duì)于復(fù)雜操作命令行的優(yōu)勢(shì)就太明顯了,比如根據(jù)文件夾中特定類型的文件是否存在及其更新日期來(lái)決定是否把文件復(fù)制到該文件夾中,這個(gè)用圖形界面你就只能一個(gè)一個(gè)的手工選擇然后對(duì)比,但是命令行就一句 cp -u *.file destination 輕松搞定“insert or update when newer”的功能
當(dāng)rm與通配符搭配使用時(shí),通常結(jié)果影響較大,應(yīng)該先用ls對(duì)通配符進(jìn)行測(cè)試,檢查是否真是需要?jiǎng)h除的文件,確認(rèn)后再按↑ 并用rm替換ls
硬鏈接是最初的鏈接方式,局限性在于不能引用自身文件系統(tǒng)以外的文件,而且無(wú)法引用目錄,它與文件本身沒(méi)區(qū)別,刪除它也不會(huì)刪除文件,除非該文件的所有鏈接都刪除完了;現(xiàn)在提倡使用軟鏈接(符號(hào)鏈接),它克服了硬鏈接兩大不足,與指向的文件幾乎沒(méi)區(qū)別,可以進(jìn)行修改,但是刪除軟鏈接對(duì)指向文件沒(méi)影響
kill命令并不是殺死進(jìn)程,而是給進(jìn)程發(fā)送信號(hào),不過(guò)通常都是殺死進(jìn)程的信號(hào),但是也有繼續(xù)運(yùn)行、窗口改變等“非殺死”的信號(hào)
通過(guò)rsync命令同步本地與遠(yuǎn)程系統(tǒng)上的目錄,該命令能檢測(cè)兩個(gè)目錄之間的不同,以最少量的復(fù)制動(dòng)作完成兩個(gè)目錄之間的同步,與其他復(fù)制命令相比,顯得既快又經(jīng)濟(jì)
這本書(shū)沒(méi)啥問(wèn)題,就是相當(dāng)?shù)幕A(chǔ),微觀,偏重于細(xì)節(jié)和使用,可以放桌上隨時(shí)查閱,想要稍微深一點(diǎn)或者更宏觀審查L(zhǎng)inux的可以看這
軟件測(cè)試經(jīng)驗(yàn)與教訓(xùn)軟件測(cè)試經(jīng)驗(yàn)與教訓(xùn) (豆瓣) https://book.douban.com/subje...
即使不是專業(yè)的軟件測(cè)試人員,開(kāi)發(fā)者也應(yīng)該學(xué)習(xí)一些軟件測(cè)試,畢竟寫(xiě)完代碼你自己總得保證基本能運(yùn)行吧,最開(kāi)始可能可以手動(dòng)運(yùn)行,但是心里能有底嗎?還是得寫(xiě)好單元測(cè)試,才能更有底氣的把代碼交給別人運(yùn)行,所以看看這本書(shū)來(lái)了解一下軟件測(cè)試中的一些好的經(jīng)驗(yàn)。
亮點(diǎn):
軟件測(cè)試的“語(yǔ)境驅(qū)動(dòng)法”,在某些環(huán)境中很有效的方法在另一些環(huán)境就沒(méi)有效果,所以不談?wù)撟罴褜?shí)踐,而是談?wù)撟钸m合當(dāng)前特定環(huán)境的實(shí)踐
測(cè)試的任務(wù)是找到最重要的問(wèn)題,所以要首先測(cè)試剛剛經(jīng)過(guò)變更的部分,核心功能,功能完整性,常見(jiàn)使用情況,常見(jiàn)威脅,影響較大的問(wèn)題,最需要的部分
為了測(cè)試就必須探索,亦即有目的地漫游,需要三種思索方式,前向思索:根據(jù)已知探索未知;后向思索:從懷疑或者想象的東西返回到已知;側(cè)向思索:讓自己的工作由于新想法而轉(zhuǎn)移,然后再將探索主題回到主線上
由于測(cè)試用例是無(wú)限的,在時(shí)間和預(yù)算的約束條件下應(yīng)該選取少量最有效的測(cè)試,一些好的試探法測(cè)試包括:邊界測(cè)試;測(cè)試所有錯(cuò)誤消息;測(cè)試與程序員不同的配置;運(yùn)行比較難設(shè)置的測(cè)試;避免冗余測(cè)試;
任何產(chǎn)品都會(huì)殘留一些小缺陷,但是隨著小缺陷數(shù)量的增加,客戶信心會(huì)下降,更糟糕的是這些小缺陷的腐蝕作用,長(zhǎng)久積累下來(lái)最終會(huì)導(dǎo)致產(chǎn)品失敗,所以小缺陷也值得報(bào)告和修改
自動(dòng)化測(cè)試有很多優(yōu)點(diǎn)比如加快測(cè)試速度,性能測(cè)試(1000個(gè)客戶鏈接不可能找1000個(gè)人去測(cè))等等,但是手工測(cè)試也有自己的優(yōu)點(diǎn)比如臨時(shí)變更測(cè)試,虛警過(guò)濾等等,所以這兩者不能互相替換,而是相互補(bǔ)充
腳本語(yǔ)言是用來(lái)加快人的工作完成速度而非提升機(jī)器性能的,所以對(duì)于許多自動(dòng)化測(cè)試來(lái)說(shuō),腳本語(yǔ)言都是最合適的,測(cè)試員可以用腳本語(yǔ)言快速生成測(cè)試用例、訪問(wèn)編程接口以及檢驗(yàn)結(jié)果
這本書(shū)類似于程序員修煉之道,都是作者的經(jīng)驗(yàn)之談,我本人由于測(cè)試經(jīng)驗(yàn)相對(duì)較少,所以還需要在以后的工作中慢慢體會(huì),并且時(shí)常翻看才可能做到融會(huì)貫通。
ps,要想學(xué)習(xí)軟件測(cè)試的基本理論知識(shí)還得看這本書(shū):軟件測(cè)試的藝術(shù)。
軟技能 (豆瓣) https://book.douban.com/subje...
軟件開(kāi)發(fā)者首先是作為一個(gè)人,其次才是軟件開(kāi)發(fā),這本書(shū)不教我們?cè)趺磳?xiě)代碼,而是教我們關(guān)注生活中的其他方方面面,針對(duì)職場(chǎng)人士,尤其是軟件開(kāi)發(fā)者,提出了一系列可以讓人更接近成功,過(guò)得快樂(lè)的tips,包括很多方面比如學(xué)習(xí),自我營(yíng)銷,理財(cái),人際關(guān)系還有健康。
亮點(diǎn):
當(dāng)說(shuō)到“優(yōu)秀的軟件開(kāi)發(fā)人員”時(shí),并不是說(shuō)要精于編碼之道,善于解決缺陷,通曉單元測(cè)試。相反,所說(shuō)的“優(yōu)秀的軟件開(kāi)發(fā)人員”,是那些能夠把控自己的職業(yè)生涯、達(dá)成目標(biāo)、享受生活的人。的確,職業(yè)和生活能融洽的人才能稱得上“成功人士”,光有任何一樣都不完美
你所能犯的最大錯(cuò)誤就是相信自己是在為別人工作。這樣一來(lái)你對(duì)工作的安全感已然盡失。職業(yè)發(fā)展的驅(qū)動(dòng)力一定是來(lái)自個(gè)體本身。記?。汗ぷ魇菍儆诠镜?,而職業(yè)生涯卻是屬于你自己的。當(dāng)你為了謀生一頭扎進(jìn)寫(xiě)代碼的世界時(shí),其實(shí)你和中世紀(jì)小鎮(zhèn)上開(kāi)鐵匠鋪的鐵匠沒(méi)什么差別,轉(zhuǎn)變你的心態(tài),從被一紙“賣身契”束縛住的仆人轉(zhuǎn)變?yōu)橐幻麚碛凶约荷獾纳倘?。在起步階段就具備這種心態(tài)會(huì)改變你對(duì)職業(yè)生涯的思維方式,將此銘記在心,并積極主動(dòng)地管理自己的職業(yè)生涯
盡管我們?yōu)樽约旱闹腔鄹械津湴?,但我們依然是情感?dòng)物。我們就像那些穿著西裝、打著領(lǐng)帶、四處游蕩的小孩,假裝自己已經(jīng)長(zhǎng)大,其實(shí)任何輕微的傷害都能讓我們號(hào)啕大哭,或者大發(fā)雷霆,我們只是已經(jīng)學(xué)會(huì)了如何控制和隱藏這些情緒。所以啊,不要覺(jué)得有理走遍天下,有時(shí)候得理也要饒人
你可能會(huì)害怕專攻軟件開(kāi)發(fā)的某一領(lǐng)域,擔(dān)心自己陷入很窄的專業(yè)領(lǐng)域,從而與其他的工作和機(jī)會(huì)絕緣。雖然專業(yè)化確實(shí)會(huì)把你關(guān)在一些機(jī)會(huì)的大門(mén)之外,但與此同時(shí)它將打開(kāi)的機(jī)會(huì)大門(mén)要比你用其他方式打開(kāi)的多得多。從表面上看,身為“專才”后,潛在雇主和客戶群都變小了,但是實(shí)際上你對(duì)他們更具吸引力了。只要你專業(yè)能力雄厚,市場(chǎng)沒(méi)有過(guò)渡飽和,與那些自稱為“軟件開(kāi)發(fā)人員”的人相比,你能更輕松地找到工作或者贏得客戶。不完全同意作者的觀點(diǎn),T字型人才是我自己的奮斗目標(biāo)
你當(dāng)然可以改善你的弱點(diǎn),但最好了解自身的強(qiáng)項(xiàng)是什么并且充分發(fā)揮自己的優(yōu)勢(shì)。專業(yè)人士對(duì)自己的能力和弱點(diǎn)有著良好、精準(zhǔn)而又客觀的自我評(píng)估。與作者共鳴,我覺(jué)得木桶理論不是很靠譜,因?yàn)樵S多人成功并不是依靠自己是全才,而是把自己的長(zhǎng)處發(fā)揮的淋漓盡致
“假裝自己能成功”就是這樣起作用的。你說(shuō)服自己的身體和內(nèi)心去努力,使夢(mèng)想成為現(xiàn)實(shí)?!凹傺b自己能成功”是不自信的對(duì)立面。你要在做任何事情的時(shí)候都充滿自信,即使是在自己的能力遠(yuǎn)遠(yuǎn)不到的時(shí)候,因?yàn)槟阌幸环N自己能夠克服一切障礙的信念
對(duì)技術(shù)虔誠(chéng)的一大問(wèn)題是,我們中的大多數(shù)崇拜某項(xiàng)特定的技術(shù),只是因?yàn)樽约菏煜み@種技術(shù)。我們很自然地會(huì)相信自己選擇的是最好的,然而這會(huì)讓我們經(jīng)常忽略任何反對(duì)意見(jiàn)。我們不可能充分了解現(xiàn)存的所有技術(shù),從而給“哪項(xiàng)技術(shù)最好”作出最英明、最睿智的判斷,于是我們傾向于選擇我們了解的技術(shù)并先入為主地認(rèn)為它是最好的。所以我的策略是多了解,選合適的工具來(lái)解決問(wèn)題
如果你想成功,你必須要學(xué)會(huì)收起自己脆弱的自尊心,勇敢走出去,別害怕讓自己出丑,別在意自己站在大庭廣眾之下可能會(huì)啞口無(wú)言,別在意別人看了你的博客后覺(jué)得你完全錯(cuò)了并且很蠢,別在意別人會(huì)嘲笑你,別太在意別人怎么看自己,拼盡全力去克服這些困難,克服掉那些不適感,讓自己變得更加優(yōu)秀
如果想提前掌握所有知識(shí),那只是在浪費(fèi)時(shí)間,因?yàn)檎嬲匾膬?nèi)容會(huì)湮沒(méi)在那些細(xì)枝末節(jié)中。要關(guān)注重點(diǎn),確實(shí)需要了解更多細(xì)節(jié)時(shí),可以利用參考資料來(lái)彌補(bǔ)這些不足。有多少次你從頭到尾仔細(xì)閱讀一本技術(shù)書(shū)籍,卻發(fā)現(xiàn)自己實(shí)際用到的也只是書(shū)里介紹的技術(shù)的一小部分。感覺(jué)找到知音了,如果你看過(guò)我前面幾篇文章,你也應(yīng)該知道我就是這么做的,有好多書(shū)其實(shí)我并沒(méi)有讀完,諸葛亮的觀其大略啊,哈哈 :-D
將自己學(xué)到的知識(shí)教給別人。要想確定你確實(shí)掌握了某些知識(shí),這是唯一的辦法; 同時(shí),在你將自己所學(xué)介紹給他人時(shí),這也是查缺補(bǔ)漏的好辦法。在這一過(guò)程中,你要切實(shí)剖析并理解自己所學(xué)的知識(shí),將其內(nèi)化到自己的思想;同時(shí),你也要用能夠讓他人理解的方式精心組織這些信息。 以我個(gè)人的經(jīng)驗(yàn)來(lái)說(shuō),在我開(kāi)始“樂(lè)為人師”之后,我不僅在職業(yè)發(fā)展和專業(yè)成長(zhǎng)上有了巨大飛躍,我的理解能力也更上一層樓??傮w來(lái)說(shuō)就是,要想給別人講清楚,首先自己得搞明白,所以不僅是“樂(lè)為人師”,寫(xiě)博客也有這個(gè)好處。
要進(jìn)入專注模式,必須要克服將自己的思緒集中于單一任務(wù)時(shí)的那種痛感。除非你完全享受完成這項(xiàng)任務(wù),否則這種痛感一開(kāi)始會(huì)很強(qiáng)烈。但是, 這正是關(guān)鍵所在。你必須要意識(shí)到,這種痛苦和不適只是暫時(shí)的,不會(huì)持續(xù)很久。強(qiáng)迫自己進(jìn)入專注模式,達(dá)到專注的臨界點(diǎn)。在我看來(lái),自然世界中不管是物理還是人的心理、思維,都存在慣性,所以我們要專注,就得首先強(qiáng)迫自己進(jìn)入專注,過(guò)不久,就自然專注了,這個(gè)和習(xí)慣養(yǎng)成是一個(gè)道理,比如早起,最開(kāi)始可能是一種痛苦,但但到了后來(lái)也就是一件很自然的事
最好不要多任務(wù)并行,因?yàn)檫@會(huì)打破專注,降低效率,但是現(xiàn)實(shí)不允許你單任務(wù),你可以這樣:批處理瑣碎任務(wù),比如不要來(lái)一封郵件就處理,這樣常常打斷你的工作,專注不夠,但是等一段時(shí)間一次性處理郵件,就好得多;將不費(fèi)腦的任務(wù)和費(fèi)腦的任務(wù)并行,比如跑步的時(shí)候可以聽(tīng)一些書(shū)進(jìn)行學(xué)習(xí)
這本書(shū)的亮點(diǎn)太多了,難以列全,我讀完過(guò)后有種找到知音的感覺(jué),而且通過(guò)書(shū)中的介紹我找到了我一直想有但卻沒(méi)找到的應(yīng)用kanbanflow,是一款用于任務(wù)管理與計(jì)時(shí)的非常棒的應(yīng)用。所以我在這里強(qiáng)烈推薦大家看一下,然后結(jié)合自己的實(shí)際情況,把這些點(diǎn)運(yùn)用起來(lái),助力自己成為一個(gè)更好的“人”。
后記不知不覺(jué),已經(jīng)讀了20多本書(shū)了,我發(fā)現(xiàn)這個(gè)習(xí)慣非常利于我看書(shū)和消化,我準(zhǔn)備把這個(gè)系列繼續(xù)下去,將來(lái)就不只是后端書(shū)籍了,方方面面的書(shū)我都可能看,也會(huì)寫(xiě),寫(xiě)到80歲,哈哈。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/19135.html
摘要:后端好書(shū)閱讀與推薦系列文章后端好書(shū)閱讀與推薦后端好書(shū)閱讀與推薦續(xù)后端好書(shū)閱讀與推薦續(xù)二幾個(gè)月又過(guò)去了,又讀了幾本書(shū),同時(shí)為了深切體會(huì)到某些書(shū)里面的要點(diǎn)還專門(mén)做了一個(gè)小項(xiàng)目,這里就把讀書(shū)與小項(xiàng)目過(guò)程中的一些心得體會(huì)記錄一下。 后端好書(shū)閱讀與推薦系列文章:后端好書(shū)閱讀與推薦后端好書(shū)閱讀與推薦(續(xù))后端好書(shū)閱讀與推薦(續(xù)二) 幾個(gè)月又過(guò)去了,又讀了幾本書(shū),同時(shí)為了深切體會(huì)到某些書(shū)里面的要點(diǎn)還...
摘要:可以通過(guò)大數(shù)據(jù)生態(tài)的一系列工具生態(tài)來(lái)解決大數(shù)據(jù)問(wèn)題數(shù)據(jù)分片主要有兩種方式哈希和范圍。哈希的問(wèn)題是范圍查詢支持不佳,范圍的問(wèn)題是可能冷熱數(shù)據(jù)不均。 后端好書(shū)閱讀與推薦系列文章:后端好書(shū)閱讀與推薦后端好書(shū)閱讀與推薦(續(xù))后端好書(shū)閱讀與推薦(續(xù)二)后端好書(shū)閱讀與推薦(續(xù)三)后端好書(shū)閱讀與推薦(續(xù)四)后端好書(shū)閱讀與推薦(續(xù)五)后端好書(shū)閱讀與推薦(續(xù)六) Elasticsearch權(quán)威指南 El...
摘要:可以通過(guò)大數(shù)據(jù)生態(tài)的一系列工具生態(tài)來(lái)解決大數(shù)據(jù)問(wèn)題數(shù)據(jù)分片主要有兩種方式哈希和范圍。哈希的問(wèn)題是范圍查詢支持不佳,范圍的問(wèn)題是可能冷熱數(shù)據(jù)不均。 后端好書(shū)閱讀與推薦系列文章:后端好書(shū)閱讀與推薦后端好書(shū)閱讀與推薦(續(xù))后端好書(shū)閱讀與推薦(續(xù)二)后端好書(shū)閱讀與推薦(續(xù)三)后端好書(shū)閱讀與推薦(續(xù)四)后端好書(shū)閱讀與推薦(續(xù)五)后端好書(shū)閱讀與推薦(續(xù)六) Elasticsearch權(quán)威指南 El...
閱讀 1744·2023-04-26 02:11
閱讀 3061·2023-04-25 16:18
閱讀 3769·2021-09-06 15:00
閱讀 2707·2019-08-30 15:55
閱讀 1994·2019-08-30 13:20
閱讀 2104·2019-08-26 18:36
閱讀 3194·2019-08-26 11:40
閱讀 2634·2019-08-26 10:11