自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 面试专栏:where和having

写一个SQL语句,一个表中有姓名、课程、成绩,请你查询出平均分大于60分的同学的名字。

2024-03-13 13:50:42 536

原创 面试专栏:java线程创建

当你的应用需要同时执行多个操作时,比如服务器处理多个客户端请求,或者一个GUI应用同时处理用户交互和后台任务。在这些场景下,通过创建不同的线程来并行处理任务可以大大提高效率和响应性。

2024-03-13 09:09:26 413

原创 面试专栏:SpringBoot特有注解

这是 Spring 3.0 添加的新注解,用来导入一个或者多个 Spring 配置文件,这对 Spring Boot 兼容老项目非常有用,因为有些配置无法通过 Java Config 的形式来配置就只能用这个注解来导入。这是 Spring Boot 最最最核心的注解,用在 Spring Boot 主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。用在自动配置类上面,表示该自动配置类需要在另外指定的自动配置类配置完之后。

2024-03-13 07:38:37 967

原创 面试专栏:Spring事务传播行为

适用于需要独立事务控制的复杂事务场景,比如,当部分数据操作需要回滚,而不影响外部事务时。:如果当前存在事务,则加入该事务;这种传播行为适用于不需要事务控制的读操作,但如果调用方法在事务中,则该方法也会在事务中执行。Spring 事务的传播行为定义了业务方法对事务的处理方式,特别是在事务嵌套的情况下。:总是启动一个新的事务,如果当前存在事务,则将当前事务挂起。适用于需要完全独立于外部事务执行的操作,例如,当需要保证操作不被外部事务的影响时。适用于不应该在事务环境中执行的操作,比如,可能会长时间运行的操作。

2024-03-12 21:44:20 565

原创 面试专栏:布隆过滤器

布隆过滤器(Bloom Filter)是一种高效的数据结构,用于判断一个元素是否存在于一个集合中。它利用位数组和多个哈希函数来实现快速的成员查询。布隆过滤器的核心思想是用一个位数组(通常用二进制位表示)来表示一个集合,初始时所有位都置为0。然后,对于每个要加入集合的元素,通过多个哈希函数计算出多个哈希值,然后将位数组中对应的位置置为1。判断一个元素是否存在于集合时,同样使用多个哈希函数计算出对应的哈希值,然后检查位数组中对应的位置是否都为1,如果有任意一个位置为0,则说明该元素不存在于集合中;

2024-02-26 07:19:22 1305

原创 面试专栏:Redis集群

刚刚我们讲了,Redis 的每个节点上,都保存了所有槽和节点的映射关系表,客户端可以访问任意一个节点,再通过重定向命令,找到数据所在的那个节点。比如说,集群加入了新节点,或者某个主节点宕机了,新的主节点被选举出来,这些情况下,都需要更新集群每一个节点上的映射关系表。所谓流言,就是八卦,比如说,我们上学的时候,班上谁和谁偷偷好上了,搞对象,那用不了一天,全班同学都知道了。这个也很好理解,比如说,换成某两个特别出名的明星搞对象,即使是全国人民都很八卦,但要想让全国每一个人都知道这个消息,还是需要很长的时间。

2024-02-26 07:16:07 1723

原创 面试专栏:RDB和AOF

格式:RDB是二进制格式,紧凑但不可读;AOF是纯文本格式,可读但通常体积更大。内容:RDB包含了某个时刻的数据快照,而AOF包含了达到当前状态所需执行的所有命令。恢复速度:RDB文件可以更快地被加载恢复,因为它是直接将数据状态读入内存;而AOF恢复速度较慢,因为需要重新执行文件中的所有命令。数据安全性:AOF可以提供更高的数据安全性,因为它能够更频繁地记录数据变化。选择哪种持久化方式(或同时使用两种方式)取决于具体的业务需求,包括对数据安全性的需求、恢复速度的要求以及对系统性能的影响。

2024-02-25 22:09:04 911

原创 面试专栏:缓存数据库一致性

