- 博客(22)
- 收藏
- 关注
原创 腾讯OCR认证
对接腾讯OCR识别身份证识别接口文档地址:https://cloud.tencent.com/document/product/866/33524API工具:https://console.cloud.tencent.com/api/explorer?Product=ocr&Version=2018-11-19&Action=IDCardOCR&SignVersion=营业执照识别接口文档:https://cloud.tencent.com/document/product/866/36215A
2022-06-20 19:14:14
678
原创 Spring高级篇-AOP的4种实现方式底层原理
AOP 底层实现方式之一是代理,由代理结合通知和目标,提供增强功能。除此以外,aspectj 提供了两种另外的 AOP 底层实现实现方式底层原理区别|ajc 编译器通过 ajc 编译器在编译 class 类文件时,就把通知的增强功能,织入到目标类的字节码中编译期间增强agent探针通过 agent 在加载目标类时,修改目标类的字节码,织入增强功能加载期间通过ASM技术增强jdk动态代理jdk 动态代理要求目标必须实现接口,生成的代理类实现相同接口,因此代理与目标
2022-05-21 23:32:42
1031
原创 Spring高级篇-Bean的作用域
在当前版本的 Spring 和 Spring Boot 程序中,支持五种 Scope作用域范围singleton容器启动时创建(未设置延迟),容器关闭时销毁prototype每次使用时创建,不会自动销毁,需要调用 DefaultListableBeanFactory.destroyBean(bean) 销毁request每次请求用到此 bean 时创建,请求结束时销毁session每个会话用到此 bean 时创建,会话结束时销毁applicationw
2022-05-20 17:41:57
247
原创 Spring高级篇-Aware接口及InitializingBean接口
Aware接口功能Aware 接口提供了一种【内置】 的注入手段Aware接口功能BeanNameAware注入 bean 的名字BeanFactoryAware注入 BeanFactory 容器ApplicationContextAware注入 ApplicationContext 容器EmbeddedValueResolverAware注入 ${} 解析器InitializingBean 接口提供了一种【内置】的初始化手段案例演示创建Bea
2022-05-20 16:31:43
921
原创 Spring高级篇-基于BeanDefinitionRegistryPostProcessor手写后置处理器
上一篇文章中通过ConfigurationClassPostProcessor、MapperScannerConfigurer扫描到了Config类中定义的Bean信息。这篇文章来手动实现这些扫描类的功能。如何扫描到定义的类加入到容器中?BeanDefinitionRegistryPostProcessor接口继承BeanFactoryPostProcessor接口,在所有bean定义信息将要被加载,bean实例还没有创建的时候执行。BeanDefinitionRegistry是bean定义信息的保存
2022-05-19 20:32:11
330
原创 Spring高级篇- BeanPostProcessor和BeanFactoryPostProcessor
Spring提供了BeanPostProcessor、BeanFactoryPostProcessor两大类后置处理器BeanPostProcessor:属于 bean 生命周期阶段(依赖注入, 初始化)的扩展功能。@Autowired、@Resource、@Value 等注解的解析由不同的 Bean后处理器来完成。BeanFactoryPostProcessor:主要就是补充了一些 bean 定义。@ComponentScan, @Bean, @Mapper 等注解的解析属于核心容器(即 BeanF
2022-05-18 22:53:54
1316
原创 Spring高级篇-Bean的生命周期
一个受 Spring 管理的 bean,生命周期主要阶段有创建:根据 bean 的构造方法或者工厂方法来创建 bean 实例对象依赖注入:根据 @Autowired,@Value 或其它一些手段,为 bean 的成员变量填充值、建立关系初始化:回调各种 Aware 接口,调用对象的各种初始化方法销毁:在容器关闭时,会销毁所有单例对象(即调用它们的销毁方法)。prototype 对象也能够销毁,不过需要容器这边主动调用#mermaid-svg-uKLrURPXIiJ5Iner {font-fam
2022-05-16 23:17:15
125
原创 Spring高级篇-容器和Bean
1. 容器接口BeanFactory能做哪些事ApplicationContext有哪些扩展功能事件解耦1.1 BeanFactory和ApplicationContextBeanFactory是ApplicationContext的父接口,它才是Spring的核心容器,提供getBean的能力主要的子类ApplicationContext是组合了BeanFactory的功能。它扩展了 BeanFactory 接口的功能,如:国际化通配符方式获取一组 Resource 资源整合
2022-05-14 23:31:39
365
原创 环形数组/递归复杂度分析
环形数组如何实现环形数组思路:使用一个putIndex和一个getIndex表示插入的位置和获取的位置,但是这样就要考虑两个指针的追赶情况,如果都是0是代表初始化还是代表已经追赶上了?增加一个size变量 插入和获取只需要判断size大小即可public class RingArray { private int[] arr; private int pushi;// end private int polli;// begin private int si
2022-05-13 22:18:54
180
原创 JDK8时间日期处理大全
一、前言学习概述:在Java开发中必不可少的要处理时间,那前后端如何传递时间参数?数据库的时间使用什么类型?Java中时间转换的各种方式有哪些?经过本篇文章带大家一一了解。如果有不正确的地方,欢迎大家评论讨论,谢谢。 学习目标:读完这篇文章之后,希望你能学会熟练使用JDK8z中各种时间转换方法。二、常用时间类1.为什么JDK8新增了时间处理类老版本的java.util.Date与java.util.Calendar类是线程不安全的,并且使用起来复杂。线程不安全示例:final
2022-05-12 22:45:37
2770
原创 归并排序/快排-非递归版本
归并排序思路:设置step步长 将数组按步长划分 比如arr[0,1,2,3,4] 开始step = 1;第一个左组[0] 和 第一个右组[1] 进行merge操作;第二个左组[2] 和 第二个右组[3] 进行merge操作;剩下的不足以划分将step * 2 , 开始merge新的左组 和 右组,等到step = 4时 此时左组[0,1,2,3] 右组[4] 进行merge操作判断step >= N 就可以退出循环public static void mergeSort2(Int
2022-05-11 23:25:09
85
原创 大厂必考二叉树算法-递归的深度使用
遍历二叉树static class TreeNode{ private int data; private TreeNode left; private TreeNode right; public TreeNode(int a) { this.data = a; } public TreeNode addL(int a) { TreeNode left =
2022-05-10 23:19:28
167
原创 大厂必考链表算法-反转链表/合并有序K链表
反转链表Node节点public static class Node<T> { public T value; public Node next; public Node(T data) { value = data; } public void print() { Node head = this; StringBuffer sb =
2022-05-09 22:33:05
254
原创 二分法查找特定数据
二分法有序数组中找到num思路:采用二分法先判断mid位置元素的大小如果arr[mid] = num 就直接返回如果arr[mid] < num 就继续向右边找是否还存在 = num的数据, 即设置 L = mid + 1如果arr[mid] > num 就设置 R = mid - 1, 继续向左边找public static boolean find(int[] arr, int num) { if (arr == null || arr.length ==
2022-05-08 21:15:50
294
原创 前缀和&等概率器
前缀和问题描述有一个整数数组,给出数组范围L、R,求L到R之间的数据和思路循环L到R之间的数据累加构造二维数组,里面保存所有可能的L到R的数据累加和重新构造一个整数数组,后面一个元素保存前面所有元素和自己本身元素之和,计算arr[L,R] = arr[R] - arr[R - L + 1]方式一...
2022-05-08 00:54:53
419
原创 简单排序-选择/归并/快排/冒泡/插入
选择排序思路:第一层循环代表需要存放最小值得索引第二层循环找到最小值的索引交换第一层索引和最小索引的值public class SelectSort<T extends Comparable<T>> { public static void sort(Comparable[] arr) { for (int i = 0; i < arr.length; i++) { int minIdx = i;
2022-05-07 13:05:23
558
原创 位运算-实现位图和计算器
常用的位运算位运算符说明计算案例&与都是1为1, 否则即为 04 & 3 = 0100 & 0011 = 0000 == 0|或有一个为1就是14 & 3 =》 0100 | 0011 = 0111 == 7^异或不同为1 相同为07 & 3 =》 0111 ^ 0011 = 0100 == 4~取反二进制的0变成1,1变成0~4 = 11111111111111111111111111111011
2022-05-06 15:58:29
693
jprofiler性能分析神器
2023-11-24
VisualVM GC分析工具
2023-11-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人