自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

好吗好的~的技术博客

Stay Hungry, Stay Foolish.

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

原创 Redis多个命令优化方案

业务需求在RPG游戏中,有种不常见的跨服业务:找出几十个排行榜的第一名,展示对方的信息,比如王者荣耀出一个每个皮肤拥有玩家的段位排行榜。游戏排行榜示例图 :需求分析对于排行榜,我们一般都是用Redis的Zset来实现(对此有疑问可以查看这篇博客),那怎么查询第一名呢?答案是 通过Redis的Zrevrange://Redis Zrevrange 命令返回有序集中,指定区间内的成员。//其中成员的位置按分数值递减(从大到小...

2021-07-04 14:35:14 391

原创 怎么优化批量任务执行效率?

业务背景对于一个游戏来说,必然有一些业务是批量执行的。就拿RPG游戏来说,会有成百上千个区服,如果我要开一个新的活动,比如跨服的活动,需要在所有区服同时开启。这边需要考虑两个问题:运营人员操作管理后台给所有区服批量增加活动 活动开启时对应区服服务器应该受到任务调度进行调度业务分析对于第二个问题很好解决,我们在创建活动时顺便创建任务调度,后续就完全与后台管理服务器无关了。所以我们这边主要讨论的就是第一个问题。之前采用的是同步方案,也就是说,用一个协程,顺序遍历所有区服,每个区.

2021-05-25 22:36:31 702 1

原创 游戏数据量太大了怎么办?

业务需求分析对于一款DAU上十万的RPG游戏来说,数据量很容易上千万,那这样用一个数据库存储肯定是不行的,不管是IO和CPU都会是瓶颈。所以,分库分表已是必然!IO瓶颈第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度 ->分库和垂直分表。第二种:网络IO瓶颈,请求的数据太多,网络带宽不够 ->分库。CPU瓶颈第一种:SQL问题,如SQL中包含join,group by,order by,非索引字段条件查询等,增加CP...

2021-05-16 23:31:58 1066 1

原创 日常任务方案设计

简介在游戏中业务中,日常任务是很重要的一个玩法,比如王者荣耀的日常。存在的问题如果大家对游戏行业接触不深的话,首先想到的就是通过任务调度,在晚上12点的时候调度所有的服务器,将服务器服务的本区服所有玩家的数据进行重置。但是有个很大的问题就是如果区服的玩家数量非常大,那这样在某个时间大量重置日常任务时会导致这个时间段服务器会卡顿,从而造成玩家的游戏体验感不好。设计方案其实从玩家活跃时间段可知,在晚上12点玩游戏会比晚上19~22点的玩家少很多,所以可以做如下设计:玩家...

2021-04-10 13:33:31 957

原创 统一接口设计方案

简介 在业务开发过程中,和前端或者客户端设计proto的时候难免会遇到一些接口,业务逻辑基本一样,所以这种情况只需要复用一个proto就可以了,由一个管理中心来负责这个接口,管理中心根据前端/客户端传的参数来决定调用哪个业务逻辑。业务场景道具和资源的增删查改; 游戏业务的作弊器; 玩家和英雄皮肤; 各类排行榜设计方案 在业务开发过程中,存在一种业务场景,接口的作用是相同的,比如道具和资源的增删查改,都有相同的功能接口:增删查改。那对于这种情况,可...

2021-04-05 20:25:24 1638 2

原创 Redis系列之分布式缓存

缓存雪崩、缓存穿透、布隆过滤器、位图算法、bitmap、bloomfilter、缓存预热、缓存更新、缓存降级

2020-04-14 20:00:12 409

原创 SprintBoot修改服务器访问端口号

这是SpringBoot的目录结构  当我们启动SpringBoot应用时,如果端口号被占用,那么我们可以这样做来修改端口号:目录当我们启动SpringBoot应用时,如果端口号被占用,那么我们可以这样做来修改端口号:1、点击application.properties文件:2、在文件中输入server.port=80813、重新启动SpringBoot4、...

2018-12-25 08:47:03 483

原创 分库分表环境下,如何进行数据表结构同步?

分库分表背景下,多环境的表结构同步方案

2023-06-14 20:34:13 681

原创 如何设计一个好的协程池?

协程池的设计、原理与应用场景

2023-03-21 12:03:39 338 1

原创 如何设计一个好的自旋锁?

自旋锁的定义、应用场景和实践

2023-03-19 16:51:18 241

原创 记录一次Linux磁盘被占满

磁盘空间被占满了怎么办?

2022-08-11 19:26:33 350

原创 Golang之Shadowed Variables(幽灵变量)

幽灵变量的定义、可能会导致的问题以及排查方法

2022-07-29 20:56:24 771

原创 Goland 依赖报错 “Unresolved Reference”

