自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 源码角度看待线程池的执行流程

线程池内部维护了若干个线程,没有任务的时候,这些线程都处于等待空闲状态。如果有新的线程任务,就分配一个空闲线程执行。如果所有线程都处于忙碌状态,线程池会创建一个新线程进行处理或者放入队列(工作队列)中等待。线程池在多线程编程中扮演着重要角色,它能够管理和复用线程,提高并发执行效率。在之前的学习中,我们知道了线程池的基本流程如下,而今天我们则用这个流程配合着源码的来重新分析线程池的执行流程。//....

2023-08-30 15:07:28 146

原创 七种单例模式的实现

单例模式 (Singleton) 是一种创建型模式,指某个类采用Singleton单例模式后,则在这个类在同一个JVM上,只可能产生一个实例供外部访问,并且仅提供一个全局的访问方式。构造函数私有化;对外访问的方法,返回一个该类的唯一实例对象;利用静态变量、静态代码块、静态代码块和类加载机制实现单例模式以及对应的线程安全问题;类加载的过程是一个线程安全的过程。

2023-10-31 14:52:08 151

原创 Snowflake雪花算法

Snowflake雪花算法的使用场景一般在于分布式架构下解决分布式ID唯一性、安全性、具有实际意义性的一个算法,在很多大型分布式架构中都是非常重要的解决ID唯一性算法。第1位为符号位,固定为0;接下来的41位为时间戳(毫秒级),记录了生成ID的时间;然后是10位的机器ID,5位数据中心ID和5位工作机器ID,用于标识不同的机器;最后是12位的序列号,用于表示在同一毫秒内生成的多个ID的顺序。

2023-10-24 11:40:59 142

原创 计算机网络传输层常见问题总结

为什么要实现网络分层?1.各层之间相互独立:类似于JAVA中的接口一样,各层之间只需要关注自己如何调用下层提供好的功能,不必在乎下层的实现,这个和我们对开发时系统进行分层是一个道理。2.灵活性好:各层都可以采用最适当的技术来实现,整体架构不会因为某一层的技术变动产生影响,也对应了高内聚、低耦合的原则。3.大问题化小 :分层设计有助于我们把一些大的、复杂的网络问题拆分成一些小的、简单的问题来处理,这样使得复杂的计算机网络系统变得易于实现和标准化。

2023-09-23 16:58:15 541

原创 一文读懂Java内存模型(JMM)

Java内存模型(JMM),全称 Java Memory Model,中文释义Java内存模型;对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像C/C++程序开发程序员这样。正是因为 Java 程序把。一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会是一个非常艰巨的任务。

2023-09-12 14:21:15 165

原创 一文看懂Java的类加载机制

Java的类加载机制是Java虚拟机的一个重要组成部分,它负责将类加载到内存中,并确保类的正确性。了解这个机制有助于开发者更好地理解Java程序的运行方式,并能够更好地应对类加载相关的问题。

2023-09-11 21:29:12 518

原创 Date日期工具类(数据库日期区间问题)

在我们日常开发过程中,当涉及到处理日期和时间的操作时,字符串与Date日期类往往要经过相互转换,且在SQL语句的动态查询中,往往月份的格式不正确,SQL语句执行的效果是不同的:例如,如果我们想查询某年某月的所有订单,如果不能动态的获取到当月的天数信息(例如4月的区间查询必须是[1-30]),是查询不出来结果的,这时候就需要我们在后端动态的根据当月天数,查询当月有多少天,完成关于月份的动态查询:四月的订单有一条:如果我们把区间单位设置为31,是查不到一条信息的:区间在30就可以:总结由于D

2023-09-11 14:11:04 675

原创 秒杀场景下用Redis分布式锁解决超卖问题

超卖问题通常出现在多用户并发操作的情况下,即多个用户尝试购买同一件商品,导致商品库存不足或者超卖。解决超卖问题的方法有很多:乐观锁、Redis分布式锁、消息队列等。

2023-09-11 09:03:28 1178

原创 Docker基础入门

在redhat系列下的发行版通过rpm包安装或者是在debian系列下的发行版通过deb包安装;通过工具安装,在redhat系列下的发行版通过yum安装或者是在debian系列下的发行版通过apt-get安装;源码包安装,下载源代码包,进行编译后安装;Docker:是给予Go语言实现的开源项目。Docker的主要目标是“Build,Ship and Run Any App,Anywhere”也就是通过对应的组件的封装,分发,部署,运行等生命周期管理,是用户APP及运行环境能够做到“

