持續交付體系在高德的實踐歷程

来源:https://www.cnblogs.com/amap_tech/archive/2019/11/07/11813373.html
-Advertisement-
Play Games

1. 前序 對於工程團隊來說,構建一套具有可持續性的、多方面質量保證的交付體系建設,能夠為業務價值的快速交付搭建起高速公路,也能為交付過程中的質量起到保駕護航的作用。本文為大家介紹持續交付體系在高德的演進與落地。 2. 持續交付 正如前序中所總結的,我們需要構建一套持續交付體系,從而保證在質量不下降 ...


1. 前序

對於工程團隊來說,構建一套具有可持續性的、多方面質量保證的交付體系建設,能夠為業務價值的快速交付搭建起高速公路,也能為交付過程中的質量起到保駕護航的作用。本文為大家介紹持續交付體系在高德的演進與落地。

2. 持續交付

正如前序中所總結的,我們需要構建一套持續交付體系,從而保證在質量不下降的前提下,在業務價值交付上有更進一步的突破。那麼我們先瞭解一下什麼是持續交付以及集團在持續交付的建設上有哪些指引。

2.1 持續交付概念

引用Martin Fowler大師在2013年時發表的文章,對於持續交付的概念有如下的解釋:Continuous Delivery is a software development discipline where you build software in such a way that the software can be released to production at any time.

在上述文中,可以提取幾個關鍵詞:

  • 軟體開發的標準化準則
  • 可以做到隨時隨地的發佈

什麼情況下就可以算是團隊達到了持續發佈的狀態呢?Martin Fowler大師也給出了標準的答案:

  • Your software is deployable throughout its lifecycle
  • Your team prioritizes keeping the software deployable over working on new features
  • Anybody can get fast, automated feedback on the production readiness of their systems any time somebody makes a change to them
  • You can perform push-button deployments of any version of the software to any environment on demand

那麼基於以上的觀點,我們在建立自身的持續交付體系時,需要抓住以下幾個重點:

  • 標準化流程流轉
  • 當有變更進入時,能夠快速、準確且自動的得到反饋
  • 解決部署問題的優先順序高於功能開發
  • 一鍵發佈

2.2 集團的持續交付建設

從理論基礎上對於持續交付有了初步瞭解後,我們從集團層面瞭解一下是如何定義持續交付的能力,並且對於持續交付提出了哪些效能改進目標,參見阿裡技術公眾號的文章 《如何衡量研發效能?阿裡資深技術專家提出了5組指標》

01.png

文章中將持續價值交付的能力拆分為3個層面的5組指標,從不同角度對持續價值交付能力進行了衡量。

有了上面專業層面的衡量指標,那我們是如何定義一個優秀的持續交付衡量目標呢?

管理學之父德魯克說:“如果你不能度量它,就無法改進它”。度量幫助我們更深刻認識研發效能,設定改進方向,並衡量改進效果,所以想要進行效能提升的前提是先能夠識別交付過程中的質效瓶頸。

因此,集團在基於部分BU的優秀實踐下提出了2-1-1的願景。

02.png

  • 1小時的發佈前置時間是對於基礎設施能力的要求,需要保證當達到交付標準後,通過交付流水線能夠達到1小時內的打包、部署和驗證的能力;
  • 1周的開發周期涉及產品需求拆分、研發QA協作能力、持續測試以及快速反饋能力方面提出了挑戰;
  • 2周的需求交付周期是以前兩項為基礎,不僅是涉及到產研測三方,還包括其他協同部門的通力合作才能保證業務價值的快速交付。

3. 持續交付在高德

在基於集團願景的指導下,反觀現有高德服務端的交付流程,我們發現在整個流程中,存在很多效率上的豎井,這些效率問題彙總起來,便會成為整個交付流程上的效能瓶頸,進而影響業務價值的儘早交付。

03.jpg

我們先從一個整體的Milestone來回顧一下整個持續交付所經過的一些重要時間節點:

  • 2018/08 構思與工程能力建設:項目啟動階段,工程效率團隊與業務線明確了持續交付的目標,並啟動了工程能力建設
  • 2018/12 初步落地與試點:項目試點階段,完成了初步的持續交付流程搭建,併在一個項目中驗證流程卡點以及質量標準的基礎能力驗證。最終建立了基礎的質量標準以及降低流程中的耗時
  • 2019/04 推進接入與平臺優化:項目推進階段,持續交付項目質量項優化併在高德的服務端的6條業務線中進行推廣,在9月份完成6條業務線以及11個應用的持續交付落地
  • 2019/09 復盤與展望:項目推進總結,對整個推進過程進行復盤與後續持續交付如何落地進行復盤與展望,整體產出業務推進中出現的問題以及改進方法
  • 未來:在交付流程上進行貼合業務線的微創新,並對效能瓶頸點進行縱深挖掘。結合各縱向平臺進行縱深挖掘,例如:覆蓋率與精準回歸、雲歌Case平臺、代碼掃描平臺等