Goland 依赖报错 “Unresolved Reference”

2022-07-28 16:52:34 1430

原创 从DDD角度来看MVC

DDD不是银弹,只是微服务架构下的最佳代码结构实践

2022-06-15 21:02:45 618

原创 服务器的鱼和熊掌,有状态or无状态

问题引入如果我们刚开始新游戏项目的服务器开发,会遇到服务器状态选择问题,游戏项目是用有状态服务器还是无状态服务器?是什么?服务器状态简单来说客户端的多次请求具有上下文关系。比如客户端登录后,后续请求其他业务时客户端不用再发玩家信息。从服务器状态角度来说,服务器分为有状态服务器和无状态服务器。有状态服务器就是在服务器端保存有关客户端的相关信息,方便该玩家的后续请求不用再发玩家的基础请求信息。比如玩家的基础信息(角色id,区服id)。在...

2021-10-23 12:39:55 2103

原创 Go进阶系列 之 性能分析神器pprof

简介Go本身自带的工具链就包含了性能分析工具,pprof就是Go性能分析的利器,它是Go语言自带的包,有如下两种:runtime/pprof:采集程序(非 Server)的运行数据进行分析 net/http/pprof:采集 HTTP Server 的运行时数据进行分析,这个其实在runtime/pprof包了一层提供了http接口。作用CPU Profiling: CPU分析,按照一定的频率采集所监听的应用程序的CPU使用情况,可确定应用程序在主动消耗 CPU 周期时花...

2021-08-26 17:24:59 1351

原创 5分钟轻松学习多租户概念

背景随着云原生不断发展,多租户的概念逐渐火起来了,在公司内部很多地方都有用到,比如后台管理平台、网关等等。介绍多租户技术(英语:multi-tenancy technology)或称多重租赁技术,是一种软件架构技术.多租户简单来说是指一个单独的实例可以为多个组织服务。多租户技术为共用的数据中心内如何以单一系统架构与服务提供多数客户端相同甚至可定制化的服务,并且仍然可以保障客户的数据隔离为什么要多租户...

2021-08-14 20:57:53 4102 1

原创 如何实现游戏中的段位排行榜?

以王者荣耀例子来解释方案,并非是王者荣耀真实方案业务需求分析在王者荣耀中,我们会打排位,而且我们想展示我们的段位会有很多个排行榜,比如段位排行榜。而段位排行榜是我们经常关注的,我们会看我们的段位在区服的排名情况,在好友列表中的排名情况。根据以上需求,我们可以分析出排行榜需要提供两个功能:查看段位排行榜 查看自己的排名设计方案在做设计方案之前,有个细节得注意:段位在数据库和后端计算都是分数形式,比如青铜三,三颗星:13那怎么设计这个方案呢?有同学就会说,直接将数据..

2021-05-05 10:18:35 1491

原创 CPU缓存一致性协议MESI

高速缓存高速缓存是一种存取速率远比主内存大而容量远比主内存小的存储部件,每个处理器都有其高速缓存。引入高速缓存之后, 处理器在执行内存读、 写操作的时候并不直接与主内存打交道, 而是通过高速缓存进行的。变量名相当于内存地址, 而变量值则相当于相应内存空间所存储的数据。内部结构从内部结构来看高速缓存相当于一个拉链散列表(ChainedHash Table). 它包含若干桶(Bucket, 硬件上称之为Set), 每个桶又可以包含若干缓存条目(CacheEntry) .缓存条目可被.

2021-02-15 23:02:10 319

原创 Go语言基础知识

GOPATHGOPATH 简单理解成 Go 语言的工作目录,它的值是一个目录的路径,也可以是多个目录路径,每个目录都代表 Go 语言的一个工作区(workspace)。工作区工作区其实就是一个对应于特定工程的目录,它应包含3个子目录:src目录、pkg目录和bin目录src目录:用于以代码包的形式组织并保存Go源码文件,这里的代码包与src下的子目录一一对应。pkg目录:用于存放通过go install命令安装后的代码包的归档文件。前提是代码包中必须包含Go库源码文件。 bin目录.

2021-02-15 22:48:55 224

原创 GO设计模式 - 结构型 - 代理模式

