第一次记录自己的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 ...
随机推荐
- 基于Netty,从零开发IM(二):编码实践篇(im单聊功能)
本文由作者"大白菜"分享,个人博客 cmsblogs.cn,有较多修订和改动.注意:本系列是给IM初学者的文章,IM老油条们还望海涵,勿喷! 1.引言 接上篇<IM系统设计篇 ...
- Solution -「UOJ #418」三角形
\(\mathscr{Description}\) Link. 给定一棵含有 \(n\) 个结点的有根树, 点 \(u\) 有正权 \(w_u\). 每次操作可以: 在 \(u\) 上放 \( ...
- Flutter的一些概念(二)
注:本文同步发布于微信公众号:stringwu的互联网杂谈 Flutter的一些概念(二) 1 flutter的核心渲染模块 当应用启动时flutter 会遍历所有的Widget 形成Widget 树 ...
- 彻底讲透Spring Bean生命周期,源码深度剖析!
前言本篇文章主要是要介绍如何在Spring IoC 容器中 如何管理Spring Bean生命周期. 在应用开发中,常常需要执行一些特定的初始化工作,这些工作都是相对比较固定的,比如建立数据库连接,打 ...
- 使用kNN算法改进约会网站配对效果(尺度归一化问题)
简单匹配:
- 京东h5st参数js逆向
扣代码的环节挺简单的就不讲了 直接到重点 发现许多包都会有一个h5st的加密参数 那么我们就要看这个参数是怎么生成的 我们可以根据请求堆栈 找到h5st的入口 当然还有一种更简单的方法 就是直接全局搜 ...
- 首届超算互联网峰会!天翼云弹性高性能计算E-HPC亮相!
4月11日,首届超算互联网峰会暨国家超算互联网平台上线仪式在天津顺利举办,来自部委.省级科技厅.中国科学院.中国工程院.计算产业链相关企业等专家.代表数百人共聚一堂,见证了这一历史性时刻.天翼云作为副 ...
- 玩转云端 | 真实模拟,即压即测,天翼云息壤性能测试PTS实践大揭秘!
满城春色惹人醉,恰是出游好时节. 伴随春暖花开,我国旅游市场快速升温,越来越多的人开始走出家门,去追寻久违的诗和远方.根据文化和旅游部数据中心近日测算,预计2023年,我国国内旅游人数约为45.5亿人 ...
- linux安装flink
参考链接https://blog.csdn.net/boling_cavalry/article/details/85038527 1.下载flink 在Flink官网下载,地址是:https:/ ...
- 数据同步-同步mysql到iceberg后如何确定数据一致性
一.数据打快照做数据比较 1.mysql创建快照 优点:可以选择时间做快照,然后对比 缺点:需要额外的存储空间和处理时间,不好自动化,大表做快照成本高 2.实现方式 create database 快 ...