自定义博客皮肤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垃圾回收之三色标记

所有的垃圾回收算法都要经历标记阶段。如果GC线程在标记的时候暂停所有用户线程(STW),那就没三色标记什么事了。但是这样会有一个问题,用户线程需要等到GC线程标记完才能运行,给用户的感觉就是很卡,用户体验很差。现在主流的垃圾收集器都支持并发标记。什么是并发标记呢?就是标记的时候不暂停或少暂停用户线程,一起运行。这势必会带来三个问题:多标、漏标。垃圾收集器是如何解决这个问题的呢:三色标记+读写屏障。

2024-01-18 16:55:48 543 1

原创 CMS垃圾回收器详解

那么对于目前的Java应用来说,光是方法区的大小就有数百上千兆,里面的类或者常量更是恒河数沙,若是检查这里为起源的引用就需要消耗很多的时间,所以虚拟机自当是有办法直接得到哪些地方存在着对象的引用。并不需要真正的一个不漏的从方法区等GCROOT开始查找。而重新标记阶段则是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短。这里的一致性指的是,不会出现在分析过程中,根节点集合的对象的引用关系还在不断地变化。

2024-01-18 16:02:20 614

原创 双亲委派模型

简单的来说:如果一个类加载器收到了加载某个类的请求,则该类加载器并不会去加载该类,而是把这个请求委派给父类加载器,每一个层次的类加载器都是如此,因此所有的类加载请求最终都会传送到顶端的启动类加载器;只有当父类加载器在其搜索范围内无法找到所需的类,并将该结果反馈给子类加载器,子类加载器会尝试去自己加载。具体的来说:例如有一个类 com.atguigu.classloader.Math需要加载,在双亲委派机制下流程是怎么样的呢?双亲委派机制是 Java 虚拟机加载一个类时为该类确定类加载器的一种机制。

2024-01-18 14:09:15 603

原创 Map接口提供了哪些不同的集合视图

当一个迭代器正在遍历此Set集合时,若map被修改了(除迭代器自身的移除操作,以及对迭代器返回的entry进行setValue外),迭代器的结果会变为未定义。此Set集合支持元素查找和删除,从此Set中删除元素会从map中移除对应的映射,它不支持add和addAll添加操作。当一个迭代器正在遍历一个此Set集合时,若map被修改了(除迭代器自身的移除操作以外),迭代器的结果会变为不确定。此Set集合支持元素查找和删除,从此Set中删除元素会从map中移除对应的映射,它不支持add和addAll添加操作。

2024-01-17 18:23:07 458

原创 List、Map、Set三个接口,存取元素时,各有什么特点

一个对象可以被反复存储进List中,每调用一次add方法,这个对象就被插入进集合中一次,其实,并不是把这个对象本身存储进了集合中,而是在集合中用一个索引变量指向这个对象,当这个对象被add多次时,即相当于集合中有多个索引指向了这个对象。另外,也可以获得所有的key的集合(map.keySet()),还可以获得所有的value的结合(map.values()),还可以获得key和value组合成的Map.Entry对象的集合(map.entrySet())。Set里面不允许有重复(即相等)的元素。

2024-01-16 20:22:37 426 1

原创 集合接口的常见实现类

也是List的一个常见实现类,但是在该类中的大多数方法都加了synchronized关键字,因此相比ArrayList、LinkedList集合在多线程访问时是线程的安全的。: 采用链表结构保存对象,便于向集合中插入和删除对象,但是如果将元素插入到集合的尾部,其实ArrayList原比LinkedList快。Set接口的实现类常用的有HashSet和TreeSet、LinkedHashSet。:底层是哈希表+双链表,遍历元素可以体现添加时顺序。:底层是哈希表,遍历元素和添加顺序、大小顺序无关。

2024-01-16 19:11:21 422 1

原创 深拷贝和浅拷贝

