proto2和proto3兼容的一次尝试

1.前言

由于项目可能会需要proto3的某些特性,但是当前项目中使用的是proto2,因此我这次开始了proto2升级proto3的历程。标题是一次尝试,那是十有八九我是失败了(╥╯^╰╥),但通过这次失败还是总结出了一丢丢结论,故书此篇。

(文章中的proto2版本为2.6.1,proto3的版本为3.15.6。)

Read More

switch-case的替换

1.前言

switch-case是我们常用的一种语法,几乎所有的语言都有这种语法,可以根据变量的不同情况进行对应处理。但switch-case仅支持整型(int),字符(char)和枚举(enum),而且switch-case实现类似multi-if,在情况较多时效率较低,并且代码可读性会降低,所以这次想思考下如何优化。

Read More

机器学习与AI

1.前言

具有学习能力的AI,从刚开始的科幻电影中的幻想开始渐渐由于技术转变为现实,但如今应用场合还很有限。最近正好看到一个相关课程《机器学习驱动的游戏AI技术》,今天就来研究下在游戏场景下的应用。(不过我unity学的不多┭┮﹏┭┮,主要还是了解下其中的思想)

Read More

c++泛型(模板)和java泛型的实现

1.前言

面试被问到c++的泛型和java的泛型有什么区别,回答得不是很好,来总结一下.

Read More

epoll的实现机制

1.前言

昨天弄懂了epoll是干啥的,今天来研究下它是怎么实现的以及怎么用的.

Read More

[转]epoll作用的解释

1.前言

前两天面试被问到epoll,虽然之前研究过但没有解释得很好,所以再来深入研究下epoll.

epoll是linux提供的IO多路复用的一种机制,之前没有弄得很懂.知乎上看到一片对IO的几种机制和epoll作用解释得很易懂的文章,这里转过来,之后具体研究epoll的原理.

Read More

c++中unordered_map的实现

1.前言

写leetcode时发现很多时候高效的答案会用到unordered_map和unordered_set.从使用角度看,unordered的stl容器与正常的map,set相比,在插入和查询的效率上更高,《boost::unordered_map 和 std::map 的对比》中用5000万条数据放入两个容器中进行了对比.这是因为实现上,unordered的stl容器使用的是hashtable,而map,set使用的是红黑树.当然map,set插入后天然有序,需要按key排序时会比较方便.

正好面试要求让我写hashtable的实现,今天就研究一下c++中unordered_map的实现,主要参照的是linux下的源码:/usr/include/c++/4.8.2/profile/unordered_map和hashtable(hashtable我在我的c++源码里没找到,可能在编译好的库中了,所以找的网上的代码).

Read More

git原理

1.前言

一直觉得git很神奇,他的分支切换很快,他的自动合并很智能,他在协作编码时有着不可替代的作用.所以这两天想研究下git的实现原理,参考的资料主要是Git Internals,《Pro Git》的Chapter 10,还有中文版的Git内部原理.

Read More

lua与c++的交互

1.前言

Lua作为一个运行效率非常高的脚本语言,简单方便,如今很多游戏开发都会用到.今天研究下c++和lua是如何交互的~

Read More

游戏服务器的网络协议

1.前言

来到公司后了解到我们的游戏服务器是使用tcp协议进行通信的,使用epoll来监听和处理socket.网络协议会一定程度游戏数据的网络传输的效率、安全性、完整性、顺序性等,因此网络协议的选择一定要恰当.

Read More