自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

行走

求知

  • 博客(46)
  • 资源 (2)
  • 收藏
  • 关注

原创 08.游戏服服务器——DB服

一、DB服介绍与数据库交互和用户数据缓存服务,使用sqlserver做为存储,用来保存用户的所有相关数据。二、服务器启动流程1、启动准备初始化网络库 监听事件注册2、开始启动创建日志、定时器 用户代理服务启动和监听(监听网关服和数据交互) 创建DB代理服务(用于) 挂接逻辑事件(用户线程读取网络数据) 创建守护中心(与守护中心服连接,用于服务器拉起)3、启动流程图三、DB服与其他服务器交互参考前面四、类图先上图,后续再细谈...

2020-05-30 08:26:11 351

原创 最大矩形

一、前言问题来源LeetCode 85,难度:困难问题链接:https://leetcode-cn.com/problems/maximal-rectangle/二、题目给定一个仅包含0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例:输入:[ ["1","0","1","0","0"], ["1","0","1","1","1"], ["1","1","1","1","1"], ["1","0","0","1","0"]]输..

2020-05-24 11:30:20 661

原创 柱状图中最大的矩形多种解法

一、前言问题来源LeetCode 84,难度:困难问题链接:https://leetcode-cn.com/problems/largest-rectangle-in-histogram/二、题目给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。示例:以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为[2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,...

2020-05-23 20:18:46 3805 2

原创 钢条切割

一、前言问题来源《算法导论》第15章。二、题目给定一段长度为n英寸的钢条和一个价格表p(i=1, 2, .., n),求切割钢条方案,使得销售收益r,最大。注意,如果长度为n英寸的钢条的价格p,足够大,最优解可能就是完全不需要切割。图15-1给出了一个价格表的样例。三、思路3.1:朴素递归算法方法一:朴素递归算法自顶向下切割,第一切割长度第一段为0,1,...,n/2,第二段为n,n-1,...n/2。第一段价值为p(i),继续将第二段进行重复切割。找出所有收益最大值即.

2020-05-22 00:15:31 609

原创 动态规划介绍

一、动态规划动态规划方法通常用来求解最优化问题(optimization problem)。这类问题可以有很多可行解,每个解都有一个值,我们希望寻找具有最优值(最小值或最大值)的解。我们称这样的解为问题的一个最优解(an optimal solution),而不是最优解(the optimal solution),因为可能有多个解都达到最优值。我们通常按如下4个步骤来设计一个动态规划算法:刻画一个最优解的结构特征。 递归地定义最优解的值。 计算最优解的值,通常采用自底向上的方法。 利用计算

2020-05-21 22:44:19 259

原创 监控二叉树详细讲解

一、前言问题来源LeetCode 968,难度:困难问题链接:https://leetcode-cn.com/problems/binary-tree-cameras/二、题目给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。示例 1:输入:[0,0,null,0,0]输出:1解释:如图所示,一台摄像头足以监控所有节点。示例 2:输入:[0,0,n..

2020-05-21 00:37:02 1871

原创 二叉树中的最大路径和

