自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 spring boot+mybatis plus 实现动态数据源

除了以上的数据库还包含一些,游戏全局的库等,以及平台本身的数据库;@Async(ThreadPoolConfig.THREAD_POOL),确保切换数据源之后为另一个线程。由于项目开发中设计到游戏运营平台的搭建,游戏中每一个不同的区服使用的是不同的数据库存储数据。区服1包括game_1_data(游戏数据数据库),game_1_log(游戏日志数据库);区服2包括game_2_data(游戏数据数据库),game_2_log(游戏日志数据库);......

2022-07-20 20:31:55 4605 20

原创 后台管理系统 -- 行权限与列权限的设计与实现

开篇说明如果在这里获得过启发和思考,希望点赞支持!对于内容有不同的看法欢迎来信交流。技术栈 >> java邮箱 >> 15673219519@163.com描述后台系统中除了根据角色分配不同的菜单,还经常遇到在一菜单中,不同角色或者不同的人员拥有不同的查选权限。查询权限又可以分为行查询,列查询。行查询实现起来比较简单,下面会简单列出我遇到到的方法;然而列权限似乎没有看到一个很好的实现方法,并且实现起来比较复杂,导致无从下手。接下来,我将具体描述我在系统中的实现方式

2021-11-27 15:00:14 3462

原创 spring cloud gateway 对请求参数解密,返回参数加密处理

在一些针对数据比较敏感的项目中会对客户端与服务端之间交互的数据进行加密处理。在gateway网关服务中处理此项业务需要如何实现呢?gateway中自定义的filter,可以实现对请求前的处理以及返回后的处理。请求顺序可以这样理解:请求-> 自定义的filter-A -> 自定义的filter-B -> 业务处理 -> 自定义的filter-B -> 自定义的filter-A -> 返回利用这一特性,我们可以在处理业务代码之前添加对参数的统一解密处理,到达下游服务中.

2020-10-03 18:02:58 14340 46

原创 探索Java设计模式:代理模式

代理模式的核心思想是为一个对象(即“目标对象”或“被代理对象”)提供一个替代者(即“代理对象”),代理对象与目标对象具有相同的接口。客户端通过代理对象间接与目标对象交互,代理对象可以在执行目标对象方法前、后或过程中添加额外操作,如权限校验、缓存处理、异常处理等。Subject(抽象主题):定义目标对象和代理对象的共同接口,客户端通过该接口与两者交互。RealSubject(真实主题):实现了Subject接口,定义了实际业务逻辑。Proxy(代理)

2024-05-02 23:26:59 436

原创 探索Java设计模式:迭代器模式

迭代器模式的核心思想是为聚合对象(如集合、数组)提供一个标准的访问接口,该接口定义了遍历和访问元素的通用方法。通过迭代器,客户端可以无须关心聚合对象的内部结构,以一致的方式遍历集合中的元素。迭代器模式将遍历算法与聚合对象分离,使得它们可以独立变化。Aggregate(聚合):定义了创建迭代器对象的接口。ConcreteAggregate(具体聚合):实现了创建迭代器对象的接口,提供了创建迭代器实例的方法。Iterator(迭代器):定义了访问和遍历元素的接口,包含hasNext()next()等方法。

2024-05-02 23:26:10 583

原创 探索Java设计模式:访问者模式

总结来说,访问者模式通过分离数据结构和操作,使得二者可以独立变化,为系统提供了良好的扩展性和灵活性。在实际开发中,应识别出具有多种不同操作且易于形成“访问者-元素”关系的数据结构,适时地运用访问者模式进行设计,以提升代码的可读性、可维护性和扩展性。在访问者模式中,数据结构(也称为元素集合)提供了接受访问者访问的接口,访问者则定义了对每个元素的操作。访问者模式的核心思想是“你不用管我怎么操作,我只关心我要访问的对象”,这使得我们可以为不同类型的数据结构提供不同的访问者,从而实现对同一数据结构的不同操作。

2024-04-27 13:25:51 317

原创 探索Java设计模式:工厂方法模式

*工厂方法模式(Factory Method Pattern)**是一种创建型设计模式,其核心思想是定义一个用于创建对象的接口,但让子类决定实例化哪个类。工厂方法模式将对象的实例化过程推迟到子类中,使得系统可以在不修改原有代码的情况下扩展新的产品类型。解耦:将对象的创建与使用分离,使用者无需关心对象的具体创建过程,只需与抽象工厂接口交互,降低了代码之间的耦合度。灵活性与扩展性:新增产品类型时,只需增加一个新的具体工厂类,遵循“开闭原则”,对扩展开放,对修改封闭。易于替换与切换。

