- 博客(142)
- 收藏
- 关注
原创 Java函数式编程(中)
Java Stream API 是一个强大的数据处理工具,提供了创建、中间操作和终结操作三大核心功能。创建操作支持从数组、集合、范围等构建流;中间操作包括过滤、映射、排序等数据处理;终结操作实现查找、判断、收集等结果输出。关键特性包括不可变性、惰性求值和一次性消费,适合高效并发处理。性能测试表明,基本类型流(如IntStream)在数值计算中表现优异,接近传统循环,而普通Stream性能较差。并行流在大数据量时优势明显,但需注意线程安全。开发中应根据场景选择合适的流操作,兼顾代码简洁性与执行效率。
2025-06-02 17:21:25
463
原创 Dubbo快速入门 - Java分布式框架
本文系统介绍了Dubbo框架及其应用,重点对比了Feign与Dubbo的差异,包括定位、通信模型、服务治理、生态集成等。Dubbo作为高性能RPC框架,适用于高并发场景,支持多协议、负载均衡和集群容错。详细演示了Dubbo快速入门流程,包括Zookeeper安装、服务提供者与消费者模块搭建,以及注册中心配置。此外,探讨了Dubbo高级特性,如序列化、超时重试、多版本发布、负载均衡及服务降级,并结合dubbo-admin管理平台实现服务监控与治理。
2025-05-29 16:43:33
872
原创 Redis从入门到实战 - 原理篇
Redis作为一种高性能的键值存储系统,其核心数据结构包括动态字符串、整数集合、字典、压缩列表和跳跃表。此外,Redis还采用了惰性删除和周期删除策略来管理键的过期,以及多种内存淘汰策略来优化内存使用。在网络模型方面,Redis采用单线程模型处理命令请求,利用I/O多路复用技术提高并发处理能力。Redis的通信协议RESP定义了客户端和服务器之间的数据交换格式,支持多种数据类型。通过这些设计和实现,Redis能够提供高效、可靠的数据存储和访问服务。
2025-05-23 21:47:18
1397
1
原创 Redis从入门到实战 - 高级篇(下)
Redis键值设计应遵循最佳实践,如使用优雅的key结构,避免BigKey,并选择合适的数据类型。BigKey会导致网络阻塞、数据倾斜、Redis阻塞和CPU压力。批处理优化可使用Pipeline或Mxxx命令,集群模式下需确保批处理命令的key落在同一插槽。服务端优化包括合理配置持久化、监控慢查询、加强安全配置、管理内存使用。集群最佳实践涉及确保集群完整性、管理集群带宽、避免数据倾斜、优化客户端性能、处理命令兼容性及lua和事务问题。
2025-05-21 16:33:58
1122
原创 Redis从入门到实战——实战篇(下)
探店笔记类似于点评网站的评价,往往是图文结合。步骤①:根据个人情况修改路径注:建议把nginx.conf文件里的负载均衡删了,重新加载配置。
2025-05-05 21:39:29
1198
1
原创 Redis入门到实战——基础篇
Redis诞生于2009年,全称Remote Dictionary Server,远程词典服务器,是一个基于内存的键值型NoSQL数据库。
2025-04-29 21:10:21
1091
原创 JUC并发编程 - 下篇
/ 1. 死等// 2) 带超时等待// 3) 让调用者放弃任务执行// log.debug("放弃{}", task);// 4) 让调用者抛出异常// throw new RuntimeException("任务执行失败 " + task);// 5) 让调用者自己执行任务task.run();});i < 15;try {});@FunctionalInterface // 拒绝策略// 任务队列。
2024-10-14 10:31:55
800
2
原创 MySQL从入门到精通 - 基础篇
数据库操作表操作数据类型1. 数值类型2. 字符串类型二进制数据:以二进制格式(0和1)表示的所有类型的数据。这种数据包括但不限于图形图像、音频、程序代码等,可以被计算机直接读取和处理。文本数据:由字符组成的信息,通常以一种人类可读的格式表示。可以包含字母、数字、标点符号和空格等内容,常用特定的字符编码(如ASCII、UTF-8)进行存储。CHAR:是固定长度的字符串类型。当定义为 时,不论实际存储的字符串长度是多少,都会占用 n 个字符的存储空间。如果字符串长度不足 n,会用空格填充。VARCHAR:是
2024-09-26 23:14:08
694
原创 Java虚拟机 - 原理篇
A的数据写入时,由于A和B在同一个缓存行中,所以A和B的缓存数据都会被清空。我们只修改了A对象的数据,引起了B对象的缓存失效。在并发情况下,如果让A对象一个缓存行失效,是不会影响到B对象的缓存行的。完全不开性能就特别差了。2、将1与0比较(判断a是否为false),相当跳转到偏移量17的位置,不相等继续向下运行。这里显然是不相等的。第一个判断是将2和0比较,如果不相同就继续运行if下面的分支不会走else分支,显然会走if下面的分支。第二个判断是将2和1比较,相等走if下面的分支,否则走else。
2024-09-14 15:50:51
774
原创 Java虚拟机 - 高级篇
将整个简化版的arthas进行打包,在服务器上进行测试。使用maven-shade-plugin插件可以将所有依赖打入同一个jar包中并指定入口main方法。
2024-09-12 21:47:00
919
原创 Java虚拟机 - 实战篇
Spring的Bean中不要长期存放大对象,如果是缓存用于提升性能,尽量设置过期时间。i那么我们对i进行的任何处理都是没有意义的,这种代码无法执行的现象称之为。如果不将i返回,JIT会直接将这段代码去掉,因为它认为你不会使用。单例模式 -> 懒加载。
2024-09-11 15:36:14
346
原创 Java虚拟机 - 面试篇
/自定义类加载器@Overridetry {//获取字节码信息的二进制数据,调用defineClass方法Class<?//打印字段(1)引用计数法(2)可达性分析算法。
2024-09-09 22:42:58
507
1
原创 JVM虚拟机 - 基础篇
程序计数器:每个线程会通过程序计数器记录当前要执行的字节码指令的地址,程序计数器可以控制程序指令的进行,实现分支、跳转、异常等逻辑。Java虚拟机栈:采用栈的数据结构赖管理方法调用中的基本数据(局部变量、操作数、帧数据),每一个方法的调用使用一个栈帧来保存。本地方法栈:本地方法栈存储的是native本地方法的栈帧。堆:存放中的是创建出来的对象,这也是最容易产生内存溢出的位置。方法区:主要存放的是类的元信息,同时还保存了常量池。
2024-09-08 22:56:26
855
原创 数据结构与算法 - 股票问题
1. 买卖股票的最佳时机给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6
2024-08-21 09:32:23
1079
原创 数据结构与算法 - 设计
请你设计并实现一个满足约束的数据结构。实现LRUCachecapacitykey-1keyvaluekey-valuecapacity函数get和put必须以O(1)的平均时间复杂度运行。// 缓存是 {1=1}// 缓存是 {1=1, 2=2}// 返回 1// 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}// 返回 -1 (未找到)// 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}// 返回 -1 (未找到)// 返回 3// 返回 4。
2024-08-20 17:19:00
1102
原创 数据结构与算法 - 字符串
最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。"leeto" 没有在 "leetcode" 中出现,所以返回 -1。字符串的第一个匹配项的下标(下标从 0 开始)。t 中两个字符 'a' 均应包含在 s 的子串中,第一个匹配项的下标是 0 ,所以返回 0。因此没有符合条件的子字符串,返回空字符串。"sad" 在下标 0 和 6 处匹配。如果不存在公共前缀,返回空字符串。"aba" 同样是符合题意的答案。所有字符的子串,则返回空字符串。所有字符的最小子串。
2024-08-19 10:49:46
866
原创 数据结构与算法 - 单调队列和栈
给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。滑动窗口的位置 最大值[1]
2024-08-18 21:13:33
333
原创 数据结构与算法 - 双指针
给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。nums = [0][0]你能尽量减少完成的操作次数吗?解法一:双指针法在循环中,右指针right向右移动,如果当前元素不为0,则将其与左指针指向的元素交换,并且左指针向右移动。给你一个下标从开始的整数数组numbers,该数组已按,请你从数组中找出满足相加之和等于目标数target的两个数。如果设这两个数分别是和,则。以长度为 2 的整数数组。
2024-08-18 16:14:30
1150
原创 数据结构与算法 - 回溯
在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。一种收集最多黄金的路线是:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7。2 和 3 可以形成一组候选,2 + 2 + 3 = 7。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。如果至少一个数字的被选数量不同,则两种组合是不同的。该列表不能包含相同的组合两次,组合可以以任何顺序返回。一种收集最多黄金的路线是:9 -> 8 -> 7。
2024-08-18 10:50:57
678
原创 数据结构与算法 - 动态规划
3. 状态转移方程:对于每个数i从2到n,遍历所有可能的拆分点j(1到i.2),更新dp[i]。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。
2024-08-16 22:33:40
1138
原创 数据结构与算法 - 贪心算法
答:简单来说就是建立【字符】到【数字】的对应关系,如下面大家熟知的ASCⅡ编码表,例如,可以查表得知字符【a】对应的数字是十六进制数【0x61】
2024-08-14 17:08:28
2054
原创 数据结构与算法 - 图
图是有顶点(vertex)和边(edge)组成的数据结构,例如该图有4个顶点:A、B、C、D以及四条有向边,有向图中,边是单向的。
2024-08-13 20:03:10
1026
原创 数据结构与算法 - 哈希表
答:哈希算法是一种将输入数据(通常是任意大小的信息)转换为固定大小的值(即哈希值)的算法。哈希值通常是一个较短的字符串。用于快速查找和数据完整性验证等目的。哈希算法广泛应用于数据结构(如哈希表)、加密和数据完整性验证等领域。1.相同的输入永远会产出相同的输出(哈希值)2.固定输出长度:无论输入数据的大小如何,输出的哈希值长度都是固定的3.快速计算:计算哈希值的过程应该是快速的,能够在合理的时间内完成4.抗碰撞:尽可能减少不同输入生成相同哈希值的可能性(即碰撞)5.不可逆。
2024-08-09 17:06:41
750
原创 数据结构与算法 - B树
int t;int[] keys;this.t = t;@Overrideleaf表示是否是叶子节点keyNumber为keys中有效key数目t为最小度数,它决定了节点中key的最小、最大数目,分别是t - 1 和 2t - 1keys存储此节点的keychildren存储此节点的childtoString只是为了方便调试和测试,非必须实际keys应当改为entries以便同时保存key和value,刚开始简化实现Node root;this(2)
2024-08-08 11:45:18
2006
原创 数据结构与算法 - 红黑树
红黑树是一种自平衡二叉查找树,最早由一名叫Rudolf Bayer的德国计算机科学家于1972年发明。然而,最初的树形结构不是现在的红黑树,而是一种称为B树的结构,它是一种多叉树,可以用于在磁盘上存储大量数据。在1980年代早期,计算机科学家Leonard Adleman和Daniel Sleator推广了红黑树,并证明了它的自平衡性和高效性。从那时起,红黑树成为了最流行的自平衡二叉查找树之一,并被广泛应用于许多领域,如编译器、操作系统、数据库等。
2024-08-07 16:05:13
1127
原创 数据结构与算法 - AVL树
AVL树是一种自平衡二叉搜索树,由托尔·哈斯特罗姆在1960年提出并在1962年发表。它的名字来源于发明者的名字:Adelson-Velsky和Landis,他们是苏联数学家,于1962年发表了一篇论文,详细介绍了AVL树的概念和性质。在二叉搜索树中,如果插入的元素按照特定的顺序排列,可能会导致树变得非常不平衡,从而降低搜索、插入和删除的效率。为了解决这个问题,AVL树通过在每个节点中维护一个平衡因子来确保树的平衡。平衡因子是左子树的高度减去右子树的高度。
2024-08-06 17:54:24
1090
原创 数据结构与算法 - 二叉搜索树
二叉搜索树最早是由Bernoulli兄弟在18世纪中提出的,但是真正推广和应用该数据结构的是1960年代的D.L Gries。它的著作《The Science of Programming》中详细介绍了二叉搜索树的实现和应用。在计算机科学的发展中,二叉搜索树成为了一种非常基础的数据结构,被广泛应用在各种领域,包括搜索、排序、数据库索引等。随着计算机算力的提升和对数据结构的深入研究,二叉搜索树也不断被优化和扩展,例如AVL树,红黑树等。int key;
2024-08-06 09:51:38
1005
原创 数据结构与算法 - 二叉树
二叉树是这么一种树状结构:每个节点最多有两个孩子,左孩子和右孩子完全二叉树:是一种二叉树结构,除了最后一层以外,每一层都必须填满,填充时要遵循从左到右平衡二叉树:是一种二叉树结构,其中每个节点的左右子树高度相差不超过1。
2024-08-04 21:59:26
1156
原创 数据结构与算法 - 堆
一些规律算法时间复杂度分析下面看交换次数的推导:设节点高度为3每一层的交换次数为:节点个数 * 此节点交换次数,总的交换次数为即推导出 2^h - h - 1,其中2^h ≈ n,h ≈ log_2(n),因此时间复杂度为O(n)
2024-08-04 10:37:46
1197
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人