自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 数据库与缓存一致性的解决方案

引入缓存可以有效加快系统响应速度。多级缓存结构会带来数据不一致。而解决数据不一致问题我们有四种解决方案。考虑到高并发带来的数据不一致问题,我们推荐使用“删除缓存”的策略。对于“删除缓存”策略而言,更加推荐使用“先更新数据库再删缓存”,“延迟双删策略”看似好用,实则难以估计延迟时间。建议采用消息队列+canal中间件监听MySQL的Binlog的方式实现异步删除缓存。

2024-08-29 22:27:28 1164

原创 Java最强本地缓存——Caffeine

Caffeine是基于Java 1.8的高性能本地缓存库,由 Guava 演变而来,它的性能比Guava也更好,官方声称在基准测试中,Caffeine 的缓存命中率已经接近于最优值,且Caffeine 的内存占用情况也优于 Guava实际上,Caffeine 这种本地缓存和 ConcurrentHashMap 很像——都支持并发,都支持 O(1) 时间复杂度的存取。ConcurrentHashMap 会存储所有存入的数据,且数据移除需要进行显式的操作。

2024-08-28 07:55:21 1877

原创 简谈设计模式之桥接模式

桥接模式是一种结构型设计模式, 它将抽象部分和它的实现部分分离, 使它们可以独立变化. 这意味着可以改变它的抽象和它的实现, 而不会相互影响。

2024-07-16 20:13:15 293

原创 简谈设计模式之适配器模式

适配器模式是结构型设计模式之一, 用于将一个类的接口转换成客户期望的另一个接口. 通过使用适配器模式, 原本由于接口不兼容而无法一起工作的类可以协同工作适配器模式通常有两种实现方式。

2024-07-16 20:12:38 513

原创 简谈设计模式之代理模式

代理模式是一种结构型设计模式, 主要用于为其他对象提供一种代理, 以控制对这个对象的访问. 代理模式可以在不修改目标对象的前提下, 通过代理对象在访问目标对象之前或之后增加额外的操作。

2024-07-12 19:58:22 512

原创 简谈设计模式之建造者模式

建造者模式是一种创建型设计模式, 旨在将复杂对象的构建过程与其表示分离, 使同样的构建过程可以构建不同的表示.

2024-07-10 22:38:21 522

原创 简谈设计模式之原型模式

原型模式是一种创建型设计模式, 用于创建对象, 而不必指定它们所属的具体类. 它通过复制现有对象 (即原型) 来创建新对象. 原型模式适用于当创建新对象的过程代价较高或复杂时, 通过克隆现有对象来提高性能。

2024-07-09 20:25:48 485 2

原创 简谈设计模式之工厂模式

工厂模式是一种创建型设计模式, 旨在将对象的创建过程和使用过程分离. 这样可以在不改变客户端代码的前提下, 灵活创建不同类型的对象。

2024-07-09 20:25:08 352

原创 简谈设计模式之单例模式

上一篇博客已经介绍了设计模式及其设计原则, 在这篇博客中笔者会介绍一下单例模式, 也是最简单的一种设计模式。

2024-07-08 20:40:46 1364

原创 简谈设计模式之设计原则

设计模式是软件工程中解决特定问题的通用解决方案。这些模式提供了设计结构和最佳实践,帮助开发者创建灵活、可重用和可维护的代码。

2024-07-08 20:39:42 384

原创 JUC专题——Java中的锁

本文部分内容节选自《Java并发编程的艺术》锁是用来控制多个线程访问共享资源的方式, 一般来说, 一个锁能够防止多个线程同时访问共享资源 (但是有些锁可以允许多个线程并发的访问共享资源, 比如读写锁)使用 关键字将会隐式地获得锁, 但是它将锁的获取和释放固化了, 也就是先获取再释放. 当然这种方式简化了同步的管理, 可是扩展性没有显式地获取和释放来的好队列同步器 是用来构建锁或者其他同步组件的基础框架, 使用一个 int 成员变量表示同步状态, 通过内置的FIFO队列来完成资源获取线程的排队工作同步器的主

