自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring 容器的初始化过程 | 启动流程

目录高级容器的构造方法refresh() 刷新容器方法定义方法实现refresh()方法流程图spring容器的生命周期spring容器的扩展点prepareRefresh() 准备上下文的刷新obtainFreshBeanFactory() 获取最新的内置低级容器obtainFreshBeanFactory() 方法本身refreshBeanFactory() 刷新内置的低级容器prepareBeanFactory() 准备要使用的BeanFactory实例finishBeanFactoryInitial

2021-09-29 16:03:15 1016

原创 Spring ApplicationContext 体系结构

目录ApplicationContext体系结构图ResourceLoader 体系ResourceLoader 加载指定资源ResourcePatternResolver 加载匹配的所有资源DefaultResourceLoader 默认实现类Aware 体系Aware 标记bean的一个顶级接口BeanNameAware 设置beanNameBeanFactoryAware 设置BeanFactoryBeanClassLoaderAware 设置BeanClassLoader涉及的零散接口Environ

2021-09-29 12:48:29 1082

原创 Spring 事件驱动,自定义事件、应用监听器

目录概述源码分析ApplicationEvent 应用事件spring中常见的事件类型ApplicationListener 事件监听器ApplicationEventPublisher 事件发布器实际使用自定义事件编写事件监听器发布事件 概述spring引入了事件机制,支持 ApplicationEvent(应用事件),可以对指定事件进行监听处理。 事件驱动的3要素事件:具有事件源、发生时间2个属性事件发布器:负责发布事件事件监听器:监听指定类型的事件, 

2021-09-20 10:58:01 589

原创 SpringBoot 定时任务Schedule,异步任务Async

springboot的定时任务、异步任务都是使用单独的线程池,如果公司有线程池使用规范或觉得内置的线程池不满足需求,可以使用自定义的线程池。spring自带了定时任务、异步任务,springboot中自然也包含了进来,此处主要介绍在springboot中的使用。一个线程执行一个定时任务,如果线程数不够,会出现部分定时任务没有可用线程来执行的情况。定时任务、异步任务是spring|spring自带的,不需要额外添加依赖。通常会把定时|异步任务抽出来,统一放在单独的包、类中,方便维护。一共7个字段,依次是。

2021-09-20 07:02:17 1873

原创 Spring BeanFactory体系

目录BeanFactory体系类图单例体系SingletonBeanRegistry 单例的顶级接口DefaultSingletonBeanRegistry 单例的主要实现类FactoryBean体系FactoryBean 从工厂获取目标实例FactoryBeanRegistrySupport 整合FactoryBean与单例BeanFactory体系BeanFactory 容器的顶级接口ListableBeanFactory 可列单的BeanFactoryHierarchicalBeanFactory 可

2021-09-19 23:33:32 479

原创 Spring bean的获取、创建过程,生命周期,循环依赖

实例化bean后,会把当前bean对应的工厂实例预先加载到三级缓存中;注入依赖、创建所需依赖的实例时,可以从三级缓存获取到当前bean对应的工厂实例,通过工厂实例可以获取到之前创建的当前bean的实例(已实例化但尚未填充属性),从而完成依赖本身的属性注入、初始化。工厂实例获取bean实例的getObject()方法其实就是:判断当前bean需要的是依赖本身的实例,还是依赖的代理(依赖的代理也属于依赖的实例),需要依赖本身就直接返回已创建好的依赖实例,需要代理就在已创建的依赖实例的基础上进行包装,返回代理。

2021-09-15 19:35:20 1435 2

原创 Java 异常处理、初始化块、final关键字、运算符优先级、循环语句

循环这种批量操作的场景,往往要尽量避免循环被异常终止,保证循环的继续执行,在循环体中可能发生异常的地方使用try…比如使用循环批量推送短信,某次循环时发生异常,没有在循环内处理异常,让异常抛到了循环外,则循环会被终止,循环中后续批次的消息都不会发送。形参属于局部变量,也可以用final修饰,调用方法传递实参时初始化该final变量,方法执行过程中,该final变量的值都不能被修改。在循环体中,慎用throw直接抛出异常,如果循环体中的异常直接抛到了循环体外,会导致循环终止,后续批次都不会执行。

2021-08-31 19:33:19 704

原创 SpringMVC在SSM中的使用

