第一次记录自己的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 ...
随机推荐
- 跟着源码一起学:手把手教你用WebSocket打造Web端IM聊天
本文作者芋艿,原题"芋道 Spring Boot WebSocket 入门",本次有修订和改动. 一.引言 WebSocket如今在Web端即时通讯技术应用里使用广泛,不仅用于传统 ...
- 基于开源IM即时通讯框架MobileIMSDK:RainbowChat v8.2版已发布
关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协议,支持iOS.A ...
- Python学习(六)——配套《PyTorch深度学习实战》
1. NumPy介绍 这张图片介绍了Python中两个非常重要的科学计算库:NumPy和SciPy,以及它们的核心功能和特性. NumPy NumPy(Numerical Python)是一个开源的P ...
- 为了解决服务启动慢的问题,我为什么要给Apollo和Spring提交PR?
最近在整理之前记录的工作笔记时,看到之前给团队内一组服务优化启动耗时记录的笔记,简单整理了一下分享出来.问题原因并不复杂,主要是如何精准测量和分析,优化后如何定量测量优化效果,说人话就是用实际数据证明 ...
- neo4j存储数据-图数据库
1. 简介 本文主要介绍neo4j是如何将图数据保存在磁盘上的,采用的是什么存储方式.分析这种存储方式对进行图查询/遍历的影响. 2. 图数据库简介 生产环境中使用的图数据库主要有2种,分别是带标签的 ...
- Kotlin:定义参数是函数的函数、函数内联、具名函数的函数引用
- 第一个helloworld,有点小兴奋
@SpringBootApplication package com.ch.boot; import org.springframework.boot.SpringApplication; imp ...
- Spring AI 提交 PR 实战指南:避免常见坑
今天,我们将简单地了解如何向 Spring AI 提交 PR(Pull Request).在这个过程中,有一些常见的坑需要大家注意和避免,特别是在 Git 操作方面.我们会重点关注提交信息的规范,如何 ...
- HT-018 Div3 能量消耗 题解 [ 绿 ] [ 线性 dp ] [ 前缀和优化 ]
能量消耗:一个前缀和优化 dp 的大典题,要是数据水一点 \(O(n^3)\) 都能硬草过去. 思路 显然,定义 \(dp[i]\) 为考虑前 \(i\) 个塔,并且将第 \(i\) 个塔开启,将前面 ...
- 刷入Magisk错误:1教程
面具是目前使用最多的授权APP了,兼容主流安卓版本,基本上已彻底的替代的之前的supersu授权,面具magisk不仅支持给APP进行授权ROOT,还支持隐藏root功能magiskhide,使得手机 ...