2023-09-10 10:41:46 270

原创 Linux指令二【进程,权限,文件】

是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。

2023-09-08 23:39:02 323

原创 Linux基础知识及常见指令

Linux的基本操作命令,如:shutdown,ls,cd,uname,pwd;Linux的基本命令对文件的管理。如:touch,mkdir,cp,rmdir,rm,mv,tar;要注意的时tar命令的使用,因为参数较多,在参数的下达中, c/x/t/r仅能存在一个,不可同时存在,因为不可能同时压缩与解压缩。z–gzip。

2023-09-08 16:35:31 3064 2

原创 手把手教会如何掌握Swagger

Swagger是一个用于设计、构建、文档化和消费RESTful Web服务的开源工具集。它的主要目标是简化API的开发和维护,同时提供自动生成的交互式API文档。Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。使用Swagger,就是把相关的信息存储在它定义的描述文件里面(yml或json格式),再通过维护这个描述文件可以去更新接口文档,以及生成各端代码。

2023-09-06 21:33:19 142

原创 源码角度解析SpringBoot 自动配置

Spring Boot 自动配置是 Spring Boot 的核心特性之一,它的目标是通过分析应用程序的类路径(classpath)和依赖关系,来自动配置 Spring 应用程序所需的 Bean、设置和组件。这意味着开发人员不需要手动配置大部分常见的 Spring 组件,Spring Boot 将根据环境和依赖来进行智能配置。这样,开发人员可以专注于编写业务逻辑,而不必过多关心底层配置细节。

2023-09-04 21:53:07 454

原创 秒杀场景下用乐观锁解决超卖问题

超卖问题通常出现在多用户并发操作的情况下,即多个用户尝试购买同一件商品,导致商品库存不足或者超卖。解决超卖问题的方法有很多:乐观锁、Redis分布式锁、消息队列等。

2023-09-01 15:51:06 481

原创 Shiro和SpringSecurity的区别

Shiro 和 Spring Security 都是用于在Java应用程序中实现身份验证(Authentication)和授权(Authorization)功能的安全框架。它们的目标是保护应用程序免受恶意用户的攻击,并提供一系列工具来管理用户、角色和权限。Shiro更灵活、简单、独立,可以与各种Java应用程序集成。SpringSecurity更契合 Spring 模块(如 Spring Boot、Spring MVC)。

2023-08-30 21:11:44 317

原创 Shiro整合SpringBoot,实战下的应用场景

Apache Shiro是一个强大且易用的Java安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

2023-08-30 12:20:02 408

原创 Shiro基础知识汇总

Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。Shiro 是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。

2023-08-29 18:55:40 78

原创 Java实战场景下的ElasticSearch

ES官方提供了各种不同语言的客户端,用来操作ES。本文介绍的是Java HighLevel Rest Client客户端API;//解析响应//获取总条数System.out.println("共搜到"+total+"条数据");//文档数组。

2023-08-28 18:43:50 1469

原创 ElasticSearch基础知识汇总

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。

2023-08-28 17:22:05 1472

原创 Java中的push和pull

在消息中间件模型中,不讨论MQ具体的消费方式,Push是指broker主动将消息传递给消费者使用,分发给消费者;Pull则是消费者去找到broker索取消息数据,从broker中拉取要消费的信息;

2023-08-24 00:10:33 388

原创 Druid监控平台与SpringBoot的actuator、Admin

Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控,Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。虽然Druid监控平台原则上可以对整个SpringBoot项目进行监控,但是他最好的使用范围还是在数据访问层,使用Druid搭建监控检测平台,可以有效的帮助我们实施SQL语句的优化!

2023-08-23 00:42:05 470

原创 MybatisPlus基础知识汇总

MyBatis是一个基于SQL映射机制的持久化层框架,它内部封装了加载驱动、创建连接、创建statement等繁琐冗余的JDBC操作步骤过程,开发时只需要关注SQL语句的编写与映射配置,不用考虑如何执行以及执行结果的封装,并且可以控制SQL语句的编写与优化,有利于执行性能,灵活度高;MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

