- 博客(129)
- 收藏
- 关注

原创 红黑树代码实现
请对照红黑树原剖析一起看,如要问题,请各位大神不吝赐教//网页测试工具 https://www.cs.usfca.edu/~galles/visualization/RedBlack.html#include <assert.h>#include <iostream>using namespace std;#define RED 1#define...
2020-01-07 22:13:59
249

原创 红黑树原理剖析
写到前面的话: 作者从毕业开始一直从事游戏开发,提供大量游戏实战模块代码及案例供大家学习与交流,希望以下知识可以带来一些帮助,如有任何疑问,请加群641792143交流与学习 或关注微信公众号 程序员干货区 闻道有先后,术业有专攻,希望大家不吝赐教首先介绍一下二叉树的几点性质:&nbs...
2019-12-26 23:09:26
401
1

原创 AVL树原理剖析
写到前面的话: 作者从毕业开始一直从事游戏开发,提供大量游戏实战模块代码及案例供大家学习与交流,希望以下知识可以带来一些帮助,如有任何疑问,请加群641792143交流与学习 闻道有先后,术业有专攻,希望大家不吝赐教首先: 问:什么树才...
2019-12-16 23:20:37
346

原创 暴雪hash_table实现
写到前面的话:作者从毕业开始一直从事游戏开发,提供大量游戏实战模块代码及案例供大家学习与交流,希望以下知识可以带来一些帮助,如有任何疑问,请加群641792143交流与学习/************************************************************************ 哈希表哈希...
2019-12-12 23:28:27
200
原创 skynet 配置中lua服务创建流程
上述代码可知,向 launcher服务发送一个消息,消息类型为 PTYPE_LUA,然后会被 launcher服务接收到,然后调用到 launcher.lua 中的 command.LAUNCH 接口,然后以同时的 skynet.launch(service, param)接口 创建 main.lua服务。由上述可知,创建了一个 actor,同样依靠 loader.lua脚本,参数为 launcher,调用 launcher.lua脚本。此时可以知道,会调用到 bootstrap.lua中。
2024-01-02 17:33:08
1300
原创 抢红包原理分析
问题描述:设计抢红包算法,使得分配钱的概率随机,互不影响。红包金额为100,红包数为10个,最小金额1元,最大50元,不存在小数。
2023-12-27 10:20:04
635
原创 libevent configure: error: OpenSSL could not be found. You should add the directory解决办法
libevent configure: error: OpenSSL could not be found
2022-03-04 14:18:45
517
原创 C语言实现堆结构及堆排序
//要想实现堆排序 首先需要实现一个大根(小根)堆#include <stdio.h>#include <stdlib.h>#include <vector>using namespace std;static vector<int> vec;static void myswap(int i,int j){ int temp = vec[i]; vec[i] = vec[j]; vec[j] = temp;}//将堆结构想象成
2021-06-13 16:49:47
209
原创 C语言实现快速排序
#include<stdlib.h>#include<iostream>#include<vector>#include <cstdlib>#include <ctime>using namespace std;static void myswap(vector<int>&,int,int);static void quickSort1(vector<int>& vec);static v
2021-06-12 17:36:59
198
原创 c语言实现归并排序递归版本与非递归版本
//归并排序//merge的过程可解决以下题目 //leetcode题 88题合并两个有序数组、//剑指offer 51题数组中的逆序对//小和问题#include<stdio.h>#include<stdlib.h>#include<iostream>#include<vector>#include <cstdlib>#include <ctime>using namespace std;static v
2021-06-07 13:47:12
163
原创 lua 自实现pairs
文章目录1.实现一个简单的pairs2.实现对象的pairs1.实现一个简单的pairslocal tbl = {}function GenerateData() --构造一个哈希 table for i = 1,10 do local value = math_random(1,100000) tbl[value] = value endend--自己实现的pairsfunction selfPairs(tbl,key) --
2021-06-04 13:45:31
1592
原创 KMP算法原理及实现分析
KMP算法分析一、先来看看传统的暴力解法1.1 BF算法设计思想1、主串和模式串逐个字符进行比较2、当出现**「字符串不相同」时,也就是「失配」**时,主串的比较位置重置为起始位置的下一个字符位置,模式串的比较位置重置为起始位置1.2 BF算法的设计缺陷及解决方案在BF算法中,每次失配都需要回溯指向上次比较起始字符的下一个字符。通过观察发现:在回溯的时候,已匹配似乎**「有一部分」没必要继续比较了,这样可以降低算法的「时间复杂度」**2.1 KMP算法设计思路在匹配过程中出现字符比较不
2021-06-04 09:51:06
359
原创 jenkins 简单配置与使用
Jenkins1.简介:Jenkins是一款开源的持续集成工具。官网中文官网2.Jenkins安装1.下载 .war包安装参考网站下载jenkins.warwget https://mirrors.huaweicloud.com/jenkins/war/latest/jenkins.war2. .rpm包安装参考网址修改Jenkins配置vim /etc/syscofig/jenkins修改内容如下:JENKINS_USER=“root”JENKINS_POR
2020-11-29 15:22:01
694
1
原创 设计一个有getMin功能的栈
/** 实现一个特殊的栈,在实现栈的基础功能的基础上,再实现返回栈中最小元素的操作** 1.pop push getMin 操作的时间复杂度都是O(1)* 2.设计的栈类型可以使用现成的栈结构 */public class Code05_GetMinStack { public static class MyStack1{ private Stack<Integer> stackData; private Stack<In
2020-09-06 08:34:17
167
原创 异或练习
//一个数组中有一个数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这个数 // 要知道 N ^ N = 0 所以将全部的数异或起来 就是那个出现奇数次的数 public static void printOddTimesNum1(int []arr){ int eor = 0; for(int i = 0;i<arr.length;i++){ eor ^= arr[i]; } System
2020-09-05 19:45:12
163
原创 异或原理分析
/*1.基础知识: 6和7 异或操作后值为1 分析: 二进制为: 6 -> 110 7 -> 111 结果: 001 异或的原理就是 相同的位 值都为1 那么异或的结果就为0 不同的时候就是 或操作 记住下面两句,交换两个数的时候会用到 N ^ 0 = N N ^ N = 0 那么总结
2020-09-05 17:48:56
1120
原创 lua unpack有点小坑
function c(a,b,c,d,e) print(a,b,c,d,e) endfunction a() local temp = {nil,1,nil,3,nil} local temp1 = {nil,1,2,3,nil} c(unpack(temp))enda()https://segmentfault.com/a/1190000009404985
2020-08-27 07:46:30
405
原创 java 多线程volatile的作用
/** * * volatile 关键字,使一个变量在多个线程间可见 * A B线程都用到一个变量,java默认是A线程中保留一份copy,这样如果B线程修改了该变量,则A线程未必知道 * * 使用volatile关键字,会让所有线程都会读到变量的修改值 * * 在下面的代码中,running是存在于堆内存的t对象中 * * 当线程t1开始运行的时候,会把running值从内存中读到t1线程的工作区,在运行过程中直接使用这个copy,并不会每次 * 都去读取堆内存,这样当线程修
2020-08-19 08:30:53
186
原创 java sleep、yield、join
public class T03_Sleep_Yield_Join { public static void main(String[] args) {// testSleep(); testYield();// testJoin(); } /** Sleep 意思就是睡眠,当前线程暂停一段时间让给别的线程去运行,Sleep是怎么复活的? 由你的睡眠时间决定,等睡眠到规定时间自动复活 */ s
2020-08-18 20:50:39
137
原创 Java创建线程的几种方式
/** * * 启动线程的三种方式: * 1. new Thread().start() * 2. new Thread(Runnable).start() * 3. Executors.newCacheThreadPool()或者FutureTask.Callable (原理同1,2) * 有人说四种,没关系 后两种都是基于线程池实现,而后两种又是基于前两种实现 */public class T02_HowToCreat
2020-08-18 20:48:06
124
原创 java设计模式之建造模式
public abstract class CarModel { //这个参数是各个基本方法执行的顺序 private ArrayList<String> sequence = new ArrayList<String>(); /* * 模型是启动开始跑了 */ protected abstract void start(); //能发动,那还要能停下来,那才是真本事 protected abstract voi.
2020-08-18 18:16:20
129
原创 java设计模式之模板设计模式
类图如下:public abstract class HummerModel { /* * 首先,这个模型要能够被发动起来,别管是手摇发动,还是电力发动,反正 * 是要能够发动起来,那这个实现要在实现类里了 */ protected abstract void start(); //能发动,那还要能停下来,那才是真本事 protected abstract void stop(); //喇叭会出声音,是滴滴叫,还是哔哔叫
2020-08-18 17:04:39
143
原创 java设计模式之适配器模式
直接上类图,大概就明白什么原理public interface IUserInfo { //获得用户姓名 public String getUserName(); //获得家庭地址 public String getHomeAddress(); //手机号码,这个太重要,手机泛滥呀 public String getMobileNumber(); //办公电话,一般式座机 public String getOfficeTelNumbe
2020-08-18 16:39:08
130
原创 java设计模式之门面模式
大家都是高智商的人,都写过纸质的信件吧,比如给女朋友写情书什么的,写信的过程大家都还记得吧,先写信的内容,然后写信封,然后把信放到信封中,封好,投递到信箱中进行邮递,这个过程还是比较简单的,虽然简单,这四个步骤都是要跑的呀,信多了还是麻烦,比如到了情人节,为了大海捞针,给十个女孩子发情书,都要这样跑一遍,你不要累死,更别说你要发个广告信啥的,一下子发 1 千万封邮件,那不就完蛋了?那怎么办呢?还好,现在邮局开发了一个新业务,你只要把信件的必要信息高速我,我给你发,我来做这四个过程,你就不要管了,只
2020-08-18 15:37:39
213
原创 java设计模式之工厂模式
女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事,可不是“造人”的工作,这个词被现代人滥用了。这个故事是说,女娲在补了天后,下到凡间一看,哇塞,风景太优美了,天空是湛蓝的,水是清澈的,空气是清新的,太美丽了,然后就待时间长了就有点寂寞了,没有动物,这些看的到都是静态的东西呀,怎么办?别忘了是神仙呀,没有办不到的事情,于是女娲就架起了八卦炉(技术术语:建立工厂)开始创建人,具体过程是这样的:先是泥巴捏,然后放八卦炉里烤,再扔到地上成长,但是意外总是会产生的:第一次烤泥人,兹兹兹兹~~
2020-08-18 12:27:45
138
原创 java设计模式之代理模式
什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀。比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时这样的:先定义一种类型的女人:public interface KindWomen { //这种类型的女人能做什么事情呢? public void makeEyesWithMan(); //抛媚眼
2020-08-18 12:02:09
143
原创 java设计模式之单例模式
单例的设计模式有很多种,有支持多线程、不支持的等等,具体看demo/** * 饿汉式 * 类加载到内存后,被实例化一个单例,jvm保证线程安全 * 推荐使用 * 唯一缺点,不管用到与否,类加载时就完成实例化 */public class Mgr01 { private static final Mgr01 INSTANCE = new Mgr01(); private Mgr01(){} public static Mgr01 getInstance(){retur
2020-08-18 11:48:45
88
原创 Java设计模式之策略模式
直接上代码,不会讲一些理论性的东西,下面的策略主要为了讲解一些项目中经常遇到的 if…else if…else if …的判断来源于一个故事刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看看这个场景是什么样子的。先说这个场景中的要素:三个妙计,一个锦囊,一个赵云,妙计是小亮同志给的,妙计是放置在锦囊里,俗称就是锦囊妙计嘛,那赵云就是一个干活的人,从锦囊中取出妙计,执行,然后获胜,用
2020-08-18 11:41:56
165
1
原创 C/C++ 中遍历 Lua table 完整版
https://blog.youkuaiyun.com/naonao8355/article/details/11192307
2020-07-23 15:34:28
452
原创 c语言将int型数据写到char数组 或将char数组数据写到int
int main(){ unsigned int a = 65535; char* b = (char*)&a; printf("%d\n", (unsigned char)(*(b))); printf("%d\n", (unsigned char)(*(b + 1))); printf("%d\n", (unsigned char)(*(b + 2))); printf("%d\n", (unsigned char)*(b + 3)); unsigned char buff[4
2020-07-13 23:22:46
4670
1
原创 lua 简单判断系统的方法
local delimeter = package.config:sub(1,1)print(delimeter)windowslinux
2020-07-03 10:27:37
1387
1
原创 c++ 获取本地ip和外网ip
// ctest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include<stdio.h>#include <urlmon.h>#define MAX_SIZE 1024#pragma comment(lib, "urlmon.lib")#pragma comment(lib,"ws2_32.lib")#include<windows.h>#include <
2020-06-29 00:52:02
1912
原创 cmsgpack 编译相关
如果出现则需要安装一些依赖库yum -y install lua lua-devel就可以了,如果还不行,再试试下面的命令:yum install ncurses-devel gcc gcc-c++ make测试案例local cmsgpack = require("cmsgpack")local a = {}for i= -1,10 do a[i] = iendlocal pkt = cmsgpack.pack(a)print(type(pkt),string.len(
2020-05-27 10:06:34
338
原创 Lua5.1 非userdata __gc的使用方法
local function setmt__gc(t, mt) local prox = newproxy(true) getmetatable(prox).__gc = function() mt.__gc(t) end t[prox] = true return setmetatable(t, mt)endfunction ooo( o ) print(o[1])endmt = {__gc = ooo}list = {}for i = 1,3 do
2020-05-25 00:34:37
388
原创 skynet 创建lua服务流程
本文将介绍 skynet 怎么去创建一个lua 服务服务 ,以一个简单的test服务为例首先会调用 skynet.newservice(“test”)接口文件: skynet.luaname:testarg:…function skynet.newservice(name, ...) return skynet.call(".launcher", "lua" , "LAUNCH", "snlua", name, ...)end此接口将会给 launcher 服务发送一个lua消息 命令是
2020-05-16 00:30:35
535
原创 C++静态库的编译及使用
该篇博客将详细介绍静态库的编译以及使用流程首先从制作静态库开始创建一个类 person加一个打印输出生成成功会发现该目录下生成了一个 makeStaticLib.lib 文件也可以指定输出路径 这里输出到当前lib目录下 上一层需要…\lib发现生成成功接下来就是使用该静态链接库第一种方式:编写测试代码然后将头文件和静态库加进来现创建一个静态库lib目录 然后将 .lib文件加进去 如图添加库目录附加依赖库这样就可以了第二种方式:通过代码直接引用#inclu
2020-05-09 00:18:41
1664
原创 skynet skynet.send()、skynet.call()、skynet.ret()分析
skynet.send(addr,type,...) //addr 可以是服务句柄也可以是别名 type消息类型 ... 参数 非阻塞 不需要应答skynet.call(addr,type,...) //阻塞 需要应答skynet.ret(msg,sz) //回应消息首先上示例代码receivemsg.lua --接收消息端local skynet = require("...
2020-04-23 00:01:33
4329
原创 skynet skynet.error()的一个小坑
今天调试代码的时候,遇到了一个小坑,打印的输出信息一致不对,困扰了一天各种想不明白,后来还是通过另一个方式算是解决了这个问题,也算是skynet.errro()的一个小坑吧。对于我这种新手skynet学习者来说。下面直接上代码首先我测试的是 skynet.pack()、skynet.unpack、skynet.trash()这三个函数。我在C层分别加了打印。测试调用情况,以及内存释放问题分别加...
2020-04-20 23:17:39
964
原创 skynet skynet.send() 发送不需要应答的消息
话不多说,上测试代码--receivemsg.lua 接收消息端local skynet = require("skynet")require("skynet.manager")function dosomething(session,address,...) skynet.error("recv from:",skynet.address(address),"session:",...
2020-04-19 22:52:54
4309
原创 skynet skynet.wait()以及skynet.wakeup()分析
话不多说 先上测试代码local skynet = require("skynet")function task1( ) skynet.error("start wait") --1 因为1先fork skynet.wait() --挂起 skynet.error("end wait") --4endfunction task2( co ) skynet.error("s...
2020-04-19 09:57:24
1276
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人