- 博客(62)
- 收藏
- 关注
原创 redis穿透、雪崩、击穿及其解决方案
布隆过滤器其实采用的是哈希思想来解决这个问题,通过一个庞大的二进制数组,走哈希思想去判断当前这个要查询的这个数据是否存在,如果布隆过滤器判断存在,则放行,这个请求会去访问redis,哪怕此时redis中的数据过期了,但是数据库中一定存在这个数据,在数据库中查询出来这个数据后,再将其放入到redis中,假设布隆过滤器判断这个数据不存在,则直接返回,这种方式优点在于节约内存空间,存在误判,误判原因在于:布隆过滤器走的是哈希思想,只要哈希思想,就可能存在哈希冲突。
2024-03-11 20:59:09 956
原创 Spring的Bean的生命周期 | 有图有案例
Spring框架会取出BeanDefinition的信息进行判断当前Bean的范围是否是singleton的, 是否不是延迟加载的,是否不是FactoryBean等,最终将一个普通的singleton的Bean通过反射进行实例化;如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。:从Bean的实例化之后,通过反射创建出对象之后,到Bean称为一个完整的对象,接着被存储到singletonObjects中,最后被销毁的全过程。
2024-03-03 19:20:44 886
原创 mysql在服务器中的主从复制Linux下
从库I/O线程:当START SLAVE语句在从库开始执行之后,从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。从库I/O线程读取主库的binlog输出线程发送的更新并拷 贝这些更新到本地文件,其中包括relay log文件。MySQL主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记录,使得从库的内容与主库保持一致。在从库中,当复制开始时,从库就会创建从库I/O线程和从库的SQL线程进行复制处理。配置mysql权限账户。
2024-02-19 18:26:35 942 2
原创 Java同步代码块、线程的生命周期、同步方法、Lock锁、死锁、线程中常用的方法
要想实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的。
2024-02-10 20:30:00 470
原创 java多线程的四种创建方式、程序、线程、进程、并行、串行、Thread、Runnable、Callable、线程池技术
单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务。(现在的服务器都是多核的)一个Java应用程序java.exe,其实至少有三个线程:main()主线程,gc()垃圾回收线程,异常处理线程。Java的JVM允许程序运行多个线程,使用java.lang.Thread类代表线程,所有的线程对象都必须是Thread类或子类的实例。现代的操作系统,大都是支持多进程的,支持同时运行多个程序。程序是静态的,进程是动态的 如:运行中的QQ,运行中的MP3播放器。提高应用程序的响应。
2024-02-09 17:38:41 764
原创 JFinal项目搭建
这时候访问http://localhost/demo/mimi就直接访问的首页;如果访问http://localhost/demo;如果需要方法其他方法则需要在Path后面添加方法名,例如:需要访问test方法(Action);也可以在Action(方法)上加@ActionKey(“/test”),这时候可以直接访问http://localhost/test。java下创建com.li.conf包包内创建config类并继承JFinalConfig;
2024-01-23 21:59:18 562
原创 Maven下载及安装,集成eclipse中,配置环境变量,创建maven项目等
配置Maven的jdk版本;我用的是jdk1.8版本。Finish后就好了。
2024-01-22 19:16:10 502
原创 Filter过滤器、使用场景、使用办法、创建和配置等
过滤器实际上就是对 web资源进行拦截,做一些处理后再交给下一个过滤器或 servlet处理通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理。(Mybatis的插件分页也是面向切面的思想)
2024-01-18 22:32:14 445
原创 mybatis分页、延迟加载、立即加载、一级缓存、二级缓存
缓存(cache),数据交换的缓冲区,当应用程序需要读取数据时,先从数据库中将数据取出,放置在缓冲区中,应用程序从缓冲区读取数据。
2024-01-17 23:57:16 932
原创 mybtis动态SQL注解 脚本动态SQL\方法中构建SQL\SQL语句构造器
mybtis动态SQL注解动态SQL注解脚本动态SQL方法中构建SQLSQL语句构造器动态SQL注解分类:脚本动态SQL:XML配置方式的动态SQL,是用<script>的方式把它照搬过来,用注解来实现。适用于xml配置转换到注解配置方法中构建SQL:@SelectProvider 、@InsertProvider、@UpdateProvider、@DeleteProvider 这些方法的使用SQL语句构造器:实现动态 SQL 的内容脚本动态SQL在sql语句中加入<sc
2024-01-16 23:31:42 694
原创 mybatis基本注解、增删改查、结果集映射、一对一、一对多
完成数据库字段和 JavaBean 属性的映射关系,主要解决数据库中的字段和实体类中的属性名不一致;:新增时所用的参数取值是接口方法的入参,可以是对象,也可以是 Map 集合。:删除时所用的参数取值是接口方法的入参,可以是对象,也可以是 Map 集合。:更新时所用的参数取值是接口方法的入参,可以是对象,也可以是 Map 集合。:查询时所用的参数取值是接口方法的入参,可以是对象,也可以是 Map 集合。:@Insert完成新增操作,类似配置文件的 元素;:完成查询操作,类似配置文件的 元素;
2024-01-15 20:35:56 464
原创 mybatis之动态sql、if\choose\when\otherwise\trim\where\set\foreach\bind有案例
根据不同条件拼接SQLy语句,实现对数据库更准的操作。
2024-01-13 22:44:46 1184
原创 java中String的两种创建方法、字符串常量池
创建1或2个字符串。如果常量池中已存在字符串常量“abc”,则只会在堆空间创建一个字符串常量“abc”。如果常量池中没有字符串常量“abc”,那么它将首先在池中创建,然后在堆空间中创建,因此将创建总共2个字符串对象。**这句代码里创建了几个字符串对象?检查指定字符串在常量池中是否存在?如果存在,则返回地址,如果不存在,则在常量池中创建。
2024-01-12 19:59:05 492
原创 JVM 元空间、java中的元空间
上述运行结果可以看出,相同的代码,在JDK 1.6会出现“PermGen Space”的永久代内存溢出,而在JDK 1.7和JDK 1.8中,会出现"Java heap space"堆内存溢出,并且DK 1.8中 PermSize和MaxPermGen参数已经无效。因此,在JDK 1.7和JDK 1.8中,已经将字符串常量由永久代转移到堆中,并且JDK 1.8中已经完全移除了永久代,采用元空间来代替。因此,默认情况下,元空间的大小仅受本地内存限制,但可以通过运行参数来指定元空间的大小。
2024-01-12 00:12:50 2468
原创 JDBC多表联查
在进行多表联查时会遇到第一个问题就是在实体类中不存在从表的字段,紧接着第二个问题在就是主表与从表的对应关系是一对一还是一对多关系。在单一表进行查询时,只需要对表中的单个字段进行解析即可;以学生和班级表为例:从图中可以看出表对应关系。
2024-01-10 23:20:21 640
原创 JVM,Java堆区、新生代、老年代,创建对象的内存分配,分代垃圾收集思想、堆区产生的错误
Java世界中“几乎”所有的对象都在堆中分配,但是,随着JIT编译器的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配到堆上也渐渐变得不那么“绝对”了。 大部分情况下,对象会在Eden区生成,当Eden区装填满的时候,会触发Young Garbage Collection,即YGC垃圾回收的时候,在Eden区实现清楚策略,没有被引用的对象则直接收回。堆空间的内存大小是可以修改的,默认情况下,初始堆内存为物理内存的1/64,最大为物理内存的1/4。
2024-01-08 22:51:17 1309
原创 JVM中虚拟机栈和本地方法栈等
native关键字修饰的本地方法被执行的时候,在本地方法栈中也会创建一个栈帧,用于存放该native本地方法的局部变量表、操作数栈、动态链接、方法出口信息。虚拟机栈也是线程私有的区域,每个Java方法被调用的时候,都会在虚拟机栈中创建出一个栈帧,而每个栈帧又由局部变量表、操作数栈、动态链接和方法返回四部分组成,有些虚拟机的栈帧还包括了一些附加信息。虚拟机栈通过pop和push 的方式,对每个方法对应的活动栈帧进行运算处理,方法正常执行结束,肯定会跳转到另一个栈帧上。例如:-Xss 1m。
2024-01-07 20:45:00 863
原创 JVM之内存模型、运行时的数据区域的划分、java的程序计数器作用等
JVM虚拟机在执行Java程序的过程中,会把它管理的内存区域划分为若干个不同的区域,每个区域有各自不同的用途、创建方式及管理方式。 程序执行过程中,会不断的切换当前执行线程,切换后,为了能让当前线程恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,并且各线程之间计数器互不影响,独立存储。由方法区、堆区、虚拟机栈、本地方法栈、程序计数器五部分组成。 2.在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候,能够知道当前线程的运行位置,恢复当前线程的执行。
2024-01-06 18:56:19 536
原创 Java对象的创建过程、类加载的检查、内存分配、初始化零值、设置对象头、执行init构造方法
初始化零值完成后,虚拟机要对新对象进行必要的设置,例如这个对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的GC分代年龄等信息。内存分配完成后,虚拟机需要将分配到的内存空间都初始化为零值(不包括对象头),这一步操作保证了对象的实例字段在Java代码中可以不赋初始值就直接使用,程序能访问到这些字段的数据类型所对应的零值。选择以上两种方式中的哪一种,取决于Java堆内存是否规整。在上面工作都完成后,从虚拟机的视角来看,一个新的对象已经产生了,但从Java程序的视角来看,对象创建才开始,
2024-01-05 21:45:00 523
原创 类加载机制之双亲委派模型、作用、源码、SPI打破双亲委派模型
由于双亲委派模型的存在,所以在rt.jar中的Object比在ClassPath 中的 Object 优先级更高,因为rt.jar中的object使用的是启动类加载器,而ClassPath中的 object使用的是应用程序类加载器。该模型要求除了顶层的启动类加载器外,其他的类加载器都要有自己的父类加载器。以下是抽象类 java.lang.ClassLoader的代码片段,其中的loadClass()方法运行过程如下:先检查类是否已经加载过,如果没有则让父类加载器去加载。
2024-01-04 22:09:46 538
原创 类的加载机制、主动引用、被动引用、什么是类加载器、类加载器的分类、自定义类的加载器
在类加载过程的加载阶段,通过类的完全限定名,获取描述类的二进制流的实现类,被称为“类的加载”。隔离加载类。在某些框架内进行中间件与应用的模块之间进行隔离,吧类加载到不同的环境。修改类加载方式。扩展加载源。比如:从数据库、网络、电视机顶盒进行类加载。防止源码泄露。比如:编译时字节码进行加密,需要通过自定义类加载器对字节码进行解密还原。
2024-01-03 21:45:00 937
原创 MySQL触发器的创建、查看、删除、存储过程与触发器的区别等
简单点来说触发器就是一个特殊的存储过程,不过存储过程需要手动调用,而触发器自动调用。触发器:触发器是数据库中针对数据库表操作触发的一种特殊的存储过程。
2024-01-02 09:45:00 703
原创 MySQL存储过程、创建、调用、查看、删除、存储过程与函数的额区别、缺陷等、存储过程写分页等
存储过程:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后,再次调用不需要重复编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
2024-01-01 09:45:00 580 3
原创 mysql视图(view)视图、创建、使用、查询、删除、视图的作用等操作
视图:视图是从一个或者多个基本表(或视图)导出的表。它与基本表不同,是一个虚表。视图有一个特性,就是创建他的父表的数据发生变化,视图的数据也会发生变化。简单的理解就是他是存储器的查询语句,并不是存储起来的查询结果。
2023-12-31 21:30:00 3357
原创 MySQL之索引、主键索引、唯一索引、常规索引、全文索引、索引使用场景、索引失效场景、sql优化的规则等
索引是对数据库中一列或多列的值进行排列的一种结构,使用索引可快速访问数据库表中的特定信息。高效性:利用索引可以提高数据库的查询效率。唯一性:索引可以确保所查的数据的唯一性。完整性:用户可以加速表和表之间的连接,实现表与表之间的参照完整性。特殊能力:通过使用索引,可以在查询过程中,使用优化隐藏器,提高系统性能。
2023-12-30 21:45:00 1471 1
原创 MySQL函数、AVG | MIN | MAX | COUNT | SUM、慢查询
MySQL默认10秒内没有响应SQL结果,则为慢查询;这个时间是可以修改的。MySQL的慢查询的操作-- 显示到mysql数据库的连接数-- 查看慢查询的状态-- 设置慢查询的到表 mysql.slow_log-- 设置慢查询的时间-- 开启慢查询-- 慢查询的次数-- 慢查询记录-- 慢查询sql语句-- 关闭慢查询show index FROM student执行该语句;结果中的cardinality是覆盖项;) 越接近1 越好 越接近0 越差;
2023-12-29 21:30:00 1207
原创 MySQL事务、四大原则、执行步骤、四种隔离级别、锁、脏读、脏写等
事务(Transaction):就是将一组sql语句放在同一批次内执行,如果出现sql语句执行错误,则该批次内的所有sql都将取消执行。MySQL数据库中仅InnoDB和BDB类型的数据库表支持事务。事务的特点:一个事务中如果有一个数据库操作失败,那么整个事务的所有数据库操作都会操作失败,数据库数据就会回滚到该事务开始之前的状态。
2023-12-28 21:52:37 1091
原创 mysql的多表联查 left | right |inner join、exists、any、some、all、if、ifnull、case when then end
用如下图的关系表示。从上面的推到过程中可以看出:some和any是将子查询的结果逐个与前面的字段进行比较。left join :从左表中返回所有的记录,即便在右表中方没有匹配的行。union合并的是结果集,不区分来自于哪一张表,所以可以合并多张表查询出来的数据。将查询结果作为一张表进行查询,就是一个临时表,如果要使用临时表,可以起别名来使用。 4.在每个子句中的排序是没有意义的,mysql在进行合并的时候会忽略掉。从上面的推到过程中可以看出:all是将子查询的结果逐个与前面的字段进行比较。
2023-12-27 21:03:11 1147
原创 Java连接MongoDB,java对MongoDB的增删改查操作
然后在下面创建lib文件夹(Folder)用于存放jar包;并且将名为mongo-java-driver-3.4.2.jar的jar包拷入后右键Build Path,导包的工作就完成了。**对Bson数据和Document的解释:**Mongo的insertMany和insertOne方法中后面需要的参数是Document类型的,而Document又继承自Bson。控制台出现下面内容证明连接成功。1、创建java项目。
2023-12-26 09:30:00 687
原创 mysql卸载与两种安装方式,非常详细
在MySQL的官网中有两种下载类型一种是MSI二进制的文件,起始就是MySQL的图形化安装步骤,还有一种就是ZIP压缩包格式。下载卸载和MSI安装在前面的文章中已经介绍过,每个步骤都有截图,可以点击下面链接查看,本文详细介绍ZIP的安装方式。会出现一堆内容,在其中没有看到error就证明成功了,留意root@localhost:后面的内容,这个是初始化密码。步骤四:用记事本打开my.ini,将下面的内容复制到my.ini中并保存。步骤三:在文件夹下面创建一个名为my.ini的文件和一个data文件夹。
2023-12-25 19:11:58 368 20
原创 MongoDB的基本语法
2、设置管理员3、使用自定义的账号密码登录其他的服务器4、查看所有数据库5、创建数据库6、查看当前的数据库7、删除数据库8、创建集合9、查看集合10、删除集合11、MongoDB数据类型 插入的数据被称为文档,文档的数据结构和JSON基本一样。所有存储在集合中的数据都是BSON格式,BSON是一种类似于JSON的二进制形式的存储格式,是Binary JSON的简称。13、修改数据14、删除文档15、查询文档条件查询16、条件查询1、and查询Mon
2023-12-24 17:33:20 130
原创 Windows环境下载及安装MongoDB
4、打开cmd(以管理员身份运行),进入bin文件中,输入下列命令。:data,logs,config(一定按照这三个名字命名)出现上面的字样就证明好了,有时候也需要手动打开服务(如下)。3、在config 中创建配置文件mongodb.conf。控制台输入mongo,出现下列字样就证明成功了。2、在解压之后的mongodb中。
2023-12-24 17:19:37 1149 2
原创 MongoDB特点及与MySQL的比较等
2007年10月,MongoDB由10gen团队所开发。2009年2月退出。基于分布式的文件存储的数据库由c++ 语言编写。旨在为WEB应用提供可扩展的高性能数据存储的解决方案。是一个介于关系型数据库和非关系型数据库之间的产品,是非关系数据库中功能最丰富,最像关系数据库的。MongoDB出现的比较晚,因此能比较好的兼容已有数据库的优点,比如存储数据类型广泛,存储的数据量相比其他非常巨大,部分操作能很好的降低IO操作,减少服务器的负担,数据的高可用等。对于信息时代海量数据等都有很好的应用。
2023-12-24 17:06:55 258
原创 阿里云服务器领取、FinallShell安装、FinalShell连接阿里云服务器
重要的话说三遍,一个人只能领一次、一个人只能领一次、一个人只能领一次;下来选取配置参数,网页可能有略微差别,但内容基本没变,可以选取两核四核,那肯定选取四核啊。没啥好说的,直接傻瓜安装就完了(直接下一步下一步点就完了,脑子都可以不在线)主机号:下图的公网IP填入主机号中,后面有(公)的IP(阿里云网站)密码:自己填自己的(如果是贵人忘记密码点击下面两个步骤可以重置密码)安装好双击打开,可能有两个弹窗,直接关了就行,然后执行下面操作。名称:随便填(就是连接的名字,想叫啥叫啥)
2023-12-18 21:44:40 248
原创 设计模式之单例模式、工厂模式、模板模式、代理模式、动态代理等Java代码
【代码】设计模式之单例模式、工厂模式、模板模式、代理模式、动态代理等Java代码。
2023-11-28 10:28:54 100
原创 Spring之一,基本知识及语法(持续更新中)
Spring—>春天;解决企业级快发的复杂性2002,首次推出interface21框架Rod Johnson创始人,Spring基于interface21于2004年3yue24日推出。Spring优点:Spring是一个开源的免费的框架;Spring使一个轻量级的、非入侵的框架;控制反转(IOC)、面向切面编程(AOP);支持事务的处理,对框架整合的支持。一个快速开发的脚手架基于SpringBoot可以快速开发单个微服务预定大于配置。
2023-11-28 10:23:15 133
原创 JVM类加载机制之加载过程,加载、验证、准备、解析、初始化 持续更新中
在JVM虚拟机实现规范中,通过classLoader类加载器把*.class字节码文件(文件流)加载到内存,并对字节码文件内容进行验证、准备、解析和初始化,最终形成可以被虚拟机直接使用的java.lang.class 对象,这个过程被称作类加载。 类是在运行期间第一次使用时,被类加载器动态加载至JVM。JVM不会一次性加载所有类。因为如果一次性加载,那么会占用很多的内存。
2023-11-28 09:59:33 371
原创 JVM基本组成(持续更新JVM),详细
前4个字节非常特殊,其中1~2字节为cafe babe是詹姆斯高斯林定义的魔法数,他的作用是标志当前文件是一个字节码文件,当JVM进行类的加载的Load阶段时,如果没有识别到该标志,就说明不是字节码文件或者被损坏的字节码文件,因此无法进行加载。如果是热机状态,正常情况下,集群中的一半的机器可以勉强支撑负载流量,但由于刚启动的JVM均是解释执行,还没有进行热点代码统计和JIT动态编译,导致机器启动之后,当前1/2发布成功的服务器马上全部宕机。通常把CPU处理器与操作系统构成的系统架构,称为计算机平台。
2023-11-26 18:55:13 106
原创 Servler及其相关,详细、简单,看完直接上手,包含C/S、B/S、Tomcat、MVC、 pageContext、request、session、application、Cookie等相关内容
Servlet是JavaEE规范之一,也就是常说的接口Servlet是JavaWeb的三大组件之一,三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。Servlet是在服务器端运行的java程序,可以接受客户端请求并作出响应servlet可以生成动态HTML内容对客户端进行响应Servlet的工作原理:手动创建Servlet程序步骤如下:编写一个类去实现Servlet接口实现service方法,处理请求,并相应数据
2023-11-24 11:42:43 76
redis与mysql数据一致但redis内容小于mysql时如何做全查
2024-03-08
使用二维数组加循环实现下面图形
2022-09-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人