深入技术的理解

数据库八大优化:索引,合适属性字段,join,union,事物,锁表,外键,数据库语句优化

C++与lua通信:C++与lua通过堆栈通信,c++调用lua,通过压栈数据,lua取到数据进行运算,再把数据返回栈顶,c++再通过api调用栈顶数据。lua调用c++,c先编写函数,再注册到lua的解释器里面,lua在table里面通过全局变量调用c++函数

线程间生产者消费者模式:生产者消费者模式间主要利用,缓冲队列。互斥锁和条件变量搭配做堵塞,最小消耗完成生产者和消费者线程间读写操作。协程可以看做不返回的函数,coroutine.create,coroutine.resume,coroutine.yield。相比较线程切换的抢占式,需要操作互斥量和通信。协程能直接切换到另一个协程,开销十分小。

map与hashmap的理解:map底层是数组+散列键值对,通过红黑树进行存储管理,键值插入到容器中,红黑树规则进行存储。hashmap底层是数组+链表,通过hash进行存储,通过键值得到hash值,再通过hash值进行与或运算得到数组小标,再到数组上面进行链表的存储与查找.

linux共享内存实现原理:就是把同一块内存映射到不同的进程中去,不同进程通过互斥量加锁的方式访问共享内存,只要两次拷贝就能实现数据互通。shmget()--申请一块共享内存shmat--把共享内存映射到进程中去shmdt--删除切断与共享内存之间的联系shmctl()控制共享内存

内存池实现:stl内存池的话主要是管理那些内存小碎片,低于128byte才进行管理,释放回收到内存池,当有需要用到小碎片的时候再从内存池中拿出来用。游戏里面的话我记得用到的就是副本的管理,一开始申请一块包含50个副本的内存池。往后副本结束后放到内存池中,再创建副本的时候直接到内存池中去拿一块相同大小内存的副本。

RPC通信:远程过程调用,主要是方便,因为隐藏了传输层协议,可以直接调用到对方服务器,程序名,版本号中的某一个函数已经参数的传递,程序员就跟调用自己本地的函数一样

虚函数:基类中函数前面加virtual,基类实例化以后,就会出现一个虚函数表。基类根据虚函数表寻找子类中可能重载的自定义函数。基类的构造函数不能加virtual,因为子类实例化的时候是先执行基类构造函数再执行子类构造函数,如果加virtual相当于覆盖基类的构造了,其次是基类构造函数执行以后才给虚函数表分配指定内存。子类析构函数必须加virtual,因为基类释放的时候必须先释放子类析构函数,但是基类析构函数并不能找到子类析构函数,所以就需要基类通过虚函数表来找到子类析构函数。

C++指针变量有自己的存储空间,里面存储着地址,指针通过地址指向对应的内存,指针变量打印出来的地址,加上*号的是指向的这片空间一般用于给这片空间赋值数据用的。传值,传引用以及传指针都是一个拷贝的过程,分别是拷贝变量,拷贝地址,拷贝指针值。

TCP包分为包头和包体,包头有操作码和包长度,包体的话是字节流报文段。TCP发送数据的时候在缓冲区操作难免会出现沾包和拆包的情况出现,为了预防这种情况,一般有两种处理方式:第一填充包长度,读到一定的长度就开始读下一段报文,第二约定边界分隔符,读到边界分隔符则读下一段报文。

protobuf:protobuf是跨平台、跨语言的通信结构,数据结构以字节序列化和反序列化进行通信。一个message包括多个字符段,一个字符段包括段头和段体。段头由数据编码类型和数据序号组成,属于可变长32位数据,段体由定义长度和数据大小组成。一起组合成字节流发送过去,接收端再通过方法反序列化获取到数据。.proto文件通过命令编译生成.pb.h文件才得以调用。message里面有三种限定符:required,optional.repeated

valgrind基于linux下运行态程序,能检测内存数组越界,内存未初始化,内存引用为释放,内存泄露。通过命令检测出来。内存泄露一般是程序申请的动态内存未释放,new和delete打印追踪,程序退出打印申请未释放内存。windows下一般使用crtdbg,当然也可以自己重构new和delete。





                                                                                                                 --以上内容均为原创,会不定时修改不正确的东西



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值