2024-04-27 13:25:38 522

原创 探索Java设计模式:观察者模式

观察者模式的核心思想是定义一个目标对象(Subject),它可以维护一系列依赖于它的观察者对象(Observer)。当目标对象的状态发生变化时,会自动通知所有注册的观察者,使其做出相应的响应。观察者与目标对象之间通过接口进行解耦,观察者不需要了解目标对象的内部实现细节,只需关注自己感兴趣的事件。Subject(目标对象):定义了添加观察者、移除观察者以及通知观察者的方法。目标对象负责维护观察者列表,并在状态变化时触发通知。Observer(观察者)

2024-04-27 13:25:15 635

原创 探索Java设计模式:适配器模式

适配器模式的核心思想是通过创建一个适配器类,将原有接口转换为目标接口,从而使得原本无法直接协作的类能够相互配合。目标接口(Target Interface):定义客户端期望的接口,可以是新的接口或已有的接口标准。被适配者(Adaptee):现有系统中已经存在的接口或类,其接口与目标接口不兼容。适配器(Adapter):实现目标接口,同时持有被适配者的引用,在其方法中调用被适配者的相应功能,从而将被适配者接口转换为目标接口。对象适配器:适配器类继承自被适配者,并实现目标接口。

2024-04-25 16:14:55 568

原创 探索Java设计模式:原型模式

*原型模式(Prototype Pattern)**是一种创建型设计模式,它通过复制已有对象来创建新对象,而不是通过new关键字实例化。这种模式适用于需要快速创建大量相似对象,或者对象创建过程较复杂、耗时,且存在大量重复初始化逻辑的情况。原型接口(Prototype Interface):声明克隆自身的方法,通常为clone()或copy()。具体原型(Concrete Prototype):实现原型接口,提供复制自身的具体实现。

2024-04-25 11:09:37 843

原创 探索Java设计模式:中介者模式

中介者模式通过集中处理对象间的交互逻辑,将原本复杂的网状结构简化为星形结构,使得对象各自关注自身的业务逻辑,而将跨对象的通信委托给中介者处理。总结来说,中介者模式通过引入中介者对象来协调多个对象间的交互,有效地降低了对象间的耦合度,简化了系统结构。通过引入中介者,可以将模块间的直接交互替换为与中介者的交互,简化模块间的耦合,提高系统的可维护性和扩展性。:在多人在线游戏中,游戏服务器可以作为中介者,处理玩家之间的交互,如聊天、交易、战斗等,避免玩家对象间的直接通信。在这个例子中,我们定义了。

2024-04-25 11:09:22 486

原创 探索Java设计模式:装饰器模式

装饰器模式的核心思想是在不改变对象接口的前提下,通过组合而非继承的方式为对象添加额外功能。Component(组件):定义一个对象接口,可以给这些对象动态添加职责。ConcreteComponent(具体组件):实现了Component接口,定义了基础功能。Decorator(装饰器):实现了Component接口,持有一个Component对象的引用,并在原有接口基础上添加新功能。装饰器与具体组件具有相同的接口,使得装饰器对象可以替代原始对象。ConcreteDecorator(具体装饰器)

2024-04-23 16:59:25 773

原创 探索Java设计模式:状态模式

状态模式通过引入状态类来封装与状态相关的行为,并使上下文对象(即拥有状态的对象)与这些状态对象之间进行交互,从而将复杂的“条件判断”代码转化为对象之间的简单方法调用。这样做的好处在于,当需要增加新状态或修改状态相关行为时,只需增加或修改状态类,而无需改动上下文对象的代码,增强了系统的可扩展性和可维护性。:在涉及复杂业务流程的应用中,如订单处理、项目审批等,状态模式可以清晰地表示流程中的各种状态以及状态之间的转移规则,使得流程控制更为直观且易于扩展。这样,当ATM机的状态发生改变时,只需更改。

2024-04-22 18:09:35 395

原创 探索Java设计模式:外观模式

外观模式的核心思想是为一组复杂的子系统接口提供一个统一的、更高级别的接口。这个高级接口使得客户端能够更容易地使用子系统,而无需了解其内部的复杂性。外观模式将子系统与客户端解耦,隐藏了子系统组件间的交互细节,对外提供一个简单、一致且易于使用的接口。Facade(外观):为子系统提供一个统一的接口,定义一组高层接口供客户端使用,这些接口通常是对子系统接口的进一步抽象或组合。Subsystems(子系统):包含多个类和接口,实现具体的业务逻辑。子系统并不知道外观的存在,它们仍保持原有的独立性。简化接口。

