自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode.面试题 02.07. 链表相交

假a在链表A上移动,b在链表B上移动,a移动完在B上开始,b移动完再A上开始。最终a移动的距离a + c + x,b移动的距离 b + c + y。可以看到a + c + x = b + c + y,即a + x = b + y ,a移动b距离,b移动a距离a,b指针就会相交,直接返回a,b相交时候a/b指针所指节点的位置。即使a,b没有相交的地方,返回的也是null。给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。

2024-04-05 23:26:48 465

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

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?

2024-04-05 23:18:01 296

原创 leetcode.24. 两两交换链表中的节点

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。创建虚拟头节点,画图,确认步骤。

2024-04-05 23:12:38 207

原创 leetcode.206.反转链表

示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL。题意:反转一个单链表。

2024-04-05 23:06:05 441

原创 leetcode.707. 设计链表

addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。get(index):获取链表中第 index 个节点的值。addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。

2024-04-05 22:58:48 348

原创 leetcode.203. 移除链表元素

虚拟头节点dummy。创建一个虚拟的头节点指向原来的头节点,使得删除头节点的操作和删除其他节点的操作统一。要删除某个节点,需要将遍历指针指向要删除节点的前一个节点才可以。示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]示例 3: 输入:head = [7,7,7,7], val = 7 输出:[]示例 2: 输入:head = [], val = 1 输出:[]题意:删除链表中等于给定值 val 的所有节点。

2024-04-05 22:51:53 305

原创 leetcode.209.长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。输入:s = 7, nums = [2,3,1,2,4,3]解释:子数组 [4,3] 是该条件下的长度最小的子数组。因为是最小的 连续 子数组 ,可以考虑使用滑动窗口。

2024-03-30 23:29:28 359

原创 leetcode.977. 有序数组的平方

由于数组是有序的,平方之后可能变换顺序的只有负数的情况,最大的数一定出现在两边,用双指针,指向两边,新建一个数组,比较两端的元素,从大到小补充新数组迭代元素,直到补充完成。解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]输入:nums = [-4,-1,0,3,10]输入:nums = [-7,-3,2,3,11]输出:[0,1,9,16,100]输出:[4,9,9,49,121]

2024-03-30 23:21:54 204

原创 leetcode:27. 移除元素

使用快慢指针法,快指针用来寻找新数组的元素,慢指针指向新数组的下标,比较快指针元素与目标值,当出现快指针与目标值不相等时,更新慢指针的值,同时向前。给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。因为数组是有序的,所以不能自己删除数组的方式,而且要使用覆盖的方式。元素的顺序可以改变。你不需要考虑数组中超出新长度后面。

2024-03-30 23:18:42 263

原创 leetcode 704. 二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

2024-03-30 23:09:51 316

原创 codeTop:二叉树最大深度

属于二叉树遍历的变形,这里使用DFS的递归方式 最大深度就是 max(左子树最大深度 ,右子树最大深度) + 1, 而计算左/右子树最大深度可以用相同的算法。

2024-03-24 23:18:55 121

原创 codeTop102:二叉树的层序遍历

在已知BFS的方式后,知道每次从队列中取一个节点,就要将这个节点的所有子节点按照顺序放入队列。难点在于怎么确定将同一层的节点放在一个数组里面的输出,也就是输出一个二维数组?

2024-03-24 22:32:20 264

原创 树的遍历方式DFS和BFS

2、上图中一条路已经走到底了(9是叶子节点,再无可遍历的节点),此时就从 9 回退到上一个节点 5,看下节点 5 是否还有除 9 以外的节点,没有继续回退到 2,2 也没有除 5 以外的节点,回退到 1,1 有除 2 以外的节点 3,所以从节点 3 开始进行深度优先遍历,如下。1、我们从根节点 1 开始遍历,它相邻的节点有 2,3,4,先遍历节点 2,再遍历 2 的子节点 5,然后再遍历 5 的子节点 9。1.使用栈实现,对于每个节点,先遍历当前节点,然后吧右节点压栈,再压左节点。

