Java持续实践

持续学习 持续实践 持续输出

  • 博客(591)
  • 资源 (7)
  • 问答 (1)
  • 收藏
  • 关注

原创 SpringBoot 2.x SpringFactoriesLoader工厂加载机制解析

文章目录SpringFactoriesLoader 作用介绍源码解析SpringFactoriesLoader 作用介绍其源码注释如下General purpose factory loading mechanism for internal use within the framework.SpringFactoriesLoader loads and instantiates factories of a given type from "META-INF/spring.factories"

2021-06-13 17:46:43 17

原创 SpringBoot 2.x 系统初始化器作用以及向容器注册属性代码示例

文章目录系统初始化器介绍三种方式往容器中注册属性META-INF中去加载属性配置类SpringApplication启动的时候添加初始化器application.properties 中配置系统初始化器三种方式往容器中注册属性总结实现方式1实现方式2实现方式3注意事项系统初始化器介绍类名: ApplicationContextInitializer介绍:Spring容器刷新之前执行一个回调函数作用: 向SpringBoot容器中注册属性使用: 继承接口自定义实现.综上所述: Applicat

2021-06-13 15:50:36 7

原创 SpringBoot 2.x 框架整体启动流程概览

文章目录启动流程完整的启动流程图启动流程主要分为三步: 1.框架初始化 2. 框架启动 3. 自动化装配框架初始化: new SpringApplication(primarySources).run(args); 调用SpringApplication的构造方法构造方法中, 执行如下的代码, 进行框架的初始化public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources)

2021-06-13 11:55:04 4

原创 关于分库分表面试题

笔记来源: Java工程师面试突击专栏https://apppukyptrl1086.pc.xiaoe-tech.com/detail/p_5d3114935b4d7_CEcL8yMS/6为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们具体是如何对数据库如何进行垂直拆分或水平拆分的?高并发系统单库单表是扛不住的.单表几百万数据最多了.为什么要分库分表分库分表是两个概念. 可能只分库不分表.可能只分表不

2021-06-06 16:35:50 14

原创 2021-06-03 面试题

乐观锁悲观锁区别讲一讲aopSpringBoot启动流程RocketMQ怎么实现高可用MySQL更新修改数据的时候, 索引会有什么操作为什么重写hashCode和equals方法

2021-06-05 18:18:48 16

原创 SpringMVC 核心架构

客户端发送请求到Tomcat, tomcat将请求转交给spring mvc框架的 DispatcherServlet (核心Servlet).DispatcherServlet 查找@Controller 注解的再加上RequestMapping, 标注哪些Controller处理哪些请求. 根据请求的url , 找到对应的Controller根据RequestMapping 去查找使用这个Controller内的哪个方法, 进行请求的处理controller 里面的方法, 会有一个返回值.

2021-06-05 16:02:24 7

原创 Spring设计模式

工厂模式: 把对象的创建过程, 封装到工厂中. 通过工厂的静态方法去创建对象. 如果要切换实现类, 那么只需要改工厂类的代码即可.SpringIOC核心就是工厂模式, 把所有的bean都放在了spring容器里, 如果要使用这个bean , 那么从Spring容器里面拿就行了, 不需要自己去创建对象.单例模式: spring默认对每个类都是使用的单例模式, 确保一个类在系统运行期间,只有一个实例对象, 只有一个bean.代码示例package com.thread.jmm;..

2021-06-05 15:35:14 14

原创 cglib和jdk动态代理区别

动态的创建一个代理类出来, 创建这个代理类的实例对象, 注入的对象, 也是走的代理的对象.负责做一些代码上的增强, 去调用原有的类.如果实现了某个接口的, 那么Spring的aop会使用jdk的动态代理. 会去生成一个同样接口的代理类, 构造一个实例对象出来, jdk生成的代理类会去生成一个实现一样接口的类.如果某个类没有实现接口, 那么springaop 会改用cglib 去生成动态代理. 去生成原有类的子类, 可以动态的生成字节码. 覆盖原有的方法, 在方法里去加入增强的代码.

2021-06-05 14:52:28 7

转载 面试必问之: Aop详解

https://www.cnblogs.com/joy99/p/10941543.html

2021-06-03 10:14:44 23

原创 zk基于顺序节点实现分布式锁demo