2024-05-19 16:41:20 830

原创 使用Github+Picgo+npm实现免费图床

写博客的时候经常需要各种图片来丰富自己的博客内容,因此我们需要一个好的图床。市面上虽有不少好的图床,但大多需要收费,本文介绍了使用Github+npm的方式来做图床,基于npm的高速节点来保存/获取博客中的图片

2024-04-29 10:20:25 1436 3

原创 使用Github Action实现Hexo博客自动化部署

每次部署Hexo都需要运行指令三件套,随着文章越来越多,编译的时间也随之越来越长,通过,我们只需要在每次完成博客的编写或修改以后,将改动直接push到远程仓库,之后的编译部署的工作统统交给CI来完成即可。

2024-04-27 11:28:32 1044

原创 JUC专题——Java并发基础

现代操作系统使用时分的形式调度运行的线程, 操作系统会分出一个个时间片, 线程会分配到若干时间片, 当线程的时间片用完了就会发生线程调度, 并等待下次分配. 时间片多少决定了线程使用处理器资源的多少, 而线程优先级就是决定线程需要多或者少分配一些处理器资源的线程属性。在运行线程之前要构造一个线程对象, 线程对象在构造时候需要提供线程所需要的属性, 如线程所属的线程组, 优先级, 是否为Daemon线程等信息。方法来修改优先级, 默认的优先级为 5. 优先级高的线程分配时间片的数量要多于优先级低的线程.

2024-04-18 11:51:03 267

原创 JUC专题——Java并发机制的底层实现原理

Java 语言规范中对 volatile 的定义如下:Java 编程语言允许线程访问共享变量, 为了保证共享变量能被准确和一致地更新, 线程应该确保通过排他锁单独获得这个变量. 如果一个变量被声明为 volatile, 那么 Java 线程内存模型保证所有线程看到这个变量的值是一致的volatile 的两条实现原则Lock前缀指令会引起处理器缓存写回到内存一个处理器缓存回写到内存会导致其他处理器的缓存无效。

2024-04-16 13:00:37 718

原创 JVM专题——垃圾回收

本文部分内容节选自Java Guide和《深入理解Java虚拟机》, Java Guide地址: https://javaguide.cn/java/jvm/jvm-garbage-collection.html回顾堆内存的结构. Java 自动内存管理的主要区域是 Java 堆, 因此 Java 堆也被称为 GC 堆在 JDK1.7及以前的版本, 堆内存分为以下三部分:JDK1.8 之后, 永久代被元空间取代具体的关于堆内存基本结构相关信息, 请看JVM专题3大多数情况下, 对象在新生代中Eden区分配,

2024-04-06 10:33:27 870

原创 JVM专题——内存结构

本文部分内容节选自Java Guide和《深入理解Java虚拟机》, Java Guide地址: https://javaguide.cn/java/jvm/memory-area.htmlJVM 在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域. 这些区域有各自的用途, 以及创建和销毁的时间, 有的区域随着虚拟机进程的启动而一直存在, 有些区域则是依赖于用户线程的启动和结束而建立和销毁. 根据 Java 虚拟机规范 的规定, JVM 所管理的内存将会包括以下几个运行时区域线程

2024-04-05 13:59:51 1480

原创 JVM专题——类文件加载

JVM 中内置了3个重要的(启动类加载器): 最顶层加载类, 由C++实现, 通常表示为null, 且没有父级, 主要用来加载 JDK 内部的核心类库以及被参数指定的路径下的所有类(扩展类加载器): 主要负责加载目录下的jar包和类以及被系统变量所指定的路径下所有的类(应用程序类): 负责加载当前应用 classpath 下所有的jar包和类除了上面三个类加载器, 用户还可以自定义类加载器除了是 JVM 自身的一部分之外, 其他所有的类加载器都是在 JVM 外部实现的, 并且全部继承自。

2024-04-04 15:57:46 833 1

原创 JVM专题——类文件结构