2023-08-21 23:23:05 137

原创 SpringBoot整合注册Servlet三大组件Servlet/Filter/Listener

实现:

2023-08-21 00:25:57 153

原创 Bean的生命周期

Spring Bean的生命周期是从 Bean 实例化之后,即通过反射创建出对象之后,到Bean成为一个完整对象,最终存储到单例池中,这个过程被称为Spring Bean的生命周期Spring Bean的生命周期大体上分为三个阶段:Bean的实例化->Bean的初始化->Bean的完成阶段->Bean的销毁阶段在 Spring 中,除了实现 InitializingBean 接口和使用 @PostConstruct 注解之外,你还可以通过配置一个自定义的初始化方法来在 bean 初始化时进行回调。

2023-08-19 13:55:33 345

原创 Redis非关系型数据库知识汇总二

Redis为我们提供了两种持久化方式:RDB和AOF;Redis删除策略各有优缺点,可以根据需求自己选择;Redis缓存数据很重要,一旦缓存数据塌陷,将会对数据库造成毁灭性的打击;

2023-08-17 22:12:43 74

原创 Redis非关系型数据库知识汇总一

NOSQL意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型,web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非 常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。是用 C 语言开发的一个开源的高性能键值对(key-value)数据库,Resdis是一种基于内存。

2023-08-16 23:03:33 90

原创 Redis常用文件配置

【代码】Redis常用文件配置。

2023-08-16 23:00:06 133

原创 Redis工具类

对Redis数据库操作的优化封装。

2023-08-16 22:32:30 49

原创 消息中间件RocketMQ知识汇总

消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。对于消息中间件,常见的角色大致也就有Producer(生产者)、Consumer(消费者)例如:寄快递。

2023-08-14 19:37:11 67

原创 Spirng框架的入门----IOC控制反转与DI依赖注入的三个阶段

IOC(inverse of control)控制反转:其核心理念是将对象的控制权交给Spring框架管理,由Spring框架根据配置文件和注解统一管理Bean对象的创建和对象之间的依赖关系,是Spring框架的核心思想之一,主要作用是降低程序之间的耦合性。SpringIOC容器是实现IOC设计模式的一个重要组件,用来创建Bean对象并管理Bean对象的生命周期,并根据配置文件和注解,管理容器中的每一个对象和对象间的依赖关系,属于Spring中的Core核心板块。

2023-08-02 23:56:51 125

原创 深入了解乐观锁、悲观锁与死锁

相对于乐观锁,悲观锁采用了悲观的态度。它假设在整个操作过程中,其他线程可能随时修改数据,因此在进行读取或写入操作时,会将数据锁定,阻止其他线程对数据的并发访问。悲观锁的实现通常依赖于底层的锁机制,如数据库的行级锁或Java中的synchronized关键字。,通过合理使用信号量,我们可以有效地控制资源的访问,避免竞争条件和死锁问题,保证系统的稳定性和性能。这样一来,我们读的数据就可能不一致,需要一点额外的代码来。当并发写入非常频繁时,可能会有较多的冲突处理,影响性能。的场景,避免了不必要的阻塞和等待。

2023-07-20 17:31:59 148

原创 CopyOnWriteArrayList核心源码阅读

什么是线程安全?线程安全是指在多线程环境下,对共享资源(如变量、对象、数据结构等)的访问操作能够正确地进行,不会导致不确定的结果或破坏数据的一致性。在之前集合的学习中,等都是线程不安全的集合,在单线程环境下,程序的执行是按照顺序逐行执行的,因此不会出现多个线程同时访问和修改共享资源的情况。然而,在多线程环境下,多个线程可能同时访问和修改共享资源,这就引入了并发问题。Copy-On-Write简称COW,是一种用于集合的并发访问的优化策略。

2023-07-18 18:52:13 106

原创 ReentrantLock与synchronized的区别

和synchronized不同的是,synchronized是Java语言层面提供的语法,所以我们不需要考虑异常,而ReentrantLock是JavaSE核心类库的并发包给我们提供的的可重入锁,所以,在编程过程中,使用当前对象this充当锁,完成对当前方法的锁定,只有获取this锁的线程才能访问当前方法,并且在并发过程中,obj是一个要同步的对象,只有获得obj的同步锁的线程可以执行被同步的代码块。不同线程,持有的对象,可以不同,但必须相同class类型;不同线程,持有的对象,必须相同;