一、前言里面来源LeetCode 124,难度:困难问题链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/二、题目给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例 2:输入: [-10,.

2020-05-19 23:42:15 494

原创 二叉搜索树序列

一、前言里面来源LeetCode,难度:困难问题链接:https://leetcode-cn.com/problems/bst-sequences-lcci/二、题目从左向右遍历一个数组,通过不断将其中的元素插入树中可以逐步地生成一棵二叉搜索树。给定一个由不同节点组成的二叉树,输出所有可能生成此树的数组。示例:给定如下二叉树 2 / \ 1 3返回:[ [2,1,3], [2,3,1]]三、题意分析..

2020-05-19 21:46:10 984

原创 乘积最大子数组

一、前言回顾前文《最大子数组》,求解的是最高点到最低点差值,后经转换为累加和最大的子数组。对这个问题再扩展一下,将加给为乘,连续乘积最大的数组怎样求解呢?《最大子数组》https://blog.csdn.net/nie2314550441/article/details/106036517二、题目给你一个整数数组 nums,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释..

2020-05-19 08:47:25 349

原创 二叉树镜像判断

一、前言《二叉树的镜像》在验证二叉树是互为镜像时,给出了三种方法,本文对这三种方法进行说明二、题目判断两颗二叉树是否互为镜像。三、思路三种解决方法:方法一,将其中一颗二叉树转为镜像,并与另外一棵树进行比较判断各节点值是否相等方法二,互为镜像的两个二叉树,每层数据顺序相反,逐层判断即可,需要注意结点为空的情况。前面文章中《从上往下打印二叉树》给出了获得逐层获得树数据方法。方法三:递归实现——树1左结点和树2右结点判断;树1右结点和树2左结点判断。三种方法特...

2020-05-18 11:47:57 2579

原创 二叉树的镜像

一、前言《剑指Offer》中题27二、题目请完成一个函数,输入一棵二叉树,该函数输出它的镜像。叉树节点的定义如下:三、思路递归实现即可四、扩展给两棵二叉树,判断是否互为镜像二叉树?结合本文不难得出两个解决方法:解决方法一,将其中一颗二叉树转为镜像,并与另外一棵树进行比较判断各节点值是否相等解决方法二,本文《五、编码实现》测试用例中判断两颗树是否为镜像已经给出了解决方案。五、编码实现// MirrorOfBinaryTree.h#p...

2020-05-17 23:15:49 303

原创 树的子结构

一、前言继续树相关的问题二、题目输入两棵二叉树A和B,判断B是不是A的子结构。三、思路递归实现即可四、编码实现之前创建树是通过前序遍历和中序遍历来重建树,这种方法要求不能有相同的值。树的子结构需要考虑有相同的结点值。新增一直构造树的方法,类似组合模式。当前提供了三种构建树方法。// ConstructTree.h#pragma once#include <exception>#include "Common.h"///////////...

2020-05-16 12:54:29 161

原创 二叉树中和为某一值的路径

一、前言继续树相关的问题二、题目输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。三、思路用递归解决,简单直观。需要注意状态恢复。在每次调用完递归之后,怎样恢复到当前结点状态,例如 A 中执完左结点搜索,准备进行右结点搜索,此时需要保证容器(用于记录路径)中记录的结点和左搜索时是一样的。有两种方法:方法一,每次进行赋值即可。理解方便,但是会进行多次赋值操作方法二,使用引用,递..

2020-05-15 23:54:10 331

原创 二叉树的下一个结点

一、前言继续树相关的问题二、题目给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。三、思路中序遍历顺序:左 - 中 - 右1、若该节点有右子节点,则下一个节点为右节点集合中的第一个结点。例如下面实体:e 下一个结点是 i;a 下一个结点是 f;2、若该节点无右节点,则需往上查找直到当前节点为父节点的左子结点。例如下面实体:h 是父节点(e)的左子结点,即:h ..

2020-05-15 23:02:43 236 2

原创 二叉树的深度

一、前言继续树相关的问题二、题目输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依沙经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为极的深度。四、思路用递归解决,简单直观五、编码实现// TreeDepth.h#pragma once#include <iostream>#include "Common.h"#include "ConstructTree.h"using namespace std;#define ...

2020-05-14 23:06:11 141

原创 游戏服服务器——游戏服

一、游戏服介绍负责用户游戏逻辑处理。一个游戏服是一个游戏房间,例如:掼蛋金币房间(初级场、中级场、高级场),好友房,比赛场分别对应一个游戏房间,后台配置决定房间游戏玩法。一个房间有多个桌子,桌子数量后台配置,同一个桌子上的玩家可以一起玩牌,一个桌子有多个椅子,椅子数据感觉玩法来定,斗地主椅子数量是3,竞技掼蛋椅子数是4个。二、服务器启动流程1、启动准备初始化网络库 监听事件注册2、开始启动创建日志、定时器 创建网络服务 挂接逻辑事件(用户线程读取网络数据) 创建广场客户端.

2020-05-14 20:13:20 1496

原创 按之字顺序打印二叉树

一、前言前文《上往下打印二叉树》是从上往下,从左往右打印,扩展一下这个问题,按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推,该怎样打印呢?二、题目按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推三、思路先回顾一下前文《上往下打印二叉树》,用一个队列来实现的,队列是先进先出,正好满足从左往右打印树。队列我们可以看着是一..

2020-05-14 12:57:17 323

原创 上往下打印二叉树

一、前言前文《直观的打印树结构》完成了树结构打印,《重建二叉树》完成了二叉树的创建,接下来需要上往下打印二叉树《直观的打印树结构》https://blog.csdn.net/nie2314550441/article/details/106066834《重建二叉树》https://blog.csdn.net/nie2314550441/article/details/106088108二、题目一:从上往下打印出二叉树的每个节点,不含空节点。二:从上往下打印出二叉树的每个节点。包.

2020-05-13 00:19:23 389 1

原创 重建二叉树

一、前言前文《直观的打印树结构》已经完成了树结构打印,接下来需要一颗二叉树,那就重建一颗二叉树。二、题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。不含相同的节点值。三、知识点回顾先回顾一下树的几种遍历方式:前序遍历:先访问根结点,再访问左子结点,最后访问右子结点。 中序遍历:先访问左子结点,再访问根结点,最后访问右子结点。 后序遍历:先访问左子结点,再访问右子结点,最后访问根结点。四、思路前序遍历,第一个值为当前根节点,对应找到它在中序遍历...

2020-05-12 23:48:01 211

原创 游戏服务器——广场服

一、广场服介绍用户的数据服务,用户的金币消耗,道具购买等操作都是通过本服务进行。二、服务器启动流程1、启动准备初始化网络库 监听事件注册2、开始启动创建日志 创建定时器 创建配置中心 用户代理服务启动和监听(监听网关服和数据交互) 游戏房间服务启动和监听(监听游戏服和数据交互) 挂接逻辑事件(用户线程读取网络数据) 创建DB服代理服务(连DB服并进行消息交互) 创建中心服代理服务(连中心服务器并进行消息交互) 创建Redis客户端 创建对象工厂 初始化网络连.

2020-05-12 20:22:09 957

原创 直观的打印树结构

屏幕中输出一棵树,为后续和树相关的问题做准备。#include <iostream>#include <iomanip>#include <vector>#include <map>using namespace std;int gDataWidth = 2; // 数据宽度int gChildNodeWidth = 2; // 子节点宽度int gUncleNodeWidth = 3; // 叔节点宽度

2020-05-12 00:49:04 1277

原创 游戏服务器——登陆服

一、中心服介绍用户登录校验,校验通过生成秘钥之后其他的登录都是通过此处得到的秘钥进行登录。二、服务器启动流程1、启动准备初始化网络库 监听事件注册2、开始启动创建日志、创建定时器 创建网络监听服务并启动监听 挂接逻辑事件(用户线程读取网络数据) 创建DB服代理服务(连DB服并进行消息交互) 创建中心服代理服务(连中心服务器并进行消息交互) 创建守护中心(与守护中心服连接,用于服务器拉起)3、启动流程图三、登陆服与其他服务器之间消息交互DB...

2020-05-11 20:40:22 2035

原创 一个有趣多种解法的问题

一、前言《算法导论》第四章 分治策略 ,4.1最大子数组问题二、题目有一只股票你被准许可以在某个时刻买进一股该公司的股票,并在之后某个日期将其卖出,买进卖出都是在当天交易结束后进行。为了补偿这一限制,你可以了解股票将来的价格。你的目标是最大化收益。下图4-1给出了17天内的股票价格。三、思路有三种解法:解法一:《算法导论》书中解法。我们的目的是寻找一段日期,使得从第一天到最后一天的股票价格净变值最大。因此,我们不再从每日价格的角度去看待输入数据,而是考察每日价格变化,第.

2020-05-10 15:18:02 1320

原创 游戏服务器——中心服

一、中心服介绍中心服用于应用统一调度中心和数据脚本发放中心。一 服务器信息调度:DB Server第一个启动,随后中心服启动,中心服启动前会和DB Server进行连接,之后其他服务器(网关服、登陆服、广场服、游戏服、Web Server)启动前都会和中心进行连接,当中心服收到别的服务器连接时,会将新连接的服务器信息广播给所以已经连接的服务器。网关服务器就是通过中心服广播的(网关服、登陆服、广场服、游戏服、Web Server)信息在必要的时候和他们进行连接。二 数据脚本发放:网站后台配置修改同

2020-05-09 21:12:04 2985

原创 游戏服务器——网关服

一、网关服介绍客户端与服务器之间消息交互通过网关服进行转发,客户端与网关服通过TCP进行连接,网关服将客户端消息发送对应服务器(登陆服、广场服、游戏服),对应服务器收到消息之后进行处理,处理完再通过网关服将消息发送给客户端。网关服也可以的对消息进行校验,防止恶意攻击。这里只考虑客户端与游戏服务器之间消息交互,客户端与CDN、Web服务器之后通信不考虑。二、服务器启动流程1、启动准备初始化网络库 监听事件注册2、开始启动创建日志、定时器 创建网络监听服务并启动监听 挂接逻辑事.

2020-05-08 21:24:02 2300 1

原创 服务器架构概述

一、框架应用该框架用于棋牌游戏,可以承受1W玩家同时在线游戏。接下来篇章主要介绍游戏相关的服务器(网关服、登陆服、大厅服、游戏服、中心服、DB服务器、Web服)。二、架构总览三、各个模块说明3.1 Game Client——客户端实际游戏客户端,与网关相互作用,通过网关与游戏进行正常的交互处理。相关的资源通过CDN进行更新下载3.2 GateWay Serv...

2020-05-07 21:33:13 1181 1

原创 服务器架构——开篇

该系列讲解游戏服务器框架,从服务器整体框架和刚刚模块——网关服、登陆服、广场服、游戏服、中心服、DB服、Web服,进行归纳和总结,将会分为多个篇章进行总结和说明。...

2020-05-07 21:25:02 928

原创 访问者模式(Visitor)

设计模式系列Visitor 访问者模式——对象行为模式1.意图表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前拐下定义作用于这些元素的新操作。2.适用性在下列情况下使用Visitor模式:一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而...

2020-05-05 08:20:34 740

原创 模板方法(Template Method)

设计模式系列Template Method 模板模式——对象行为模式1.意图定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。2.适用性模板方法应用于下列情况:一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。 各子类中公共的行为应被提取出来并集中到一个公共父...

2020-05-04 23:04:59 1209

原创 策略模式(Strategy)

设计模式系列Strategy 策略模式——对象行为模式1.意图定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立使用它的客户而变化。2.适用性当存在以下情况时使用Strategy模式许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。 需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间...

2020-05-04 18:50:05 2260

原创 状态模式(State)

设计模式系列State 状态模式——对象行为模式1.意图允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。2.适用性一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。 一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常,有多个操作包含这一相同的条件结构。State模式...

2020-05-04 18:21:04 490

原创 观察者模式(Observer)

设计模式系列Observer 观察者模式——对象行为模式1.意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。2.适用性在以下任一情况下可以使用观察者模式:当一个抽象模型有两个方面,其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。 当对一个对象的改变需要同时改变其它对象...

2020-05-04 17:28:29 344

原创 备忘录模式(Memento)

设计模式系列Memento 备忘录模式——对象行为模式1.意图在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保护的状态。2.适用性必须保存一个对象在某一个时刻的(部分)状态,这样以后需要时它才能恢复到先前的状态 如果一个用接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性3.结构...

2020-05-04 15:06:27 278

原创 中介者模式(Mediator)

设计模式系列Mediator 中介者模式——对象行为模式1.意图用一个中介对象来封装一系列的对象交换。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。2.适用性一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象 想定制一个分布在多个...

2020-05-04 07:55:31 288

原创 迭代器模式(Iterator)

设计模式系列Iterator 迭代器模式——对象行为模式1.意图提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。、2.适用性访问一个聚合对象的内容而无需暴露它的内部表示 支持对聚合对象的多种遍历 为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代)3.结构4.参与者Iterator (迭代器)—— 迭代器...

