自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 浏览器输入URL后的过程

TCP 连接建立成功后,浏览器会发送一个 HTTP 请求给服务器,这个请求包含了 URL、请求方法(GET、POST 等)、请求头等信息。获得 IP 地址后,基于三次握手(TCP 三次握手过程),浏览器与服务器建立 TCP 连接,以确保通信的可靠性。服务器接收到 HTTP 请求后,会根据请求路径和参数处理请求,并生成 HTTP 响应。服务器将处理结果封装成 HTTP 响应,返回给浏览器。浏览器首先检查本地缓存中是否有该URL的资源,如果有且未过期,则直接从缓存中加载资源。

2024-07-11 11:28:46 393

原创 技术选型考察哪些方面

在进行技术选型时,需要考虑多个方面,确保所选择的技术能够满足项目的需求,并且在实施过程中具备可行性和可维护性。

2024-06-14 10:29:34 362

原创 Synchronized和ReentranLock区别

在Java中,关键字和类都可以用于解决多线程之间的同步问题,但它们在使用方式和提供的功能上存在一些差异。

2024-06-13 11:28:07 511

原创 MySQL深分页优化

MySQL中的深分页问题通常是指当我们通过LIMIT语句查询数据,尤其是在翻到较后面的页码时,性能会急剧下降。例如,查询第1000页的数据,每页10条,系统需要跳过前9990条数据,然后才能获取到所需的记录,这在大数据集上非常低效。传统的深分页实现方法通常是使用OFFSET和LIMIT这会导致数据库扫描大量不需要的行然后抛弃它们,才能获取到真正需要的数据。

2024-06-06 11:41:17 1119

原创 PostgreSQL和MySQL架构模型的区别

在这种模型下,每个数据库连接被分配给一个新的服务器进程(或者说是数据库进程)。这样做的优点是提高了系统的稳定性和隔离性,因为每个进程的崩溃不太可能影响到其他进程,从而提高了系统的可靠性。但是,这种模型也意味着更高的系统资源消耗(尤其是内存),因为每个连接都需要其自己的进程和相应的系统资源。在多线程模型中,线程较进程轻量,共享内存空间,因此创建和销毁线程的开销小于进程。多线程模型的一个潜在缺点是,不当的线程管理可能会影响系统的稳定性和性能,因为一个线程的崩溃有可能影响到同一进程中的其他线程。

2024-06-06 09:41:57 473

原创 MySQL数据库的InnoDB 和 MyISAM存储引擎之间的区别

特性InnoDBMyISAM事务支持支持 ACID 事务不支持外键支持支持不支持锁定机制行级锁(Row-level Locking)表级锁(Table-level Locking)崩溃恢复日志文件支持崩溃恢复仅支持简单的检查和修复工具表空间管理使用表空间文件每个表有单独的表结构和数据索引文件文件扩展名.ibd(数据和索引)全文索引从 MySQL 5.6 开始支持内置全文索引支持数据完整性支持参照约束和外键不支持参照完整性检查数据读取速度。

2024-05-16 09:41:00 273

原创 MySQL千万级别表如何高性能添加字段和索引

尽管存在短暂的锁表时刻,但由于大部分操作都是在临时表上进行,因此不会明显地阻塞表的访问。会在一个非常短的时间窗口内停止对原表的写操作,将原表重命名为备份表,然后将临时表重命名为原表名,这样就完成了表结构的更改。在操作成功完成后,原表的触发器会被删除,如果一切正常,备份表也会被删除(取决于具体的参数配置),完成整个流程的清理工作。数据复制期间,对原表的插入、更新和删除操作会通过触发器同步到临时表,确保临时表数据的实时更新。首先根据原表的结构创建一个新的临时表,并对这个临时表应用所需的表结构变更。

2024-05-15 17:25:45 302

原创 电商秒杀系统设计

秒杀活动会在短时间内吸引大量用户,系统需要能够处理高峰时期的大量并发请求:在秒杀中,面临的一个严重系统挑战是如何确保在数以万计的用户同时抢购有限的商品时,如何正确、实时地扣减库存,以防止超卖现象。:防止恶意用户或机器人利用脚本进行快速抢购,挤压正常用户的抢购机会,甚至在秒杀商品数量有限的情况下进行恶意抢购和放空。:系统需要能够抗住短时间内的高并发压力,同时随着用户数量的增长和业务的发展,系统的可扩展性也是一个挑战。

2024-05-11 11:49:14 722 1

原创 上传文件客户端签名直传

上传文件的客户端签名直传是一种常用的将文件直接上传到云存储服务如Amazon S3、阿里云OSS等云服务上的技术手段。这种方法通常用于减轻服务器负担,并提高上传效率。