2024-03-24 22:28:04 494

原创 codeTop01:LRU (最近最少使用) 缓存的实现

● void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value;在将某个节点移到链表头的时候,需要知道该节点的前一个节点和后一个节点,使前一个节点的尾指针指向后一个节点的头指针。● int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1。设计一个链表,链表的长度固定,将最近访问到的节点放在链表的头部,刚刚插入的节点也放在链表的头部。在初始化map和缓存容量的同时,新建头尾节点,方便后续的操作。

2024-03-04 23:28:08 411

原创 实践:从库分页参数

最近在写用户账单的功能,需要查询到两年千的消费记录,但是目前消费记录日志表里面记录的是一年内的数据,对于一年前的记录都记录在了归档表。因此想要查询两年前的数据就必须要查询归档表。现在的难点是,如果对归档表里面的记录进行分页操作,接口中传入的分页参数都是针对于主表来说的。假设主表的分页参数是pageNum,pageSize。对于正常的情况,先查主表,当主表中的数据不够的时候再查归档表。所以最终从库的开始偏移量应该是。

2024-02-05 23:45:32 252

原创 实践:微服务版本升级步骤以及maven仓库相关概念

进行微服务开发的时候,上层服务依赖于下层的服务的api,比如适配属于上层服务,用户属于下层服务。

2024-02-05 23:35:35 1558

原创 Spring Cloud Alibaba 介绍与版本映射关系 介绍与版本映射关系

Spring Cloud 本身并不是一个拿来即可用的框架,它是一套微服务规范,这套规范共有两代实现。(子项目):● 第一代实现: Spring Cloud Netflix,● 第二代实现: Spring Cloud Alibaba。2018 年 12 月12 日,Netflix 公司宣布 Spring Cloud Netflix系列大部分组件都进入维护模式,不再添加新特性。

2024-02-01 23:15:34 684 1

原创 实践:读取html文本提取相应内容按照格式导出到excel中

最近在做一个需求,需要将html文本中的内容提取出来,然后导出到excel里面,实现交代情景,html文本中存在许多标签,且很乱,因此需要之间将标签里面的文本提取出来,再进行处理。

2024-02-01 22:54:19 1356 2

原创 sql总结(高阶用法)

最近在做账单统计的需求,需要写较多的sql,也用到了很多以前没有用过的sql用法,通过本篇文章进行总结。

2024-01-28 23:29:02 1758

原创 踩坑记录,double相加位数变多,使用BigDecimal优化

在计算机中,浮点数精度问题是由于二进制浮点数的表示方式导致的,而有些十进制小数无法精确表示为有限的二进制小数。这导致在浮点数运算中可能出现舍入误差,影响计算结果的精确性。在需要高精度计算的情况下,使用BigDecimal类是一种可靠的选择,能够避免浮点数精度问题带来的困扰。

2024-01-27 23:30:25 811

原创 Docker中安装 RabbitMQ

浏览器输入地址:http://ip:15672 即可访问后台管理页面,这里的 ip 为运行 RabbitMQ 所在的服务器的 IP 地址;注意: 由于我在启动容器的时候设置了默认的用户名 (admin) 和密码 (admin),所以需要使用设置的用户名和密码进行登录。–hostname:指定主机名(RabbitMQ 的一个重要注意事项是它根据所谓的 节点名称 存储数据,默认为主机名);默认的用户名和密码都是 guest(前提是没有在容器创建的时候指定用户名密码);rabbitmq:容器使用的镜像名称;

2024-01-24 23:46:24 889

原创 Cookie同源策略

同源策略(Same-OriginPolicy)是浏览器安全机制的一部分,用于限制一个源(域名、协议和端口的组合)的文档或脚本如何与来自另一个源的资源进行交互。这个策略帮助防止潜在的恶意网站在用户浏览器中执行恶意操作。

2024-01-19 22:48:28 576

原创 深入理解Web开发中的Cookie与Session:原理与区别

