自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 都用HTTPS了,还能被查出浏览记录?

我们每天访问的网站大部分是基于HTTPS协议的,简单来说,HTTPSHTTPTLSHTTP是一种应用层协议,用于在互联网上传输超文本(比如网页内容)。由于HTTP是明文传递,所以并不安全TLS是一种安全协议。TLS在传输层对数据进行加密,确保任何敏感信息在两端(比如客户端和服务器)之间安全传输,不被第三方窃取或篡改所以理论上,结合了HTTP和TLS特性的HTTPS,在数据传输过程是被加密的。但是,TLS建立连接的过程却不一定是加密的。虽然HTTPS连接本身是加密的,但在建立HTTPS的过程中(TLS。

2023-11-06 14:06:42 224

原创 Spring 中 @Qualifier 注解还能这么用?

今天和小伙伴们梳理了一下 @Qualifier 注解的作用,老实说,在源码分析的过程中,也 GET 到 Spring 许多新的玩法,感兴趣的小伙伴赶紧去试试吧~

2023-11-06 14:02:09 1352

原创 一道经典面试题:@Configuration 和 @Component 有何区别?

无论小伙伴们之前是否背过相关的面试题,今天这篇文章学完之后相信大家对这个问题都会有更深一层的理解,废话不多少,咱们开始分析。

2023-11-04 14:50:12 176

原创 Spring 中 BeanFactory 和 FactoryBean 有何区别?

这也是 Spring 面试时一道经典的面试问题,今天我们来聊一聊这个话题。其实从名字上就能看出来个一二,BeanFactory 是 Factory 而 FactoryBean 是一个 Bean,我们先来看下总结:BeanFactory 是 Spring 框架的核心接口之一,用于管理和获取应用程序中的 Bean 实例。它是一个工厂模式的实现,负责创建、配置和管理 Bean 对象。

2023-11-04 14:37:36 157

原创 @Configuration 注解的 Full 模式和 Lite 模式!

Configuration 注解相信各位小伙伴经常会用到,但是大家知道吗,这个注解有两种不同的模式,一种叫做 Full 模式,另外一种则叫做 Lite 模式。

2023-11-04 14:30:10 109

原创 面试10000次依然会问的【synchronized】,你还不会?

在撰写关于线程安全的重要性:首先强调关键字在Java并发编程中确保线程安全的重要性,它通过内置锁机制来保证共享资源的同步访问。基本用法:简要回顾的基本用法,包括它可以修饰方法或代码块,以及它如何实现同步方法和同步代码块。锁的概念:解释对象锁和类锁的区别以及它们如何用于不同的同步场景。优化措施:总结一些优化使用的方法,例如减少同步块的大小,使用细粒度的锁等。使用场景:提及适用的典型场景,如计数器、状态控制等,并分析案例以展示其实际应用。局限性与替代方案:指出。

2023-11-03 14:06:04 177

原创 来聊聊LinkedHashMap

保持遍历顺序和插入顺序一致性。支持按照元素访问顺序排序,适用于封装LRU缓存工具。因为内部使用双向列表,尽管在插入和删除元素时会略微慢于 HashMap ,但在迭代访问时由于可以利用链表结构,随着元素个数增加,迭代效率会比HashMap高很多。LinkedHashMap是在HashMap基础上在各个节点之间增加一条双向链表,使得原先散列在不同bucket、单链表、红黑树上的节点之间可以通过双向链表进行操作,实现有序关联,其逻辑结构如下图所示。

2023-11-03 13:59:11 81

原创 SpringBoot可以同时处理多少请求?

前两天面试的时候,面试官问我:一个ip发请求过来,是一个ip对应一个线程吗?我突然愣住了,对于SpringBoot如何处理请求好像从来没仔细思考过,所以面试结束后就仔细研究了一番,现在就来探讨一下这个问题。

2023-11-02 14:15:06 253

原创 一文搞懂 Java 克隆技术,深拷贝与浅拷贝的区别及实现

克隆是指创建一个对象的副本,使得新创建的对象在内容上与原始对象相同。在编程中,克隆是常用的技术之一,它具有以下几个重要用途和优势:复制对象:使用克隆可以创建一个与原始对象相同的新对象,包括对象的属性和状态。这样可以在不影响原始对象的情况下,对新对象进行修改、操作、传递等。这在某些场景下非常有用,可以避免重新创建和初始化一个对象。隔离性与保护:通过克隆,可以创建一个独立于原始对象的副本。这样,修改克隆对象时,不会影响到原始对象,从而实现了对象之间的隔离性。

2023-11-02 14:09:35 202

原创 ReentrantLock(可重入锁)

如果在指定的时间内获取到了可用锁,且当前线程未被中断,则获取该锁并返回true。如果在指定的时间内获取不到可用锁,则将禁用当前线程,并且在发生如下三种情况之前,该线程一直处于休眠状态。指在同一线程中,外部方法获得锁之后,内层递归方法依然可以获得该锁,如果锁不具备重入性,那么当同一个线程两次获取锁的时候就会发生死锁。方法并不一定能够抢占锁成功,如果没有抢占成功,当然也就不需要释放锁,而且在没有占有锁的情况下去释放锁,可能会导致运行时异常。是非阻塞式抢占,在没有抢到锁的情况下,当前线程会立即返回,不会被阻塞。

2023-11-01 14:25:37 113

原创 Spring源码分析篇:@Autowired 是怎样完成注入的?究竟是byType还是byName亦两者皆有

Autowired 首先会通过 BeanFactoryUtils.beanNamesForTypeIncludingAncestors (递归获取父子BeanFactory调用getBeanNamesForType方法),根据需要进行依赖注入的字段的类型或者方法参数的类型取获取相应的beanName,如果注入的是非集合类型的对象,并且找到了一个以上的候选beanName,则下一步会去判断是否有标记优先级,如果都没有则会进行名称匹配,也就是将候选的beanName与字段名或参数名进行equals比较。

2023-11-01 14:21:27 213

原创 血的教训-踩了定时线程池的坑

DelayQueue是一个无界的,用于放置实现了Delayed接口的对象,只能在到期时才能从队列中取走。这种队列是有序的,即队头对象的延迟到期时间最长。我们看一下延时队列// 当前任务创建时间// 延时时间// 初始化/*** 需要实现的接口,获得延迟时间(用过期时间-当前时间)*/@Override/*** 用于延迟队列内部比较排序(当前时间的延迟时间 - 比较对象的延迟时间)*/@Override生产端:投递消息时增加时间戳(当前时间+延时时间。

2023-10-31 13:38:01 99

原创 一道经典面试题:BeanFactory 和 FactoryBean 有何区别?

这也是 Spring 面试时一道经典的面试问题,今天我们来聊一聊这个话题。区别在于,BeanFactory 是 Spring 框架的核心接口,用于管理和提供 Bean 实例,而 FactoryBean 是一个特殊的 Bean,用于创建和管理其他 Bean 的实例。FactoryBean 在 Bean 的创建过程中提供更多的自定义能力,允许进行额外的逻辑处理。可能有的小伙伴看的还不是很清楚,我们再来详细看下。

2023-10-31 13:24:34 78

原创 吊打98%的JAVA同行,这份阿里P8架构师升级手册登上天梯!

前段时间有个朋友去阿里面试,作为一个社招生,太多痛苦了。都知道进大厂最好的时机就是应届生的时候。作为社招生,太难了。我这位朋友经历了最后才上阿里做了P6的职位。我也不得不佩服这位朋友的社交能力,和阿里的一个P8熟悉后,那个大佬看他学习能力强,有上进心,于是把他的个人经验手册给了他学习。所以今天我分享出来。今天主要是想分享这份阿里P8的晋升手册。

2023-10-30 15:17:17 1490

原创 synchronized总结:怎么保证可见性、有序性、原子性?

禁止LoadStore屏障的前面Load读操作跟LoadStore屏障后面的Store写操作重排。:禁止LoadStore屏障前面的Store写操作跟后面的Load/Store 读写操作重排。老王:那我再问你,synchronizd是怎么保证有序性的,想必聪明如你,已经知道答案了吧。小陈:原来是这样啊,synchronized底层竟然也是通过内存屏障来保证可见性的。的,同一时间只能有一个线程去执行synchronized 中的代码块。,上一个线程对共享变量的变更操作,它就能立即看到了。

2023-10-30 14:25:42 80

原创 深入解析 Spring Framework 中 @Autowired 注解的实现原理

接下来Spring容器开始使用该注解的后置处理器去获取对应的属性value,假设我们不知道@Autowired注解对应后置处理器的逻辑,那么根据这个需求来猜测后置处理器中的相关逻辑的方法名:需要带有处理、属性,那么对应的单词就是:Process、Properties,对应找一下,遍历对应后置处理器,即:一个被注解标注的类被注入到Spring容器时,首先会创建Bean对象,创建后调用。),当Bean的定义中包含集合中对应类型的注解时,被判定为候选类,再去获取该类对应注解中的元数据。