笔记来源: Java工程师面试突击专栏https://apppukyptrl1086.pc.xiaoe-tech.com/detail/p_5d3114935b4d7_CEcL8yMS/6public class ZooKeeperDistributedLock implements Watcher{ private ZooKeeper zk; private String locksRoot= "/locks"; private String productId;

2021-06-01 06:54:28 13

原创 Redis和zk 分布式锁的对比

笔记来源: Java工程师面试突击专栏https://apppukyptrl1086.pc.xiaoe-tech.com/detail/p_5d3114935b4d7_CEcL8yMS/6Redis 分布式锁的缺点:RedLock 算法比较复杂, 而且依赖于Redis 集群 .其他系统尝试获取锁的方式为每隔几秒去尝试获取锁, 可能会有很多无效的请求.zk 分布式锁的优点:zk上锁的思路较为简单, 尝试去上锁, 如果失败就注册监听器, 如果其他系统释放锁, 就回调监听器的方法, 再次尝试获

2021-06-01 06:30:29 187

原创 zookeeper 分布式锁原理

笔记来源: Java工程师面试突击专栏https://apppukyptrl1086.pc.xiaoe-tech.com/detail/p_5d3114935b4d7_CEcL8yMS/6获取锁的时候, 尝试去创建一个临时节点 .如果这个临时节点不存在, 那么代表该分布式锁创建成功.

2021-06-01 06:21:45 120

原创 RedLock算法实现分布式锁思路

笔记来源: Java工程师面试突击专栏https://apppukyptrl1086.pc.xiaoe-tech.com/detail/p_5d3114935b4d7_CEcL8yMS/6文章目录RedLock算法实现分布式锁思路RedLock算法实现分布式锁思路场景: 有一个redis cluster 集群, 五个Redis的集群, 每一个master 都有一个slave获取当前的时间戳, 单位毫秒, 用于计算创建锁的时间某个系统尝试在每个master node上都去上锁 , 设置的过期

2021-05-29 22:13:36 13

原创 Redis实现分布式锁原理 详解

笔记来源: Java工程师面试突击专栏https://apppukyptrl1086.pc.xiaoe-tech.com/detail/p_5d3114935b4d7_CEcL8yMS/6文章目录Redis分布式锁 上锁Redis分布式锁 释放锁单机Redis与主从架构实现分布式锁的缺点Redis分布式锁 上锁Redis 实现分布式锁, 官方叫做RedLock .Redis 实现分布式锁命令:SET my:lock 随机值 NX PX 30000my:lock 为keyvalue 为随机值

2021-05-29 21:55:54 24 2

转载 重写equals 为什么要重写hashCode方法

来源https://www.jianshu.com/p/3819388ff2f4Object类的hashCode()方法有如下的注释, 定义了hashCode方法的三个规约Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, pro

2021-05-29 15:34:08 14

转载 == 和 equals方法区别

1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。...

2021-05-29 15:22:32 11

原创 面试题: 没有session , token cookie 这些东西, 怎么样区分Http请求的用户 ?

请求头放信息, 之后 可以做 http 摘要认证否则任何人都可以伪造 客户端与服务器端通信了https://www.cnblogs.com/xiaoxiaotank/p/11078571.htmlhttps://blog.csdn.net/tenfyguo/article/details/8661517

2021-05-26 11:11:57 26

转载 JVM 面试题:如何优化JVM参数做到只有Young GC(minor GC)

1.先从当前环境和访问的服务每秒中qps大概多少,在堆中new的对象大概多少,比如qps:10000/s 每次做sql查询100条数据,创建单个对象有20个属因为每个字段都是一个基本数据类型,对象头4字节+引用类型4字节+实例数据(Integer:4 Long:8)+数据填充(变成8的倍数)假设每个属性32b,则一个对象32*20b=600b 那么一秒钟创建的对象为 100*10000*600b=600M默认的jvm参数配置的空间大小:2.分析当前虚拟机分配给当前程序的堆内存假设4核8g机器,当前

2021-05-16 15:10:43 51

转载 mysql 设置sort_buffer_size

设置sort_buffer_sizeSET GLOBAL sort_buffer_size = 1024*1024;https://blog.csdn.net/w892824196/article/details/88072631

2021-05-14 11:38:49 46

原创 强引用 软引用 弱引用 虚引用

