自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java异常处理的十个建议,希望对大家有帮助~

Java异常处理的十个建议,希望对大家有帮助~

2023-06-12 21:02:38 183

原创 if-else常见的优化方案

代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码的八种方案。

2023-05-15 16:03:23 617 1

原创 图解JVM

JVM:Java虚拟机,可以存储代码以及在运行是可以动态调用一些指令的项目集。​ JDK:Java运行时所依赖的环境,[jar包、类]。​ JVM的作用:负责将.class文件解释成机器能够识别的机器码。​ JVM的位置:在操作系统之上,介于应用与系统之间。​ 机器码:能够直接被硬件识别,并且直接可一运行的一种编码方式。​ 字节码(中间码): 以字节为单位的二进制存储代码。​ 编译器:将源代码(.java)文件===》字节码文件(.class)​ 解释器:将字节码文件(.class) ===

2023-02-25 10:19:27 534

原创 Redis与MySQL数据库缓存一致性解决方式

- 缓存延时双删- 删除缓存重试机制- 读取biglog异步删除缓存- 失效模式- 双写模式

2023-02-22 14:54:46 353

原创 Redis高可用集群方案

在生产过程中,Redis不一定会单独部署。因为一旦redis服务因为某些原因导致无法提供数,那么redis就不可用了。那么实现redis高可用的方式就是搭建多个redis服务。从而形成集群。即便是某个redis服务宕机,其它服务也能够提供数据。redis搭建集群有三种模式 **主从复制、哨兵模式、Cluster集群**

2023-02-21 16:10:17 513

原创 Redis过期策略+数据淘汰策略

在回答词问题之前,首先需要回答另一个问题,就是如何设置 Redis 中数据的过期时间?1)expire key time (以秒为单位)–这是最常用的方式2)setex(String key, int seconds, String value) --字符串独有的方式除了字符串自己独有设置过期时间的方法外,其他方法都需要依靠 expire 方法来设置时间,如果没有设置时间,那缓存就是永不过期。 如果设置了过期时间,使用 persist key 让缓存永不过期。

2023-02-20 20:02:21 272

原创 Redis单点故障+红锁原理

单台redis容易出单点故障采用集群,获取到锁之后数据持久化到rdb,aof文件中从节点有可能在从主节点拿到数据之前,主节点就已经挂了,sentinel哨兵机制把从节点选为主节点,此时数据还没有拉取到新的主节点上,新主节点还不知道已经有线程拿到了锁,此时就有两个线程获取到了锁,分布式锁就失效了。

2023-02-17 08:24:26 719

原创 redis分布式锁的演变过程

在我们的日常开发中,一个进程中当多线程的去竞争某一资源的时候,我们通常会用一把锁来保证只有一个线程获取到资源。如加上synchronize关键字或ReentrantLock锁等操作。那么,如果是多个进程相互竞争一个资源,如何保证资源只会被一个操作者持有呢?例如:微服务的架构下,多个应用服务要同时对同一条数据做修改,那么要确保数据的正确性,就只能有一个应用修改成功。

2023-02-15 18:49:53 3527

原创 Redis缓存穿透、击穿、雪崩

当缓存中没有数据,就会去数据库中进行查找。当数据库中也没有数据,就不会将数据缓存到redis中。这就会导致每次请求都要到数据库中查询,导致数据库访问压力增大。

2023-02-13 09:01:14 217

原创 Redis为什么这么快?

虚拟内存机制就是暂时把不经常访问的数据(冷数据)从内存交换到磁盘中,从而腾出宝贵的内存空间用于其它需要访问的数据(热数据)。字典实际上就是哈希表,在redis中大部分数据存储都使用到了哈希表的结构。在java中的hashMap也使用字典数据结构。在MySQL数据库中,所有的读写操作都要通过IO的方式从硬盘中获取。在Redis中,所有的操作都是基于内存实现的,从而减少IO操作提高数据库性能。edis直接自己构建了VM机制 ,不会像一般的系统会调用系统函数处理,会浪费一定的时间去移动和请求。

2023-02-10 20:14:03 4236 1

原创 谈一谈Redis的数据结构类型

Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。

2023-02-09 16:06:56 347

原创 Redis高级-分布式锁的演变过程

分布式锁,即分布式系统中的锁。在单体应用中我们通过锁解决的是控制共享资源访问的问题,而分布式锁,就是解决了分布式系统中控制共享资源访问的问题。与单体应用不同的是,分布式系统中竞争共享资源的最小粒度从线程升级成了进程。

2023-01-30 18:25:46 424

原创 MyBatisGenerator(MBG)代码自动生成器,从此解放你的双手

MyBatis生成器(MBG)是MyBatis MyBatis和iBATIS的代码生成器。它将为MyBatis的所有版本以及2.2.0版之后的iBATIS版本生成代码。它将内省一个数据库表(或多个表),并生成可用于访问表的工件。这减少了设置对象和配置文件以与数据库表交互的最初麻烦。MBG试图对大部分简单CRUD(Create、Retrieve、Update、Delete)的数据库操作产生重大影响。仍然需要手工编写SQL和对象以用于连接查询或存储过程。

2022-12-29 10:08:02 1407 2

原创 报错信息处理:java.lang.IllegalStateException: PathVariable annotation was empty on param 0

SpringCloud通过Feign接口调用远程微服务的时候出现了一个这样的异常在IDEA中做项目时,使用spring框架进行开发的时候在controller或者是再用eureka做Client接口时使用@PathVariable从链接链路中获取值的时候例如:原因分析:在使用idea编译时会报错java.lang.IllegalStateException: PathVariable annotation was empty on param 0.这个报错时表示@PathVariable自动获

2022-12-06 22:58:47 1102

原创 工厂设计模式让你了解到Spring-Loc是怎么实现的