目录项目结构资源路径spring-mvc.xml常用配置拦截器配置web.xml常用配置 项目结构resources下放项目的各种配置文件,spring可以有多个配置文件,在一个spring配置文件中引入其它的spring配置文件即可webapp下放静态资源(css、js、图片等)webapp/WEB-INF是web应用的安全目录,里面的文件不能直接被浏览器访问,用于放置web.xml、页面 注意main、resources、webapp的文件夹图标,main、res

2021-08-31 16:42:16 471

原创 SpringMVC 常用工具类

*** jackson工具类/*** jackson的核心操作类/*** 初始化mapper,可以在此统一设置序列化配置,eg. 不序列化值为null的字段} /*** 将java对象序列化为json字符串* @param object java对象* @return json字符串} /*** 将json字符串反序列化得到java对象* @param jsonStr json字符串* @param clazz 目标类的Class对象。

2021-08-31 16:33:53 819

原创 Redis 常见问题的解决方案

目录key的过期删除策略查找所有满足匹配规则的keybig key问题key命名建议redis内存不足的问题redis的内存淘汰策略双写一致性问题 key的过期删除策略redis服务器会自动删除过期的key,使用的删除策略是定期删除+惰性删除。定期删除: 每隔一段时间,扫描全部的key,将过期的key删除。惰性删除:访问key时,先判断key是否已过期,过期则删除。大量的key同时过期,定期删除时容器导致redis服务器卡顿,设置key的过期时间时尽量加一个随机值,以分散过期时间。

2021-08-21 14:27:50 605

原创 Redis 基础知识

目录redis的特点 | 优点redis常见的使用场景redis高性能的原因memcache和redis的区别 | redis相比memcached的优势redis的线程模型redis的数据淘汰机制过期删除策略 | key失效机制内存淘汰策略 redis是一个用C语言编写的键值数据库,基于内存、性能极高,使用广泛 redis的特点 | 优点基于内存,性能极高支持数据持久化数据类型丰富特性丰富,支持事务、管道、发布/订阅、 过期删除、支持lua脚本等特性提供了众多原生的

2021-08-21 12:48:06 284

原创 Redis 数据类型

目录基础数据类型及其使用场景常用命令stringhashlistsetzset数据类型选择的建议底层数据结构 | 基础数据类型的实现原理常见数据类型的底层结构SDSdictziplistquicklist 基础数据类型及其使用场景redis是键值数据库,存储的数据都是键值对的形式,key只能是string类型,value可以为不同的类型,redis的5种基础数据类型如下 1、string  字符串最简单的数据类型,用于简单的键值存储,常用于实现分布式锁、分布式se

2021-08-21 11:00:39 715

原创 Redis的高级特性

发布/订阅(publish/subscribe)是一种消息通信模式,redis客户端订阅redis服务器上的一个或多个channel(管道、频道),客户端发布消息到redis服务器中的某个channel后,redis服务器会将消息推送给所有订阅了此channel的redis客户端。redis的事务只是把多个命令打包,放在一个队列中执行,只是保证了事务中指令的串行执行,并没有给事务添加原子性的保障机制,redis的事务具有隔离性但不具备原子性,执行失败时不会回滚。和Bitmap一样,不精确、有一定的错误率。

2021-08-19 09:33:08 732

原创 Bloom Filter 布隆过滤器

目录Bloom Filter简介布隆过滤器的原理布隆过滤器的实现使用guava实现使用redis实现 Bloom Filter简介Bloom Filter 布隆过滤器,由一个叫布隆的小伙子提出,故而用他的名字来命名,可以判断元素是否在指定集合中。 常见的应用场景避免缓存击穿爬虫:过滤新抓取到的url,已抓取存储的就不再处理黑白名单:过滤垃圾邮件(检测发件邮箱是否在垃圾邮箱集合中),拦截骚扰电话(检测手机号是否在指定号码库中)等等 优点使用二进制向量(

2021-08-18 17:29:29 573

原创 ffmpeg的使用 | m3u8视频下载、合并

目录ffmpeg的下载、配置下载版本说明环境变量配置ffmpeg处理m3u8 | ts的常用命令 ffmpeg是一个十分强大的音视频处理工具,提供转码、播放等基础功能,功能十分全面、强大,但命令繁多复杂,通常不直接使用,而是集成在带GUI的视频处理软件中。 我用过一些m3u8的下载、合并工具,比如TS Master:界面复杂,不好用TS助手:下载速度快,但有些情况下载合并不了,比如带有key的推荐使用TS助手,TS助手下载、合并失败的再使用ffmpeg进行处理。&nb

2021-07-18 23:24:47 13807 2

原创 Java中使用Kafka

目录kafka-clients依赖AdminClient APIProducerConsumerStreamConnect kafka客户端api分为5大类,常用的是前3类AdminClient API:管理topic、broker之类的信息Producer API:发布消息到一个或多个topicConsumer API:订阅1个或多个topic,处理接收到的消息Stream API:流处理,将输入流经过一些处理转换为输出流Connector API:从一些源系统|应用中拉取数据到

2021-06-30 12:43:18 3674 3

原创 Kafka 安装部署、常用命令、集群搭建

目录下载、安装常用命令集群搭建集群故障kafka集群监控 下载、安装kafka下载地址:http://kafka.apache.org/downloads下载.tgz,win、linux都是这个安装包。 说明需要先安装jdk、zk,启动zk。kafka自带了zk,但一般使用单独的zk,不使用自带的。如果要使用自带的zk,则根据需要修改config/zookeeper.properties,使用以下命名启动zk#与单独的zk相比,启动脚本、配置文件的名称都不相同b

2021-06-30 12:41:15 408 1

原创 Kafka 常见概念、基础理论

目录Kafka中的基本概念Broker、Topic、PartitionOffset、LEO、HWSegment 分段Producer、Consumer、ConsumerGroupReplication 副本kafka特点总结 kafka是一个高性能的分布式流处理平台,使用java和scala编写,使用zk进行协调,具有高吞吐量、高可靠性、低延迟(实时)的特点。 Kafka中的基本概念Broker、Topic、PartitionBroker:Kafka的服务端程序,可以认为一个

2021-06-30 12:39:46 445

原创 jdk版本升级、技术选型

目录项目升级jdk版本技术选型要考虑的因素 项目升级jdk版本OracleJDK、OpenJDK的区别:OracleJDK是商业版本,收费;OpenJDK是开源版本,免费。选择jdk版本时选择LTS长期支持的版本,不建议用较新的版本,比如jdk14。 项目jdk升级为11安装jdk11修改IDEA中procject structure、编译的jdk版本设置修改pom.xml中的jdk配置<properties> <java.version

2021-06-30 12:11:36 743

原创 Java 编码规范

目录github 阿里巴巴的p3cIDEA插件之Statistic 统计代码整体情况,可以查看注释率SonarQube 分析、改善代码质量  github 阿里巴巴的p3c即阿里编码规范安装阿里巴巴规范插件,会实时扫描代码,在右上角显示代码质量,一般要改到右上角的图标是绿色的√也可以手动扫描,在控制台查看结果,可在根据提示直接在控制台进行修改。 IDEA插件之Statistic 统计代码整体情况,可以查看注释率需要重启IDEA,在控制台会有对应的栏目。这

2021-06-30 11:58:46 430

原创 Maven Nexus私服搭建

目录nexus下载win版安装linux版安装nexus的使用snapshot的xml配置 nexus下载nexus有2个版本Nexus Repository OSS 开源免费Nexus Repository Pro 专业版,收费下载免费版即可,linux系统选择unix版本下载。下载地址:https://www.sonatype.com/products/repository-oss-download我使用的是目前最新的3.x版本。 win版安装打开管理员命令

2021-06-30 11:37:38 619

原创 开发模式、Devops

目录瀑布式开发敏捷开发DevopsDevOps与CI/CDDevOps与k8s 瀑布式开发瀑布式开发是一种老旧的、正在过时的开发模式,基本流程是 需求 → 设计 → 开发 → 测试 ,以整个项目为单位进行。当产品研发完成后, 在产品测试阶段发现重大问题 ,或者发现其无法满足市场需求, 那么就需要重新开发,甚至需要重新规划产品,风险较大,项目失败率比较高。 敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发,增量开发,阶段性交付,期间可以根据用户、客户的返回

2021-06-30 11:17:06 465 1

原创 Golang 资源管理、错误处理、IO操作

目录资源管理 defer错误处理panic和recover待整理iohttpweb 资源管理 deferdefer在defer语句位置处就计算用到的参数值,只是放在在函数返回值之前执行一个函数中的多个defer是栈的结构,先进后出,位置靠前的defer后执行func f1() { defer fmt.Println(1) defer fmt.Println(2) fmt.Println(3) //即使defer后面有return,panic,也会执行defer panic

2021-06-30 00:25:19 361

原创 Golang 语句、函数、可见性规则

目录语句ifswitchfor函数函数的定义、使用返回值名称参数个数可变的函数函数作为参数函数闭包可见性规则 语句ifvar a = 1if a > 0 { fmt.Println("a>0")} else if a == 0 { fmt.Println("a==0")} else { fmt.Println("a<0")}//在条件中可以声明赋值,但不能用var,只能用:=,声明的变量的作用域是当前if语句中if b := 1; b > 0

2021-06-30 00:12:28 527 2

原创 Golang 基础语法、常量、变量、数据类型

目录.go文件基本结构变量常量数据类型内建数据类型指针 Pointer结构体接口接口的定义和实现任何类型接口的组合内建容器数组 Array切片 Slice集合 Map类型转换类型扩展 Go,又称Golang,是google开源的编程语言,原生支持并发编程没有对象的概念,不支持继承、多态,没有泛型、try…catch有接口、函数式编程、csp并发模型(goroutine+channel) .go文件基本结构/*一个包可以对应多个目录,一个目录只能对应一个包,同一目录下包

2021-06-29 23:09:07 1174 2

原创 Golang 环境配置

目录开发环境配置winlinux常用命令GoLang IDE设置 开发环境配置官网sdk下载地址:https://golang.google.cn/dl winmsi方式会自动配置环境变量,但部分环境变量只给当前用户设置,且gopath路径往往不符合需求。 zip方式需要自行配置环境变量新建GOROOT,值是go sdk根目录新建GOPATH,值是工作目录在PATH中添加 %GOROOT%\bin 、 %GOPATH%\bincmd执行go vers

2021-06-29 23:05:40 637

原创 Oracle的使用

目录基本概念oracle的安装、连接表空间jdbc连接oracle的3种方式springboot整合oracle 基本概念oracle版本i :代表 Internet,8i 版本添加了对 Internet 的支持g:代表 grid 网格,10g添加了对网格计算的支持c: 代表云(cloud)计算,12c 版本添加了对云计算的支持。目前主流是11g SID、ServiceName的区别sid:oracel创建一个oracle数据库实例(表空间)时系统自动赋予的一个

2021-06-29 22:24:18 375

原创 DDD 领域驱动设计

目录ddd分层server领域划分实体类 ddd,domain-driven design 领域驱动设计,最小单元是领域模型(domain model)。 ddd分层module:存放公共基础相关的包server:存放领域服务包,要求严格按领域划分原则切分服务,不可随便增加web:前端内容 server领域划分内部结构分为四层interface 接口层:对外提供http请求接口,负责向用户显示信息和解释用户指令,与外部交互,eg. controlle

2021-06-29 21:44:26 443

原创 Spring WebFlux 使用指南

目录响应式编程Spring WebFlux简介WebFlux使用示例 响应式编程响应式编程(reactive programming)是一种异步编程风格,关注数据流、变化传播。在命令式编程中,a=b+c赋值,此后b、c的值的改变不会影响到a;在响应式编程中,可以将数据变化推送给改数据的订阅者,a的值可以随着b、c值的变化自动更新,类似于angular、vue之类的MVVM框架。Reactive 能够构建异步非阻塞的应用程序,低延迟、高吞吐量。 Spring WebFlux简

2021-06-29 20:45:43 1076

原创 JDK的 SPI 机制,Spring的 factories 机制

模块之间一般推荐基于接口编程,不与具体的实现类耦合。抽象接口可能有多种不同的实现方案,eg. 日志可以使用不同的日志框架来实现,json|xml|excel可以使用不同的组件框架来解析,jdbc可以使用mysql、oracle等不同的数据库驱动实现,等等。SPI全称Service Provider Interface,是jdk提供的一套服务发现机制,在开源框架、组件中十分常用。spi常用场景组件替换机制,插拔式组件设计,eg. jdbc的数据库驱动、日志实现框架。

2021-06-29 20:36:55 1265 1

原创 分布式id

eg. 主库1的id初始值是1,主库2的id初始值是2,步长都是2,则主库1生成的id是1、3、5、7、9…snowflake是twitter开源的分布式ID生成算法,一些公司在其基础上进行了改良,先生成一个64位的二进制正整数,然后转换为10进制数。执行成功则申请到(0,2000】号段,将号段范围、当前使用到的id保存到内存中,后续直接使用申请到的这2000个id,用完再次申请即可。同时支持号段模式和snowflake算法模式,可以切换使用,其中号段模式需要借助数据库,snowflake需要借助zk。

2021-06-29 20:12:06 331

原创 Typora使用指南

目录常用快捷键 Typora是一个markdown编辑器,可以快速编写.md文档,导出为多种格式的文档。 常用快捷键Ctrl+N 新建文件Ctrl+O 打开文件Ctrl+D 选中当前单词Ctrl+L 选中当前行Ctrl+Shift+[ 插入有序列表Ctrl+Shift+] 插入无序列表Ctrl+[ 減少列表缩进Ctrl+] 增加列表缩进<hr /> 水平分割线Ctrl+B 加粗Ctrl+\

2021-06-29 14:58:26 1180

原创 Sublime Text使用指南

原因:下载插件时会先调用channel_v3.json文件,这个文件的路径默认使用的是远程url,有时候可能无法访问,导致安装插件失败。Ctrl+Shift+P,输入 install package control 安装package control,sublime text是一款十分强大的文本编辑器,处理文本很方便。解决方案:使用本地的channel_v3.json文件即可。2、使用package control管理插件(推荐)package control常用命令如下。1、Packages目录方式。

2021-06-29 14:53:38 1137

原创 Postman使用指南

目录统一设置变量设置token导入导出 统一设置变量比如统一设置服务器ip、服务使用的端口新建环境,添加变量使用 {{变量名}} 的方式引用变量可设置开发、测试等不同的环境,切换环境会自动应用对应环境中设置的变量。 设置tokenAuthorization -> Type选择Bearer Token -> 填写token 导入导出可导出配置、接口测试为json文件,传给同事导入使用。...

2021-06-29 14:13:26 531

原创 程序调优总结

目录Java调优概述设计调优代码调优字符串优化集合优化 Java调优概述web服务器2个重要的性能参数:响应时间、吞吐量 程序的性能主要体现在执行速度:关系到响应时间内存分配:是否过多消耗内存、是否可能发生内存泄漏启动时间负载承受能力:系统压力上升时,系统响应时间的上升曲线是否平缓 常见的系统瓶颈磁盘IOCPU网络操作数据库锁竞争内存:内存占用过多可能导致频繁Full GC 常见的调优层次设计调优:在开发前进行项目设计

2021-02-27 19:01:50 860

原创 JDK7~13的新特性

目录jdk7新的资源关闭方式 try-with-resourcesjdk8接口新增的默认方法、静态方法新增的base64加解密api新增的时间日期类、时间日期处理类新增的NPE处理类Optional新增的函数式接口、lambda表达式函数式接口lambda表达式jdk8内置的函数式接口新增的方法引用方式::新增的集合操作方式Streamstream的基本使用map()filter()sorted()limit()allMatch()、anyMatch()max()、min()reduce()foreach(

2021-02-24 19:34:30 852 6

原创 压测工具JMeter使用指南

目录GUI模式压测基本使用断言自定义变量批量导入测试数据压测数据库CLI模式压测压测流程分析压测结果分布式压测 前端的静态资源一般都放在cdn上,速度快、无需压测,压测一般是指后端接口的压测。一般只压测请求频率高的接口,压测请求频率低的接口没有意义。jmeter是一个开源免费、功能强大的压测工具,纯java编写,支持不同的请求协议(http、https),支持分布式压测。 GUI模式压测基本使用win下载zip,linux下载tgz,里面的文件都是一样的,只是压缩格式不同。

2021-02-21 22:10:09 1220

原创 分布式应用的用户信息检验方案JWT

目录jwt简介jjwt实现jwtjava-jwt实现jwt说明 jwt简介Json web token(JWT):使用HMAC或RSA算法加密用户信息生成token,存储在客户端(浏览器),客户端请求服务端时携带上token,服务端解密token获取用户信息。 优缺点优点:token包含了用户的id、昵称、头像等基本信息,避免了再次查库;使用json交换数据,通用、轻量;token存储在客户端,适合分布式应用、单点登录,不占用服务端的内存资源。缺点:token存储在客户端

2021-02-21 20:48:40 784 2

原创 SpringCloud Bus 消息总线

目录使用springcloud bus刷新服务配置集成springcloud bus手动触发刷新自动触发配置更新流程 bus消息总线,发生指定事件时,可以单播或广播通知指定的接口、服务,比如git仓库更新服务配置,可以通知服务及时刷新配置。springcloud bus需要搭配消息中间件rabbitmq或kafka使用,使用消息队列存储消息。 使用springcloud bus刷新服务配置集成springcloud bus对每个config client都进行如下操作1、

2021-02-06 22:25:40 520 2

原创 RabbitMQ 集群搭建

目录 

2021-01-31 21:18:07 840 11

空空如也

空空如也

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

TA关注的人

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