2024-05-08 17:49:12 338

原创 Java Synchronized原理

关键字是 Java 中提供的一种基本的同步机制,它用于控制对共享资源的并发访问,以确保在任何时刻,只有一个线程可以执行一个方法或一块代码。

2024-04-28 15:17:15 205

原创 Java atomic类

Java 的 atomic 类是一种利用 CAS(Compare And Swap)操作实现的无锁(lock-free)同步机制。现代的 CPU 都支持这种低级别的原子操作。CAS 包含三个操作数 —— 内存位置(V)、预期的原值(A)和新值(B)。如果内存位置的值与预期值 A 相匹配,那么处理器会自动将该位置的值更新为新值 B,否则处理器不做任何操作。整个比较和交换的操作是一个原子操作。这种机制有效应用在多线程环境,避免了线程阻塞,并降低了线程上下文切换带来的开销。这段代码在使用方法时,会调用。

2024-04-28 15:06:07 181

原创 CompletableFuture

是Java 8引入的一种增强的Future模型,旨在解决传统Future模型的限制,支持更复杂的异步编程场景。它在包下,实现了Future和接口。提供了一种异步执行任务的方式,并能在任务完成时对其结果进行处理。以下是:通过,你可以构建复杂的异步任务链。可以串联多个任务,无需阻塞等待上一个任务完成即可定义下一个任务。任务之间可以通过串行(thenApply, thenAccept, thenRun)或并行(thenCombine, thenCompose)的方式组织。:可以显式地完成一个。

2024-04-28 11:17:08 296 1

原创 CountDownLatch 与 CompletableFuture 对比

使用场景:CountDownLatch通常用于一次性事件的等待,如启动服务前等待多个服务初始化完成;而CompletableFuture用于构建复杂的异步编程,它支持更丰富的操作,如转换结果、组合多个阶段、处理错误等。功能性:CompletableFuture 提供了更加丰富的功能,能够代表一个异步计算的结果,同时也能被链式地处理;CountDownLatch 更简单且专一,只用于在一个时间点上同步多个线程的行为。CompletableFuture是可以多次使用的,并且它的每个阶段都可以独立处理。

2024-04-28 11:11:38 282

原创 常见加密算法

在对称加密算法中,加密(编码)和解密(解码)使用的是同一个密钥。也就是说,发送方和接收方必须事先共享同一密钥,并且保守这个密钥不被第三方得知。

2024-04-25 10:19:55 716 3

原创 RBAC权限模型

提供了对角色分配的限制,比如互斥角色(不允许一个用户同时拥有两个冲突的角色),先决条件角色(用户必须拥有某个角色才能被分配另一个角色),以及数量限制(对于某个角色的用户数量做出限制)。权限是对资源的访问控制,它定义了可以对资源执行的操作,如读取、写入、删除或修改。当用户登录系统时,会创建一个会话,在此会话中,用户的角色被激活,允许用户通过其角色执行权限操作。是最完整的RBAC模型,结合了RBAC1和RBAC2,包括角色层次和权限约束。扩展了基础RBAC,包含角色的继承,允许一个角色继承另一个角色的权限。

2024-04-19 10:33:29 370

原创 Spring 依赖注入

DI(依赖注入)是实现IoC的一种手段。在Spring框架中,DI指的是组件所依赖的其他组件被Spring容器注入到它们中去,而不是通过组件自己去创建或查找依赖。这样,组件的创建和依赖的解析都是由外部容器(即Spring框架)负责的,因此实现了松耦合和更高程度的模块化。依赖注入让组件之间的依赖关系更容易管理和更换,它也有助于单元测试,因为可以很容易地将真实依赖替换为mock对象。

2024-04-17 17:26:28 374

原创 MySQL执行计划

key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)rows:估算出结果集行数,表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数。id:select子句或表执行顺序,id相同,从上到下执行,id不同,id值越大,执行优先级越高。ref:关联的字段,常量等值查询,显示为const,如果为连接查询,显示关联的字段。

2024-04-17 14:28:42 611

原创 Redis数据倾斜

Redis 数据倾斜问题通常出现在分布式 Redis 环境中,尤其是 Redis 集群环境。这意味着一部分节点承载了比其他节点更多的数据或者接收的请求更多,导致负载不均衡。数据倾斜可能会对性能和可扩展性造成影响。针对Redis的数据倾斜问题,可能需要综合考虑应用逻辑、key设计、集群配置和负载均衡策略多个方面,采取一种或多种措施进行缓解。在实践中,通常需要根据具体的业务场景和倾斜状况来选择最合适的解决办法。

2024-04-08 13:54:12 475

