
java
拼搏奋斗,无悔于青春
对网络安全和AI特别感兴趣,后面将主要精力放在AI 网络安全 java全栈开发,励志成为一名优秀的架构师!天行健,君子以自强不息,君子亦怀感恩之心!
展开
-
一些Spring Boot直接的解释
一些Spring Boot的直接的解释原创 2024-05-21 11:58:13 · 525 阅读 · 0 评论 -
描述一下SSL/TLS协议的作用和工作原理
SSL和TLS的工作原理原创 2024-05-04 23:49:04 · 326 阅读 · 0 评论 -
什么是sql注入攻击?
什么是sql注入攻击?原创 2024-05-04 19:40:47 · 275 阅读 · 0 评论 -
说说网络钓鱼和钓鱼网站吧
网络钓鱼和钓鱼网站原创 2024-05-04 18:58:41 · 152 阅读 · 0 评论 -
什么是Dos攻击和DDos攻击了?
什么是Dos攻击和DDos攻击?原创 2024-05-04 18:46:03 · 202 阅读 · 0 评论 -
抽象类和接口有什么区别?
6. 抽象类和接口都允许一些默认方法,抽象类里面是非抽象方法,而接口里面就是jdk8加的方法,其类在继承抽象类或者实现接口时,对于默认方法,子类可以直接用,也可以进行重写,这样在不破坏原有的代码基础,使得抽象类和接口更加灵活强大!接口的修饰符是public,而抽象类可以是public protected privite等。1.抽象类(abstract)是事物的共有,主要是继承。4.抽象类是单继承,一个类可以有多个接口。3.抽象类有抽象方法,也有非抽象方法。2.抽象类是有构造方法。原创 2024-04-25 00:01:29 · 367 阅读 · 1 评论 -
两个对象 hashCode()相同,则equals()否也一定为true?
这个不一定,因为俩个对象的hash值可能相同,但是值不一定相同,也就是所谓的哈希冲突,只有通过equals方法才能看出来是不是相等,当然了如果俩个对象的值相等,那么hash一定相等,如果要避免hash冲突,可以重写hashCode()方法。原创 2024-04-23 23:47:46 · 142 阅读 · 0 评论 -
重写和重载
就是子类重写父类的方法,其方法名 返回值类型 参数必须相同,其方法体 跑出异常等可以不同,其实为了多态,同一个事物的不同提现,父类的方法就是共性,而子类的方法就是共性加个性,这就是多态。就是方法的参数的个数 顺序 类型不同,这就是重载,其是为了提供更加丰富多彩的方法调用,满足不同的情况。Java中的重写和重载都是为了多态。原创 2024-04-23 23:38:08 · 102 阅读 · 0 评论 -
==和equals
=其对于基础数据类型比较的是具体值,对于引用类型,其比较的是对象在堆中的地址值。equals 其比较的是对象的内容,但是要对象的重写,这就是==和equals。原创 2024-04-23 22:41:50 · 117 阅读 · 0 评论 -
说说redis的集群的原理吧
当然了集群的元数据每个节点都会保存,虽然说redis配置多个从节点很费钱,但是这个时代真正值钱的数据,因为训练ai大模型需要大量的有价值的数据,数据是非常值钱的,还有数据分析可以从数据当中分析出很多有价值的信息,所以说多弄几个从节点比起数据本身的价值来说可以说是九牛一毛了,对于事物的认知很重要,我对于数据为什么值钱,我以前没理解,我学习过机器学习和深度学习,用ai大模型之后,以及了解ai大模型背后的大致原理,我就真正深刻地明白了数据的宝贵!其实跟redis集群背后的原理有关,其主要是。原创 2024-04-22 02:10:11 · 377 阅读 · 0 评论 -
说说你对redis操作原子性的理解
2.对于一些复杂的操作,其涉及多个底层操作,直接将其打包成一个原子性操作,要么全部做成,要么全部失败,对于脚本或者事务来说,如果其一部分实现了,另外一个部分没有实现,那么直接回滚,取消已经实现的,这就是redis能确保实现原子性的原因。1.redis的单线程,在键值存储上是单线程服务,为实现原子性提供了可能。就是一个操作是不可中断的,要么全部执行成功要么全部执行失败。这样的redis能够提供高效和可靠的服务。什么是redis操作的原子性?原创 2024-04-20 14:12:18 · 270 阅读 · 0 评论 -
使用redis有哪些好处了?
其支持redis集群和数据分片机制,实现了数据分布和水平扩展,提高了系统的高可用性和水平扩展。有序集合 哈希 流 超级日志 位图 等等。3.持久化技术:其通过RDB快照或者AOF日志实现了redis的持久化。1.高性能:其底层使用了内存作为硬件基础,高速处理读写。2.缓存:其作为缓存,为减少数据库的压力做了巨大的贡献。其支持各种各样的数据类型,如字符串 列表 集合。其操作命令简单易用,容易理解。原创 2024-04-20 13:53:36 · 320 阅读 · 0 评论 -
说说redis的数据类型
10.streams(流):Redis5新增的数据类型,主要用于消息队列,用于多生产者多消费者模型,redis流是可追踪的 持久化的 ,能够处理多达亿条消息!2.List(列表):按照插入顺序进行排序,可以进行元素的重复,可以对列表的两端进行插入或者删除,从而实现队列和栈等数据结构。3.set(集合):就是无序的 唯一的数据集合,也就是不能重复,其可以进行集合的增删,也可以进行交集并集或者补集等操作。1.字符串(String):其存储二进制的数据,对数据可以进行原子性的增加或者减少操作。原创 2024-04-20 13:41:25 · 247 阅读 · 0 评论 -
为什么单线程的redis的效率这么高?
2.内存:其使用了内存做为硬件基础,还使用了c语言操作cpu和内存,加之其使用了字符串 集合 等简单高效的数据结构,无需数据转换 数据的序列化,从而提高了效率。当然了redis只适合短时间的大量访问,如果是长时间的话,就要用redis集群了,或者多实例部署或者计算密集型星任务交给其他更适合的工具。1.非阻塞io,使得redis在发出读取请求之后,在等待期还可以干别的事情,没有必要完全干等着,啥也干不了。3.单线程本身,其在键值存储使用了单线程,避免了多线程的切换 以及锁等机制。原创 2024-04-20 13:03:29 · 271 阅读 · 0 评论 -
redis是单线程还是多线程了?
如果涉及持久化存储 异步删除 集群同步更新,这样就涉及多线程了,所以说redis不是完全的单线程,看情况了。如果涉及key-value的键值存储服务,那么就是单线程,也就是网络io和读写操作。原创 2024-04-20 12:47:34 · 96 阅读 · 0 评论 -
如何实现redis的高可用?
2.哨兵模式:就是为了解决主从模式的弊端从而在主从模式的基础上加了哨兵,从而可以实现自动监控,自动更换节点,如果主节点崩了那么自动切换为从节点,让从节点进行顶替。1.主从模式:就是一个住节点,多个从节点,但是弊端是一个主节点崩了,需要手动的切换从节点,这个挺麻烦的。其具备数据切片,将一个数据通过切片从而分散到各个节点,从而实现了数据冗余也实现了负载均衡。其每个数据切片,当主节点崩了,从节点自动顶替。原创 2024-04-20 12:31:04 · 414 阅读 · 0 评论 -
一个redis实例可有存放多少个key了?
redis实例我们一般指的是运行在服务器上的一个redis服务进程,根据hash表的规定,其可以存放2的32次方-1,也就是40多亿个key,但是实际不可能,因为你要考虑一个key-value的大小,还有服务器的内存,所以一个实例不可能有那么多key,这就是解释。原创 2024-04-20 02:16:51 · 605 阅读 · 0 评论 -
如何解决热key问题
什么是热key问题?就是一个key的数据被大量访问,导致key所在节点的redis服务器承受巨大的压力甚至导致服务器直接崩了,这种情况如何解决了?讲所有的redis节点弄成一个哈希环,然后通过哈希散列,将热key均匀地散列到各个节点,从而解决热key的单个节点压力过大或者崩的局面。根据特定的规则,将数据进行切片,将数据均匀地分布在各个缓存节点,从而避免单个节点的压力过大或者直接崩了的局面!通过在业务刚启动或者在业务的低峰期的时候,直接经常需要访问的数据从数据库加载到缓存中,让请求访问数据库。原创 2024-04-20 02:04:04 · 650 阅读 · 0 评论 -
缓存击穿的解释
缓存击穿就是一个缓存key过期了,但是这个时候有大量请求请求这个key的数据,然后直接越过redis直接访问数据库,这样的话,数据库扛不住这么大的访问量直接崩了。原创 2024-04-20 01:39:43 · 242 阅读 · 0 评论 -
缓存穿透的解释
4.布隆过滤器:就是在到达缓存或者数据库之前,用布隆过滤器,来查看其是否存在,如果不存在其肯定不存在,但是其判断存在就不太确定了,可能真的存在也可能真的不存在,布隆过滤器的底层是hash(哈希),但是其效果依旧很好了!1.缓存空对象:对于大量的同一个查询进行设置为key-null,设置时间为30秒,避免短时间大量的重复恶意查询,保护数据库,不至于崩。就是一个数据在缓存和数据库中都不存在,但是还是被大量查询,导致数据库承受不了,直接崩了。1.恶意用户多次查询同一个数据。原创 2024-04-20 01:22:40 · 802 阅读 · 0 评论 -
对Redis的理解
高可用是redis是用了哨兵模式的redis集群,其会一个redis服务崩了,会切换一个新的redis,一般来说是3个redis服务组成一个集群,这就是redis的高并发和高可用,当然了redis之所以这么快因为其硬件是内存条,而数据的硬件是磁盘或者说是固态硬盘,所以redis很快!高性能是访问数据库中的数据,其会通过redis然后访问数据库,这样就提高了访问的效率。Redis是一个缓存数据库,其是为了高性能和高可用而生的。原创 2024-04-20 00:58:14 · 117 阅读 · 0 评论 -
消息队列的确认机制和持久化选项
其过程是生产者把消息发送给队列,然后队列接受到信息的同时会把信息存储到磁盘,然后队列把消息发送给消费者,消费者收到之后,发送个确认信息,队列接受到之后,会把队列中的和磁盘中的发送给消费者的消息给清除了,这就是持久化选项,这也是消息队列十分强大的原因之二。生产者把消息发送给队列,队列再把消息发送给消费者,发送给消费者之后,如果消费者接受到了消息,会给队列发送一个确认的信息给队列,队列收到以后就会删除消费者接受到的这个消息。是为了不会因为系统发生故障,从而使得消息丢失,其会把消息存储在磁盘而不是内存。原创 2024-04-20 00:04:48 · 503 阅读 · 1 评论 -
Redis雪崩
Redis雪崩原创 2024-04-19 21:26:23 · 383 阅读 · 0 评论 -
Tomcat出现404极其特殊的一种情况
Tomcat出现404极其特殊的一种情况原创 2022-12-02 16:39:03 · 731 阅读 · 1 评论 -
SpringMVC的执行原理
今天复习SpringMVC真的感觉原理很重要因为万变不离其宗,这是SpringMVC的原理图:执行步骤分析:1.DispatchServlet就是前置控制器,是SpringMVC的控制核心,第一步就是发送请求,然后DispatchServlet接受请求并拦截请求我们假设其url为:http://localhost:8080/myweb/hello将如上url分为3个部分http://localhost:8080 服务器域名myweb 部署在服务器上的web站点hello表示控制器通过原创 2022-05-01 16:48:52 · 338 阅读 · 0 评论 -
java.lang.IllegalArgumentException: argument type mismatch
java.lang.IllegalArgumentException: argument type mismatch原创 2022-04-19 11:25:22 · 1616 阅读 · 0 评论 -
数据库连接池总结
数据库连接池原创 2022-03-27 23:11:10 · 1156 阅读 · 0 评论 -
com.mysql.cj.exceptions.CJCommunicationsException
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: The driver was unable to create a connection due to an inability to establish the client portion of a socket.原创 2022-03-27 21:44:28 · 3214 阅读 · 0 评论 -
单一职责原则
单一职责原则原创 2022-03-24 21:47:51 · 235 阅读 · 0 评论 -
TOmcat的问题
tomcat\apache-tomcat-9.0.30\bin\catalina.bat run[2022-03-01 02:59:58,977] 工件 ssmbuild:war exploded: 正在等待服务器连接以启动工件部署…Using CATALINA_BASE: "C:\Users\29525\AppData\Local\JetBrains\IntelliJIdea2021.3\tomcat\c56b4438-f1a0-4c19-988d-76e43bc73a0f"Using CATA原创 2022-03-01 15:03:57 · 161 阅读 · 0 评论 -
Maven出现了到不到jdbc驱动类
问题如下:一般出现这样的我问题是:1.Mysql的版本和jdbc连接的版本不匹配注意:mysql8的Class配置为Class.for(“com.mysql.cj.jdbc.Driver”)mysql5的为Class的配置为Class.forname(“com.mysql.jdbc.Driver”)2.没有把相关的jar导入我的问题很诡异,后来我发现是自己的Maven的pom有问题,后来重新创建了一个javaweb的Maven项目,把其中的pom复制到原来项目就解决了这个问题,我觉得就是自原创 2022-02-22 22:29:18 · 1216 阅读 · 0 评论 -
Servlet报405错误以及servlet的生命周期
学习servlet,准备对servelet进行测试然后出现了很多问题,第一个问题:就是Maven那个pom文件在,但是右边那个Maven的小图标就没有了怎么解决?鼠标右键点击那个pom文件,然后选择最后的那个add as Maven就好了,如果没有那个,pom中所有的依赖都是不能用的第二个问题:出现HTTP Status 405 – 方法不允许后来发现是自己在servlet中的doPost和doGet方法自己额外写了东西,但是那个super.doPost(req,resp);supe原创 2022-02-18 17:38:00 · 529 阅读 · 0 评论 -
关于a++的一些测试心得
那个a++其实真的水很深,真的有些不好理解,那个a++的含义是先使用再加一下,那么如果把这个a++赋给另外一个值,进行数字运算,那么再加1就实现不了,什么意思?意思就是那么a++的先使用后加1,必须自己使用,把a++赋值给别的变量不行,再用别的变量进行操作,那个别的变量也不会加1这是用a++本身进行操作,实现了加1public class Test { public static void main(String[] args) { int s=test1();原创 2022-02-16 01:16:01 · 194 阅读 · 0 评论 -
javaweb中web.xml配置问题
今天晚上在学习javaweb,突然idea启动Tomcat出现了如下问题:Artifact javaweb-01Servlet:war: Artifact is not deployed. Press 'Deploy' to start deployment[2021-12-16 09:45:29,195] Artifact javaweb-01Servlet:war: Artifact is not deployed. Press 'Deploy' to start deployment[2021-原创 2021-12-16 21:55:25 · 356 阅读 · 0 评论 -
final的一些理解
final就是最终的意思,意味着final修饰的类 方法 属性或者变量不能再被该写所以为什么final不能修饰抽象类和接口?很多人学习知识都是死记硬背,不是的,你要理解其本质,为什么?因为final修饰的类 和方法等不能被重写,可是抽象类和接口中的大部分方法都是要被重写的,这不是自相矛盾了吗?当然了,接口中也有很多东西,我改天更新一下代码如下:package 异常;public final interface Test2 {} final abstract void eat原创 2021-12-07 22:31:57 · 270 阅读 · 0 评论 -
java中数组对象的一些问题
今天敲代码,突然出现了空指针异常,说句实在话,我个人对于空指针的处理很少,今天代码报错,刚开始是自己没有把对象写到数组对象,然后还是报错,后来发现是自己写的那个循环有问题,那个循环我从1开始写,但是那个数组的下标从0开始,就这样报错了展示如下:import java.util.Date;public class Book { private int bookId; private double bookPrice; private Date publishDa原创 2021-12-04 11:45:41 · 330 阅读 · 0 评论 -
单例类单例模式
为什么要写单例类了?因为我们把构造器写成public进行修饰,其可以在任何条件下创建对象,但是在某些特殊情况下,对象只要创建一次就OK了,可如果我们对其没有约束,那么有些程序员就会想创建多少对象就创建多少对象,这样反而对其系统的性能造成了影响,JVM就会多次创建对象和销毁对象,就会对系统资源造成很大的浪费,这就是为什么要有到单例模式注意:我说的这个单例类只是单例模式的实现方法之一当然了,要想实现这个就要做到:1.对构造方法私有化2.在其类中写个方法来对构造方法进行操作,其方法特别要注意,因为我们的原创 2021-11-28 17:09:12 · 349 阅读 · 0 评论 -
this关键字
this关键字就是在类的里面用,就是对当前这个对象的引用,那么this引用谁了?谁调用它,它就引用谁对于this关键字要注意一点:那个面试题举个例子:学习只是要理解其本质,其规律面试题:this 关键可以在类的任何位置使用吗? this 关键字可以在属性中使用,可以在非静态的方法中使用还可以在构造方法 中使用,但不能再静态方法中使用为什么这样说了?其实这就说到JVM的加载java程序的机制了...原创 2021-11-27 17:56:51 · 455 阅读 · 0 评论 -
二维数组和稀疏数组之间的相互转化
用Java实现二维数组(棋盘)和稀疏数组的转化:首先创建二维数组:二维数组和稀疏数组的转化:1.得到二维数组的非零个数sum2.创建稀疏数组sparese int[sum+1] [3]3. 将二维数组的有效数字存入到 稀疏数组中稀疏数组和二维数组的转化:1.读取稀疏数组的第一行,根据得到的数据,创建二维数组2.在把稀疏数组的后几行的数据写入赋给那个二维数组代码如下:package com.atguigu.sparsesarray;//SparseArray.java原创 2021-11-03 00:27:31 · 108 阅读 · 0 评论 -
方法重写时声明抛出异常的限制
其限制就是子类抛出的异常类型必须是父类抛出异常类型的子类或者相同,子类抛出的声明异常类型不能超过父类的,子类声明抛出的异常不允许比父类方法声明抛出的异常多```javaimport java.io.FileInputStream;import java.io.IOException;public class Test3 { public void test() throws IOException{ var fis = new FileInputStream("a原创 2021-09-03 22:24:56 · 211 阅读 · 0 评论