LeetCode - 850 矩形面积 II
题目来源
850. 矩形面积 II - 力扣(LeetCode)
题目描述
给你一个轴对齐的二维数组 rectangles 。
对于 rectangle[i] = [x1, y1, x2, y2],其中(x1,y1)是矩形 i 左下角的坐标, (xi1, yi1) 是该矩形 左下角 的坐标, (xi2, yi2) 是该矩形 右上角 的坐标。
计算平面中所有 rectangles 所覆盖的 总面积 。任何被两个或多个矩形覆盖的区域应只计算 一次 。
返回 总面积 。因为答案可能太大,返回 10^9 + 7 的 模 。
示例
示例 1:

输入:rectangles = [[0,0,2,2],[1,0,2,3],[1,0,3,1]] 输出:6 解释:如图所示,三个矩形覆盖了总面积为 6 的区域。 从(1,1)到(2,2),绿色矩形和红色矩形重叠。 从(1,0)到(2,3),三个矩形都重叠。
示例 2:
输入:rectangles = [[0,0,1000000000,1000000000]] 输出:49 解释:答案是 1018 对 (109 + 7) 取模的结果, 即 49 。
提示
- 1 <= rectangles.length <= 200
- rectanges[i].length = 4
- 0 <= xi1, yi1, xi2, yi2 <= 10^9
题目解析
本题如果从 ”面“ 的角度去思考,比如:所有矩形的面积 - 矩形交集部分的面积 = 最终面积。
两个矩形的交集很容易求解,比如下面图示
虽然矩形交集很容易求解,但是想要求出所有交集,则需要让每个矩形和剩余其他矩形尝试比较,得出交集。同时求出交集矩形后,这些交集矩形也是可能互相重叠的 。。。交集的交集矩形也是可能互相重叠的。。。这样是无穷无尽的求解。因此这个思路不可取。
本题如果从 ”线“ 的角度去思考,如下图所示,从假设有一条扫描线 x = c(x1 ≤ c ≤ x4),从左向右扫描,每扫描到一个位置,则判断该位置是否有矩形覆盖,如果有矩形覆盖,比如:
- 图1 ~ 图3 中扫描线只覆盖到了矩形[左下角(x1,y1),右上角(x2,y2)],因此矩形覆盖的高度为 ( y2 - y1),对应扫描线扫描出的矩形面积 = (x3 - x1) * ( y2 - y1)
- 图4 ~ 图5 中扫描线覆盖了两个矩形,分别是 [左下角(x1,y1),右上角(x2,y2)] 和 [左下角(x3,y3),右上角(x4,y4)],因此矩形覆盖的高度区间也有两个: [y1, y2] 和 [y3, y4],而这两个区间又是具有重叠部分的,因此我们可以转化为区间问题,利用区间问题解法,求解出所有区间的不重叠长度之和 height 。具体求解过程在下面。那么扫描线扫描出来的面积为 (x2 - x3) * h。
- 首先,排序区间,按照起始位置升序,如果起始位置相同,则按照结束位置降序
- 然后,遍历区间,假设当前区间是 [start, end],上一个区间是 [last_start, last_end],
若 last_end >= end,那么说明当前区间被上一个区间完全覆盖,可以继续忽略当前区间(因为当前区间的长度已经在上一个区间被统计过了)
若 last_end < end,那么当前区间的非重叠部分为 [max(start, last_end), end],统计该部分长度:height += end - max(start, last_end),并更新last_end = end - 最后,我们就求出了区间组所有区间覆盖的不重叠长度了。