原创 Redis大key问题如何解决

Redis 中的大 key 问题通常是指一个单独的 key 占用了过多的内存,例如一个非常大的哈希表、列表、集合或有序集合。大 key 会导致一系列问题,比如执行操作时会出现延迟,甚至可能会阻塞整个 Redis 实例。适当的设计和策略可以减少大 key 对 Redis 性能的影响,确保 Redis 实例运行稳定。在解决大 key 问题时,应尽量避免在高流量期间操作,以免对线上服务造成不必要的影响。

2024-04-08 11:42:46 605

原创 直播弹幕系统设计

设计一个直播弹幕系统需要考虑到系统的实时性、可扩展性、高可用性以及数据持久性等多个方面。

2024-03-22 16:48:11 511

原创 CDN浅聊

其目的是通过在现有的Internet中增加一层新的CACHE(缓存)层,将网站的内容发布到最接近用户的网络”边缘“的节点,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。简单的说,CDN的工作原理就是将您源站的资源缓存到位于全球各地的CDN节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都回您的源站获取,避免网络拥塞、缓解源站压力,保证用户访问资源的速度和体验。为了达到最佳的性能和效率,CDN 需要一些复杂的技术配置,包括缓存规则的设定、CDN 节点的选择等。

2024-03-22 15:19:41 391

原创 SQL中为什么不能使用1=1条件

性能问题:当使用1=1条件时,实际上并没有进行任何实际的条件判断,这可能导致数据库引擎无法有效地利用索引或优化查询计划,从而影响查询性能。在SQL查询中,使用1=1条件是一种常见的技巧,它通常被用于动态构建查询条件或者简化查询语句。可读性:在实际的查询中,1=1条件并没有提供任何有意义的过滤条件,可能会让其他开发人员难以理解查询的意图,降低代码的可读性和可维护性。潜在安全风险:在某些情况下,如果1=1条件被滥用或者被恶意利用,可能会导致SQL注入等安全问题,因为它可以绕过正常的条件判断。

2024-03-08 17:05:46 371

转载 Apollo配置中心

上图简要描述了Apollo客户端的实现原理: 前面提到了Apollo客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。长连接实际上我们是通过Http Long Polling(长轮询)实现的,具体而言:考虑到会有数万客户端向服务端发起长连,在服务端我们使用了async servlet(Spring DeferredResult)来服务Http Long Polling请求。

2024-02-23 16:33:51 46

原创 Java诊断利器Arthas

在JDK5中,Instrument 要求在运行前利用命令行参数或者系统参数来设置代理类,在实际的运行之中,虚拟机在初始化之时(在绝大多数的 Java 类库被载入之前),instrumentation 的设置已经启动,并在虚拟机中设置了回调函数,检测特定类的加载情况,并完成实际工作。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和 Java 类操作了,这样的特性实际上提供了一种虚拟机级别支持的 AOP 实现方式,使得开发者无需对 JDK 做任何升级和改动,就可以实现某些 AOP 的功能了。

2024-01-09 16:46:31 443

原创 ConcurrentHashMap为何不支持null键和null值

ConcurrentHashmap和Hashtable都是支持并发的,这样会有一个问题,当你通过get(k)获取对应的value时,如果获取到的是null时,你无法判断,它是put(k,v)的时候value为null,还是这个key从来没有做过映射。HashMap是非并发的,可以通过contains(key)来做这个判断。ConcurrentHashMap不能put null 是因为 无法分辨是key没找到的null还是有key值为null,这在多线程里面是模糊不清的,所以压根就不让put null。

2023-10-25 16:41:53 283

原创 发生OOM时JVM会退出吗

需要明确,程序是否退出和发生 OOM 无关,而和当前是否还有有关。只要还有运行中的子线程,即使 main 线程结束或异常崩溃了,程序也不会停止。

2023-09-04 14:29:12 809

原创 Dockerfile操作指令

2023-07-11 09:21:35 115

原创 什么是Docker

docker是一个用Go语言实现的开源项目,可以让我们方便的创建和使用容器,docker将程序以及程序所有的依赖都打包到docker container,这样程序可以在任何环境都会有一致的表现。

2023-07-10 10:12:38 1716

转载 XXL-JOB分布式任务调度

调度中心调用执行器,执行定时任务。执行器回调调度中心,上报定时任务执行结果。在调度和执行的整个流程中,XXL-JOB使用了大量的异步操作,减少调度中心的资源压力,以此在集中式调度配置与性能之间找到平衡点。异步实践通过线程池来执行异步操作通过自旋线程 + 阻塞队列的方式来执行异步操作。_xxl-job怎么知道现在要调度那些任务。【分布式任务调度】(四)XXL-JOB的任务调度执行流程及实现原理_xxl-job怎么知道现在要调度那些任务_挥之以墨的博客-CSDN博客。

