server基本组成

设计思想、编码能力、算法基础、协作能力、责任态度;

 

基础结构:

字符串操作封装,如:数字字符串转换;分隔符拆分;等常用操作(string_handle)

网络基础数据结构,如:ip数字转换;获取域名;

对象池封装

位存储(bit_map)

序列化反序列化buffer(octets,能够支持写时拷贝以及压缩功能)

阻塞队列(block_queue)

ring buffer

时间封装(获取年月日等,可以单独线程定时调用)

json_to_pb,pb_to_json(pb_json_convert)

无锁队列

共享内存

定时器(timer)

countdown latch(sync_completion)

字符集转换封装(conv_charset)

关键词搜索(不会涉及分词,比如游戏中各关键词未必是常用词)

c++11:unordered_map耗内存;emplace_back 节省拷贝构造;thread;mutex;atomic;shared_ptr;weak_ptr;function;bind;

stl容器以及算法的使用;

配置文件热加载;

 

概念

由弱到强分别是 依赖(临时关系) < 关联(相同层次之间的关系) < 聚合(包含关系,个体于整体,高低层次之间的关系) < 组合(不可分离的整体关系,生命期一致)

 

线程:

线程和task“聚合”使用,同时封装task factory

线程基本操作封装(thread_pool)

线程锁封装(原子,读写,互斥,条件变量,原子用c++11的话就不必封装)(锁的使用,互斥锁和读写锁使用不易出错,原子锁实现队列等功能容易出错,要使用CAS,要注意)

线程tls(thread_tls)

 

文件读取:

xml

json(rapidjson,jsoncpp)

ini

yaml

libconfig/libconfig.h++

 

协议:

pb

xml定义协议、工具生成cpp文件(一些老项目使用类似方式生成各种前后端协议文件)

 

日志:

glog

log4cpp

linux log API(服务简单的话直接用API就可以啦)

spdlog

 

内部缓存:

redis unixsocket

 

网络模块:

libevent

自己封装

spserver

restclient-cpp

 

外部缓存:

redis(qps 7w,测试用例开启单线程无休眠读取队列 qps 1.6W, redis cpu 14%)

codis(set类型值个数不要超过10W,每个实例8G,具体根据业务测试,有的业务redis存储set类型值个数达到1500W)

 

数据库:

mysql

mongodb(bsoncxx)

ssdb

influxdb

leveldb

 

队列:

redis

kafka

 

RPC:

thrift

brpc

自己封装

 

外部依赖:

zlib

curl

openssl

tbb

gflag

libconfig

 

指标:

cppmetrics

 

规范:

线程和业务要分离,目前代码一般都是线程和业务混淆,类内容混乱,造成逻辑不清晰感觉,查看代码会遇到麻烦;

数据结构设计可以冗余数据,时间换空间;

使用设计模式的目的是把不变的东西和可变的东西分离并且封装起来,避免以后修改代码,  “对修改关闭,对扩展开放”,但是滥用设计模式会把简单的问题复杂化;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MyObject-C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值