自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

focus-unchanged-thing

专注于纷繁快速变化中那些不变的东西

  • 博客(606)
  • 资源 (12)
  • 收藏
  • 关注

原创 DDD学习笔记

贫血模型: pojo ==> 问题: 贫血失忆症,本来定义实体是为了承载业务,我们只能在Service中翻,我们现在不知道用于做什么业务了。因为面向接口编程了,所有的参数其实都是Entity实体,你也看不出来到底是: mysql还是mongo。不是从本地找实现,而是从nacos之类的,从本地查找实现转化为从rpc找实现。因此,我们开始希望是单体。1.技术主动理解业务: 我当前的业务需要哪些对象来参与,这些对象构成什么样的业务流程。12)MVC: 技术边界清晰,但是业务逻辑边界模糊,很难拆分为: 微服务。

2023-11-06 11:37:56 167

原创 zilong-20231030

转12进制 求末尾多少0 一共有几位 (考虑了溢出问题)9)有哪些线程以及怎么分配。3)大量数据获取前10个。4)reemap地城结构。

2023-10-30 19:00:22 529

原创 Buff系统的设计 1.没有真正实战=0 2.Buff系统中的筛选逻辑

经过这几个项目的锻炼 和 枚举多态这种模式,我发现我对多态慢慢应用的了如指掌了,能够很自然的进行代码的设计。像这种看到:buff具有不同的功能时,我很自然就想到了多态。多态的执行,其实就是:业务实体 + Param,从而业务实体的数据被修改。这样子在不同的枚举中进行不同的生效,从而其他模块再去调用这个里面的东西,从而生效,比如:打折。我充值了,变的更强了,我打怪时战力变高了,影响了最终战斗公式的计算。Buff系统,其实就是:给各个模块带来一定的增益,比如: 购买了vip,这样子可以买其它东西时打折。

2023-10-27 21:44:25 111

原创 面试题总结 20231024

step3:每个桶中的元素都排好序后,取出来,这样子就有序了。step1: 桶排序本质是一种分治算法。step2:每个桶都代表了一个元素的范围。1.桶排序的应用案例:上亿元素排行榜。

2023-10-24 09:15:24 165

原创 mybatis plus中json格式实战

1.自定义sql的话,TypeHandler是不生效的,需要通过ResultMap声明下转换器才行。2.增加字段发现确实是可以的,删除字段就报错,所以这也符合游戏的目标也就是不能删和改字段名字。但是QueryWrapper就可以,不知道这算不算bug。可见,业务层可以愉快的使用Entiy了。

2023-10-21 23:21:40 808

原创 【nginx学习笔记】

比如:后代集群每一台机器的处理能力不同,nginx根据配置权重,请求来了去分一个机器处理。比如:我现在通过v-p-n去访问YouTube,那么就是正向代理。最常见的就是web中,nginx去代理一群后端的服务器。1.正向代理:代理的是客户端,一般有明确的访问对象。3.负载均衡:在反向代理的基础上,2.反向代理:代理的是服务器。

2023-10-17 15:31:09 193 1

原创 【vue代码格式化】idea中开启ESLint格式化代码

这样子,保存.vue文件时,代码就自动格式化了,再也不用考虑对齐问题了。

2023-10-08 15:51:06 1262

原创 redisson当mysql缓存的实际使用案例

由于我们线上用的都是使用nginx+多个springboot进程组成的集群,因此,本地缓存是没办法使用的。1.先查询 redisson中的数据,如果没有,则从mysql中加载,加载到,则设置到redisson中。3.修改的话,先修改redisson中的数据,然后使用异步的线程池去异步修改mysql中的数据。也就是:看起来redisson中的是同步的操作,mysql则是异步的操作。2.缓存必须设置过期时间。

2023-10-07 16:39:29 50

原创 体会jdk17对于空指针的增强

jdk17jdk11。

2023-10-07 15:11:50 695

原创 【宝塔面板常用技巧】

1.用宝塔面板网页下载的软件都在目录:/www/server/