强引用: 平常写的大部分代码都是强引用, 例如Object obj = new Object(); 只要是强引用的类型, 那么垃圾回收的时候绝对不会去回收这个对象软引用: 把对象用SoftReference包装起来. 特点: 正常情况下垃圾回收是不会回收软引用对象的, 但是如果垃圾回收后, 发现内存还是不够存放新的对象, 内存快要溢出了, 那么就会把软引用回收掉, 即使这个软引用被其他变量引用了, 还是会被垃圾回收器回收掉.弱引用: 把对象用WeakReference包装起来. 特点.

2021-05-08 10:49:15 26

原创 解决antd table 获取数据后 不显示数据

偶现bug: 从接口获取数据后 antd table 不显示数据.解决 :获取请求的结果后, 重新遍历一遍 const listArr = res.data.content.map((obj: any) => ({ ...obj, })); setList(listArr);

2021-04-22 14:09:21 64

原创 RocketMQ 发送消息的三种方式 消费消息的两种模式

发送消息的三种方式:同步发模式: 发送消息到mq中之后, 要一直等待mq返回结果才会运行接下来的代码.异步发送模式: 消息发送后, 不会一直等待mq返回结果才执行下去, 而是会回调SendCallback 函数. 成功则回调onSuccess , 失败回调onException函数.单向消息模式: sendOneway方法不会去管发送的结果, 发送了代码就会往下走了.消费消息的两种模式:DefaultMQPushConsumer Broker 推送消息给消费方.DefaultMQ

2021-04-04 13:37:36 155

原创 解决windows印象笔记无法同步

打开此文件夹找到以exb结尾的此文件, 将此文件删除.接着重新登录你的windows印象笔记 . 登录之后就会同步正常了, 会下载exb文件, 时间会有点久耐心等待, 之前没有同步的文件也会去同步的.终于不会看到红色感叹号了...

2021-04-04 10:23:33 81

原创 Spring源码解析之 Bean与BeanDefinition详解