2023-07-06 17:06:59 83

原创 Eureka和Nacos的区别

eureka只支持APnacos支持CP和AP两种nacos是根据配置识别CP或AP模式,如果注册Nacos的client节点注册时是ephemeral=true即为临时节点,那么Naocs集群对这个client节点效果就是AP,反之则是CP,即不是临时节点#false为永久实例,true表示临时实例开启,注册为临时实例。

2023-07-03 11:18:05 1058

转载 Seata json decode exception, Cannot construct instance of `java.time.LocalDateTime

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.time.LocalDateTime` (no Creators, like default constructor, exist): cannot deserialize from Object val 秃秃爱健身 华为云开发者联盟。

2023-07-03 10:58:11 99

原创 Seata XA模式和AT模式的区别

总的来说,XA模式是通过数据库的两阶段提交协议来实现分布式事务,而AT模式则是通过应用程序层面的日志来实现分布式事务。在AT模式中,Seata通过,在每个参与分布式事务的服务中,截取并记录每个本地事务的执行情况,在事务提交阶段,通过回放本地事务日志的方式来判断是否提交或回滚。在XA模式中,Seata通过协调器(TC)来协调各个分支事务的提交或回滚,保证全局事务的一致性。全局事务由事务协调器(TC)统一管理,分支事务由不同的资源管理器(RM)进行管理。

2023-07-03 10:30:44 1080

原创 MySQL如何给大表加索引

步骤3之后,新表改为原表名后(tb)开始承担业务,步骤3到结束之前这段时间的新产生的数据都是存在新表中的,但是如果有业务对老数据进行修改或删除操作,那将无法实现,所以步骤3到结束这段时间可能会产生数据(更新和删除)丢失。pt-online-schema-change 方案利用三个触发器(DELETE\UPDATE\INSERT触发器)解决了“影子策略”存在的问题,让新老表数据同步时发生的数据变动也能得到同步。

2023-06-26 14:46:31 1610

原创 跨库分页查询

随着数据量的增大,数据库需要进行水平切分,例如通过业务主键id取模,使得数据均匀分布到不同的库中,随之而来的问题就出现跨库如何进行分页查询。举例当在单库单表进行查询的时候,是拥有全局视野的,当进行了水平切分后,就失去了全局视野,数据按照time局部排序之后,不管哪个分库的第3页数据,都不一定是全局排序的第3页数据。

2023-06-26 11:17:15 478

原创 MySQL InnoDB缓存池

磁盘读写,并不是按需读取,而是按页读取,一次至少读一页数据(一般是4K),如果未来要读取的数据就在页中,就能够省去后续的磁盘IO,提高效率。

2023-06-01 15:21:36 553

原创 动态规划-完全背包

有N件物品和⼀个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品都有⽆限个(也就是可以放⼊背包多次),求解将哪些物品装⼊背包⾥物品价值总和最⼤。完全背包和01背包问题唯⼀不同的地⽅就是,每种物品有⽆限件。

2023-02-21 14:47:06 92 1

原创 动态规划-01背包

有N件物品和⼀个最多能被重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能⽤⼀次,求解将哪些物品装⼊背包⾥物品价值总和最⼤。

2023-02-21 09:46:20 297

原创 算法-动态规划

动态规划中每⼀个状态⼀定是由上⼀个状态推导出来的。

2023-02-20 11:34:42 132

原创 算法-二叉树

⼴度优先遍历的实现⼀般使⽤队列来实现,这也是队列先进先出的特点所决定的,因为需要先进先出的结构,才能⼀层⼀层的来遍历⼆叉树。经常会使⽤递归的⽅式来实现深度优先遍历,也就是实现前中后序遍历,使⽤递归是⽐较⽅便的。这⾥前中后,其实指的就是中间节点的遍历顺序,只要记住前中后序指的就是中间节。看如下中间节点的顺序,就可以发现,中间节点的顺序就是所谓的遍历⽅式。

2023-02-20 10:54:50 330

原创 算法-回溯-排列问题

⾸先排列是有序的,也就是说[1,2] 和[2,1] 是两个集合,这和之前分析的⼦集以及组合所不。可以看出元素1在[1,2]中已经使⽤过了,但是在[2,1]中还要在使⽤⼀次1,所以处理排列问题。就不⽤使⽤startIndex了。给定一个可包含重复数字的序列。给定一个不含重复数字的数组。返回所有不重复的全排列。

2023-02-16 14:16:44 103

空空如也

空空如也

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

TA关注的人

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