自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java 面试题:Java的垃圾收集算法 --xunznux

JVM 中的垃圾收集算法各有优缺点,常见的垃圾收集器(如 Serial、Parallel、CMS、G1)根据不同的垃圾收集算法进行优化,以平衡垃圾收集的效率与应用性能。

2024-09-08 11:33:35 1164 1

原创 Java 面试题:通过JProfile排查OOM问题 & 内存溢出与内存泄漏问题 --xunznux

掌握了泄漏对象的类型信息,以及 GCRoots 引用链的信息,就可以比较准确地定位出泄漏代码的位置。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序的结束,被保留的空间无法被其它对象使用,甚至可能导致内存溢出。实际应用中,我们可以通过定期去进行GC,然后查看GC后的内存是否在稳步增大,这个现象很有可能就是由于存在某些对象无法被回收导致的内存泄漏问题,需要进行堆转储后查看是哪些对象,进行下一步的分析,判断是不是需要使用的对象。尽管内存泄漏并不会立刻引起程序崩溃,但是。

2024-09-07 16:13:11 1939

原创 Java 面试题:从源码理解 ThreadPoolExecutor 线程池的参数和工作原理 --xunznux

代码检查是否需要创建新线程执行任务,首先判断当前工作线程数是否小于核心线程数 corePoolSize,如果是,则尝试创建新的核心线程。如果不能创建新线程,则尝试将任务放入队列中,并在任务入队后再次检查线程池状态,确保线程池仍在运行且有足够的线程处理任务。如果任务既不能入队也不能创建新的线程,则最终通过拒绝策略处理任务。

2024-09-06 00:15:00 956

原创 Java 面试题:从源码理解 ThreadLocal 如何解决内存泄漏 & ConcurrentHashMap 如何保证并发安全 --xunznux

ThreadLocal 是 Java 中的一种用于在多线程环境下存储线程局部变量的机制,它可以为每个线程提供独立的变量副本,从而避免多个线程之间的竞争条件。当一个线程通过 ThreadLocal 访问某个变量时,实际上访问的是属于该线程的独立副本。而且 JDK 1.8 使用的是红黑树优化了之前的固定链表,那么当数据量比较大的时候,查询性能也得到了很大的提升,从之前的 O(n) 优化到了 O(logn) 的时间复杂度。,发生冲突和加锁的频率降低了,并发操作的性能就提高了。对应的非并发容器:HashMap。

2024-09-05 11:35:47 1880

原创 Java 面试题:事务隔离级别以及并行事务会出现什么问题&&怎么解决脏读、不可重复读和幻读问题 --xunznux

Read View 是 InnoDB 实现 MVCC 的核心,它确保了在事务执行过程中快照读操作的一致性。通过维护一个活跃事务的列表和相关的事务 ID 边界,Read View 能够精确地判断哪些数据版本对当前事务可见,哪些不可见,从而避免出现脏读、不可重复读等并发问题。

2024-09-02 21:57:16 1367

原创 Java 面试题:TCP重传机制与拥塞控制 --xunznux

TCP 重传机制是保证数据传输可靠性的核心。通过超时重传、快速重传、快速恢复以及 SACK 机制,TCP 能够有效地处理网络中的数据包丢失、乱序等问题。不同的 TCP 实现和版本可能会在这些基础机制上进行优化,以适应不同的网络条件和应用场景。在现代网络环境中,这些重传机制共同作用,确保了 TCP 的可靠性和高效性。TCP 的拥塞控制机制通过多种算法的结合,确保在不同网络条件下都能有效地调节传输速率,减少拥塞发生的概率,保障数据传输的可靠性和效率。

2024-08-31 00:09:09 1649

原创 Java 面试题:TCP协议:三次握手与四次挥手详解--xunznux

半连接队列(SYN 队列)是用于存放已经发送了 SYN(同步)包但还未完成三次握手的连接。它在 TCP 协议中的作用是确保服务器能够正确处理和管理正在建立的连接。工作过程当服务器第一次收到客户端发送的 SYN 报文时,服务器会进入SYN-RECV状态。在这个状态下,服务器尚未与客户端完全建立连接,仅完成了三次握手中的第一步。服务器会将这个处于未完全建立的连接放入半连接队列中,等待客户端发送确认报文(第三次握手)。

2024-08-31 00:00:36 1574

原创 Java 面试题:HTTP缓存:强制缓存和协商缓存--xunznux

HTTP缓存通过强制缓存和协商缓存两种方式,显著提高了资源访问的效率,减少了不必要的网络传输。在实际开发中,合理配置ETag等缓存机制,可以极大提升用户体验和服务器性能。