上面这种思路就是 ”扫描线算法“,扫描线法可以将 "面" 的问题,分解为 "线" 的问题,将 "矩形(面)交集问题" 降解为 "区间(线)交集问题"。
C源码实现
#define MAX_N 200
#define MOD (1e9 + 7)int cmp(const void* a, const void* b) { return *(int*)a - *(int*)b; }int cmp2(const void* a, const void* b) {int* A = (int*)a;int* B = (int*)b;return A[0] != B[0] ? A[0] - B[0] : B[1] - A[1];
}int rectangleArea(int** rectangles, int rectanglesSize, int* rectanglesColSize) {// 统计所有矩形的左边边、右边边所在位置的x坐标int listX[MAX_N];int listX_size = 0;for (int i = 0; i < rectanglesSize; i++) {listX[listX_size++] = rectangles[i][0]; // 矩形左边边x坐标位置listX[listX_size++] = rectangles[i][2]; // 矩形右边边x坐标位置}// 所有x坐标升序(每个x视为一条扫描线)qsort(listX, listX_size, sizeof(int), cmp);// 记录所有矩形并集面积long ans = 0;for (int i = 1; i < listX_size; i++) {// 前一个扫描线x坐标int preX = listX[i - 1];// 当前扫描线x坐标int curX = listX[i];// 相邻两个扫描线的距离long width = curX - preX;// 距离为0, 则跳过if (width == 0)continue;// 将在[x1,x2]区间上的矩形片段(垂直方向高度区间)收集起来int lines[MAX_N][2];int lines_size = 0;// 遍历每个矩形for (int j = 0; j < rectanglesSize; j++) {// 矩形左上角坐标(x1,y1), 矩形右下角坐标(x2,y2)int x1 = rectangles[j][0], y1 = rectangles[j][1],x2 = rectangles[j][2], y2 = rectangles[j][3];// 如果矩形包含了 [x1, x2] 区间if (x1 <= preX && curX <= x2) {// 那么该矩形在 水平方向区间[x1, x2] 对应的 垂直方向区间为 [y2, y1]lines[lines_size][0] = y1;lines[lines_size][1] = y2;lines_size++;}}// 将处于水方向区间 [x1, x2] 的所有垂直方向区间排序:按照起始位置升序, 如果起始位置相同, 则按照结束位置降序,这样排序的目的是保证排序后,前面的区间尽可能可以覆盖后面的区间qsort(lines, lines_size, sizeof(lines[0]), cmp2);// 记录lines多个区间,求长度之和,(重叠部分只计算一次)long height = 0;int last_end = -1;for (int j = 0; j < lines_size; j++) {int start = lines[j][0];int end = lines[j][1];// 如果 last_end >= end, 则当前区间被上一个区间完全覆盖,因此可以跳过// 如果 last_end < endif (last_end < end) {// 则当前区间的不重叠部分是 [max(start, last_end), end]height += end - (int)fmax(start, last_end);// 更新last_endlast_end = end;}}// 当前扫描线扫描到的面积为 width * heightans += width * height;ans %= (int)MOD;}return (int)ans;
}
C++源码实现
#define MOD (1E9 + 7)class Solution {
public:int rectangleArea(vector<vector<int>>& rectangles) {// 统计所有矩形的左边边、右边边所在位置的x坐标vector<int> listX;for (vector<int>& rect : rectangles) {listX.emplace_back(rect[0]); // 矩形左边边x坐标位置listX.emplace_back(rect[2]); // 矩形右边边x坐标位置}// 所有x坐标升序(每个x视为一条扫描线)sort(listX.begin(), listX.end());// 记录所有矩形并集面积long ans = 0;for (int i = 1; i < listX.size(); i++) {// 前一个扫描线x坐标int preX = listX[i - 1];// 当前扫描线x坐标int curX = listX[i];// 相邻两个扫描线的距离long width = curX - preX;// 距离为0, 则跳过if (width == 0)continue;// 将在[x1,x2]区间上的矩形片段(垂直方向高度区间)收集起来vector<vector<int>> lines;// 遍历每个矩形for (vector<int>& rect : rectangles) {// 矩形左下角坐标(x1,y1), 矩形右上角坐标(x2,y2)int x1 = rect[0], y1 = rect[1], x2 = rect[2], y2 = rect[3];// 如果矩形包含了 [x1, x2] 区间if (x1 <= preX && curX <= x2) {// 那么该矩形在 水平方向区间[x1, x2] 对应的 垂直方向区间为 [y1, y2]lines.emplace_back(vector<int>{y1, y2});}}// 将处于水方向区间 [x1, x2]// 的所有垂直方向区间排序:按照起始位置升序, 如果起始位置相同,// 则按照结束位置降序,这样排序的目的是保证排序后,前面的区间尽可能可以覆盖后面的区间sort(lines.begin(), lines.end(),[](vector<int>& lineA, vector<int>& lineB) {if (lineA[0] != lineB[0]) {return lineA[0] < lineB[0];} else {return lineA[1] > lineB[1];}});// 记录lines多个区间,求长度之和,(重叠部分只计算一次)long height = 0;int last_end = INT_MIN;for (vector<int>& line : lines) {int start = line[0];int end = line[1];// 如果 last_end >= end,// 则当前区间被上一个区间完全覆盖,因此可以跳过 如果 last_end <// endif (last_end < end) {// 则当前区间的不重叠部分是 [max(start, last_end), end]height += end - max(start, last_end);// 更新last_endlast_end = end;}}// 当前扫描线扫描到的面积为 width * heightans += width * height;ans %= (int) MOD;}return (int) ans;}
};
Java源码实现
class Solution {public int rectangleArea(int[][] rectangles) {// 统计所有矩形的左边边、右边边所在位置的x坐标ArrayList<Integer> listX = new ArrayList<>();for (int[] rect : rectangles) {listX.add(rect[0]);listX.add(rect[2]);}// 所有x坐标升序(每个x视为一条扫描线)listX.sort((a, b) -> a - b);// 记录所有矩形并集面积long ans = 0;for (int i = 1; i < listX.size(); i++) {// 前一个扫描线x坐标int preX = listX.get(i - 1);// 当前扫描线x坐标int curX = listX.get(i);// 相邻两个扫描线的距离int width = curX - preX;// 距离为0, 则跳过if (width == 0)continue;// 将在[x1,x2]区间上的矩形片段(垂直方向高度区间)收集起来ArrayList<int[]> lines = new ArrayList<>();// 遍历每个矩形for (int[] rect : rectangles) {// 矩形左下角坐标(x1,y1), 矩形右上角坐标(x2,y2)int x1 = rect[0], y1 = rect[1], x2 = rect[2], y2 = rect[3];// 如果矩形包含了 [x1, x2] 区间if (x1 <= preX && curX <= x2) {// 那么该矩形在 水平方向区间[x1, x2] 对应的 垂直方向区间为 [y1, y2]lines.add(new int[] { y1, y2 });}}// 将处于水方向区间 [x1, x2] 的所有垂直方向区间排序:按照起始位置升序, 如果起始位置相同,则按照结束位置降序,// 这样排序的目的是保证排序后,前面的区间尽可能可以覆盖后面的区间lines.sort((lineA, lineB) -> lineA[0] != lineB[0] ? lineA[0] - lineB[0] : lineB[1] - lineA[1]);// 记录lines多个区间,求长度之和,(重叠部分只计算一次)int height = 0;int last_end = -1;for (int[] line : lines) {int start = line[0];int end = line[1];// 如果 last_end >= end, 则当前区间被上一个区间完全覆盖,因此可以跳过// 如果 last_end < endif (last_end < end) {// 则当前区间的不重叠部分是 [max(start, last_end), end]height += end - Math.max(start, last_end);// 更新last_endlast_end = end;}}// 当前扫描线扫描到的面积为 width * heightans += (long) width * height;ans %= (int) (1e9 + 7);}return (int) ans;}
}
Python源码实现
class Solution(object):def rectangleArea(self, rectangles):""":type rectangles: List[List[int]]:rtype: int"""# 统计所有矩形的左边边、右边边所在位置的x坐标listX = []for rect in rectangles:listX.append(rect[0]) # 矩形左边边x坐标位置listX.append(rect[2]) # 矩形右边边x坐标位置# 所有x坐标升序(每个x视为一条扫描线)listX.sort()# 记录所有矩形并集面积ans = 0for i in range(1, len(listX)):# 前一个扫描线x坐标preX = listX[i - 1]# 当前扫描线x坐标curX = listX[i]# 相邻两个扫描线的距离width = curX - preX# 距离为0, 则跳过if width == 0:continue# 将在[x1,x2]区间上的矩形片段(垂直方向高度区间)收集起来lines = []# 遍历每个矩形# 矩形左下角坐标(x1,y1),矩形右上角坐标(x2,y2)for x1, y1, x2, y2 in rectangles:# 如果矩形包含了 [x1, x2] 区间if x1 <= preX and curX <= x2:# 那么该矩形在 水平方向区间[x1, x2] 对应的 垂直方向区间为 [y1, y2]lines.append((y1, y2))# 将处于水方向区间 [x1, x2] 的所有垂直方向区间排序:按照起始位置升序, 如果起始位置相同, 则按照结束位置降序,这样排序的目的是保证排序后,前面的区间尽可能可以覆盖后面的区间lines.sort(key=lambda line: (line[0], -line[1]))# 记录lines多个区间,求长度之和,(重叠部分只计算一次)height = 0# 题目说坐标范围 [-100, 100], 因此对应 [?, -101] 的区间必然不会和任何区间相交last_end = -1# 如果 last_end >= end, 则当前区间被上一个区间完全覆盖,因此可以跳过# 如果 last_end < endfor start, end in lines:if last_end < end:# 则当前区间的不重叠部分是 [max(start, last_end), end]height += end - max(start, last_end)# 更新last_endlast_end = end# 当前扫描线扫描到的面积为 width * heightans += width * heightreturn ans % 1000000007
JavaScript源码实现
/*** @param {number[][]} rectangles* @return {number}*/
var rectangleArea = function (rectangles) {// 统计所有矩形的左边边、右边边所在位置的x坐标const listX = [];for (let rect of rectangles) {listX.push(rect[0]); // 矩形左边边x坐标位置listX.push(rect[2]); // 矩形右边边x坐标位置}// 所有x坐标升序(每个x视为一条扫描线)listX.sort((a, b) => a - b);// 记录所有矩形并集面积let ans = 0n;for (let i = 1; i < listX.length; i++) {// 前一个扫描线x坐标const preX = listX[i - 1];// 当前扫描线x坐标const curX = listX[i];// 相邻两个扫描线的距离const width = curX - preX;// 距离为0, 则跳过if (width == 0) continue;// 将处于[x1,x2]区间上的矩形片段(垂直方向高度区间)收集起来const lines = [];// 遍历每个矩形// 矩形左下角坐标(x1,y1),矩形右上角坐标(x2,y2)for (let [x1, y1, x2, y2] of rectangles) {// 如果矩形有片段处于 [x1, x2] 区间if (x1 <= preX && curX <= x2) {// 那么该矩形在 水平方向区间[x1, x2] 对应的 垂直方向区间为 [y1, y2]lines.push([y1, y2]);}}// 将处于水方向区间 [x1, x2] 的所有垂直方向区间排序:按照起始位置升序, 如果起始位置相同, 则按照结束位置降序,这样排序的目的是保证排序后,前面的区间尽可能可以覆盖后面的区间lines.sort((lineA, lineB) =>lineA[0] != lineB[0] ? lineA[0] - lineB[0] : lineB[1] - lineA[1]);// 记录lines多个区间,求长度之和,(重叠部分只计算一次)let height = 0;let last_end = -1;for (let [start, end] of lines) {// 如果 last_end >= end, 则当前区间被上一个区间完全覆盖,因此可以跳过// 如果 last_end < endif (last_end < end) {// 则当前区间的不重叠部分是 [max(start, last_end), end]height += end - Math.max(start, last_end);// 更新last_endlast_end = end;}}// 当前扫描线扫描到的面积为 width * heightans += BigInt(width) * BigInt(height);}return Number(ans % 1000000007n);
};相关文章:
LeetCode - 850 矩形面积 II
题目来源 850. 矩形面积 II - 力扣(LeetCode) 题目描述 给你一个轴对齐的二维数组 rectangles 。 对于 rectangle[i] [x1, y1, x2, y2],其中(x1,y1)是矩形 i 左下角的坐标, (xi1, yi1) 是该…...
Jenkins Pipeline 中通过勾选参数来控制是否构建 Docker 镜像
1.定义参数: 使用 booleanParam 定义一个布尔参数,示例如下 booleanParam(name: BUILD_DOCKER, description: 是否构建Docker镜像, defaultValue: false)2.使用参数: 在 stage 中,根据参数的值决定构建方式: stage(编…...
C++入门基础知识86(实例)——实例11【计算自然数之和】
成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于计算自然数之和相关内容! 关…...
ChatGPT与R语言融合技术在生态环境数据统计分析、绘图、模型中的实践与进阶应用
自2022年GPT(Generative Pre-trained Transformer)大语言模型的发布以来,它以其卓越的自然语言处理能力和广泛的应用潜力,在学术界和工业界掀起了一场革命。在短短一年多的时间里,GPT已经在多个领域展现出其独特的价值…...
OpenAi以及Dify结合生成Ai模型
文章目录 1、Dify介绍2、使用 Dify3、部署Docker1.系统要求2.系统虚拟化3.下载docker 4、安装WSL1.检查是否已经安装 五、访问系统六、添加模型 1、Dify介绍 Dify官方地址。 Dify 是一个开源的 LLM 应用开发平台。其直观的界面结合了 AI 工作流、RAG 管道、Agent、模型管理、…...
【漏洞复现】用友 UFIDA /portal/pt/file/upload 任意文件上传漏洞
免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测试时,可能会违反某些法律法规或服…...
C:内存函数
目录 前言: 一、memcpy 函数的使用及实现 1、memcpy函数的介绍 1.1 memcpy函数参数解读 2、memcpy函数的使用 3、memcpy函数的模拟实现 二、memmove函数的使用及模拟 1、memmove函数的使用 2、memmove函数的模拟实现 三、memset 函数的使用 1、memset函数的…...
【Web】御网杯信息安全大赛2024 wp(全)
目录 input_data admin flask 如此多的FLAG 一夜醒来之全国CTF水平提升1000倍😋 input_data 访问./.svn后随便翻一翻拿到flag admin dirsearch扫出来 访问./error看出来是java框架 测出来是/admin;/路由打Spring View Manipulation(Java)的SSTI https:/…...
VC++同时处理ANSI和Unicode字符集,除了使用TCHAR和_T()宏外,还有其他方法可以实现吗?
在我的C项目中,如果我需要同时处理ANSI和Unicode字符集,除了使用TCHAR和_T()宏外,还有其他方法可以实现吗? 除了使用 TCHAR 和 _T() 宏之外,还有其他方法可以实现同时处理 ANSI 和 Unicode 字符集: 1. 使用…...
MATLAB定位程序与讲解【专栏介绍】
AOA(到达角度)定位原理: 描述了基于到达角度进行定位的方法,适用于一维、二维或三维空间。 由动静压之比求马赫数的MATLAB函数: 提供了一个计算马赫数的函数,用于流体力学中速度的计算。 三边法定位与三点法…...
机器学习3--numpy
Numpy 一、numpy是什么?二、N维数组三、数组基本操作四、数组的运算 一、numpy是什么? numpy是一个开源的python科学计算库,用于处理任意维度的数组。numpy用ndarray处理多维数组。 import numpy as np np.array创建数组 机器学习数据量很大…...
Linux之我不会
一、常用命令 1.系统管理 1.1 systemctl start | stop | restart | status 服务名 案例实操 1 查看防火墙状态 systemctl status firewalld2 停止防火墙服务 systemctl stop firewalld3 启动防火墙服务 systemctl start firewalld4 重启防火墙服务 systemctl restart f…...
音视频整体解码流程和同步流程
目录 1. 整体解码流程1. 初始化 FFmpeg2. 打开媒体文件3. 查找解码器4. 打开解码器5. 读取和解码数据6. 处理解码后的帧7. 释放资源 2. 音视频同步整体流程1. 解复用媒体流2. 解码3. 以音频为时钟源进行音视频同步的策略4. 缓冲区设计 现在先说大体流程,不分析代码 …...
1.2 HuggingFists安装说明-Linux安装
Linux版安装说明 下载地址 【GitHub】https://github.com/Datayoo/HuggingFists 【百度网盘】https://pan.baidu.com/s/12-qzxARjzRjYFvF8ddUJQQ?pwd2024 安装说明 环境要求 操作系统:CentOS7 硬件环境:至少4核8G,系统使用Containerd…...
四,MyBatis-Plus 当中的主键策略和分页插件的(详细实操使用)
四,MyBatis-Plus 当中的主键策略和分页插件的(详细实操使用) 文章目录 四,MyBatis-Plus 当中的主键策略和分页插件的(详细实操使用)1. 主键策略1.1 主键生成策略介绍 2. 准备工作:2.1 AUTO 策略2.2 INPUT 策略2.3 ASSIGN_ID 策略2.3.1 雪花算…...
Win32打开UWP应用
最近无意间发现Windows里一个神奇的文件夹。 shell:appsfolder 运行打开 这个文件夹后,你可以看到本机安装的所有应用程序。 我觉得这个挺方便的,所以做了一个简单的appFolderDialog包给C#用 项目地址:https://github.com/TianXiaTech/App…...
C# C++ 笔记
第一阶段知识总结 lunix系统操作 1、基础命令 (1)cd cd /[目录名] 打开指定文件目录 cd .. 返回上一级目录 cd - 返回并显示上一次目录 cd ~ 切换到当前用户的家目录 (2)pwd pwd 查看当前所在目录路径 pwd -L 打印当前物理…...
关于最小二乘法
最小二乘法的核心思想简单而优雅:我们希望找到一条最佳的曲线,使其尽可能贴近所有的数据点。想象一下,当你在画布上描绘一条线,目标是让这条线与点的距离最小。数学上,这可以表示为: 在这个公式中ÿ…...
国产OpenEuler与Centos全面之比较
OpenEuler 和 CentOS 都是流行的 Linux 发行版,但它们有一些关键的区别。以下是 OpenEuler 和 CentOS 的全面比较: 1. 起源和支持: - OpenEuler:由华为公司支持,中国开源社区主导开发的操作系统,旨在构建一…...
Java面试题一
一、Java语言有哪些特性? Java语言具有多种特性,这些特性使得Java成为一种广泛使用的编程语言。以下是Java语言的一些主要特性: 面向对象(Object-Oriented): Java是一种纯面向对象的编程语言。它支持类&…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...
ubuntu中安装conda的后遗症
缘由: 在编译rk3588的sdk时,遇到编译buildroot失败,提示如下: 提示缺失expect,但是实测相关工具是在的,如下显示: 然后查找借助各个ai工具,重新安装相关的工具,依然无解。 解决&am…...
CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)
漏洞概述 漏洞名称:Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号:CVE-2023-25194 CVSS评分:8.8 影响版本:Apache Kafka 2.3.0 - 3.3.2 修复版本:≥ 3.4.0 漏洞类型:反序列化导致的远程代…...