本文部分内容节选自Java Guide和《深入理解Java虚拟机》, Java Guide地址: https://javaguide.cn/java/jvm/class-file-structure.htmlClass文件是一组以8个字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在文件之中,中间没有添加任何分隔符, 这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据, 没有空隙存在。当遇到需要占用8个字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8个字节进行存储。 结

2024-04-01 19:16:03 1037

原创 Java集合知识总结(下)

前面已经提及了JDK1.7及其之前的版本下HashMap的多线程操作可能导致死锁. 实际上, 在 JDK1.8及其之后的版本下, 在多线程环境中,HashMap在扩容时可能会导致数据丢失的问题JDK1.8之后, 在HashMap中, 多个键值对可能会被分配到一个桶中, 并以链表或红黑树的形式存储. 多个线程对HashMap的put操作 会导致数据不安全, 具体来说会导致数据覆盖两个线程1, 2同时进行 put 操作, 并且发生了哈希冲突。

2024-03-30 11:36:48 963

原创 蓝桥杯每日一题:扫雷

个整数, 相邻整数之间用一个空格分隔. 如果对应的整数为 0 , 表示这一格没有地雷, 如果对应的整数为 1 , 表示这一格有地雷。简单的爆搜题, 非常简单, 而且其实这道题就是爆搜的模板题. 有系统练习过的话直接秒ac。对于没有地雷的方格, 输出这格周围的地雷数量. 对于有地雷的方格, 输出 9。请为每个空位置标一个整数, 表示周围八个相邻的方格中有多少个地雷。列 的方格图中有些位置有地雷, 另外一些位置为空。下面给出题解代码, 请注重思考, 不要无脑cv。个整数, 相邻整数之间用空格分隔。

2024-03-23 11:25:35 2719 2

原创 蓝桥杯每日一题:统计子矩阵

我最开始考虑的方法是 二维前缀和, 因为这是一个二维矩阵, 但后续发现用二维前缀和会tle. 看了题解思路才知道其实可以变成一位前缀和, 只统计纵向的前缀和, 然后用滑动窗口找到合适的区间。下面给出题解代码, 请注重思考, 不要无脑cv。) 满足子矩阵中所有数的和不超过给定的整数。题目来源:第十三届蓝桥杯软件赛省赛 B组。, 请统计有多少个子矩阵 (最小。思路: 前缀和 + 滑动窗口。: 第一行包括三个整数。: 一个整数代表答案。

2024-03-22 10:49:47 1062 1

原创 Java集合知识总结(上)

Java集合类相关知识,适用于已经学习了Java集合的新人,也适用于准备面试复习基础八股的老人。部分内容节选自Java Guide

2024-03-21 11:53:34 1259

原创 蓝桥杯每日一题:修建灌木

棵灌木整齐的从左向右排成一排, 爱丽丝在每天傍晚会修建一棵灌木, 让灌木的高度变为 0 厘米. 修建灌木的顺序是从最左侧的灌木开始, 每天向右修建一棵灌木. 当修建了最右侧的灌木之后, 她会调转方向, 下一天开始向左修剪灌木. 直到修剪了最左的灌木后再次调转方向. 然后如此循环往复。灌木每天从早到晚都会长高 1 厘米, 而其余时间不会长高. 在第一天的早晨, 所有灌木的高度都是 0 厘米. 爱丽丝想知道每棵灌木最高长到多高。题目来源: 第十三届蓝桥杯大赛软件赛省赛B组。行, 每行一个整数, 第。

2024-03-21 10:53:58 515

原创 蓝桥杯每日一题:接龙数列

. 例如, 12, 23, 35, 56, 61, 11是接龙数列, 12, 23, 34, 56 不受接龙数列, 因为 56 的首位数字不等于 34 的末位数字. 所有长度为 1 的整数数列都是接龙数列。我们发现, 在这个接龙数列中, 我们只需要考虑数字的首位和末位, 其他的不用考虑. 那么我们只需要。. 但是考虑到本题的数据范围 1e5 , 很明显我们不能直接用, 否则会tle. 必须得考虑优化。, 请你计算最少从中删除多少个数, 可以使得剩下的数列是接龙数列。为末位) , 从上一个结尾为。