2023-10-30 14:17:21 281

原创 Spring Security: 整体架构

如果需要添加自定义的 filter,例如:添加一个校验 tenantId 的 filter:@Overridereturn;添加 filter 时,可以指定 filter 位于某个给定的 filter 的前或者后。从而保证 filter 的执行顺序。需要注意的是,在定义 Filter 时,不要将 filter 定义为 Spring Bean。

2023-10-29 08:00:00 312 1

原创 即时编译器JIT

由于上述代码仅仅是创建一个对象后操作对象的变量,实际上这个工作似乎和对象没有任何关联,编译器识别到这点之后就不去创建没必要的对象,进而使用标量替换的方式将对象的成员变量放到栈上,避免没必要的对象创建和销毁。我们都知道创建一个对象,都是在堆上分配的,假如这个对象使用封闭,GC就会将其回收,而创建和回收这一来一回的操作也是有一定开销的。因此方法调用期间是有一定的时间和空间的开销的。就会进行一种栈上编译的优化操作,它会将这段代码编译为最优逻辑保存到本地内存,在执行循环体的期间,直接使用缓存中的机器码。

2023-10-29 03:30:00 282

原创 Nginx性能优化

nginx作为常用的web代理服务器,某些场景下对于性能要求还是蛮高的,所以本片文章会基于操作系统调度以及网络通信两个角度来讨论一下Nginx性能的优化思路。我们的大学教程大部分讲述七层模型,实际上现代网络协议使用的都是四层模型,如下图,应用层报文经过四层的首部封装到对端。对端链路层拆开首部查看mac地址是自己在网上,拆开ip首部查看目的地址是不是自己,然后到达传输层应用层完成报文接收。文章是基于原有个人知识基础上,对旧知识进行巩固,以及新知识实践学习。

