自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 以商品超卖为例讲解Redis分布式锁

本案例主要讲解Redis实现分布式锁的两种实现方式:Jedis实现、Redisson实现。网上关于这方面讲解太多了,Van自认为文笔没他们好,还是用示例代码说明。一、jedis 实现该方案只考虑Redis单机部署的场景1.1 加锁1.1.1 原理jedis.set(String key, String value, String nxxx, String expx, i...

2019-09-21 00:34:00 316

转载 如何从 if-else 的参数校验中解放出来?

背景在开发中经常需要写一些字段校验的代码,比如非空,长度限制,邮箱格式验证等等,导致充满了if-else 的代码,不仅相当冗长,而且很让人抓狂。hibernate validator(官方文档)提供了一套比较完善、便捷的验证实现方式。它定义了很多常用的校验注解,我们可以直接将这些注解加在我们JavaBean的属性上面,就可以在需要校验的时候进行校验了。在Spring Boot 火...

2019-09-11 23:47:00 464

转载 分布式全局唯一ID生成策略​

一、背景分布式系统中我们会对一些数据量大的业务进行分拆,如:用户表,订单表。因为数据量巨大一张表无法承接,就会对其进行分库分表。但一旦涉及到分库分表,就会引申出分布式系统中唯一主键ID的生成问题。1.1 唯一ID的特性整个系统ID唯一;ID是数字类型,而且是趋势递增;ID简短,查询效率快。1.2 递增与趋势递增递增趋势递增第一次生成的ID为12,下一...

2019-09-05 00:04:00 161

转载 你真的会用单例模式?

单例模式可以说只要是一个合格的开发都会写,但是如果要深究,小小的单例模式可以牵扯到很多东西,比如:多线程是否安全?是否懒加载?性能等等。还有你知道几种单例模式的写法呢?如何防止反射破坏单例模式?一、 单例模式1.1 定义单例模式就是在程序运行中只实例化一次,创建一个全局唯一对象。有点像 Java 的静态变量,但是单例模式要优于静态变量:静态变量在程序启动的时候JVM就会进行加载...

2019-09-02 01:00:00 104

转载 浅谈账号系统设计

现在几乎大部分的App都支持使用多个第三方账号进行登录,如:微信、QQ、微博等,我们把此称为多账号统一登陆。而这些账号的表设计,流程设计至关重要,不然后续扩展性贼差。本文不提供任何代码实操,但是梳理一下博主根据我司账号模块的设计,提供思路,仅供参考。一、 自建的登陆体系1.1 手机号登陆注册该设计的思路是每个手机号对应一个用户,手机号为必填项。流程:首先输入手机号,然后发...

2019-08-29 00:48:00 1143

转载 高并发下浏览量入库设计

一、背景文章浏览量统计,low的做法是:用户每次浏览,前端会发送一个GET请求获取一篇文章详情时,会把这篇文章的浏览量+1,存进数据库里。1.1 这么做,有几个问题:在GET请求的业务逻辑里进行了数据的写操作!并发高的话,数据库压力太大;同时,如果文章做了缓存和搜索引擎如ElasticSearch的存储,同步更新缓存和ElasticSearch更新同步更新太耗时,不更新就...

2019-08-27 00:25:00 909

转载 优秀的代码应该如何分层

说起应用分层,大部分人都会认为这个不是很简单嘛 就Controller,Service, Mapper三层。看起来简单,很多人其实并没有把他们职责划分开,在很多代码中,Controller做的逻辑比Service还多,Service往往当成透传了,这其实是很多人开发代码都没有注意到的地方,反正功能也能用,至于放哪无所谓呗。这样往往造成后面代码无法复用,层级关系混乱,对后续代码的维护非常...

2019-08-25 23:53:00 191

转载 SpringBoot:处理跨域请求

一、跨域背景1.1 何为跨域?Url的一般格式:协议 + 域名(子域名 + 主域名) + 端口号 + 资源地址示例:https://www.dustyblog.cn:8080/say/Hello 是由https + www + dustyblog.cn + 8080 + say/Hello组成。只要协议,子域名,主域名,端口号这四项组成部分中有一项不同,就可以认为是不同...

2019-08-25 16:46:00 150

转载 SpringBoot 配置 AOP 打印日志

在项目开发中,日志系统是必不可少的,用AOP在Web的请求做入参和出参的参数打印,同时对异常进行日志打印,避免重复的手写日志,完整案例见文末源码。一、Spring AOPAOP(Aspect-Oriented Programming,面向切面编程),它利用一种"横切"的技术,将那些多个类的共同行为封装到一个可重用的模块。便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来...

2019-08-24 23:21:00 135

转载 SpringBoot 异步输出 Logback 日志

一、介绍1.1 Logback  Logback是由log4j创始人设计的另一个开源日志组件,它分为下面下个模块:logback-core:其它两个模块的基础模块logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logginglogback-access:访问模块与Ser...

2019-08-23 08:36:00 97

转载 SpringBoot:实现定时任务

一、定时任务实现的几种方式:Timer这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。ScheduledExecutorService也jdk自带的一个类;是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行...

2019-08-21 23:16:00 86

转载 Spring Boot: 配置文件详解

SpringBoot是为了简化Spring应用的创建、运行、调试、部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖就可以轻易的搭建出一个 WEB 工程。一、准备前提为了让SpringBoot更好的生成数据,我们需要添加如下依赖(该依赖可以不添加,但是在 IDEA 不会有属性提示),该依赖只会在编译时调...

2019-08-21 17:44:00 112

转载 Git 实用技巧:git stash

我们经常会遇到这样的情况:正在dev分支开发新功能,做到一半时有人过来反馈一个bug,让马上解决,但是新功能做到了一半你又不想提交,这时就可以使用git stash命令先把当前进度保存起来。然后切换到另一个分支去修改bug,修改完提交后,再切回dev分支,使用git stash pop来恢复之前的进度继续开发新功能。1. stash当前修改git stash:保存当前工作进...

2019-08-20 23:07:00 78

空空如也

空空如也

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

TA关注的人

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