2024-08-30 19:49:59 1360

原创 Java 面试题:HTTP版本演变--xunznux

这样造成的问题是,如果最先收到的请求的处理时间长的话,响应生成也慢,就会阻塞已经生成了的响应的发送。基于 TCP 传输协议的 HTTP 协议,由于是通过四元组(源 IP、源端口、目的IP、目的端口)确定一条 TCP 连接,那么当移动设备的网络从 4G 切换到 WIFI 时,意味着 IP 地址变化了,那么就必须要断开连接,然后重新建立连接,而建立连接的过程包含 TCP 三次握手和 TLS 四次握手的时延,以及 TCP 慢启动的减速过程,给用户的感觉就是网络突然卡顿了一下,因此连接的迁移成本是很高的。

2024-08-29 22:36:47 1813

原创 Java 面试题:HTTPS与HTTP区别以及HTTPS如何建立连接保证安全性--xunznux

对称加密也称为私钥加密,使用相同的密钥来进行加密和解密。在加密过程中,明文数据通过应用特定的算法和密钥进行加密,生成密文数据。解密过程则是将密文数据应用 同样的算法和密钥进行解密,恢复为明文数据。由于加密和解密都使用相同的密钥,因此对称加密算法的速度通常较快,但密钥的安全性很重要。如果密钥泄 漏,攻击者可以轻易地解密数据。公钥加密,私钥解密。这个目的是为了保证内容传输的安全,因为被公钥加密的内容,其他人是无法解密的,只有持有私钥的人,才能解密出实际的内容;私钥加密,公钥解密。

2024-08-28 14:42:26 1250

原创 Java 面试题:在浏览里输入URL后回车会发生什么--xunznux

3. 在浏览里输入URL后回车会发生什么。地址解析协议(Address Resolution Protocol,ARP):ARP协议可以将IPv4地址(逻辑地址)转换为各种网络所需的硬件地址(物理地址)。地址解析的目标就是发现逻辑地址与物理地址的映射关系。ARP仅用于IPv4协议,IPv6使用邻居发现协议(NDP)替代。ARP协议目前最广泛应用于寻找32位IPv4地址与以太网的48位MAC地址之间的映射。ARP协议是网络层协议。

2024-08-27 21:03:14 930

原创 Java HashMap 源码解读笔记(二)--xunznux

*这样做的主要原因是尾插法对于后续元素的查找和删除操作更加高效,因为新插入的元素在链表的尾部,因此只需要遍历链表一次就可以找到链表的尾部。在插入过程中,它会根据哈希值和键的比较结果来确定插入的方向,并在插入后对红黑树进行必要的平衡操作。这段代码实现的是将红黑树转换回链表的功能。它的主要作用是根据当前的容量和负载因子,计算出新的容量和阈值,并创建一个新的存储桶数组,将原有的键值对重新散列到新的数组中。3. 将原有的键值对重新散列到新的数组中,利用了 2 的幂次方扩容的特性,可以避免大量的节点位置重新计算。

2024-08-02 21:28:21 952

原创 Java HashMap 源码解读笔记(一)--xunznux

基于哈希 table 实现的 Map 接口。此实现提供所有可选的映射操作,并允许 null 值和 null 键(因为key不允许重复,因此只能有一个键为null)。(HashMap 类大致相当于 Hashtable,但它是非同步(unsynchronized) 的并且允许空值。)此类不保证映射的顺序;特别是,它不保证顺序会随时间保持不变。假设哈希函数能将元素适当地分散到各个桶中,此实现为基本操作(get 和 put)提供常数时间性能。

2024-07-31 22:49:44 1026

原创 面试场景题系列--(4)设计一个支持敏感数据存储和传输安全的加解密平台--xunznux

如果敏感数据未经加密直接存储在数据库中、记录在日志中,或通过公共网络传输,一旦这些数据遭到泄露,就会带来严重的后果。经济损失是显而易见的,可能导致用户财产损失、公司赔偿巨额损失等。此外,公司还可能面临严重的公关危机,失去客户信任,同时可能面临法律诉讼,导致公司在市场中的信誉和地位一落千丈,甚至可能导致公司无法继续运营。

2024-07-28 23:53:29 1519 1

原创 面试场景题系列--(3)如何避免超预期的高并发压力压垮系统?限流算法--xunznux

每种限流算法都有其优缺点,具体选择取决于系统的具体需求和特点。计数器法:实现简单,但容易在时间窗口边界出现突刺流量。滑动窗口法:平滑限流,但实现复杂,开销大。漏桶算法:平滑流量,适合流量整形,但无法处理突发流量。令牌桶算法:能处理突发流量,适合流量控制,但实现复杂。分布式令牌桶算法:适合分布式限流场景,但实现复杂。