2023-10-28 19:42:55 1011

原创 java原子类-Atomic

java 1.5引进原子类,具体在原子更新基本类型原子更新数组原子更新引用原子更新属性。原子类也是java实现同步的一套解决方案。原子变量类在布尔型:整型AtomicLong:长整型数组里的整型数组里的长整型:数组里的引用类型引用类型:带有版本号的引用类型:带有标记位的引用类型原子更新对象中int类型字段的值,基于反射的使用程序,可以对指定类的指定的volatile int字段进行原子更新。

2023-10-28 19:26:16 162

原创 Redis的过期键删除策略看这一篇就足够了

众所周知,Redis是缓存中间件领域中的无冕之王。来个灵魂拷问:缓存解决能解决什么问题呢?把热数据存放到存取速度快的存储介质中,通过空间换时间的方式来提升数据的存取速度。存取速度快的存储介质都会贵一些,贵的东西肯定要省着点用。那么,如何节省缓存空间呢?当前时间到达过期时间时,将删除缓存,减少空间的占用;如果缓存空间已满,则根据配置的maxmemory-policy来决定如何腾出新的空间以继续提供读写服务。Redis中的maxmemory-policy:noeviction。

2023-10-28 19:14:18 60

原创 使用 SQL 的方式查询消息队列数据以及踩坑指南

由于Pulsar并没有关系型数据库中表的概念,所有的数据都是存储在Bookkeeper中,为了模拟使用 SQL 查询的效果 Pulsar 提供了Presto(现在已经更名为Trino)的插件。Trino 是一个分布式的 SQL 查询引擎,它也提供了插件能力,如果我们想通过 SQL 从自定义数据源查询数据时,基于它的 SPI 编写一个插件是很方便的。这样便可以类似于查询数据库一样查询Pulsar数据:Pulsar 插件的运行流程如上图所示:启动的时候通过。

2023-10-28 19:12:33 619 1

原创 RocketMQ事务消息 超时重发还是原来的消息吗?

以下面的一个demo例子来分析一下,探索RocketMQ事务消息原理。通过上述例子的输出结果可以发现,checkLocalTransaction中queueOffset、msgId都发生的变化。那么在broker中到底发生了什么呢。

2023-10-27 15:27:39 70

原创 Spring应用启动很慢?试试这个工具

