当前位置: 首页 > news >正文

【LeetCode刷题笔记】双指针

剑指 Offer 21.调整数组顺序使奇数位于偶数前面

解题思路:
  • 对撞指针 从左边不停的找第一个偶数,从右边不停的找第一个奇数 ,找到后 交换 两者位置

本题与【905. 按奇偶排序数组】几乎雷同。

剑指 Offer 57.和为s的两个数字

本题与【167. 两数之和 II - 输入有序数组】相同

解题思路:
  • 1) 对撞指针 ,计算  sum(L + R)  的和,判断与  target  的关系,来决定移动左指针还是右指针
  • 2) 二分查找 ,先固定一个  nums[i] ,然后到剩余数组 [ i+1...end ] 中二分查找  target = s - nums[i]  的值
  • 注意:题目数组是 递增排序 好的,所以才能用上面两种方法,并且只要找到一个解即可返回。

 

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

解题思路:
  • 1) 快慢指针 slow 指向 已处理区域 最后一个位置 fast 指向 未处理区域 第一个位置 初始 slow = 0, fast = 1,不断向后移动 fast
  • fast 的值跟 slow 的值 不等 ,就让 slow++ ,把 fast 处的值放到 slow 位置,最后返回 slow + 1  作为 数组长度 。 
  • 注意:本题能这样做的原因是因为题目的数组是 升序排列 的。

 

这种算法是不断比较未处理区域的值和已处理区域的最后一个值,由于数组是升序排列的,所以只需要跳过那些与已处理区域最后一个相同的值即可。然后只将不同的值往前面放。 

 

解题思路: 
  • 2) 快慢指针 slow 指向 已处理区域 下一个位置 fast 指向 未处理区域 第一个位置 初始 slow = 1, fast = 1 不断向后移动 fast
  • fast 的值跟 fast-1 不同时,就把 fast 处的值放到 slow 位置,然后 slow++ 最后返回 slow 作为 数组长度 。 
  • 注意:本题能这样做的原因是因为题目的数组是 升序排列 的。

 

这种算法是不断比较未处理区域的当前值和上一个值,由于数组是升序排列的,所以只需要跳过那些与上一个相同的值即可。然后只将不同的值往前面放。 

问题:为什么 slow fast 要从 1 位置开始呢?

这是因为 slow 的含义是已处理区域的下一个位置,初始时,前面预留的 0 位置表示该位置默认是已经被处理的区域,即 1 个数字本身是不重复的,所以 slow 从 0 位置的下一个位置开始。而 1 位置表示未处理的第一个位置,所以 fast 1 位置开始。在方法 1 中 slow 从 开始的含义也是一样的,表示此时 0 位置是已处理的最后一个位置(同时也是已处理的第一个位置)。

80. 删除有序数组中的重复项 II

 

解题思路:
  • 类似26, slow 指向 已处理区间 下一个位置,   slow 前面 预留两个空位 ,  slow、fast 从第 3 个元素开始,即初始 slow = 2, fast = 2 ,   不断向后移动 fast
  • fast slow - 2 位置的元素不同,就把 fast 处的值放到 slow 的位置,然后 slow++ 最后返回 slow 作为数组长度。
  • 注意:本题能这样做的原因是因为题目的数组是 有序排列 的。

 

 

这里之所以前面预留2个空位,是因为题目要求重复元素只出现2次,因此如果前两个元素重复也没有关系,如果前两个元素不同,更没有问题。

还有一个问题是为什么跟 fast 比较的是 slow - 2 位置的数呢?

如果 fast slow - 2 相同,而 slow - 2 又可能与 slow - 1 相同,那么就有可能出现三个相同的数: nums[fast] == nums[slow - 2] == nums[slow - 1],此时重复元素出现次数 > 2 了,因此 fast 必须跟 slow - 2 保持不同,这样重复元素最多出现 2 次。

那如果 fast slow - 1 比较不同时就赋值,这样行不行呢?如下图所示,这样会完美的错过后面所有重复数字的答案(重复的2和3只保留了一个)

 

287. 寻找重复数