2024-07-26 22:00:01 1049

原创 面试场景题系列--(2)短 URL 生成器设计:百亿短 URL 怎样做到无冲突?--xunznux

短 URL 生成器,就是将一个比较长的 URL 生成一个比较短的 URL,当浏览器通过短 URL 生成器访问这个短 URL 的时候,重定向访问到原始的长 URL 目标服务器。对于需要展示短 URL 的应用程序,由该应用调用短 URL 生成器生成短 URL,并将该短URL 展示给用户,用户在浏览器中点击该短 URL 的时候,请求发送到短 URL 生成器(短URL 生成器以 HTTP 服务器的方式对外提供服务,短 URL 域名指向短 URL 生成器),短 URL 生成器返回 HTTP 重定向进行访问。

2024-07-25 22:27:08 1359

原创 面试场景题系列--(1)如果系统的 QPS 突然提升 10 倍该怎么设计?--xunznux

设计高并发系统,需要从物理硬件层面到软件的架构、代码层面的优化,使用什么中间件来不断提高系统的抗压能力。

2024-07-23 22:52:45 1171

原创 实现一个自己的OpenFeign 远程调用验证协议--Springboot 自定义拦截器验证请求合法性--xunznux

至此,一个简单的用于 OpenFeign 远程调用的验证协议就完成了,可以将其作为一个项目打包为jar包,然后引入其他项目中使用,这里将不做介绍。当然,拦截器的使用也不仅仅是可以只用于 OpenFeign 的远程调用验证,可以用于任何 HTTP 请求的拦截与验证。Springboot 启动时Bean的创建与注入(一)-源码解读-xunznuxSpringboot 启动时Bean的创建与注入(二)-源码解读-xunznuxSpringboot 的Bean生命周期五步、七步、十步详解以及框架源码解读。

2024-07-22 22:45:24 1568 1

原创 Springboot 的Bean生命周期五步、七步、十步详解以及框架源码解读生命周期-面试热点-xunznux

Bean 生命周期的本质是:在哪个时间节点上调用了哪个类的哪个方法。我们需要充分的了解在这个生命线上,都有哪些特殊的时间节点。只有我们知道了特殊的时间节点都在哪,到时我们才可以确定代码写到哪。我们可能需要在某个特殊的时间点上执行一段特定的代码,这段代码就可以放到这个节点上。当生命线走到这里的时候,自然会被调用。

2024-07-21 10:49:56 1883 1

原创 Springboot 启动时Bean的创建与注入(二)-面试热点-springboot源码解读-xunznux

Springboot bean的创建与注入过程,源码解读,三级缓存,面试常问。

2024-07-20 14:54:37 1435

原创 Springboot 启动时Bean的创建与注入(一)-面试热点-springboot源码解读-xunznux

快速搭建一个springboot web项目。通过调试堆栈信息展示 Spring Boot 在启动过程中如何创建和注入 bean 的详细过程。springboot底层源码阅读解释。

2024-07-19 00:06:46 1648

原创 golang 实现负载均衡器-增加移除服务器方法代码实现以及其他优化-2.2-xunznux

负载均衡策略原理介绍,不同负载均衡策略的实现方法,具体可以看git的提交记录。同时这次还对 SelectServer 方法进行了修复,增加了对选择的服务器的Status的检查以及选中的服务器不可用时如何选择可用的服务器。我的实现比较简单,可自行探索更为合理的方法。

2024-07-18 00:20:41 645

原创 golang 实现负载均衡器-一致性哈希算法负载均衡器代码实现-2.1-xunznux

go 实现负载均衡器,IP散列负载均衡策略,一致性哈希算法负载均衡策略的代码实现。

2024-07-16 23:26:30 1402

原创 golang 实现负载均衡器-平滑加权轮询负载均衡器代码实现-2.0-xunznux

GO 实现服务器负载均衡,平滑加权轮询负载均衡策略的代码实现

2024-07-15 21:08:00 1314

原创 golang 实现负载均衡器-负载均衡策略代码实现-版本1.0

负载均衡器(Load Balancer)在计算机网络和分布式系统中扮演着至关重要的角色,它能够有效地管理和分配网络请求到多个服务器或服务实例上,以优化资源利用、最大化吞吐量、最小化响应时间。本篇文章使用go实现负载均衡策略。

2024-07-14 16:38:37 1525

原创 golang 实现负载均衡器-负载均衡原理介绍