通過milestone的展示,對於高德持續交付體系的演進有了大致的瞭解後,下麵對於落地的過程以及改進的內容進行一下詳細的梳理。

3.1 接入持續交付前的交付流程

首先先介紹一下在接入持續交付體系之前,高德的服務端是如何進行迭代的開發與上線的。

04.png

與大部分互聯網公司一樣,我們將軟體的交付拆分為多個周期,進行迭代式的交付,以便增量式的進行用戶價值的交付。上圖描述了一個正常迭代周期內的研發、測試以及發佈的流程,我們可以拆分為以下幾個方面:

1.迭代周期起始於代碼庫的變更

2.在功能開發完成後,研發通過CI系統進行冒煙測試驗證,保證服務可以正常啟動以及基礎功能可用

3.在規定的提測時間前,研發將Feature分支通過CR和MR合併到迭代分支,部署到日常環境進行提測

4.QA在收到提測郵件後,參與到日常環境的測試中

5.當日常環境測試完成後,QA會進行測試報告的產出,並確認日常環境測試通過,可以發佈到預發環境

6.部署到預發環境後,會進行流量回放等測試,並最終通過線上的灰度驗證,最終發佈到正式環境

通過上述的圖片和描述,我們可以看到在看似完善的軟體交付過程中,卻仍然存在如下一些質量、效率問題:

1.需求堆積提測、發佈:

目前高德服務端大部分服務採用的是固定迭代周期進行需求發佈,規划到迭代周期內的需求,無論需求大小,均需要等到迭代提測時間點進行提測,在迭代的發佈視窗進行發佈上線。在這種模式下,好的一點是有固定的版本節奏,整體迭代規劃性比較強。但是由於提測、發佈視窗固定,從而也帶來了整體業務價值交付上的等待。因此,需要通過需求拆分來降低需求內部的耦合性,通過改變研發、QA的開發測試模式來降低需求提測中間的豎井等待,從而提升業務價值交付的效率。

2.質量標準不透明,無法及時反饋:

從代碼提交一直到最終產品發佈,一般情況下,會經歷日常、預發、灰度、正式發佈幾個階段,每個階段均有每個階段需要重點解決的問題以及對質量上的要求也不盡然相同。目前結果的收集彙總和通知都是通過跟版人進行人工收集和統計,並郵件通知項目成員。這樣所有的標準控制都是有每個版本的跟版人進行把控,存在信息不透明,反饋不及時的問題。通過質量項標準的建立,以及大盤結果透明和及時的通知,能夠解決溝通層面的低效以及在傳遞過程中信息損耗,從而提升溝通效率,並且避免溝通中的誤解。在解決了當前透明化和及時通知的問題後,我們需要進一步從以下兩方面進行優化:

將通知進行分類以及優先順序處理,降低通知帶來的負面影響

通過信息內容優化,輔助業務進行問題的快速定位與排查

3.部署與流程流轉過程需要人工參與:

對於持續發佈流程來說,有人工參與的地方勢必會影響到其中的效率。所以我們將部署和階段流轉拆分為兩個方面看:

階段流轉:結合上述的階段標準,通過程式來計算是否能夠滿足當前的質量情況是否可以進行階段的流轉,從而排除人為因素以及在階段流轉中的耗時,做到準確

部署:提取相應環境的配置信息,結合Docker化,將打包、部署、健康檢查等一些列活動轉換為機器的標準化執行,通過標準化來避免人為參與所造成的誤差或部署失敗的問題

4.多機房正式發佈驗證人工監督:

目前在應用的正式發佈流程中,由於涉及的機房和機器數量較多,業務上會進行分批驗證,每發佈完成一批機器,研發會通知QA進行這批機器中部分機器的抽檢(部分自動化測試),在這其中也存在著效率上的問題。所以如何節約每次上線過程中的人力損耗,也是在追求效能極致上需要解決的問題。