解题思路:
  • 1)快慢指针,存在重复数字的数组会形成环,类似141环形链表, 环的入口处即重复元素
  • 将题目给的数组当作 一个数组形式的链表 来看待,数组的下标就是指向元素的指针,把数组的元素也看作指针。
  • 例如 0 是指针,指向 nums[0] ,而 nums[0] 也是指针,指向 nums[nums[0]]
  • slow fast 初始为 0 ,然后 slow 走一步, fast 走两步,如果 slow 追上 fast 就退出循环, 此时让 slow = 0 回到开头,然后 slow fast 同步走,如果 slow 追上 fast , 则相遇点就是重复数字。 

看一下为什么题目给定的存在重复数字的数组会形成环: 

如上图所示:我们使用函数 f(x) = nums[x] 来建立一个数列:x,nums[x],nums[nums[x]], nums[nums[nums[x]]]...... 即每一个数的位置是前一个数的值,如果我们从 x=nums[0] 开始,又因为 nums 里有一个重复的数字,这必将形成一个带有循环的数列。

更复杂的例子/更大的圈:

我们不难看出,进入循环的点就是我们要找的重复的数字(即上面两个例子里的 1 和 9),问题是如何找到它?答案就是使用快慢指针

解题思路: 
  • 2) 二分查找 在  [1, n] 数字区间上二分, 对于 mid = (L + R) / 2 ,重复的数要么落在 [L, mid]  要么落在 [mid + 1, R]
  • 每次二分后统计数组中 ≤ mid  的元素的个数 count ,然后根据 count 和  mid  的大小关系来决定接下来到哪边去二分:
  • ① 如果 count ≤ mid ,说明左边没有重复,收缩左边界 L = mid + 1 ,到右半边区间 [mid + 1, R] 查找;
  • ② 如果 count  >  mid ,说明 [L, mid] 内出现了重复元素, 收缩 R mid - 1 ,到左半边区间 [L, mid - 1] 继续查找,但是此时需要用变量 res 记录一下移出的 mid 值,因为它可能是潜在的重复元素。最后返回 res 即可。

为什么二分时要统计 ≤ mid 的元素个数呢?

简单的来说就是一个萝卜一个坑,mid 及左侧最多有 mid 个坑(如果包含1~n连续不重复的话),如果出现了重复元素,就可能超过 mid 个坑。 

我们考虑一个 cnt 数组,cnt[i] 表示 nums 中小于等于 i 的元素个数,如下图:

假设nums数组无重复的情况下,显然 cnt[i] ≤ nums[i],也就是说 ≤ mid 的数量不会超过mid,例如上图中 ≤ 3 的数量最多就是 3 个,但是如果数组中有 1 个重复元素的情况下,就不一定能满足这个条件了:

显然这是因为出现了重复数字导致的。 

虽然题目数组是无序的,但是cnt数组是逐步增大且具有单调性的,此题的二分思想就是利用cnt数组的特性来判断区间划分的。

解题思路: 
  • 3) 位运算 统计 nums 中所有人的二进制在第 i 位上 1 的个数和记为 x , 统计 [1-n] 中所有人的二进制在 i 位上 1 个数和记为  y ,如果 x > y , 则说明重复的数在第 i 位上二进制是 1 ,因此才会多出来  个数。我们只需将 32 位二进制位中 1 的个数多出的那一位的答案二进制位设置为  即可。

 

这个代码如果想更极致一点,可以先找出最大数 n 中最高位的 1 的位置,循环只需要处理到这一位即可,因为再高的就全是 0 了。参考代码:

27. 移除元素

 

解题思路:
  • 1) 快慢指针 ,快慢指针从 0 开始,不断移动 快指针 ,把 快指针 遇到的 不等于 val 的值移动到 慢指针 的位置。

这个做法可以看到是利用原始数组本身来作为结果数组接收答案。 

解题思路: 

  • 2) 对撞指针 ,当  L 指针 遇到要删除的元素  val  时,使用数组最后一个元素来覆盖这个元素,并且让 R--
  • 覆盖后的  处新数字有可能仍是要删除的元素,没有关系,在下一次 while 循环会接着判断处理,但是至少,我们从数组的最后删除了一个元素。
  •   L 指针 遇到的元素不是  val  时,让 L++
  • while  循环条件是 L<=R ,因为每个数都要处理,最后返回 作为数组长度。

