【工作日记05】零散知识汇集

1,298 阅读4分钟

下面的内容是,我最近几个月工作遇到的零散的技术和知识点的汇聚,定期整理归类繁杂的知识,有利于形成知识的结构化。

目录:

  • git相关
  • protobuf协议
  • make构建

git相关

git子模块

允许git仓库做为另一个git仓库的子目录,同时保持自己的独立提交

# 添加子模块,同时会创建.gitmodules保存仓库子模块的映射信息
git submodule add [url] 

# clone含有子模块的项目后拉取子模块代码
git clone [url]
git submodule init
git submodule update
# 加入--recursive 同等于上面
git clone --recursive [url]

# 在子模块上更新代码
git fetch
git merge origin/master
# 在主项目中执行下面命令同等于上面操作,缺少[submodule name]默认更新所有子模块
git submodule update --remote [submodule name]

# 在主项目看到子模块的提交日志
git log -p --submodule

git子模块:git-scm.com/book/zh/v2/… 业界文档:juejin.cn/post/684490…

git-diff命令

# 显示更改文件数
git diff COMMIT COMMIT --shortstat  
#显示更改的文件名
--name-status 

# 筛选文件
# 合并后对比一些特定文件的情况下,这条命令尤为重要,后买可以接对多个文件名,用vscode的diff插件还要一个一个文件检查
# 假如合并文件有几百个,工作量是艰巨的,可以写个shell脚本处理对比结果,写进txt文件
# 我最近就有个这样的需求,幸好有这条命令
git diff COMMIT COMMIT *.lua *.js 


# 筛选具体目录下的目标文件,注意path从当前目录起始
git diff COMMIT COMMIT path/to/target  

# 版本信息
git show COMMIT 

protobuf协议

游戏中的数据通讯协议主要是Protobuf+socket,只有登录时拿到ID和session或token用到了http协议。对于数据响应要求高、低延迟甚至实时的应用程序,像游戏、直播、即时聊天,一般都会用到protobuf作为数据结构化和序列化的协议。

定义

Protobuf全称Protocol Buffer,是google内部广泛使用的结构化数据存储、数据序列化的协议。下面是google官方给出的定义: Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据序列化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。

优势

首先从定义上,可以看到一个描述protobuf的关键字:方便高效。

  • proobuf的语法比xml简洁方便

拿常见的数据序列化协议Json,xml与protobuf做对比:

.proto
package lm; 
message helloworld 
{ 
   required int32     id = 1;  // ID 
   required string    str = 2;  // str 
}

.xml
<?xml version="1.0" encoding="UTF-8"?>
<helloword>
  <id>1</id>
  <str>helloworld</str>
</note>
  • protobuf是二进制协议,比同为文本协议的json和xml的读写操作都要高效,快捷。 文本协议要读进内存,会被解析成二进制,而pb属于二进制协议,所以相对文本协议解析速度更快。

官方针对protobuf的性能将其更各种数据协议做了测试比较,下图是通过各个协议对一个对象操作的时间--Total time,包括创建对象、将对象序列化为内存中的字节序列,然后再反序列化的过程。

image

protobuf性能测试报告:code.google.com/archive/p/t…

  • protobuf协议更小

各协议的字节码大小对比:

image

  • protobuf与平台无关,与语言无关,所以兼容性更好

java中使用json和xml数据结构,使用使用相应的包支持的,jackson(java的标准json库)和javolution xmlformat(javolution库中格式化xml的API)。 而protobuf可以通过编译器将描述数据结构的.proto文件编译成各种目标语言,github仓库上标有目标语言有:c++、java、c#、JavaScript、Ruby、Go、PHP、Dart、Objective-C。

github.com/protocolbuf…

make构建

make是一个常用的构建工具,多用于C语言项目,但在一些大型的项目中使用频率也比较高。

假如一个工程里有个makefile文件,往往都需要用到make命令来构建。

详细介绍:

www.ruanyifeng.com/blog/2015/0…

如何用make来构建node.js项目

www.ruanyifeng.com/blog/2015/0…

windows下使用make命令安装教程

下载MinGW:sourceforge.net/projects/mi…

下载后假如没在bin下找make.exe,可以到MinGW instanllation manager中找到下载MinGW-make.exe,勾选包然后到左上角点击apply change下载(记得把MinGW-make改名成make)。最好把basic setup都下了。

最后记得手动添加环境变量:path/to/MinGW/bin,就可以使用了。