2024-03-20 09:00:00 1144

原创 Java基础知识总结(下)

Java的基础知识。适用于刚学完Java基础的新人,或者正在准备面试复习基础知识的老人。部分内容节选自Java Guide

2024-03-19 13:15:03 1297

原创 蓝桥杯每日一题:子串简写

程序猿圈子里正流行一种很新的简写方法:对于一个字符串,只保留首位字符,将首位字符之间的所有字符用这部分的长度代替。例如internationalization简写成i18n,Kubernetes简写成K8s,Lanqiao简写成L5o等。下面给出题解代码, 共两个方案, 但核心思路都是一样的. 请注重思考, 不要无脑cv。先说这道题的解题方法: 二分法or双指针, 两种方案的题解我都会给出来。的下标单独用两个vector进行维护, 我们假设维护。的字符串都可以采用这种简写方法(长度小于。

2024-03-19 08:30:00 704

原创 蓝桥杯每日一题:岛屿个数

一个岛屿是否被包围住, 主要看它能不能接触到最外围. 如果能, 那就不被包围, 如果不能, 那就被包围了, judge函数就是做这个判断的. 这个地方要注意, 这里能不能接触到外围, 除了上下左右四个方向之外, 还要考虑左上左下右上右下其他四个方向, 共计八个方向. 但是bfs函数(就是单看块是否连通的情况)只要考虑上下左右, 特别注意。其实和之前讲过的飞机降落一样, 都是用搜索, 只不过这次不是深搜了, 是用的广搜。个不同的格子,使得 他们的坐标能够组成一个这样的排列:(个格子就构成了一个 “环”。

2024-03-18 11:13:24 909

原创 Java基础知识总结(中)

Java的基础知识。适用于刚学习完Java基础的新人,或者正在准备面试复习基础知识的老人。部分内容节选自Java Guide

2024-03-17 20:10:51 816

原创 Java基础知识总结(上)

JavaEE的基础知识。适用于刚学习完Java基础的新人,或者正在准备面试复习基础知识的老人。部分内容节选自Java Guide。

2024-03-17 08:49:03 770 1

原创 蓝桥杯每日一题:飞机降落

这道题数据范围特别小, 最多只有10架飞机, 因此可以直接DFS搜索.如果合法的话就输出"YES", 找不到合法方案就输出"NO"一架飞机降落完毕时, 另一架飞机可以立即在同一时刻开始降落, 但是不能在前一架飞机完成降落之前开始降落。: 对于每组数据, 输出 YES 或者 NO, 代表是否可以全部安全降落。时刻到达机场上空, 到达时它的剩余油料还可以盘旋。题目来源:第十四届蓝桥杯大赛软件赛省赛B组。对于每组数据, 第一行包含一个整数。个单位时间, 即它最早可以于。时刻降落, 最晚可以于。

2024-03-17 08:45:40 863

原创 蓝桥杯每日一题:冶炼金属

蓝桥杯省赛要来了, 从acm退役之后平时都在刷力扣题, 没咋刷这种acm模式的题了, 蓝桥杯的代码是acm模式, 所以最近得开始加训. 写题的时候顺带分享一下自己写题的题解。要大的话, 那么说明我们找到的这个值很明显是偏小的;反之, 这个值是偏大的. 对于checkMax函数而言, 如果我们找到一个值,其实这道题的考点是二分. 因为如果一个一个找, 效率会很低而且有些样例大概率过不去, 如果我们要快速找到这个。值, 能想到的方法就是二分. 那怎么找呢, 这里要找最大值, 还要找最小值。

2024-03-16 13:42:09 666 1

原创 基于VMware虚拟机安装MacOS BigSur系统

这周用VMWare搞了个MacOS虚拟机,也算是完成初中高中时候的梦想了吧~~(那时候我的电脑配置还很拉跨,带不动虚拟机)~~ 写一篇博客记录一下,当然这也是yonagi04.github.io建站的第一篇新博客。

2024-03-16 11:38:47 823 1

原创 《操作系统导论》(OSTEP)进程调度部分读书笔记

任务的周转时间定义为任务完成时间减去任务到达系统的时间T周转时间​T完成时间​−T到达时间​周转性能是其中一个性能指标, 另一个性能指标是公平, 性能和公平在调度系统中往往是矛盾的, 例如, 调度系统可以优化性能, 但代价是阻止一些任务运行, 这就降低了公平。

2023-12-19 19:57:24 906 1

原创 《深入理解计算机系统》(CSAPP)第七章读书笔记

在编译时, 编译器向汇编器输出每个全局符号, 或者是强或者是弱, 而汇编器把这个信息隐含地编码在可重定位目标文件的符号表里, 函数和以及初始化的全局变量是强符号, 未初始化的全局变量是弱符号规则1: 不允许有多个同名的强符号规则2: 如果有一个强符号和弱符号同名, 那么选择强符号规则3: 如果有多个弱符号同名, 那么在这些弱符号中随机选择一个。

2023-12-15 19:11:07 122

原创 《操作系统导论》(OSTEP)操作系统与进程部分 读书笔记

操作系统将(如CPU, 内存) 转换成更加通用, 更加强大且易于使用的虚拟形式因为虚拟化让许多程序运行(从而共享CPU), 让许多程序可以同时访问自己的指令和数据(从而共享内存), 让许多程序访问设备(从而共享磁盘等), 所以操作系统有时被称为资源管理器. 每个CPU, 内存和磁盘都是系统的资源, 操作系统扮演的主要角色就是管理这些资源, 以做到高效或公平, 或者实际上考虑其他许多可能的目标。

2023-12-11 18:07:41 951 1

原创 《计算机网络:自顶向下方法》应用层 读书笔记

Web的应用层协议是超文本传输协议(HTTP), 它是Web的核心HTTP由两个程序实现 : 一个客户程序和一个服务器程序, 客户程序和服务器程序分别运行在不同的端系统上, 通过交换HTTP报文进行会话Web页面是由对象组成的, 一个对象只是一个文件, 多数Web页面含有一个HTML基本文件以及几个引用对象HTTP使用TCP作为他的支撑运输协议HTTP客户首先发起一个与服务器的TCP连接, 一旦连接建立, 该浏览器和服务器进程就可以通过套接字接口访问TCP。

2023-12-11 16:51:23 398 1

原创 《深入理解计算机系统》(CSAPP)第六章读书笔记

*随机访问存储器(RAM)**分为两类: 静态的和动态的静态RAM(SRAM)比动态RAM(DRAM)速度更快, 价格也更贵SRAM将每个位存储在一个双稳态的存储器单元里, 每个单元是由一个六晶体管电路组成的. 这种电路有一种属性: 它可以无限期地保持在两个不同的电压配置或状态之一, 其他任何状态都是不稳定的由于SRAM存储器单元的双稳态特性, 只要有电, 它就会永远地保持它的值。

2023-11-30 15:11:40 133

原创 《计算机网络:自顶向下方法》计算机网络概述部分 读书笔记

因特网是一个世界范围的计算机网络,即它是一个互联了遍及全世界的数以亿计的计算设备的网络所有的因特网端系统,都称为或端系统通过和连接在一起当一台端系统有数据要向另一台端系统发送时, 发送端系统将数据分段, 并为每段加上首部字节, 由此形成的信息包称为分组交换机从它的一条入通信链路接收到达的分组, 并从它的一条出通信链路转发该分组. 分组交换机最著名的类型是和从发送端系统到接收端系统, 一个分组所经历的一系列通信链路和分组交换机称为通过该网络的。

2023-11-20 17:22:59 72 1

原创 Cloudflare WAF防护策略介绍

上篇文章介绍了如何配置Cloudflare防火墙及其相关的防护体系,这次简单介绍一下Cloudflare的WAF防护策略,方便大家在设计防火墙规则的时候对不同的情况选择更加合适的防护方案。

2023-11-07 16:54:03 1360 1

空空如也

空空如也

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

TA关注的人

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