283. 移动零

解题思路:
  • 1) 快慢指针 ,快慢指针从 0 开始,不断移动快指针,当 快指针 遇到的 非 0 数字 时, 交换快慢指针的元素即可。
  • 2)   快慢指针 ,快慢指针从 0 开始,不断移动快指针, 快指针 遇到的 非 0 数字 时, 直接覆盖到前面 slow 位置,然后 slow++ 。全部结束后,再把 slow 之后的位置都置为  0
  • 3) 快慢指针 ,针对方法 2)优化: fast 遇到 非0 值覆盖到 slow 后,如果 fast 不等于 slow 就将 fast 直接原地置 0 ,然后再 slow++

 

 

202. 快乐数

解题思路:
  • 1) 哈希检测环 ,使用 HashSet 来判断重复,每次 while 循环判断只要  n != 1  并且也没包含在 set 中,就将  n  并加入 set 集合中,然后将 n 更新为 n 的各位数的平方和。
  • 结束循环后返回 n 是否等于 1 即可(跳出循环只有两种情况要么 n 变成 1 要么 set 集合中出现了重复即有环)。
  • 求  num  各位的平方和的技巧:每次  num % 10  取出个位数,然后计算平方累加到结果中, num / 10  去掉个位数,直到  num  变成  停止。 

虽然这道题在 LeetCode 上标记为 [简单] 难度,但是我觉得有一种情况是比较难观察出来的,那就是题目中说的除了最终得到 1 以外,最终也可以变成无限循环,这里的无限循环有可能是最终又遇到了重复的数字,也有可能是变得越来越大直到无穷大一直进行下去。也就是说可能会有两种情况,而在很多网课中讲解的这里仅仅只是默认按照重复数字套哈希表的解法。

下面看一下力扣官方的解释:

我们可以先举几个例子。我们从7开始。则下一个数字是49(因为72=49),然后下一个数字是97(因为42+92=97)。我们可以不断重复该的过程,直到我们得到1。因为我们得到了1,我们知道7是一个快乐数,函数应该返回 true

 

再举一个例子,让我们从 116  开始。通过反复通过平方和计算下一个数字,我们最终得到 58 ,再继续计算之后,我们又回到 58。由于我们回到了一个已经计算过的数字,可以知道有一个循环,因此不可能达到 1。所以对于 116,函数应该返回 false。 

 

根据我们的探索,我们猜测会有以下三种可能:

    1.最终会得到 1。

    2.最终会进入循环。

    3.值会越来越大,最后接近无穷大。

第三个情况比较难以检测和处理。我们怎么知道它会继续变大,而不是最终得到 1 呢?我们可以仔细想一想,每一位数的最大数字的下一位数是多少。

 

对于 3 位数的数字,它不可能大于 243。这意味着它要么被困在 243 以下的循环内,要么跌到 1。4 位或 4 位以上的数字在每一步都会丢失一位,直到降到 3 位为止。所以我们知道,最坏的情况下,算法可能会在 243 以下的所有数字上循环,然后回到它已经到过的一个循环或者回到 1。但它不会无限期地进行下去,所以我们排除第三种选择。

即使在代码中你不需要处理第三种情况,你仍然需要理解为什么它永远不会发生,这样你就可以证明为什么你不需要处理它。

解题思路: 
  • 2) 快慢指针检测环 ,慢指针和快指针初始值从 n 开始,在每次循环中,慢指针计算更新 1 次( slow 更新为其各位平方和),而快指针计算更新 2 fast 更新为其各位平方和) ,直到出现 快指针 变为 1 ,或者 快指针 慢指针 相遇,就退出循环。
  • 最后返回 快指针是否等于1 即可(如果是因为快慢指针相等退出循环的,说明存在环)。
  • 注意: 快指针 会先遇到 1