上述的每個細節的問題,都在我們通往快速業務價值交付的道路上設置了障礙。因此,為了達成更早(快)的交付業務價值的目標下,我們必須要在交付效率、質量標準以及結果快速反饋這幾方面的進行優化。

3.2 持續交付在高德的落地

基於上節拆分出來的4方面的問題,從工程角度來說,由於迭代的排期,需求的分解與拆分需要進行長期的實踐與規劃,並且依賴於產、研、測、項乃至於其他部門的支撐,是一個需要進行逐步探索和調整的過程。所以我們將著眼點放到後3方面的建設上,期望在短期內先建立起快速發佈的能力,清除在交付過程中效率低下的點。

那麼在解決效率問題的建設上,藉助於集團提供的發佈流程以及較好的部署能力,我們將目前拆解為如下幾個維度的抓手:

依托於集團的發佈流程,在持續交付體系中建立與集團發佈流程對應的標準化流程流轉機制

建立服務端質量標準體系,拉通質量標準,去人工化

打通各環節的快速反饋機制,並對發佈流程進行管控,讓變更結果隨時可見

降低發佈過程中的人為參與,讓整個發佈流程做到全程無人值守

通過下麵持續交付流程圖,我們通過接入後的流程圖中看一下以上4個抓手是如何串聯起整體高德持續交付流程,並且這幾項是如何在高德服務端交付流程中進行落地的。

05.png

建立標準化的流程流轉機制

FY19高德服務端發生的線上問題中,其中由於變更或發佈引發的問題占比約12%。通過這組數據,我們期望能夠通過建立一套完整的交付流轉流程,實現對於變更的控制和管理,降低或避免此類問題的發生。

基於以上立論,我們結合當前服務端交付特點,首先先確立以集團標準發佈流程為試點,打通整體持續交付流程;其次,針對各應用中不同的需求,例如:需要性能環境、覆蓋率環境等,結合流水線配置,將整個持續交付的流程流轉進行優化;最終沉澱為各服務的標準化流程流轉機制。通過這種先僵化,後優化,再固化的方式,最終在服務端落地了多套標準的交付流程,避免了在交付環節上的遺漏,以及不規範的操作。

06.png

拉通並落地服務端質量體系標準

在高德現有的交付流程中,整體的質量保障手段大部分是在日常階段進行的,在迭代交付的過程中,各項質量保障手段執行了哪些,執行結果是什麼,目前還是通過QA人員進行人工問題收集與彙總,並判定階段結果的通過與否。在這種情況下,會出現由於跟版人交替導致的質量項遺漏,以及質量標準難以把控的情況。

所以基於這幾方面的問題,我們希望通過用機器把控替代原有的人工把控的方式,通過建立標準化的質量模板,來避免整體執行標準不透明,執行結果無沉澱的情況。並且,通過拉通標準,也進一步的規避掉了非重點服務質量檢查點遺漏的情況。

通過與業務團隊的溝通,我們在第一階段將現有服務端的質量保證手段進行拆分,提取了在不同階段中相對重要的12項質量項,通過機器監督替代原有的人為統計的方式。具體覆蓋瞭如下幾個維度:

12.jpg

打通各環節的快速反饋機制,並對發佈流程進行管控,讓變更結果隨時可見

當建立起有效的質量體系後,在各階段有了質量要求以及準入準出標準,解決了信息收集方面的問題,那麼接下來我們要思考的就是如何將收集上來的各種信息,有效的反饋到項目中的各個干係人,以便進行後續的決策支撐,並且當未達到階段準出標準時,有效的控制項目的階段流轉。

我們將問題拆解為兩方面看,一是有效反饋、決策支撐,二是流程流轉的管控。

從有效反饋、決策支撐方面看:

在接入持續交付之前,各業務線的針對不同類型的自動化測試任務,大部分都有通過Jenkins或測試用例工程反饋結果的通知。但是此類反饋有一個致命的問題,就是通過單項反饋無法縱觀全局,不足以支撐後續的決策。

在接入持續交付後,除了原有業務上的反饋機制,平臺提供能針對當期版本的整體狀態全覽,可以通過平臺隨時觀測到當前版本是否達到可發佈的狀態或者仍然存在哪些不足。將兩者結合起來後,針對項目執行人仍然可以通過原有反饋機制瞭解到單點的質量結果;對於跟版人、一線、二線管理者這類需要縱觀全局的角色來說,通過質量大盤,可以有效且明確的知道當前版本與待發佈狀態的差距,並支撐後續決策以及調整關註的重點

07.jpg

從流程管控方面看:

