第一次记录自己的java学习日常,之前都是看其他博主的java知识,现在该自己记录一下了。
对知识做总结
在学校呢,走过了非常多的坑,参加了一些比赛,但是也没有学到什么(含金量高的比赛可以参加,但是需参加之前先沉淀好自己的技术,不要报名了才去准备,得在准备中去报名),学校教的知识都是理论化,对于不考研的我用处不大。保证不挂科,成绩不难看就好了。我觉得沉淀编程技术,思路非常重要,并不用死记代码,现在有大模型ai,死的东西是不用花过多精力的,混个眼熟就好了。重要的是怎么实现的思路,以及怎么优化,问题如何解决。
Redis 删除策略:
Redis 作为内存数据库,其数据都存储在内存中,因此对于数据的删除策略尤为重要,以确保内存的有效利用。Redis 主要采用三种数据删除策略:定时删除、惰性删除和定期删除。
定时删除
定时删除策略是指为每个设置了过期时间的 key 创建一个定时器,在 key 到达过期时间时,由定时器任务立即执行删除操作。这种策略的优点在于能够及时释放内存,但缺点是会给 CPU 带来较大压力,特别是当有大量 key 需要删除时,可能会影响 Redis 服务器的响应时间和指令吞吐量。
惰性删除
惰性删除策略则是在 key 到达过期时间后不立即进行处理,而是等到下次访问该 key 时,再检查其是否过期,如果过期则进行删除。这种策略对 CPU 友好,因为它只在 key 被访问时才进行过期检查,但对内存不友好,因为过期的 key 如果长时间不被访问,就会一直占用内存。
定期删除
定期删除策略是每隔一段时间对一些 key 进行检查,删除其中过期的 key。这种策略既可以减少对 CPU 的影响,又能有效释放过期 key 占用的内存。但是,确定合适的删除操作执行时长和频率比较困难,如果执行太频繁,就会变得像定时删除一样对 CPU 不友好;执行太少,则又像惰性删除一样,过期 key 占用的内存不会及时释放。
Redis 实际上采用的是惰性删除和定期删除的组合策略。惰性删除由 db.c/expireIfNeeded 函数实现,所有键读写命令执行之前都会调用此函数进行检查。定期删除则由 redis.c/activeExpireCycle 函数实现,该函数以一定的频率运行,每次运行时都从一定数量的数据库中取出一定数量的随机键进行检查,并删除其中的过期键。
内存淘汰策略
当 Redis 的内存使用接近设定的最大值时,就需要内存淘汰策略来释放内存。Redis 提供了多种内存淘汰策略,如 volatile-lru、allkeys-lru、volatile-random、allkeys-random、volatile-ttl 和 noeviction 等。其中 allkeys-lru 是常用的策略,它会根据最近最少使用算法(LRU)删除任何 key。配置内存淘汰策略时,需要根据实际业务情况进行选择。
通过上述的删除策略和内存淘汰策略,Redis 能够在保证数据访问正确性的同时,有效管理内存使用,避免内存泄漏,确保数据库性能。对于具体的配置,可以通过修改 Redis 配置文件 redis.conf 中的相关参数来实现,
为什么要用分布式锁
因为在分布式环境下,有多个实例,每一个实例都有自己的jvm机,一个jvm机只能监视自己本地的锁。
线程创建的几种方式
其实我觉得就只有一种就是继承thread 然后new thread,其他的比如实现runnable接口等,都是封装其实就是设计模式
java容器/set list map hashmap linklist hashset arraylist 区别
HashMap 是基于哈希表的 Map 接口实现。
它允许空键和空值。
它不保证元素的顺序,但通常迭代顺序是插入顺序。
HashSet 是基于哈希表的 Set 接口实现。
它不允许重复的元素。
它不保证元素的顺序,但通常迭代顺序是插入顺序
LinkedList 是基于双向链表的 List 接口实现。
它允许重复的元素。
它支持高效的元素插入和删除操作。
ArrayList:基于动态数组实现的List接口,支持随机访问,但插入和删除效率较低
list和数组的相互转换
一个内置函数 aslist 和 toarray
注意
Spring中的AOP切面有很多,会按照0rder排序,按照Order值从小到大依次执行。
Spring事务AOF的order值是Integer.MAX VALsUE,优先级最低。
分布式锁(这里指的基于redisson的分布式锁组件,使用了aop)一定要先于事务执行,因此,我们的切面一定要实现0rdered接口,指定order值小于Integer.MAX VALUE即可,
乐观锁
ABA场景,乐观锁会出现问题 解决——》加时间搓
String不可变
不可变的含义:
字符串的不可变性意味着一旦创建,字符串的值就不能被改变。每当对字符串执行操作(例如拼接或替换)时,都会生成一个新的字符串对象。
为什么不可变:
String的内部数据是一个char数组,是对字符串数组的封装,并且是被final修饰的,创建后不可改变
数据库的事务隔离
看这个
https://www.cnblogs.com/crazymakercircle/p/13917517.html#autoid-h2-5-1-5
第一次记录自己的java学习日常,之前都是看其他博主的java知识,现在该自己记录一下了。的更多相关文章
- Java学习笔记(2)--- 对象和类入门,java包,this 和 super区别
1.对象和类(Object and class): 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作. 面对对象编程是java非常重要的一部分,作者本身之前学过c ...
- Spark编程环境搭建(基于Intellij IDEA的Ultimate版本)(包含Java和Scala版的WordCount)(博主强烈推荐)
福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 Java全栈大联盟 ...
- 【Java学习笔记之二十二】解析接口在Java继承中的用法及实例分析
一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...
- 大白话Java多线程,小白都能看的懂的哦
什么是线程 说到线程我们应该先了解下什么是进程,下面这个图片大家应该都比较熟悉吧. 我们看到的这些单独运行的程序就是一个独立的进程,进程之间是相互独立存在的.我们上面图中的360浏览器.百度云盘等等都 ...
- Java学习笔记:2022年1月10日
Java学习笔记:2022年1月10日 摘要:这篇笔记主要记录了学习<Java核心技术 卷一>的第四章时的一些心得,主要阐述了对象与类这一部分的内容.需要注意的是,这一章的内容需要精心 ...
- Java 学习(6):java Number & Math & String & 数组...常用类型
目录 --- Number & Math类 --- Character 类 --- String 类 --- StringBuffer 类 --- 数组 Number & Math类: ...
- Java学习路线【转】
Java学习路线[转] 第一阶段:JavaSE(Java基础部分) Java开发前奏 计算机基本原理,Java语言发展简史以及开发环境的搭建,体验Java程序的开发,环境变量的设置,程序的执行过程,相 ...
- Java学习笔记:2022年1月7日
Java学习笔记:2022年1月7日 摘要:今天的这篇笔记主要是通过讲解基本的JVM结构来理解Java中一些行为的运行机制,进而更加的深入理解Java的运行原理. 目录 Java学习笔记:2022年1 ...
- Java学习总结:飘逸的字符串
Java学习:飘逸的字符串 前言 相信不管我们运用Java语言来开发项目还是进行数据分析处理,都要运用到和字符串相关的处理方法.这个社会处处有着和字符串相关的影子:日志.文档.书籍等.既然我们离不开字 ...
- Java学习01
Java学习01 第一章 1.JRE与JDK JDK(JAVA Develop Kit,JAVA开发工具包)提供了Java的开发环境和运行环境,主要用于开发JAVA程序,面向Java程序的开发者; J ...
随机推荐
- JVM实战—5.G1垃圾回收器的原理和调优
大纲 1.G1垃圾回收器的工作原理 2.G1分代回收原理-性能为何比传统GC好 3.使用G1垃圾回收器时应如何设置参数 4.如何基于G1垃圾回收器优化性能 5.问题汇总 1.G1垃圾回收器的工作原理 ...
- Git操作的基本命令
git命令常用步骤 初始化,把当前文件夹作为git本地仓库 git init 把本地仓库与选程仓库关联 git remote add origin http://gitee.com/ 把项目区中做了修 ...
- Q:xml 需要转义的字符
XML实体中不允许出现"&","<",">"等特殊字符,否则XML语法检查时将出错,如果编写的XML文件必须包含这些字符 ...
- mac 安装vue
1.git clone https://github.com/vuejs/vue-devtools.git 切换master分支 cd vue-devtools npm install --regis ...
- ORACLE 分页排序后的数据重复或缺失问题
今天一大早业务人员就反映说用户导出的订单数据,有好几单是重复,并且缺失了某一单. 第一步:查询数据表.表里实际数据没有重复,也没有缺失.那么就可能是导出过程出错了(因为是异步分页导出,所以最先怀疑这部 ...
- P3092 [USACO13NOV] No Change G 题解
传送门 题解 思路 看到 \(1\le k\le16\),我们想到状压DP. 以每枚硬币是否被使用为状态,对其进行枚举. 令 \(dp_i\) 表示状态 \(i\) 下最多能支付到第 \(dp_i\) ...
- .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
前言 随着物联网(IoT)技术的迅猛发展,智能设备之间的互联互通变得越来越重要. 推荐一套基于 C# 的高效 IoT 系统,该系统运行在 Linux 开发板上,并支持 Modbus RS485 传感器 ...
- 关于DateTime的自定义转换
关于DateTime的自定义转换.把字符串时间转换成可以供DateTime类型识别的字符串类型的粗略实现. /// <summary> /// 把从数据库中读取的字符串的CurrentTi ...
- FANUC发那科机器人主板维修,故障问题检测
电容损坏引发的故障在电子设备中是特别高的,其中尤其以电解电容的损坏为常见 电容损坏表现为:1.容量变小:2.完全失去容量:3.漏电:4.短路. 电容在电路中所起的作用不同,引起的故障也各有特点.在发那 ...
- 特征转换之python代码
一.连续型变量1.1 连续变量无量纲化(1)无量纲化: 使不同规格尺度的数据转化统一规格尺度(将数据单位统一)(2)无量纲化方法:标准化, 区间所方法 标准化: 将连续性变量转变为 均值0 标准差1 ...