首先通过项目给出的HTML样例报告来看看此工具提供的分析功能。把报告内容的细节部分收起来,可以看到如下图所示的内容:启动的统计数据。其中包括:启动时间、Bean的数量、使用/总共的jar包数量、未使用/总共的jar包数量及ClassLoader数量;Spring Bean初始化数据,采集了每个Spring Bean初始化时间及其详细内容;Bean初始化时间线。通过时间线的方式,清晰地展现了Spring应用启动过程中,各个Bean的顺序关系及时间消耗;方法调用详细信息(可配置)。

2023-10-27 15:23:25 788

原创 精准突击!Mysql亿级数据开发手册,GitHub 132k starts | 实战解析。

单纯使用Mysql我们支持了20亿的订单存储查询,并且性能还是比较优秀的,还远没有到达存储上限我想这个数据量还是很有说服力的,能达到这个数据量的公司绝对不多。那Mysql如何做海量数据的存储:

2023-10-26 17:06:05 594

原创 Redis集群搭建真的很简单

很多小伙伴在学习redis的时候都只在windows上搭建过redis,然后工作之后也只是在应用redis。那么redis在Linux上如何搭建呢?集群如何搭建呢?本文不讲原理,只讲实际操作。真的很简单。

2023-10-26 16:57:11 58

原创 什么时候用 Runnable?什么时候用 Callable ?

Runnable在java.lang这个包下,而当JDK1.5发布的时候,新加入的Callable被安置在了这个包下,这是 Java 里有名的并发编程相关包,各种锁啊、多线程工具类啊,都被放在这个包下。按道理,Runnable也应该在这里才对。

2023-10-25 14:44:27 56

原创 大佬都在用的 IDE 主题,21k Star!

Dracula 主题为 JetBrains IDE 带来了卓越的高对比度黑暗风格,本文我为大家介绍一下它的优点。如果你还没有尝试过这款插件,快去试试吧!

2023-10-25 14:20:16 119

原创 你以为你了解TCP协议?这些你可能不知道的细节才是关键!

半连接队列(Half-open connection queue)是指TCP服务器在处理连接请求时,当收到客户端发送的SYN包(同步包)时,会将该连接请求添加到半连接队列中。半连接队列中保存了已收到SYN包但还未完成三次握手的连接请求。SYN Flood攻击是一种网络攻击方式,它利用TCP协议的漏洞,大量地向目标服务器发送伪造的SYN包,使服务器的半连接队列被耗尽。当服务器的半连接队列被耗尽后,正常的连接请求无法得到处理,导致服务不可用。

2023-10-24 21:44:04 91

原创 少走弯路!彻底学会spring源码应用实战

相信大家能经常性的遇到项目上各类excel的导出,简单的excel格式,用简单的poi,easyExcel等工具都能导出。但是针对复杂的excel,有固定的样式、合并单元格、动态列等各类要求,导致excel 导出需要花很大一部分精力去写代码。jxls在很大程度上解决了以上问题。这里简单介绍下jxls,JXLS是国外一个简单的、轻量级的excel导出库,链接:JXLS官网,这里有详细的文档说明教程(英文版),为了方便大家使用,我举例几个常见的excel模板配置,方便大家使用。

2023-10-24 21:41:31 59

原创 从GitHub火到头条!这份万众期待的阿里内部JAVA面试手册,开源了

现在的互联网开发岗招聘,程序员面试背八股文已经成为了不可逆转的形式,其中一个Java岗几百人在投简历也已经成为了常态!更何况一份面试题动辄七八百道,但是也有尴尬的情况发生:面试八股文背的特别好(),IT企业们却依然坚持用八股文来考察面试者。最重要的原因还是国内开发远远不能满足众多求职者(),而恰恰八股文是国内现存效率最高的录人方式,现状不是我们可能改变的,有很多朋友都觉的现在Java面试题太难了,而且没有一份比较新的、全面的Java面试题。这套阿里内部PDF自发布以来,就如果你在面试中被面试官吊打了?别慌。

2023-10-23 13:47:35 1217

原创 Mysql如何理解Sql语句?MySql分析器

MySQL 分析器是 MySQL 数据库系统中的一个关键组件,它负责解析 SQL 查询语句,确定如何执行这些查询,并生成查询执行计划。分析器将 SQL 语句转换为内部数据结构,以便 MySQL 可以理解和执行查询请求。MySQL 分析器是 MySQL 数据库的重要组件,它负责解析 SQL 查询语句、优化查询以提高性能,并确保查询的语法和语义正确。它在数据库系统中扮演了关键角色,帮助应用程序有效地与数据库交互。但需要注意分析器的复杂性和查询优化不一定总是成功的情况。