深拷贝和浅拷贝就是指对象的拷贝,一个对象中存在两种类型的属性,一种是基本数据类型,一种是实例对象的引用。1.浅拷贝是指,对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝。2.深拷贝是指,对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。

2024-01-16 18:35:19 658 1

原创 什么是反射

反射就是在程序运行时期,动态的获取类信息并操作该类成员(构造方法,成员变量,成员方法)的过程,这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射。Java的反射机制的实现要借助于4个类Class,Constructor,Field,Method;其中Class代表的时类对象,Constructor-类的构造器对象,Field-类的属性对象,Method-类的方法对象。通过这四个对象我们可以粗略的看到一个类的各个组成部分。Java反射机制提供功能在运行时判断任意一个对象所属的类。

2024-01-16 16:52:03 605 1

原创 final 和 finally的区别

修饰方法: 变成了最终的方法,不能被重写,但是可以被正常调用。修饰类: 变成的最终的类,不能有子类,但是可以被正常创建对象。finally强制退出两种方式:System.exit()、修饰变量: 变成了常量。

2024-01-12 11:53:21 479 1

原创 逻辑运算符

用来连接关系表达式的符号 --- 逻辑表达式的结果也一定是 boolean [多重条件的情况]& : 逻辑与 -> and [并且]运算法则 : 有false则为false使用场景 : 0 < a < 10 --> a > 0 & a < 10;| : 逻辑或 -> or [或者]​ 运算法则 : 有true则为true​ 使用场景 : a < 0 或者 a > 10 --> a < 0 | a > 10;^ : 逻辑异或 -> 中国领结婚证关系。

2024-01-10 21:33:39 341

原创 延迟双删策略

延迟双删策略是分布式系统中数据库存储和缓存数据保持一致性的常用策略,但它不是强一致。其实不管哪种方案,都避免不了Redis存在脏数据的问题,只能减轻这个问题,要想彻底解决,得要用到同步锁和对应的业务逻辑层面解决。

2024-01-10 11:52:42 551

原创 Arrays.asList()的语法和坑点

如果传入一个基本类型的数组,Arrays.asList() 会把它当作一个 Object 类型的元素,而不是把它的每个元素当作 Object 类型。Arrays.asList() 返回的 List 是一个 Arrays 类的内部类,它持有一个对原始数组的引用。Arrays.asList() 是一个 Java 的静态方法,它可以把一个数组或者多个参数转换成一个 List 集合。Arrays.asList() 返回的 List 是可序列化的,并且实现了 RandomAccess 接口,表示它支持随机访问。

2024-01-08 21:19:12 1041

原创 mysql怎么跨库查询_在MySQL中怎样进行跨库查询?

在MySQL中跨库查询主要分为两种情况,一种是同服务的跨库查询;另一种是不同服务的跨库查询;它们进行跨库查询是不同的,下面就具体介绍这两种跨库查询。

2024-01-08 21:15:30 1454

原创 缓存常见的三个问题

​ Redis 经常用于系统中的缓存,可以极大地提高了系统性能和效率,但同时也带来一些问题。一个是数据一致性问题。从严格意义上讲,只要使用缓存,就会出现一致性问题,这是无法解决的。另一个问题是本文将讨论的缓存穿透,缓存击穿和缓存雪崩,这三个问题不仅限于 Redis,其他缓存工具同样需要面对这三个问题。接下来我详细讲解这三个问题以及对应的解决方案。

2024-01-08 21:14:19 382

原创 Zookeeper 实战

Zookeeper 是一个开源的分布式协调服务,它起源于 Google 的 Chubby 项目,并成为 Hadoop 分布式系统的基础组件。Zookeeper 提供了一组简单的原语集,分布式应用程序可以基于这些原语实现同步服务、配置维护和命名服务等。Zookeeper 主要角色是协调器(Controller)和客户端(Client)。协调器负责管理分布式应用的逻辑,客户端则用于与协调器进行交互。在分布式应用中,通常需要一个主控节点(Controller)来管理其他物理分布的子进程。

