自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java面试题第二季

Java面试题

2024-03-30 11:03:28 962

原创 大数据技术之 Kafka

大数据技术之 Kafka文章目录大数据技术之 Kafka第 1 章 Kafka 概述1.1 定义1.2 消息队列1.2.1 传统消息队列的应用场景1.2.2 消息队列的两种模式1.3 Kafka 基础架构第 2 章 Kafka 快速入门2.1 安装部署2.1.1 集群规划2.1.2 集群部署2.1.3 集群启停脚本2.2 Kafka 命令行操作2.2.1 主题命令行操作2.2.2 生产者命令行操作2.2.3 消费者命令行操作第 3 章 Kafka 生产者3.1 生产者消息发送流程3.1.1 发送原理3.1

2024-02-19 15:37:27 2174

原创 Zookeeper

Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目。

2024-02-19 15:32:14 1125

原创 Linux之Shell

Shell使用

2024-02-18 20:07:03 950

原创 101.对称二叉树

*进阶:**你可以运用递归和迭代两种方法解决这个问题吗?给你一个二叉树的根节点。, 检查它是否轴对称。

2024-01-31 23:14:14 373

原创 100.相同的树

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。,编写一个函数来检验这两棵树是否相同。给你两棵二叉树的根节点。

2024-01-31 23:12:42 336

原创 94.二叉树的中序遍历

递归算法很简单,你可以通过迭代算法完成吗?给定一个二叉树的根节点。

2024-01-31 23:11:58 367

原创 88.合并两个有序数组

*注意:**最终,合并后数组不应由函数返回,而是存储在数组。**进阶:**你可以设计实现一个时间复杂度为。个元素表示应合并的元素,后。中,使合并后的数组同样按。的算法解决此问题吗?

2024-01-31 23:10:42 326

原创 70.爬楼梯

也就是f(n) 为以上两种情况之和,即f(n) = f(n - 1) + f(n - 2),从该公式可知,本题可采用斐波那契额数列,本题可转化为求斐波那契数列打的第n项,区别仅 在于初始值不同;青蛙的最后一步只有两种情况:跳上1级或跳上2级台阶。你有多少种不同的方法可以爬到楼顶呢?所以本题就转换为求斐波那契额数列第n项的和。

2024-01-24 00:08:58 391

原创 69.x 的平方根

很容易知道,题目要我们返回的整数是有范围的,一般上一个整数的平方根肯定不会超过它自己的一半,但是 0和 1除外,因此我们可以在 1到输入整数除以 2这个范围里查找我们要找的平方根整数。0单独判断一下就好。如果这个整数的平方 严格大于 输入整数,那么这个整数肯定不是我们要找的那个数;输入整数,那么这个整数 可能 是我们要找的那个数(重点理解这句话)。猜的数平方以后小了,可能猜的数就是,也可能不是。猜的数平方以后恰恰好等于输入的数就找到了;输入整数,那么我们就找到了这个整数;猜的数平方以后大了就往小了猜;

2024-01-22 00:25:26 378

原创 66.加一

如果等于9,设置该位置为0,再看十位位置,小于9,直接十位数字+1,直接返回。你可以假设除了整数 0 之外,这个整数不会以零开头。最高位数字存放在数组的首位, 数组中每个元素只存储。数组所表示的非负整数,在该数的基础上加一。如果没在①处返回,则表示数字最终会有进位。从个位数开始看,如果小于9,直接+1返回。如果等于9,设置该位置为0,以此类推。

2024-01-20 23:43:30 352

原创 42.接雨水

jLeftMax >= iLeftMax 这个不是显然吗,j左边的元素包含了i左边的所有元素,如果非要证明一下的话, 那么, iLeftMax = Math.max( height[0], height[1] …height[j - 1], height[j] ) ④, 由反证法可知 若 jLeftMax < iLeftMax , 则 ④式 不成立, 故 jLeftMax >= iLeftMax, 同理可得:iRigthMax >= jRightMax。的高度为 0,而这里最多能盛 2 格水,2-0=2。

2024-01-18 23:41:08 896

原创 38.外观数列

然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。一个数字字符串,首先要将字符串分割为。数量的组,每个组都由连续的最多。

