自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringBoot中 Lua函数操作redis

LuaLua 是一个简洁、轻量、可扩展的脚本语言,它的特性有轻量:源码包只有核心库,编译后体积很小高效:由 ANSI C 写的,启动快、运行快内嵌:可内嵌到各种编程语言或系统中运行,提升静态语言的灵活性。如 OpenResty 就是将 Lua 嵌入到 nginx 中执行Redis 在 2.6 版本后,开始支持Lua脚本优点减少网络开销:多个请求通过脚本一次发送,减少网络延迟原子操作:将脚本作为一个整体执行,中间不会插入其他命令,无需使用事务复用:客户端发送的脚本永久存在re

2021-11-13 18:44:39 1256

原创 SpringBoot系列--自定义Starter

提到Spring Boot时,很多人想到的是它的自动化装配特性。当我们项目需要Redis、MongoDB时,只需要引入相应的 spring-boot-starter-data-redis、spring-boot-starter-data-mongodb包,Spring 自然会把这些redisTemplate、mongoTemplate 放进IOC容器管理。我们只需要在application.properties文件中关注对应的 url、password等基础配置信息。当然。这些Starter的实现思想仍然

2021-04-11 16:22:27 213

原创 设计模式系列--门面模式

定义门面模式又叫外观模式,提供了一个统一的接口,用来访问子系统中的一群接口。门面模式定义了一个高层接口,简化了调用过程,无需深入了解子系统,以防给子系统带来风险;减少系统依赖、松散耦合;更好的划分访问层次,提高了安全性;遵循迪米特法则,即最少知道原则实现在我们平常外出旅游时,需要乘坐交通工具,看地图,在线支付等。假如我们把旅行独立一个系统,地图独立一个系统,支付独立一个系统。在客户端看来,需要三个不同系统间的调用。使用门面模式后,我们只需要对客户端提供唯一的入口,三个系统交给门面类管理用户 Us

2020-12-02 14:51:23 258

原创 怎么判断目标点是否在指定地图版块上

场景最近工作中,遇到一个渲染热力图的场景。在最终的技术选型中,前端使用ECharts,后台只需要提供点的经纬度坐标即可。但是中期开发过程中存在个问题,由于数据量有限,后台能够获取的原始数据只有各个省份的几个市坐标点,这样前端在渲染的时候,就无法做出如图的效果。于是后台需要模拟坐标点的分布,根据已有的坐标点进行指定范围、指定数量级的随机扩散。每一个随机点需要确保在边境线内和陆地上。于是场景演化成了另一个几何问题——怎么判断目标点在指定平面上射线法:若从一点发出的射线穿越过平面内多边形的点的个数为偶数

2020-11-29 13:52:15 1291

原创 设计模式系列--解释器模式

定义解释器模式,给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。在解释器模式中由于语法是由很多类表示的,当语法规则更改时,只需修改相应的非终结符表达式即可;若扩展语法时,只需添加相应非终结符类即可。特征:为了解释一种语言,而为语言创建的解释器。实现给出一个运算表达式,根据解释器模式计算出相应的结果类结构图数字计算解释器接口 IArithmeticInterpreterpublic interface IArithmeticInterprete

2020-11-26 15:32:52 142

原创 设计模式系列--中介者模式

定义中介者模式又称为调解者模式或者调停者模式。用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦和松散,而且可以独立地改变它们之间的交互。核心:通过中介者解耦系统各层次对象的直接耦合,层次对象的对外依赖通信统统交给中介者转发。如上图,在未引入中介者之前,各个系统之间(特别多系统交互)耦合度太高,引用关系错综复杂。在引入中介者后,只需要把各自功能注册到中介者,由中介者来管理各个系统间的调用。实现在我们日常的微信、QQ多人聊天中,发信息时无需给群组的每个人发一遍,只需

2020-11-25 18:13:53 160

原创 设计模式系列--备忘录模式

定义备忘录模式又称为快照模式或令牌模式,是指在不破坏封装的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。备忘录模式可以简化发起人实体类职责,隔离状态存储与获取,实现了信息的封装,客户端无需关心状态的保存细节;备忘录可以提供状态回滚功能。但同样,由于状态的存储,备忘录模式也会带来相应的内存消耗问题。实现在我们日常的office 软件、图形软件操作中,一般都具有撤销回退功能。文本版本保存类 ArticleMementopublic class

2020-11-20 15:54:31 121

原创 设计模式系列--状态模式

定义状态模式也称为状态机模式,是允许对象在内部状态发生变化时改变它的行为,对象看起来好像修改了它的类。通常的对象内部都是使用数值类型来定义状态,状态的切换是通过赋值进行表现,不够直观;而使用状态类,在切换状态时,是以不同的类进行表示,转换目的更加明确。实现在我们日常接触的微信公众号或者微博中,好多场景都需要用户先登陆,然后才可以进行点赞、收藏、评论等。在整个流程中,用户从未登陆状态转变成登陆状态。抽象用户状态 AbstractUserStatepublic abstract class Abst

