自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 队列和堆栈区别

队列适用于需要按顺序处理数据的场景,如任务调度和消息队列;堆栈则适用于需要后进先出处理的场景,如函数调用管理和表达式求值。在实际应用中,根据具体需求选择合适的数据结构可以提高程序的效率和可维护性。

2024-07-04 17:02:04 1083

原创 【必会面试题】快照读、当前读是什么?如何理解

fill:#333;color:#333;color:#333;fill:none;MVCC机制锁机制缓存机制是否当前读快照读是否基于快照读取根据MVCC选择版本从磁盘读取快照数据加锁读取数据是否已加锁?加锁从磁盘读取最新数据等待或失败处理锁冲突从缓存读取数据更新缓存缓存中存储多个版本读取请求缓存命中?选择读模式返回最新数据返回快照数据。

2024-07-04 11:55:27 1174

原创 【必会面试题】TCP协议的粘包拆包

与粘包相反,拆包是指发送端的一个较大的TCP数据包在传输过程中被分割成多个较小的数据包到达接收端。这是因为网络层和传输层(TCP)有各自的MTU(最大传输单元)限制,数据包必须适应这些限制才能在网络中传输。:在TCP协议中,粘包指的是多个TCP报文段在传输过程中被接收端连续接收,而没有明显的边界区分,看起来就像是一个连续的数据包。TCP协议的粘包和拆包是数据传输过程中常见的现象,它们不是TCP协议本身的设计目的,而是基于TCP协议的特性自然产生的结果。

2024-06-14 12:04:17 889

原创 【必会面试题】事务的四大特性?ACID

事务的四大特性,即ACID(原子性、一致性、隔离性、持久性),是数据库管理的基石。

2024-06-12 18:09:49 663

原创 【必会面试题】Java异常类型

Java中的异常是我们开发过程中必定会遇到的情况。Error(错误):(虚拟机错误):如 (内存溢出)、(堆栈溢出)。:线程终结。:类定义相关的问题,如 (找不到类定义)。Exception(异常):2.1 Checked Exception(检查异常,也称受检异常):2.2 Unchecked Exception(非检查异常,也称运行时异常):用户自定义异常:

2024-06-12 13:10:58 242 2

原创 【必会面试题】布隆过滤器

要检查一个元素是否在集合中,同样使用这k个哈希函数计算k个位置,如果所有这些位置的位都是1,则算法判断元素“可能”在集合中。但存在一定的误报率,即元素实际上并不在集合中,但由于哈希碰撞,计算出的位置也都是1。:一旦一个位被设置为1,就不能再回退,因此从布隆过滤器中删除元素比较困难,虽然有一些方法可以部分解决这个问题,但通常是以牺牲其他性能为代价的。:使用多个不同的哈希函数,当一个元素被加入布隆过滤器时,这个元素会被这k个哈希函数分别映射到位数组的不同位置,并将这些位置的比特位设为1。

2024-06-11 18:39:21 462

原创 【必会面试题】什么是QPS?如何统计QPS?

QPS(Queries Per Second),即每秒查询率,是对一个特定的服务或系统在单位时间内能够处理的查询请求的数量度量。qps是评估系统处理能力的一个重要指标,广泛应用于数据库、Web服务器、API接口等性能测试和监控中。

2024-06-11 14:09:38 1069

原创 【必会面试题】自旋中的ABA问题

自旋锁(spinlock)是一种用于实现互斥同步的锁机制,其基本思想是让线程在等待获取锁的过程中不断地检查锁是否可用,而不是进入睡眠状态。总之,ABA问题虽然在某些情况下可能影响程序的正确性,但通过合适的设计和数据结构,是可以有效避免的。:这是一种理论上可行但在大多数现代处理器上不直接支持的解决方案,它会在一次操作中同时比较和交换两个或更多变量,确保值和版本号同时满足条件。),这种类型的引用不仅存储对象引用,还存储一个标记位,可以用来标识对象状态的改变,即使值回滚也能察觉。的值为B,接着又改回为A。

2024-06-11 09:51:16 416

原创 【必会面试题】ThreadLocal的底层原理及其使用场景