注意上面代码中,最好使用 do-while 循环,不然可能上来就退出循环了,因为 slow fast 都初始化为 n  ,当然由于前面已经分析了要么最终会变成1,要么会出现环(重复),所以你也可以直接写一个 while(true) 死循环来检测,在循环体里面写判断退出的条件。

快慢指针是用来检测有环问题的经典做法。

881. 救生艇

解题思路:
  • 1) 排序 + 对撞指针 ,要求船数最少,那就应该尽可能多的坐满  人一船,剩下的人一人坐一船,因此 先排序 ,然后对撞指针从两头往中间挑选两个人的体重之和 <=limit 的坐一船,如果两个人的体重超过 limit ,只能较重的那个人自己坐一船
  • 循环结束时,如果  L == R ,则剩余的 1 人自己坐一船。 (注意退出循环也有可能是因为 L > R,所以最后返回时需要判断一下)
解题思路: 
  • 2) 排序 + 中心扩展, 也是需要 先排序 ,然后从 右往左 找到第一个 <= limit / 2 的位置,然后从该位置开始设双指针往 左右 同时 扩展 寻找能够两个人坐一船的,剩下落单的人只能一人一船。
  • 特判1:如果每一个人的体重都超过了限重的一半( > limit / 2 ),那么只能一人坐一船,直接返回 people.length ,不用再继续了。因为此时任意两人体重之和都会超过 limit
  • 特判2:如果最重的人体重 <= limit / 2 ,则此时任意两人组合体重和都不会超过 limit ,所以此时可直接安排 2 人坐一船,直接返回 (people.length + 1) / 2

 

中心扩展法计算稍显麻烦,相对来说,本题还是方法 1)对撞指针更加容易理解,代码也更加简单。

 

相关文章:

【LeetCode刷题笔记】双指针

剑指 Offer 21.调整数组顺序使奇数位于偶数前面 解题思路&#xff1a; 对撞指针 &#xff0c; 从左边不停的找第一个偶数&#xff0c;从右边不停的找第一个奇数 &#xff0c;找到后 交换 两者位置 本题与【905. 按奇偶排序数组】几乎雷同。 剑指 Offer 57.和为s的两个数字 本题…...

互联网Java工程师面试题·Memcached 篇·第二弹

目录 10、memcached 如何实现冗余机制&#xff1f; 11、memcached 如何处理容错的&#xff1f; 12、如何将 memcached 中 item 批量导入导出&#xff1f; 13、如果缓存数据在导出导入之间过期了&#xff0c;您又怎么处理这些数据呢&#xff1f; 14、memcached 是如何做身份…...

特斯拉被称为自动驾驶领域的苹果

特斯拉的自动驾驶技术无疑是居于世界上领先地位的,有人形容特斯拉是自动驾驶汽车领域的苹果。特斯拉发布的Tesla Vision系统只配备了摄像头,不依靠雷达。 这并不是特斯拉唯一和其它对手不同的地方,他们的整个战略都是基于车队和销售产品,而其大多数竞争对手则销售自…...

stm32之HAL库操作PAJ75620

一、模块简介 手势模块PAJ7620主要利用IIC或SPI协议来实现数据的传输&#xff0c;本实验用的模块是以IIC来进行信息传输。支持电压从2.8v到3.6v, 正常可以选择3.3v。检测的距离从5到15cm, 可以检测9种手势&#xff0c;包括 右&#xff1a;编码为 0x01左&#xff1a;编码为 0x0…...

医学影像归档与通讯系统(PACS)系统源码 PACS三维图像后处理技术

医学影像归档与通讯系统&#xff08;PACS&#xff09;系统源码 PACS三维图像处理 医学影像归档与通讯系统&#xff08;PACS&#xff09;系统&#xff0c;是一套适用于从单一影像设备到放射科室、到全院级别等各种应用规模的医学影像归档与通讯系统。PACS集患者登记、图像采集、…...

web漏洞-PHP反序列化

目录 PHP反序列化序列化反序列化原理涉及技术利用危害CTF靶场 PHP反序列化 序列化 将对象转换成字符串 反序列化 相反&#xff0c;将字符串转换成对象。 数据格式的转换对象的序列化有利于对象的保存和传输&#xff0c;也可以让多个文件共享对象。 原理 未对用户输入的序列化字…...