2024-04-22 12:57:03 1036

原创 探索Java设计模式:建造者模式

*建造者模式(Builder Pattern)**是一种创建型设计模式,它将一个复杂对象的构建过程与其表示相分离,使得同样的构建过程可以创建不同的表示。建造者模式主要适用于对象的构造过程较为复杂,或者需要分步骤创建,且需要支持不同配置或表现形式的情况。产品类:定义要构建的复杂对象的接口或实现。抽象建造者:声明创建产品各个部分的接口,一般包含一系列方法。具体建造者:实现抽象建造者的接口,提供创建产品各个部分的具体实现。导演者(Director)

2024-04-22 12:56:39 688

原创 探索Java设计模式:命令模式

命令模式(Command Pattern)是一种行为型设计模式,它将请求封装为一个对象,使得使用命令对象的客户端与请求接收者(即具体执行命令的对象)解耦。在Java编程中,命令模式常用于需要对请求进行记录、撤销、重做、队列化、多级事务等复杂操作的场景。总结来说,命令模式通过将请求封装为命令对象,实现了请求发送者与接收者的解耦,增强了系统的可扩展性和灵活性。:命令模式可以帮助记录用户的操作历史,每个命令对象都包含了操作的具体信息。通过命令模式,可以将这些操作封装成命令对象,便于实现撤销、重做等功能。

2024-04-22 12:56:19 487

原创 探索Java设计模式:单例模式

*单例模式(Singleton Pattern)**是一种创建型设计模式,其核心目标是确保一个类在整个应用程序中只存在一个实例,并提供一个全局访问点来获取这个实例。资源优化:对于那些需要频繁创建和销毁、或者占用大量系统资源的对象,单例模式可以保证它们只被创建一次,从而节约资源。状态共享:在需要多个对象共享同一份数据或状态时,单例模式可以提供一个全局唯一的共享点。控制全局访问:对于需要严格控制数量的对象(如数据库连接池、线程池),单例模式可以防止无限制的实例化,保证系统的稳定性和一致性。

2024-04-21 20:00:00 802

原创 探索Java设计模式:享元模式

享元模式的核心思想是运用共享技术有效地支持大量细粒度对象的复用。它通过共享已经存在的同类对象,减少系统中对象的数量,从而降低内存占用,提高系统的性能。享元模式的关键在于区分对象的内在状态(Intrinsic State,存储在享元对象内部,不会随环境改变而改变)和外在状态(Extrinsic State,由客户端传入,随环境改变而改变)。Flyweight(享元接口):定义享元对象的公共接口,通常包含外在状态的设置方法。ConcreteFlyweight(具体享元类)

2024-04-21 12:00:00 723

原创 探索Java设计模式:抽象工厂模式

*抽象工厂模式(Abstract Factory Pattern)**是一种创建型设计模式,它提供了一种创建相关或依赖对象家族的接口,而无需指定具体的类。抽象工厂模式的核心在于创建一系列相关的产品族,每个产品族中的产品具有一定的关联性或一致性,且各产品族之间可能互斥或不兼容。这种模式能够保证客户端代码使用的一组相关对象来自同一个“家族”。封装复杂性:隐藏了具体产品的创建细节,客户端只需与抽象工厂交互,简化了对象的创建过程。隔离变化。

2024-04-21 10:17:44 1045

原创 探索Java设计模式:组合模式

组合模式的核心思想是将对象组织成树形结构,其中每个节点(无论是叶子节点还是容器节点)都具有相同的操作接口,使得客户端可以以统一的方式处理单个对象和对象集合。这种模式能够模拟现实世界中的“整体-部分”关系,如文件系统、公司组织架构、DOM树等。Component(组件接口):定义所有节点(包括叶子节点和容器节点)共有的操作接口。Leaf(叶子节点):实现Component接口,表示树结构中的叶节点,没有子节点。Composite(容器节点)

2024-04-21 09:00:00 463

原创 探索Java设计模式:桥接模式

桥接模式的核心思想是将抽象部分与实现部分分离,分别用两个独立的继承结构来表示,从而实现这两部分的独立扩展。抽象部分定义了抽象接口,包含对实现部分的引用;实现部分则定义了实现接口的具体实现。这样,抽象部分和实现部分可以独立地进行变化,而不影响彼此。Abstraction(抽象类):定义抽象接口,包含对实现部分的引用。RefinedAbstraction(扩展抽象类):扩展抽象类,实现或覆盖抽象类的部分方法,具体使用实现部分的功能。Implementor(实现接口):定义实现部分的接口,供实现类实现。

2024-04-20 23:47:44 855

