雖然如今不少人都去搞智能APP開發了,可是做爲有後臺的項目,服務器上編程仍然很重要並須要深厚的技術功底。作了4年手機軟件開發以後,團隊須要,又撿起在PC上開發程序的技術來。項目有後臺程序有數據庫,若是交給php開發的小夥子們也能湊合,可是一旦有複雜的應用邏輯和更多的性能和容量需求,仍是首選C/C++編程。php
既然是後臺程序,要有不少手機/PC終端接入,可能要高併發高負載架構;可能還要加密鏈路通信(SSL/TLS);通信過程通常還須要日誌,結果還要寫到數據庫;mysql
高併發高負載,涉及分佈式程序設計,能把你的程序部署到不一樣的主機服務器上,能分擔負載協調工做;架構設計優先考慮分佈式策略,數據庫的分片策略;還要考慮一臺主機最多容許多少客戶端接入(可使用配置文件設定); (根據主機內存和cpu配置靈活調整這個參數。有可能出錯的地方通常總會出錯,先設計好架構,通盤考慮負載在哪裏,怎麼均衡,怎麼調優)程序員
既然有複雜的應用邏輯,通常還會用到多線程編程技術,數據同步:互斥鎖,讀寫鎖,信號量,條件變量,文件與記錄鎖;內存映射;消息傳遞:FIFO,消息隊列,管道;sql
socket編程:select/poll/epoll, (windows下)IOCP;數據庫
STL:list,map,vector,string,time;編程
pattern: singleton,observer,object pool,Lock;windows
多線程設計時,考慮線程個數如何分配給工做線程;不一樣功能模塊在應用邏輯中擔負的工做量和工做頻率是不一樣的,要當心設計;最好能夠配置,這樣在產品上線之後,也能根據實際須要來靈活調整;緩存
數據庫操做要充分理解數據庫的工做方式:例如頻繁的訪問數據庫不如把多條SQL語句放到一塊兒再訪問數據庫,以提升數據庫執行效率;數據庫鏈接是會失敗的,要把自動重連功能用上(mysql)。產品上線後,最好還要常常檢查sql日誌,找到慢查詢,並想辦法處理(存儲過程,臨時表);重要的數據若是沒有來得及寫到數據庫,就要能從日誌中恢復到數據庫中,這是就須要知道sql日誌的時間順序,記得給每條sql語句日誌加上時間戳信息;服務器
既然要寫日誌,就好好設計一下日誌格式,和哪些重要數據必須寫日誌,哪些可寫可不寫,哪些方便查找bug;格式設計好就能使用腳本工具對日誌進行類grep操做,甚至能夠修復重要的數據遺漏;多線程
寫日誌牽涉到磁盤IO慢動做,最好放到內存中,贊夠必定數量再往磁盤上寫;若是「必定數量」太大,寫日誌到磁盤時就會較慢,可能影響同步產生的日誌寫到內存,就考慮調整這個參數,並使用雙緩存方法;
多線程必然會有同步問題,鎖加多了致使串行處理增多,效率地下;能夠不用鎖的地方儘可能不用鎖,好比對競爭資源僅僅做read only操做的模塊部分的代碼,就儘可能在代碼中增長檢測知足條件,並try catch失敗;這時的失敗是咱們設計高效執行代碼的策略,而不是錯誤;
代碼設計&&編寫中要時刻區分清楚哪些是機制(功能),哪些是策略;機制儘可能內聚,策略儘可能可定製(配置);
只有深入理解Linux/windows內核運行機制,才能寫出高質&&高效的代碼。
你們常說程序員本身測不出本身程序的bug,這隻能反映程序員水平和心態,也映射出開發團隊的研發文化問題。
做者:張 2012.9.8 87895224@QQ.com