力扣每日打卡 50. Pow(x, n) (中等)
@[TOC](力扣 50. Pow(x, n) 中等)
前言
这是刷算法题的第十一天,用到的语言是JS
题目:力扣 50. Pow(x, n) (中等)
一、题目内容
实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。
示例 1:
输入:x = 2.00000, n = 10
输出:1024.00000
示例 2:
输入:x = 2.10000, n = 3
输出:9.26100
示例 3:
输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25
提示:
- -100.0 < x < 100.0
- -231 <= n <= 231-1
- n 是一个整数
- 要么 x 不为零,要么 n > 0 。
- -104 <= xn <= 104
二、解题方法
1. 快速幂运算(使用除模运算)
正常运算
代码如下(实例):
/*** @param {number} x* @param {number} n* @return {number}*/
var myPow = function (x, n) {// 有负数,先处理特殊情况// 如果指数是负数,则 将底数取倒数,并且指数变正// 即 x^(-n) = 1 / (x^n) = (1/x)^nif (n === 0) return 1.00000if (n < 0) {x = 1 / xn = -n}let ans = 1if (-100.0 > x || x > 100.0) return 0.00000if (-(2 ** 31) > n || n > (2 ** 31)) return 0.00000if (x === 0 && n > 0) return 0.00000while (n) {if (n % 2 === 1) ans *= xx *= xn = Math.floor(n / 2)}return ans
};
2. 快速幂运算(使用按位与运算)
有坑:具体表现为指数右移时的判断
n >>= 1 与 n >>>= 1 的区别:下面会讲
- 进行无符号右移1位,此处不能使用有符号右移(>>)
- 当n为-2^31转换成正数时的二进制位“10000000000000000000000000000000” , 如果采用有符号右移时会取最左侧的数当符号即(1),所以返回的结果是 -1073741824
代码如下(实例):
/*** @param {number} x* @param {number} n* @return {number}*/
var myPow = function (x, n) {// 有负数,先处理特殊情况// 如果指数是负数,则 将底数取倒数,并且指数变正// 即 x^(-n) = 1 / (x^n) = (1/x)^nif (n === 0) return 1.00000if (n < 0) {x = 1 / xn = -n}let ans = 1if (-100.0 > x || x > 100.0) return 0.00000if (-(2 ** 31) > n || n > (2 ** 31)) return 0.00000if (x === 0 && n > 0) return 0.00000// 错误用法// while (n) {// if (n & 1) ans *= x// x *= x// n >>= 1 // 符号右移// }// 正确用法while (n) {if (n & 1) ans *= xx *= xn >>>= 1 // 无符号右移//进行无符号右移1位,此处不能使用有符号右移(>>)//当n为-2^31转换成正数时的二进制位“10000000000000000000000000000000” , 如果采用有符号右移时会取最左侧的数当符号即(1),所以返回的结果是 -1073741824}return ans
};
3. 官方题解
3.1 前言
本题的方法被称为「快速幂算法」,有递归和迭代两个版本。这篇题解会从递归版本的开始讲起,再逐步引出迭代的版本。
当指数 n 为负数时,我们可以计算 x−n 再取倒数得到结果,因此我们只需要考虑 n 为自然数的情况。
3.2 方法一:快速幂 + 递归
「快速幂算法」的本质是分治算法。举个例子,如果我们要计算 x64,我们可以按照:
x → x 2 → x 4 → x 8 → x 16 → x 32 → x 64 x→x^2 →x^4 →x^8 →x^{16} →x^{32} →x^{64} x→x2→x4→x8→x16→x32→x64
的顺序,从 x x x 开始,每次直接把上一次的结果进行平方,计算 6 次就可以得到 x 64 x^{64} x64 的值,而不需要对 x x x 乘 63 次 x x x。
再举一个例子,如果我们要计算 x 77 x^{77} x77 ,我们可以按照:
x → x 2 → x 4 → x 9 → x 19 → x 38 → x 77 x→x^2 →x^4 →x^9 →x^{19} →x^{38} →x^{77} x→x2→x4→x9→x19→x38→x77
的顺序,在 x → x 2 , x 2 → x 4 , x 19 → x 38 x→x^2,x^2→x^4,x^{19}→x^{38} x→x2,x2→x4,x19→x38 这些步骤中,我们直接把上一次的结果进行平方,而在 x 4 → x 9 , x 9 → x 38 , x 38 → x 77 x^4 →x^9, x^{9} →x^{38}, x^{38} →x^{77} x4→x9,x9→x38,x38→x77 这些步骤中,我们把上一次的结果进行平方后,还要额外乘一个 x x x。
直接从左到右进行推导看上去很困难,因为在每一步中,我们不知道在将上一次的结果平方之后,还需不需要额外乘 x。但如果我们从右往左看,分治的思想就十分明显了:
-
当我们要计算 x n x^n xn时,我们可以先递归地计算出 y = x ⌊ n / 2 ⌋ y=x^{⌊n/2⌋} y=x⌊n/2⌋ ,其中 ⌊ a ⌋ ⌊a⌋ ⌊a⌋ 表示对 a 进行下取整;
-
根据递归计算的结果,如果 n 为偶数,那么 x n = y 2 x^n = y^2 xn=y2;如果 n 为奇数,那么 x n = y 2 x x^n = y^2x xn=y2x
-
递归的边界为 n = 0 n=0 n=0,任意数的 0 次方均为 1。
由于每次递归都会使得指数减少一半,因此递归的层数为 O ( l o g n ) O(log n) O(logn),算法可以在很快的时间内得到结果。
// C++
class Solution {
public:double quickMul(double x, long long N) {if (N == 0) {return 1.0;}double y = quickMul(x, N / 2);return N % 2 == 0 ? y * y : y * y * x;}double myPow(double x, int n) {long long N = n;return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);}
};作者:力扣官方题解
链接:https://leetcode.cn/problems/powx-n/solutions/238559/powx-n-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- 复杂度分析:
- 时间复杂度: O ( l o g n ) O(logn) O(logn),即为递归的层数。
- 空间复杂度: O ( l o g n ) O(logn) O(logn),即为递归的层数。这是由于递归的函数调用会使用栈空间。
链接:力扣本题官方题解
来源:力扣(LeetCode)
3.3 方法二:快速幂 + 迭代
由于递归需要使用额外的栈空间,我们试着将递归转写为迭代。在方法一中,我们也提到过,从左到右进行推导是不容易的,因为我们不知道是否需要额外乘 x。但我们不妨找一找规律,看看哪些地方额外乘了 x x x,并且它们对答案产生了什么影响。
我们还是以 x 77 x^{77} x77作为例子: x → x 2 → x 4 → x 9 → x 19 → x 38 → x 77 x→x^2 →x^4 →x^9 →x^{19} →x^{38} →x^{77} x→x2→x4→x9→x19→x38→x77 并且把需要额外乘 x x x 的步骤打上了 + + + 标记。可以发现:
- x 38 → + x 77 x^{38}→^+ x^{77} x38→+x77中额外乘的 x x x 在 x 77 x^{77} x77中贡献了 x x x;
- x 9 → + x 19 x^{9}→^+ x^{19} x9→+x19中额外乘的 x x x 在之后被平方了 2 2 2次,因此在 x 77 x^{77} x77中贡献了 x 2 2 = x 4 x^{2^2} = x^4 x22=x4;
- x 4 → + x 9 x^{4}→^+ x^{9} x4→+x9中额外乘的 x x x 在之后被平方了 3 3 3次,因此在 x 77 x^{77} x77中贡献了 x 2 6 = x 64 x^{2^6} = x^{64} x26=x64;
下面的代码给出了详细的注释:
// C++
class Solution {
public:double quickMul(double x, long long N) {double ans = 1.0;// 贡献的初始值为 xdouble x_contribute = x;// 在对 N 进行二进制拆分的同时计算答案while (N > 0) {if (N % 2 == 1) {// 如果 N 二进制表示的最低位为 1,那么需要计入贡献ans *= x_contribute;}// 将贡献不断地平方x_contribute *= x_contribute;// 舍弃 N 二进制表示的最低位,这样我们每次只要判断最低位即可N /= 2;}return ans;}double myPow(double x, int n) {long long N = n;return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);}
};作者:力扣官方题解
链接:https://leetcode.cn/problems/powx-n/solutions/238559/powx-n-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- 复杂度分析:
- 时间复杂度: O ( l o g n ) O(logn) O(logn),即为对 n 进行二进制拆分的时间复杂度。
- 空间复杂度: O ( 1 ) O(1) O(1)。
链接:力扣本题官方题解
来源:力扣(LeetCode)
三、符号右移" >>= " 与 无符号右移" >>>= " 的区别
在 JavaScript 中,>>=
是一种位移赋值运算符,表示将一个数向右位移指定的位数,并将结果赋值给该数。>>>
是无符号右位移运算符,它会将符号位(最高位)视为 0,因此用于处理负数时会有不同的结果。
1. 符号右移(>>
)与无符号右移(>>>
)的区别
-
>>
: 符号右移运算符,它会保持符号位(最高位)不变,对于负数来说,会用 1 填充空位。例如,-8
(11111111111111111111111111111000
)右移 1 位会变成-4
(11111111111111111111111111111100
)。 -
>>>
: 无符号右移运算符,会用 0 填充空位,无论原数是负数还是正数。这导致在右移负数时,结果会是一个大的正数。例如,-8
的无符号右移 1 位,结果将是2147483644
(00111111111111111111111111111100
)。
2. >>=
的用途
>>=
是将右移操作与赋值结合的简写形式。例如:
let x = 8; // 二进制表示为 1000
x >>= 1; // 向右位移 1 位
console.log(x); // 输出: 4,二进制为 0100let y = -8; // 二进制表示为 11111111111111111111111111111000 (32位)
y >>= 1; // 向右位移 1 位
console.log(y); // 输出: -4,二进制为 11111111111111111111111111111100
而对于无符号右移的示例:
let z = -8; // 二进制表示为 11111111111111111111111111111000 (32位)
z >>>= 1; // 无符号右位移 1 位
console.log(z); // 输出: 2147483644,二进制为 00111111111111111111111111111100
3. 总结
>>=
是一种位移赋值操作符,用于将数向右移位并赋值。- 适用于进行位运算时,尤其在处理与二进制数字有关的算法(如加密、压缩等)时非常有用。
- 区别于符号右移
>>
,无符号右移>>>
不保留符号,可以否定负数的符号位。
理解这些运算符对理解 JavaScript 的位运算有非常重要的作用,尤其在需要直接操作底层二进制数据时。
四、可以用>>>= 永久性代替>>=吗
在 JavaScript 中,>>=
和 >>>=
的作用虽然相似,但它们无法彼此完全替代,因为它们处理符号的方式不同。
下面是详细的解释:
1. 何时使用 >>=
或 >>>=
?
- 如果你需要保持负数的符号,并且希望结果也为负数,应该使用
>>=
。 - 如果你希望对数字进行无符号右移,且希望即使是负数也得到正数结果,应该使用
>>>=
。
2. 结论
- 不能用
>>>=
永久性代替>>=
,因为它们的算法及结果不同。 - 根据所需的数值结果来选择合适的操作符:
- 使用
>>=
时结果保持符号(适用于有符号整数)。 - 使用
>>>=
时结果不保持符号(适用于无符号整数)。
- 使用
因此,选择 >>=
还是 >>>=
取决于你的具体需求和你希望如何处理符号。
相关文章:
力扣每日打卡 50. Pow(x, n) (中等)
[TOC](力扣 50. Pow(x, n) 中等) 前言 这是刷算法题的第十一天,用到的语言是JS 题目:力扣 50. Pow(x, n) (中等) 一、题目内容 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。 示例 1࿱…...
Mac M1管理多个Node.js版本
目录 1. 使用 nvm (Node Version Manager) 1.1.安装 nvm 1.2.安装Node.js版本 1.3.查看已安装的node版本列表 1.4.使用特定版本的Node.js 1.5.查看当前使用的版本 2. 使用 fnm (Fast Node Manager) 2.1.安装 fnm 2.2.安装Node.js版本 2.3.查看已安装的版本 2.4.使用…...
arm_math.h、arm_const_structs.h 和 arm_common_tables.h
在 FOC(Field-Oriented Control,磁场定向控制) 中,arm_math.h、arm_const_structs.h 和 arm_common_tables.h 是 CMSIS-DSP 库的核心组件,用于实现高效的数学运算、预定义结构和查表操作。以下是它们在 FOC 控…...
每天五分钟深度学习:非线性激活函数的导数
本文重点 本文探讨了神经网络中几种常见非线性激活函数(Sigmoid、Tanh、ReLU、Leaky ReLU、ELU、Softmax)的导数特性。通过对各激活函数导数的数学推导与实际应用分析,揭示了不同激活函数在梯度传播、收敛速度及模型表达能力方面的差异。研究发现,ReLU及其变体在计算效率与…...
OpenHarmony5.0.2 USB摄像头适配
开发环境 OpenHarmony5.0.2 RK3568 USB摄像头 遇到问题 编译后插上USB摄像头后打开相机无图像 解决思路 5.0.2版本是支持USB摄像头的,需要修改默认的板载相机配置即可。 修改代码 1、修改配配置 文件地址:vendor/hihope/rk3568/hdf_config/uhdf…...
vue: router基础用法
router基础用法 1.安装router2.配置router3.路由编程1.编程式导航2.声明式导航 1.安装router 在node环境下,直接运行 npm install router42.配置router 创建文件夹并命名为router 在router文件夹中创建index.js index.js示例配置如下: import { creat…...
IDE中使用Spring Data Redis
步骤一:导入Spring Data Redis的maven坐标 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> 步骤二:配置Redis数据源 步骤三&…...
【计网】网络交换技术之报文交换(复习自用,了解,重要3)
复习自用的,处理得比较草率,复习的同学或者想看基础的同学可以看看,大佬的话可以不用浪费时间在我的水文上了 另外两种交换技术可以直接点击链接访问相关笔记: 电路交换 分组交换 一、报文交换的定义 报文交换(Me…...
GitLab 17.x 配置 https
文章目录 使用外部 nginx 参考:https://docs.gitlab.com/omnibus/settings/nginx.html 使用内置 nginx 参考:https://docs.gitlab.com/omnibus/settings/ssl/index.html#configure-https-manually // 使用自己手工申请证书 $ mkdir /etc/gitlab/ssl $ m…...
中间件--ClickHouse-1--基础介绍(列式存储,MPP架构,分布式计算,SQL支持,向量化执行,亿万级数据秒级查询)
1、概述 ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。它由俄罗斯的互联网巨头Yandex为解决其内部数据分析需求而开发,并于2016年开源。专为大规模数据分析,实时数据分析和复杂查询设计,具有高性能、实时数据和可扩展性等…...
【编写Node接口;接口动态获取VUE文件并异步加载, 并渲染impoort插件使用】
编写Node接口;接口动态获取VUE文件并异步加载, 并渲染impoort插件使用; vue3-sfc-loader主要特征: 编写Node接口:Vue2项目使用:Vue3项目使用:(页面按需加载插件、图片等)主要使用&am…...
vue入门:template 和 JSX
temlplate 和 jsx 最终渲染时都是创建 dom 节点 template 和 JSX 混合使用 <template><div><span>Message: {{ msg }}</span><br/><VNodes :vnodes"getJSXSpan()"/><VNodes :vnodes"getAnchoredHeading(4)"/>…...
[Dify] Dify 本地部署及连接 Ollama 模型全流程指南
在构建私有化智能应用时,Dify 作为一款开源的大模型应用开发平台,具备强大的插件体系和可扩展能力。本文将详细介绍如何在本地环境中部署 Dify,并成功连接本地的 Ollama 模型,解决实际部署过程中常见的问题与错误。 一、本地部署 Dify 步骤详解 1. 安装 Docker 环境(以 W…...
基于PyQt5的Jupyter Notebook转Python工具
一、项目背景与核心价值 在数据科学领域,Jupyter Notebook因其交互特性广受欢迎,但在生产环境中通常需要将其转换为标准Python文件。本文介绍一款基于PyQt5开发的桌面级转换工具,具有以下核心价值: 可视化操作:提供友好的GUI界面,告别命令行操作 批量处理:支持目录递归…...
从自然语言到 JSON 数据交互:探索 MCP 协议的自动化任务实现
好的!以下是基于我们讨论的关于 MCP 协议、JSON 数据交互以及自然语言到 JSON 转换的实现过程的总结,格式化为一篇 CSDN 风格的博客记录。这篇文章将记录你的发现,适合分享给技术社区。 从自然语言到 JSON 数据交互:探索 MCP 协议…...
n8n 本地部署及实践应用,实现零成本自动化运营 Telegram 频道(保证好使)
n8n 本地部署及实践应用,实现零成本自动化运营 Telegram 频道(保证好使) 简介 n8n 介绍 一、高度可定制性 二、丰富的连接器生态 三、自托管部署(本地部署) 四、社区驱动 n8n 的部署 一、前期准备 二、部署步…...
嵌入式学习(37)-STM32串口发送中断的实现
一、概述 项目中需要用到发送中断,所以了解了发送中断的一些知识。 二、应用 状态寄存器USART_SR的复位值为0x00C0H, 也就是第七位TXE和第六位TC复位值为1,而TXE1,表明发送数据寄存器为空, TC1表明发送已完成。 USART_ITConfig(USART1, USA…...
Android envsetup与Python venv使用指南
Android envsetup 和 Python venv 是两种完全不同的环境配置工具,分别服务于不同的开发场景。以下是对它们的详细解释及使用方法: 1. Android envsetup 用途: Android envsetup 是 Android 源码开发中的环境配置脚本(envsetup.sh…...
安卓关机和重启源码流程
// systemui关机 frameworks/base/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsComponent.java Overridepublic void shutdown() {try {mBarService.shutdown();} catch (RemoteException e) {}}frameworks/base/services/core/java/com/android…...
解决单设备号双目摄像头调用难题:经验分享与总结
解决单设备号双目摄像头调用难题:经验分享与总结 在计算机视觉项目中,双目摄像头的调用是常见需求,但过程中往往会遇到各种挑战。最近,我就经历了一段曲折但最终成功解决问题的历程,现在将这段宝贵经验分享给大家。 一、问题背景 我手头的双目摄像头仅有一个设备号(设…...
【RL系列】DAPO: An Open-Source LLM Reinforcement Learning System at Scale
1. 简介 尽管RL对complex reasoning效果提升有重要作用,但是在openAI o1和DeepSeek R1 technical report上都没有详细的实验细节。本文主要提出了DAPO算法,提出了4个关键技术点并开源参数和代码。在AIME 2024验证了DAPO算法的有效性。 2. Tricks Exc…...
五子棋(测试报告)
文章目录 一、项目介绍二、测试用例三、自动化测试用例的部分展示注册登录游戏大厅游戏匹配 总结 一、项目介绍 本项目是一款基于Spring、SpringMVC、MyBatis、WebSocket的双人实时对战五子棋游戏,游戏操作便捷,功能清晰明了。 二、测试用例 三、自动化测试用例的…...
【小工具】定时任务执行器
定时任务执行器 背景版本代码JobJob执行机 背景 有时我们的项目内需要一个定时执行器来执行某些任务,就需要一个简单好用的定时任务机。 注意,这个定时任务机并不原生支持分布式,如果需要分布式的功能请自己实现。 版本 jdk21 代码 Job …...
LVGL源码(7):渲染
在LVGL源码(4):LVGL关于EVENT事件的响应逻辑_lvgl实现显示打车-CSDN博客这篇文章中,我们提到了LVGL的三大步骤:检测用户输入操作、调用我们编写的逻辑、在屏幕上显示对应的画面;而在学习完“样式”之后,我们或许可以将上述步骤说明…...
02_通过调用硅基流动平台deepseekapi按输入的标题生成文章
from openai import OpenAIclient OpenAI(base_urlhttps://api.siliconflow.cn/v1,api_keyyou api-key )# 定义关键词变量 keyword "人性的弱点都有哪些?"# 发送带有流式输出的请求 response client.chat.completions.create(model"deepseek-ai/D…...
三、Virtual Device Manager
一、创建AVD AVD是Android Virtual Device(安卓虚拟设备),我们可以启动Android Studio 选择 Virtual Device Manager 创建并启动一个模拟器。 二、设置屏幕大小 上面直接创建的镜像是不能设置屏幕大小的,启动后笔记本屏幕都放不下ÿ…...
MATLAB2022b安装
1 从百度网盘下载MATLAB2022b,下载完成后解压到某个文件夹; 链接: MATLAB2022b 提取码: 6666 2 打开解压后的文件夹,进入setup文件夹,双击打开“setup.exe”文件; 3 在弹出窗口中选择“高级选项”-->“我有文件安…...
计算机编码
计算机,不能直接存储文字,存储的是编码。 计算机只能处理二进制的数据,其它数据,比如:0-9、a-z、A-Z,这些字符,我们可以定义一套规则来表示。假如:A用110表示,B用111表示…...
Dell EMC Unity NAS 认证方式介绍
近日有个客户要配置EMC Unity的NAS访问,我们知道NAS有Linux环境下的NFS和Windows环境下的SMB(也叫做CIFS)。单独配置其中的一种访问协议相对简单,但是客户提出的要求是要对文件系统同时NFS和SMB访问,这就有些复杂&…...
SpringAi 会话记忆功能
在使用chatGPT,豆包等产品后,就会发现他们的会话有“记忆”功能。 那么我们用API接口的话,这个是怎么实现的呢? 属于比较粗暴的方式,把之前的内容与新的提示词一起再次发给大模型。让我们看到他们有记忆功能。 下面介绍…...
BUUCTF-web刷题篇(25)
34.the mystery of ip 给出链接,输入得到首页: 有三个按钮,flag点击后发现页面窃取客户端的IP地址,通过给出的github代码中的php文件发现可以通过XFF或Client-IP传入值。使用hackbar或BP 使用XSS,通过github给出的目录…...
Elasticsearch 性能优化:从原理到实践的全面指南
Elasticsearch(ES)作为一款基于 Lucene 的分布式搜索和分析引擎,广泛应用于日志分析、搜索引擎和实时数据处理等场景。然而,在高并发、大数据量环境下,Elasticsearch 的性能可能面临瓶颈,如查询延迟高、索引…...
UITableVIew性能优化概述
UITableVIew性能优化概述 文章目录 UITableVIew性能优化概述前言如何优化优化的本质卡顿的原因 CPU层级cell复用UITableVIew尽量采用复用 定义cell的种类尽量少,可以多用hidden缓存cell高度基础设置预先设置高度设置一个预先缓存 异步绘制滑动按照需加载尽量显示大小…...
【Linux网络与网络编程】09.传输层协议TCP
前言 TCP 即 传输控制协议 (Transmission Control Protocol),该协议要对数据的传输进行一个详细的控制(数据传输时什么时候传输,一次发多少,怎么发,出错了怎么办……) 本篇博客将从下面这张TCP协议格式图…...
08.unity 游戏开发-unity编辑器资源的导入导出分享
08.unity 游戏开发-unity编辑器资源的导入导出分享 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是Python基础语法。前后每一小节的内容是存在的有:学习and理解的关联性,希望对您有用~ unity简介…...
Docker Swarm 集群
Docker Swarm 集群 本文档介绍了 Docker Swarm 集群的基本概念、工作原理以及相关命令使用示例,包括如何在服务调度中使用自定义标签。本文档适用于需要管理和扩展 Docker 容器化应用程序的生产环境场景。 1. 什么是 Docker Swarm Docker Swarm 是用于管理 Docker…...
数据中台、数据湖和数据仓库 区别
1. 核心定义与定位 数据仓库(Data Warehouse) 定义:面向主题的、集成的、历史性且稳定的结构化数据集合,主要用于支持管理决策和深度分析。定位:服务于管理层和数据分析师,通过历史数据生成报表和商业智能…...
【CodeMirror】系列(二)官网示例(五)可撤销操作、拆分视图、斑马条纹
一、可撤销操作 默认情况下,history 历史记录扩展仅跟踪文档和选择的更改,撤销操作只会回滚这些更改,而不会影响编辑器状态的其他部分。 不过你也可以将其他的操作定义成可撤销的。如果把这些操作看作状态效果,就可以把相关功能整…...
SpringBoot 动态路由菜单 权限系统开发 菜单权限 数据库设计 不同角色对应不同权限
介绍 系统中的路由配置可以根据用户的身份、角色或其他权限信息动态生成,而不是固定在系统中。不同的用户根据其权限会看到不同的路由,访问不同的页面。对应各部门不同的权限。 效果 [{"id": 1,"menuName": "用户管理"…...
scikit-learn 开源框架在机器学习中的应用
文章目录 scikit-learn 开源框架介绍1. 框架概述1.1 基本介绍1.2 版本信息 2. 核心功能模块2.1 监督学习2.2 无监督学习2.3 数据处理 3. 关键设计理念3.1 统一API设计3.2 流水线(Pipeline) 4. 重要辅助功能4.1 模型选择4.2 评估指标 5. 性能优化技巧5.1 并行计算5.2 内存优化 6…...
GPT-4、Grok 3与Gemini 2.0 Pro:三大AI模型的语气、风格与能力深度对比
更新后的完整CSDN博客文章 以下是基于您的要求,包含修正后的幻觉率部分并保留原始信息的完整CSDN博客风格文章。幻觉率已调整为更符合逻辑的描述,其他部分保持不变。 GPT-4、Grok 3与Gemini 2.0 Pro:三大AI模型的语气、风格与能力深度对比 …...
Cyber Weekly #51
赛博新闻 1、英伟达开源新模型,性能直逼DeepSeek-R1 本周,英伟达开源了基于Meta早期Llama-3.1-405B-Instruct模型开发的Llama-3.1-Nemotron-Ultra-253B-v1大语言模型,该模型拥有2530亿参数,在多项基准测试中展现出与6710亿参数的…...
QT聊天项目开发DAY02
1.添加输入密码的保密性 LoginWidget::LoginWidget(QDialog*parent): QDialog(parent) {ui.setupUi(this);ui.PassWord_Edit->setEchoMode(QLineEdit::Password);BindSlots(); }2.添加密码的验证提示 3.修复内存泄漏,并嵌套UI子窗口到主窗口里面 之前并没有设置…...
Spring AI高级RAG功能查询重写和查询翻译
1、创建查询重写转换器 // 创建查询重写转换器queryTransformer RewriteQueryTransformer.builder().chatClientBuilder(openAiChatClient.mutate()).build(); 查询重写是RAG系统中的一个重要优化技术,它能够将用户的原始查询转换成更加结构化和明确的形式。这种转…...
速盾:高防CDN的原理和高防IP一样吗?
随着互联网的发展,网络安全威胁日益严重,尤其是DDoS攻击、CC攻击等恶意行为,给企业带来了巨大的风险。为了应对这些挑战,许多企业开始采用高防CDN(内容分发网络)和高防IP作为防御措施。尽管两者都能提供一定…...
SQLite-Web:一个轻量级的SQLite数据库管理工具
SQLite-Web 是一个基于 Web 浏览器的轻量级 SQLite 数据库管理工具。它基于 Python 开发,免费开源,无需复杂的安装或配置,适合快速搭建本地或内网的 SQLite 管理和开发环境。 SQLite-Web 支持常见的 SQLite 数据库管理和开发任务,…...
数智读书笔记系列028 《奇点更近》
一、引言 在科技飞速发展的今天,我们对未来的好奇与日俱增。科技将如何改变我们的生活、社会乃至人类本身?雷・库兹韦尔的《奇点更近》为我们提供了深刻的见解和大胆的预测,让我们得以一窥未来几十年的科技蓝图。这本书不仅是对未来科技趋势…...
深入理解linux操作系统---第4讲 用户、组和密码管理
4.1 UNIX系统的用户和组 4.1.1 用户与UID UID定义:用户身份唯一标识符,16位或32位整数,范围0-65535。系统用户UID为0(root)、1-999(系统服务),普通用户从1000开始分配特殊UID&…...
系统设计模块之安全架构设计(常见攻击防御(SQL注入、XSS、CSRF、DDoS))
一、SQL注入攻击防御 SQL注入是通过恶意输入篡改数据库查询逻辑的攻击方式,可能导致数据泄露或数据库破坏。防御核心在于隔离用户输入与SQL代码,具体措施包括: 参数化查询(预编译语句) 原理:将SQL语句与用…...
redission锁释放失败处理
redission锁释放失败处理 https://www.jianshu.com/p/055ae798547a 就是可以删除 锁的key 这样锁就释放了,但是 还是要结合业务,这种是 非正规的处理方式,还是要在代码层面进行处理。...