简介当无法或不想直接引用某个对象或访问某个对象存在困难时,或者想加强某个对象的功能时,可以通过代理对象来间接访问目标 保护目标对象 增强目标对象 案例场景 在游戏公司中,如果该公司内部如果使用DDD和中台,那么会将登陆作为通用业务,在这种场景下,每个游戏会依赖到这个通用业务, 那么,每个游戏的登录其实可以看做是一种代理,每个游戏根据自身需求基于登录通用业务进行拓展代码type IUser interface { Login(userId, p...

2021-01-07 22:39:06 204 1

原创 GO设计模式 - 行为型 - 中介者模式

简介用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地互相引用,从而使其耦合松散,而且可以独立地改变他们之间的交互案例解释当具体对象注册到中介者中,客户端需要更新某个具体对象值的时候,就可以直接将注册的type传入中介者来调用具体的对象应用场景游戏中的道具、皮肤和英雄等,其实可以看成一个游戏商品,比如英雄联盟中英雄,皮肤,道具,精粹和点券优点可以实现调用者与一系列同类对象解耦代码如下//商品种类type ItemType uint8var (.

2021-01-01 10:29:53 225 1

原创 GO设计模式 - 行为型 - 责任链模式

简介简单来说责任链模式就是将一个处理过程看成一个处理链,处理过程沿着处理链进行,每个处理结点都是一个处理者,当操作到某个结点时,由该节点的处理者进行处理,处理完后交给下一个处理者例子比如游戏世界你买一样东西,也可以用责任链模式来做,在游戏微服务时代,各个业务模块划分为不同的BC(如有不懂,可以先去了解领域驱动设计) 首先,调用仓库BC检验你的元宝是否足够,不够就报错,够就进行下一步 其次,去商店BC(也就是本BC)进行购买 再次,调用仓库BC进行扣除元宝...

2020-12-11 15:16:51 333

原创 GO设计模式 - 结构型 - 享元模式

简介享元模式就是将大量对象共有的部分抽取出来,供这些对象共享使用。而这些元素不同的部分,会以参数的形式注入具体享元的相关方法中。PS:其实感觉有点像Sync.Pool,本质都是缓存共享对象,降低内存消耗和减轻GC压力,但是仔细看下来还是和Sync.Pool有点区别的本质缓存共享对象,降低内存消耗应用场景在游戏业务开发的场景中,创建大量相同或相似对象实例的问题 例如,游戏业务中的围棋和五子棋中的黑白棋子代码实现//People接口type People in...

2020-12-09 23:05:50 204

原创 GO设计模式 - 创建型 - 建造者模式

简介建造者模式将一个复杂对象的构建和表示进行分离,可以实现同一个构造过程不同表示例子解释:比如同样构造一个人的外观,设置帽子、衣服、裤子、袜子、鞋子后的构建和只设置帽子后的构建所产生的一个人外观是不同的应用场景比如在一个英雄联盟游戏中,创建云顶之弈的过程我们并不关注,我们只关注是否可以设置背景,特效啥的,所以可以用建造者模式来设计这部分功能,这样我们就可以设置好背景、特效后再来创建云顶之弈package creationalimport "fmt"//定义一个产品(..

2020-12-09 17:43:17 233

原创 Vmware Workstation 虚拟机开启后黑屏问题

解决方案编辑->首选项 - >设备 - >启动虚拟打印机参考链接https://blog.csdn.net/qq_32832023/article/details/78593842u1s1,百度的搜索比谷歌垃圾好多倍,这个问题百度翻了几百条纪录也没正确答案,谷歌第一条就是正确答案...

2020-12-06 11:57:07 341

原创 Go 类型与拷贝

类型种类值类型:基本数据类型,int,float,bool,string,以及数组和struct特点:变量直接存储值,内存通常在栈中分配,栈在函数调用完会被释放 值类型的变量,零值是其所在类型的零值。 int32类型的零值是0 string类型的零值是"" bool类型的零值是false 符合结构struct类型的零值是其每个成员的零值的组合 数组为对应类型的零值数组 值类型的变量,不用初始化,可以直接使用 初始方法: 基本类型的初始化非常简单

2020-11-17 10:09:33 284

原创 Go init函数(基于Go 1.14)

简介init()函数会在每个包完成初始化后自动执行,并且执行优先级比main函数高。init 函数通常被用来:对变量进行初始化 加载项目中的配置变量 检查/修复程序的状态 注册 运行一次计算例子func init() { fmt.Println("do init")}func main(){ fmt.Println("main --->")}包的初始化为了使用导入的包,首先必须将其初始化。初始化总是以单线程执行,并且按照包的依赖关系顺序执行。这通.

2020-11-15 16:41:59 286

原创 分布式理论(一)

前言 CAP定理,指在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)这三个基本需求,最多只能同时满足其中的2个。简介 选项 描述 Consistency(一致性) 一致性指“all nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节点在同...

2020-10-10 00:04:27 267

原创 GO语言系列之Golint

介绍Golint is a linter for Go source code.Golint 是一个源码检测工具用于检测代码规范 Golint 不同于gofmt, Gofmt用于代码格式化Golint会对代码做以下几个方面检查package注释 必须按照 “Package xxx 开头” package命名 不能有大写字母、下划线等特殊字符 struct、interface等注释 必须按照指定格式开头 struct、interface等命名 变量注释、命名 函数注释、命名 各种语

2020-08-19 21:15:39 4693

原创 Spring系列之Spring AOP简介

AOP简介、应用场景、代理模式、SpringAOP面试题

2020-04-14 19:45:41 285

原创 Spring系列之SpringMVC工作流程

简介 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。SpringMVC在Web应用中充当控制层(Controller)的角色,对请...

2020-04-10 09:24:56 354

原创 Java面向对象之多态(精简版)

参考:https://www.cnblogs.com/chenssy/p/3372798.html2.1实现条件 在刚刚开始就提到了继承在为多态的实现做了准备。子类Child继承父类Father,我们可以编写一个指向子类的父类类型引用,该引用既可以处理父类Father对象,也可以处理子类Child对象,当相同的消息发送给子类或者父类对象时,该对象就会根据自己所属的引用而执行不同的...

2020-03-11 16:13:39 319

原创 MySQL基础系列(二)--DQL语句

目录SELECT介绍语法:特点:用法:案例:一、基础查询二、条件查询三、排序查询自我测试:SELECT介绍 语法: SELECT column_name,column_name FROM table_name [WHERE Clause] [LIMIT N][ OFFSET M] 类似于:System.out....

2020-01-05 23:05:13 882

原创 MySQL基础系列(一)--基础知识

目录1、MySQL基本知识1.1、MySQL服务的启动和停止1.2、MySQL服务的登录和退出1.3、mysql默认的数据库1.4、MySQL的语法规范1.5、SQL(Structured Query Language):结构化查询语言1.6、相关网站1、MySQL基本知识简述:MySql是一个关系型数据库管理系统,是C/S(客户/服务器)架构,由瑞典MySQL...

2020-01-04 23:35:27 401

原创 软件工程的角色定位

开发阶段需求调研员:与客户交流了解客户的需求。需求分析师:通俗一点讲需求分析师就是跟客户交流,准确获取客户需要。需求分析师是项目前期与客户方打交道最多的人,对于客户来说,他可以代表整个项目组,对与项目组成员来说他的意见可以代表客户方的意见,项目组内所有与客户需求相关的事情必需得到他的认可。系统分析师:主要负责根据系统分析结果设计系统总体架构、监管系统开发日程、确定软件内流程和框架...

2019-10-30 14:17:47 3130 1

原创 “本地计算机上的mysql服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止"的解决方法

检查一下是否有my.ini文件!!!我的MySQL在启动服务的时候之所以没有启动成功是因为没有my.ini文件。可以参考这篇文章进行解决(关键是第二步,配置):https://www.cnblogs.com/mlgjb/p/8490307.html这篇文章没有具体说my.ini放在哪,这里贴个图,大家应该就能看明白了(放在MySQL安装目录)配置完文件后,执行三...

2019-04-30 10:29:03 10247

转载 安装mysql 出现 Install/Remove of the Service Denied!

原文地址:https://blog.csdn.net/lxpbs8851/article/details/14161935在windos 的cmd下安装mysql在mysql的bin目录下面执行: mysqld --install报错:信息如下:Install/Remove of the Service Denied解决办法:用管理员的身份打开命令控制台...

2019-04-30 10:09:10 437

转载 org.json.simple 使用详解

原文地址:https://blog.csdn.net/fireroll/article/details/48708241一、概览JSON.simple是一个很简单的JSON处理,读取和写JSON数据的JAVA库,它完全兼容JSON的标准(RFC4627).你可以用JSON.simple来编码或解码JSON文本。【NOTE】如果想将对象转换成JOSN,或将JSON转换成对象,你需要考...

2019-04-19 18:05:37 538

原创 Linux实现MySQL数据库备份

今天用navicat的时候想把阿里云数据库上面的数据全部转移到本地数据库,在navicat操作时,本来是打算点复制的,不小心点成删除了,结果navicat直接删除所有表了,都不给机会提示是否删除的,不过好在我写了shell备份数据库的脚本,每天凌晨三点给我备份一次,所以直接通过备份的脚本来恢复数据库。这个脚本是看尚硅谷的Linux视频写的脚本,分享一下:#!/bin/sh#定义...

2019-04-18 11:58:19 619

layx实现弹窗+JS实现雪花特效,手风琴特效

首页采用Bootstrap的导航栏,导航进入layx弹窗,进入弹窗后课看见雪花特效,手风琴特效,canvas特效

2018-09-17

JAVAWEB实现梦网云短信验证

这个文件只需要改动那个apikey就可以了,然后在梦网云官网下载demo的,导入里面的jar,将jar包和这个文件一并放入项目中就可以调用了,SSM,SpringBoot都可以用~~~

2018-09-05

空空如也

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

TA关注的人

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