- 博客(131)
- 收藏
- 关注
原创 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 677
原创 MySQL从入门到精通 - 基础篇
数据库操作表操作数据类型1. 数值类型2. 字符串类型二进制数据:以二进制格式(0和1)表示的所有类型的数据。这种数据包括但不限于图形图像、音频、程序代码等,可以被计算机直接读取和处理。文本数据:由字符组成的信息,通常以一种人类可读的格式表示。可以包含字母、数字、标点符号和空格等内容,常用特定的字符编码(如ASCII、UTF-8)进行存储。CHAR:是固定长度的字符串类型。当定义为 时,不论实际存储的字符串长度是多少,都会占用 n 个字符的存储空间。如果字符串长度不足 n,会用空格填充。VARCHAR:是
2024-09-26 23:14:08 568
原创 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 689
原创 Java虚拟机 - 高级篇
将整个简化版的arthas进行打包,在服务器上进行测试。使用maven-shade-plugin插件可以将所有依赖打入同一个jar包中并指定入口main方法。
2024-09-12 21:47:00 849
原创 Java虚拟机 - 实战篇
Spring的Bean中不要长期存放大对象,如果是缓存用于提升性能,尽量设置过期时间。i那么我们对i进行的任何处理都是没有意义的,这种代码无法执行的现象称之为。如果不将i返回,JIT会直接将这段代码去掉,因为它认为你不会使用。单例模式 -> 懒加载。
2024-09-11 15:36:14 277
原创 Java虚拟机 - 面试篇
/自定义类加载器@Overridetry {//获取字节码信息的二进制数据,调用defineClass方法Class<?//打印字段(1)引用计数法(2)可达性分析算法。
2024-09-09 22:42:58 433
原创 JVM虚拟机 - 基础篇
程序计数器:每个线程会通过程序计数器记录当前要执行的字节码指令的地址,程序计数器可以控制程序指令的进行,实现分支、跳转、异常等逻辑。Java虚拟机栈:采用栈的数据结构赖管理方法调用中的基本数据(局部变量、操作数、帧数据),每一个方法的调用使用一个栈帧来保存。本地方法栈:本地方法栈存储的是native本地方法的栈帧。堆:存放中的是创建出来的对象,这也是最容易产生内存溢出的位置。方法区:主要存放的是类的元信息,同时还保存了常量池。
2024-09-08 22:56:26 690
原创 数据结构与算法 - 股票问题
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 1000
原创 数据结构与算法 - 设计
请你设计并实现一个满足约束的数据结构。实现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 1047
原创 数据结构与算法 - 字符串
最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。"leeto" 没有在 "leetcode" 中出现,所以返回 -1。字符串的第一个匹配项的下标(下标从 0 开始)。t 中两个字符 'a' 均应包含在 s 的子串中,第一个匹配项的下标是 0 ,所以返回 0。因此没有符合条件的子字符串,返回空字符串。"sad" 在下标 0 和 6 处匹配。如果不存在公共前缀,返回空字符串。"aba" 同样是符合题意的答案。所有字符的子串,则返回空字符串。所有字符的最小子串。
2024-08-19 10:49:46 824
原创 数据结构与算法 - 单调队列和栈
给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。滑动窗口的位置 最大值[1]
2024-08-18 21:13:33 286
原创 数据结构与算法 - 双指针
给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。nums = [0][0]你能尽量减少完成的操作次数吗?解法一:双指针法在循环中,右指针right向右移动,如果当前元素不为0,则将其与左指针指向的元素交换,并且左指针向右移动。给你一个下标从开始的整数数组numbers,该数组已按,请你从数组中找出满足相加之和等于目标数target的两个数。如果设这两个数分别是和,则。以长度为 2 的整数数组。
2024-08-18 16:14:30 1114
原创 数据结构与算法 - 回溯
在[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 629
原创 数据结构与算法 - 动态规划
3. 状态转移方程:对于每个数i从2到n,遍历所有可能的拆分点j(1到i.2),更新dp[i]。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。
2024-08-16 22:33:40 1025
原创 数据结构与算法 - 贪心算法
答:简单来说就是建立【字符】到【数字】的对应关系,如下面大家熟知的ASCⅡ编码表,例如,可以查表得知字符【a】对应的数字是十六进制数【0x61】
2024-08-14 17:08:28 1821
原创 数据结构与算法 - 图
图是有顶点(vertex)和边(edge)组成的数据结构,例如该图有4个顶点:A、B、C、D以及四条有向边,有向图中,边是单向的。
2024-08-13 20:03:10 976
原创 数据结构与算法 - 哈希表
答:哈希算法是一种将输入数据(通常是任意大小的信息)转换为固定大小的值(即哈希值)的算法。哈希值通常是一个较短的字符串。用于快速查找和数据完整性验证等目的。哈希算法广泛应用于数据结构(如哈希表)、加密和数据完整性验证等领域。1.相同的输入永远会产出相同的输出(哈希值)2.固定输出长度:无论输入数据的大小如何,输出的哈希值长度都是固定的3.快速计算:计算哈希值的过程应该是快速的,能够在合理的时间内完成4.抗碰撞:尽可能减少不同输入生成相同哈希值的可能性(即碰撞)5.不可逆。
2024-08-09 17:06:41 697
原创 数据结构与算法 - 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 1846
原创 数据结构与算法 - 红黑树
红黑树是一种自平衡二叉查找树,最早由一名叫Rudolf Bayer的德国计算机科学家于1972年发明。然而,最初的树形结构不是现在的红黑树,而是一种称为B树的结构,它是一种多叉树,可以用于在磁盘上存储大量数据。在1980年代早期,计算机科学家Leonard Adleman和Daniel Sleator推广了红黑树,并证明了它的自平衡性和高效性。从那时起,红黑树成为了最流行的自平衡二叉查找树之一,并被广泛应用于许多领域,如编译器、操作系统、数据库等。
2024-08-07 16:05:13 1033
原创 数据结构与算法 - AVL树
AVL树是一种自平衡二叉搜索树,由托尔·哈斯特罗姆在1960年提出并在1962年发表。它的名字来源于发明者的名字:Adelson-Velsky和Landis,他们是苏联数学家,于1962年发表了一篇论文,详细介绍了AVL树的概念和性质。在二叉搜索树中,如果插入的元素按照特定的顺序排列,可能会导致树变得非常不平衡,从而降低搜索、插入和删除的效率。为了解决这个问题,AVL树通过在每个节点中维护一个平衡因子来确保树的平衡。平衡因子是左子树的高度减去右子树的高度。
2024-08-06 17:54:24 1050
原创 数据结构与算法 - 二叉搜索树
二叉搜索树最早是由Bernoulli兄弟在18世纪中提出的,但是真正推广和应用该数据结构的是1960年代的D.L Gries。它的著作《The Science of Programming》中详细介绍了二叉搜索树的实现和应用。在计算机科学的发展中,二叉搜索树成为了一种非常基础的数据结构,被广泛应用在各种领域,包括搜索、排序、数据库索引等。随着计算机算力的提升和对数据结构的深入研究,二叉搜索树也不断被优化和扩展,例如AVL树,红黑树等。int key;
2024-08-06 09:51:38 958
原创 数据结构与算法 - 二叉树
二叉树是这么一种树状结构:每个节点最多有两个孩子,左孩子和右孩子完全二叉树:是一种二叉树结构,除了最后一层以外,每一层都必须填满,填充时要遵循从左到右平衡二叉树:是一种二叉树结构,其中每个节点的左右子树高度相差不超过1。
2024-08-04 21:59:26 1052
原创 数据结构与算法 - 堆
一些规律算法时间复杂度分析下面看交换次数的推导:设节点高度为3每一层的交换次数为:节点个数 * 此节点交换次数,总的交换次数为即推导出 2^h - h - 1,其中2^h ≈ n,h ≈ log_2(n),因此时间复杂度为O(n)
2024-08-04 10:37:46 1060
原创 数据结构与算法 - 双端队列
双端队列、队列、栈对比注1:Jav中LinkedList即为典型双端队列实现,不过它同时实现了Queue接口,也提供了栈的push、pop等方法。注2:不同语言,操作双端队列的方法命名有所不同,参见下表。
2024-08-03 11:42:27 717
原创 数据结构与算法 - 栈
计算机科学中,stack是一种线性的数据结构,只能在其一端添加数据和移除数据。习惯来说,这一端称之为栈顶,另一端不能操作数据的称之为栈底,就如同生活中的一摞书。先提供一个栈接口。
2024-08-03 09:33:59 1037
原创 数据结构与算法 - 队列
在计算机科学中,queue是以顺序的方式维护的一组数据集合,在一端添加数据,从另一端移除数据。习惯来说,添加的一端称为尾,移除的一端称为头,就如同生活中的排队买商品。先定义一个简化的队列接口。
2024-08-02 15:39:58 582
原创 数据结构与算法 - 递归
定义:在计算机科学中,递归是一种解决计算问题的方法,其中解决方案取决于同一类问题的更小子集。假设链表中有3个节点,value分别为1,2,3,以上代码的执行流程类似于下面的伪码1. 确定能否使用递归求解2. 推导出递推关系,即父问题与子问题的关系,以及递归的结束条件例如之前遍历链表的递推关系为。
2024-08-01 18:01:11 1390
原创 数据结构与算法 - 链表
定义:在计算机科学中,链表是数据元素的线性集合,其每个元素都指向下一个元素,元素存储上并不连续。可以分类为:单向链表,每个元素只知道其下一个元素是谁双向链表,每个元素直到其上一个元素和下一个元素循环链表,通常的链表尾节点tail指向的都是null,而循环链表的tail指向的是头节点head链表内还有一种特殊的节点称为哨兵(Sentinel)节点,也叫做哑元(Dummy)节点,它不存储数据,通常用作头尾,用来简化边界判断,如下图所示根据index查找,时间复杂度O(n)
2024-08-01 10:38:43 1031
原创 数据结构与算法 - 数组
定义:在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识。知道了数组的数据起始地址BaseAddress,就可以由公式BaseAddress + i * size来计算索引i元素的地址Java中数组结构为例如的大小为40字节,组成如下即根据索引查找元素,时间复杂度是O(1)。
2024-07-31 08:57:18 1003
原创 黑马头条Day12-项目部署_持续集成
Jenkins是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。JenkinsJenkins的特征:开源的Java语言开发持续集成工具,支持持续集成,持续部署;易于安装部署配置:可以通过yum安装,或者下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理;消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过email通知,生成JUnit/TestNG测试报告;
2024-07-29 17:39:37 1152
原创 黑马头条Day11- 实时计算热点文章、KafkaStream
Kafka Stream 是Apache Kafka从1.0版本引入的一个新Feature。它是提供了对存储于Kafka内的数据进行流式处理和分析的功能。Kafka Stream提供了一个非常简单而轻量的Library,它可以非常方便地嵌入任意Java应用中,也可以任意方式打包和部署除了Kafka外,无任何外部依赖充分利用Kafka分区机制实现水平扩展和顺序性保证通过可容错的State store实现高效的状态操作(如windowed join和aggregation)
2024-07-28 09:23:52 1188
原创 黑马头条Day10-定时计算热点文章、xxl-job
在分布式架构下,一个服务往往会部署多个实例来运行我们的服务,如果在这种分布式系统环境下运行任务调度,我们称之为分布式任务调度1. 并行任务调度并行任务调度实现靠多线程,如果有大量任务需要调度,此时光靠多线程就会有瓶颈了,因为一台计算机CPU的处理能力是有限的。如果将任务调度程序分布式部署,每个结点还可以部署为集群,这样就可以让多台计算机共同去完成任务调度,我们可以将任务分割为若干个分片,由不同的实例并行执行,来提高任务调度的处理效率。2. 高可用若某一个实例宕机,不影响其他实例来执行任务。
2024-07-27 16:07:57 826
原创 黑马头条Day09-用户行为
黑马头条项目整个项目开发设计Web展示和大数据分析来给用户推荐文章,如何找出哪些文章是热点文章进行针对性的推荐呢?这个时候需要进行大数据分析的准备工作,埋点。所谓“埋点”,是数据采集领域(尤其是用户行为数据采集领域)的术语,指的是针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。比如用户某个icon点击次数、阅读文章的时长、观看适配的时长等等。注意所有的行为数据,都存储到redis中关注需要在heima-leadnews-user微服务中实现。
2024-07-26 11:31:23 1771 9
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人