自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

救世主

曾经那个上山的人,如今也成了下山的神。

  • 博客(236)
  • 收藏
  • 关注

原创 【Spring6源码・AOP】AOP源码解析

让我们看看是如何进行转换的,步入registry.getInterceptors方法,初始化拦截器集合,获取Advice【切面相关的配置】,对适配器进行循环,找到符合的拦截器,然后加入我们初始化好的拦截器List集合中,创建完代理对象之后,最终,会真正的执行我们的目标方法,但是步入该方法,会进入cglib代理类的拦截方法。调用after方法。不行了,我得去吃饭了,妈妈叫我吃饭了,呜呜呜,你们自己看看,挺简单的。好了,好了,累死了,好像有个问题没有写,就是三级缓存相关的,明天吧,专门给三级缓存写一篇。

2023-01-17 17:04:08 838 3

原创 【Spring6源码・AOP】代理对象的创建

前几章bean实例化之后,我们对bean进行了属性填充,紧接着就会调用initializeBean()方法返回该bean的代理对象,如果不需要被代理,那么就会直接返回该bean。然后就是调用 createProxy 方法创建代理对象,这里做了一个判断,如果这个bean包含一些切面的配置,那么就会调用createProxy对bean创建代理。因为我们这里的bean是testImpl,所以,我们这里使用的是cglib代理。最终,会真正的执行我们的目标方法,但是步入该方法,会进入cglib代理类的拦截方法。

2023-01-16 09:34:36 179

原创 【Spring6源码・IOC】Bean的初始化 - 终结篇

上一篇,我们实例化了bean之后,将bean放入了第三级缓存,看一下这个addSingletonFactory方法,如果一级缓存中没有对应的bean,那么会将未初始化的bean放入三级缓存,会将bean提前暴露出来。我们来一起看一下这个处理属性的doWithLocalFields方法,首先通过getDeclaredFields方法获取类的属性集合,然后进行遍历调用函数去处理。这里主要有两点,一个是针对属性上的注解,一个是针对方法上的注解,大部分的时候会放在属性上,也有时候会放在方法上,比如set方法上。

2023-01-12 10:10:44 4449 179

原创 【Spring6源码・IOC】Bean的实例化

bean的实例化

2023-01-09 14:02:28 3772 7

原创 【Spring6源码・IOC】BeanDefinition的加载

环境:Spring6、SpringBoot3.0、JDK17多看注释梳理整体设计思想IOC是一个容器,对象的创建、使用和销毁都是由IOC容器来管理。《五分钟带你速通Spring IOC》加载配置文件(XML\YAML…)、配置类,并解析成BeanDefinitionBeanFactoryPostProcessor对BeanDefinition做一些处理实例化bean对象初始化bean对象(属性填充等),并且在初始化前后通过BeanPostProcessor对bean对象进行相关处理。

2023-01-06 05:27:27 6514 41

原创 Java生成word文档|综合

实体类需要和模版内的动态字段对应。

2022-12-13 11:28:21 146 5

原创 Java生成word表单|勾选框

实体类需要和模版内的动态字段对应。

2022-12-13 10:12:15 240 1

原创 Java导出word表格|poi-tl

多级表头、分页、动态数据。

2022-12-13 00:07:30 222 1

原创 springboot整合es、统一返回体、Assert工具类

springboot整合es、统一返回体、Assert工具类。

2022-12-09 15:14:43 163 1

原创 yml配置文件中${}的使用

在启动时手动配置相关参数,如果没有配置,也会自动获取默认值进行启动

2022-12-08 09:26:41 232 1

原创 Java程序猿如何用Supplier来优化代码?