Spring解决的核心问题Spring解决的核心问题: 把对象之间的关系用配置来管理依赖注入: 依赖关系在Spring的IOC容器中管理通过把对象包装在Bean中, 以达到管理对象和进行额外操作的目的Bean与BeanDefinitionBean 是Spring的一等公民Bean 的本质就是Java对象, 这个对象的生命周期由Spring容器来进行管理不需要为了创建Spring的Bean 而在Java类上做额外的限制, 体现了Spring的低侵入.对于Java对象的控制体现在配置上(

2021-03-13 08:45:36 507 1

原创 Spring源码解析之 IOC的主流程与注解加载bean的验证

文章目录学习Spring源码的注意点基于注解加载Bean验证Controller等其他注解加载进容器学习Spring源码的注意点不要太在意版本的问题不用太过于在意细节, 掌握主要流程为主基于注解加载Bean在之前的如下文章中, 是根据xml去加载Bean 的https://javaweixin6.blog.csdn.net/article/details/113790554本次改为根据注解把bean加载到容器中去在Service的实现类中, 加上@Service 注解Entranc

2021-03-10 07:48:39 61

原创 Spring 源码解析之 实现容器的依赖注入 DI

实现容器的依赖注入为什么需要依赖注入如果一个类中, 依赖了另外一个类, 如下MainPageController 依赖了HeadLineShopCategoryCombineService . 那么就要保证HeadLineShopCategoryCombineService 这个类是初始化好的, 否则调用headLineShopCategoryCombineService.getMainPageInfo()方法的时候, 就会报空指针.@Controller@Getterpublic class M

2021-03-08 08:20:43 43

原创 Spring源码之 Bean实例的作用域

Spring框架中,包含有多种作用域singleton 在整个IOC容器中, 只会有一个Bean实例prototype 原型模式, 每次通过getBean方法获取Bean时, 都将产生一个新的对象.request 每次请求时, 都会产生一个新的实例. 只有在web应用中使用时, 才会有效session 每次会话都会产生一个新的实例globalsession 每个全局的http session . 使用 session定义的bean都将产生一个新实例. 只有在web应用中使用时, 才会有效.

2021-03-07 18:57:00 32

原创 Spring源码之 实现容器的增删改查

文章目录容器的增删改查测试用例容器的增删改查容器的增加删除操作, 往容器中添加和删除bean根据Class获取对应实例: 根据Map的key获取值获取所有的Class和实例通过注解获取被注解标注的Class通过超类获取对应子类的Class (通过传入接口获取接口对应实现类的Class对象, 例如传入Service的接口, 获取Service的实现类.)获取容器载体存储的Class的数量上面的需求实现的代码如下 /** * 添加一个class 对象和bean实例到容器中

2021-03-07 18:50:21 41

原创 Spring源码之 容器的载体和容器的加载

文章目录创建单例容器实现容器实现容器的加载测试用例创建单例容器使用如下的枚举创建单例容器 .@Slf4j// 创建私有的无参构造函数@NoArgsConstructor(access = AccessLevel.PRIVATE)public class BeanContainer { /** * 获取单例的bean容器实例 * @return */ public static BeanContainer getInstance() {

2021-03-07 16:00:13 27

原创 Spring 源码解析之 防止反射和序列化破解的单例写法

文章目录使用枚举内部类的单例尝试直接通过枚举反射创建实例反编译查看枚举单例模式源码(证明其是饿汉模式)使用枚举内部类的单例如下的类, 使用枚举的内部类方式创建单例. 在枚举中的构造方法创建对象 .public class EnumStaringSingleton { // 私有无参构造函数 private EnumStaringSingleton() { } public static EnumStaringSingleton getInstance() {

2021-03-07 11:09:26 50

原创 Spring 源码解析之 反射破解单例模式

文章目录为什么要用单例模式常见的单例模式的写法反射破解单例模式为什么要用单例模式需要同一个容器, 将所有的目标对象管理起来, 容器需要用单例来实现, 因此就要用到单例模式.常见的单例模式的写法常见的单例模式, 一般分为懒汉式和饿汉式.饿汉式的写法https://javaweixin6.blog.csdn.net/article/details/108435222懒汉式的写法https://javaweixin6.blog.csdn.net/article/details/108435929

2021-03-06 20:09:22 38

原创 Spring 源码之实现Class对象的提取

文章目录获取Class类的集合单元测试获取Class类的集合获取某个包下的类集合 代码如下 .主要是三步获取类加载器: 通过Thread.currentThread().getContextClassLoader() 来获取通过类加载器获取到加载的资源信息 , 是通过classLoader.getResource获取, 传入包路径, 注意要把. , 转化为"/".获取类的集合: 主要是 过滤出文件类型, 目前只处理file类型的协议, 再获取包下的实际绝对路径, 最后是通过绝对路径, 去

2021-03-06 19:21:54 53 1

原创 Spring 源码解析之 通过类加载器获取资源集合

文章目录提取标记对象编写获取某个包下的类的集合工具类提取标记对象实现思路:指定对象范围, 获取范围内的所有类遍历所有类, 获取被注解标记的类并加载进容器里.编写获取某个包下的类的集合工具类获取某个包下的类集合 :1. 获取到类加载器:目的: 获取项目发布的实际路径 . 不同的系统表示路径的方法不同. 如果是war或jar包就找不到jar包.类加载器: ClassLoaderClassLoader从字节码文件中读取字节码, 并转换为java.lang.Class一个类实例, 并存储

2021-03-06 11:41:20 64

原创 模仿Spring创建自定义注解

文章目录ControllerServiceRepositoryComponent模仿Spring起一个类似的包org.simpleframework.core.annotation下面模仿Spring创建如下的注解.创建不同的注解的作用是根据不同的注解, 去做不同的处理.例如Controller 注解可能要解析映射.Service 注解要 去开启事务.Repository 要去执行sql等Controllerpackage org.simpleframework.core.annotat

2021-03-06 11:01:47 29

原创 自定义IOC容器思路

文章目录自定义IOC容器思路框架应该具备的最基本的功能IOC容器的实现自定义IOC容器思路自定义IOC容器的思路如下, 给类标识上注解, 通过IOC容器去解析注解生成对象, 在程序运行时, 让容器去注入对象.框架应该具备的最基本的功能解析配置: 将相关配置加载进内存中, 存入进数据结构. 解析的配置可以是注解或者XML定位与注册对象: 解析完配置后, 需要获取内存中的目标对象, 定位就涉及到标记, 注解就是一种很好的标记语言.注入对象: 把需要用到这个对象的地方, 把对象精确无误的返回过来

2021-03-05 08:14:15 35

原创 Spring之IOC概念讲解

文章目录IOC控制反转Ioc - Inversion of Control依赖注入DI依赖注入DI实现控制反转IOC DI DL的关系依赖注入的方式依赖倒置原则IOC容器的优势注解与Spring框架中IOC的关系: 使用注解标记需要管理的实例, 并依据注解属性做精细控制.通过注解对类, 成员变量进行标记, 并通过解析注解标签里面的属性, 来做精细的操作.例如Controller, 可以给所有的Controller来设定一个@Controller自定义注解标签, 来标识这个类来处理页面请求的,

2021-03-05 07:36:33 35 1

原创 React 数字除以100保留两位小数并且用科学计数法显示

方法:// 货币计数法的方法const priceSplitter = (number: number) => (number && number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','));/** * 金额相除100保留2位小数 */export function divideKeepTwoDecimal(num: number) { if (!num) { return 0; } // 小数点

2021-03-03 14:32:14 179

原创 快速熟悉新接手项目的方法

快速学习业务的方法第一步 找产品经理和测试 来接业务需求 看他们演示操作一遍 (问测试也差不多了,测试一般都对业务很熟悉了)第二步 把各种相关文档看一遍第三步 把系统的整体流程操作一遍第四步 看数据库表结构和项目代码第五步 对着 所负责的业务 从头到尾 用自己的角度把数据重新设计一遍只有 对着 业务 去设计数据库 我觉得 才能考虑到很多点,很多业务的 细节,对系统的很多设计就懂了然后在对着 系统的 代码 dug 和 现有的数据库模型 去对比下这样对于上手业务真的很快边看可

2021-02-24 14:55:37 108

原创 注解底层实现原理

文章目录注解获取属性值的底层实现注解的工作原理注解获取属性值的底层实现JVM会为注解生成代理对象.这一节的文章中提到的获取注解信息的代码https://javaweixin6.blog.csdn.net/article/details/113914653注意注解的生命周期都要设置为runtime程序运行时, 设置如下的jvm参数, 保存生成的代理对象成为文件-Djdk.proxy.ProxyGenerator.saveGeneratedFiles=true只获取成员属性的值.运行上

2021-02-21 17:07:32 167

原创 Java 自定义注解的实现与解析注解信息

文章目录一.自定义注解的格式二.自定义注解demo三. 注解与类的关系四. 解析注解的信息4.1 解析注解在类的信息4.2 解析注解在成员变量上的信息4.3 解析注解在方法上的信息一.自定义注解的格式注解由于都是给其他的类中使用的, 所以一般都定义为public注解属性支持的类型所有的基本数据类型 8个String类型Class类型Enum 类型Annotation类型以上所有类型的数据注解是不能直接去继承其他的注解的.二.自定义注解demo自定义一个人的描述注解// 该注解

2021-02-21 15:33:32 64

eclipse插件豆沙绿主题

此资源为eclipse的豆沙绿主题,使用后,eclipse的主题可以变为绿色,保护眼睛.

2018-01-15

Another-Redis-Desktop-Manager.1.3.7.exe

Another-Redis-Desktop-Manager.1.3.7.exe 由于官网和码云上下载太慢, 因此上传,提供高速下载渠道。 比Redis Desktop Manager 更好用, 界面更美观

2020-07-14

vagrant_2.2.6_x86_64.msi

由于vagrant官网下载vagrant_2.2.6_x86_64.msi非常慢, 因此提供下载

2019-10-31

jdk-11.0.11_osx-x64_bin.dmg

jdk11 mac 版本 oracle官网下载的

2021-04-26

eclipse activiti的插件

eclipse中的activiti插件. 此插件可以成功安装到eclipse中. 安装教程文章https://blog.csdn.net/qq_33229669/article/details/81809137

2018-08-18

FastDFS安装所需要的所有文件

搭建FastDFS集群,我们需要用到多个安装包,包括:FastDFS_v5.05.tar.gz、fastdfs-nginx-module_v1.16.tar.gz、libfastcommon-master.zip、nginx-1.6.2.tar.gz、ngx_cache_purge-2.3.tar.gz、apache-tomcat-7.0.47.tar.gz等

2018-12-09

tomcat集群session共享jar包

commons-pool-1.6.jar,commons-pool2-2.2.jar,jedis-2.2.0.jar,tomcat-redis-session-manager-1.2-tomcat-7.jar tomcat集群,实现session共享

2018-03-26

空空如也

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

TA关注的人 TA的粉丝

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