【优选算法】位运算
目录
- 常见位运算总结
- 1、基础位运算
- 2、给一个数n,确定它的二进制位的第x位上是0还是1
- 3、将一个数n的二进制位的第x位改成1
- 4、将一个数n的二进制位的第x位改成0
- 5、位图的思想
- 6、提取一个数n的二进制位中最右侧的1
- 7、将一个数n的二进制位中最右侧的1变为0
- 8、位运算的优先级
- 9、异或(^)运算的运算律
- 一、[位1的个数](https://leetcode.cn/problems/number-of-1-bits/description/)
- 二、[比特位计数](https://leetcode.cn/problems/counting-bits/description/)
- 三、[汉明距离](https://leetcode.cn/problems/hamming-distance/description/)
- 四、[只出现一次的数字](https://leetcode.cn/problems/single-number/description/)
- 五、[只出现一次的数字 III](https://leetcode.cn/problems/single-number-iii/description/)
- 六、[判定字符是否唯一](https://leetcode.cn/problems/is-unique-lcci/description/)
- 七、[丢失的数字](https://leetcode.cn/problems/missing-number/description/)
- 八、[两整数之和](https://leetcode.cn/problems/sum-of-two-integers/description/)
- 九、[只出现一次的数字 II](https://leetcode.cn/problems/single-number-ii/description/)
- 十、[消失的两个数字](https://leetcode.cn/problems/missing-two-lcci/description/)
- 结尾
常见位运算总结
1、基础位运算
左移操作符 >> 、右移操作符 << 、按位取反 ~ ,这三个操作符我不做讲解。
接下来讲解3个操作符以及它使用方法对应的记忆方法
按位与:& 有0就是0
按位或:| 有1就是1
按位异或:^ 相同为0相异为1/无进位相加
2、给一个数n,确定它的二进制位的第x位上是0还是1
首先我们认为一个整数有32位、它最低位是0位,它的最高位为31位,那么就可以使用(n >> x)&1
的操作来判断这个数的第x位是0还是1,因为n>>x能够将数字n上的第x位移动到第0位,1除了第0位上是1,其他位都是0,异或后结果只会出现第0位上为0/1其他位为0的情况,所以结果是0则数n二进制位的第x位上是0,是1则数n二进制位的第x位上是1。
3、将一个数n的二进制位的第x位改成1
首先我们认为一个整数有32位、它最低位是0位,它的最高位为31位,那么就可以使用n|=(1<<x)
的操作将数字n的二进制位的第x位改成1。1<<x能够将1的第x位变为1,异或后无论n上的第x位上是0是1都会变为1。
4、将一个数n的二进制位的第x位改成0
首先我们认为一个整数有32位、它最低位是0位,它的最高位为31位,那么就可以使用n&=(~(1<<x))
的操作将数字n的二进制位的第x位改成0。1<<x能够将1的第x位变为1,按位与后除了第x位上为0其他位上都为1,再与n按位与后,n中的第x位都会被0变为1,其他位都是与1按位与,则都不变。
5、位图的思想
位图的本质就是哈希表,我们在之前就学习过哈希表,哈希表很多情况下是数组,假设是一个int类型的数组,可以通过在数组中存储某些数组来表示某些意义,现在我们可以通过变量的比特位来表示某些信息,假设一个int类型的变量,一个int类型的变量有32位,其中的每一位存储的0/1都可以分别表示某种信息。
6、提取一个数n的二进制位中最右侧的1
首先我们认为一个整数有32位、它最低位是0位,它的最高位为31位,那么就可以使用n&-n
的操作提取一个数n的二进制位中最右侧的1。这里的-n
也就~n+1
,-n能够将最右侧1的左侧所有二进制数字变成相反的,+1能将右侧所有二进制数字变为0,按位与后就只剩下最右侧的1。
7、将一个数n的二进制位中最右侧的1变为0
首先我们认为一个整数有32位、它最低位是0位,它的最高位为31位,那么就可以使用n&(n-1)
的操作将一个数n的二进制位中最右侧的1变为0。-1能够将数字n最右侧1的左侧二进制数字变成相反的(包括它本身),按位与后右侧不变,左侧都不同则都变为0,就可将最右侧的1变为1。
8、位运算的优先级
位运算的优先级大家可以在其他文章中查看,这里建议大家能加括号就加括号。
9、异或(^)运算的运算律
a^0 = a
a^a = 0
a^b^c = a^(b^c)
一、位1的个数
题目描述:
思路讲解:
在上面常见位运算总结中讲到了如何将一个数的二进制位中最右侧的1修改为0,我们只需要重复这个操作,并记录这个操作的次数,当这个数变为0以后,操作次数就是这个数二进制位中1的个数。
编写代码:
class Solution {
public:int hammingWeight(int n) {int count = 0;while(n > 0){// 去掉最右侧的一n &= (n - 1);count++;}return count;}
};
二、比特位计数
题目描述:
思路讲解:
这题的思路与上一题的思路一致,只是上一题是获取一个数的二进制位中有多少个1,而本题是获取n个数的二进制位中有多少个1,本质上是一样的,这里不做过多讲解。
编写代码:
class Solution {
public:int hammingWeight(int n) {int count = 0;while(n > 0){// 去掉最右侧的1n &= (n - 1);count++;}return count;}vector<int> countBits(int n) {vector<int> ans;for(int i = 0 ; i <= n ;i++)ans.push_back(hammingWeight(i));return ans;}
};
三、汉明距离
题目描述:
思路讲解:
两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。所以我们只需要将两个数每个对应的二进制位上的数字获取并对比,记录
二进制位不同的位置的数目即可,我们在上面讲到过可以使用(n >> x)&1
的操作获取一个数的第x位上的二进制是0还是1。
编写代码:
class Solution {
public:int hammingDistance(int x, int y) {int count = 0;for(int i = 0 ; i <= 31 ;i++){if(((x >> i) & 1) != (((y >> i) & 1)))count++;}return count;}
};
四、只出现一次的数字
题目描述:
思路讲解:
在上面异或运算的运算律中我们讲到过a^a=0
和a^0=a
,本题中除了一个数只出现过一次,其他数都出现过两次,将所有的数异或在一起,出现过两次的数全部异或到一起就是0,出现过一次的数与0异或就是我们需要的结果。
编写代码:
class Solution {
public:int singleNumber(vector<int>& nums) {int val = 0;for(auto ch : nums){val ^= ch;}return val;}
};
五、只出现一次的数字 III
题目描述:
思路讲解:
在上面异或运算的运算律中我们讲到过a^a=0
和a^0=a
,本题中除了两个数只出现过一次,其他数都出现过两次,将所有的数异或在一起,就是两个只出现一次的数相异或的结果。两个数异或的结果的二进制位上有1就代表着两个数在当前位上一定是不同的,我们可以将两数异或结果上某一个1的位置标记,记为pos,将所以pos位上为1的数全部异或在一起,就能够得到其中一个答案,再将两数异或的结果与刚刚得到的一个答案异或,就能够得到另一个答案。
编写代码:
class Solution {
public:vector<int> singleNumber(vector<int>& nums) {vector<int> v;v.resize(2 , 0);int xor1 = 0;// 将所有数异或,可以得到需要的两个数的异或for(auto x : nums){xor1 ^= x;}// 我们知道,异或后的二进制位上的 1,// 必定是两个数对应二进制位上的一个,且只有一个 // 那我们只需要将某一位上的1的位置记录下来// 并且将数组遍历一遍,将这个位置上为1的数全部异或就能得到第一个数// 再将第一步中两个数的异或值与第一个数异或就能得到第二个数int pos = 0;for(int i = 0 ; i < 32 ;i++){if( ((xor1 >> i) & 1 ) == 1 ){pos = i;break;}}for(int i = 0 ; i < nums.size() ; i++){if(((nums[i] >> pos) & 1) == 1){v[0] ^= nums[i];}}v[1] = xor1 ^ v[0];return v;}
};
六、判定字符是否唯一
题目描述:
思路讲解:
本题最简单的思路就是建立一个数组,将每个字母出现的次数记录下来,当有一个字符出现两次就返回false,但是这样需要花费4*26个字节,而使用位图则只需要4个字节,一个int类型的变量就有32个比特位,将26位小写字母对应到其中的32个比特位中,当遍历到一个字符的时候,就查看对应比特位上是0/1,如果是1就返回false,是0就继续遍历字符串。
本题还有一个优化方案就是雀巢原理,小写字母一共有26个,当字符串的长度超过26时,说明一定有一个字母是出现过两次的。
编写代码:
class Solution {
public:bool isUnique(string astr) {// 优化 雀巢原理if(astr.size() > 26)return false;// 因为小写字母只有26个// 而int中有32个比特位// 那么这里使用位图来解决问题int tmp = 0;for(auto e : astr){if(((tmp >> (e - 'a')) & 1) == 1)return false;elsetmp |= (1 << (e - 'a'));}return true;}
};
七、丢失的数字
题目描述:
思路讲解:
本题最简单的思路就是建立一个大小为n的数组arr,遍历nums并在arr中标记,当nums遍历完后,再遍历arr查看哪个数字没有被标记就是答案,但是这个方法的缺点就是需要使用额外的空间复杂度。
还有可以使用高斯求和,得到0到n之间的数相加后的结果,减去nums中数组中所有数,就是本题的答案。
还可以使用位运算,上课讲到过a^a=0
和a^0=a
,将0到n中所有的数异或,再与nums数组中所有的数异或,就能够得到本题的答案。使用位运算可以将本题转化为上面只出现一次的数字的那道题。
编写代码:
class Solution {
public:int missingNumber(vector<int>& nums) {int ans = 0;int numsLen = nums.size();for(int i = 0 ; i <= numsLen ;i++)ans ^= i;for(auto e : nums)ans ^= e;return ans;}
};
八、两整数之和
题目描述:
思路讲解:
我们在记忆按位异或使用的时候,按位异或就是无进位相加,那么这里只缺少进位,进位我们可以通过按位与获得,但是需要注意的是获得的进位需要向左侧移动一位。我们将按位异或得到的无进位相加的结果记为tmp1,将按位与获得的进位记为tmp2,持续将tmp1与tmp2按位异或和按位与得到无进位相加与进位,只要当进位tmp2为0时,tmp1就是结果。
编写代码:
class Solution {
public:int getSum(int a, int b) {int tmp1 = (a & b)<<1; // 两数按位与后向右移动一位,代表着进位int ans = a ^ b; // 两数异或代表无进位相加while(tmp1 != 0){int tmp2 = tmp1; // 记录tmp1tmp1 = (tmp1 & ans)<<1; ans ^= tmp2;}return ans;}
};
九、只出现一次的数字 II
题目描述:
思路讲解:
题目中讲到了有一个数只出现过一次,其他的数都出现了三次,那么将所有数的二进制位罗列出来,那么将所有数对应每一位相加起来会出现两种情况:3n与3n+1,通过将3n与3n+1进行%3,就能得到0和1的结果,这里得到的1就是只出现过一次的数字对应比特位上的1,只需要将这些1组合到对应的比特位上,得到的数字就是结果。
同理给你一个整数数组 nums ,除某个元素仅出现一次外,其余每个元素都恰出现n次,都可以使用这个方法。
编写代码:
class Solution {
public:int singleNumber(vector<int>& nums) {int sum = 0; // 记录所有数字某个二进制位的和int num = 0; // 记录答案for(int i = 0 ; i < 32 ; i++){for(int ch : nums){// 将第i个位置上的二进制数字取出来相加sum += ((ch >> i)&1);}if(sum % 3 != 0){num |= (1 << i);}sum = 0;}return num;}
};
十、消失的两个数字
题目描述:
思路讲解:
本道题就是上面只出现一次的数字III和丢失的数字两道题的结合,只需要找到丢失两个数的按位异或的结果就可以使用只出现一次的数字III中的思路,分别得到两个数是哪两个数,这里就不做讲解。
编写代码:
class Solution {
public:vector<int> missingTwo(vector<int>& nums) {int tmp = 0;int numsLen = nums.size();for(int i = 1 ; i <= numsLen + 2; i++)tmp ^= i;for(auto e : nums)tmp ^= e;int lowbit = (tmp & -tmp);int ans1 = tmp;for(int i = 1 ; i <= numsLen + 2; i++)if((lowbit & i) == lowbit)ans1 ^= i;for(auto e : nums)if((lowbit & e) == lowbit)ans1 ^= e; int ans2 = (tmp ^ ans1);return {ans1,ans2};}
};
结尾
如果有什么建议和疑问,或是有什么错误,大家可以在评论区中提出。
希望大家以后也能和我一起进步!!🌹🌹
如果这篇文章对你有用的话,希望大家给一个三连支持一下!!🌹🌹
相关文章:
【优选算法】位运算
目录 常见位运算总结1、基础位运算2、给一个数n,确定它的二进制位的第x位上是0还是13、将一个数n的二进制位的第x位改成14、将一个数n的二进制位的第x位改成05、位图的思想6、提取一个数n的二进制位中最右侧的17、将一个数n的二进制位中最右侧的1变为08、位运算的优…...
2.mybatis整体配置
文章目录 mybatis-config.xml介绍SqlSessionFactoryBuilderXMLConfigBuilderpropertiessetting类型别名(typeAliases)扫描插件(plugins)解析objectFactory(对象工厂)解析objectWrapperFactory解析reflectorFactorysettingsElement()方法环境配置…...
js中判断数组和判断对象的方法
判断数组 Array.isArray() 方法 这是最推荐的方法,简单明了。它可以检测数组的情况,并且不会误报其他类型。 const arr [1, 2, 3]; console.log(Array.isArray(arr)); // trueconst notArray { key: value }; console.log(Array.isArray(notArray))…...
【godot】如何立刻(实时)进行碰撞检测?
因为最近在做帧同步方面的内容,所以发现了这个问题。 方案1:用Area2d进行碰撞检测,绑定body_entered信号。 缺陷: Area2d的碰撞检测只会每个物理迭代中只会执行一次,即在physics_process()结束后执行一次。 场景&a…...
讨论JAVA、JVM与Spring
Q1: 作为一个JAVA开发人员,对于jvm肯定不陌生,但很多人对它不陌生也仅止于概念上,而且对概念也是模糊不清的,但jvm实际是java程序运行在其中的实际存在的环境,对它的理解应该要是具象化的。 我们还是从一项技术产生的…...
基于SpringBoot实现的民宿管理系统(代码+论文)
🎉博主介绍:Java领域优质创作者,阿里云博客专家,计算机毕设实战导师。专注Java项目实战、毕设定制/协助 📢主要服务内容:选题定题、开题报告、任务书、程序开发、项目定制、论文辅导 💖精彩专栏…...
vue2 - 22.vant 组件库
vant 组件库 vant2下载: npm i vantlatest-v2 --legacy-peer-deps 目标:认识第三方 Vue组件库 vant-ui 组件库:第三方 封装 好了很多很多的 组件,整合到一起就是一个组件库。 https://vant-contrib.gitee.io/vant/v2/#/zh-CN…...
Git简单介绍
一、 Git介绍与安装 1.1 Git简介 Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 1.2集中式(SVN) VS 分布式(git) 集中式版本控制系统,版本库是集中存放在中央服务器的,工作时要先从中央…...
【ArcGIS Pro实操第11期】经纬度数据转化成平面坐标数据
经纬度数据转化成平面坐标数据 数据准备ArcGIS操作步骤-投影转换为 Sinusoidal1 投影2 计算几何Python 示例 另:Sinusoidal (World) 和 Sinusoidal (Sphere) 的主要区别参考 数据准备 数据投影: 目标投影:与MODIS数据相同(Sinu…...
六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序
本章讲述数据结构中的六大排序算法 欢迎大佬们踊跃讨论,感谢大家支持! 我的博客主页链接 六大排序算法 一.插入排序1.1 直接插入排序1.2 希尔排序 二.选择排序2.1 单向选择排序2.2双向选择排序2.3 堆排序 三.交换排序3.1 冒泡排序3.2 快速排序3.2.1 Hoa…...
量化交易系统开发-实时行情自动化交易-4.4.1.做市策略实现
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来继续说说做市策略实现。 做市策…...
Unity类银河战士恶魔城学习总结(P149 Screen Fade淡入淡出菜单)
【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了进入游戏和死亡之后的淡入淡出动画效果 UI_FadeScreen.cs 1. Animator 组件的引用 (anim) 该脚本通过 Animator 控制 UI 元…...
线上+线下≠新零售,6大互通诠释新零售的核心要点-亿发
新零售,这个词汇在近年来频繁出现在我们的视野中,它不仅仅是线上与线下的简单相加,而是一场深刻的商业变革。本文将通过6大互通的核心要点,为您揭示新零售的真正内涵。 1. 商品的互联互通 新零售模式下,商品的互联互…...
渗透测试学习笔记(一)渗透测试方法论
一.渗透测试方法论 渗透测试方法论是制定实施信息安全审计方案时,需要遵循的规则,惯例和过程。人们在评估网络,应用,系统或者三者组合的安全状态时,不断摸索各种实务的理念和成熟的做法,并总结了一套理论-…...
国外媒体发布新闻稿/海外媒体网站发稿创历史新潮流
国外媒体发布新闻稿/海外媒体网站发稿创历史新潮流 外媒发稿谷歌 SEO 优化经典案例冲出媒体宣发新高潮在当今数字化的时代,媒体宣发的重要性日益凸显。无论是企业品牌推广、产品发布,还是个人形象塑造,有效的媒体宣发都能带来巨大的影响力和…...
Three.js渲染较大的模型之解决方案
文章目录 Three.js渲染较大的模型 解决方案视锥体剔除实例 和 遮挡剔除 实例视锥体剔除(Frustum Culling)实例原理概述代码示例解释 遮挡剔除(Occlusion Culling)实例原理概述代码示例解释 three.js 模型压缩 Three.js渲染较大的模…...
webpack 项目访问静态资源
使用 webpack dev serve 启动 react 项目后,发现无法使用 http://localhost:8080/1.png 访问到项目的 /static 目录下的 1.png 文件。我的 webpack-dev.js 配置如下: const webpack require(webpack) const webpackMerge require(webpack-merge) cons…...
Day 25
491.递增子序列 力扣题目链接(opens new window) 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。 示例: 输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]] 说明: …...
【金猿案例展】无锡征信——百望云绿色金融数据要素+数据资产入表服务方案...
百望云数据要素案例 该数据要素项目案例由百望云投递并参与“数据猿年度金猿策划活动——2024数据要素产业年度创新服务企业榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 在数字化浪潮奔涌的时代,数据要素已成为驱动经济发展的关键引擎&…...
【C++】C++新增特性解析:Lambda表达式、包装器与绑定的应用
V可变参数模板与emplace系列 C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现…...
python学opencv|读取图像
【1】引言 前序学习了使用matplotlib模块进行画图,今天开始我们逐步尝试探索使用opencv来处理图片。 【2】学习资源 官网的学习链接如下: OpenCV: Getting Started with Images 不过读起来是英文版,可能略有难度,所以另推荐一…...
租辆酷车小程序开发(二)—— 接入微服务GRPC
vscode中golang的配置 设置依赖管理 go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct GO111MODULEauto 在$GOPATH/src 外面且根目录有go.mod 文件时,开启模块支持 GO111MODULEoff 无模块支持,go会从GOPATH 和 vendor 文件夹寻找包…...
leetcode 208. 实现 Trie (前缀树)
Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。 请你实现 Trie 类: Trie() 初始化前缀树对象…...
kafka进阶_3.消费消息
文章目录 一、消费消息概览1.1、消费示例代码1.2、消费过程 二、消费者组2.1、push & pull2.2、消费者组 三、调度器Coordinator四、消费者分配策略4.1、引言4.2、分配基本流程4.3、分配策略4.3.1、轮询分配策略4.3.2、轮询分配策略 五、消费偏移量5.1、起始偏移量5.2、指定…...
预测未来 | MATLAB实现Transformer时间序列预测未来
预测未来 | MATLAB实现Transformer时间序列预测未来 预测效果 基本介绍 1.Matlab实现Transformer时间序列预测未来; 2.运行环境Matlab2023b及以上,data为数据集,单变量时间序列预测; 3.递归预测未来数据,可以控制预…...
VirtualBox7.0.6安装配置
VirtualBox7.0.6安装配置 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 文章目录 VirtualBox7.0.6安装配置1.安装虚拟机1.1安装虚拟机的必要条件1.1.1开启虚拟化1.1.1.1检查虚拟化是否开启1.1.1.2 开启虚拟化 1.2 安装虚拟机1.1创建…...
Spring Boot英语知识分享网站:技术与实践
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
HarmonyOS4+NEXT星河版入门与项目实战(22)------动画(属性动画与显示动画)
文章目录 1、属性动画图解2、案例实现-小鱼移动游戏1、代码实现2、代码解释3、资源图片4、实现效果3、显示动画4、案例修改-显示动画5、总结1、属性动画图解 这里我们用一张完整的图来汇整属性动画的用法格式和使用的主要属性范围,如下所示: 2、案例实现-小鱼移动游戏 1、代…...
AI赋能公共服务转型升级 | 第十届中国行业互联网大会暨腾讯云TVP行业大使三周年庆典公共服务专场圆满举办!
引言 党的二十大报告把“基本公共服务实现均等化”作为 2035 年我国发展的总体目标之一,强调要“健全基本公共服务体系,提高公共服务水平”。AI 作为新质生产力的核心驱动力之一,正在公共服务领域发挥着越来越重要的作用。 2024 年 10 月 2…...
网络基础 - 地址篇
一、IP 地址 IP 协议有两个版本,IPv4 和 IPv6IP 地址(IPv4 地址)是一个 4 字节,32 位的正整数,通常使用 “点分十进制” 的字符串进行表示,例如 192.168.0.1,用点分割的每一个数字表示一个字节,范围是 0 ~…...
chrome允许http网站打开摄像头和麦克风
第一步 chrome://flags/#unsafely-treat-insecure-origin-as-secure 第二步 填入网址,点击启用 第三步 重启 Chrome:设置完成后,点击页面底部的 “Relaunch” 按钮,重新启动 Chrome 浏览器,使更改生效。...
uniapp前端开发,基于vue3,element plus组件库,以及axios通讯
简介 UniApp 是一个基于 Vue.js 的跨平台开发框架,旨在通过一次开发、编译后运行在多个平台上,如 iOS、Android、H5、以及小程序(微信小程序、支付宝小程序、百度小程序等)等。UniApp 为开发者提供了统一的开发体验,使…...
STM32-- 串口发送数据
while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)RESET);?? 答: 这行代码: while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) RESET);的作用是等待串口 USART2 的发送数据寄存器(TXE,Transmit Dat…...
网络安全提示
如果您是企业主或 IT 经理,您应该知道计算机安全的重要性。从保护密码安全的基础知识到网络钓鱼、恶意软件等的危险,本文将为您提供您需要了解的有关网络安全的信息。 每年,互联网都变得越来越大,这意味着我们为黑客和网络犯罪分…...
【计算机网络】多路转接之epoll
epoll也是一种linux中的多路转接方案(epoll也是只负责IO过程中的"等") 一、epoll相关接口的使用 1.epoll_create int epoll_create(int size); 功能:创建一个epoll模型 ① int size:没意义了 >0就行 返回值:返回一个文件…...
nextjs+nestjs+prisma写todolist全栈项目
技术栈 nextjsnestjsprisma所学知识 Nextjs组件渲染,状态,路由docker启动Mysql容器prisma操作Mysql(CRUD)允许跨域请求APITanStack Query异步状态管理fetch api服务器组件预请求数据nestjs 管道和异常处理检测id是否正整数Docker启动Mysql容器 compose.yml name: todoLis…...
重构代码之将双向关联改为单向关联
在代码重构中,双向关联改为单向关联是指将原本双向关联转变为单向关联。这种重构方式有助于简化对象模型和提高代码的可维护性,减少不必要的耦合。下面是对这个重构技巧的详细讲解。 一、为什么需要将双向关联改为单向关联? 减少耦合&#…...
Linux介绍与安装指南:从入门到精通
1. Linux简介 1.1 什么是Linux? Linux是一种基于Unix的操作系统,由Linus Torvalds于1991年首次发布。Linux的核心(Kernel)是开源的,允许任何人自由使用、修改和分发。Linux操作系统通常包括Linux内核、GNU工具集、图…...
深度学习中的正则化模型是什么意思?
一、定义 在深度学习中,正则化是一种用于防止过拟合的技术。过拟合是指模型在训练数据上表现非常好,但在新的、未见过的数据(测试数据)上表现很差的情况。正则化模型就是通过在损失函数中添加额外的项来约束模型的复杂度…...
rabbitMq两种消费应答失败处理方式
在rabbitMq消费端,有三种应答模式: none:不处理。即消息投递给消费者后立刻 ack 消息会立刻从MQ删除。非常不安全,不建议使用 manual:手动模式。需要自己在业务代码中调用api,发送 ack 或 rejectÿ…...
windows C#-使用反射访问特性
你可以定义自定义特性并将其放入源代码中这一事实,在没有检索该信息并对其进行操作的方法的情况下将没有任何价值。 通过使用反射,可以检索通过自定义特性定义的信息。 主要方法是 GetCustomAttributes,它返回对象数组,这些对象在…...
java中链表的数据结构的理解
在 Java 中,链表是一种常见的数据结构,可以通过类的方式实现自定义链表。以下是关于 Java 中链表的数据结构和实现方式的详细介绍。 1. 自定义链表结构 Java 中链表通常由一个节点类 (ListNode) 和可能的链表操作类构成。 节点类 (ListNode) 这是链表…...
ctfshow
1,web153 大小写绕过失败 使用.user.ini 来构造后⻔ php.ini是php的⼀个全局配置⽂件,对整个web服务起作⽤;⽽.user.ini和.htaccess⼀样是⽬录的配置⽂件,.user.ini就是⽤户⾃定义的⼀个php.ini,我们可以利⽤这个⽂件来构造后⻔和…...
【AI绘画】Midjourney进阶:色调详解(下)
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AI绘画 | Midjourney 文章目录 💯前言💯Midjourney中的色彩控制为什么要控制色彩?为什么要在Midjourney中控制色彩? 💯色调纯色调灰色调暗色调 💯…...
lanqiaoOJ 3747:繁忙的精神疗养院 ← STL queue
【题目来源】https://www.lanqiao.cn/problems/3747/learning/【题目描述】 心灵之园是一家知名的精神疗养院,为了提供更优质的服务,他们专门设立了一个 VIP 诊室和一个普通诊室。VIP 诊室主要接待特殊需求的高级会员,而普通诊室则服务所有的…...
Local Changes不展示,DevEco Studio的git窗口中没有Local Changes
DevEco Studio的git窗口中,没有Local Changes,怎么设置可以调出? 进入File-->Settings-->Version Control,将Use non-modal commit interface前的勾选框取消勾选,点击OK即可在打开git窗口,就可以看到…...
探索Python项目模板化的新纪元 —— Copier库揭秘
文章目录 **探索Python项目模板化的新纪元 —— Copier库揭秘**1. 背景介绍:为何Copier成为Python开发者的新宠?2. Copier究竟是什么?3. 如何安装Copier?4. 简单库函数使用方法创建模板从Git URL创建项目使用快捷方式动态文件生成…...
导入100道注会cpa题的方法,导入试题,自己刷题
一、问题描述 复习备考的小伙伴们,往往希望能够利用零碎的时间和手上的试题,来复习和备考 用一个能够导入自己试题的刷题工具,既能加强练习又能利用好零碎时间,是一个不错的解决方案 目前市面上刷题工具存下这些问题 1、要收费…...
使用NAS开启无纸化办公,Docker部署开源文档管理系统『Paperless-ngx』
使用NAS开启无纸化办公,Docker部署开源文档管理系统『Paperless-ngx』 哈喽小伙伴们好,我是Stark-C~ 对于文案类的办公场景来说,手头堆放最多的可能就是各种文档文件,以及各种用过的打印废纸。 这么多年来,不管是领…...
docker安装mysql
1.拉取mysql镜像 docker pull mysql:5.7 2.启动mysql容器 docker run -d -e MYSQL_ROOT_PASSWORD123456 -e MYSQL_TCP_PORT3307 -p 3307:3307 -v /SDXL/wjz/docker_mysql_log:/var/log/mysql -v /SDXL/wjz/docker_mysql_data:/var/lib/mysql -v /SDXL/wjz/docker_mysql_conf:/e…...