2023-10-23 13:20:35 171

原创 Mysql如何确定执行计划是最优开销?Mysql优化器!

MySQL 优化器是 MySQL 中的一个核心组件。MySQL 优化器的主要职责在于确定查询的执行计划。在数据库中,同样的查询可以有多种不同的执行方式,如使用不同的索引,使用不同的连接顺序等。每种执行方式都有其相应的执行开销。MySQL 优化器的作用就是比较多个可能的执行计划和它们的开销,然后选择执行开销最小的那个以执行查询。MySQL 优化器是数据库性能的关键组成部分,通过了解和使用它,能够尽可能提高您的 MySQL 数据库的性能。

2023-10-23 13:16:54 139

原创 Mysql架构解析,InnoDB架构概述。

通过Mysql架构解析我们了解了MySQL架构,下面我们看下Innodb架构。innodb最早由Innobase Oy公司开发,5.5版本开始是MySQL默认存储引擎,该存储引擎是第一个完整支持ACID事务的MySQL存储引擎(BDB是第一个支持事务的MySQL存储引擎,现在已经停止开发),其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和CPU。

2023-10-20 16:02:20 426

原创 Java注解处理器APT

在JDK6的时候引入了JSR269的标准,即APT(Annotation Processing Tool),用于在编译时处理源代码中的注解,从而生成额外的代码、配置文件或其他资源。与传统的运行时反射相比,APT在编译时进行处理,可以提高性能并在编译阶段捕获一些问题,减少运行时错误。通过本文的详细介绍,读者对APT的概念、原理和应用应该有了更深入的理解。APT作为一个强大的编译时工具,可以帮助开发者实现自动化、提高代码质量和性能,并在项目开发中发挥重要作用。

2023-10-20 15:54:02 133

原创 字节码增强技术-ASM

在Java中一般是用javac命令编译源代码为字节码文件,一个.java文件从编译到运行的示例如图所示:使用字节码的好处:一处编译,到处运行。java 就是典型的使用字节码作为中间语言,在一个地方编译了源码,拿着.class 文件就可以在各种计算机运行。字节码增强技术就是一类对现有字节码进行修改或者动态生成全新字节码文件的技术。常见的字节码操作分为以下几类:字节码工具优点缺点Java-proxy- 简单易用- 原生支持- 仅能代理接口或继承类- 动态代理类需实现接口ASM。

2023-10-19 15:03:57 376 1

原创 SpringCloud+Nacos集成Seata-1.7.0分布式事务

项目中需要A服务调用B服务,当A服务方法体内出现异常时,若B服务方法已执行,要求B服务能够进行回滚,需要借助分布式事务实现。Seata是一个比较成熟的分布式事务工具,但官方文档比较简洁,查阅网上资料也版本较多不太统一,在此记录一下集成过程以供下次参考。

2023-10-19 14:58:30 1327 6

原创 B站狂转清华大佬手写笔记:Spring Security+ OAuth2.0分布式认证授权

说明:为方便学习,这里已经事先为大家准备好了一个半成品的后台管理系统,而想要完善另一部分,就需要用到我们今天学习的内容了。

2023-10-18 16:36:36 418

原创 【数据结构】队列的实现与优化指南

队列(Queue)是一种常见的数据结构,它是一个线性数据结构,按照先入先出(FIFO,First-In-First-Out)的原则来管理数据。注意,先入先出的原则就意味着最早进入队列的元素将最先被取出,而最后进入队列的元素将最后被取出,类似于排队等候服务的行为。队列可以使用数组或链表来实现,具体实现方式因应用需求而异。队列支持两种主要的操作,即入队(Enqueue)和出队(Dequeue)。入队:将元素添加到队列的尾部。出队:从队列的头部取出元素并删除它。// 队列的最大容量。

2023-10-18 16:01:16 310

原创 List.of() 与 Arrays.asList()总结

List.of()和是 Java 中用于创建列表的两种不同方法,它们在不可变性、可变性、允许空元素、关联数组、返回类型等方面存在重要差异。你可以根据你的需求选择适当的方法。使用List.of()创建的列表是不可变的,适用于需要不可变性和线程安全性的情况。使用创建的列表是可变的,适用于需要在后续操作中修改列表的情况,同时它与底层数组关联。要注意List.of()不允许空元素,而允许。最终,选择哪种方法取决于你的具体需求和代码设计。

2023-10-18 15:58:07 4325

空空如也

空空如也

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

TA关注的人

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