2024-01-17 22:42:45 342

原创 36.有效的数独

遍历每一个位置,判断该位置数字在所在行row中是否出现过,或在所在列col中是否出现过,或者在3*3的小区域bucket中出现过,如果三者其一出现过,直接返回false。如果都没出现过,将该位置所在位置值都分别设置进row、col、bucket中,遍历下一个。上面两个数组什么意思呢?,验证已经填入的数字是否有效即可。

2024-01-16 23:37:19 375

原创 34.在排序数组中查找元素的第一个和最后一个位置

请你找出给定目标值在数组中的开始位置和结束位置。该题考察的是二分法,二分法求左右边界问题。给你一个按照非递减顺序排列的整数数组。你必须设计并实现时间复杂度为。如果数组中不存在目标值。

2024-01-15 22:36:49 427

原创 33.搜索旋转排序数组

我们可以在常规二分查找的时候查看当前 mid 为分割位置分割出来的两个部分 [l, mid] 和 [mid + 1, r] 哪个部分是有序的,并根据有序的那个部分确定我们该如何改变二分查找的上下界,因为我们能够根据有序的那部分判断出 target 在不在这个部分。拿示例来看,[0,1,2,4,5,6,7]分开以后数组变成了 [4, 5, 6,7] 和 [0, 1, 2] 两个部分,其中左边 [4, 5, 6,7] 这个部分的数组是有序的,其他也是如此。,则返回它的下标,否则返回。按升序排列,数组中的值。

2024-01-14 23:13:31 392

原创 23.合并 K 个升序链表