负载均衡器(Load Balancer)在计算机网络和分布式系统中扮演着至关重要的角色,它能够有效地管理和分配网络请求到多个服务器或服务实例上,以优化资源利用、最大化吞吐量、最小化响应时间。本篇文章通过go实现负载均衡策略。

2024-07-14 16:30:04 1227 1

原创 Go web 简单开发 demo 以及时间类型转换踩坑经理-gin框架、gorm框架

Go web 简单开发教程 demo 以及时间类型转换踩坑经理-gin框架、gorm框架入门使用

2024-07-13 14:36:56 1283

原创 datetime-local转为time.Time出错“error“: “parsing time \“2024-07-06T23:16\“ as \“2006-01-02T15:04:05Z07

前端传回 datetime-local 在使用gorm的ShouldBindJSON方法转为 结构体的time.Time类型时出错 “error”: "parsing time “2024-07-06T23:16” as "2006-01-02T15:04:05Z07。使用gorm标签default:null:这种方法在数据库层面上设置了默认值为NULL,但是在Go代码中并没有明确地表示这个字段可能为空。在Go语言中,time.Time类型默认使用RFC3339格式化日期和时间。

2024-07-12 21:10:45 695

原创 MIT6.824-2022 分布式系统课程实验笔记 Lab 2D Raft-日志压缩(log compaction)--xunznux

重新启动的服务器会重放完整的 Raft 日志以恢复其状态。然而,对于一个长时间运行的服务来说,永远记住完整的 Raft 日志是不现实的。相反,你需要修改 Raft 以配合定期持久存储其状态“快照”的服务,此时 Raft 会丢弃快照之前的日志条目。这样可以减少持久化数据的数量并加快重启速度。然而,现在可能会出现一种情况,即某个 follower 落后太多,导致 leader 丢弃了它需要追赶的日志条目;此时,leader 必须发送一个快照以及从快照开始的日志

2024-07-12 20:59:34 1842

原创 MIT6.824-2022 分布式系统课程实验笔记 Lab 2C Raft-持久化机制(persistence)--xunznux

如果基于 Raft 的服务器重新启动,它应该从之前中断的地方恢复服务。这需要 Raft 保持持久状态,以便在重启后仍然存在。实际实现会在每次状态改变时将 Raft 的持久状态写入磁盘,并在重启后从磁盘读取状态。

2024-07-07 18:36:12 1749

原创 MIT6.824-2022 分布式系统课程实验笔记 Lab 2B Raft-日志复制(Log Replication)--xunznux

如果跟随者的日志实际上没有达到领导者日志的长度,后续的AppendEntries请求会因为日志不匹配而失败(因为跟随者的日志索引处的日志任期号与领导者尝试发送的日志任期号不一致),领导者会相应地减小nextIndex值,直到找到匹配点。领导者期望在这个索引位置的日志条目与它正尝试追加的日志条目之前是连续的。如果args.PrevLogIndex大于跟随者日志的长度,这意味着领导者认为跟随者应该有一个比实际更长的日志,这通常是因为领导者和跟随者之间的日志出现了不一致,或者跟随者落后很多且领导者的信息过时。

2024-07-06 17:16:14 1375

原创 MIT6.824-2022 分布式系统课程实验笔记 Lab 2A Raft-领导者选举(leader election)--xunznux

实现Raft领导者选举和心跳机制(仅包含没有日志条目的 AppendEntries RPCs)。第2A部分的目标是选出一个单一的领导者,如果没有故障发生,领导者应保持其领导地位;如果旧的领导者失败或 to/from 旧领导者的消息包丢失,则由新的领导者接替。

2024-07-06 16:57:51 1480 1

原创 MIT6.824-2022 分布式系统课程实验笔记 Lab 2 Raft--xunznux

Raft是一种用于管理复制日志的一致性算法,通过将日志条目复制到多个服务器上以实现容错。Raft通过选举机制来选出一个领导者(Leader),由领导者负责处理所有客户端请求并将日志条目复制到所有从节点(Follower)上

2024-07-06 16:42:48 1038 1

原创 MIT6.824-2022 分布式系统课程实验笔记 Lab 1 MapReduce--xunznux

在本实验中,将构建一个MapReduce系统。实现一个 worker 工作进程,该进程调用应用程序的Map和Reduce函数,并负责读写文件;还实现一个 coordinator 协调器进程,该进程分配任务给工作进程并处理失败的工作进程。将构建的系统类似于MapReduce论文中描述的系统。(注意:本实验使用“coordinator”而不是论文中的“master”。

2024-06-16 22:05:22 1239 1

空空如也

空空如也

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

TA关注的人

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