在接入持續交付之前,可部署的產物無論是否經過階段驗證,都可人為的部署到任意環境下,雖然靈活性比較高,但是也存在一定的質量風險。

在設計持續交付流程時,對於靈活性以及規範性的取捨方面,我們也與業務同學進行了討論。從全局看,為了避免流程不規範引起漏測或其它線上事故,最終確定在初版時先保證流程流轉的規範性,從而降低靈活部署上所帶來質量上的風險。平臺通過集團實驗室插件與集團的部署發佈系統打通,當階段中存在質量項尚未達標的情況下,阻止發佈流程進入到下一階段(環節)。

當基礎的持續交付流程落地後,為了滿足業務上對靈活性的要求,目前我們也在嘗試通過自定義流水線來進行多環境的分發與部署,從而在保證主要階段流轉有管控的同時,增加部署的靈活性,以適應不同的業務形態。

08.png

降低流程發佈過程中的人為參與,讓整個流程做到全程無人值守

我們知道,線上環境部署的複雜程度要遠高於在日常和預發環境的部署。由於部分業務線,線上的機器數量眾多,且分佈在不同機房,為了保證部署時的服務可用性,線上部署時會將上千台機器拆分為多批次進行部署。

在接入持續交付前,為了保證部署後服務的可用性以及對質量上的高標準要求,在每批次部署完成後,QA都需要針對當前批次進行全批次驗證或抽測驗證,當驗證通過後,再進行下一批次的發佈以及後續驗證。雖然驗證本身是通過自動化腳本進行驗證,但由於機器和批次比較多,整個發佈和驗證流程會持續數小時,存在較大的效率問題。

在瞭解到業務上此效率瓶頸後,通過打通上下游系統,集團標準流程、集團發佈系統以及原有業務的線上驗證工程,針對不同業務的發佈場景,進行發佈驗證策略的配置化。通過感知部署時的消息,獲取當批次部署的機器列表,依據各業務的驗證策略配置進行自動化的驗證。並且結合線上階段的報警監控,當某批次發佈驗證出現問題後,系統可以第一時間定位到具體是哪一批次中的哪台機器發佈出現問題,幫助業務進行部署問題的快速定位。

09.png

持續交付體系的業務架構

10.png

4. 落地效果

整個持續交付體系建設,目前在高德服務端落地已經有一段時間了,截止到目前為止:

業務線覆蓋:整個持續交付體系已經覆蓋了高德服務端大部分重點業務

各階段質量項建設:12項

正式發佈階提效:50%~90%

在獲得以上成果的同時,除了上述量化指標外,更有價值的是隱含在背後的研發、測試習慣上的變化。從研發、QA和項目主動發起的縮短項目周期,到QA對於質量項上提出更多的訴求等等,無一不感知到大家對於儘早且高質量的交付業務價值這件事情的重視。當然對於更早(快)的交付業務價值這個目標還有一定的差距,這個也是後續我們與業務線需要共同解決的問題。

5. 持續交付的未來

011.jpg

有人將持續交付形容為在價值交付上的高速公路,持續交付的落地,標志著價值交付到用戶的快速路已經建立完成。但是最終是否能做到更早(快)的交付業務價值,還取決於在這條快速路上行駛的車輛。

根據這個理論,我們除了要保證這條高速公路上不出現坑窪的同時,還要兼顧車輛本身的能力,以及車輛的性能。因此,在車輛出發前,我們更需要通過對車輛的車況進行檢查,保證在高速路上行駛的車輛不會因為自身的原因提不起速度。

5.1 車況檢查

目前,已有的持續集成系統,僅能夠保證車輛在這條路上是能開起來的,車況的檢查都是在上了高速後才開始的(大部分的質量保證手段是部署到日常環境後才開始)。所以基於上面描述的指導方針,我們需要儘早的做檢查,並且需要做更全面的檢查(質量保障手段左移)。

基於這個目標以及結合集團內其他BU的優秀實踐,後續我們希望能通過代碼門禁的手段,儘早落地這類全面的檢查。若要將代碼門禁落地,無論是對於工程效率團隊亦或是業務研發與QA團隊,都有著不小的挑戰,我們需要做到以下的轉變:

  • QA

質量保證的同期化能力建設

質量保證的穩定性與耗時優化

  • RD

研發提交代碼流程的改變

單元測試能力的建設

Code Review的常態化落地以及規範總結

  • 能力支撐

代碼覆蓋率,業務場景覆蓋率的支撐