2020-05-03 22:13:52 316

原创 解释器模式(Interpreter)

设计模式系列Interpreter 解释器模式——对象行为模式1.意图给的一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。2.适用性当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。而当存在以下情况时该模式效果最好:该文法简单对于复杂的文法,文法的类层次变得庞大而无法管理。此时语法分...

2020-05-03 21:30:21 437 1

原创 命令模式(Command)

设计模式系列Command 命令模式——对象行为模式1.意图将一个请求封装为一个对象,从而使你可用不同的对象对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。2.适用性抽象出待执行的动作以参数化某对象。Command模式使回调机制的一个面向对象的替代品 在不同的时刻指定、排列和执行请求。一个Command对象可以有一个与初始请求无关的生命周期。如果一个请...

2020-05-03 20:20:53 1934

原创 职责链模式(Chain Of Responsibility)

设计模式系列Chain Of Responsibility职责链模式——对象行为模式1.意图使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。2.适用性有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个...

2020-05-03 19:33:06 783

原创 代理模式(Proxy)

设计模式系列Proxy代理模式——对象结构模式1.意图为其他对象提供一种代理以控制对这个对象的访问。2.适用性在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用Proxy模式。1)远程代理(Remote Proxy)为一个对象在不同的地址空间提供局部代表。2)虚代理(Virtual Proxy)根据需要创建开销很大的对象。3)保护代理(Protecti...

2020-05-03 18:46:29 739

原创 享元模式(Flyweight)

设计模式系列Flyweight享元模式——对象结构模式1.意图运用共享技术有效地支持大量细颗粒度的对象2.适用性一个运用程序使用了大量的对象 完全由于使用大量的对象,造成很大的存储开销 对象的大多数状态都可变为外部状态 如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象 应用程序不依赖于对象标识。由于Flyweight对象可以被共享,对于概念上...

2020-05-03 09:20:09 278

读DCM数据,对DCM图按照序列号进行分类

完整的DCM工程,可以读取DCM图数据,可以对DCM图进行分类

2015-11-20

64位进程调用32位DLL实例

64位进程调用32位DLL实例,参考http://blog.csdn.net/nie2314550441/article/details/49867735

2015-11-18

空空如也

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

TA关注的人

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