操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    在分布式系統(tǒng)中,同時(shí)滿足“一致性”、“可用性”和“分區(qū)容錯(cuò)性”三者是不可能的。分布式系統(tǒng)的事務(wù)一致性是一個(gè)技術(shù)難題,各種解決方案孰優(yōu)孰劣?

    老司機(jī)介紹

    丁浪,現(xiàn)就職于某垂直電商平臺(tái),擔(dān)任技術(shù)架構(gòu)師。關(guān)注高并發(fā)、高可用的架構(gòu)設(shè)計(jì),對系統(tǒng)服務(wù)化、分庫分表、性能調(diào)優(yōu)等方面有深入研究和豐富實(shí)踐經(jīng)驗(yàn)。熱衷于技術(shù)研究和分享。

    在OLTP系統(tǒng)領(lǐng)域,我們在很多業(yè)務(wù)場景下都會(huì)面臨事務(wù)一致性方面的需求,例如最經(jīng)典的Bob給Smith轉(zhuǎn)賬的案例。傳統(tǒng)的企業(yè)開發(fā),系統(tǒng)往往是以單體應(yīng)用形式存在的,也沒有橫跨多個(gè)數(shù)據(jù)庫。

    我們通常只需借助開發(fā)平臺(tái)中特有數(shù)據(jù)訪問技術(shù)和框架(例如Spring、JDBC、ADO.NET),結(jié)合關(guān)系型數(shù)據(jù)庫自帶的事務(wù)管理機(jī)制來實(shí)現(xiàn)事務(wù)性的需求。關(guān)系型數(shù)據(jù)庫通常具有ACID特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。

    而大型互聯(lián)網(wǎng)平臺(tái)往往是由一系列分布式系統(tǒng)構(gòu)成的,開發(fā)語言平臺(tái)和技術(shù)棧也相對比較雜,尤其是在SOA和微服務(wù)架構(gòu)盛行的今天,一個(gè)看起來簡單的功能,內(nèi)部可能需要調(diào)用多個(gè)“服務(wù)”并操作多個(gè)數(shù)據(jù)庫或分片來實(shí)現(xiàn),情況往往會(huì)復(fù)雜很多。單一的技術(shù)手段和解決方案,已經(jīng)無法應(yīng)對和滿足這些復(fù)雜的場景了。

    分布式系統(tǒng)的特性

    對分布式系統(tǒng)有過研究的讀者,可能聽說過“CAP定律”、“Base理論”等,非常巧的是,化學(xué)理論中ACID是酸、Base恰好是堿。這里筆者不對這些概念做過多的解釋,有興趣的讀者可以查看相關(guān)參考資料。CAP定律如下圖:

    在分布式系統(tǒng)中,同時(shí)滿足“CAP定律”中的“一致性”、“可用性”和“分區(qū)容錯(cuò)性”三者是不可能的,這比現(xiàn)實(shí)中找對象需同時(shí)滿足“高、富、帥”或“白、富、美”更加困難。在互聯(lián)網(wǎng)領(lǐng)域的絕大多數(shù)的場景,都需要犧牲強(qiáng)一致性來換取系統(tǒng)的高可用性,系統(tǒng)往往只需要保證“最終一致性”,只要這個(gè)最終時(shí)間是在用戶可以接受的范圍內(nèi)即可。

    分布式事務(wù)

    提到分布式系統(tǒng),必然要提到分布式事務(wù)。要想理解分布式事務(wù),不得不先介紹一下兩階段提交協(xié)議。先舉個(gè)簡單但不精準(zhǔn)的例子來說明:

    第一階段,張老師作為“協(xié)調(diào)者”,給小強(qiáng)和小明(參與者、節(jié)點(diǎn))發(fā)微信,組織他們倆明天8點(diǎn)在學(xué)校門口集合,一起去爬山,然后開始等待小強(qiáng)和小明答復(fù)。

    第二階段,如果小強(qiáng)和小明都回答沒問題,那么大家如約而至。如果小強(qiáng)或者小明其中一人回答說“明天沒空,不行”,那么張老師會(huì)立即通知小強(qiáng)和小明“爬山活動(dòng)取消”。

    細(xì)心的讀者會(huì)發(fā)現(xiàn),這個(gè)過程中可能有很多問題的。如果小強(qiáng)沒看手機(jī),那么張老師會(huì)一直等著答復(fù),小明可能在家里把爬山裝備都準(zhǔn)備好了卻一直等著張老師確認(rèn)信息。更嚴(yán)重的是,如果到明天8點(diǎn)小強(qiáng)還沒有答復(fù),那么就算“超時(shí)”了,那小明到底去還是不去集合爬山呢?

    這就是兩階段提交協(xié)議的弊病,所以后來業(yè)界又引入了三階段提交協(xié)議來解決該類問題。

    兩階段提交協(xié)議在主流開發(fā)語言平臺(tái),數(shù)據(jù)庫產(chǎn)品中都有廣泛應(yīng)用和實(shí)現(xiàn)的,下面來介紹一下XOpen組織提供的DTP模型圖:

    XA協(xié)議指的是TM(事務(wù)管理器)和RM(資源管理器)之間的接口。目前主流的關(guān)系型數(shù)據(jù)庫產(chǎn)品都是實(shí)現(xiàn)了XA接口的。JTA(Java Transaction API)是符合X/Open DTP模型的,事務(wù)管理器和資源管理器之間也使用了XA協(xié)議。 本質(zhì)上也是借助兩階段提交協(xié)議來實(shí)現(xiàn)分布式事務(wù)的,下面分別來看看XA事務(wù)成功和失敗的模型圖:

    在JavaEE平臺(tái)下,WebLogic、Webshare等主流商用的應(yīng)用服務(wù)器提供了JTA的實(shí)現(xiàn)和支持。而在Tomcat下是沒有實(shí)現(xiàn)的(其實(shí)筆者并不認(rèn)為Tomcat能算是JavaEE應(yīng)用服務(wù)器),這就需要借助第三方的框架Jotm、Automikos等來實(shí)現(xiàn),兩者均支持spring事務(wù)整合。

    而在Windows .NET平臺(tái)中,則可以借助ado.net中的TransactionScop API來編程實(shí)現(xiàn),還必須配置和借助Windows操作系統(tǒng)中的MSDTC服務(wù)。如果你的數(shù)據(jù)庫使用的mysql,并且mysql是部署在Linux平臺(tái)上的,那么是無法支持分布式事務(wù)的。 由于篇幅關(guān)系,這里不展開,感興趣的讀者可以自行查閱相關(guān)資料并實(shí)踐。

    總結(jié):這種方式實(shí)現(xiàn)難度不算太高,比較適合傳統(tǒng)的單體應(yīng)用,在同一個(gè)方法中存在跨庫操作的情況。但分布式事務(wù)對性能的影響會(huì)比較大,不適合高并發(fā)和高性能要求的場景。

    提供回滾接口

    在服務(wù)化架構(gòu)中,功能X,需要去協(xié)調(diào)后端的A、B甚至更多的原子服務(wù)。那么問題來了,假如A和B其中一個(gè)調(diào)用失敗了,那可怎么辦呢?

    在筆者的工作中經(jīng)常遇到這類問題,往往提供了一個(gè)BFF層來協(xié)調(diào)調(diào)用A、B服務(wù)。如果有些是需要同步返回結(jié)果的,我會(huì)盡量按照“串行”的方式去調(diào)用。如果調(diào)用A失敗,則不會(huì)盲目去調(diào)用B。如果調(diào)用A成功,而調(diào)用B失敗,會(huì)嘗試去回滾剛剛對A的調(diào)用操作。

    當(dāng)然,有些時(shí)候我們不必嚴(yán)格提供單獨(dú)對應(yīng)的回滾接口,可以通過傳遞參數(shù)巧妙的實(shí)現(xiàn)。

    這樣的情況,我們會(huì)盡量把可提供回滾接口的服務(wù)放在前面。舉個(gè)例子說明:

    我們的某個(gè)論壇網(wǎng)站,每天登錄成功后會(huì)獎(jiǎng)勵(lì)用戶5個(gè)積分,但是積分和用戶又是兩套獨(dú)立的子系統(tǒng)服務(wù),對應(yīng)不同的DB,這控制起來就比較麻煩了。解決思路:

    1. 把登錄和加積分的服務(wù)調(diào)用放在BFF層一個(gè)本地方法中。

    2. 當(dāng)用戶請求登錄接口時(shí),先執(zhí)行加積分操作,加分成功后再執(zhí)行登錄操作

    3. 如果登錄成功,那當(dāng)然最好了,積分也加成功了。如果登錄失敗,則調(diào)用加積分對應(yīng)的回滾接口(執(zhí)行減積分的操作)。

    總結(jié):這種方式缺點(diǎn)比較多,通常在復(fù)雜場景下是不推薦使用的,除非是非常簡單的場景,非常容易提供回滾,而且依賴的服務(wù)也非常少的情況。

    這種實(shí)現(xiàn)方式會(huì)造成代碼量龐大,耦合性高。而且非常有局限性,因?yàn)橛泻芏嗟臉I(yè)務(wù)是無法很簡單的實(shí)現(xiàn)回滾的,如果串行的服務(wù)很多,回滾的成本實(shí)在太高。

    本地消息表

    這種實(shí)現(xiàn)方式的思路,其實(shí)是源于ebay,后來通過支付寶等公司的布道,在業(yè)內(nèi)廣泛使用。其基本的設(shè)計(jì)思想是將遠(yuǎn)程分布式事務(wù)拆分成一系列的本地事務(wù)。如果不考慮性能及設(shè)計(jì)優(yōu)雅,借助關(guān)系型數(shù)據(jù)庫中的表即可實(shí)現(xiàn)。

    舉個(gè)經(jīng)典的跨行轉(zhuǎn)賬的例子來描述。

    第一步偽代碼如下,扣款1W,通過本地事務(wù)保證了憑證消息插入到消息表中。

    第二步,通知對方銀行賬戶上加1W了。那問題來了,如何通知到對方呢?

    通常采用兩種方式:

    1. 采用時(shí)效性高的MQ,由對方訂閱消息并監(jiān)聽,有消息時(shí)自動(dòng)觸發(fā)事件

    2. 采用定時(shí)輪詢掃描的方式,去檢查消息表的數(shù)據(jù)。

    兩種方式其實(shí)各有利弊,僅僅依靠MQ,可能會(huì)出現(xiàn)通知失敗的問題。而過于頻繁的定時(shí)輪詢,效率也不是最佳的(90%是無用功)。所以,我們一般會(huì)把兩種方式結(jié)合起來使用。

    解決了通知的問題,又有新的問題了。萬一這消息有重復(fù)被消費(fèi),往用戶帳號上多加了錢,那豈不是后果很嚴(yán)重?

    仔細(xì)思考,其實(shí)我們可以消息消費(fèi)方,也通過一個(gè)“消費(fèi)狀態(tài)表”來記錄消費(fèi)狀態(tài)。在執(zhí)行“加款”操作之前,檢測下該消息(提供標(biāo)識(shí))是否已經(jīng)消費(fèi)過,消費(fèi)完成后,通過本地事務(wù)控制來更新這個(gè)“消費(fèi)狀態(tài)表”。這樣子就避免重復(fù)消費(fèi)的問題。

    總結(jié):上訴的方式是一種非常經(jīng)典的實(shí)現(xiàn),基本避免了分布式事務(wù),實(shí)現(xiàn)了“最終一致性”。但是,關(guān)系型數(shù)據(jù)庫的吞吐量和性能方面存在瓶頸,頻繁的讀寫消息會(huì)給數(shù)據(jù)庫造成壓力。所以,在真正的高并發(fā)場景下,該方案也會(huì)有瓶頸和限制的。

    MQ(非事務(wù)消息)

    通常情況下,在使用非事務(wù)消息支持的MQ產(chǎn)品時(shí),我們很難將業(yè)務(wù)操作與對MQ的操作放在一個(gè)本地事務(wù)域中管理。通俗點(diǎn)描述,還是以上述提到的“跨行轉(zhuǎn)賬”為例,我們很難保證在扣款完成之后對MQ投遞消息的操作就一定能成功。這樣一致性似乎很難保證。

    先從消息生產(chǎn)者這端來分析,請看偽代碼:

    根據(jù)上述代碼及注釋,我們來分析下可能的情況:

    1. 操作數(shù)據(jù)庫成功,向MQ中投遞消息也成功,皆大歡喜

    2. 操作數(shù)據(jù)庫失敗,不會(huì)向MQ中投遞消息了

    3. 操作數(shù)據(jù)庫成功,但是向MQ中投遞消息時(shí)失敗,向外拋出了異常,剛剛執(zhí)行的更新數(shù)據(jù)庫的操作將被回滾

    從上面分析的幾種情況來看,貌似問題都不大的。那么我們來分析下消費(fèi)者端面臨的問題:

    1. 消息出列后,消費(fèi)者對應(yīng)的業(yè)務(wù)操作要執(zhí)行成功。如果業(yè)務(wù)執(zhí)行失敗,消息不能失效或者丟失。需要保證消息與業(yè)務(wù)操作一致

    2. 盡量避免消息重復(fù)消費(fèi)。如果重復(fù)消費(fèi),也不能因此影響業(yè)務(wù)結(jié)果

    如何保證消息與業(yè)務(wù)操作一致,不丟失?

    主流的MQ產(chǎn)品都具有持久化消息的功能。如果消費(fèi)者宕機(jī)或者消費(fèi)失敗,都可以執(zhí)行重試機(jī)制的(有些MQ可以自定義重試次數(shù))。

    如何避免消息被重復(fù)消費(fèi)造成的問題?

    1. 保證消費(fèi)者調(diào)用業(yè)務(wù)的服務(wù)接口的冪等性

    2. 通過消費(fèi)日志或者類似狀態(tài)表來記錄消費(fèi)狀態(tài),便于判斷(建議在業(yè)務(wù)上自行實(shí)現(xiàn),而不依賴MQ產(chǎn)品提供該特性)

    總結(jié):這種方式比較常見,性能和吞吐量是優(yōu)于使用關(guān)系型數(shù)據(jù)庫消息表的方案。如果MQ自身和業(yè)務(wù)都具有高可用性,理論上是可以滿足大部分的業(yè)務(wù)場景的。不過在沒有充分測試的情況下,不建議在交易業(yè)務(wù)中直接使用。

    MQ(事務(wù)消息)

    舉個(gè)例子,Bob向Smith轉(zhuǎn)賬,那我們到底是先發(fā)送消息,還是先執(zhí)行扣款操作?

    好像都可能會(huì)出問題。如果先發(fā)消息,扣款操作失敗,那么Smith的賬戶里面會(huì)多出一筆錢。反過來,如果先執(zhí)行扣款操作,后發(fā)送消息,那有可能扣款成功了但是消息沒發(fā)出去,Smith收不到錢。除了上面介紹的通過異常捕獲和回滾的方式外,還有沒有其他的思路呢?

    下面以阿里巴巴的RocketMQ中間件為例,分析下其設(shè)計(jì)和實(shí)現(xiàn)思路。

    RocketMQ第一階段發(fā)送Prepared消息時(shí),會(huì)拿到消息的地址,第二階段執(zhí)行本地事物,第三階段通過第一階段拿到的地址去訪問消息,并修改狀態(tài)。細(xì)心的讀者可能又發(fā)現(xiàn)問題了,如果確認(rèn)消息發(fā)送失敗了怎么辦?

    RocketMQ會(huì)定期掃描消息集群中的事物消息,這時(shí)候發(fā)現(xiàn)了Prepared消息,它會(huì)向消息發(fā)送者確認(rèn),Bob的錢到底是減了還是沒減呢?如果減了是回滾還是繼續(xù)發(fā)送確認(rèn)消息呢?RocketMQ會(huì)根據(jù)發(fā)送端設(shè)置的策略來決定是回滾還是繼續(xù)發(fā)送確認(rèn)消息。這樣就保證了消息發(fā)送與本地事務(wù)同時(shí)成功或同時(shí)失敗。如下圖:

    總結(jié):據(jù)筆者的了解,各大知名的電商平臺(tái)和互聯(lián)網(wǎng)公司,幾乎都是采用類似的設(shè)計(jì)思路來實(shí)現(xiàn)“最終一致性”的。這種方式適合的業(yè)務(wù)場景廣泛,而且比較可靠。不過這種方式技術(shù)實(shí)現(xiàn)的難度比較大。目前主流的開源MQ(ActiveMQ、RabbitMQ、Kafka)均未實(shí)現(xiàn)對事務(wù)消息的支持,所以需二次開發(fā)或者新造輪子。比較遺憾的是,RocketMQ事務(wù)消息部分的代碼也并未開源,需要自己去實(shí)現(xiàn)。

    其他補(bǔ)償方式

    做過支付寶交易接口的同學(xué)都知道,我們一般會(huì)在支付寶的回調(diào)頁面和接口里,解密參數(shù),然后調(diào)用系統(tǒng)中更新交易狀態(tài)相關(guān)的服務(wù),將訂單更新為付款成功。同時(shí),只有當(dāng)我們回調(diào)頁面中輸出了success字樣或者標(biāo)識(shí)業(yè)務(wù)處理成功相應(yīng)狀態(tài)碼時(shí),支付寶才會(huì)停止回調(diào)請求。否則,支付寶會(huì)每間隔一段時(shí)間后,再向客戶方發(fā)起回調(diào)請求,直到輸出成功標(biāo)識(shí)為止。

    其實(shí)這就是一個(gè)很典型的補(bǔ)償例子,跟一些MQ重試補(bǔ)償機(jī)制很類似。

    一般成熟的系統(tǒng)中,對于級別較高的服務(wù)和接口,整體的可用性通常都會(huì)很高。如果有些業(yè)務(wù)由于瞬時(shí)的網(wǎng)絡(luò)故障或調(diào)用超時(shí)等問題,那么這種重試機(jī)制其實(shí)是非常有效的。

    當(dāng)然,考慮個(gè)比較極端的場景,假如系統(tǒng)自身有bug或者程序邏輯有問題,那么重試1W次那也是無濟(jì)于事的。那豈不是就發(fā)生了“明明已經(jīng)付款,卻顯示未付款不發(fā)貨”類似的悲劇?

    其實(shí)為了交易系統(tǒng)更可靠,我們一般會(huì)在類似交易這種高級別的服務(wù)代碼中,加入詳細(xì)日志記錄的,一旦系統(tǒng)內(nèi)部引發(fā)類似致命異常,會(huì)有郵件通知。同時(shí),后臺(tái)會(huì)有定時(shí)任務(wù)掃描和分析此類日志,檢查出這種特殊的情況,會(huì)嘗試通過程序來補(bǔ)償并郵件通知相關(guān)人員。

    在某些特殊的情況下,還會(huì)有“人工補(bǔ)償”的,這也是最后一道屏障。

    小結(jié)

    上訴的幾種方案中,筆者也大致總結(jié)了其設(shè)計(jì)思路,優(yōu)勢,劣勢等,相信讀者已經(jīng)有了一定的理解。其實(shí)分布式系統(tǒng)的事務(wù)一致性本身是一個(gè)技術(shù)難題,目前沒有一種很簡單很完美的方案能夠應(yīng)對所有場景。具體還是要使用者根據(jù)不同的業(yè)務(wù)場景去抉擇。

    本文系InfoQ原創(chuàng)首發(fā),未經(jīng)授權(quán)謝絕轉(zhuǎn)載。

    又到了找工作的季節(jié),大多數(shù)程序員卻無比糾結(jié),想跳槽卻不想面試。畢竟拼實(shí)力沒啥可怕,怕的是明明有實(shí)力,面試時(shí)卻有口難言。


    不少小伙伴在后臺(tái)詢問程序員找工作或者跳槽要做什么準(zhǔn)備?


    面試就像作戰(zhàn),只要做好充足的準(zhǔn)備,一定能胸有成竹。異步君在這里給大家分享幾個(gè)小技巧:


    面試考察的基本功,包括以下方面:


    程序風(fēng)格:能正確使用縮進(jìn),括號要對齊,變量名可以起的有意義;

    編碼習(xí)慣:異常檢查,邊界處理;

    溝通:讓面試官時(shí)刻明白你的意圖,不要閉著眼睛不停地寫。因?yàn)槟愕乃惴ㄎ幢貙Αα四阋参幢貙懙贸鰜怼V虚g稍微有點(diǎn)問題,你就失敗了。對于面試官來說,他根本不知道你的解題進(jìn)行到哪一步了;

    測試:主動(dòng)寫出合理的測試用例(Test case),一些常見的用例,如 null 檢查。一般你沒寫的話, 面試官會(huì)讓你寫,但如果你主動(dòng)寫出來,說明你有好的習(xí)慣,容易加分。

    對程序員來說,技術(shù)面試是整個(gè)面試中非常重要的環(huán)節(jié)。當(dāng)你拿到一個(gè)具體問題時(shí),流程通常如下,可供參考。


    明確題意:通過與面試官交流明確需要解答的問題。這部分主要為了讓自己放松心態(tài),并且給面試官 留下你具有良好團(tuán)隊(duì)意識(shí)和交流能力的印象。

    描述大體思路:描述你打算用什么算法,什么數(shù)據(jù)結(jié)構(gòu)。主要是為了讓面試官了解你的思維過程,如果你給出的解答與他想要的答案偏差太多,可以及時(shí)糾正。同時(shí),描述思路也給了你自己思考的機(jī)會(huì)。

    實(shí)現(xiàn)算法:先處理邊界條件。對于重要的算法模塊,加一些注釋或者與面試官進(jìn)行交流。目的是讓面 試官始終了解你在做什么,算法框架是什么。

    跑一個(gè)測試:用一個(gè)測試用例走一遍你寫的程序。目的在于和面試官一起確保你的算法是有效的,可 以在過程中及時(shí)發(fā)現(xiàn)并糾正自己的錯(cuò)誤。同時(shí),給面試官留下你有寫單元測試(unit test)習(xí)慣的良好印象。

    描述算法復(fù)雜度,回答面試官的問題。


    當(dāng)然,要找一份好工作,功夫還在平時(shí)。異步君還為大家整理出了一份關(guān)于程序員面試的書單,不僅能幫助做職業(yè)規(guī)劃,還能提高大家的職業(yè)技能!


    職業(yè)生涯規(guī)劃


    《軟技能 代碼之外的生存指南》

    約翰 Z.森梅茲 著

    這是一本真正從“人”(而非技術(shù)也非管理)的角度關(guān)注軟件開發(fā)人員自身發(fā)展的書。書中論述的內(nèi)容既涉及生活習(xí)慣,又包括思維方式,凸顯技術(shù)中“人”的因素,全面講解軟件行業(yè)從業(yè)人員所需知道的所有“軟技能”。


    對大多數(shù)軟件開發(fā)人員而言,編碼才是有趣的,而如何與客戶、同事以及經(jīng)理們打交道,如何保證工作效率,如何保障財(cái)務(wù)安全,如何保持自己的體形,如何找到真愛……這些則統(tǒng)統(tǒng)被視為畏途。本書恰恰可以在這些方面幫到你!


    《代碼整潔之道》

    馬丁 著

    細(xì)節(jié)之中自有天地,整潔成就卓越代碼。盡管糟糕的代碼也能運(yùn)行,但如果代碼不整潔,會(huì)使整個(gè)開發(fā)團(tuán)隊(duì)泥足深陷,寫得不好的代碼每年都要耗費(fèi)難以計(jì)數(shù)的時(shí)間和資源。然而這種情況并非無法避免。


    這本書是軟件工程大師馬丁經(jīng)典力作,由互聯(lián)網(wǎng)產(chǎn)品與運(yùn)營專家韓磊獻(xiàn)譯,本書榮獲第13屆Jolt大獎(jiǎng)。


    從《代碼整潔之道》中可以學(xué)到:好代碼和糟糕的代碼之間的區(qū)別:如何編寫好代碼,如何將糟糕的代碼轉(zhuǎn)化為好代碼:如何創(chuàng)建好名稱、好函數(shù)、好對象和好類;如何格式化代碼以實(shí)現(xiàn)其可讀性的優(yōu)化:如何在不妨礙代碼邏輯的前提下充分實(shí)現(xiàn)錯(cuò)誤處理;如何進(jìn)行單元測試和測試驅(qū)動(dòng)開發(fā)。


    《代碼整潔之道 程序員的職業(yè)素養(yǎng)》

    羅伯特·C.馬丁 著


    成功的程序員在以往的工作和生活中都曾經(jīng)歷過大大小小的不確定性,承受過永無休止的壓力。他們之所以能夠成功,是因?yàn)閾碛幸粋€(gè)共同點(diǎn),都深切關(guān)注創(chuàng)建軟件所需的各項(xiàng)實(shí)踐。他們將軟件開發(fā)視為一種需要精雕細(xì)琢加以修煉的技藝,他們以專業(yè)人士的標(biāo)準(zhǔn)要求自己,他們具有職業(yè)素養(yǎng)。


    軟件開發(fā)大師Robert C. Martin在書中介紹了真實(shí)軟件技藝中的各項(xiàng)原則、技術(shù)、工具和實(shí)踐,展示了怎么以自豪、自尊和自信的心態(tài)進(jìn)行軟件開發(fā),怎么取得卓越表現(xiàn)和豐碩成果,怎么做到有效溝通和確切估算,怎么以坦誠的心態(tài)面對困難,并引導(dǎo)讀者認(rèn)識(shí)到專業(yè)程序員肩負(fù)的責(zé)任重大,闡述了什么才是程序員的職業(yè)素養(yǎng)。


    《編程珠璣(第2版 修訂版)》

    喬恩·本特利(Jon Bentley) 著

    本書作者Jon Bentley,世界計(jì)算機(jī)科學(xué)家,被譽(yù)為影響算法發(fā)展的十位大師之一。


    多年以來,當(dāng)程序員們推選出心愛的計(jì)算機(jī)圖書時(shí),《編程珠璣》總是位于前列。正如自然界里珍珠出自細(xì)沙對牡蠣的磨礪,計(jì)算機(jī)科學(xué)大師JonBentley以其獨(dú)有的洞察力和創(chuàng)造力,從磨礪程序員的實(shí)際問題中凝結(jié)出一篇篇不朽的編程“珠璣”,成為世界計(jì)算機(jī)界名刊《ACM通訊》歷史上受歡迎的專欄,結(jié)集為兩部不朽的計(jì)算機(jī)科學(xué)經(jīng)典名著,影響和激勵(lì)著一代又一代程序員和計(jì)算機(jī)科學(xué)工作者。本書為首卷,主要討論計(jì)算機(jī)科學(xué)中本質(zhì)的問題:如何正確選擇和高效地實(shí)現(xiàn)算法。


    在書中,作者選取許多具有典型意義的復(fù)雜編程和算法問題,生動(dòng)描繪了歷史上眾大師們在探索解決方案中發(fā)生的軼事、走過的彎路和不斷精益求精的歷程,引導(dǎo)讀者像真正的程序員和軟件工程師那樣富于創(chuàng)新性地思考,并透徹闡述和總結(jié)了許多獨(dú)特而精妙的設(shè)計(jì)原則、思考和解決問題的方法以及實(shí)用程序設(shè)計(jì)技巧。


    《編程珠璣(續(xù) 修訂版)》

    喬恩·本特利 (Jon Bentley) 著


    本書是計(jì)算機(jī)科學(xué)方面的經(jīng)典名著《編程珠璣》的姊妹篇,講述了對于程序員有共性的知識(shí)。延續(xù)了《編程珠璣》的特色,通過一些精心設(shè)計(jì)的有趣而又頗具指導(dǎo)意義的程序,對實(shí)用程序設(shè)計(jì)技巧及基本設(shè)計(jì)原則進(jìn)行透徹而睿智的描述,為復(fù)雜的編程問題提供清晰而完備的解決思路。涵蓋了程序員操縱程序的技術(shù)、程序員取舍的技巧、輸入和輸出設(shè)計(jì)以及算法示例,這些內(nèi)容結(jié)合成一個(gè)有機(jī)的整體,如一串串珠璣展示給程序員。


    《重構(gòu) 改善既有代碼的設(shè)計(jì)(第2版》

    馬丁·福勒(Martin Fowler) 著

    軟件開發(fā)的不朽經(jīng)典,生動(dòng)闡述重構(gòu)原理和具體做法,普通程序員進(jìn)階到編程高手必須修煉的秘笈。


    重構(gòu),一言以蔽之,就是在不改變外部行為的前提下,有條不紊地改善代碼。多年前,正是本書原版的出版,使重構(gòu)終于從編程高手們的小圈子走出,成為眾多普通程序員日常開發(fā)工作中不可或缺的一部分。本書也因此成為與《設(shè)計(jì)模式》齊名的經(jīng)典著作,被譯為中、德、俄、日等眾多語言,在世界范圍內(nèi)暢銷不衰。


    本書凝聚了軟件開發(fā)社區(qū)專家多年摸索而獲得的寶貴經(jīng)驗(yàn),擁有不因時(shí)光流逝而磨滅的價(jià)值。今天,無論是重構(gòu)本身,業(yè)界對重構(gòu)的理解,還是開發(fā)工具對重構(gòu)的支持力度,都與本書出版時(shí)不可同日而語,但書中所蘊(yùn)涵的意味和精華,依然值得反復(fù)咀嚼,而且往往能夠常讀常新。


    技能開發(fā)


    《程序員面試白皮書》

    逸超, 董飛著

    這是一本介紹程序員面試的參考書,通過一系列的實(shí)例介紹了數(shù)據(jù)結(jié)構(gòu)、算法以及計(jì)算機(jī)專業(yè)的其他基礎(chǔ)知識(shí)。同時(shí),本書還在各章中及時(shí)回顧教材中的重點(diǎn)內(nèi)容,書中的題目也很據(jù)參考價(jià)值,通過實(shí)例與知識(shí)點(diǎn)相結(jié)合的方式幫助讀者掌握要領(lǐng)。除此之外,本書還將引導(dǎo)讀者分析題目,幫助讀者理清思路并最終解決問題。


    《師兄教你找工作——100場面試 20個(gè)offer背后的求職秘密》

    韓速(@美牙君)著

    本書以應(yīng)屆畢業(yè)生的視角,對求職的整個(gè)過程進(jìn)行了分享和描述。涉及職業(yè)規(guī)劃、前期準(zhǔn)備、簡歷、網(wǎng)申、郵件投遞、內(nèi)推、在線測評、筆試、電面、結(jié)構(gòu)化面試、群面、壓力面、談offer、選offer以及簽約注意事項(xiàng)等各個(gè)環(huán)節(jié)。既解答了同學(xué)們最關(guān)心的若干問題,也包括求職技巧分享。既幫助大家正確地審視自己,也幫助讀者客觀地面對企業(yè)。


    《趣學(xué)算法》

    陳小玉 著

    本書從算法之美娓娓道來,沒有高深的原理,也沒有枯燥的公式,通過趣味故事引出算法問題,包含50多個(gè)實(shí)例及完美圖解,結(jié)合學(xué)生提問,分析算法本質(zhì),并給出代碼實(shí)現(xiàn)的詳細(xì)過程和運(yùn)行結(jié)果。


    本書可作為程序員的學(xué)習(xí)用書,也適合從未有過編程經(jīng)驗(yàn)但又對算法有強(qiáng)烈興趣的初學(xué)者使用,同時(shí)也可作為高等院校計(jì)算機(jī)、數(shù)學(xué)及相關(guān)專業(yè)的師生用書和培訓(xùn)學(xué)校的教材。


    《算法謎題》

    【美】Anany Levitin 著

    算法是計(jì)算機(jī)科學(xué)領(lǐng)域最重要的基石之一。算法謎題,就是能夠直接或間接地采用算法來加以解決的謎題。求解算法謎題是培養(yǎng)和鍛煉算法思維能力一種最有效和最有樂趣的途徑。


    本書是一本經(jīng)典算法謎題的合集。本書包括了一些古已有之的謎題,數(shù)學(xué)和計(jì)算機(jī)科學(xué)有一部分知識(shí)就發(fā)源于此。本書中還有一些較新的謎題,其中有一部分謎題被用作知名IT企業(yè)的面試題。全書可分為4個(gè)部分,分別是概覽、謎題、提示和答案。概覽介紹了算法設(shè)計(jì)的通用策略和算法分析的技術(shù),還附帶有不少的實(shí)例。謎題部分將謎題按照簡單、中等難度和較難三個(gè)層級分別列出。提示部分依次給出謎題提示,幫助讀者找到正確的解題方向,同時(shí)仍然為讀者留下了獨(dú)立求解的空間。答案部分則給出了謎題的詳細(xì)解答。


    《C和C++程序員面試秘笈》

    董山海 著

    眾多高級語言都從C/C++有所借鑒,所以說C/C++的語言基礎(chǔ)對從事軟件開發(fā)的人員來說非常重要。


    本書是一本解析C/C++面試題的書,可以幫助求職者更好地準(zhǔn)備面試。《C和C++程序員面試秘笈》共包含12章,囊括了目前企業(yè)中常見的面試題類型和考點(diǎn),包括C/C++程序基礎(chǔ),預(yù)處理、const、static與sizeof,引用和指針,字符串,位運(yùn)算與嵌入式編程,C++面向?qū)ο螅珻++繼承和多態(tài),數(shù)據(jù)結(jié)構(gòu),排序,泛型編程,STL,算法和邏輯思維等最常見的面試題。《C和C++程序員面試秘笈》通過技術(shù)點(diǎn)解析、代碼輔佐的方式讓讀者能深刻領(lǐng)會(huì)每個(gè)考點(diǎn)背后的技術(shù)。


    本書緊扣面試精髓,對各種技術(shù)的剖析一針見血,是目前想找工作的C/C++程序員和剛畢業(yè)的大學(xué)生的面試寶典。


    《Java程序員面試秘笈》

    常建功著

    · 緊扣面試精髓,一冊在手,工作不愁

    · 提供最全的Java面試題分類,幫你有備而戰(zhàn)

    · 涵蓋經(jīng)典的筆試題+上機(jī)題,幫你整理知識(shí)庫

    · 解析考題的要點(diǎn)和技術(shù)原理,幫你溫故而知新

    Java程序員目前就業(yè)形勢較好,因?yàn)镴ava的應(yīng)用太廣泛了,從網(wǎng)頁開發(fā)到手機(jī)安卓開發(fā),都離不開Java。本書緊扣面試精髓,對各種技術(shù)剖析一針見血,是想找工作的Java程序員和剛畢業(yè)學(xué)生的面試寶典。


    《編程之法:面試和算法心得》

    July 著

    · 蛻變于CSDN技術(shù)博客“結(jié)構(gòu)之法算法之道”

    · 內(nèi)容涉及面試、算法、機(jī)器學(xué)習(xí)三大主題

    · 作者數(shù)年的積累成果

    · 進(jìn)入IT行業(yè)求職筆試和面試寶典


    本書涉及面試、算法、機(jī)器學(xué)習(xí)三個(gè)主題。書中的每道編程題目都給出了多種思路、多種解法,不斷優(yōu)化、逐層遞進(jìn)。第1章至第6章分別闡述字符串、數(shù)組、樹、查找、動(dòng)態(tài)規(guī)劃、海量數(shù)據(jù)處理等相關(guān)的編程面試題和算法,第7章介紹機(jī)器學(xué)習(xí)的兩個(gè)算法—K近鄰和SVM。


    此外,每一章都有“舉一反三”和“習(xí)題”,以便讀者及時(shí)運(yùn)用所學(xué)的方法解決相似的問題,且在附錄中收錄了語言、鏈表、概率等其他題型。書中的每一道題都是面試的高頻題目,反復(fù)出現(xiàn)在近5年各大公司的筆試和面試中,對面試備考有著極強(qiáng)的參考價(jià)值。


    《.NET程序員面試秘笈》

    張?jiān)坡G著

    本書是一本解析.NET面試題的書,可以幫助求職者更好地準(zhǔn)備面試。全書共11章,囊括了目前企業(yè)中常見的面試題類型和考點(diǎn),包括.NET語言基礎(chǔ)、基類、接口和泛型、.NET高級特性、Windows窗體編程、ADO.NET編程、SQL查詢及LINQ、ASP.NET程序開發(fā)和算法趣味題等。通過技術(shù)點(diǎn)解析、代碼輔佐的方式使讀者能深刻理解每個(gè)考點(diǎn)背后的技術(shù)。

    緊扣面試焦點(diǎn),對各種技術(shù)剖析一針見血,是目前想找工作的.NET程序員和剛畢業(yè)學(xué)生的面試寶典。


    《軟件測試工程師面試秘籍》

    G.li, 51Testing軟件測試網(wǎng) 著

    本書用輕松、愉快、親切的語言為廣大應(yīng)聘測試崗位的讀者組織了一場求職戰(zhàn)役。書中語言精練,內(nèi)容豐富,涵蓋應(yīng)聘基本流程、開發(fā)類基礎(chǔ)知識(shí)、測試類專業(yè)知識(shí)、筆試面試技巧,并穿插了大量名企的筆試面試題。相信必能幫助對應(yīng)聘完全知的菜鳥們迅速成長為百戰(zhàn)百勝的、羽翼豐滿的雄鷹。


    本書適用范圍廣,包含了各類語言的筆試、面試題,以及Java、C++、C#等。《軟件測試工程師面試秘籍》專業(yè)實(shí)用性強(qiáng),除了有一般程序員的基本知識(shí)和題目外,還另外針對測試這個(gè)崗位設(shè)計(jì)了一個(gè)章節(jié),包含Web測試、移動(dòng)App測試、游戲類測試等場景。


    《Android高薪之路—Android程序員面試寶典》

    李寧著

    本書取材于各大IT公司面試真題,所給出的試題盡可能地覆蓋了Android應(yīng)用開發(fā)的各個(gè)方面,而且大多數(shù)試題都有解析部分,讀者可以通過這部分更深入地理解試題中所包含的技術(shù)內(nèi)容,希望真正做到由點(diǎn)成線,舉一反三。


    書中還將Android中涉及的各個(gè)常用技術(shù)問題進(jìn)行篩選、分類。這樣讀者可以有的放矢,對自己還沒有掌握的Android技術(shù)進(jìn)行重點(diǎn)攻破,從而起到事半功倍的效果。除了對每道題目都有詳細(xì)的解析和回答外,對相關(guān)知識(shí)點(diǎn)還有擴(kuò)展說明。對面試中Android常見的題型和常用解答技巧進(jìn)行了介紹,它不僅能幫助求職者快速復(fù)習(xí)相關(guān)知識(shí)點(diǎn),也對現(xiàn)代職業(yè)人如何有效求職做了詳細(xì)解說。


    本書對于讀者從求職就業(yè)到提升計(jì)算機(jī)專業(yè)知識(shí)都有顯著的幫助,適合計(jì)算機(jī)相關(guān)專業(yè)應(yīng)屆畢業(yè)生閱讀,也適合作為正在應(yīng)聘軟件行業(yè)的相關(guān)就業(yè)人員和計(jì)算機(jī)愛好者的參考書。


    -END-

網(wǎng)站首頁   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權(quán)所有