,你add()一个数,PriorityQueue会自动排序,poll()一个数,会返回堆中的最小值。首先:该题使用java的PriorityQueue数据结构(PriorityQueue实质就是。请你将所有链表合并到一个升序链表中,返回合并后的链表。给你一个链表数组,每个链表都已经按升序排列。

2024-01-13 23:36:18 420

原创 28.找出字符串中第一个匹配项的下标

字符串的第一个匹配项的下标(下标从 0 开始)。匹配失败:枚举原串的下一个「发起点」,重新尝试匹配。匹配成功:返回本次匹配的原串「发起点」。

2024-01-11 22:59:56 356

原创 26.删除有序数组中的重复项

思路: 使用一个指针done指向第一元素,从第二个元素依次判断,看是否等于done处的值,如果相等,再判断第三个元素是否相同,不相同,修改done后一个位置处(也就是++done)的值为第三个元素的值,依次类推…最终不重复的总个数为done + 1(因为done初始化为0,是从0开始的)** 删除重复出现的元素,使每个元素。如果所有断言都通过,那么您的题解将被。,返回删除后数组的新长度。

2024-01-10 23:58:05 352

原创 21.合并两个有序链表

当curl和cur2其中一个为null时,判断另一个链表的cur是不是为null,不为null直接pre拼上。当curl和cur2都不为null时判断两指针的大小,小的拼到pre的下一个节点上,并且指针向后移动一位。curl2指向另外一条链表的头结点,pre作为结果的收集,先指向head。新链表是通过拼接给定的两个链表的所有节点组成的。使用两个指针,curl1指向头小的链表(head)的下一个节点。思路:两个链表,如果其中一个为空,返回另一个。判断两个链表头节点谁的小,谁小就做头。

2024-01-09 18:34:23 394

原创 20.有效的括号

栈为空,则表示之前没有出现过该右括号相对用的左括号,直接返回false。栈不为空,弹出栈顶元素,如果和当前右括号不一样,则表示之前没有。遍历完之后查看栈是否为空,不为空也返回。,判断字符串是否有效。

2024-01-09 18:33:13 324

原创 19.删除链表的倒数第 N 个结点

L初始化位置为NULL,R初始位置为Head,之后R先移动n+1位,R移动n+1位置后,L来到Head位置,两指针同时移动,当R值为NULL时,L当前位置就是需要删除节点的前一个位置。此时只需要L.next = L.next.next即可。原链表总个数正好< 要删除节点n的个数。原链表总个数正好=要删除节点n的个数。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。

2024-01-08 20:13:13 391

原创 17.电话号码的字母组合

以上的遍历不难发现这就是树的前序遍历,实际上不管是前序遍历,还是中序遍历,亦或是后序遍历,都属于深度优先遍历。同理从 10 开始往上回溯到 6, 6 没有除 10 以外的子节点,再往上回溯,发现 3 有除 6 以外的子点 7,所以此时会遍历 7。我们从根节点 1 开始遍历,它相邻的节点有 2,3,4,先遍历节点 2,再遍历 2 的子节点 5,然后再遍历 5 的子节点 9。从 7 往上回溯到 3, 1,发现 1 还有节点 4 未遍历,所以此时沿着 4, 8 进行遍历,这样就遍历完成了。

2024-01-07 12:39:36 402 1

原创 15.三数之和

首先对数组进行排序,排序后固定一个数 nums[i],再使用左右指针指向 nums[i]后面的两端,数字分别为 nums[L] 和 nnums[R],计算三个数的和 sum 判断是否满足为 0,满足则添加进结果集。如果 nums[i] == nums[i−1],则说明该数字重复,会导致结果重复,所以应该跳过。当 sum == 0 时,nums[L] ==[L+1] 则会导致结果重复,应该跳过,L++当 sum == 0时,nums == nums[R−1]则会导致结果重复,应该跳过,R−−。

2024-01-06 14:39:38 339 1

原创 14.最长公共前缀

拿数组中第一个字符串"flower"转为字符数组,然后去和字符数组"flow"比较,从头比较两个字符数组到哪个位置不重合,并用变量index记录,与min取最小值(min用来统计最小下标位置,初始值为Integer.MAX_VALUE)然后接着拿flower字符数组去和字符数组"flight",从头比较两个字符数组到哪个位置不重合,更新index与min取最小值。最后取得的最小值就是最大公共前缀的位置的后一个位置,所有最后用strs[0].substring(0,min);

2024-01-06 14:38:30 319 1

原创 JVM性能调优工具

内存泄露是指:内存泄漏也称作"存储渗漏",用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元,直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏。也就是说内存刚开始不会出现什么问题,但是过一段时间就会频繁的进行GC,应用程序不会有什么响应,造成服务假死的情况内存溢出是指程序员在申请内存时,没有足够的内存空间供其实用。

2024-01-05 16:02:01 862 1

原创 13.罗马数字转整数

可以保留当前位的值,当遍历到下一位的时,对比保留值与遍历位的大小关系,再确定保留值为加还是减。最后一位做加法即可。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。也可以往后看多一位,对比当前位与后一位的大小关系,从而确定当前位是加还是减法。通常情况下,罗马数字中小的数字在大的数字的右边。也就是说把一个小值放在大值的左边,就是做减法,否则为加法。当小值在大值的左边,则减小值,如 IV=5-1=4;当小值在大值的右边,则加小值,如 VI=5+1=6;,即为两个并列的 1。

2024-01-05 12:48:59 333 1

原创 12.整数转罗马数字

数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做。这些数字对用的罗马数字列出来,用StringBuilder拼接每个位置。根据上面提示可知,该整数不会超过4000。,即为两个并列的 1。给你一个整数,将其转为罗马数字。例如, 罗马数字 2 写做。

2024-01-05 12:48:24 345 1

原创 11.盛最多水的容器

解题思路:两指针i , j ,指向的水槽板高度分别为 h[i] , h[j] ,此状态下水槽面积为 S(i,j)。,水槽的短板 min(h[i],h[j])不变或变小,因此下个水槽的面积。,水槽的短板 min(h[i],h[j])可能变大,因此下个水槽的面积。首先弄清楚一点,有一个木桶效应也可称为短板效应,是讲。因此,在代码中想要求得最大值,选择移动短板。轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。返回容器可以储存的最大水量。

2024-01-05 12:47:45 378 1

原创 7.整数反转

再来看最小值,-2的31次方的原码表示为10000000 00000000 00000000 00000000,此时最高位的数字既代表符号,也代表数值。res == m && x % 10 < n : 当在反转的过程中res == -214748364,但是x % 10 < 8 此时再反转肯定也会溢出int接受范围。因为int是带符号类型,所以最高位为符号位,于是最大表示的正数是:01111111 11111111 11111111 11111111,也就是2的31次方减1。中的数字部分反转后的结果。

2024-01-04 13:46:51 355 1

原创 5.最长回文子串

再以0和1(0 + 1)位置为起点,向两边扩,找到最大回文数;再以1和2(1 + 1)位置为起点,向两边扩,找到最大回文数;如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。以0位置为起点,向两边扩,找到最大回文字符串;以1位置为起点,向两边扩,找到最大回文字符串;思路:从头遍历字符串。记录最长的最大回文数。记录最长的最大回文数。

2024-01-03 12:12:15 346 1

原创 3.无重复字符的最长子串

思路:遍历字符串每个下标位置i,以i为结尾位置往左推,得到每个位置最长无重复子串,然后得到最大值即可。看代码思路不清晰,画个图就一目了然了。,请你找出其中不含有重复字符的。影响最长子串有两个关键位置。

2024-01-03 12:11:13 312 1

原创 2.两数相加

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。的链表,表示两个非负的整数。它们每位数字都是按照。请你将两个数相加,并以相同形式返回一个表示和的链表。的方式存储的,并且每个节点只能存储。修改last = curL;

2024-01-03 12:09:56 346 1

原创 1.两数之和

思路:在Map中查找某个key的时间复杂度是O(1),挨个遍历整个数组的同时,判断Map中是否有满足条件的,如果没有,则加入到Map缓存中,整个过程时间复杂度为O(n)整数,并返回它们的数组下标。,请你在该数组中找出。

2024-01-03 11:39:20 337 1

原创 01 Linux下MySQL的安装与使用

安装并启动好两台虚拟机:CentOS 7掌握克隆虚拟机的操作mac地址开机前修改mac地址(注意:如果是动态生成IP地址,请在启动前先启动被克隆的虚拟机,以保证原来虚拟机的ip不会变,否则原来虚拟机ip会变,克隆后的虚拟机ip是原来的虚拟机ip)主机名ip地址UUID安装有Xshell和Xftp等访问CentOS系统的工具CentOS6和CentOS7在MySQL的使用中的区别。

2023-12-20 20:10:17 469 1

原创 使用XXL-JOB分布式任务调度平台

Timerjava自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少jdk自带的一个类;是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多。

2023-12-09 17:10:58 41 1

原创 RabbitMQ

比如使用的是topic主题交换机,设置消息路由键 atguigu.news,如下图交换机路由键,四个队列都能匹配。默认发送消息使用的Java序列化,如果想要使用json序列化,自定义配置类。4.如何创建Exchange,Queue,Binding并发送消息。1.引入 spring-boot-starter-amqp。七、RabbitMQ延时队列(实现定时任务)六、RabbitMQ消息确认机制-可靠抵达。四、RabbitMQ运行机制。可靠抵达-Ack消息确认机制。二、RabbitMQ概念。

2023-11-21 14:09:30 44

原创 MySQL CASE语句

MySQL CASE语句如何使用MySQL 中CASE语句在存储的程序中构造复杂的条件语句。除了IF语句],MySQL提供了一个替代的条件语句CASE。 MySQL CASE语句使代码更加可读和高效。语法情况1:类似于switch,一般用于实现等值判断。语法: case 变量或表达式 when 值1 then 语句1; when 值2 then 语句2; ... else 语句n; end 情况2:类似于多重if语句,一般用于实现区间判断。

2022-05-17 18:34:01 1975

原创 常见几种排序总结

常见几种排序选择排序过程: arr[0~N-1]范围上,找到最小值所在的位置,然后把最小值交换到0位置。 arr[1~N-1]范围上,找到最小值所在的位置,然后把最小值交换到1位置。 arr[2~N-1]范围上,找到最小值所在的位置,然后把最小值交换到2位置。 … arr[N-1~N-1]范围上,找到最小值位置,然后把最小值交换到N-1位置。估算: 很明显,如果arr长度为N,每一步常数操作的数量,如等差数列一般 所以,总的常数操作数量 = a*(N^2) + b*N + c (a、b、c都是常数)

2022-03-25 00:37:40 140

原创 Java线程池

线程池的创建和七个参数

2022-03-10 14:07:44 59

空空如也

空空如也

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

TA关注的人

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