2023-10-03 16:10:38 61

原创 mysql中库存扣除的方式【mysql层使用乐观锁 或 Redisson分布式锁】

由于:可能多个人同时查询,然后再去扣除,此时可能只会扣除一次的情况。查询出来Entity的数据 跟 mysql中的一致,才执行扣除。也就是使用MybatisPlus时,增加eq条件。都是先查询,再扣除。

2023-10-03 11:40:52 89

原创 【nginx多文件组织(重点)】

nginx的话,有时候,想部署多个配置,比如:使用不同的端口配置不同的web工程。3)web里面随便取名字,比如:这里是:图书管理系统。比如:8081部署:项目1的web页面。8082部署:项目2的web页面。4)访问下web页面,发现ok了。2)新建web文件夹。

2023-10-02 23:56:40 199

原创 【jiawawiki部署】java后台: SpringBoot+nginx 2.web前端部署:vue前端+nginx静态资源 3.nginx多文件部署

【代码】jiawawiki部署。

2023-10-02 23:24:55 65

原创 【windows下导入sql文件到数据库中】

发现导入线上的数据库(数据量很多),用GUI工具发现总是出问题,改为命令后没问题,所以我现在更相信命令行的力量。1.一般sql中没有数据库创建,因此我们可以用 HeidiSQL先创建数据库。3.输入source,然后把sql文件拖入进来,则显示路径。

2023-10-02 20:33:31 159

原创 【redisson学习笔记】

突然想起来,其实我不需要去编译源码啊,直接关联起来源码不就可以调试了嘛。所以,我关联了源码就开始了调试,非常方便。本来想直接用maven编译源码, 却发现各种错误,主要是maven的编译插件版本问题。2)然后用maven包方式引入。

2023-09-29 11:19:05 344

原创 通用rpc通信技术

ServerInternalMsgParam // 基于Redisson的跨服通信。然后结合玩家的状态进行封装,在Param中包装了上下文。CrossMsgParam // 基于Netty的跨服通信。游戏中自己看了很多个源码了,也实践了不少,总结出了一个比较万能的模式,OnlineMsgParam // 登录授权后。线程池和消息队列,进行网络分发即可,这样子参数看起来很少。AccountMsgParam // 登录前。3.跨进程通信(也就是天然支持分布式了)

2023-09-27 11:43:52 43

原创 [多态设计模式] 方法1:枚举+强转 方法2:泛型+接口

总结:这样子,我们就可以在枚举中无限扩展,像我做的MMO游戏,排行榜来说,最多也就35种,看起来行数多了点,但是实际上维护性还是可以。这种枚举的多态,实现比较简单。我们往往需要采用一种一致的接口去处理,这样子可以避免冗余代码。但是他们需要的数据却不同。游戏服务器中,多态可以说体现的淋漓尽致。如:开启条件,玩家等级,通关。商店可能有不同类型的商店。

2023-09-25 18:48:45 243

原创 [linux(静态文件服务)] 1.部署vue发布后的dist网页到nginx 2.偷懒的话可以用宝塔部署nginx

1.windows下把开发好的vue工程打包为dist文件然后配置下nginx目录即可。2.linux上不需要安装node.js环境。

2023-09-19 17:20:57 265

原创 游戏中排行榜算法研究

这个所谓的二分查找,是返回自己在排行中的位置(从1开始),而且,就算自己不在list上,也是会返回位置的。重复时,默认认为是自己更小。所以,游戏中的排行榜,必然要求是:按照降序来的。所以,集合框架中的,是不满足的。里面重写了排序算法。

2023-09-11 13:27:12 700 3

原创 maven踩坑日记

1.自定义maven版本+setting.xml和仓库时,注意:使用gen.bat生成的代码使用到的仓库路径可能不是idea中指定的,导致类在install后也找不到的错误。解决办法:setting.xml和仓库使用默认的C盘的.m2中。

2023-08-29 22:21:57 133

原创 svn软连接和文件忽略

