5 jiange_zh

尚未进行身份认证

我要认证

linux 网络编程 C++ 算法 数据结构

等级
TA的排名 3k+

【后台开发拾遗】通信协议演进与JCE协议详解

一、通信协议概述通信协议是两个节点之间为了协同工作、实现信息交换,而协商的规则和约定,例如规定字节序,各个字段类型,使用什么压缩算法或加密算法等。1、原始数据假设A和B通信,获取或设置用户基本资料,一般开发人员第一步就是定义一个协议结构:struct userbase{unsigned short cmd; //1-get, 2-setunsigned char gender; //...

2019-01-20 15:01:38

hashmap C++实现分析

一、简介Map 是 Key-Value 对映射的抽象接口,该映射不包括重复的键,即一个键对应一个值。在HashMap中,其会根据hash算法来计算key-value的存储位置并进行快速存取。本文介绍的C++ hashmap,是一个缓存用的hash_map,实现模仿自Java的HashMap,做了一些改造和精简。特点:无读锁, 低写锁, 不删除只添加/更新, 桶不扩容, 按经验值初始...

2018-08-12 17:24:50

语法糖:萃取lambda表达式

背景现在手头主负责的服务代码,基本上都用C++11来开发了,异步编程使用的是TAF的future/promise。future的then函数,接受的是一个Callback对象,该对象通过promise::bind来生成。Callback和bind是参考chromium的base::Callback,base::Bind实现的,该版本并不支持C++11,所以bind() 不接受 lamb...

2018-06-22 11:39:39

C++11常用新特性快速一览

最近工作中,遇到一些问题,使用C++11实现起来会更加方便,而线上的生产环境还不支持C++11,于是决定新年开工后,在组内把C++11推广开来,整理以下文档,方便自己查阅,也方便同事快速上手。(对于异步编程十分实用的Future/Promise以及智能指针等,将不做整理介绍,组内使用的框架已经支持并广泛使用了,用的是自己公司参考boost实现的版本)1. nullptrnullptr ...

2018-02-23 19:28:13

找出ID字段中,存在A表,但是不存在B表的数据

A、B两表,找出ID字段中,存在A表,但是不存在B表的数据。方法一   使用 not in ,容易理解,效率低select distinct A.ID from A where A.ID not in (select ID from B)方法二   使用 left join…on… , “B.ID isnull” 表示左连接之后在B.ID 字段为 null的记录sel...

2018-02-10 20:14:17

游戏后台状态同步与帧同步

最近开始学习一下游戏后台的一些知识,一直很好奇多个玩家之间的数据是如何同步的,查了一下,目前使用的比较多的是状态同步和帧同步。状态同步同步的是游戏中的各种状态。一般的流程是客户端上传操作到服务器,服务器收到后计算游戏行为的结果,即技能逻辑,战斗计算都由服务器运算,然后以广播的方式下发游戏中各种状态,客户端收到状态后,更新自己本地的动作状态、Buff状态,位置等就可以了,但是为了给玩家好的体验,减少同

2017-11-11 23:19:12

【Tars】腾讯微服务框架Tars介绍

Tars是【基于名字服务】【使用Tars协议】的高性能【RPC】开发框架,同时配套一体化的【服务治理平台】,帮助个人或者企业快速的以微服务的方式构建自己稳定可靠的分布式应用。Tars在腾讯内部名为TAF,内部从08年开始使用,到现在将近10个年头了,今年终于开源

2017-11-11 21:38:52

【后台开发拾遗】C/S架构中接入层的安全体系

前阵子,同事对某App与后台交互的数据进行了抓包分析,由于该App未对数据进行安全加密,因此通过抓包分析可直接获取其后台请求的接口,通过构造Http请求,爬取其App内的数据。平日的工作里,接触的比较多的都是业务逻辑,很少关注接入层这一块,经过上面这件事,激起了我对接入层的一些兴趣,要是哪一天自己做一个App,如何能做到安全接入呢?基础知识1. 重放攻击重放攻击(Replay Attacks)又称重

2017-10-22 21:34:06

Mysql问题一则:Commands out of sync

最近在使用C++访问mysql(使用mysql提供的CAPI)时,偶尔会出现一个错误:Commandsoutofsync;youcan’trunthiscommandnowMysql文档中说明错误:CommandsoutofsyncIfyouget“Commandsoutofsync;youcan’trunthiscommandnow”iny

2017-10-22 15:35:43

C++使用sort排序导致的coredump(Strict Weak Ordering)

当我们需要自定义排序规则时,需要实现一个比较函数,该函数类似如下:bool cmp(int a,int b){ return a>b;}当cmp返回true时,a将会排在b前面,因此上面的函数将从大到小排序。 换句话说,cmp函数重新定义了“小”的概念(当a>b时,a“小于”b),整个序列将按照这个“小”的规则从“小”到“大”排序。前几天同事遇到一个问题:对一组数据从小到大排序,对于值相等的

2017-10-15 14:57:40

【后台开发拾遗】异步代码同步化

在当今的编程世界中,异步编程已经成为了一种习惯。传统的同步阻塞编程,虽然处理流程非常清晰,但是程序常常处于阻塞等待状态,CPU资源利用率低。而早期的异步编程,通过callback的方式进行回调处理,当回调嵌套开始多起来的时候,程序代码可读性变得非常差。 对于C++,协程和Future/Promise的出现,使得我们既可以实现异步编程,又可以将代码写得十分优美,看起来跟同步代码一般清晰。本文再次回顾

2017-10-05 19:35:17

Linux常用文本处理工具总结备忘(grep,awk,sed,cut...)

1. grepgrep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。日常用法:$ grep [-acinv] [--color=auto] '搜寻字符串' filename选项与参数:-a :将 binary

2017-10-04 10:23:03

shell脚本进行数据库查询(分库分表)

背景: 前阵子遇到一个问题,需要从Mysql数据库中查询一些数据,这些数据分布在多个数据库和表中,也就是分库分表。按照某种规则,我们把数据存储在100个表中(10个数据库,每个数据库10个表)。 库名为:db_app_info_$i,其中$i取值为整数0~9; 表名为:t_app_info_$j,其中$j取值为整数0~9。为了完成多表多库查询,我们需要通过shell脚本,遍历每个表进行查询,然

2017-10-03 11:25:37

C++中两个类中互相引用

有时候,我们会有两个类需要互相引用的场景,由于两个类的定义是有顺序的,因此两个类相互引用,不管哪个类在前面,都会出现有一个类未定义的情况。这时可以通过类的前置声明来提前告诉编译器,所要引用的是个类,但由于此时后面的那个类还没有定义,因此无法给对象分配确定的内存空间,故只能使用类指针而不能是类实体。// A.h#include "B.h"class A{public: A(B* pB)

2017-10-02 15:18:51

非root用户安装python第三方模块

非root用户在安装python模块时,会报“Permission denied”的错误,这是因为python模块默认的安装路径是/usr/local/lib/python2.x/dist-packages/,这是系统路径,需要root权限。(其中2.x表示你的python版本,比如2.6)用户可以设置自己的site-packages目录,该路径是~/.local/lib/python2.x/sit

2017-09-17 21:36:06

【后台开发拾遗】数据访问、缓存与更新

一个App或者网站,其数据内容是需要不断地更新的,为方便日常运营,我们建立了一个内部使用的运营管理系统。通过运营管理系统,可以配置一系列的运营数据,并写入到DB中。而后台服务器则读取这些数据,做一系列处理之后传输给客户端做展示。由于后台服务端对数据的读取是十分频繁的,因此每次都从数据库读取是不切实际的,因此需要将数据缓存在本地,并定时更新缓存。本文将介绍一种数据缓存、更新的方案,以供学习、参考。1.

2017-09-13 22:54:07

【后台开发拾遗】总帖

正式工作已经2个多月了,工作日忙于写代码,晚上/周末回到家不是打王者“上分”就是追剧。王者荣耀上了王者了,90多集的剧也看完了,接下来还是要干一干正事,好好梳理一下后台开发的一些基础性的知识。后台开发涉及到的知识十分广泛,还需要慢慢地去学习,由浅入深地去了解。为方便读者(包括我自己)查阅,以及敦促自己坚持学习总结,此处开一总帖,存放日后总结的所有相关文章链接。需要总结的内容比较多,我将尝试从最简单,

2017-09-12 23:21:53

入职一个月——告别学生时代

一个月前,又回来原来的岗位开始工作了。 虽然之前在这里实习了大半年,但是现在的身份已经不同。不能再是那个只抱着学习的心态去做事情的实习生了。一个月来,还得慢慢去适应作为一个正式员工。近来有些困惑,刚好导师找我聊了一会,大部分困惑解开,但是还是需要自己去调节,去适应。希望自己接下来能够多注意下面几点:结果导向:跟在学校不一样,学校学习的时候更多的注重过程,因为那只是十分纯粹的学习。而在公司内,作为

2017-08-12 21:22:30

Mysql联表查询、查询近期某段时间内的数据等

最近使用mysql时用到的一些功能,此处做记录方便日后查阅。联表查询1. 引用两个表SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM Persons, OrdersWHERE Persons.Id_P = Orders.Id_P 2. JOINJOIN(INNER JOIN): 两表都满足的组合 LEFT JOIN:

2017-08-12 11:31:37

makefile 入门知识备忘

前言在windows下,编译、链接工作就是一个按钮的事情,IDE帮你把大部分工作都做了。这当然非常方便,但是如果你对背后的工作原理不了解,就经常会出现一些自己无法解决的、莫名其妙的编译、链接错误。在linux下,离开了IDE,要编译一个大型工程,就需要借助makefile了。makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更

2017-05-14 11:29:34

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!