原创 探索Java设计模式:模板方法模式

模板方法模式的核心思想是定义一个操作中的算法骨架,并将一些步骤延迟到子类中实现。它包含一个抽象类,该类定义了算法的通用步骤,并在其中声明了一些抽象方法(称为“基本方法”),这些方法由子类来实现。同时,抽象类还提供了一个模板方法,该方法定义了算法的执行顺序,调用基本方法来完成具体逻辑。AbstractClass(抽象类):定义了一个或多个抽象方法(基本方法),以及一个模板方法。模板方法定义了算法的骨架,并调用基本方法。ConcreteClass(具体子类)

2024-04-20 23:00:51 886

原创 探索Java设计模式:责任链模式

在Java编程中,责任链模式常用于处理一系列可能有多种不同处理方式的事件或请求,如日志记录、权限验证、异常处理等场景。总结来说,责任链模式通过构建一个处理对象链,使得请求可以在链中自由传递直至被正确处理,从而实现了请求发送者与接收者的解耦,增强了系统的灵活性和可扩展性。每个处理器负责处理特定类型的异常,当异常发生时,按照链的顺序寻找合适的处理器进行处理,如记录日志、通知用户、回滚事务等。当用户发起请求时,系统会根据用户的权限等级,沿责任链进行验证,直至找到匹配的权限节点或验证失败。最后,我们创建了一个。

2024-04-20 20:53:37 682

原创 探索Java设计模式:策略模式

*策略模式(Strategy Pattern)**是一种行为设计模式,它定义了一系列算法,并将每个算法封装在一个独立的类中,使得它们可以互相替换。策略模式让算法的变化独立于使用它的客户端,从而使得系统更易于扩展和维护。Context(环境类):持有一个策略对象的引用,负责调用策略对象的接口来执行相关操作。环境类与具体策略解耦,仅依赖于抽象策略接口。Strategy(抽象策略类):定义了所有支持的算法的公共接口,使策略对象可以被环境类以统一的方式调用。ConcreteStrategy(具体策略类)

2024-04-20 20:52:31 591

原创 JSONObject优雅获取深层字段属性值