URL: 想要软连接的牡蛎->TortoiseSVN->Repo-browser 复制下填入。Local path: 写下软连接后的文件夹的名字。

2023-08-28 18:22:07 648

原创 为啥java热替换时属性数据不丢

2.这个没想通说明对java面向对象底层实现不了解。1.替换的是klass,数据在oop里面。

2023-08-16 10:06:34 59

原创 【ConcurrentSkipListMap】

key是有序的,因此可以看做是并发的TreeMap。插入和删除有可能会引起节点Level的变更。从最上面开始查找,最后层层往下查。

2023-08-13 23:29:06 92

原创 ReentrantLock中的Condition的用法

在rpc中,我们也可以用这个await来搞。当然了还有CountDownLatch或者CompletableFuture也有提供超时的方法。其实Condition或者说wait和notify/notifyAll,我们是在阻塞队列中经常使用。生产者消费者模式嘛,一个线程生成数据,有了数据后,通知其它线程取。也就是await方法,是位于lock之间。

2023-08-05 20:49:35 218

原创 Java Unsafe类学习笔记

正如其名字,是不安全的,因为java语言层面是不允许直接操作内存的,为了扩展这个能力,引入了Unsafe类。4.class对象相关。6.对象操作,获取对象属性偏移,再操作。3.线程调度中Park和Unpark。2.cas中比较交换的cpu的指令。

2023-08-05 15:38:17 46

原创 ConcurrentLinkedQueue代替LinkedBlockingQueue当做任务队列

2.LinkedBlockingQueue原理是:这种阻塞队列底层是用LockSupport实现,并且依赖锁的阻塞与唤醒。另一种就是:cas+volatile,毕竟cas是用于赋值用的,跟可见性没什么关系。3.CAS+volatile:保证线程安全。其实还是:悲观和乐观的2种实现方式。1.并发容器、基于链表、单线链表。一种就是:锁+唤醒机制。

2023-08-05 15:17:42 44

原创 巧妙使用System.exit(1)实现关服流程

【代码】巧妙使用System.exit(1)实现关服流程。

2023-08-03 16:38:02 58

原创 xdb和CompletableFuture学习笔记 死锁的思考

并不是真的把任务取消了,而是仅仅是一个标记,任务是否执行不一定,很可能执行了。标记完后,去拿结果,就会触发CancellationException。父任务再等待子任务执行,但是:有很多个父任务,把线程池占满了,但是又在等待子任务执行。子任务又没线程可执行,就死锁了。CompletionStage // 实现编排接口。解决办法:父任务 和 子任务 要用线程池进行隔离。4)runAsync 和 supplyAsync。如果任务已经完成了,那取消也没用了。1)可组合 + 异步。3)构建依赖树的过程。

2023-07-24 18:24:54 81

原创 dubbo开发分布项目总结

里面使用api层提供讹接口,直接像本地调用一样调用即可。网关层的负载均衡:openresty。3)具体实现层:业务模块,比如支付、用户、订单...负责用户请求的接入。2)打出来的要部署的jar包。1)网关:gateway。看某个服务是否启动成功。

2023-07-18 11:55:11 179

原创 Arrays.copyOf是浅拷贝

可见对于dst的修改,src也变了。

2023-07-17 10:24:16 55

原创 C(一致性) A(可用性) P(分区容错性)中一致性和可用性的理解 和 BASE

现在有3个节点node1、node2、node3,其中node3因为网络原因暂时不可用了,但是,依然有些请求已经到达了, node1和node2数据是同步的,node3节点虽然存活,但是因为网络原因,并没有同步过来最新数据。如何保证:node3的数据也是对的呢?那就是先阻塞哪里,等网络恢复,数据同步好了再返回。此时就是:牺牲了可用性,恢复前暂时不可用了嘛!所以说:为了一致性, 可用性可能暂时不可用。怎么理解:一致性和可用性不可兼得呢?

2023-07-14 17:23:43 320

原创 java线程死锁检测