ThreadLocal是Java中用于创建线程局部变量的一个类,它提供了一种将变量绑定到当前线程的技术,使得每个线程都拥有该变量的独立副本,即使是在多线程环境下也不会互相干扰。存储当前请求的会话信息、用户身份认证等上下文数据,使得在整个请求的处理链路中,各个组件可以方便地访问这些信息,而无需通过方法参数传递,简化了代码。:在多线程环境中,为每个线程分配独立的数据库连接,避免了连接的共享带来的竞争问题,同时可以在线程结束时方便地关闭连接,减少资源泄露风险。可以减少不必要的数据复制和同步开销,提高程序效率。

2024-06-07 12:06:04 1128

原创 【必会面试题】JVM内存分区?垃圾回收(GC)算法?如何处理OOM?

JVM(Java虚拟机)内存划分为多个区域,以支持其运行时环境和对象的生命周期管理。

2024-06-07 10:13:35 919

原创 【必会面试题】快照读的原理

快照读(Snapshot Read)是数据库管理系统中一种特殊的读取机制,主要用于实现多版本并发控制(MVCC, Multi-Version Concurrency Control)策略,尤其是在MySQL的InnoDB存储引擎中。其核心目的是在高并发环境下提供一致性的非锁定读取,以提高读操作的性能。

2024-06-06 13:06:03 831

原创 【学习笔记】Git常用命令

Git是一个分布式版本控制系统,用于跟踪代码更改并协助多人协同工作。

2024-06-06 10:50:34 995

原创 【学习笔记】java SPI机制

Java SPI (Service Provider Interface) 是 Java 提供的一套用来发现和加载第三方服务的机制。SPI 的主要目的是为了解耦框架与插件(服务提供商)之间的依赖关系,使得框架能够灵活地在运行时根据配置加载不同的服务实现。

2024-06-05 18:30:20 353

原创 【学习笔记】Redis-AOF日志重写的机制

AOF(Append Only File)日志重写是Redis中一种优化持久化文件大小和提高数据恢复效率的机制。

2024-06-04 13:36:32 760

原创 【必会面试题】Java内存模型JMM

Java内存模型(Java Memory Model, JMM)是Java平台定义的一种规范,用于描述多线程情况下的变量访问原则线程交互及线程内存与主内存的协同工作。JMM的目的是为了屏蔽各种硬件和操作系统内存访问差异,提供一致的内存访问视图,保证数据共享和同步等多线程场景下的数据安全性。

2024-06-03 17:20:00 696

原创 【必会面试题】JVM的垃圾回收机制

Java虚拟机(JVM)的垃圾回收(Garbage Collection, GC)机制是其自动内存管理的核心特性之一,它负责自动回收不再使用的对象所占用的内存空间,以避免内存泄漏和内存溢出,同时提高程序的运行效率。: 垃圾回收的第一步是确定哪些对象是可达的,哪些是不可达的。可达性分析通过从一系列称为“GC Roots”的对象开始,沿着对象引用关系遍历对象图,标记所有可达对象。未被标记的对象被视为垃圾。: JVM为程序中的对象分配内存,并在对象不再需要时自动回收内存,无需我们显式释放。

2024-06-02 23:41:31 476

原创 【必会面试题】Redis OOM怎么处理?

处理Out Of Memory (OOM) 错误,尤其是在Redis这样的内存数据库中,需要一系列的诊断和优化步骤。通过以上步骤,可以有效地预防和处理Redis中的OOM问题,保持系统的稳定运行。

2024-06-02 23:29:05 418

原创 【必会面试题】除了雪花算法之外的分布式事务ID生成方案

除了雪花算法(Snowflake)之外,还有多种分布式ID生成方案,以及一些利用中间件实现的方案。INCR每种方案都有其适用场景和优缺点,选择时需要根据系统的需求、性能要求、扩展性和可靠性等因素综合考量。让我们通过两个示例来展示如何使用Redis和Snowflake算法生成分布式ID。

2024-06-02 11:50:31 490

原创 【必会面试题】如何做缓存预热?

缓存预热是一种策略,用于在系统启动或特定资源(如静态文件、数据库查询结果)变更后,预先将数据加载到缓存系统中,确保用户请求时可以直接从缓存中快速获取数据,而不需要先查询数据库或其他持久化存储,从而提升系统的响应速度和用户体验。

