虽然如今不少人都去搞智能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