为了满足用户对一趟列车不同站点不同座位类型的余量查询需求,我们采取了一种优化方案。。然而,在用户创建订单并完成支付时,我们需要同时从数据库和缓存中扣减相应的列车站点余票。这种设计不仅提高了查询效率,也保证了数据的一致性,确保订单操作的准确性。在这个业务场景中的缓存与数据库一致性如何保证?

2024-02-24 16:00:21 954

原创 面试专栏:分库分表

分库分表是一种数据库分片技术,用于解决大规模应用中单一数据库容量不足以支持高并发和大数据量的问题。它将一个大型的数据库拆分成多个小型数据库,每个小型数据库称为一个分片。每个分片存储部分数据,从而降低了单个数据库的负担。简单来说,分库是将原本的单库拆分为多个库,分表是将原来的单表拆分为多个表。很多情况下,分库分表并不是从系统设计开始就存在的,而是系统运行过程中,出现数据量庞大或者查询性能慢等问题延伸而来。如果你在业务功能开发时,已经预知业务数据库量,应提前进行分库或者分表,做好分片规范,避免系统运行时拆分。

2024-02-23 15:24:05 992

原创 责任链模式专题

举个例子,SpringMvc 中可以定义拦截器,并且可以定义多个。当一个用户发起请求时,顺利的话请求会经过所有拦截器,最终到达业务代码逻辑,SpringMvc 拦截器设计就是使用了责任链模式。为什么说顺利的话会经过所有拦截器?因为请求不满足拦截器自定义规则会被打回,但这并不是责任链模式的唯一处理方式,继续往下看。在责任链模式中,多个处理器(参照上述拦截器)依次处理同一个请求。

2024-02-23 08:10:05 993

原创 面试专栏:分布式锁

这一版的代码相当于我们添加锁标志位时,同时为每个客户端设置了 uuid 作为锁标志位的 val,解锁时需要判断锁的 val 是否和自己客户端的相同,辨别成功才会释放锁。如果线上真的发生上述问题,就可能会造成线上数据和业务的运行异常,更甚者可能存在线程一将线程二的锁释放掉之后,线程三获取到锁,然后线程二执行完将线程三的锁释放。就出现了,它的作用就是 线程1 业务还没有执行完,时间就过了,线程1 还想持有锁的话,就会启动一个watch dog后台线程,不断的延长锁key的生存时间。

2024-02-23 08:02:16 952

原创 时间轮算法专题

时间轮算法(Time Wheel Algorithm)是一种高效的时间管理算法,常用于实现定时任务调度、超时管理等场景。它通过将时间分割成多个槽(slot)来管理定时事件,每个槽代表时间轮上的一个时间间隔。这种算法能够有效地减少计时和任务调度的复杂度,特别是在处理大量定时任务时,相比传统的数据结构(如优先队列)有显著的性能优势。

2024-02-22 21:36:47 960

原创 面试专栏:伪共享

在Java中,伪共享(False Sharing)是并发编程中的一个性能问题,它发生在多个线程在CPU的缓存系统中错误地共享数据的情况下。这不是线程间直接共享数据,而是由于缓存系统的设计导致的间接共享。现代CPU为了减少访问主内存的延迟,会将数据缓存到更接近处理器的缓存中。CPU缓存是分层的,并且以缓存行(cache line)为单位组织数据,通常大小是64字节。

2024-02-22 00:06:48 361

原创 面试专栏:GC Roots和引用

在Java中,垃圾收集(GC)是自动进行的,它帮助程序开发者免于手动管理内存,减少内存泄漏和溢出的风险。为了有效地执行垃圾收集,Java虚拟机(JVM)需要知道哪些对象是可达的,即从某个根节点开始,可以通过引用链找到的对象。这些根节点被称为“GC Roots”。

2024-02-21 19:57:14 892

原创 面试专栏:脏读,不可重复读和幻读专题