之前的文章《Supplier的作用及其使用》提到过Supplier,昨天后台有小伙伴问到有没有实际的案例。今天来分享一下实际项目的用法,以此提高代码的健壮性。log日志打印,大家都应该不陌生,生产上不会用System.out.println()的方式,因为可能会造成死锁。我们日常调试可能都会用debug模式进行,然后生产环境的日志级别是info,debug不会输出,但是这里的入参只是不会输出,但是会执行,这样一看来,不是太影响自己代码的质量了么?有没有一种方式,如果不是debug模式,就不执行,是dub

2022-12-05 15:39:07 281 10

原创 3分钟手写TCP连接池,并基于Socket通信模拟康宝和桐哥的微信在线聊天

手写TCP连接池,并基于Socket通信模拟康宝和桐哥的微信在线聊天。

2022-12-01 15:06:13 393 3

原创 美团面试应届生第二问:Volatile有什么作用?

文章目录volatile有什么作用?可见性证明指令重排证明不能保证原子性证明Volatile与Synchronized的区别volatile有什么作用?保证线程的可见性禁止指令重排但是不能保证原子性可见性证明有如下静态成员变量num,初始值为0;有两个线程,一个是main主线程,另一个是子线程,让子线程休眠2秒,触发主线程的死循环,2秒后,子线程开始修改值为100,此时主线程的死循环仍未停止,由此可证,线程之间不可见。在num前加上volatile关键字之后,主线程的死循环立刻停止,由此可

2022-11-29 16:05:55 240

原创 美团应届生面试第一问:Object o = new Object()占用多少字节?

文章目录工具查看内存分配Java内存模型访问对象方式GC为什么Survivor要分为两个区域(S0和S1)?Survivor 为什么不分更多块呢?对象的生命周期小知识工具查看内存分配Object o = new Object();占用多少字节,我们借助openjdk的工具来看一下:Maven依赖<dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core<

2022-11-28 16:48:11 3243 3

原创 午休时间,手写了红黑树,转啊转~变啊变~

午休时间,手写了红黑树,转啊转~变啊变~

2022-11-25 19:19:38 354 2

原创 3分钟火速手写一个二叉查找树,搞快点。

二叉查找树(Binary Search Tree,BST),又叫做二叉排序树、二叉搜索树,是一种对查找和排序都有用的特殊二叉树。二叉查找树或是空树,或是满足如下三个性质的二叉树:若其左子树非空,则左子树上所有节点的值都小于根节点的值 若其右子树非空,则右子树上所有节点的值都大于根节点的值 其左右子树都是一棵二叉查找树二叉查找树的特性:左子树

2022-11-24 16:11:38 422 2

原创 ssrs【2016】快速入门 | 安装 | 报表配置 | 报表制作

ssrs入门

2022-11-18 17:48:29 167 3

原创 【布隆过滤器】世界上大概有1 亿种小蛋糕,客户康宝要求这辈子不吃重复的小蛋糕。