2024-01-08 21:12:47 8898

原创 传输协议之KCP

通过上面对KCP和TCP的比较我们知道,tcp追求的是完全可靠性和顺序性,丢包后会持续重传直至该包被确认,否则后续包也不会被上层接收,且重传采用指数避让策略,决定重传时间间隔的RTO(retransmission timeout)不可控制,linux内核实现中最低值为200ms,这样的机制导致丢包率短暂升高的情况下应用层消息响应延迟急剧提高,并不适合实时性高、网络环境复杂的游戏。,是传输层的错误纠正协议之一。实际上,除了KCP,市面上还有很多出名的基于UDP实现的可靠协议,都有各自领域很高的实用场景。

2024-01-08 21:08:45 1860

原创 事务的7种传播行为

​ 事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何运行。​ 例如:methodA方法调用methodB方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一个新事务运行,这就是由methodB的事务传播行为决定的。

2024-01-08 21:07:25 876

原创 MybatisPlus常用注解——@TableName解决类名和表名不一致的情况

​ 我们将表user更名为t_user,测试查询功能程序抛出异常,Table ‘mybatis_plus.user’ doesn’t exist,因为现在的表名为t_user,而默认操作的表名和实体类型的类名一致,即user表。此时,可以使用MyBatis-Plus提供的全局配置(在yml文件或者properties文件),为实体类所对应的表名设置默认的前缀,那么就不需要在每个实体类上通过@TableName标识实体类对应的表。​ 若实体类类型的类名和要操作的表的表名不一致,会出现什么问题?

2024-01-08 21:05:41 1615

原创 Java 数据结构篇-二叉树的深度优先遍历(实现:递归方式、非递归方式)

文章目录1.0 二叉树的说明1.1 二叉树的实现2.0 二叉树的优先遍历说明3.0 用递归方式实现二叉树遍历3.1 用递归方式实现遍历 - 前序遍历3.2 用递归方式实现遍历 - 中序遍历3.3 用递归方式实现遍历 - 后序遍历4.0 用非递归方式实现二叉树遍历4.1 用非递归方式实现遍历 - 前序遍历4.2 用非递归方式实现遍历 - 中序遍历4.3 用非递归方式实现遍历 - 后序遍历5.0 深度遍历的完整代码。

2024-01-08 21:04:52 2172

原创 云服务器部署的mysql数据库怎么防止被“黑”

​ 前些天登陆自己写的博客系统突然发现页面一片空白,当时大惊,系统这是又出什么幺蛾子了?于是赶紧看控制台,分析一波。随之发现博客前台调用后台的方法全都是一片红,再一看系统后台发现后台数据库相关操作全都报错了,赶紧打开navicat这才发现部署在云服务器的几个数据库的数据全空了!!只留下了一张warning表提示我联系某个邮箱支付比特币就给恢复数据。。。。。

2024-01-08 20:34:01 500

原创 SQL语句之查询

【代码】SQL语句之查询。

2024-01-08 20:29:47 338

原创 wordpress发送邮件设置

wordpress原来的邮件设置是有些鸡肋的,通过main()函数来发送,且不说能不能发送成功,就算发送成功了,一般也很难进入别人的收件箱,或者连垃圾箱都进不去,所以在这里介绍一个著名的插件:WP-Mail-SMTP,我想多数人的wordpress都是使用这个插件。3、接着点击下面保存设置,然后可以发送一封测试邮件,试试是否可用。左侧导航栏 —— WP mail SMTP。选择邮件程序 —— 其他SMTP。

2024-01-08 20:22:05 1197

原创 IntelliJ IDEA 无法正确识别 Module

导入项目后,把项目中的几个子moudle复制了一份,作为一个新模块。

2024-01-08 20:19:16 1395

空空如也

空空如也

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

TA关注的人

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