- 博客(152)
- 收藏
- 关注
原创 springboot starter
Spring Boot Starter是一组便捷的依赖描述符,它们封装了特定技术或功能的所有必要依赖项和自动配置,使开发者能够快速将这些功能集成到Spring Boot项目中。例如,使用spring-boot-starter-data-jpa可以快速集成JPA持久化,使用spring-boot-starter-security可以快速集成安全功能。自动配置:Spring Boot Starter配合Spring Boot的自动配置机制使用,提供了默认的自动配置,使项目开箱即用。
2024-09-23 09:29:56
489
原创 dubbo的原理和知识
当服务的提供者提供了一种接口的实现之后,需要在Classpath下的META-INF/dubbo/(或META-INF/services/,用于兼容Java SPI)目录中创建一个以服务接口命名的文件,此文件记录了该接口的具体实现类。综上所述,Dubbo通过注册中心实现服务的注册与发现,通过负载均衡策略选择服务提供者,通过网络通信实现服务调用,通过监控中心收集监控数据,并通过扩展机制支持服务的自定义和扩展。需要注意的是,Netty的零拷贝机制是在用户态实现的,而微内核架构通常是在操作系统内核层面讨论的。
2024-09-22 16:05:08
892
原创 jvm相关整理
由于染色指针的标记位在垃圾收集过程中会发生变化,ZGC将同一块物理内存映射为多个虚拟内存地址空间(如Marked0、Marked1和Remapped),以便在不同的垃圾收集阶段使用不同的标记位。染色指针(Colored Pointer)是一种在垃圾收集器(如ZGC)中使用的技术,旨在通过直接在指针上存储少量额外的信息来提高垃圾收集的效率并减少停顿时间。是OpenJDK中的一个垃圾回收器,其设计目标是在尽可能对吞吐量影响不大的前提下,实现在任意堆内存大小下都能将垃圾收集的停顿时间限制在十毫秒以内的低延迟。
2024-09-12 17:04:52
750
原创 设计线程池的原则
线程池(ThreadPool)是一种基于池化技术设计用于执行异步任务的机制,它维护了一定数量的线程,这些线程可以被反复利用来执行不同的任务。线程池的设计涉及到多个参数,这些参数共同决定了线程池的行为和性能。在设计线程池时,需要综合考虑以上各个参数,根据具体的业务场景和系统资源来做出合理的选择。同时,也需要对线程池进行监控和调整,以确保系统能够稳定运行并达到最佳性能。
2024-09-11 16:45:19
1085
原创 mysql的binlog,redolog,undolog
MySQL数据库中的binlog(二进制日志)、redo log(重做日志)和undo log(撤销日志)是三种不同的日志类型,它们在数据库的事务处理、恢复和复制过程中扮演着关键角色。下面将分别解释这三种日志的作用和工作原理。
2024-09-11 16:26:04
432
原创 分布式事务的几种解决方式
两阶段提交协议是分布式事务处理的经典协议,由事务协调者(Transaction Manager, TM)和多个资源管理器(Resource Manager, RM)参与。该协议将事务的处理分为两个阶段:准备阶段(Prepare Phase)和提交/回滚阶段(Commit/Rollback Phase)。
2024-09-11 15:25:57
937
原创 ES的主要知识点
MySQL数据表在Elasticsearch中的抽取和构建过程是一个涉及数据同步、索引创建、数据映射和查询优化的复杂过程。通过选择合适的同步工具、定义合理的索引结构、进行准确的数据映射和优化查询语句,可以实现MySQL数据在Elasticsearch中的高效存储和检索。
2024-09-11 15:00:24
1253
原创 生成分布式ID的几种常见方案
一、背景为什么要用分布式ID?分布式ID应该满足哪些特征?1、什么是分布式ID拿MySQL数据库举个例子:在我们业务数据量不大的时候,单库单表完全可以支撑现有业务,数据再大一点搞个MySQL主从同步读写分离也ok。但随着数据日渐增长,主从同步也扛不住了,就需要对数据库进行分库分表,但分库分表后需要有一个唯一ID来标识一条数据,数据库的自增ID显然不能满足需求;特别一点的如订单、优惠券也都需要有唯一ID做标识。此时一个能够生成全局唯一ID的系统是非常必要的。那么这个全局唯一ID就叫分布式ID。
2024-09-11 14:27:40
1469
原创 springIOC
首先,在Spring应用程序中,所有的对象都需要通过Bean来描述和管理。Bean的定义可以通过XML配置文件、注解(如@Component@Service等)或Java配置类(使用注解的类)来实现。这些定义信息告诉IoC容器需要创建哪些对象以及它们的依赖关系。IoC容器通过定义Bean、创建容器、加载Bean、存储Bean以及管理Bean的生命周期等步骤来存放和管理应用程序中的对象。这种机制使得应用程序的代码更加简洁、灵活和易于维护,因为对象的创建和依赖关系的管理都被抽象到了IoC容器中。
2024-09-11 13:58:59
1340
原创 gpt相关
Prompt是用户输入给GPT模型的一段文本,用于明确告知模型需要生成什么样的内容。它可以是简单的指令、问题,也可以是包含丰富上下文和要求的复杂描述。
2024-09-11 11:39:02
510
原创 微服务设计、拆分原则
微服务的设计和拆分原则旨在提高系统的可维护性、可扩展性和可靠性。通过遵循这些原则,可以构建出灵活、高效、可靠的微服务架构。在实际应用中,需要根据具体业务需求和技术栈来选择合适的设计和拆分策略。
2024-09-11 10:24:51
314
原创 mysql面试准备2024-2025
为什么要给主键索引的记录也加一个记录锁呢?,因为mobile字段是varchar类型,但是sql中查询条件是数值型,MySQL为了避免直接报错会尝试进行隐式转换,把数据库中的mobile列使用函数转换为和sql中的类型一致的数据再进行等值判断,而对索引列使用函数时查询不走索引,所以可能会导致经常说的“锁表”(其实锁的不是表,是对所有主键索引中所有的记录加邻键锁),事务执行这条语句加锁的情况如下,对主键索引上的每一条记录都加了邻键锁。在主键索引上,会对在查询范围内的记录在主键索引上对应的位置加记录锁。
2024-09-10 11:37:54
1152
原创 面试题2024新
需要注意的是,尽管管道中的命令在客户端是批量发送的,但它们在Redis服务器端仍然是串行执行的,且管道操作本身不提供事务的原子性保证。临键锁是记录锁和间隙锁的组合,它锁定了查询范围内的记录以及这些记录之间的间隙,防止其他事务插入新记录。查询优化机制:TiDB的计算层采用了查询优化机制,当执行范围查询时,会生成多个可能的执行计划,并通过评估这些执行计划的成本来选择最优的执行计划。当执行范围查询时,如果查询结果已经缓存在内存中,则可以直接从缓存中获取结果,从而避免对磁盘的访问,提高查询速度。
2024-09-09 15:01:19
528
原创 ZGC的原理
ZGC(Z Garbage Collector)是OpenJDK中的一个垃圾回收器,其设计目标是在尽可能对吞吐量影响不大的前提下,实现在任意堆内存大小下都能将垃圾收集的停顿时间限制在十毫秒以内的低延迟。染色指针(Colored Pointer)是一种在垃圾收集器(如ZGC)中使用的技术,旨在通过直接在指针上存储少量额外的信息来提高垃圾收集的效率并减少停顿时间。并发执行:ZGC的大部分工作都是并发执行的,这意味着它可以在应用运行的同时进行垃圾收集,从而减少对应用性能的影响。
2024-09-05 18:58:21
380
原创 Redis的Redission原理
Hash的key用于表示锁的名称,Hash的field用于存储客户端ID(由Redisson对象的UUID和当前线程ID组成),而field对应的value则是线程重入次数。如果客户端崩溃,看门狗最终将删除锁,避免死锁。如果Hash key已存在但对应的field(即客户端ID)与当前客户端ID相同,表示是同一客户端的重入请求,此时会将重入次数加1,并更新锁的过期时间。如果不存在,表示锁当前未被持有,客户端会设置该Hash key,并将自己的客户端ID作为field,重入次数设为1,同时设置锁的过期时间。
2024-09-05 18:23:11
497
原创 面试总结2024
当消息达到其设定的延时时间后,定时任务会将该消息从延时队列中取出,并重新放入到目标Topic的队列中,等待消费者消费。总结来说,RocketMQ的延时消息原理是通过设置消息的延时级别,将消息存储在专门的延时队列中,并通过定时任务在消息达到延时时间后将其重新放入目标Topic的队列中,从而实现消息的延时消费。需要注意的是,锁的升级是逐级进行的,即从偏向锁到轻量级锁,再到重量级锁,且一旦锁升级到某个级别,就不会再降级到更低级别。对于之前被设置为延时的消息,在达到延时时间后,它们会像普通消息一样被消费者消费。
2024-08-29 16:19:13
510
原创 浅谈kafka
kafka整体架构整体架构分为producer、broker、consumer三部分,3.0版本之前依赖zookeeper做集群管理,3.0版本之后通过KRaft进行集群管理。consumer有消费者组概念,同一个组内不同消费者负责消费不同的partation,一个分区只能由一个组内消费者消费;消费者组之间互不影响集群中的broker会选举出一个leader作为Controller负责管理整个集群中所有分区和副本的状态每个topic由多个partation组成,partation为真
2024-08-19 15:50:56
751
原创 volatile的作用和原理
Volatile关键字的作用主要有如下两个:1. 线程的可见性:当一个线程修改一个共享变量时,另外一个线程能立刻读到这个修改的值。2. 顺序一致性:禁止指令重排序。
2024-08-19 10:21:48
3932
原创 缓存一致性
在CPU和主存之间增加缓存,在多线程场景下就可能存在缓存一致性问题,也就是说,在多核CPU中,每个核的自己的缓存中,关于同一个数据的缓存内容可能不一致。总线加锁机制大概意思是说,某个 CPU 如果要读一个数据,会通过一个总线,对这个数据加一个锁,其他 CPU 就没法去读和写这个数据了,只有当这个 CPU 修改完成以后,其他 CPU可以读到最新的数据,这个总线加锁机制效率太差了,一旦说多个线程出现对某个共享变量的访问之后,机会导致串行化的问题,现在已经弃用了.MESI 缓存一致性协议。
2024-08-19 10:20:38
314
原创 缓存的出现
当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进行计算时就可以直接从它的高速缓存读取数据和向其中写入数据,当运算结束之后,再将高速缓存中的数据刷新到主存当中。按照数据读取顺序和与CPU结合的紧密程度,CPU缓存可以分为一级缓存(L1),二级缓存(L3),部分高端CPU还具有三级缓存(L3),每一级缓存中所储存的全部数据都是下一级缓存的一部分。我们应该都知道,计算机在执行程序的时候,每条指令都是在CPU中执行的,而执行的时候,又免不了要和数据打交道。
2024-08-19 10:19:28
230
原创 【2024面试】redis数据结构
redis快的原因:除了它是内存数据库,使得所有的操作都在内存上进行之外,还有一个重要因素,它底层的数据结构,使得我们对数据进行增删查改操作时,Redis 能高效的处理。因此,这次我们就来好好聊一下 Redis 数据结构。
2024-08-14 14:40:59
616
原创 kafka一篇文章解答90%以上面试问题
2、找到的 segment 中的.index文件,用查找的offset 减去.index文件名的offset,也就是00000.index文件,我们要查找的offset为3的message在该.index文件内的索引为3(index采用稀疏存储的方式,它不会为每一条message都建立索引,而是每隔4k左右,建立一条索引,避免索引文件占用过多的空间。Kafka 中的索引文件,以稀疏索引(sparse index)的方式构造消息的索引,它并不保证每个消息在索引文件中都有对应的索引项。
2023-08-30 18:12:54
212
原创 java大厂面试题2021【Redis的应用-关注和粉丝】【Redis的应用-redis数据类型】【程序算法炒基金】【2021面试必看】A股基金投资记录(从2021-10-11起投)每日更新实操
2021年10月11日起投,通过自研小程序算法进行投资总投入:333实时盈亏:-2.59天弘中证银行ETF联接C 第一周 第二周 第三周 第四周 月总投入 月平均成本 10月 钱 平均成本 钱 平均成本 钱 平均成本 钱 平均成本 定投 160 11月 钱 平均成本 钱 平均成本 钱 平均
2021-10-13 10:54:38
264
1
原创 【Redis的应用-关注和粉丝】
Redis的应用实例:关注和粉丝的 实现前言:我们知道,关注和粉丝已经成为很多信息流平台必备的功能,比如我们的csdn就有这一功能,但是随着关注人的增加,我们如果采用普通数据库的存储可能会满足不了用户的速度上的体验,如:MySQL数据存储是存储在表中,查找数据时要先对表进行全局扫描或者根据索引查找,这涉及到磁盘的查找,磁盘查找如果是按条点查找可能会快点,但是顺序查找就比较慢;而Redis不用这么麻烦,本身就是存储在内存中,会根据数据在内存的位置直接取出。那么Redis它有什么优势呢?1.
2020-11-16 10:47:57
575
1
原创 【top K问题】
海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 建立最小堆 先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10000个。建堆时间复杂度是O(mlogm),算法的时间复杂度为O(nmlogm)(n为10亿,m为10000)。 优化的方法:可以把所有10亿个数据分组存放,比如分别放在1000个文件中...
2020-11-14 17:41:14
192
原创 【文件的高速读取】
分割大文件多个线程同时处理按行读取合并1、概述本教程将演示如何用Java高效地读取大文件。2、在内存中读取读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法:Files.readLines(new File(path), Charsets.UTF_8);FileUtils.readLines(new File(path));这种方法带来的问题是文件的所有行都被存放在内存中,当文件足够大时很快就.
2020-11-14 16:36:09
175
原创 【redis秒杀】
redis实现秒杀背景:某电商网站实现秒杀功能,用户在某个时间段内能够抢购到特价商品,且某一商品最多只能被同一用户抢购一次。基本思路:秒杀商品由商家后台添加,秒杀商品数据保存在tb_seckilll_goods表中,关键字段包括: id,status(审核状态),start_time(开始时间),end_time(结束时间),stock_count(库存量); 写一个定时器,定时从秒杀商品表中扫描数据,将符合条件的商品加载到缓存中;条件:审核状态="1",start_time <
2020-11-14 14:34:13
195
原创 java注解
以前,『XML』是各大框架的青睐者,它以松耦合的方式完成了框架中几乎所有的配置,但是随着项目越来越庞大,『XML』的内容也越来越复杂,维护成本变高。于是就有人提出来一种标记式高耦合的配置方式,『注解』。方法上可以进行注解,类上也可以注解,字段属性上也可以注解,反正几乎需要配置的地方都可以进行注解。关于『注解』和『XML』两种不同的配置模式,争论了好多年了,各有各的优劣,注解可以提供更大的便捷性,易于维护修改,但耦合度高,而XML相对于注解则是相反的。追求低耦合就要抛弃高效率,追求效率必然会遇..
2020-07-20 18:00:48
153
原创 【面试】--【计算机网络】
一次http请求,比如当我们在web浏览器的地址栏中输入:www.baidu.com,具体发生了什么?概述对www.baidu.com这个网址进行DNS域名解析,得到对应的IP地址 根据这个IP,找到对应的服务器,发起TCP的三次握手 建立TCP连接后发起HTTP请求 服务器响应HTTP请求,浏览器得到html代码 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)(先得到html代码,才能去找这些资源) 浏览器对页面进行渲染呈现给用户 服务器关闭TCP连接O
2020-07-20 16:06:27
444
原创 【面试】---【MySQL】
为什么要使用数据库数据保存在内存优点: 存取速度快缺点: 数据不能永久保存数据保存在文件优点: 数据永久保存缺点:1)速度比内存操作慢,频繁的IO操作。2)查询数据不方便数据保存在数据库1)数据永久保存2)使用SQL语句,查询方便效率高。3)管理数据方便什么是SQL?结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言。作用:用于存取数据、查询、更新和管理关系数据库系统。什么是MySQL?MySQL是
2020-07-15 19:09:45
379
原创 面试必需--排序算法
二分查找注意:二分查找的数组一定是有序的!!! 在有序数组array[]中,不断将数组的中间值(mid)和被查找的值比较,如果被查找的值等于array[mid],就返回下标mid; 否则,就将查找范围缩小一半。如果被查找的值小于array[mid], 就继续在左半边查找;如果被查找的值大于array[mid], 就继续在右半边查找。 直到查找到该值或者查找范围为空时, 查找结束。不用递归的二分查找如下: 1 2 3 4 5 6 7...
2020-07-15 19:08:03
209
原创 【面试】--Java虚拟机(JVM)
Java内存区域说一下 JVM 的主要组成部分及其作用?JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。Class loader(类装载):根据给定的全限定名类名(如:java.lang.Object)来装载class文件到Runtime data area中的method area。Execution
2020-07-15 19:07:39
436
原创 【面试】--【数据结构】
数组 在Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数据类型(Object类型数组除外)。①、数组的声明//声明数组1,声明一个长度为3,只能存放int类型的数据int[] myArray =newint[3];//声明数组2,声明一个数组元素为 1,2,3的int类型数组int[] myArray2 = {1,2,3};②、访问数组元素以及给数组元素赋值 数组是存在下标索引的,通过下标可以获取指定位置的元素,数组小标是从0开始的,也...
2020-07-05 17:33:30
726
原创 redis 2020面试必看
概述什么是RedisRedis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Valu..
2020-07-05 17:33:18
704
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人