Cookie是服务器发送到用户浏览器并保存在用户设备上的小型文本文件。它包含有关用户的信息,以便在用户访问同一网站时进行识别和跟踪。Cookie通常由服务器生成,然后通过HTTP协议发送到浏览器。Session是在服务器端存储的一种数据结构,用于跟踪用户的状态。与Cookie不同,Session数据存储在服务器上,而客户端的Cookie仅包含用于标识Session的会话标识符。

2024-01-19 22:43:40 943

原创 CDN的介绍以及加速内容传输原理

内容分发网络(CDN)是一种通过在全球各地部署服务器节点,将内容(如网页、图片、视频、文件等)缓存到靠近用户的边缘节点上,从而加速内容传输和提升用户访问体验的网络服务。现在我将图片等资源上传到了阿里云的对象存储服务(OSS),然后配置了一个CDN域名来加速这些资源的访问。在CDN中,“源站”是指存储着原始内容(例如上传到OSS中的图片等资源)的服务器或存储位置。在您的情况下,OSS存储桶可以被视为您资源的源站,因为它存储了您的原始文件。

2024-01-10 00:50:42 435

原创 实战:使用docker容器化服务与文件挂载-2

接着上文,演示Elasticsearch 和 Kibana 的安装,并讲解文件挂载。

2024-01-08 22:31:35 697 2

原创 实战:使用docker容器化服务

本文介绍使用docker安装mysql和redis,通过这两个的实战,了解一般的安装容器化服务的流程,体会服务容器化的好处。

2024-01-08 22:17:58 393

原创 docker的安装使用以及优势

Docker 是一种容器化平台,可以轻松打包应用程序及其依赖项,使其能够在任何环境中快速、可靠地运行。它利用容器技术,将应用程序和其所需的依赖项封装在一个独立的、标准化的单元中,称为容器。这使得应用程序在不同环境中具备一致性,并且更容易进行部署和扩展。Docker 中每一个容器都是独立运行的,相当于一个独立的 Linux 系统,如果想便捷地修改容器内的文件,我们就需要把容器目录挂载到主机的目录上。容器端口类似,外界无法直接访问容器内部的端口,需要先将容器端口映射到 Linux 主机端口上才能访问。

2024-01-08 22:08:21 1147

原创 Mybatis-plus分页插件PageHelper的两种不同使用方式

最近在写需求的过程中接触到许多的分页,但是对于不同情况下会有不同的分页方法选择,由于目前使用得比较多的是mybatis-plus里面的分页插件,因此通过本文详细了解一下pageHelper的使用。分页最终都是在sql中通过limit完成,

2024-01-03 23:48:26 2289

原创 JDK序列化与JSON序列化

在实际开发中,根据需求和场景的不同,开发人员可以选择适合的序列化方式。JDK序列化适用于Java内部数据传输和持久化存储,而JSON序列化则更适合于跨平台数据交换和前后端数据交互。选择适合的序列化方式是至关重要的,这有助于提高应用程序的效率和可扩展性。

2023-12-30 22:34:38 740

原创 序列化机制以及应用场景

序列化是指将对象转换为字节流的过程。这个字节流包含了对象的数据,以及关于对象类型和数据的元信息。这使得对象可以在网络上传输或者在磁盘上进行持久化存储。反之,反序列化是将字节流转换回对象的过程。Java 中的序列化机制是一个强大的工具,它使得对象在不同的系统之间传输变得更加容易。通过实现 Serializable 接口,我们可以轻松地将对象转换为字节流,并在需要时重新构建对象。然而,在使用序列化时需要注意版本控制、安全性和性能方面的考虑,以确保应用的稳定性和安全性。

2023-12-30 22:22:46 1011

原创 实践:修改正式站表名

现在有一个需求,发现正式站的数据库里面有个表名不合理,需要修改,但是正式站一般不能修改表名,所以现在的做法是新建一个表,将旧表的数据复制到新表,然后将旧表删除。由于正式站的数据还在不断产生,这里需要控制复制的数据的正确性,保证服务和数据的同时上线。由于一般来说插入的数据ID是自增的,所以的要保证复制数据的ID也对得上,所以得先将正式站的数据复制好,才能上代码让新数据插入到新表.