工厂方法模式一种创建对象的模式,它被广泛应用在jdk中以及Spring和Struts框架中;工厂方法模式基于"输入",应用在超类和多个子类之间的情况,这种模式将创建对象的责任转移到工厂类;首先让我们学习一下如何在Java中应用工厂方法模式并且学习到工厂方法的优点,另外工厂方法模式也广泛应用在jdk中;超类可以是接口、抽象类、父类,本例中将通过重写 toString() 方法来解释工厂方法模式;

2022-10-09 00:01:05 365

原创 使用Lombok插件,让代码变得更简洁

Lombok项目是一个java库,它可以自动插入到编辑器和构建工具中,增强java的性能。不需要再写getter、setter或equals方法,只要有一个注解,你的类就有一个功能齐全的构建器、自动记录变量等等。lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具。

2022-10-06 16:49:21 454

原创 分页查询功能详解

分页查询将数据库中庞大的数据分段显示,每页显示用户自定义的行数,提高用户体验度,最主要的是如果一次性从服务器磁盘中读出全部数据到内存,有内存溢出的风险。后端分页与前端分页的最大不同就是,它不需要一次性向后端请求大量的数据,而是根据用户的设定,一次请求一定量的数据,然后将这些数据回显到页面上,后端分页也才是分页的正确打开方式,其避免了一次性从数据库获取很多数据,也可以美化前端展示效果,优化用户体验。在开发过程中,我们经常会从数据库中查询数据,然后在客户端显示出来。当数据少时,可以在一个页面显示。

2022-10-05 18:02:26 3503

原创 扩展工具 - 图片验证码生成工具kaptcha

kaptcha 是一个很有用的验证码生成工具。有了它,你能够生成各种样式的验证码,由于它是可配置的。kaptcha工作的原理是调用,生成一个图片。同一时候将生成的验证码字符串放到 HttpSession中。使用kaptcha可以方便的配置: 验证码的字体 验证码字体的大小 验证码字体的字体颜色 验证码内容的范围(数字,字母,中文汉字!

2022-09-23 14:13:02 1088

原创 LinkedList源码分析

在了解LinkedList底层源码之前,先来了解一下数据结构中的链表结构。了解一下链表的相关概念,以及怎样通过Java代码来实现一个链表。这对于我们看LinkedList源码是非常用帮助的。

2022-09-01 16:00:48 79

原创 MySQl乱码问题解决方式

在MySQL 8.0版本之前,默认字符集为latin1,utf8字符集指向的是utf8mb3。网站开发人员在数据库设计的时候往往会将编码修改为utf8字符集。如果遗忘修改默认的编码,就会出现乱码的问题。从MySQL 8.0 开始,数据库的默认编码改为 utf8mb4 ,从而避免了上述的乱码问题。mysql是我们项目中非常常用的数据型数据库。但是当我们需要在数据库保存中文字符,就经常会遇到数据库乱码情况。下面就来介绍一下如何彻底解决数据库中文乱码情况...

2022-08-31 21:14:03 5934

原创 HashMap底层源码解析

HashMap基于哈希表的 `Map` 接口的实现。此实现提供所有可选的映射操作,并允许使用 `null` 值和 `null` 键。(除了非同步和允许使用 null 之外,`HashMap` 类与 `Hashtable` 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。............

2022-08-29 22:31:58 270

原创 HashSet底层解析

此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。

2022-08-12 21:26:23 508

原创 ArrayList底层源码解析

ArrayList集合实际上就就是一个可变数组,是对List接口的实现。该集合可以存储任何内容元素,包括null值。它实现了List接口中所有的方法,并且提供了一些独有的方法来操作内部存储列表的数组。......

2022-08-11 17:30:15 386 1

常用的框架技术-09 Spring Security 的源代码和初始化项目

Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spring 家族中的成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。 正如你可能知道的关于安全方面的两个主要区域是“**认证**”和“**授权**”(或者访问控制),一般来说,Web 应用的安全性包括**用户认证(Authentication)** 和 **用户授权(Authorization)** 两个部分,这两点也是 Spring Security 重要核心功能。 (1)**用户认证**指的是:验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。**通俗点说就是系统认为用户是否能登录**。 (2)**用户授权**指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。*

2022-11-23

自定义JDBC框架-JDBCFrarmework源码

框架(Framework),是基于建筑概念,适用于理解软件等技术领域各种框架、架构概念。是用于承载一个系统必要功能的基础要素的集合。这个框架封装了增删改查的所有操作。可以很方便的操作JDBC,该自定义框架提供了两个相关的核心方法: int update(sql , params):是操作insert 、update、delete相关的SQL语句的方法,参数sql,是传入一个满足PreparedStatement结构的SQL语句,params是可变参数,用于传入SQL语句占位符中的占位符。 T querySelector(sql,ResultSetHandler,params):是操作select相关的SQL语句的方法,参数是传入一个满足PreparedStatement结构的SQL语句,params是可变参数,用于传入SQL语句占位符中的占位符,ResultSetHandler是处理结果集的方式。 该框架也封装了ResultSetHandler实现类。可以不用用户就能直接封装事务描述类。

2022-09-09

EMS学生管理系统案例

模拟实现一个基于文本界面的《EMS学生信息管理系统》 熟悉Java中的集合和IO知识,进一步掌握编程技巧和调试技巧 制作一个可以永久存储数据的EMS学生信息管理系统,功能有: **1.添加学生信息** **2.删除学生信息** **3.修改学生信息** **4.将学生信息展现在控制台。** 包含的知识点有: 主要涉及以下知识点: 类和对象(属性、方法) 类的封装 对象的聚集处理 多对象协同工作 集合的使用 mvc架构、IO流、异常处理。。。

2022-08-21

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

TA关注的人

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