【代码】java线程死锁检测。

2023-07-14 17:12:09 129

原创 游戏服务器架构经典设计模式-包装器Warp模式

由于我们想少一个参数,不想带上模块号,往往是:根据msgId的范围进行人为的约定,再根据玩家的逻辑层标识,就知道了当前应该是:哪个进程上哪个线程处理。游戏中,则直接读取数据库(如:每日登录、任务系统..这种带db的系统)转发到MMO场景层的某个逻辑Mod中处理(如:副本、场景活动玩法)这个名字是我自己创造的,不在23个设计模式之中,我认为它非常重要。转发到中心服处理(根据GS上玩家的跨服状态)从中心服发到GS上的Logic层。未授权(只转发给登录模块)

2023-07-04 10:46:33 140

原创 accountId、uid、roleId 游戏中的3种id

这个是一个很长的,玩家通过http登录授权后,通过web层,由雪花算法根据accountId生成的long值,里面可以把玩家的比如:平台信息之类的包含进来。这个是角色Id,比如:MMO中一个玩家又5个角色,那么根据uid对应 5个roleId。accountId:这个是字符串,玩家可以输入名字 或者 通过微信生成。

2023-06-30 18:29:56 515

原创 jvm常用命令(内存泄漏、死循环、死锁、GC情况、字节码)

导出内存 hprof映像,结合MAT工具分析内存泄露。结合pid,查看运行时的参数信息。分析线程信息,死循环,死锁。

2023-05-09 15:05:04 335 1

原创 【上线后常用命令】1.man(du为例) 2.tail 3.sed 4.cat 5.top 6.ps -ef 7.df

1.查询某个时间段之间的日志。

2023-04-21 17:19:15 100

原创 【推荐】MybatisPlus学习笔记

为啥不用mybtaisplusplusgenerator不好用试试plus,用过之后我就抛弃gen了plus唯一缺点就是,不支持多主键多主键我用的是plusplus mybtais++查询的例子

2023-04-18 10:30:29 71

原创 死循环排查

可以看出:一个线程在关服时,一直处于:运行状态。可以看出:cpu很高。

2023-04-17 15:53:11 59

原创 使用JavaAssist获取方法参数名

【代码】使用JavaAssist获取方法参数名。

2023-04-07 14:44:18 283

原创 理解弱引用

【代码】理解弱引用。

2023-04-06 21:21:57 219

Unity 3D网络游戏实战(全)

Unity 3D网络游戏实战(全) Unity 3D网络游戏实战(全) Unity 3D网络游戏实战(全)

2018-08-10

JavaScript设计模式与开发实践-源代码

JavaScript设计模式与开发实践-源代码 JavaScript设计模式与开发实践-源代码

2018-06-03

JavaScript函数式编程

JavaScript函数式编程_PDF电子书下载 高清 带索引书签目录_(美)佛格斯著_北京:人民邮电出版社_P204_2015.08

2018-06-01

node.js实战

node.js实战,学习node.js开发必读书籍,npm作者大作 node.js实战,学习node.js开发必读书籍,npm作者大作

2018-05-31

编写可维护的JavaScript

编写可维护的javascript 编写可维护的javascript 编写可维护的javascript

2018-05-28

JavaScript应用开发实践指南.pdf

JavaScript应用开发实践指南 JavaScript应用开发实践指南

2018-05-17

markdown写的简历模板

作为程序员,当然应该不用什么word之类的来写简历,我们应该使用简洁美观的markdown编辑器来完成

2018-04-25

MASM汇编语言新手入门

MASM汇编语言新手入门

2012-03-30

C++编写的图书馆管理系统

C++编写的图书馆管理系统

2012-03-30

C++ 0-1背包问题源代码

C++ 0-1背包问题源代码

2012-01-03

航海乘务管理系统C++源代码

航海乘务管理系统C++源代码.

2012-01-02

图书馆管理系统C++源代码

C++开发的图书馆管理程序源代码

2012-01-02

空空如也

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

TA关注的人

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