代碼合併的門禁管控能力

代碼掃描結合CodeReview的總結的落地

當逐步完成以上任務的落地後,能夠消除批量交付業務價值交付中相互等待的時間,並且也能夠保證車輛在持續交付這條高速路上行駛得更快更穩定。

5.2 車輛性能提升

前面車輛檢查可以說是在車輛上路之前的檢查與保障,將質量保證手段左移到研發階段。相對的,我們希望通過車輛性能提升的方法,在車輛上路後,能夠讓車輛行駛提速更快,拉高速度的上限。

  • 縱向測試能力提升

精準回歸:通過感知代碼的變化,推導出代碼變動所影響的Case,讓質量保障更為精準且耗時更少

場景覆蓋:結合線上流量回放,通過代碼覆蓋、場景覆蓋進行查缺補漏,讓質量保障更完整

問題定位:結合失敗用例,快速的進行問題定位與反饋

同期化能力:結合雲歌Case平臺,通過介面定義進行測試代碼與研發代碼同期化編寫能力的加強,以及降低Case編寫和維護成本方面的探索

降低數據干擾:基於高頻、隔離和用完即拋的理論實踐,降低日常環境的數據干擾,讓質量保證更有效

  • 與線上數據挖掘結合

大數據分析:

利用線上日誌分析,產出線上真實場景模型,降低壓測平臺語料準備耗時,場景篩選上做到精確、高效

大數據運用:

結合線上真實場景以及場景覆蓋率,構造線下回歸Case集,降低業務回歸Case維護成本,提升Case有效率,並且能夠快速定位問題

利用場景回放,以及記錄回放中間產物,解決在單測時場景構造問題

隨著持續交付快速通道的搭建完成,期望通過以持續交付體係為契機,在多個縱向維度進行深入挖掘,並完善整個持續交付體系,最終在更早(快)的交付業務價值的前提下,能夠有更高的質量以及更低的人工成本,保證市場競爭的先機,讓高德在激烈的競爭中優勢更為明顯。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、清除浮動的方式一 給前面一個父元素設置高度,​註意:企業開發中能不寫高度就不寫高度 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>D131_ClearFloat</title> <style> .sma ...
  • 執行命令安裝插件 在 中,添加配置 module.exports = { ... chainWebpack: config = { // 一個規則里的 基礎Loader // svg是個基礎loader const svgRule = config.module.rule("svg"); // 清除 ...
  • js javascript js的組成: ECMAscript DOM BOM js放置的位置 js輸出語句 document.write() //在頁面輸出 console.log() //在控制台輸出 [調試程式] alert() //彈窗 [阻塞程式運行] 變數: 聲明變數: 關鍵字:var ...
  • webPack 也更新到了4.0階段,今天看了一下官網,總結一下,零基礎的學習路徑吧。 (1)首先需要下載 webPake和webpack cli npm install webpack webpack-cli (2)下載完之後,則是建立新的文件夾,進行初始化 //webpack 初始化 npm i ...
  • 這篇文章終於回到了正軌:為mongodb偽造數據。之前的隨機數、隨機車牌照、隨機時間還有這篇筆記中的獲取指定長度的中文字元串,都是為這篇筆記做準備。看一下我們的準備(基礎代碼) 現在一切都準備好了,那我們就說說正事兒。為了讓這些數據有點意義,我想了三個表單。分別是車輛信息表、車輛耗損表以及車輛營收表 ...
  • 一、什麼是跨域 1、跨域 指的是瀏覽器不能執行其他網站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對javascript施加的安全限制。 2、同源策略 是指協議,功能變數名稱,埠都要相同,其中有一個不同都會產生跨域,在請求數據時,瀏覽器會在控制臺中報一個異常,提示拒絕訪問。 3、跨域問題怎麼出現的 開發 ...
  • ts為typescript的縮寫,是javascript的超集。 npm源改為國內 由於 Node 的官方模塊倉庫網速太慢,模塊倉庫需要切換到阿裡的源。 執行下麵的命令,確認是否切換成功。 如果輸出為 taobao字樣,則表示切換成功 安裝 Postman Postman 是一個 HTTP 通信測試 ...
  • 含義: insertAdjacentHTML() 將指定的文本解析為HTML或XML,並將結果節點插入到DOM樹中的指定位置。它不會重新解析它正在使用的元素,因此它不會破壞元素內的現有元素。這避免了額外的序列化步驟,使其比直接innerHTML操作更快。 用法: 1 element.insertAd ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...