文章目录需求概念思想问题优点缺点应用手写布隆过滤器补充需求现在客户康宝有一个需求:世界上大概有 1 亿 种小蛋糕,康宝要求这辈子不吃重复种类的小蛋糕。因为小蛋糕的种类很大可能只会增加,而不会减少,面对这种大数据量的要求以及结果无非是true还是false的难题,所以应该首选布隆过滤器。考虑到甜品行业的发展以及人们生活水平的提高,蛋糕的种类很有可能成指数性增长,那么我们假设世界上有10亿种小蛋糕。为了更好的满足康宝的需求,我们提供三种实现方案:手写布隆过滤器Guava实现Redis实现(具体

2022-11-16 17:36:38 382 1

原创 Timer应用小案例补充----Notify、while相关

Java线程实现采用内核线程实现,线程的休眠及唤醒(状态切换)需借助操作系统进行,这是一个极其耗时耗力的操作。但若线程休眠及运行的时间都很短(例如毫秒/秒,文中案例就是一个典型案例),系统将频繁的对线程状态进行切换,导致严重的性能损耗,并对着循环次数的递增而放大。创建一个顾客线程(消费者):告知老板要的包子的种类和数量,调用wait方法,放弃cpu的执行,进入到WAITING状态(无限等待)在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。

2022-11-09 16:08:36 154

原创 阿光附体,浅谈Timer,源码分析。

说到Java的定时器,是不是想起了伟大的Timer,提起Timer是不是想起Netflix的Spring Cloud的注册中心Eureka,如果没记错,它内部定时发送心跳的的机制就是用Timer做的,不过后来的一些注册中心(比如Nacos)都用ScheduledExecutorService代替了,今天我们来浅谈一下这个Timer。进而start之后会执行TimerThread的run方法。我们来简单分析一下,从new Timer()开始。奥里给,奥里给,每天充满正能量!那么它又是怎么实现定时任务的呢?

2022-11-09 11:22:54 185

原创 怎样提高报表呈现的性能

从前面所述的几个优化过程中可以看出,大部分性能问题,都是在报表工具外做的优化,数据准备在报表外,数据传输在报表外,表内计算慢时,大部分也可以挪到报表外,只有呈现这一个环节是报表内的所以单凭一个报表工具想完全解决报表的性能问题是不太可能的,要真正彻底的解决性能难题,除了看报表本身的性能外,更需要重点看工具有没有外围的计算引擎来协助,报表本身能力强,又有计算引擎帮忙(类似内置了开源SPL的润乾报表),一套组合拳打下来,报表性能问题才能真正解决。

2022-11-07 08:26:35 5493 22

原创 一次关于ArrayList的面试......

ArrayList实现了该接口,它是支持快速访问的,也还是基于底层数据结构吧,因为其底层是个数组,所以给定一个索引,只需要两次寻址就可以了,时间复杂度为O(1),与之相对应的LinkedList没有实现该接口,我看过这样的一个问题:给定一个长度为100的数组,get(0)和get(99)的性能有没有区别?平时的话,ArrayList都是用来查询的,不会涉及太频繁的增删,如果涉及到频繁的增删,可以使用LinkedList,如果需要线程安全的就是可以使用。因为反序列化的时候,需要调用父类的无参构造方法。

2022-11-02 20:32:33 628 4

原创 什么是孤独

孤独是洗了个头发,换了双干净的鞋子,换上喜欢的衣服,然后去楼下超市买了瓶可乐就回来了。是睡了一下午,醒来时黑漆漆的一点声音也没有,抬头望了望窗外天还没完全暗下来,四处摸了摸手机,打开屏幕上一条消息都没有。是你总兜兜转转遇到不合适的,总是差点意思,不是时间问题就是性格问题,好像总是阴差阳错的和长久的幸福擦肩而过,那就冷敷几分钟迷迭维视,降低一下度数,擦亮眼睛明亮自己也明亮未来的路。是一个人走在街上,为了避免尴尬,总是拿出手机来回的滑动,只有自己知道只是把手机解锁,刷刷动态,看时间再锁屏放回兜里 一遍遍

2022-10-27 08:44:55 272 14

原创 Java 下数据业务逻辑开发技术 JOOQ 和 SPL

JOOQ的结构化数据对象由记录和记录集合组成。记录对象的种类很多,第一类是Record对象,适合字段的数量、类型、名字都是动态生成的情况,Record虽然很灵活但面向对象的程度较低,用法比较麻烦,比如要通过getValue(M)来获得第M个字段。第二类是Record[N]对象,N从1到22,比如Record3,适合字段类型和字段数量已知但不超过22个,而字段名是动态生成的情况,Record[N]灵活性差些但面向对象的程度稍高,用法方便些,比如可以通过valueM取得第M个字段。

2022-10-18 18:59:51 3196 34

原创 分布式系统认证方案

随着软件环境和需求的变化,软件的架构由单体结构演变为分布式架构,具有分布式架构的系统叫分布式系统,分布式系统的运行通常依赖网络,它将单体结构的系统分为若干服务,服务之间通过网络交互来完成用户的业务处理,当前流行的微服务架构就是分布式系统架构。分布性每个部分都可以独立部署,服务之间交互通过网络进行通信,比如订单服务、商品服务。伸缩性每个部分都可以集群方式部署,并可针对部分结点进行硬件及软件扩容,具有一定的伸缩能力。共享性。...

2022-10-15 19:10:06 5151 1

原创 【微服务|OAuth②】从0到1搭建一个oauth2.0服务

文章目录环境介绍授权服务器配置EnableAuthorizationServer配置客户端详细信息管理令牌令牌访问端点配置配置授权类型(Grant Types)配置授权端点的URL(Endpoint URLs)令牌端点的安全约束web安全配置环境介绍Spring-Security-OAuth2是对OAuth2的一种实现,并且跟我们之前学习的Spring Security相辅相成,与Spring Cloud体系的集成也非常便利,接下来,我们需要对它进行学习,最终使用它来实现我们设计的分布式认证授权解 决方

2022-10-12 15:49:07 5205

原创 【微服务|OAuth①】OAuth2.0介绍

OAuth(开放授权)是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不 需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth1.0,即完全废止了OAuth1.0。很多大公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权的标准。Oauth协议目前发展到2.0版本,1.0版本过于复杂,2.0版本已得到广泛应用。OAauth

2022-10-12 13:55:39 5232

原创 写了一行“System.out.println()”代码,于是我被开除了

作为资深的cv工程师,想必大家都知道System.out.println()吧。看一下源码: /** * Prints a String and then terminate the line. This method behaves as * though it invokes <code>{@link #print(String)}</code> and then * <code>{@link #println()}</code>.

2022-10-12 02:00:15 237

原创 【手写Nacos系列】上厕所的功夫,带你手写一个注册中心的服务注册功能

文章目录手写Nacos客户端生产者微服务手写Nacos服务端测试上一篇文章《Nacos是如何实现服务注册功能的》,我们全面解析了Nacos是如何实现服务注册的,那么这篇文章,我们就来手写一个Nacos,完成注册中心的服务注册功能。源码在文末为了更加贴近Nacos,我们本次总共开发三个模块。模拟Nacos客户端【接入微服务】模拟Nacos服务端生产者微服务【为了测试】手写Nacos客户端对于这个模块的设计,主要有几下几点:编写/META-INF/spring.factories文件加入

2022-09-29 19:29:56 5326 1

原创 Vue3快速上手

Vue3快速上手1.Vue3简介2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王)耗时2年多、2600+次提交、30+个RFC、600+次PR、99位贡献者github上的tags地址:https://github.com/vuejs/vue-next/releases/tag/v3.0.02.Vue3带来了什么1.性能的提升打包大小减少41%初次渲染快55%, 更新渲染快133%内存减少54%…2.源码的升级使用Proxy

2022-09-29 18:19:47 94

原创 URLConnection的作用及其使用

URLConnection是一个抽象类,表示指向URL指定资源的活动连接。URLConnection有两个不同但相关的用途:URLConnection可以检查服务器发送的首部,并相应地做出响应。它可以设置客户端请求中使用的首部字段。最后URLConnection可以用POST、PUT和其他HTTP请求方法向服务器发回数据;URLConnection类是Java的协议处理器机制的一部分;

2022-09-29 18:19:03 119

原创 Redis优化

文章目录Redis键值设计优雅的key结构拒绝BigKey什么是BigKeyBigKey的危害如何发现BigKey如何删除BigKey恰当的数据类型批处理优化Pipeline服务端优化集群最佳实践Redis键值设计优雅的key结构Redis的Key虽然可以自定义,但最好遵循下面的几个最佳实践约定:遵循基本格式:[业务名称]:[数据名]:[id]长度不超过44字节不包含特殊字符例如:我们的登录业务,保存用户信息,其key是这样的:优点:可读性强避免key冲突方便管理更节省内存:

2022-09-27 13:20:36 139 1

原创 Mendix入门教程

我们首先需要在数据模型中将TrainingEvent(培训活动)的模型与课程、老师、地址进行一对多的关联,方便维护人员进行维护,双击 左侧目录树中的DoMain Model,然后在打开的窗口中从TrainingEvent模型向其他三个模型(Courses、Teacher、Location)拉箭头,就可以完成模型一对多的绑定。双击打开Courses_Overview页面,在3号区域ToolBox中的widgets中搜索button按钮,找到Delete button,拖入到对应的位置,就完成删除的操作了。

2022-09-15 14:53:25 438 3

原创 怎么在应用中实现自助报表功能?

应用中怎么实现自助报表功能,最难的地方其实是:怎么找一个功能全面且能集成的工具,这个难题解决后,剩下的具体集成对于工程师来说就不算什么难事了,现在难题也被解决了,站在别人的肩膀上不说看的更高走的更远吧,起码能省很多事了,接下来要做的,就是实际集成一次,亲自验证一下看看到底能不能满足自己的需求了。

2022-09-12 09:21:38 3500 44

原创 多级缓存|JVM进程缓存【Caffeine】|OpenResty + Lua|Canal|Redis

传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图:存在下面的问题:• 请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈• Redis缓存失效时,会对数据库产生冲击浏览器访问静态资源时,优先读取浏览器本地缓存访问非静态资源(ajax查询数据)时,访问服务端请求到达Nginx后,优先读取Nginx本地缓存如果Nginx本地缓存未命中,则去直接查询Redis(不经过Tomcat)如果Redis查询未命中,则查询Tomcat。

2022-09-03 00:51:12 150

原创 Redis分布式缓存

在Sentinel集群监管下的Redis主从集群,其节点会因为自动故障转移而发生变化,Redis的客户端必须感知这种变化,及时更新连接信息。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。RDB和AOF各有自己的优缺点,如果对数据安全性要求较高,在实际开发中往往会结合两者来使用。...

2022-09-01 01:36:42 331 3

原创 Redis集群|主从集群|哨兵集群|分片集群|Docker版

因为redis-trib.rb是有ruby语言编写的所以需要安装ruby环境。分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点。修改redis-6.2.4/redis.conf文件,将其中的持久化模式改为默认的RDB模式,AOF保持关闭状态。要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。.

2022-08-30 21:31:05 697 1

原创 Redis之HyperLogLog作用及其用法

Redis中的HLL是基于string结构实现的,单个HLL的内存永远小于16kb,内存占用低的令人发指!作为代价,其测量结果是概率性的,有小于0.81%的误差。UV统计在服务端做会比较麻烦,因为要判断该用户是否已经统计过了,需要将统计过的用户信息保存。PV:全称Page View,也叫页面访问量或点击量,用户每访问网站的一个页面,记录1次PV,用户多次打开页面,则记录多次PV。Hyperloglog(HLL)是从Loglog算法派生的概率算法,用于确定非常大的集合的基数,而不需要存储其所有值。......

2022-08-27 23:10:27 282

原创 Redis的BitMap作用及其用法|签到功能|签到统计

Redis中是利用string类型数据结构实现BitMap,因此最大上限是512M,转换为bit则是 2^32个bit位。从最后一次签到开始向前统计,直到遇到第一次未签到为止,计算总的签到次数,就是连续签到天数。随后右移1位,下一个bit位就成为了最后一个bit位。与 1 做与运算,就能得到最后一个bit位。...

2022-08-27 21:13:22 298

原创 Redis的GEO数据结构及其使用

GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。搜索天安门( 116.397904 39.909005 )附近10km内的所有火车站,并按照距离升序排序。计算北京西站到北京站的距离。...

2022-08-27 17:39:04 209

基于Redis实现秒杀系统

全局唯一ID、分布式锁的实现、消息队列异步秒杀

2022-08-25

空空如也

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

TA关注的人

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