数据结构与算法
未读203. 移除链表元素给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val == val的节点,并返回新的头节点。
示例 1:
12输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]
示例 2:
12输入:head = [], val = 1输出:[]
示例 3:
12输入:head = [7,7,7,7], val = 7输出:[]
提示:
列表中的节点数目在范围 [0, 104] 内
1 <= Node.val <= 50
0 <= val <= 50
💡 思路:思路一:无虚拟头节点
循环检查头节点是否需要删除,直到头节点的值不等于 **val**。
从头节点开始遍历,删除后续所有值为 val 的节点。思路二:使用虚拟头节点
代码(思路一):
123456789101112131415161718192021222324252627282930impl Solution { pub fn remove_elements(head: ...
数据结构与算法
未读59. 螺旋矩阵 II给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
12输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
12输入:n = 1输出:[[1]]
提示:
1 <= n <= 20
💡 思路:模拟,将填入的过程用代码模拟出来
代码(思路一):
1234567891011121314151617181920212223242526272829303132333435impl Solution { pub fn generate_matrix(n: i32) -> Vec<Vec<i32>> { let mut ans = vec![vec![0; n as usize]; n as usize]; // 存储结果 let mut x = 0; let mut y = 0; let mut fx = 0; ...
数据结构与算法
未读209. 长度最小的子数组给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
示例 1:
123输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组[4,3] 是该条件下的长度最小的子数组。
示例 2:
12输入:target = 4, nums = [1,4,4]输出:1
示例 3:
12输入:target = 11, nums = [1,1,1,1,1,1,1,1]输出:0
提示:
1 <= target <= 109
1 <= nums.length <= 105
1 <= nums[i] <= 104
进阶:
如果你已经实现 O(n) 时间复杂度的解法, 请尝试设计一个 O(n log(n)) 时间复杂度的解法。
💡 思路:
暴力破解 两个循环,不断的寻找符合条件的 ...
数据结构与算法
未读27. 移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:
更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
返回 k。
用户评测:
评测机将使用以下代码测试您的解决方案:
123456789101112int[] nums = [...]; // 输入数组int val = ...; // 要移除的值int[] expectedNums = [...]; // 长度正确的预期答案。 // 它以不等于 val 的值排序。int k = removeElement(nums, val); // 调用你的实现assert k == expectedNums.length;sort(nums, 0, k); // 排序 nums 的前 k 个元素f ...
数据结构与算法
未读704. 二分查找给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例 1:
123输入:nums = [-1,0,3,5,9,12],target = 9输出: 4解释: 9 出现在nums 中并且下标为 4
示例 2:
123输入:nums = [-1,0,3,5,9,12],target = 2输出: -1解释: 2 不存在nums 中因此返回 -1
提示:
你可以假设 nums 中的所有元素是不重复的。
n 将在 [1, 10000]之间。
nums 的每个元素都将在 [-9999, 9999]之间。
💡 思路:有序数组 数组中无重复元素 ⇒ 二分查找当数组中有重复元素,使用二分查找法返回的元素下标可能不是唯一的
写二分法,区间的定义一般为两种,左闭右闭即[left, right],或者左闭右开即[left, right)。
写法一(左闭右闭):
12345678910111213141516impl Solution { ...
问题记录
未读
自动部署报错
解决:
未添加notion文章封面,添加封面即可。
JAVA学习笔记
未读由于每个微服务都有不同的地址或端口,入口不同,相信大家在与前端联调的时候发现了一些问题:
请求不同数据时要访问不同的入口,需要维护多个入口地址,麻烦
前端无法调用nacos,无法实时更新服务列表
单体架构时我们只需要完成一次用户登录、身份校验,就可以在所有业务中获取到用户信息。而微服务拆分后,每个微服务都独立部署,这就存在一些问题:
每个微服务都需要编写登录校验、用户信息获取的功能吗?
当微服务之间调用时,该如何传递用户信息?
我们可以通过网关技术解决上述问题
第一章:网关路由,解决前端请求入口的问题。
第二章:网关鉴权,解决统一登录校验和用户信息获取的问题。
第三章:统一配置管理,解决微服务的配置文件重复和配置热更新问题。
1.网关路由1.1.认识网关什么是网关?
顾明思议,网关就是网络的关口。数据在网络间传输,从一个网络传输到另一网络时就需要经过网关来做数据的路由和转发以及数据安全的校验。
更通俗的来讲,网关就像是以前园区传达室的大爷。
外面的人要想进入园区,必须经过大爷的认可,如果你是不怀好意的人,肯定被直接拦截。
外面的人要传话或送信,要找大爷。大爷帮你带给目标人 ...
JAVA学习笔记
未读在使用Nacos(注册中心)实现服务治理和利用RestTempalte实现服务远程调用时,发现远程调用的代码过于复杂:
具体参考发现并调用服务部分
该调用方式不仅复杂,并且和本地方法调用的形式差异太大。
为了统一编程体验,需要改变远程调用的开发方式,让远程调用像本地方法调用一样简单。
OpenFeign其实远程调用的关键点就在于四个:
请求方式
请求路径
请求参数
返回值类型
OpenFeign可以利用SpringMVC的相关注解来声明上述4个参数,然后基于动态代理帮我们生成远程调用的代码,而无需我们手动再编写。
快速入门引入依赖在消费者服务的pom.xml中引入OpenFeign的依赖和loadBalancer依赖:
12345678910<!--openFeign--><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId>&l ...
JAVA学习笔记
未读以RestTemplate形式发送http请求进行微服务的远程调用存在一些问题。
在微服务中,服务通常不是单实例部署,当提供者服务拥有多个实例时,手动远程调用就会有一些问题:
多实例情况下,消费者服务如何知道每一个提供者服务实例的地址?
http请求要写url地址,消费者服务到底该调用哪个实例?
如果在运行过程中,某一个提供者实例宕机,消费者服务依然在调用该怎么办?
如果并发太高,提供者服务临时多部署了N台实例,消费者服务如何知道新实例的地址?
为了解决以上问题,就必须引入注册中心的概念了。
注册中心原理在微服务远程调用的过程中,包括两个角色:
服务提供者:提供接口供其它微服务访问
服务消费者:调用其它微服务提供的接口
在大型微服务项目中,服务提供者的数量会非常多,为了管理这些服务就引入了注册中心的概念。注册中心、服务提供者、服务消费者三者间关系如下:
流程如下:
服务启动时就会注册自己的服务信息(服务名、IP、端口)到注册中心
消费者可以从注册中心订阅想要的服务,获取服务对应的实例列表(1个服务可能多实例部署)
消费者自己对实例列表负载均衡,挑选一个实例
消费者向该实例发 ...
JAVA学习笔记
未读在单体项目中,service之间存在相互调用的情况。在使用微服务架构时,服务与服务也会出现相互调用的情况。
我们需要将单体项目的本地调用改为微服务的远程调用(RPC,即Remote Produce Call)。
RestTemplateRestTemplate是spring官方提供的API,可以方便的实现Http请求的发送。
org.springframework.web.client public class RestTemplateextends InterceptingHttpAccessorimplements RestOperations
同步客户端执行HTTP请求,在底层HTTP客户端库(如JDK HttpURLConnection、Apache HttpComponents等)上公开一个简单的模板方法API。RestTemplate通过HTTP方法为常见场景提供了模板,此外还提供了支持不太常见情况的通用交换和执行方法。 RestTemplate通常用作共享组件。然而,它的配置不支持并发修改,因此它的配置通常是在启动时准备的。如果需要,您可以在启动时创建多个不同配置的 ...





