- 博客(27)
- 收藏
- 关注
原创 缓存穿透,缓存击穿,缓存雪崩问题实例及解决方案
缓存穿透是指请求一个不存在于缓存中的数据,这会导致请求直接落到后端数据库,增加数据库的负载。攻击者可以通过频繁请求不存在的数据来导致缓存穿透。:缓存击穿是指一个热点数据在缓存中过期或被删除后,大量请求同时涌入,直接落到后端数据库,导致数据库负载剧增。:缓存雪崩是指多个缓存中的数据同时失效,导致大量请求涌入后端数据库,造成数据库负载激增,甚至崩溃。
2023-08-17 15:59:46
233
原创 谈谈HashMap扩容
如果有下一个元素 并且是TreeNode类型 用hash值 与原来桶的容量进行与运算 假如是变成了 32 就和10000 进行与运算 当扩大了一倍 重新计算也就是和 前五位进行与运算 因为前四位的在上一次已经计算出来了 只需要看hash第五位是不是1就可以了 如果 第五位 是0 就继续放到低位节点 和以前的节点一样 如果是1 就放到高位节点 以前的节点+一半的容量 因为以前的桶的位置是和 前4位进行与运算计算到的。如果桶的数量不是2的幂次方,可能会出现一些桶无法被充分利用的情况,导致内存浪费。
2023-08-17 12:11:06
225
原创 深入探索Redis
redis 是一种高性能的内存数据存储结构,常用于缓存,消息队列,计数器等场景.1.可以当作缓存来使用 减轻数据库的压力2.可以用来实现分布式锁保证多个线程同时操作共享资源的数据一致性3.计数器 redis支持自增自减,可以用做计数器的实现4.Redis的列表结构可以当作消息队列来使用
2023-08-17 11:58:03
222
1
原创 浅谈自动装箱、自动拆箱和128陷阱
所以当 Integer a = 127 , Integer b = 127 时 , a 和 b 被包装到同一个对象中 , 所以 用 == 号判断时, 认为是相等的. 而当等于128 时,则是分装在两个对象中的 , 自然地址也不会相等 , 所以 == 号 判断结果为 false . 超过128 结果也是一样的 .我们在使用自动装箱时实际调用的是手动装箱Integer的valueOf()方法(即Integer a = 127等价于Integer a = Integer.valueOf(127))。
2023-08-17 11:47:37
237
原创 深入浅出:Spring IOC 容器与注解详解
Qualifier:在自动按照类型注入的基础上再按照Bean的id注入,给变量注入时必须搭配@Autowired,给方法注入时可单独使用。①:注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值...)@Resource java提供的注解,也被支持,使用name属性,按名称注入。A类想要调用B类就必须自己在自己的内部新建B类的对象,这样的耦合度太高。Spring ----------------> IOC 控制权翻转。②:使用注解,注解作用在类上面,方法上面,属性上边。
2023-08-17 11:31:22
192
原创 深入理解Java内存管理:探究JVM内存溢出与垃圾回收策略
软:在系统要发生oom,会回收所有的软引用对象,如果回收完,还是放不上这个对象,才溢出。,每次垃圾回收的时候,如果对象还没死,就不回收,但是在oom之前,不管有没有死,都会被回收。设置虚拟机启动参数的目的:如果不限制jvm启动参数(不限制堆大小,不限制栈大小,他会默认是无限的,会不断的占用服务器的内存,直到服务器发生oom,影响到其他程序)为什么说要有这个设置:为了满足当内存空间还足够时, 能保留在内存之中, 如果内存空 间在进行垃圾收集后仍然非常紧张, 那就可以抛弃这些对象。如果不是,就得修复。
2023-08-14 00:21:49
143
原创 单点登录逻辑解释
它的原理是通过在用户第一次登录时颁发一个令牌(Token),然后在用户访问其他应用系统时,这些系统可以通过验证令牌来确认用户身份,从而实现无缝的登录体验。当你第一次登录任意一个系统时,你只需输入一次用户名和密码,认证中心会颁发一个令牌给你。然后,当你访问其他系统时,这些系统会检查你的令牌,如果有效,无需再次输入用户名和密码,你就可以无缝地访问其他系统。用一个例子来解释单点登录的概念: 假设你是一个公司的员工,公司有多个内部系统,比如邮件系统、办公系统和人事系统,每个系统都有自己的登录方式。
2023-08-09 11:20:32
147
原创 linux启动tomcat的一些错误
etc/jxlTest/tomcat8001/apache-tomcat-8.5.91-src/bin/catalina.sh:行508: /etc/jxlTest/tomcat8001/apache-tomcat-8.5.91-src/logs/catalina.out: 没有那个文件或目录。touch: 无法创建"/etc/jxlTest/tomcat8001/apache-tomcat-8.5.91-src/logs/catalina.out": 没有那个文件或目录。
2023-08-05 13:53:00
613
1
原创 synchronized的使用场景,锁的升级,锁对象、锁静态变量、锁变量的区别
锁的升级是指在同一个线程中多次获取同一把锁,锁可以升级但不能降级。具体来说,一个线程在持有锁的情况下,可以再次进入被同一把锁保护的代码块(即嵌套。是 Java 中用于实现线程同步的关键字,它可以用来修饰方法或代码块,以实现对共享资源的互斥访问。锁变量是一种更灵活的方式,可以实现更细粒度的线程同步。你可以使用任意对象作为锁,通过在代码块中使用。这种方式允许你更精确地控制同步的范围,不局限于对象实例或类的锁。的使用场景、锁的升级以及锁对象、锁静态变量、锁变量的区别。这种升级是隐式的,不需要额外操作。
2023-08-04 11:10:33
356
1
原创 反射详解(三种反射获取类的方式)
三种反射获取类的方式1.通过对象的getClass方法进行获取2.通过Class.forName()方法获取 //里面填写类的路径 tomcat就是用的这个调用静态方法 forName 获得类名对应的 Class 对象。String dassName = "java.util .Random";Class cl = Class.forName(dassName);3.通过静态属性class可直接获取到该类型对应的Class对象例如:T
2023-08-04 10:19:10
1125
1
原创 元注解介绍
如果一个注解被@Inherited元注解标记,并且它应用于某个类,那么这个注解会被其子类继承。在类继承关系中,子类会自动继承父类上的被@Inherited标记的注解。如果一个注解被@Documented元注解标记,并且它应用于某个元素(如类、方法、字段等),则在生成JavaDoc文档时,这个注解会被包含在文档中,方便开发者查看。如果一个注解被@Inherited元注解标记,并且它应用于某个类,那么这个注解会被其子类继承。在类继承关系中,子类会自动继承父类上的被@Inherited标记的注解。
2023-08-04 09:54:50
75
1
原创 消息队列解耦、异步、削峰:简单实例与原理解析
通过消息队列,我们可以实现异步处理,订单系统只需要发送消息到消息队列,然后立即返回响应给用户,而不需要等待库存系统的响应。消息队列充当了消息的中转站,生产者将消息发送到消息队列,消费者从消息队列中获取消息并进行处理。消息队列可以用于削峰填谷,即将请求暂时存储在消息队列中,然后按照系统处理能力逐渐消费消息,从而平滑处理高峰期的请求,避免系统崩溃或性能下降。当一个系统产生消息时,将消息发送到消息队列,其他系统可以订阅消息队列并接收消息,从而实现解耦。而通过消息队列,我们可以实现它们之间的解耦。
2023-07-21 21:49:33
2274
1
原创 Java Socket实现简易多人聊天室传输聊天内容或文件
通过建立客户端和服务器之间的连接,以及使用输入流和输出流进行数据的读写,可以实现实时的聊天和文件传输功能。ChatClientHandler 类的作用是与客户端建立连接并处理与客户端的通信,包括接收和发送消息以及接收和发送文件。服务器端广播消息:服务器在接收到客户端发送的消息后,可以将该消息广播给其他连接到服务器的客户端。通过遍历保存所有客户端的列表,并调用相应客户端的输出流发送消息给客户端。服务器端接收消息:当客户端连接到服务器后,服务器会为每个客户端创建一个独立的线程,用于处理与该客户端的通信。
2023-07-17 17:28:39
2119
1
原创 正向代理和反向代理
客户端发送请求时,并不直接与目标服务器通信,而是与反向代理服务器通信。反向代理服务器根据请求的内容和规则,将请求转发到相应的目标服务器上,并将目标服务器的响应返回给客户端。在反向代理中,客户端并不知道响应来自哪个具体的目标服务器,只知道响应来自代理服务器。客户端首先将请求发送给代理服务器,然后代理服务器再将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。在正向代理中,目标服务器并不知道请求的真实发起者是客户端,只知道请求来自代理服务器。是代表目标服务器发送响应,隐藏目标服务器身份。
2023-07-15 13:48:52
122
1
原创 HashMap两个对象判等
判断两个对象的hashCode()是否相等。判断两个对象的equals()是否相等。两个对象相等,两个对象的哈希一定相等。哈希相等的两个对象并不一定完全相等。,认为两个对象也不相等。,认为两个对象也不相等。
2023-01-13 08:12:25
538
原创 Maven项目中的依赖管理、RelativePath、Maven多模块项目中Base模块和Common模块
多个子项目引用同样的依赖,则可以避免在每个使用的子项目里都声明一个版本号,这样当想升级或者切换到另外一个版本时,只需要在顶层父容器更新版本号即可,不需要一个一个子项目中修改;Maven会沿用父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用dependencyManagement元素中提供的指定版本号。使用pom.xml中的dependencyManagement元素能让所有的子项目中引用一个依赖而不需要显示的列出版本号。通常会在一个组织或者项目的最顶层。
2023-01-09 17:27:38
1136
原创 统一异常拦截、ioc apo实现操作记录、非法sql拦截
平时我们都会用try catch 或throw的方式去处理异常,统一异常拦截可以进行统一处理将后端的异常,将没有try,catch住的给拦截住,不用每次编码都进行try,catch,降低了开发的复杂度。 如果不统一异常拦截,我们需要写很多try catch实现了解两个注解@RestControllerAdvice可以扫描到所有的controller,所有controller中都有@RestController这个注解Spring在扫描容器的时候,将类归到了Controller中,扫描Controller即可
2022-12-04 15:51:45
686
原创 Mybatis关联映射 多表查询(三种写法优缺点、主流性) 以及分步查询 延迟加载(按需加载、懒加载)
本文其实是我给自己写的保姆级教程,以防自己在新手期忘记了怎么写。。。。也方便自己时常拿出来看看
2022-11-04 21:20:57
2180
3
原创 final关键字的作用 final和基本类型、引用类型
final四个作用final修饰常量 ,值不可以被第二次修改final修饰的类不可以被继承final修饰的方法不可以被重写final防止多线程下的指令重排序,保障线程安全
2022-07-27 16:06:26
310
原创 HTML+CSS+JS 详细知识(新手向)
HTML 超文本标记语言标记语言:通过标签的不同来代表不同的意思mac地址是物化在电脑网盘硬件上的地址IP里其实包含着mac的一部分超文本:有文字之外的一些类似连接、按钮等的东西JavaScript让html有交互能力绝对路径< img src="地址" alt="描述 ">加不加span都没什么变化 的作用是形成独立空间style 通用属性形成独立空间 让元素换行在一行的末尾添加两个或多个空格,然后按回车键,即可创建一个换行 ()。超链接 文字描述部分可以跳转到其他html文件target属性用于设置打
2022-07-09 16:34:05
8108
2
原创 计算机网络 (ISP、计算机网络体系结构 拓扑图)
计算机网络定义: 一些互相连接的,自治的计算机或者智能硬件设备集合信息是如何交换的?1、电路交换(电话)线路被某个终端占用后不会被释放 除非主动释放2、分组交换分组交换是 把大数据拆分成小数据进行分组传输 提高传输效率计算机上的数据是突发的,所以不采用电路交换,而采用分组交换3、ISP(internet service provider)网络服务提供商终端通过交换机连接一级ISP(国际性区域)之间互相连接 某一条线路断后可以通过其他设备进行通信二级ISP(国家/区域性规模)与一级相互连接三级ISP(本地区域
2022-06-26 16:11:22
3608
原创 SpringMVC配置以及Tomcat进行调试
1.新建项目2.选择创建maven3.设置项目名称和包名4.选择Maven home 5.找到maven解压包下的conf里面的setting.xml6.删除冗余部分 7.导入jar包 等待加载完毕8.打开web.xml 替换内容9.在web.xml配置文件中核心控制器DispatcherServletweb.xml中的spring.xml报红不用担心,下面步骤解决报红问题 10.配置springmvc.xml(1)创建java和resource目录在main目录下创建Java和reso
2022-06-07 15:28:39
1367
原创 mysql5.6---windows版本安装(已解压版)
先下载mysql数据库安装包将压缩包放在d盘容易找到的位置 d盘目录下 然后进行解压缩进入解压完毕文件的bin目录复制路径搜索环境变量打开在系统环境变量中找到PATH变量 双击进入后新建一个环境变量将刚刚的路径粘贴进去点击确定配置文件打开mysql的根目录 将my-default.ini文件复制粘贴 并重命名为my.ini双击打开my.ini文件 将里面的内容清空 粘贴以下内容[mysql]# 设置mysql客户端默认字符集defa...
2022-03-05 14:45:37
3069
1
原创 Java配置环境(安装jdk)
首先,先在网站上寻找jdk 下载点击下一步 进行安装继续点击下一步再次点击下一步安装完成后点击关闭即可默认安装是c盘 在c盘C:\Program Files目录下找到Java文件打开发现会有jre和jdk我们接下来打开cmd 检验一下Java环境是否已经安装输入java -version如果显示jdk的版本号 说明jdk已经安装完成============================配置环境===================...
2022-03-05 11:50:15
379
原创 第一周博客作业(Linux搭建web网站基本配置)和一些基本指令(最底部)
首先我们要有一个服务器(我这里选择购买的是腾讯云学生优惠服务器)有了服务器后我们找到控制台找到云服务器进入查看自己购买的云服务器这就是我们刚刚购买的服务器找到更多中的配置安全组点击确认按钮,就配置好安全组了重置一下个人密码用户名设置为root就行接下来打开我们的xshell点击文件-新建填入你的公网IP点击确定后左边目录表会生成一个新建的会话双击新建会话会弹出一个窗口,输入你重置后的密码,用户名为root,就可以登录...
2022-01-20 23:26:08
465
原创 第一周博客作业(计算机网络基本知识、Linux操作系统Java基本知识)
计算机网络信号传输可以通过电流、电磁波,主要是通过电流来传输电压传输 某一时刻只能传输一个bit信号网线是导线,电脑电脑之间,计算机组件之间都是靠高低压传输想要传导速度快可以加线的条数,采取并排的策略,越多越密集越快该图中连接ABCDE的中间设备是交换设备,若没有中间的交换设备,各个电压信号之间传递会相互影响交换设备先储存信息,再发到各个接受信号器,有一定的延迟,距离越远、交换设备越多延迟越高常见的交换设备有:路由器、交换机数据传输之后,无法确定用哪个程序来接收数据,不同
2022-01-20 21:59:16
1598
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人