根据JSONObject中字段的名称,优雅获取深层属性值使用示例,取error_entry的数量。JSON的层次结构如下 aggregations.3.buckets.[key=error_entry].doc_count/*},"hits": {"total": {},"hits": [},"3": {},*/} else {break;if (!

2024-03-25 23:12:30 298

原创 一次压测经验过程的经验记录

对于某些首次操作查询DB,之后查询走redis的。建议在前期去掉缓存,便于更好测试。后期基本测试结束可加上redis,再去估计缓存内存使用。通常对于QPS较高的web应用程序在开发完成后,除了功能测试之外还需要做一轮压力测试。这样的好处主要有以下几点,也是本次压测的目的。压测时候最好使用内网地址,这样可以保证jemter达到最大请求数,提升资源使用率。对于内容有不同的看法欢迎来信交流。技术栈 >> java。

2024-03-10 13:38:36 825

原创 【动态规划:最短编辑路径】的应用:excel diff功能

最短编辑路径,简单的说就是"字符串1"改成"字符串2"需要经过多少步;如字符串"ABC"改成"ADCE"需要如下步骤1,删除B2,新增D3,新增E通过以上步骤我们就可以实现:字符串"ABC"改成"ADCE"通过上面的我们可以知道,这些步骤就是两个字符串之间的不同。动态规划-最短编辑路径。

2024-02-18 23:34:42 733

原创 关于游戏买量系统的业务模块简单划分

游戏买量平台微服务业务划分

2022-10-18 16:58:24 797 2

原创 springboot 默认日志框架logback日志跟踪以及子线程的处理情况

代码】springboot默认日志框架logback日志跟踪以及子线程的处理情况。

2022-07-21 13:24:28 750

原创 记录一个多节点下quartz定时任务的一个重复执行的bug

业务初期只有一台服务器运行时并未发现异常。直到业务扩展,使用到多个服务时,quartz在默认配置的情况下出现了,多台服务同时执行同一个任务的情况。有时候发生,有时候又是正常的。理论上应该是支持分布式集群的情况下定时任务执行的。...

2022-07-21 10:22:01 1924

原创 后台管理系统 -- @OperateLog记录操作日志

开篇说明如果在这里获得过启发和思考,希望点赞支持!对于内容有不同的看法欢迎来信交流。技术栈 >> java邮箱 >> 15673219519@163.com描述后台记录操作日志是一个非常普遍的功能,几乎可以涉及到所有的后台管理接口。所以一个方便使用的日志记录工具,将会简化开发中的代码重复。于是我想实现下面的效果:通过注解@OperateLog 可填写日志内容占位符{0},可传入请求参数中的值。@OperateLog(content = "设置用户id:{0}临时密

2021-11-30 10:26:15 3962 3

原创 quartz定时任务集群版

开篇说明如果在这里获得过启发和思考,希望点赞支持!对于内容有不同的看法欢迎来信交流。技术栈 >> java邮箱 >> 15673219519@163.com描述之前项目刚刚开始简易的通过实现单机版。 quartz定时任务,两张表实现数据持久化由于项目持续了大半年的迭代更新,需要执行的定时任务增多。并且服务中还有其他业务,单机版本的定时任务影响了服务的集群搭建。所以,着手对其改进。目标是保留单机版中两张表的使用,来对定时任务执行计划在页面控制,以及可查看每个任务的执

2021-11-25 10:31:56 3471

原创 synchronized用在普通方法上,代码块,静态方法上的区别

普通方法上synchronized 在普通方法上为对象锁,不通对象调用时不会阻塞,相同对象调用时为同步阻塞。示例如下:public class Task { public synchronized void funA(){ System.out.println("======== start running funA ... ========"); try { Thread.sleep(1000); } catch (I

2020-10-27 22:53:11 2685 6

原创 spring cloud gateway 全局异常处理

通常spring boot全局异常捕获我们通常会使用@ControllerAdvice进行全局捕获。放到网关中显然不合适,@ControllerAdvice故名思意,是对controller的一个增强处理。所以在gateway中我们需要如下方式配置:网关全局异常配置/** * @calssName ExceptionConfig * @Description 网关全局异常配置 * @Author jiangshaoneng * @DATE 2020/9/28 19:36 */@Conf.

2020-10-03 18:02:25 2920 5

原创 spring cloud gateway 权限校验

编写自定义的权限校验代码,并且使该过滤器在指定的路由上生效即可如果权限校验需要使用到redis,则在gateway中需要引入redis的依赖自定义token权限校验代码/** * @calssName AppTokenFilter * @Description 验证路由到APP用户端的接口是否有token * @Author jiangshaoneng * @DATE 2020/9/25 14:39 */public class AppTokenFilter implements Ga.

2020-10-03 18:01:35 3627 1

原创 spring cloud gateway 全局请求日志打印

实现GlobalFilter则所有该自定义Filter会对所有的路由生效。编写全局日志拦截器代码/** * @calssName LogFilter * @Description 全局日志打印,请求日志以及返回日志,并在返回结果日志中添加请求时间 * @Author jiangshaoneng * @DATE 2020/9/25 14:54 */public class GlobalLogFilter implements GlobalFilter, Ordered { pri.

2020-10-03 17:55:58 7425 17

原创 阿里云服务器ssh连接每隔一段时间自动断开

修改云服务器 ssh 配置文件# 打开文件vim /etc/ssh/sshd_config# 找到这两行#ClientAliveInterval 0#ClientAliveCountMax 3# 修改这两行ClientAliveInterval 30 # 客户端每隔多少秒向服务发送一个心跳数据ClientAliveCountMax 86400 # 客户端多少秒没有相应,服务器自动断掉连接# 重启sshd服务service sshd restart...

2020-09-08 23:06:19 1905

原创 阿里云Linux系统(CentOS)安装rocketmq,控制台

本例使用阿里云 CentOS系统安装rocketmq前需要安装jdk# 通过官网下载jdk jdk-8u211-linux-x64.tar.gz # 解压$ tar -zxvf jdk-8u211-linux-x64.tar.gz# 配置环境变量$ vi /etc/profile# 打开后添加JAVA_HOME={jdk解压位置}/jdk1.8.0_221JRE_HOME={jdk解压位置}/jdk1.8.0_221/jreCLASS_PATH=.:$JAVA_HOME/lib/dt

2020-09-07 19:25:02 1746

原创 jquery.qrcode.min.js 兼容 IE6

jquery.qrcode.min.js 兼容 IE6使用方式<!-- 二维码 --><div id = "qrcode"></div>// 渲染二维码$(function() { var url = window.location.href; $("#qrcode").qrcode({ render: "table", // 渲染方式有table方式和canvas方式 width: 150, //默认宽度 heigh

2020-08-14 17:25:35 996

原创 今日头条 巨量引擎 marketing api

今日头条 巨量引擎 marketing api有正在对接这个接口文档的开发者么?留个名创个群讨论一下

2020-08-12 16:08:20 5881 34

空空如也

空空如也

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

TA关注的人

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