Redis-分布式锁

分布式锁相关内容 超卖问题切入可以使用互斥锁给先获取到锁的线程加锁吗&#xff1f;使用redis分布式锁解决超卖问题setnx命令实现分布式锁为什么需要设置过期时间&#xff1f;Redis实现分布式锁如何合理控制锁的有效时长 redisson实现分布式锁 超卖问题切入 我们先来看一个项目…...

什么时候使用继承,好莱坞原则(设计模式与开发实践 P11+)

文章目录 好莱坞原则真的需要继承吗&#xff1f; 好莱坞原则 如果你熟悉继承方法、乃至模板方法模式后&#xff0c;就可以了解一个设计原则 好莱坞原则 新人演员把简历发给好莱坞&#xff0c;许久之后没有回应不耐烦打电话给好莱坞&#xff0c;只收到回应&#xff1a;不要来找…...

蓝桥等考Python组别十四级001

第一部分&#xff1a;选择题 1、Python L14 &#xff08;15分&#xff09; 运行下面程序&#xff0c;输出的结果是&#xff08; &#xff09;。 d {A: 501, B: 602, C: 703, D: 804} print(d[B]) 501602703804 正确答案&#xff1a;B 2、Python L14 &#xff08;15分…...

TI单芯片毫米波雷达代码走读(二十七)—— 角度维(3D)处理之通道间幅相一致性补偿

TI单芯片毫米波雷达1642代码走读(〇)——总纲 书接上回,我们知晓了3D处理的主要流程,相信大家都已理解基本的原理。在正式进行数据分析之前还有一步关键的步骤需要说明,即通道间的幅相一致性补偿问题。 细心的朋友可能注意到,在3D处理的的原码中有两个函数我一直没有讲:…...

数据结构 2.2 单循环链表

2.单循环链表 data|next——>data|next——>data|next——>头节点 1.初始化链表 2.增加节点&#xff08;头插法、尾插法&#xff09; 3.删除节点 4.遍历链表 定义一个结构体&#xff0c;存放data域和指针域&#xff1a; typedef struct Node {//定义一个结构体&…...

矩阵距离——多源BFS

给定一个 N 行 M 列的 01 矩阵 A&#xff0c;A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为&#xff1a; dist(A[i][j],A[k][l])|i−k||j−l| 输出一个 N 行 M 列的整数矩阵 B&#xff0c;其中&#xff1a;B[i][j]min1≤x≤N,1≤y≤M,A[x][y]1dist(A[i][j],A[x][y]) 输入格式 第…...

关于在 Notion 中使用 Markdown 语法

关于在 Notion 中使用 Markdown 语法 习惯使用的 Markdown 的伙伴们应该知道&#xff0c;当需要加粗字体时&#xff0c;会首先输入 ** **&#xff0c;然后在里面填内容。 但是在 Notion 中&#xff0c;这个就不太行了。它所定义的规则是从前往后&#xff0c;也就是先键入**&…...

sigmoid和softmax函数有什么区别

Sigmoid函数和Softmax函数都是常用的激活函数&#xff0c;但它们的主要区别在于应用场景和输出结果的性质。 Sigmoid函数&#xff08;也称为 Logistic函数&#xff09;&#xff1a; Sigmoid函数将输入值映射到0到1之间的连续实数范围&#xff0c;通常用于二元分类问题。 Si…...

第五章:最新版零基础学习 PYTHON 教程—Python 字符串操作指南(第七节 - Python 中使用 % 进行字符串格式化)

在Python中,可以通过不同的方法来实现对字符串所需的格式化。他们之中有一些是; 1) 使用 % 2) 使用 {} 3)使用模板字符串本文讨论使用 % 进行格式化。使用 % 的格式类似于 C 编程语言中的“printf”。%d – 整数 %f – 浮点数 %s – 字符串 %x – 十六进制 %o – 八进制 下面的…...

【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)

一&#xff0c;VMware下载地址&#xff1a; 百度网盘链接链接&#xff1a;百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固&#xff0c;支持教育网加速&#xff0c;支持手机端。注册使用百度网盘即可享受免费存储空间https:/…...

