在Linux系统中,虚拟内存(也称为交换空间或Swap)是一种重要的资源管理技术。当物理内存不足时,操作系统可以将一部分硬盘空间作为虚拟内存来使用,从而扩展可用的内存总量。虚拟内存可以提高系统的稳定性和性能,尤其是在内存密集型的应用场景下。下面是一些关于如何在Linux中使用虚拟内存的基本操作:查看......
每日一句 (2024-12-12)
CSS的position属性用于控制元素的定位方式,它有五种主要的值,每一种都决定了元素如何在页面上定位:static:这是position的默认值。元素按照标准文档流进行布局,即按照源代码中的顺序自然排列。设置top,right,bottom,和left属性不会影响元素的位置。relative:元......
Shell介绍通过编写Shell命令发送给linux内核去执行,操作就是计算机硬件.所以Shell命令是用户操作计算机硬件的桥梁。Shell是命令,类似于windows系统Dos命令Shell是一个门程序设计语言,Shell里面含有变量,函数,逻辑控制语句等等Shell脚本通过Shell命令或程序编......
聚集索引选取规则:如果存在主键,主键索引就是聚集索引。如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引。回表查询回表查询是数据库查询中的一个概念,通常用于描述通过二级索引查找到主键(或者行......
索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。数据结构对比MySQL默认使用的索引底层数据结构是B+树。再......
方案一:开源工具调试工具:Arthas运维工具:Prometheus、Skywalking方案二:MySQL自带慢日志慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志如果要开启慢查询日志,需要在MySQL的配置文件(/etc/my......
Redis是单线程的,但是为什么还那么快?Redis是纯内存操作,执行速度非常快采用单线程,避免不必要的上下文切换可竞争条件,多线程还要考虑线程安全问题使用I/O多路复用模型,非阻塞IO能解释一下I/O多路复用模型?Redis是纯内存操作,执行速度非常快,它的性能瓶颈是网络延迟而不是执行速度,I/O......
主从复制单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。主从数据同步原理主从全量同步:ReplicationId:简称replid,是数据集的标记,id一致则说明是同一数据集。每一个master都有唯一的replid,slave则会继承mas......
了解分布式锁,我们举个常见例子,一个抢券场景。上面代码在单线程执行,或者多线程依次执行都没有问题。但是如果两个线程并发,就有可能会出现问题。如下图所示,假设库存只剩一个,两个线程都查出剩余优惠券但是两个线程还没有运行到扣减库存的那一步,这个时候两个线程都认为还有库存,都会执行扣减库存操作,就会出现问......
数据的淘汰策略:当Redis中的内存不够用时,此时在向Redis中添加新的key,那么Redis就会按照某一种规则将内存中的数据删除掉,这种数据的删除规则被称之为内存的淘汰策略。Redis支持8种不同策略来选择要删除的key:noeviction:不淘汰任何key,但是内存满时不允许写入新数据,默认......
Redis数据删除策略-惰性删除惰性删除:设置该key过期时间后,我们不去管它,当需要该key时,我们在检查其是否过期,如果过期,我们就删掉它,反之返回该key优点:对CPU友好,只会在使用该key时才会进行过期检查,对于很多用不到的key不用浪费时间进行过期检查缺点:对内存不友好,如果一个key已......
RDBRDB全称RedisDatabaseBackupfile(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据主动备份Redis内部有触发RDB的机制,可以在redis.conf文件中找到,......
双写一致性:当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致读操作:缓存命中,直接返回;缓存未命中查询数据库,写入缓存,设定超时时间写操作:延迟双删先删除缓存,再操作数据库正常情况:会出现脏数据情况:先操作数据库,再删除缓存正常情况脏数据情况:如上图所示,无论是先删除Redi......
缓存穿透缓存穿透:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库例:一个get请求:api/news/getById/1解决方案一:缓存空数据,查询返回的数据为空,仍把这个空结果进行缓存优点:简单缺点:消耗内存,可能会发生不一致的问题解决方案二:布隆过滤器......
什么是类加载器⚫类加载器(ClassLoader)是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术。类加载器只参与加载过程中的字节码获取并加载到内存这一部分类加载器的分类类加载器分为两类,一类是Java代码中实现的,一类是Java虚拟机底层源码实现的。⚫类加载器的设计JDK8和8之后......
类的生命周期类的生命周期描述了一个类加载、使用、卸载的整个过程类的生命周期-加载阶段1、加载(Loading)阶段第一步是类加载器根据类的全限定名通过不同的渠道以二进制流的方式获取字节码信息。程序员可以使用Java代码拓展的不同的渠道。2、类加载器在加载完类之后,Java虚拟机会将字节码中的信息保存......
字节码文件的组成以正确的姿势打开文件字节码文件中保存了源代码编译之后的内容,以二进制的方式存储,无法直接用记事本打开阅读。通过NotePad++使用十六进制插件查看class文件:推荐使用jclasslib工具查看字节码文件。Github地址:https://github.com/ingokegel......
什么是JVMJVM全称是JavaVirtualMachine,中文译名Java虚拟机。JVM本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。JVM的功能解释和运行对字节码文件中的指令,实时的解释成机器码,让计算机执行内存管理自动为对象、方法等分配内存自动的垃圾回收机制,回收不再使......
1.继承Thread类/***继承Thread实现多线程方式*/publicclassMyThreadextendsThread{@Overridepublicvoidrun(){System.out.println(hello!);}publicstaticvoidmain......