2024-05-31 19:49:23 534

原创 【必会面试题】线程池的拒绝策略

Java线程池的拒绝策略是指 当线程池无法接受更多任务时采取的行为策略,通常发生在线程池已经达到最大线程数、工作队列也已满载的时候。接口来自定义策略,例如记录日志、将任务转移到其他队列或使用降级策略执行任务等。接口定义了拒绝策略,并自带几个常用的实现。除此之外,我们还可以通过实现。

2024-05-31 13:33:34 226

原创 【必会面试题】高并发环境下,你遇到过哪些问题?

在高并发环境下,系统经常会遇到一系列挑战和问题,这些问题如果不妥善处理,可能会导致系统性能下降、服务不可用甚至数据丢失。

2024-05-30 18:40:44 720

原创 【必会面试题】索引结构的hash索引和B+树的索引区别

哈希索引和B+树索引是数据库中两种常见的索引结构,它们在存储方式、查询效率、适用场景等方面有所不同。

2024-05-30 12:02:19 464

原创 【必会面试题】什么是消息幂等性?

在分布式系统或者消息队列中,你有没有思考过这样一种情况:一个操作由于各种原因产生了多次重复的请求或者执行了多次,如何保证结果一致且没有副作用?消息幂等性是指在消息队列或分布式系统中,无论消息被处理多少次,其对业务系统产生的影响都应该是相同的,就像只处理了一次一样。换句话说,具有幂等性的操作,重复执行多次,其结果和执行一次的效果完全相同,不会因为重复执行而产生副作用或不一致的状态。

2024-05-29 14:54:40 482

原创 【必会面试题】聚簇索引和非聚簇索引

聚簇索引和非聚簇索引是两种不同类型的索引结构,主要应用于关系型数据库。聚簇索引直接决定了数据的物理排列,适合基于主键的快速查询和排序。非聚簇索引提供了对其他列的快速访问路径,但可能需要额外的步骤来获取完整数据行,适用于辅助列的查询优化。根据实际的查询需求和数据操作模式合理选择和创建索引,可以有效提升数据库的查询性能。

2024-05-29 11:55:53 694

原创 【必会面试题】synchronized锁升级的过程

关键字用于实现同步控制,以保护共享资源免受并发访问的影响。为了提高性能,特别是针对多线程环境中的锁机制,Java引入了锁升级的概念。锁升级的过程主要是为了减少锁操作的开销,根据竞争情况动态地调整锁的类型,从低开销到高开销逐步升级。锁升级的过程是一个不可逆的过程,一旦升级到重量级锁,除非线程释放锁,否则不会降级。整个锁升级机制旨在平衡并发性能与资源消耗,确保在不同并发程度下都能提供相对高效的同步机制。:对象最初处于无锁状态,没有任何线程持有该对象的锁。

2024-05-28 13:00:35 264

原创 【必会面试题】Redis 中的 zset数据结构

跳跃表是一种可以进行快速查找、插入和删除操作的数据结构,它通过在链表的基础上增加多级索引来实现高效的查找。此外,在特定条件下(如跳跃表的平均层数超过32层),Redis 可能还会使用哈希表来优化跳跃表的某些操作。压缩列表是一种节省空间的连续内存块结构,每个元素紧挨着存储,可以减少内存碎片。在压缩列表中,每个元素有两个相邻的节点,分别存储成员和分值。的实际数据量和数据特点动态选择最适合的底层数据结构,以达到最佳的性能和内存使用效率。:如果不满足上述条件,Redis 将使用跳跃表作为。

2024-05-27 22:53:25 277

原创 【必会面试题】计算机网络分层模型 五层模型?七层模型?

计算机网络分层模型是一种将复杂的网络通信功能分解为若干个更易于管理和理解的层次的方法。不同的分层模型有不同的层数和职责划分,但其基本思想都是通过分层来简化网络的设计、实现和维护。每层都为上一层提供服务,并且依赖于下一层的服务,这种分层设计使得各层可以独立开发和维护,同时也便于故障排查和协议升级。不同的网络设备和软件组件通常专注于实现某一层或几层的功能。: 提供在单个链路上的无差错传输,包括介质访问控制(MAC)和逻辑链路控制(LLC)子层。: 负责在不同网络间进行数据包的路由选择和转发。