Eclipse MAT解析headp dump,total size小于file size

1. 问题描述 使用Eclipse MAT分析20GB的heap dump文件 最后解析出来dump size只有1GB 2. 原因&#xff1a;heap dump中包含许多unreachable objects Eclipse MAT的官方文档&#xff0c;《Basic Tutorial》章节&#xff0c;有对上图的Overview page做介绍 针对total size小…...

【数据挖掘】2022年 Quiz 1-3 整理 带答案

目录 Quiz 1Quiz 2Quiz 3Quiz 1 Problem 1 (50%). Consider the set of training data shown below. Here, A, B, C C C are attributes, and D D...

AcWing 288. 休息时间,《算法竞赛进阶指南》,环形与后效性处理

288. 休息时间 - AcWing题库 在某个星球上&#xff0c;一天由 N 个小时构成&#xff0c;我们称 0 点到 1 点为第 1 个小时、1 点到 2 点为第 2 个小时&#xff0c;以此类推。 在第 i 个小时睡觉能够恢复 Ui 点体力。 在这个星球上住着一头牛&#xff0c;它每天要休息 B 个小…...

一文掌握Linux系统信息查看命令(CPU、内存、进程、网口、磁盘、硬件)

引言 大家好&#xff0c;欢迎来到我的技术博客&#xff01;如果你是一名Linux系统管理员、开发者或者热衷于学习Linux系统的用户&#xff0c;那么你一定需要掌握查看系统信息的命令。在这篇博客中&#xff0c;我将为你介绍一些常用的Linux命令&#xff0c;帮助你快速了解和监控…...

UE5.1编辑器拓展【三、脚本化资产行为,删除无引用资产】

目录 需要考虑的问题 重定向的修复函数 代码&#xff1a; 删除无引用资产 代码 需要添加的头文件和模块 在我们删除资产的时候&#xff0c;会发现&#xff0c;有些资产在删除的时候会出现有被什么什么引用&#xff0c;还有的是没有被引用。 而我们如果直接选择一片去进行…...

防抖和节流的实现

防抖和节流的实现 什么是防抖和节流实现防抖和节流防抖节流 防抖和节流的应用场景 什么是防抖和节流 防抖和节流是前端开发中常用的两种性能优化技术。 为什么需要防抖和节流呢&#xff1f; 两者目的都是为了防止某个时间段内操作频繁触发&#xff0c;造成性能消耗。 防抖&…...

alsa pcm接口之阻塞和非阻塞打开和异步通知模式

阻塞和非阻塞打开(Blocked and non-blocked open) 当设备打开在一个阻塞或非阻塞模式,ALSA pcm api接口使用不同的行为&#xff0c;模式可以指定通过mode参数通过snd_pcm_open函数,blocked mode阻塞模式是默认打开方式,在这个模式下,行为表现为当资源被其他应用程序使用,应该阻…...

Python Random模块详解

Random模块详解 随机数 random模块 randint(a, b) 返回[a, b]之间的整数randrange ([start,] stop [,step]) 从指定范围内&#xff0c;按指定基数递增的集合中获取一个随机数&#xff0c;基数 缺省值为1。random.randrange(1,7,2)choice(seq) 从非空序列的元素中随机挑选一个…...

Vue3 模糊搜索筛选

Vue3 模糊搜索筛选 环境&#xff1a; vue3 tselement plus 目标&#xff1a; 输入框输入内容&#xff0c;对展示的列表进行模糊搜索筛选匹配的内容。 代码如下&#xff1a; <div style"margin-top: 50px"><el-input v-model"valueInput" size&…...

【MVC】C# MVC基础知识点、原理以及容器和管道

给自己一个目标&#xff0c;然后坚持一段时间&#xff0c;总会有收获和感悟&#xff01; 国庆假期马上结束&#xff0c;闲暇时间&#xff0c;重温一遍C#关于MVC的技术&#xff0c;控制器、视图、模型&#xff0c;知识点和原理&#xff0c;小伙伴们还记得吗 目录 一、MVC知识点1…...

【kubernetes】基于prometheus的监控