2020-11-19 16:05:37 184

原创 设计模式系列--观察者模式

定义观察者模式定义了对象之间的一对多依赖,让多个观察者对象同时监听一个主体对象。当主体对象发生变化时,它的所有依赖者(观察者)都会收到通知并更新。观察者模式主要用于在关联行为之间建立一套触发机制的场景,支持广播通信。观察者模式也被称为 发布-订阅模式。实现场景:新闻社开发了一套新闻订阅服务,他们会给每个订阅了该服务的用户推送早间新闻邮件。邮件服务器 MailServerpublic class MailServer extends Observable { private static M

2020-10-20 19:14:31 158

原创 设计模式系列--装饰者模式

定义装饰者模式是指在不改变原有对象的基础上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能)用于扩展一个类的功能或给一个类添加附加职责。动态的给一个对象添加功能,这些功能可以再动态的撤销。实现我们在购买新房的时候,一般都是毛坯房。所以在装修的时候,每增加一点设施,就会增加成本。抽象类 房间 AbstractRoompublic abstract class AbstractRoom { abstract String addFurniture(); abstra

2020-10-12 20:28:46 145

原创 git 拉取大文件超时解决方案

1、设置深度git cone --depth 1 https://gitee.com/tcwong/pengExpressMS.git2、配置文件git config --add core.compression -13、拉取master 分支git fetch --unshallow4、配置拉取所有分支代码进入项目根文件夹,修改 .git 隐藏文件夹目录中 config文件fetch = +refs/heads/master:refs/remotes/origin/maste

2020-08-31 15:37:54 2164

原创 设计模式系列--适配器模式

定义适配器模式是指将一个类的接口转换成客户期望的另一个接口,使原本的接口不兼容的类可以一起工作。适配器模式是对已存在模型进行向上或者向下兼容提供的一种解决方案。实现现实中经常出现的一种场景:我们在海外买的电器,由于每个国家的电压标准不同,所以电器的指定电压也不同,这时候如果我们想正常使用,就用使用电压适配器,当然生活中还有很多插头转化器。220V 标压类 AC220public class AC220 { public int output220V() { int output = 22

2020-08-08 16:07:22 175

原创 设计模式系列--模板模式

定义模板模式通常又叫模板方法模式,是指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤。实现方式现在要设计一个购物优选系统,在系统内你可以随意选择商品,在结算时再选择货源如淘宝、京东、当当、拼多多等购物平台。DoShopping 接口public interface DoShopping { void doShopping();}DoShoppingOnlineTemplate 模板类public abstr

2020-07-25 20:24:29 217

原创 设计模式系列--策略模式

定义策略模式是指定义了算法家族、分别封装起来,让他们之间可以互相替换。此模式让算法的变化不会影响到使用算法的用户。实现方式我们平常在使用App登陆账号时,可以使用App本身账号,也可以使用第三方账号如支付宝、微信、微博等进行一键登录。登陆接口 Loginpublic interface Login { String doLogin(String loginWay);}支付宝登陆public class AlipayLogin implements Login { @Override

2020-07-19 15:46:29 188

原创 设计模式系列--委派模式

定义委派模式就是负责任务的调用和分配,跟 设计模式系列–代理模式很像,可以看作是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,而委派模式注重结果。实现方式一般在公司,老板有什么想法,首先是和他手下的管理人员沟通,管理人员将老板的想法落实后,将任务拆解派发给下面的员工。IEmployee 员工接口public interface IEmployee { void doThing(String command);}EmployeeA 公司后台开发工程师public class

2020-05-25 22:02:14 219

原创 设计模式系列--责任链模式

定义责任链模式是将链中每一个节点看作是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象。当一个请求从链式的首端发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止。即 将多个处理逻辑对象形成一条链,并沿着这条链传递请求,直到链上的某一个对象决定处理此请求。实现方式模拟用户登陆过程,首先系统需要验证输入参数是否合法,然后验证用户是否存在,最后进行权限验证。本案例结合了建造者模式思想进行演示,不熟悉建造者模式的读者可先前往 设计模式系列–建造者模式 熟悉Us

2020-05-24 13:37:53 384

原创 设计模式系列--建造者模式

定义建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不用的表示。建造者模式使用户更加注重对象创建的过程,不需要关注创建的内部细节。实现方式我们平常点奶茶,可以选择大杯、中杯、小杯,什么水果,什么奶,什么茶底等Tea对象public class Tea { private String teaSize; private String milkType; private String fruitType; private String teaType;

2020-05-24 10:32:07 266

原创 设计模式系列--代理模式

定义代理模式是指为其他对象提供一种代理,以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介作用。根据被代理对象的类型,代理模式分为静态代理和动态代理。静态代理只可以代理指定类型,动态代理不限制类型。静态代理定义接口 Personpublic interface Person { void findHouse();}被代理对象 Renterpublic class...

2020-05-05 22:30:48 1007

原创 设计模式系列--原型模式

定义原型模式是指 通过原型实例指定创建对象的类型,克隆该实例属性相同的新对象。调用者不需要知道任何创建细节,不调用构造函数。因此原型模式也被称为克隆模式。适用场景:1、类初始化消耗资源较多2、new 产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)3、构造函数比较复杂原型模式创建方式分为两种:浅克隆 ,深克隆实现方式1、浅克隆克隆出的新对象的引用属性内存地址还是指向原实例...

2020-05-04 22:16:59 183

原创 设计模式系列--单例模式

定义确保一个类在任何情况下,如运行容器中,都只有一个实例,实现构造函数私有化,并提供一个全局访问点。实现方式1 、饿汉式public class HungrySingleton { private static final HungrySingleton INSTANCE = new HungrySingleton(); private HungrySingleton() { ...

2020-05-03 18:26:33 206

原创 设计模式系列--软件设计原则

设计原则,是我们在实际软件开发中尽可能遵循的一套规则,但不是必须遵守的规则。同时设计原则也是设计模式的基础。开闭原则对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节,即面向抽象编程。可以提高软件的复用性、可维护性、稳定性。定义一个Car接口public interface Car { int getPrice();}奔驰品牌车public class BenzCar imp...

2020-04-20 21:37:27 201

原创 SpringBoot系列--Mysql、Sqlserver 双数据源配置

在最近的项目开发中,需要用到Mysql和Sqlserverl两种数据库,也就是要进行双数据源的配置。网上看了下,大多比较繁琐,且不够明确。今天分享一个在SpringBoot 中简洁高效配置双数据源的方案。项目结构如下:application.properties配置文件spring.datasource.mysql.username=rootspring.datasource.mysql...

2020-04-18 14:22:07 1517 2

原创 SpringBoot系列--基于@Autowired注解实现策略模式

在项目实际开发中,常常会遇到用户鉴权、分等级查询、接口调用等复杂问题。如我们平常看到的视频分享,可以分享到 微信、微博、支付宝、淘宝等,都是调用不同接口,如果我们用if else 来做这些调用,会让代码特别冗余,也违反了开闭原则(对扩展开放,对修改关闭),每次加入新接口都要修改源代码,存在很大的安全隐患。为解决这类问题,我们常常使用设计模式中的策略模式(Strategy Pattern)。我们知...

2020-04-12 20:09:46 1333

原创 Redis 系列-- SpringBoot中redisTemplate 的操作(四)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(四)HSetredis 数据结构中,set用于去重,hset 则用于 去重加排序.在hset 中,有两个概念:1⃣️ rank 集合的下标2⃣️score 集合排序的依据值下面就来说一说hset 的基本操作1、添加数据 并按score 排序 有相同的key-value score 会累加 Boo...

2019-09-01 11:26:36 533

原创 Redis 系列-- SpringBoot中redisTemplate 的操作(三)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(三)Set1、添加set类型,并且如果存在的key-value,则不会重复再添加 Long add = redisTemplate.opsForSet().add(key, object);2、比较两个集合的不同值,并返回第一个key 的 所有不同值 Set difference = redi...

2019-08-31 16:59:05 327

原创 Redis 系列-- SpringBoot中redisTemplate 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)List 类型的操作1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name);2、 向列表右侧添加数据 Long rightPush = redisTemplate.opsForList(...

2019-08-30 08:57:18 245

原创 Redis 系列-- SpringBoot中redisTemplate 的操作(一)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(一)在Java 操作redis 时,有很多工具,redis 官网中,就有很多操作,目前主流开发框架SpringBoot 中,当然也有集成好的操作redis的工具–redisTemplate,下面就来说一说它的基本操作。依赖包 <dependency> <groupId>org.s...

2019-08-28 23:30:52 2101 2

原创 Redis 系列-- mac 版本的安装

Redis 之 mac 版本的安装Redis 版本 包含 Windows、Lunix、Mac OS 等,博主就简答说下mac版本的安装吧。HomeBrew 方式安装brew search redis这个命令可以查看Redis 版本,brew install redis默认就会安装最新版本如图,安装成功后可以看到,redis 安装地址/usr/local/Cellar/...

2019-08-26 21:39:37 244

原创 idea手动导包 操作

把要导入的包复制文件夹只 out 目录下的 artifacts 下的web-info,在下面新建lib 把jar放进去即可二、把包 导入项目file–projectstructure --lib 找到刚刚放置的jar 添加 后 rebuild project 即可...

2019-03-29 20:51:37 5330

原创 IDEA 使用 TOMCAT 中文乱码的各种问题

IntelliJ IDEA 使用 TOMCAT 中文乱码的各种问题一、工程乱码 已设置过滤器,代码运行 返回数据仍然乱码打开File-Setting, 找到File Encodings这个选项,把encoding设置成你工程的编码即可,一般是UTF-8,如下图(红框的地方),然后重新rebuild一下,基本就行了二、执行main函数时,控制台乱码同样是打开setting,找到 Buil...

2019-03-29 20:44:40 400

空空如也

空空如也

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

TA关注的人

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