经常有面试官提出这么一个问题:什么是脏读、不可重复读和幻读?关于这个问题,我们还得从数据库的管理系统说起,当数据库管理系统在写入或者更新数据的过程中,为了保证数据是正确可靠的,需要满足四个特性:原子性、一致性、隔离性和持久性,简称 ACID !例如以银行转账为例,从原账户扣除金额,以及向目标账户添加金额,这两个阶段的操作,被视为一个完整的逻辑过程,不可拆分,简单的说,要么全部成功,要么全部失败!这个过程被称为一个事务,具有 ACID 四个特点!说了这么多,跟我们今天要说的脏读、不可重复读和幻读有什么关系呢?

2024-02-21 15:17:03 853

原创 面试专栏:对象存储

对象存储(Object Storage)是一种用于处理非结构化数据的存储架构,它以对象(Object)为单位存储数据。每个对象包括数据本身、元数据(Metadata)和全局唯一的标识符(ID)。对象存储允许用户通过RESTful API(如HTTP/HTTPS)直接存取数据,这使得它非常适合于云存储和大数据存储场景。

2024-02-21 12:17:52 1096

原创 LongAdder源码专题

LongAdder是java8中新增的原子类,在多线程环境中,它比AtomicLong性能要高出不少,特别是写多的场景。它是怎么实现的呢?让我们一起来学习吧。(1)LongAdder通过base和cells数组来存储值;(2)不同的线程会hash到不同的cell上去更新,减少了竞争;(3)LongAdder的性能非常高,最终会达到一种无竞争的状态;

2024-02-21 10:37:43 1178

原创 AtomicInteger源码专题

应该是atomic框架中用得最多的原子类了。顾名思义,是Integer类型的线程安全原子类,可以在应用程序中以原子的方式更新int值。的本质:自旋锁 +CAS原子操作。原子操作是多个线程同时执行,确保其是安全的,且并不需要关键字。本质上,原子操作严重依赖于CAS,它是由多数现代CPU直接支持的原子指令。这些指令通常比同步块要快。所以在只需要并发修改单个可变变量的情况下,建议优先使用原子类,而不是使用锁机制实现。中维护了一个使用volatile修饰的变量value,保证可见性;

2024-02-21 10:36:15 1097

原创 DelayQueue源码专题

这篇文章讲解了DelayQueue阻塞队列的核心源码,了解到DelayQueueDelayQueue实现了接口,提供了四组放数据和读数据的方法,来满足不同的场景。DelayQueue底层采用组合的方式,复用的按照延迟时间排序任务的功能,实现了延迟队列。DelayQueue是线程安全的,内部使用加锁。

2024-02-20 21:23:28 926 1

原创 SynchronousQueue源码专题

这篇文章讲解了阻塞队列的核心源码,了解到实现了接口,提供了四组放数据和读数据的方法,来满足不同的场景。底层有两种实现方式,分别是基于栈实现非公平策略,以及基于队列实现的公平策略。初始化的时候,可以指定使用公平策略还是非公平策略。不存储元素,不适合作为缓存队列使用。适用于生产者与消费者速度相匹配的场景,可减少任务执行的等待时间。

2024-02-20 21:20:30 824

原创 ArrayBlockingQueue源码专题

这篇文章讲解了队列的核心源码,了解到ArrayBlockingQueue实现了BlockingQueue接口,提供了四组放数据和读数据的方法,来满足不同的场景。ArrayBlockingQueue底层基于数组实现,采用循环数组,提升了数组的空间利用率。ArrayBlockingQueue初始化的时候,必须指定队列长度,是有界的阻塞队列,所以要预估好队列长度,保证生产者和消费者速率相匹配。

2024-02-20 21:17:13 679

原创 java阻塞队列专题

这几种阻塞队列都是实现了BlockingQueue接口,在日常开发中,我们好像很少用到BlockingQueue(阻塞队列)到底有什么作用?应用场景是什么样的?如果使用过线程池或者阅读过线程池源码,就会知道线程池的核心功能都是基于实现的。大家用过消息队列(MessageQueue),就知道消息队列作用是解耦、异步、削峰。同样的作用也是这三种,区别是只作用于本机器,而消息队列相当于分布式。image.png作为阻塞队列,主要应用于生产者-消费者模式的场景,在并发多线程中尤其常用。