目录 1 监控解决方案2 prometheus2.1 容器监控2.2 节点监控2.3 资源对象监控2.4 metrics--server 3 prometheus-operator vs kube-prometheus vs helm3.1 prometheus-operator3.2 kube-prometheus3.3 helm 参考文档 1 监控解决方案 从实现方案来说&#xff0c;监控分为3个部分…...

Gmail 将停止支持基本 HTML 视图

根据 Google 支持文档的更新内容&#xff0c;Gmail 将从明年 1 月起停止支持基本 HTML 视图。 ▲ Gmai 基本 HTML 视图界面 目前网页版 Gmail 提供两个界面&#xff1a;基本 HTML 视图和标准视图。停止支持基本 HTML 视图后&#xff0c;当前打开经典模式的基本 HTML 视图模式 …...

电影大师杂记

假期集中刷了好多书&#xff0c;游戏和电影&#xff0c;在虚拟世界里猛烈的各种闲逛&#xff0c;cyberpunk 2077到blade runner&#xff0c;到异形&#xff0c;到终结者&#xff0c;到星球大战&环太平洋&#xff0c;到工业光魔&#xff0c;还有各种编程的书。。。 hmmm&…...

聊聊分布式架构——RPC通信原理

目录 RPC通信的基本原理 RPC结构 手撸简陋版RPC 知识点梳理 1.Socket套接字通信机制 2.通信过程的序列化与反序列化 3.动态代理 4.反射 思维流程梳理 码起来 服务端时序图 服务端—Api与Provider模块 客户端时序图 RPC通信的基本原理 RPC&#xff08;Remote Proc…...

客户在我这做的网站被罚/沈阳seo优化排名公司

1.关键字ABSTRACT abstract关键字是用于创建抽象类或抽象成员方法的修饰符&#xff0c;当用于修饰成员方法的时候&#xff0c;成员方法是没有方法体的&#xff0c;只有其方法的声明部分。格式如下&#xff1a;abstractclassTest { publicabstractvoidshow(); publicvoi…...

如何做影视网站的标题/站长之家权重

目录1、SQL解析2、SQL路由3、SQL改写4、SQL执行5、结果归并1、SQL解析 当Sharding-JDBC接受到一条SQL语句时&#xff0c;会陆续执行 SQL解析 > 查询优化 > SQL路由 > SQL改写 > SQL执行 >结果归并&#xff0c;最终返回执行结果。 SQL解析过程分为词法解析和语…...

石家庄制作网站推广/seo站长综合查询

文章目录1. 选型原因2.Spring Secutity核心内容2.1 Spring Secutity中的用户信息2.2 密码加密2.3 Spring Security的配置2.4 认证过程2.5 过滤器和过滤链2.6 权限相关本章是Spring Security理论和概念的东西&#xff0c;没有实际的搭建产出&#xff0c;为下节做个铺垫。只是介绍…...

怎么做查真伪网站/国内新闻摘抄

每个中国人都无法逃避的三件事&#xff1a;水&#xff0c;空气和微信。微信&#xff0c;月活约9亿&#xff0c;早已沉淀为国内移动互联网生态的基础设施。一个指南针就能发现一片新大陆的大航海时代一去不复返&#xff0c;当今的互联网生态更像以地中海为内海的古罗马帝国&…...

法律建设网站/品牌推广策划方案

凭借语法简洁的特性&#xff0c;Python吸引了大批非专业人士的关注。人工智能时代的来临让Python大放异彩&#xff0c;选择学习Python的人也逐年增多。对于新手来说&#xff0c;正确的命名很关键&#xff0c;接下来的Python学习入门知识就给大家简单讲解一下Python命名规范。 包…...

北京网站开发公司/广东公司搜索seo哪家强

ROC曲线典型特征是Y轴为真阳性率&#xff0c;X轴为假阳性率。这意味着图的左上角是“理想”点——假阳性率为0&#xff0c;真阳性率为1。这不是很现实&#xff0c;但它确实意味着曲线下更大的区域通常更好。ROC曲线通常用于机器学习二元分类&#xff0c;用于研究机器学习分类器…...