2023-12-27 23:08:12 371

原创 git的常用命令以及在可视化工具中的使用方法

有时候我们在开发过程中需要去解决其他需求的bug,这个时候如果要切换分支就需要要提交当前没写完的代码,容易造成commit次数过多,这里可以使用SourceTree里面的储藏功能,将当前的代码存储起来,等下次切换回该分支的时候可以恢复回来。目前大部分项目开发都有master,dev-master分支,一般不自己在这两个分支开发,都是在自己新建的分支下开发,然后将该分支下commit的内容merge到这两个分支。

2023-12-27 22:58:12 924

原创 RestTemplate工具的介绍

RestTemplate 是 Spring Framework 提供的用于进行 HTTP 请求的客户端库。它封装了 HTTP 请求的细节,使得开发者能够方便地发送请求并处理响应,支持多种 HTTP 请求方法和数据格式。RestTemplate 是一个强大而又灵活的库,用于在 Java 中与 RESTful Web 服务进行交互。它提供了简洁的 API 和多种功能,使得与 HTTP 服务进行通信变得更加简单。

2023-12-27 22:22:36 330

原创 实践:使用gittee授权第三方社交登录

目前在写一个电商项目,可以通过手机号进行注册登录,为了方便用户使用本平台的系统,引入社交登录功能,这里使用的是gittee。

2023-12-25 23:50:02 435

原创 了解OAuth 2.0以及社交登录认证授权流程

目前在写一个电商项目,可以通过手机号进行注册登录,为了方便用户使用本平台的系统,引入社交登录功能,这里使用的是gittee。当谈到网络安全和身份验证时,OAuth 2.0(开放授权 2.0)是一个重要的协议。它是一种用于授权的开放标准,允许用户授权第三方应用程序访问其受保护的资源,而无需直接分享其凭证(如用户名和密码)。OAuth 2.0 在如今的互联网世界中广泛应用,提供了一种安全、灵活和标准化的方式,以确保用户数据和隐私得到保护。

2023-12-25 22:59:17 1017

原创 在 Windows 中关闭指定端口的方法

总之,以上方法提供了在 Windows 中关闭指定端口的常用方式,可根据具体情况和个人偏好选择合适的方法。在关闭端口之前,请确保你有足够的权限,并谨慎操作,以避免影响系统稳定性或其他进程的正常运行。除了命令行工具外,还有一些第三方软件和网络管理工具能够更直观地管理和关闭端口,比如 CurrPorts、TCPView 等。执行上述命令后,将显示占用该端口的进程PID(Process Identifier)。将 <pid_number> 替换为步骤2中记录的进程PID。

2023-12-23 00:09:57 3421

原创 Java 中的 Stream API 常用总结

Java 8 引入了 Stream API,它提供了一种新的抽象,使得在集合数据上进行函数式编程变得更加简单、高效和可维护。下面我们将探讨 Stream API 的几个常用方法和功能:创建流。

2023-12-23 00:02:43 1382

原创 集群与分布式的概念及区别

集群是将多台服务器集中在一起,实现同一业务**;而分布式是将不同的业务分布在不同的地方。在实际应用中,可以结合使用集群和分布式,根据业务需求搭建更为稳健和高效的系统架构。

2023-12-22 00:04:26 1763

原创 java中常用的加密算法总结

消息摘要算法类似于哈希函数,但用于生成固定长度的数据摘要。MD5SHA系列消息摘要算法常用于数据完整性验证和数字签名。

2023-12-20 23:00:19 1053

原创 实战案例:缓存不一致问题的解决(redis+本地缓存caffine)

通过这个实践,还是得从一开始弄明白整个方案设计的可能存在的问题,以及对于redis缓存的键和值进行灵活的使用。

2023-12-20 22:44:55 1271 2

空空如也

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

TA关注的人

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