
八股文
文章平均质量分 91
没有韭菜的饺子
沙袋一枚萌新饺子
展开
-
Java 7.4 - 分布式锁
对于单机多线程,我们使用 ReentrantLock 这类本地锁来控制多个线程对本地共享资源的访问;而对于分布式系统,我们使用 分布式锁 来控制多个服务对共享资源的访问。分布式锁基本要求:1、互斥2、高可用:锁服务时高可用的,即使获取锁的客户端出错,锁也一定会被释放,不影响其他线程对资源的访问。一般选择基于 Redis 或者 ZooKeeper 实现分布式锁,Redis 更多,这里介绍以 Redis 为例的分布式锁实现。原创 2024-08-29 21:21:54 · 577 阅读 · 0 评论 -
Java 7.3 - 分布式 id
ID 就是 数据的唯一标识。分布式 ID 是 分布式系统中的 ID,它不存在于现实生活,只存在于分布式系统中。分库分表:一个项目,在上线初期使用的是单机 MySQL。但随着需求不断增长,单机 MySQL 已经无法满足当前的需求,我们需要进行分库分表。分库分表后,数据分布在不同服务器的数据库上,数据库的自增主键无法满足 ID 的唯一性了。此时我们如何为不同的节点生成全局唯一的主键呢?——分布式 ID。原创 2024-08-29 20:57:53 · 2166 阅读 · 0 评论 -
Java 6.3 - 定时任务
如果我们需要创建一个 15s 后执行的任务的话,那么我们就需要引入 圈数 / 轮数 的概念,这个任务会被放在下标为 3 的时间格中,但是它的圈数为 2。时间轮中的每个时间格代表了时间轮的基本时间跨度,如果 1s 走一个时间格的话,这个时间轮的精度就是 1s。另外,虽然它也支持分布式任务,但是它是在数据库层面,通过数据库的锁实现的,有非常多的弊端比如系统侵入性严重、节点fuza。不过 Timer 的任务只能串行执行,对性能的影响比较大,任务执行时间过长会影响其他任务,发生异常的时候会直接停止。原创 2024-08-29 18:29:50 · 1064 阅读 · 0 评论 -
Java 5.3 - MyBatis
{}和${}的区别是什么?${} 是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于静态文本替换,比如 ${driver} 被静态替换为#{} 是 sql 的参数占位符。原创 2024-08-28 16:37:12 · 1146 阅读 · 0 评论 -
Java 5.1 - Spring
开源的 轻量级的 Java 开发框架,旨在提高开发效率和系统可维护性。一般我们说 Spring 都是指 Spring FrameWork,它是很多模块的集合,使用这些模块可以很方便地帮助我们进行 Java 开发。例如 Spring 中集合了 IoC、AOP,我们通过 Spring 可以很方便地访问数据库、方便集成第三方组件、对单元测试支持比较好。Spring 最核心的思想就是不用重新造轮子,开箱即用,提高效率。Spring 的核心功能是 IoC 和 AOP。Bean 就是 IoC 代为管理的对象。原创 2024-08-28 15:48:31 · 966 阅读 · 0 评论 -
Java 4.3 - Redis
Redis 是使用 C 语言开发的一个数据库,它的数据是存储在内存当中,所以它的存取速度是非常之快的,因此 Redis 被广泛用于缓存。Redis 除了做缓存之外,还可以用来做 分布式锁、消息队列、事务等等。Redis 通过创建快照的方式来保存某个时间点上的数据副本。Redis 创建快照之后,可以对快照进行备份,将它复制到其他服务器而创建具有相同数据的服务器副本(Redis 主从结构),还可以将快照留在原地以便重启服务器使用。RDB 持久化是 Redis 默认采用的持久化方式。原创 2024-08-27 16:42:51 · 889 阅读 · 0 评论 -
Java 4.2 - MySQL
MySQL 是一种关系型数据库,可以持久化存储我们系统中的一些数据,例如用户数据。MySQL 是开源免费且比较成熟的数据库,被应用在各种系统中。MySQL 的默认端口为 3306。1、读未提交:允许读取未提交的更改2、读已提交:允许读取已经提交的更改3、可重复读:同一事物内读取同一数据结果一致4、可串行化:最高的隔离级别,完全服从 ACID 的隔离级别。所有的事务依次逐个执行。原创 2024-08-23 17:20:56 · 1106 阅读 · 0 评论 -
Java 4.1 - 数据库基础
我们可以把存储过程看作是一些 SQL 语句的集合,中间加入了部分逻辑控制语句。存储过程在业务中比较实用,很多时候我们完成一个操作需要写一大串 SQL 语句,这时候我们可以写一个存储过程,方便我们下一次调用。原创 2024-08-23 12:19:43 · 304 阅读 · 0 评论 -
Java 3.2 - 操作系统
1、操作系统,简称 OS,它是管理计算机硬件和软件资源的程序,它是计算机的基石。2、操作系统本质上就是运行在计算机上的一个软件程序,用于管理计算机硬件和软件。3、操作系统可以屏蔽硬件的复杂性。4、操作系统的内核是操作系统的核心部分,它负责系统内存管理、硬件管理、文件管理、应用程序管理。内核是连接应用程序和硬件的桥梁,决定系统的性能和稳定性。综上,操作系统是一个可以同时管理计算机硬件和软件的程序,它的本质就是运行在计算机上的一个软件,它通过内核屏蔽硬件,搭建起硬件和软件之间的桥梁。原创 2024-08-23 11:01:50 · 725 阅读 · 0 评论 -
Java 3.1 - 计算机网络
第四次挥手的时候,客户端发送给服务端的 ACK 可能会丢失,此时服务端没有接收到 ACK,重新发送 FIN,如果客户端收到了 FIN,就会重新发送 ACK到服务端。例如购物车,因为 HTTP 是无状态的,所以我们不知道是谁将商品添加到了购物车中,但我们可以通过服务端给特定的用户创建特定的 session 之后,就可以标识这个用户并且跟踪他了。互联网是通过大量的异构网络和路由器进行连接的,互联网使用的网络层协议是无连接的网际协议和许多路由选择协议,因此互联网的网络层也被叫做网际层或 IP 层。原创 2024-08-22 16:08:57 · 1695 阅读 · 0 评论 -
Java 2.4 - JVM
引用计数法和可达性分析法都需要判断对象引用数量。1.2 之前,如果 reference 类型的数据存储的是另一块内存的起始地址,这块内存代表一个引用。1.2 之后,引用的概念进行了拓展,分为强引用、软引用、弱引用、虚引用(引用强度降序)u4 magic;//Class 文件的标志//Class 的小版本号//Class 的大版本号//常量池的数量//常量池//Class 的访问标记//当前类//父类//接口数量//一个类可以实现多个接口//字段数量//一个类可以有多个字段。原创 2024-08-21 17:24:26 · 866 阅读 · 0 评论 -
Java 2.3 - 多线程
图解:一个进程中可以包含多个线程,线程共享进程的堆空间和方法区(1.8之后的元空间),但它也有自己的程序计数器、虚拟机栈和本地方法栈、进程可以由多个线程组成,它们之间的最大区别是进程之间基本相互独立,而线程之间有可能互相影响。线程的开销小,但不利于资源的管理和保护;进程相反。1、字节码解释器通过改变程序计数器来依次读取指令,以此来完成代码的流程控制。2、当存在多线程的时候,程序计数器用于记录该线程运行到哪个位置,当线程运行的时候知道从哪里开始运行。线程私有原因:线程切换后知道从哪条指令开始执行。原创 2024-08-16 11:58:04 · 937 阅读 · 0 评论 -
Java 2.2 - Java 集合
Java 集合,也叫做容器,主要是由两大接口派生而来:一个是接口,主要用于存放单一元素;另一个是接口,主要用于存放键值对。。原创 2024-08-07 22:56:12 · 700 阅读 · 0 评论 -
Java - 2.1 Java基础
在 Java 中,字节码指 JVM 可以理解的代码,其拓展名为 .class ,它不面向任何特定的处理器,只面向 JVM。Java 通过字节码的方式,一定程度上解决了解释型语言执行效率低的问题,而同时又保留了解释性语言可移植的优点。所以,Java 语言相对高效,但比不过C++。.class -> 机器码,在这一步,JVM类加载器先加载字节码文件,然后对通过解释器进行逐行解释。这样的效率就比较慢,所以我们引入了 JIT 编译器(运行时编译)。原创 2024-08-05 21:54:36 · 1885 阅读 · 0 评论