2023-07-18 10:30:00 53

原创 线程池知识汇总

线程池(Thread Pool)是一种线程管理的机制,它可以重用已创建的线程,避免频繁地创建和销毁线程,提高系统的性能和资源利用率。线程池内部维护了若干个线程,没有任务的时候,这些线程都处于等待空闲状态。如果有新的线程任务,就分配一个空闲线程执行。如果所有线程都处于忙碌状态,线程池会创建一个新线程进行处理或者放入队列(工作队列)中等待。虽然线程池可以通过Executors工具类的方式去创建,但是Executors工具类中提供的。

2023-07-17 23:30:00 97 1

原创 Java线程基础知识汇总(超详细版)

进程是指在计算机中运行的程序的实例。它是操作系统进行资源分配和调度的基本单位。一个进程可以包含多个线程,每个线程都共享该进程的资源,如内存、文件和打开的网络连接等。每个进程都有自己的地址空间,即独立的内存区域。线程是进程内的执行单元,也是CPU的最小执行单元。一个进程可以包含多个线程,每个线程执行不同的任务。线程共享进程的资源,包括内存、文件和打开的网络连接等。线程之间通过共享内存进行通信,因此比进程间通信更高效。由于线程共享同一进程的地址空间,所以多线程之间的切换更快。

2023-07-17 18:14:22 384 1

原创 Java反射基础知识汇总

通过Class实例获取class信息的方法称为反射(Reflection);获取一个class对应的Class实例后,就可以获取该class的所有信息;Java的反射API提供的Constructor对象封装了构造方法的所有信息;Java的反射API提供的Field类封装了字段的所有信息;通过反射读写字段是一种非常规方法,它会破坏对象的封装;Java的反射API提供的Method对象封装了方法的所有信息:通过反射调用方法时,仍然遵循多态原则;

2023-07-14 13:27:27 80 1

原创 非对称加密算法——RSA

加密和解密使用的是不相同的密钥,用户A密钥加密后所得的信息,只能用用户A的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;;不公开的密钥为私钥。只有同一个公钥-私钥对才能正常加解密。非对称加密就是加密和解密使用的不是相同的密钥,只有同一个公钥-私钥对才能正常加密和解密。

2023-07-12 23:30:00 177 1

原创 密钥交换算法——DH算法

在之前的对称加密算法中,基于"密钥"解决了数据加密和解密的问题,但在实际案例开发中,密钥该如何传递呢?在不安全的信道上传递加密文件是没有问题的,因为黑客拿到加密文件没有用。但是,如何在不安全的信道上安全地传输密钥?DH算法(Diffie-Hellman算法)。DH算法解决了密钥在双方不直接传递密钥的情况下完成密钥交换,这个神奇的交换原理完全由数学理论的支持。DH算法是一种密钥交换协议,通信双方通过不安全的信道协商密钥,然后进行对称加密传输。

2023-07-11 22:51:17 441

原创 对称加密算法——使用AES算法加密

对称加密算法就是传统的用一个秘钥进行加密和解密。加密和解密所用的密钥是相同的。例如,我们常用的WinZIP和WinRAR对压缩包的加密和解密,就是使用对称加密算法。从程序的角度看:而解密则相反,它接收密码和密文,然后输出明文:根据算法名称/工作模式/填充模式获取Cipher实例;根据算法名称初始化一个SecretKey实例,密钥必须是指定长度;使用SerectKey初始化Cipher实例,并设置加密或解密模式;传入明文或密文,获得密文或明文。

2023-07-11 19:24:30 453 1

原创 HTTP编程案例(简单的请求与响应和爬虫入门案例)

HTTP(HyperText Transfer Protocol),超文本传输协议,是目前使用最广泛的Web应用程序使用的基础协议,例如,浏览器访问网站,手机App访问后台服务器,都是通过HTTP协议实现的。它是基于TCP协议之上的一种请求-响应协议。

2023-07-11 13:30:00 137 1

easyftp-server-1.7.0.10-cn.zip

easyftp-server-1.7.0.10-cn.zip

2023-07-08

空空如也

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

TA关注的人

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