- 博客(86)
- 资源 (18)
- 收藏
- 关注
原创 Spring注解驱动开发
文章目录组件注册@Configuration@ComponentScanFilterTypeFilterType.CUSTOM@Scope@Lazy==@Conditional====@import==FactoryBeanBean生命周期@Bean指定初始化和销毁InitializingBean和DisposableBean@PostConstruct和@PreDestory@BeanPostProcessor@BeanPostProcessor原理@BeanPostProcessor在Spring底层使
2020-07-05 20:37:24
660
原创 Spring源码系列
文章目录IOC问题解答AOP入口代理对象生产代理对象执行方法aop流程总结问题解答注解事务 IOC public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. prepareRefresh(); // Tell the subclass t
2021-06-06 20:56:36
579
3
原创 AQS详解
文章目录学习前提什么是AQSCLH队列加锁过程acquire() 终于还是对AQS下手了,学习Java并发这是必须要学习的知识。看了好多视频以及博客,以下是想以自己的思路去整理AQS的学习思路。 学习前提 了解Java中的锁:公平锁和非公平锁、共享锁和独占锁等(传送门:) 知道CAS原理 知道volatile原理 了解链表数据结构 对多线程有一定的了解 什么是AQS 并发使计算机得以充分利用计算能力,有效率地完成各类程序任务。当深入地学习Java中的并发,不可避免地将学习到锁 —— 使并发的资源能被正确
2021-05-12 15:55:08
476
原创 2021-05-11
内容大块 问题 要点 Java基础 Object类都有哪些方法? 谈一下==和equals的区别? 基本类型比较值,引用类型没有重写equals的比较JVM中的地址 重写(Override)和重载的区别? 两个对象的 hashCode() 相同,那么 equals() 也一定为 true吗? 为什么重写equals方法就要重写hashCode方法? (答出notify和notifyAll)notify和notifyAll有什么区别? (答出wait的)wait和Thread.sleep方法由和异同
2021-05-11 09:45:47
208
原创 Netty
文章目录Netty介绍Netty应用场景I/O模型基本说明同步 vs. 异步阻塞 vs. 非阻塞BIOBIO问题分析NIONIO和BIO的比较三大核心组件关系BufferBuffer基本属性 参考文章 http://www.jasongj.com/java/nio_reactor/ Netty介绍 是由JBOSS提供的一个Java开源框架 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络IO程序。(目前是同步非阻塞) 主要针对在TCP协议下,面向Clients端的高并发应用
2021-04-07 16:55:06
719
原创 Spring Boot启动原理
文章目录1.Spring Boot启动原理 源码分析jar为spring Boot 2.3.1 1.Spring Boot启动原理 创建SpringApplication 保存信息 判断应用类型 是webflux还是servlet ApplicationContextInitializer:去spring.factories找 ApplicationContextInitializer ApplicationListener:应用监听器 去spring.factories找 ApplicationCon
2021-01-20 14:37:32
136
原创 分布式方案简介
很不错的一篇介绍,推荐大家阅读 传送门:https://segmentfault.com/a/1190000038424744
2020-12-18 17:29:45
259
2
原创 Spring Boot+Atomikos+Mybatis+多数据源
[TOC] 背景介绍 因业务需求,需要使用多数据源,无法避免带来了多数据源事务的问题,经过选型,决定使用Atomikos 数据源配置 package com.sf.ares.service.web.config; import com.alibaba.druid.pool.xa.DruidXADataSource; import com.atomikos.jdbc.AtomikosDataSourceBean; import com.sf.erui.mybatis.SqlSessionFactoryBe
2020-11-30 17:13:51
531
原创 Idea使用Gradle项目总结
文章目录建议使用自定义GRADLE仓库解决main方法编译整个项目的问题解决jsp等静态文件不能更新问题解决每次打开项目,都会Bulid Task问题 建议使用自定义GRADLE仓库 解决main方法编译整个项目的问题 解决jsp等静态文件不能更新问题 使用jrebel 如果有好的方式,请指出。 解决每次打开项目,都会Bulid Task问题 未解决! ...
2020-10-12 09:44:45
335
原创 Mysql
文章目录Sql性能下降原因join查询sql执行顺序7 种join索引简介优势和劣势索引分类检索原理建立索引的情况建立索引不能建立性能分析Mysql自带优化器Mysql常见瓶颈Explain能干吗具体字段解释idselect_type和tabletypepossible_key 和keykey_lenrefrowsextra索引优化索引失效查询截取分析 Sql性能下降原因 执行时间长 等待时间长 查询语句烂 索引失效 关联太多 服务器调优以及各个参数设置 join查询 sql执行顺序 FROM ON
2020-09-15 08:17:38
167
原创 线程池
文章目录为什么使用线程池线程池如何使用newFixedThreadPoolnewSingleThreadExecutornewCachedThreadPoolnewScheduleThreadPool线程池的7大重要参数corePoolSizemaximumPoolSizeworkQueuekeepAliveTimeunitthreadFactoryhandler拒绝策略线程池底层工作原理工作中你用到哪个?手写线程池线程池配置合理参数CPU密集型IO密集型死锁编码及定位分析死锁原因死锁代码以及分析解决方案
2020-08-23 11:10:01
698
原创 Semaphore
文章目录Semaphore基础知识使用 Semaphore 加锁的几种常用方式 Synchronized lock实现类 semaphore 基础知识 信号量主要用于 多个共享资源的互斥使用 并发线程数的控制 使用 public static void main(String[] args) { Semaphore semaphore = new Semaphore(3); for(int i=0;i<=6;i++ ){ new T
2020-08-22 20:33:16
208
原创 CyclicBarrier
文章目录CyclicBarrier基本理念用法Barrier被破坏CountDownLatch和CyclicBarrier CyclicBarrier 基本理念 构造方法 CyclicBarrier(int parties) 创建一个新的 CyclicBarrier,它将在给定数量的参与者(线程)处于等待状态时启动,但它不会在启动 barrier 时执行预定义的操作。 CyclicBarrier(int parties, Runnable barrierAction) 创建一个新的 CyclicBarrie
2020-08-22 20:32:32
176
原创 CountDownLatch
CountDownLatch 基本知识 CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。 CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成一些任务,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务。 用法 static Cou
2020-08-16 20:50:20
188
原创 Java锁
文章目录基础知识乐观锁和悲观锁自旋锁 VS 适应性自旋锁无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁公平锁和非公平锁可重入锁和递归锁独享锁和共享锁 文章来源 https://mp.weixin.qq.com/s/sA01gxC4EbgypCsQt5pVog https://mp.weixin.qq.com/s/E2fOUHOabm10k_EVugX08g https://www.bilibili.com/video/BV18b411M7xz?p=26 基础知识 乐观锁和悲观锁 乐观锁:认为自己在使
2020-08-14 07:31:55
332
原创 CAS
文章目录CAS是什么?CAS原理AtomicInteger方法调用缺点ABA问题解决ABA原子引用AtomicMarkableReference 文章来源于: https://www.bilibili.com/video/BV18b411M7xz?p=12 CAS是什么? Compare Ana Swap 一条CPU的原子指令,不会造成数据不一致问题 是乐观锁的一种实现 public static void main(String[] args) { AtomicInteger
2020-08-06 10:01:48
330
原创 Sentinel
文章目录Sentinel基本知识下载安装初始化监控流控规则流控模式流控效果降级热点参数例外项系统自适应限流(全局)SentinelResource熔断(重点)持久化(重点) git地址:https://github.com/sunuanwuhou/SpringCloud2020.git Sentinel 基本知识 git: https://github.com/alibaba/Sentinel 和Hystrix: https://www.jianshu.com/p/d85c0ed44235 Sentinel
2020-08-05 14:25:36
514
原创 Nacos
文章目录Nacos基本知识是什么?Nacos注册中心服务注册中心对比提升Nacos服务配置中心基础配置分类配置 git地址:https://github.com/sunuanwuhou/SpringCloud2020.git Nacos 基本知识 git: https://github.com/alibaba/nacos Nacos官网: https://nacos.io/zh-cn/ Spring Cloud Alibba: https://github.com/alibaba/spring-cl
2020-08-05 14:24:47
350
原创 GateWay
文章目录GateWay基础知识为什么不用Zuul特性三大核心介绍实战 git地址:https://github.com/sunuanwuhou/SpringCloud2020.git GateWay 基础知识 官网:https://spring.io/projects/spring-cloud-gateway GateWay是 zuul1.x的替代 是基于WebFlux框架(异步非阻塞)实现的,底层是Reactor模式通信框架Netty 这里留一个疑问,为什么网关前面还有一个Nginx? 为什么不用Zuu
2020-08-05 14:23:48
508
原创 Hystrix
文章目录Hystrix基础知识降级实战客户端解决服务端解决熔断实战Dashboard git地址:https://github.com/sunuanwuhou/SpringCloud2020.git Hystrix 基础知识 Hystrix设计目标: 对来自依赖的延迟和故障进行防护和控制——这些依赖通常都是通过网络访问的 阻止故障的连锁反应 快速失败并迅速恢复 回退并优雅降级 提供近实时的监控与告警 Hystrix遵循的设计原则: 防止任何单独的依赖耗尽资源(线程) 过载立即切断并快速失败,防
2020-08-05 14:23:08
304
原创 OpenFeign
文章目录FeignFeign和OpenFeign区别实战超时设置日志打印自定义配置修改为okhttp原理 git地址:https://github.com/sunuanwuhou/SpringCloud2020.git Feign Feign是一个声明式Web Service客户端,使用Feign让编写Web Service更加简单 使用方法是:定义一个服务接口,然后在上面添加注解 Feign与Eureke和Ribbon组合使用实现负载均衡 git地址:https://github.com/spring-c
2020-08-05 14:22:31
585
原创 Ribbon
文章目录Ribbon负载均衡算法轮训原理源码手写 git地址:https://github.com/sunuanwuhou/SpringCloud2020.git Ribbon 定义:负载均衡+RestTemplate ribbon :客户端 负载均衡调用工具 nginx :是服务端 区别在于:客户端是在发送请求之前,进行负载均衡算法 负载均衡算法 IRule 默认为轮训 替换负载均衡规则 自定义配置类不能放在@componentScan所扫描的当前包以及子包下,会被适用于全局ribbon规则 @Co
2020-08-05 14:21:17
214
原创 注册中心
文章目录项目搭建父工程项目搭建支付模块搭建热部署消费者订单模块Eureka服务治理服务注册2个组件集群原理信息完善Discovery自我保护zookeeperconsul三种注册中心 git地址:https://github.com/sunuanwuhou/SpringCloud2020.git 项目搭建 父工程项目搭建 dependencyManagement只是申明依赖了,不引入依赖 子类不指定使用父类依赖,指定使用指定的。 mvn install 支付模块搭建 payment8081模块 建
2020-08-05 14:20:28
303
原创 注册中心
文章目录项目搭建父工程项目搭建支付模块搭建热部署消费者订单模块Eureka服务治理服务注册2个组件集群原理信息完善Discovery自我保护zookeeperconsul三种注册中心 git地址:https://github.com/sunuanwuhou/SpringCloud2020.git 项目搭建 父工程项目搭建 dependencyManagement只是申明依赖了,不引入依赖 子类不指定使用父类依赖,指定使用指定的。 mvn install 支付模块搭建 payment8081模块 建
2020-07-29 16:58:02
448
原创 基础知识
文章目录什么是微服务Boot和Cloud版本选型Spring BootSpring CloudSpringBoot和SrpingCloud版本依赖详细版本依赖本次版本选择 什么是微服务 https://www.cnblogs.com/xiao2shiqi/p/11298663.html Boot和Cloud版本选型 SpringBoot 一般是以数字作为版本选型 SpringBoot2.X版 SpringCloud 一般是以字母作为版本选型 SpringCloud H版 Spring Boot git
2020-07-28 10:08:24
275
原创 Aop源码分析
文章目录基础知识重要的BeanPostProcessoraop如何进行动态创建代理对象拦截AOP 基础知识 == 前提:需要了解Spring的IOC容器初始化过程== 疑问: 我们都知道aop是基于动态代理来实现aop的,那么aop的动态代理是在什么时候进行创建的? 在使用aop进行切面编程的时候,又是怎么运行的? 参考视频:https://www.bilibili.com/video/BV1ME411o7Uu?p=29 重要的BeanPostProcessor public interf
2020-07-19 21:25:28
329
原创 IOC容器初始化分析
[IOC] Spring容器创建过程 Spring容器的refresh() prepareRefresh(): 刷新前预处理 initPropertySources()初始化属性设置,需要继承applicationContext()重写此方法 getEnvironment().validateRequiredProperties();校验属性的合法性 earlyApplicationEvents = new LinkedHashSet();初始化事件容器,保存容器中的事件 beanFacto
2020-07-19 20:23:26
135
原创 Spring mvc在Spring boot下的流程
文章目录请求流程Spring boot加载Spring mvc组件过程DispatcherServletgetHandler()getHandlerAdapter()==ha.handle()== 请求流程 标记了@controller和@RequestMapping会在容器初始化的时候被扫描注册 当前端请求过来时 会解析url,先找到对应的@controller Spring boot加载Spring mvc组件过程 传统的我们实在web.xml中配置相关,那么Spring boot是怎么实现的呢?我们
2020-07-17 09:39:00
689
原创 Mybatis
文章目录MyBatis基本概念什么是mybatis工作原理工作原理详细流程如下配置文件mybatis-config.xmlXMLConfigBuilder MyBatis基本概念 什么是mybatis 2001年,Clinton Begin发起了一个名为iBATIS的开源项目,最初侧重于密码软件的研发,后来发展成为一款基于Java的持久层框架。 2004年,Clinton将iBATIS的名字和源码捐赠给了Apache软件基金会。 2010年,核心开发团队决定离开Apache软件基金会,并且将iBA
2020-07-04 19:02:44
157
翻译 SpringBoot
文章目录springboot的产生背景?spring boot pom依赖jar包的==@SpringBootApplication==Spring Boot 启动注解思维图**@SpringBootConfiguration**:**@EnableAutoConfiguration**:快速创建SpringBoot工程配置文件YML语法配置文件值获取@PropertySource&@ImportResource配置文件占位符Profile配置文件加载位置外部配置加载顺序(不太重要 略过)==自动配
2020-07-01 17:17:53
236
原创 sharding jdbc单库分表事物问题
技术使用 mysql Spring Data Jpa sharding jdbc Spring boot 项目没有拆分,因为是收费相关的。采用的是单体服务。 问题复现 在进行某笔账单进行红冲调整后,遇到了锁等待的问题。一下是自己的排查路径 数据库查明是哪个表被锁住,导致锁等待 -- 查询是否锁表 show OPEN TABLES where In_use > 0; -- 查询...
2020-04-26 10:00:52
762
原创 发送带图片的邮件
文章目录背景实现过程使用JavaMail定义你所需要的发票模板将图片转为二维码发送Service调用 背景 开完发票后需要发送邮件信息到客户邮箱中,此时的邮件是带有图片的,为此记录下本次开发过程 实现过程 使用JavaMail 配置文件 <dependency> <groupId>javax.mail</groupId> <artifactId>...
2020-04-13 15:28:40
777
翻译 消息队列
为什么要使用消息队列 我们从以下三个方面去回答:解耦、异步、削峰 解耦 传统模式下的系统架构由于系统耦合性太强,如果后续有其他系统接入,需要修改代码。 使用中间件:将消息写入消息队列,需要消息的系统自己从消息队列中订阅,原始系统不需要做任何修改。 异步 传统模式下:以同步方式运行程序,如果在高并发的情况下,会出现信息阻塞。 使用中间件:将消息写入消息队列,业务逻辑以异步方式运行,加快响应速度...
2019-12-11 10:59:37
163
原创 Maven
第一章 前言 在目前的项目构建中,可以说不使用maven的情况基本不存在。今天把maven的基本概念以及使用总结了下,供大家以后作为入门和查询使用。 第二章 正文 2.1.Maven概念 Maven作为一个构建工具: 帮助我们自动化构建,我们只需关注命令即可。 抽象构建过程,提供构建任务实现。 跨平台,提供对外一致的操作接口。 Maven作为一个依赖管理工具和项目管理工具: 借助坐标系统准...
2019-07-05 15:05:42
229
原创 jenkins自动化部署war
文章目录系统环境原理使用方法安装jdk mavenjenkins配置全局工具配置安装插件配置系统设置创建maven项目 系统环境 1.linux:ubuntu 2.java8 3.jenkins 2.138.3 war包 4.gitlab 5.mavne3.5.4 原理 配置git服务器,提交代码远程更新至jenkins服务器下 配置maven,将之前项目打包 编写ssh,运行项目 使用方法 ...
2018-12-04 10:08:01
495
原创 Navicat 将mysql、oracle表导出为数据字典
select column_name,column_type,is_nullable,column_comment from information_schema.columns where table_schema ='yck_bts_db' and table_name = 'da_menu'; 第一个为数据库名 第二个为表名 选择工具导出为excel excel转word h...
2018-09-12 14:30:29
2354
原创 Ubuntu 16.04.3 安装ORACLE
环境 下载oracle 环境 ubuntu 14.04 LTS amd64位 oracle11 jdk8 16G 下载oracle
2018-09-12 10:50:10
378
原创 Spring REST API异常处理机制
@ControllerAdvice @ExceptionHandler 实现方式 @ControllerAdvice @ControllerAdvice是一个@Component,用于定义@ExceptionHandler,@InitBinder和@ModelAttribute方法,适用于所有使用@RequestMapping方法。 Spring4之前,@Controlle...
2018-08-29 10:34:02
682
原创 Spring Boot RestTemplate
getForObject getForEntity postForObject HttpEntity postForEntity 配置超时 getForObject getForObject指get请求,并返回一个Object对象。这里有2个方法参数 第1个参数:请求的url地址 第2个参数:返回的结果类型,这里String.class表示返回结果是一个字符串。 @Re...
2018-06-11 13:43:08
888
原创 Linux下Spring Cloud多项目部署到tomcat下
去除spring boot内置Tomcat 修改tomcat内存大小 修改Tomcat配置文件,配置多个项目 去除spring boot内置Tomcat 1.去除jar包依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifa...
2018-05-02 21:05:15
3564
http上传文件客户端和服务端代码
2018-01-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