首页
学习
活动
专区
工具
TVP
发布

码猿技术专栏

欢迎关注微信公众号【码猿技术专栏】
专栏作者
290
文章
297614
阅读量
51
订阅数
公司的这种打包启动方式,我简直惊呆了!
大家都知道,SpringBoot应用最终会打出一个Fat Jar, 里面包含了用到的全部依赖,启动也非常简单,java -jar xxx.jar即可。
爱撒谎的男孩
2023-01-06
8320
Zookeeper实现分布式锁
导读 真是有人(锁)的地方就有江湖(事务),今天不谈江湖,来撩撩人。 分布式锁的概念、为什么使用分布式锁,想必大家已经很清楚了。前段时间作者写过Redis是如何实现分布式锁,今天这篇文章来谈谈Zookeeper是如何实现分布式锁的。 陈某今天分别从如下几个方面来详细讲讲ZK如何实现分布式锁: ZK的四种节点 排它锁的实现 读写锁的实现 Curator实现分步式锁 ZK的四种节点 持久性节点:节点创建后将会一直存在 临时节点:临时节点的生命周期和当前会话绑定,一旦当前会话断开临时节点也会删除,当然可以主动删除
爱撒谎的男孩
2020-04-21
6060
Mysql中orderby底层执行流程
前言 在实际的开发中一定会碰到根据某个字段进行排序后来显示结果的需求,但是你真的理解order by在 Mysql 底层是如何执行的吗? 假设你要查询城市是苏州的所有人名字,并且按照姓名进行排序返回前 1000 个人的姓名、年龄,这条 sql 语句应该如何写? 首先创建一张用户表,sql 语句如下: CREATE TABLE user ( id int(11) NOT NULL, city varchar(16) NOT NULL, name varchar(16) NOT NULL, ag
爱撒谎的男孩
2020-04-21
1.8K0
IDEA调试技巧
① 以Debug模式启动服务,左边的一个按钮则是以Run模式启动。在开发中,我一般会直接启动Debug模式,方便随时调试代码。
爱撒谎的男孩
2020-03-24
1.3K0
接口限流算法
文章目录 1. 导读 2. 限流的常见几种算法 2.1. 固定窗口计数器 2.2. 滑动窗口计数器 2.3. 漏桶算法 2.4. 令牌桶算法 3. 单体应用实现 4. 分布式限流 4.1. Redis如何实现 4.2. 开撸 5. 笔者有话说 导读 前几天和一个朋友讨论了他们公司的系统问题,传统的单体应用,集群部署,他说近期服务的并发量可能会出现瞬时增加的风险,虽然部署了集群,但是通过压测后发现请求延迟仍然是很大,想问问我有什么改进的地方。我沉思了一会,现在去改架构显然是不可能的,于是我给出了一个建议,
爱撒谎的男孩
2020-03-24
4680
一文搞懂Spring-AMQP
12//设置消息发送ack,默认noneconnectionFactory.setPublisherConfirmType(CachingConnectionFactory.ConfirmType.CORRELATED);
爱撒谎的男孩
2020-03-11
1K0
Spring解决循环依赖
1、Husband创建Bean,先判断缓存池中是否存在,存在直接返回,不存在进入createBean创建的流程,调用构造方法创建一个早期的Bean【未进行属性赋值】,创建成功将其放入二级缓存earlySingletonObjects中,之后又调用addSingletonFactory方法将其放入三级缓存中并且将二级缓存中的移除,之后调用populateBean为属性赋值,在@Autowired的后置处理器中查找需要注入的依赖,发现Husband中的一个属性Wife,因此调用getBean方法从容器中获取,但是此时的Wife还未创建,因此又进入了doGetBean的流程,但是此时Wife并没有创建,因此在一二三级缓存中不能获取,又执行createBean方法创建Wife,同样调用构造方法创建一个早期Bean放入二级缓存中,调用addSingletonFactory放入三级缓存并移除二级缓存,然后调用populateBean方法为Wife属性赋值,在@Autowired的后置处理器中查找需要注入的依赖,发现Wife类中有一个属性是Husband,因此调用getBean方法,再次调用doGetBean获取Husband,但是此时的Husband已经创建成功【未赋值】,存放在三级缓存中,因此直接从三级缓存中取出Husband赋值给Wife属性,至此Wife属性已经赋值成功,直接添加到一级缓存(singletonObjects)中并且移除三级缓存,直接返回给Husband赋值,因此Husband中的属性也持有了Wife的引用,都创建并且赋值成功了。
爱撒谎的男孩
2019-12-31
8370
InstantiationAwareBeanPostProcessor源码解析
文章目录 1. 简介 2. Bean加载顺序 3. InstantiationAwareBeanPostProcessor接口方法的执行顺序 4. 方法解析 5. 实例 6. 源码梳理 7. Autowired源码解析 8. 总结 简介 继承BeanPostProcessor接口,在此基础上又定义了三个方法,分别在Bean实例化前后【不是初始化】执行。 从上面的介绍可以看到,这个接口相对于BeanPostProcessor功能更加强大,一个接口承担了Bean的实例化前后、初始化前后责任。 Bean加载顺
爱撒谎的男孩
2019-12-31
9790
BeanWrapper解析
文章目录 1. 简介 2. 常用API 3. PropertyDescriptor 4. 实例 简介 BeanWrapper是Spring底层经常使用的一个接口,简单来说是对Bean的一种包装,包括
爱撒谎的男孩
2019-12-31
5610
Feign(负载均衡)
文章目录 1. Feign 负载均衡 1.1. 简介 1.2. 使用 1.3. 注意 1.4. 负载均衡算法 Feign 负载均衡 简介 Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。 声明式的接口+注解 使用的是轮询的算法 使用 添加依赖(消费者端
爱撒谎的男孩
2019-12-31
9240
SpringBoot实现BCrypt密码加密
文章目录 1. SpringBoot 实现 BCrypt密码加密 1.1. 前言 1.2. API 1.3. 使用 1.4. 源码 SpringBoot 实现 BCrypt密码加密 前言 出于安全的考虑,一些敏感的信息是绝对不能以明文的方式存储在数据库中的,比如密码通常是通过哈希算法进行加密的。有很多标准的算法比如SHA和MD5,结合salt(盐)是一种不错的选择,但是如果知道其加密的规则还是相对不安全。 Spring security提供了BCryptPasswordEncoder类,使用Bcrypt
爱撒谎的男孩
2019-12-31
5.4K0
springBoot集成RestTemplate
文章目录 1. SpringBoot集成RestTemplate 1.1. 构造restful风格的api 1.2. 注入 1.3. 详解 1.3.1. GET(获取数据) 1.3.1.1. 生产 1.3.1.2. 消费 1.3.2. POST(新建、添加) 1.3.3. PUT(更新) 1.3.4. DELETE(删除) 1.4. 参考文章 SpringBoot集成RestTemplate 构造restful风格的api @RestController public class DepetContro
爱撒谎的男孩
2019-12-31
9830
SpringBoot集成lombok
文章目录 1. SpringBoot集成lombok 1.1. STS安装 1.2. 常用的注解 1.3. 使用 SpringBoot集成lombok STS安装 https://blog.csdn.net/blueheart20/article/details/52909775 常用的注解 @Getter: 自动生成Getter方法 @NonNull: 标识对象是否为空,为空则抛出异常 @Setter: 自动生成Setter @ToString: 覆盖tostring方法 @Slf4j:
爱撒谎的男孩
2019-12-31
5020
Token认证
文章目录 1. 认证机制 1.1. 常见的几种认证机制 1.1.1. HTTP Basic Auth 1.1.2. OAuth(开放授权) 1.1.3. Cookie/Session 认证机制 1.1.4. 基于 Token 的认证机制 1.1.5. 有状态服务和无状态服务 1.2. 基于JWT(JSON WEB TOKEN)的Token认证机制实现 1.2.1. 头部(Header) 1.2.2. 载荷(Payload) 1.2.3. 签名(Signature) 1.3. JJWT 1.3.1. 添加
爱撒谎的男孩
2019-12-31
2K0
spring的Bean加载过程
1、找准入口 ,使用ClassPathXmlApplicationContext加载配置文件,用于加载classPath下的配置文件
爱撒谎的男孩
2019-12-31
1.7K0
Spring-Data-Redis
2、需要在spring-data-redis中开启redis事务,只需要添加如下一条语句即可
爱撒谎的男孩
2019-12-31
5440
数据库中间件之Mycat
2、在schema.xml中,table中增加属性autoIncrement值为true,添加mycat_sequence表
爱撒谎的男孩
2019-12-31
6590
Shell编程
文章目录 1. Shell编程 1.1. 变量 1.2. 位置参数变量 1.2.1. $*与$@的区别 1.2.2. 实例 1.3. 预定义变量 1.4. 运算符 1.4.1. 基本语法 1.4.2. 实例 1.5. 判断语句 1.5.1. 基本语法 1.5.2. 常用判断条件 1.5.3. 实例 1.6. 流程控制 1.6.1. if 1.6.1.1. 基本语法 1.6.1.2. 实例 1.6.2. case 1.6.2.1. 基本语法 1.6.2.2. 实例 1.6.3. for循环 1.6.3.1
爱撒谎的男孩
2019-12-31
5090
Nginx之location详解
3、一旦配置请求location映射到了指定的位置,那么下面全部的文件夹和文件都可以映射到,不需要在配置对其的映射,比如,但是如果使用其中的文件名重新映射了地址,那么这个路径将不能使用
爱撒谎的男孩
2019-12-31
6070
es中的mapping
文章目录 1. Mapping 1.1. 核心数据类型 1.2. 复杂核心类型 1.3. 手动指定Mapping Mapping GET /index/type/_mapping 我们可以使用上面的语句检查自己创建的文档的映射,如果类型映射错误,那么将会造成意想不到的结果 核心数据类型 Elasticsearch 支持 如下简单域类型: 字符串: string text :支持分词 keyword :不分词 整数 : byte, short, integer, long 浮点数: float, dou
爱撒谎的男孩
2019-12-31
5900
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档