2024-05-27 17:55:12 434

原创 Java反射机制

Java反射机制是重要的核心特性,反射机制就是允许程序在运行时动态地获取类的信息(如类名、方法名、参数类型等),创建和操作对象,甚至调用方法和改变字段值。这使得Java能够在编译期未知类的情况下,对其进行操作,大大增强了语言的灵活性和扩展性。:利用反射可以创建动态代理类,这在需要为一组接口或类提供统一处理逻辑(如日志记录、权限控制)时非常有用。:可以获取类的字段(包括私有字段)和方法信息,并能修改字段值或调用方法。类型的对象,这个对象包含了类的全部信息。获取方法,随后通过相应方法设置值或执行方法。

2024-05-25 23:27:47 449 1

原创 【必会面试题】Redis如何实现分布式锁?

为了解决分布式系统中并发控制和资源同步的问题。传统的单机系统:使用如Java中的synchronized关键字或ReentrantLock等机制来实现线程间的同步,确保同一时间只有一个线程能访问共享资源。分布式系统环境:服务被部署在多台机器上,传统的本地锁机制无法跨越不同的JVM或服务器进程,因此需要引入分布式锁来保证在分布式环境下的资源访问控制。分布式锁是一种在分布式系统中协调多进程或线程对共享资源进行访问控制的机制。

2024-05-24 21:40:09 1272 1

原创 什么是位数组?Java使用BitSet实现位数组

位数组(Bit Array)是一种数据结构,它主要用于高效地利用内存空间来存储大量布尔值(真/假,1/0)。在位数组中,每个元素不再是一个完整的字节(如在大多数常规数组中那样),而是一位,即二进制数的一个比特。这种紧凑的表示方式极大地节省了存储空间,尤其适合需要存储大量稀疏数据的场景。

2024-05-24 11:55:43 633 1

原创 必应崩了?

今天使用必应发现出现了不能搜索,弹出乱码的情况。

2024-05-23 17:51:42 414 3

原创 【经典面试题】行锁?表锁?间隙锁?意向锁?排他锁?MySQL的锁机制

MySQL中的锁机制是在多线程或并发场景下的一种资源调度策略,旨在维护数据的完整性和一致性。

2024-05-23 11:58:24 835

原创 Java的类加载机制之双亲委派模型为什么叫双亲委派?

学习java类加载机制是,常常因为各种奇怪名词而苦恼,比如这个双亲委派就让人非常疑惑,为什么叫双亲委派?

2024-05-22 13:36:18 690 1

原创 经典面试题:MySQL如何调优?

MySQL如何进行调优?这是面试中容易被问到的高频问题。

2024-05-22 10:10:12 1497

原创 Java18新特性

Java 18 引入了一系列新特性和改进,旨在增强开发者体验、提升性能和促进现代化编程实践。

2024-05-21 15:36:32 520

原创 经典面试题:什么是事务的隔离级别?什么是MVCC?

事务的四大特性(ACID特性),即原子性、一致性、隔离性和持久性。“隔离性”确保了在并发环境中,事物的安全可靠。事物的隔离级别对与数据库来说至关重要,而MVCC是实现事物隔离性的重要技术,值得我们探讨一下。

2024-05-21 11:57:21 1010

原创 经典面试题:java线程的创建方式

java线程的创建方式是一道经典的面试题,在Java中,创建线程主要有四种方式,每种方式各有特点,适合不同的使用场景。面试中,不仅要了解其创建方式,更要熟悉其应用场景。

2024-05-20 16:58:27 1016 1

原创 如何实现深拷贝?什么是深拷贝?底层原理是什么?

在对引用类型赋值时,常常会对深拷贝浅拷贝产生疑问,特别是其底层原理很是疑惑。

2024-05-08 14:35:21 405 1

原创 Java 的继承、实现

java的继承和实现是java的两个核心概念,是java编程的基础。

2024-04-30 10:39:15 135 1

原创 Bean、PO、POJO、VO、Entity、Model、DTO、Dao等术语的特点与用途

Bean、PO、POJO、VO、Entity、Model、DTO、Dao等术语的特点与用途

2024-01-28 23:14:36 627

空空如也

空空如也

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

TA关注的人

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