自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

转载 算法分析

一般而言,需要考虑的因素有以下四点: 1.待排序的记录数目n的大小; 2.记录本身数据量的大小,也就是记录中除关键字外的其他信息量的大小; 3.关键字的结构及其分布情况; 4.对排序稳定性的要求。   设待排序元素的个数为n1)当n量级为万到十万级:若内存有限,不要求稳定性:快速排序。若内存空间允许,且要求稳定性:归并排序2)当n量级为1000以下,采用直接插入排序3)...

2018-08-30 19:46:18 332

转载 数据库分析与选择

关系型数据库遵循ACID规则事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性: 1、A (Atomicity) 原子性 原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。 比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A...

2018-08-27 16:05:47 598

原创 lua代码检查脚本

RsCov.lua:--[[Sample:-- test/test2/t.lua :function testt() print("hello world") print("bad world")end-- test.lua :require("RsCov")require("test/test2/t")RsCov.start_cov( "test/test...

2018-08-10 16:18:11 2390

转载 C++ vector拷贝使用总结

主要有以下几种方法   vector<int> list; list.push_back(1); list.push_back(2);  一、初始化构造时拷贝vector<int> tem(list);这种拷贝,相当于复制了一份数据,list中的数据不变。 二、assign vector<int&g...

2018-08-09 18:01:30 8758

原创 游戏模块思路设计

  ============================排行榜===========================  实时排行榜就直接游戏里内存实时排序:用于排名的分数区间不大,也就是 0 分到 5000 分。而参与排名的人数众多,数以百万计。对百万用户做插入排序,每个插入即使是 O(N) 的也不可接受。可事实是大量玩家的分数相同,都是并列排名的。所以我们只需要做 5...

2018-08-08 20:26:11 4581

转载 C++成员函数在内存中的存储方式

用类去定义对象时,系统会为每一个对象分配存储空间。如果一个类包括了数据和函数,要分别为数据和函数的代码分配存储空间。按理说,如果用同一个类定义了10个对象,那么就需要分别为10个对象的数据和函数代码分配存储单元,如下图所示。          能否只用一段空间来存放这个共同的函数代码段,在调用各对象的函数时,都去调用这个公用的函数代码。如下图所示。        显然,这样...

2018-08-08 20:22:58 407

转载 Linux 字符串截取

Linux 的字符串截取很有用。有八种方法。假设有变量 var=http://www.aaa.com/123.htm.1 . # 号截取,删除左边字符,保留右边字符。复制代码 代码如下:echo ${var#*//}1其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符,即删除 http:// 结果是 :www.aaa.com/123.htm2 . #...

2018-06-25 11:10:28 802

转载 lua调优

像其他任何编程语言一样,在Lua中,我们也要遵守以下两条优化程序的规则:规则1:不要优化。规则2:仍然不要优化(专家除外)  当用Lua编程时,这两条规则显得尤为重要。Lua以性能著称,而且在脚本语言中也因此而值得赞美。  然而,我们都知道性能是编程的一个关键因素。具有复杂指数时间的问题被称作疑难问题并不是偶然发生。太迟的结果是无用的结果。因此,每个优秀的程序员应该总是在花费资源去优化一段代码的代...

2018-06-08 15:57:53 228

转载 编写高性能的lua代码

使用local在代码运行前,Lua会把源码预编译成一种中间码,类似于Java的虚拟机。这种格式然后会通过C的解释器进行解释,整个过程其实就是通过一个while循环,里面有很多的switch...case语句,一个case对应一条指令来解析。自Lua 5.0之后,Lua采用了一种类似于寄存器的虚拟机模式。Lua用栈来储存其寄存器。每一个活动的函数,Lua都会其分配一个栈,这个栈用来储存函数里的活动记...

2018-06-01 10:05:13 247

转载 Linux下查找BOM文件

找包含BOM头的文件,命令如下:grep -r -I -l $'^\xEF\xBB\xBF' ./这条命令会查找当前目录及子目录下所有包含BOM头的文件,并把文件名在屏幕上输出。但是,删除BOM头,网上找到的命令大多不能用,比较常见的命令是:grep -r -I -l $'^\xEF\xBB\xBF' /path | xargs sed -i 's/^\xEF\xBB\xBF//;q'但这条命令会...

2018-05-18 13:43:42 614

原创 lua中的引用与拷贝

Lua中的基本类型是值传递,只有表是引用传递-----------------例子一x = 1 y = x y = 10 print(x) --输出:1 -----------------例子二function change(x) x = 10 end y = 1 change(y) print(y) --输出:1 ----------...

2018-04-08 18:34:15 4001 1

原创 异步实现方式二:消息队列

消息队列的实现依赖于多线程或者多进程创建一条独立线程。可以把需要异步处理的逻辑作为一条消息发送到独立线程,发送完立即返回继续运行。独立线程取消息队列中的消息进行逻辑处理...

2018-03-23 17:08:32 1699

转载 异步实现方式一:异步回调

异步回调的实现依赖于多线程或者多进程软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户...

2018-03-21 18:07:30 15637 1

转载 typedef的几种用法

几种用法:1.常规变量类型定义例如:typedef unsigned char uchar 描述:uchar等价于unsigned char类型定义 uchar c声明等于unsigned char c声明2.数组类型定义 例如: typedef int array[2]; 描述: array等价于 int [2]定义; array a声明等价于int a[2]声明扩展: typedef int ...

2018-03-21 16:19:13 963

原创 并发和并行,多线程和多进程,单核和多核,同步和异步的关系

并发:拥有处理多个任务的能力,不一定要同时,不同代码块交替执行的性能,可以串行处理也可以并行处理并行:同时处理多个任务的能力,不同代码块同时执行的性能串行:指多个任务时,各个任务按顺序执行,完成一个之后才能执行下一个同步:所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由*调用者*主动等待这个*调用*的结果。异步:异步则相...

2018-03-21 12:24:11 2021

原创 异步实现方式三:协程

协程的实现依赖于时间片的分隔 协程就是用户态的线程”,Lua协程是非抢占式的多线程,必须手动在不同的协程间切换,且同一时刻只能有一个协程在运行,相当于单线程的能力。线程确实比协程的性能更好,因为线程能利用多核达到真正的并行计算, 要理解是什么是“用户态的线程”,必然就要先理解什么是“内核态的线程”。 内核态的线程是由操作系统来进行调度的,在切换线程上下文时,要先保存上一个线程的上下...

2018-03-21 09:32:27 366

原创 lua中的错误处理

Lua中处理错误,可以使用函数pcall(protected call)来包装需要执行的代码。pcall接收一个函数和要传递个后者的参数,并执行,执行结果:有错误、无错误;返回值true或者或false, errorinfoif pcall(function_name, ….) then-- 没有错误else-- 一些错误end--assert(io.open("nofile"),"thi...

2018-03-20 15:47:19 2033

转载 游戏开发流程

游戏服务器开发技术小结1 概述本文从开发者的视角,浅析游戏服务器开发涉及到的几个技术层面,并说明这几个层面我们可以选择的解决方案。一般地,会把游戏服务器的架构划分如下三层:网络接入层、游戏逻辑层、数据存储层,这样划分的主要目的是:将底层通信与业务逻辑处理解耦合;将业务逻辑处理与数据存储解耦合;有利于运营部署与扩展;游戏服务器开发框架整体视图,如下所示:2 网络接入层网络接入层主要任务是解决来自客户...

2018-03-19 16:20:18 3747

原创 lua中模块的加载

lua文件的本质是一个函数一:require 机制在加载一个.lua文件时,require会先在package.loaded中查找此模块是否存在,如果存在,直接返回模块。如果不存在,则加载模块文件。require的特点是仅加载一次,并且对于模块会按照特定的搜索规则去查找文件并加载。本质用loadfile和loadlib加加载。二:loadfile 机制loadfile:针对lua文件,加载,编译代...

2018-03-16 10:34:01 1698

原创 lua的table默认值赋值

--[[ table 的弱引用,给table赋默认值--]]--------------------------------------------------------------------方法一--------------------------------------------------------------------定义一个弱引用table作为容器,利用该容器去给其他...

2018-03-15 16:49:17 2202

转载 lua中的弱引用

Lua是具备自动内存管理的我们只管创建对象,无须删除对象(当然,对于不要的对象你需要设置一下nil值),Lua会自动删除那些被认为是垃圾的对象。问题就出现在,什么对象才是垃圾对象,有些时候,我们很清楚某个对象是垃圾,但是,Lua却无法发现。例子:t = {}; -- 使用一个table作为t的key值key1 = {name = "key1"};t[key1] = 1;key1 = ...

2018-03-15 15:04:06 2451 1

原创 指针类

template <class T>class CRefObject{protected : T* m_pRefObj;public : CRefObject() : m_pRefObj(NULL) { } CRefObject(const CRefObject& Right) { m_pRefObj = Right.m_pRefObj; if (...

2018-02-26 20:27:39 237

原创 对象池

#ifndef OBJECT_POOL_H_#define OBJECT_POOL_H_#include "Thread_Mutex.h"#include "Mutex_Guard.h"#include "Lib_Log.h"#include <list>#include <string>#include <algorithm>#includ..

2018-02-10 16:19:10 142

原创 线程锁

互斥锁(有可能造成死锁):class Thread_Mutex {public: Thread_Mutex(void) { ::pthread_mutex_init(&lock_, NULL);//动态初始化,null使用默认的attr } virtual ~Thread_Mutex(void) { ::pthread_mutex_destroy(&lock_);...

2018-02-09 15:26:18 143

转载 malloc/free与new/delete的区别

相同点:都可用于申请动态内存和释放内存不同点:(1)操作对象有所不同。malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内

2018-02-05 14:41:11 118

原创 一些知识点

 1、  简述你对模板方法的设计模式的了解 模式定义:         模板方法模式在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类能够在不改变算法结构的情况下,又一次定义算法中的某些步骤。        模板就是一个方法。更详细的说。这种方法将算法定义成一组步骤。当中的不论什么步骤都能够是抽象的,由子类实现。这能够确保算法的结果保持不变,同...

2018-02-01 13:03:33 217

原创 enum和bitset混合运用场景

一般使用#define和const创建符号常量,当符号常量多的时候使用enum运用场景为:任务类有多个状态,需要用一个变量去存储该状态,为了更直观和规范化代码,多个状态用bitset来存储,用enum来作为显示。#include#includeusing namespace std;namespace GameEnum{ enum Weekend { MonDay=1,

2017-11-14 18:31:56 330

原创 ACE库使用与环境搭建

一:下载解压ACE库包#tar -xzvf ACE-6.3.3.tar.bz      解压得到ACE_wrappers二:设置系统环境变量#vi /etc/profile 追加:export ACE_ROOT=/home/guojing/ACE_wrappers  export LD_LIBRARY_PATH=$ACE_ROOT/lib:$LD_LIBRARY_PAT

2017-09-27 19:46:27 1532

原创 智能指针

auto_ptrauto_ptr在构造时获取对某个对象的所有权(ownership),在析构时释放该对象。1) 因为auto_ptr析构的时候肯定会删除他所拥有的那个对象,所以我们就要注意了,一个萝卜一个坑,两个auto_ptr不能同时拥有同一个对象。像这样:123int*p=new int(0);auto

2017-09-26 11:35:48 182

原创 宏定义中的一些问题

C99中规定宏可以像函数一样带有可变参数,比如#define LOG(format, ...) fprintf(stdout, format, __VA_ARGS__)其中,...表示参数可变,__VA_ARGS__在预处理中为实际的参数集所替换 GCC中同时支持如下的形式#define LOG(format, args...) fprintf(stdout, fo

2017-09-15 17:16:25 424

原创 变参

C语言变参:VA_LIST在使用C语言的变参时,需要将变参放在最后一个参数的位置,并且变参前面至少要有一个普通参数① 函数定义一个va_list的变量,这个变量是指向参数的指针。②调用va_start(va_list ap,char *fmt)操作,将定义的va_list变量指向变参列表,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定参数指明参数的类型。%d%s%c③调

2017-09-15 11:18:05 371

原创 Jsoncpp数据交互文本格式

Json::Value  可以表示所有类型Json::Reader 将json文件流或字符串解析到Json::Value,主要调用函数parse()Json::Writer 将Json::Value转化为字符串流若json文件是utf8格式,因为utf8用BOM表明编码格式,又叫utf-8的签名,意思是告诉编译器当前文件采用何种编码格式,但是BOM会产生输出,若接受者收

2017-09-14 14:30:45 860

原创 顺序容器

顺序容器的插入元素:push_back(value) 在容器尾部添加元素value    array不支持push_front(value) 在容器头部添加元素value      vector,string不支持insert(iterator,value) 在容器迭代器iterator指定位置前面添加元素value,返回指向新添加元素的迭代器,将元素插入到vector,deque,s...

2017-08-26 19:45:02 277

原创 c++容器迭代器问题

一:迭代器失效问题对于节点式容器(map,list,forward_list,set)元素的删除,插入操作会导致指向该元素的迭代器,指针,引用失效,但是其他元素迭代器,指针,引用不受影响对于顺序式容器(vector,string)元素的插入肯定会导致指向该元素以及后面的元素迭代器,指针,引用失效,有可能会导致所有迭代器,指针,引用失效。取决于vector插入时预留的额外存储空间是否

2017-08-26 17:29:20 328

原创 时间队列容器,包含类用法

2017-08-20 20:39:34 416

原创 函数的形参与返回

函数中形参与实参的传递实质:函数在调用时,会把实参变量的值复制给形参变量,即实参与形参是两个不同的变量。形参的变量在函数返回后释放内存①改变形参指针的值:实参和形参的值都为内存地址,指向同一个内存空间,当形参改变后,即形参指向的内存地址改变后,并不会影响到实参。②改变形参指针指向的内存:实参和形参的值都为内存地址,指向同一个内存空间,当形参直接改

2017-08-16 17:14:49 1942

原创 MongoDB的c++用法

连接Mongo数据库try{ mongo::DBClientConnection c; c.connect("localhost");}catch(const mongo::DBException &e){ std::cout<<e.what()<<endl;}bool connect(string server,&string errmsg)返回值:成功/失败s

2017-08-03 15:08:18 1307

原创 Mongodb数据库常用

MongoDB的默认数据库为“db”,该数据库存储在data目录中“show dbs”显示所有数据库列表“db”显示当前数据库对象或者集合“use dbname”连接一个指定的数据库文档即行row,是一组的键值对(BSON) mongod 是数据库的服务端mongo是数据库的客户端连接数据库:①首先启动客户端./mongo

2017-08-03 10:26:26 337

原创 Linux读取文件到jsoncpp

Json::Value conf;int file=::open("pathname",O_RDONLY);if(file<0) return -1;struct stat statbuf;//文件状态结构体if(::fstat(file,&statbuf)<0) //获取文件状态信息{ return -1;}void *src=0;if((src=::mmap(0,statb

2017-07-28 10:53:14 501

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除