2024-02-20 21:15:11 868

原创 ArrayDeque源码专题

Java里有一个叫做Stack的类,却没有叫做Queue的类(它是个接口名字)。当需要使用栈时,Java已不推荐使用Stack,而是推荐使用更高效的ArrayDeque;既然Queue只是一个接口,当需要使用队列时也就首选ArrayDeque了(次选是LinkedList要讲栈和队列,首先要讲Deque接口。Deque的含义是“double ended queue”,即双端队列,它既可以当作栈使用,也可以当作队列使用。下表列出了Deque与Queue说明。

2024-02-20 17:47:28 825

原创 Vector源码专题

由于Vector属于List接口集合体系,因此具有通用的iterator 和 listIterator迭代器(关于这两个迭代器在ArrayList文章部分有详细讲解,这里不再赘述)。但是我们知道List接口是JDK1.2的时候加进来的,但是Vector在JDK1.0的时候就出现了,因此Vector还具有自己独有迭代器Enumeration,也被称为“枚举”!Enumeration原本是一个接口,实现Enumeration接口的对象,又称为枚举对象。

2024-02-20 17:44:23 898

转载 LinkedList源码专题

在linkLast()方法内部,使用了last节点,last节点表示链表的最后一个节点,之后将要添加的元素包装成一个Node节点,将last赋值为新的节点,如果最后一个节点为null,则说明这将是链表的第一个节点,则将first即链表第一个节点也赋值为newNode,否则将之前最后一个节点l的next引用指向新的节点,并且将LinkedList元素个数加1,将modCount并发修改数量加1,modCount的作用是用来实现快速失败机制。

2024-02-20 17:38:12 37

原创 ArrayList源码专题

1.ArrayList的底层是数组,初始容量是10,当数组满了之后,继续添加元素时,会扩容到原来的1.5倍+1。2.ArrayList保存了一个modCount属性,修改集合的操作都会让其自增。如果在遍历的时候modCount被修改,则会抛出异常,产生fail-fast事件。3.ArrayList内部还维护了一个size属性,它是用来记录数组中的实际元素个数。size,modCount,elementData这些成员变量,都注定了ArrayList线程不安全。

2024-02-20 17:36:36 947

原创 LoRA专题

LoRA(Low-Rank Adaptation)是一种用于微调大型预训练神经网络模型的技术。这种方法特别适用于那些结构庞大且参数众多的模型,例如GPT-3、BERT或其他基于Transformer的架构。LoRA的主要目标是在保持模型大部分参数不变的前提下,通过调整相对较小的一部分参数来适应新的任务或数据集,从而减少训练成本和时间。

2023-12-23 22:11:36 1017

原创 Stable Diffusion五问

Stable Diffusion" 是一种基于扩散模型的深度学习框架,用于生成高质量的图像。它是一种生成模型,通过模拟物理扩散过程,从随机噪声中逐步生成详细和结构化的图像。Stable Diffusion因其稳定性和效率而得名,特别适用于生成与特定文本描述匹配的图像。

2023-12-23 22:01:39 1219

原创 扩散模型采样方法专题

DPM++(Diffusion Probabilistic Models Plus Plus)是一种先进的扩散模型,建立在原始扩散概率模型(Diffusion Probabilistic Models, DPM)的基础上,引入了一些关键的改进和优化。这种模型通常被用于生成高质量的图像、音频或其他类型的数据。

2023-12-23 21:50:11 2089

原创 扩散模型五问

深度学习中的扩散模型是一种相对较新的生成模型,它在生成图像、音频和其他类型数据方面显示出了显著的潜力。扩散模型的核心概念是逐步地从一种结构化噪声中生成数据。

2023-12-20 09:12:57 1453

原创 安装深度学习开发环境(pytorch篇)

随便哪个版本都可以,下载完成后一路next即可,注意设置自己的安装路径,以防找不到:以及:此页第一个选项打勾,添加环境变量。等待环境创建完成后即可输入:activate/conda activate dl 激活此环境。

2023-12-04 15:59:08 964

原创 面试专栏:路由器

路由器是计算机网络中的重要设备,用于连接不同的网络,并在它们之间转发数据包。路由器的主要功能是将数据从一个网络传递到另一个网络,同时实现数据包的选择性转发,以确保数据到达正确的目的地。

2023-12-02 15:30:04 1065

原创 面试专栏:wait和sleep

notify()两者的主要区别在于wait()会释放锁,而sleep()不会。

2023-12-02 10:11:27 387

原创 面试专题:Set

Java的Collection:一个有序的集合,可以包含重复的元素。主要的实现类有ArrayListLinkedList和Vector。:一个不包含重复元素的集合。主要的实现类有HashSet和TreeSet。:一个用于代表队列的集合。主要的实现类有LinkedList(也实现了List接口)、等。:双端队列的集合接口。其主要实现类有ArrayDeque和LinkedList。

2023-12-02 10:02:21 482

原创 面试专栏:MD5

MD5(Message Digest Algorithm 5)是一种广泛使用的加密哈希函数,它可以产生一个128位(16字节)的哈希值。它接收任意长度的输入,并产生一个固定长度的哈希值。由于MD5的设计存在弱点,它可以被攻击者较容易地破解,因此它不再推荐用于安全加密场合,但仍然广泛用于一般数据的完整性校验。由于MD5的算法设计存在缺陷,现在在安全敏感的应用中通常建议使用更安全的哈希函数,如SHA-256。:在填充后的消息后面附加原始数据的长度(以位为单位),使得最终的数据长度为512的整数倍。

2023-11-30 16:09:04 381

原创 面试专栏:K8s基础

Kubernetes(K8s)是一个开源的容器编排系统,用于自动化应用容器的部署、扩展和管理。Kubernetes提供了高度可扩展的平台,用于管理容器化应用,支持自动扩展和自我修复功能。

2023-11-30 15:33:24 366

原创 面试专栏:RocketMQ特性

在RocketMQ中,每个Topic可以分为多个Queue。保证顺序的关键是确保同一分区(同一Queue)内的消息是有序的。:生产者在发送消息时,根据某种分区策略(如基于业务键)确保相关消息发送到同一个Queue。:消费者按照Queue中的顺序消费消息。为了保证顺序,通常一个Queue只会被一个消费者消费(即消费者对Queue的消费是串行的)。通过这种机制,RocketMQ能够保证同一Queue内的消息是有序的,实现了顺序消费的需求。但需要注意的是,跨Queue的全局顺序是无法保证的。

2023-11-30 13:13:43 457

原创 面试专栏:RocketMQ结构

在RocketMQ中,Queue(队列)是消息存储的基本单位。负载均衡:通过多个Queue,可以在多个Broker上分布消息的存储和处理,从而实现负载均衡。并行处理:多个Queue允许并行处理消息,提高系统吞吐量。容错和扩展性:多Queue架构使得系统更容易扩展,同时增强了容错能力。

2023-11-30 09:54:07 502

原创 面试专栏:Mybatis

Mybatis中和使用可以有效防止SQL注入,而则需要在可控的情况下谨慎使用。

2023-11-29 20:57:13 364

原创 面试专栏:Spring事务

Spring使用AOP在方法执行前后织入事务管理逻辑。事务管理是通过围绕业务方法执行的代理实现的。:通过注解或XML配置声明方法或类需要事务管理。Spring根据这些声明自动应用事务。:Spring通过接口与底层事务管理API(如JDBC、JPA)交互。:支持不同的事务传播行为,如REQUIRED、REQUIRES_NEW等,决定事务如何在方法间传播。:支持设置不同的事务隔离级别,如READ_COMMITTED、SERIALIZABLE等,控制事务的可见性。

2023-11-29 20:50:45 395

空空如也

空空如也

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

TA关注的人

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