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

codetop字符串刷题,刷穿地心!!不再畏惧!!暴打面试官!!

主要供自己回顾与复习,题源codetop标签字符串+近半年,会不断更新

  • 1.有效的括号字符串
  • 2.括号生成
  • 3.最长单词
  • 4.字符串转换整数(atoi)
  • 5.整数转罗马数字
  • 6.罗马数字转整数
  • 7.比较版本号
  • 8.最长公共前缀
  • 9.面试题17.15.最长单词
  • 10.验证IP地址
  • 11.面试题01.06.字符串压缩

1.有效的括号字符串

给你一个只包含三种字符的字符串,支持的字符类型分别是 ‘(’、‘)’ 和 ‘*’。请你检验这个字符串是否为有效字符串,如果是 有效 字符串返回 true 。

‘*’ 可以被视为单个右括号 ‘)’ ,或单个左括号 ‘(’ ,或一个空字符串 “”。

与用栈判断有效括号字符串的区别在于,这里的*很灵活,可以被当做左括号也可以被当做右括号,甚至可以被当做空,所以(*))也是true的,因为*被当做左括号了。

这题的解法也比较特别,不需要栈,只需要遍历一遍,记录左括号最大和最小的可能性:
如果遇到的是(,那么左括号无论最大还是最小都要+1
如果遇到的是),那么左括号最小的情况,是要-1,抵消一个,最大的情况,也要-1,因为不管怎么样,)始终是要抵消掉一个左括号的,即便是*当作左括号的情况
如果遇到的是*,那么左括号最小就是*抵消掉他一个左括号,减一个,左括号最大,就是*没有抵消他,而是算在他这边,+1个。

最后,lo表示到当前字符为止最小可能的左括号数,如果最终 lo <= 0,表示所有的左括号都有匹配的右括号,或者多余的 ‘*’ 被当作空字符处理,因此返回 true。

class Solution {
public:bool checkValidString(string s) {int lo = 0, hi = 0;//表示最低可能的左括号数和最高可能的左括号数for(auto c : s){if(c == '('){lo++;hi++;}else if(c == ')'){lo = max(0, lo - 1);hi--;if(hi < 0) return false;}else{hi++;lo = max(0, lo - 1);//遇到*的时候,左括号最小的情况是有一个左括号被*抵消掉了}}return lo <= 0;}
};

2.括号生成

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
eg:
输入:n = 3
输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]

题目转换一下就是:现在有2n个位置,每个位置可以放置字符(或者),组成的所有括号组合中,由多少是合法的,这样听起来就很像回溯了,暴力穷举就可以了,合法的穷举需要满足以下两点:

  • 对于一个合法的括号组合的左括号数量一定等于右括号数量
  • 对于一个合法的括号字符串组合p,必然对于任何 0 <= i < size§ 都有:子串 p[0…i] 中左括号的数量都大于或等于右括号的数量。

因为从左往右计算的话肯定是左括号数量多,右括号逐步加多,最后相等,才能得到合法的括号组合嘛
用left记录还剩多少左括号,right记录还剩多少右括号

class Solution {
public:vector<string> generateParenthesis(int n) {if(n == 0) return {};vector<string> res;string path;backtrack(n, n, path, res);return res;}void backtrack(int left, int right, string& path, vector<string>& res){if(left > right) return;//不合法if(left < 0 || right < 0) return;//不合法if(left == 0 && right == 0){res.push_back(path);return;}path.push_back('(');backtrack(left - 1, right, path, res);path.pop_back();path.push_back(')');backtrack(left, right - 1, path, res);path.pop_back();}
};

3.最长单词

给定一个单词列表 words,要求找到其中的 最长单词,该单词可以由其他单词(也在 words 中)组合而成。如果有多个符合条件的单词,返回字典序最小的那个。如果没有符合要求的单词,返回空字符串。

和动态规划刷题那篇blog传送中的单词拆分很像,可以一起学。

主函数longestWord作用是匹配之后如果当前单词符合组合条件,我们需要和当前结果比较其长度;如果长度相同,还要判断字典序。
辅助函数isMatch作用是匹配
使用dp,dp[i]表示0~i-1是否可以被拆分为字典中其他单词的组合。
遍历word的每个位置 i:i 表示我们当前处理的子串的结尾位置,即我们正在考虑从 word 的第一个字如果确定dp[j] 是true,且 [j, i] 这个区间的子串出现在字典里,那么dp[i]一定是true。(j < i )。

要注意2点:

  • 第1点,单词拆分那一题没有newWord != word这个判断,因为两个题目的目的不一样,这个题目的word是从wordSet中拆出来的,单词拆分是给的另外一个词。
  • 第2点,j如果从1开始,那么substr就是(j - 1, i - (j - 1)),j如果从0开始,那么substr就是(j , i - j),总而言之j必须从1开始,这是为的dp的完整性
class Solution {
public:string longestWord(vector<string>& words) {string res = "";unordered_set<string> wordSet(words.begin(), words.end());for(const string& word : wordSet){if(isMatch(wordSet, word)){if(word.size() > res.size()) res = word;else if(word.size() == res.size() && word < res) res = word;}}return res;}bool isMatch(unordered_set<string>& wordSet, const string word){vector<bool> dp(word.size() + 1, false);dp[0] = true;for(int i = 1; i <= word.size(); i ++){for(int j = 0; j < i; j ++){string newWord = word.substr(j, i - j);if(newWord != word && wordSet.count(newWord) && dp[j]){dp[i] = true;break;}}}return dp[word.size()];}
};

4.字符串转换整数(atoi)

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数。

函数 myAtoi(string s) 的算法如下:

  1. 空格:读入字符串并丢弃无用的前导空格(" ")
  2. 符号:检查下一个字符(假设还未到字符末尾)为 ‘-’ 还是 ‘+’。如果两者都不存在,则假定结果为正。
  3. 转换:通过跳过前置零来读取该整数,直到遇到非数字字符或到达字符串的结尾。如果没有读取数字,则结果为0。
  4. 舍入:如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被舍入为 −231 ,大于 231 − 1 的整数应该被舍入为 231 − 1 。
    返回整数作为最终结果。
class Solution {
public:int myAtoi(string s) {int res = 0;int index = 0, sign = 1;//丢弃前导空格while(index < s.size() && s[index] == ' ') index++;//检查符号if(index < s.size()){if(s[index] == '-'){sign = -1;index ++;}else if(s[index] == '+') index++;}//转换数字while(index < s.size() && isdigit(s[index])){int digit = s[index] - '0';//舍入计算if(res > (INT_MAX - digit) / 10){return (sign == 1) ? INT_MAX : INT_MIN;}//res * 10 + digit > int_max -> res > (int_max - digit) / 10res = res * 10 + digit;index++;}return res * sign;}
};

5.整数转罗马数字

七个不同的符号代表罗马数字:
符号 值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
罗马数字是通过添加从最高到最低的小数位值的转换而形成的。将小数位值转换为罗马数字有以下规则:

  • 如果该值不是以 4 或 9 开头,请选择可以从输入中减去的最大值的符号,将该符号附加到结果,减去其值,然后将其余部分转换为罗马数字。
  • 如果该值以 4 或 9 开头,使用 减法形式,表示从以下符号中减去一个符号,例如 4 是 5 (V) 减 1 (I): IV ,9 是 10 (X) 减 1 (I):IX。仅使用以下减法形式:4 (IV),9 (IX),40 (XL),90 (XC),400 (CD) 和 900 (CM)。
  • 只有 10 的次方(I, X, C, M)最多可以连续附加 3 次以代表 10 的倍数。你不能多次附加 5 (V),50 (L) 或 500 (D)。如果需要将符号附加4次,请使用 减法形式。

给定一个整数,将其转换为罗马数字。

900,400,90,40单领出来是有必要的,因为900不是DCCCC,而是CM

class Solution {
public:string intToRoman(int num) {vector<pair<int, string>> valueSymbol = {{1000, "M"}, {900, "CM"}, {500, "D"}, {400, "CD"},{100, "C"}, {90, "XC"}, {50, "L"}, {40, "XL"},{10, "X"}, {9, "IX"}, {5, "V"}, {4, "IV"},{1, "I"}};string res = "";for(auto [value, symbol] : valueSymbol){while(num >= value){res += symbol;num -= value;}}return res;}
};

6.罗马数字转整数

在这里插入图片描述
4和9的特例用算法逻辑解决了,以IX为例,遍历到I的时候,发现 I 为 1,小于后续的 X 值为 10,所以执行减法,接下来遍历至X没有发现后续字符,或者X大于等于任何可能的后序字符,所以加上 X 的值。

class Solution {
public:int romanToInt(string s) {unordered_map<char, int> symbolTovalue{{'M', 1000}, {'D', 500}, {'C', 100}, {'L', 50}, {'X', 10}, {'V', 5},{'I', 1}};int res = 0;for(int i = 0; i < s.size(); i ++){int value = symbolTovalue[s[i]];if(i + 1 < s.size() && value < symbolTovalue[s[i + 1]]){res -= value;}else{res += value;}}return res;}
};

7.比较版本号

给你两个 版本号字符串 version1 和 version2 ,请你比较它们。版本号由被点 ‘.’ 分开的修订号组成。修订号的值 是它 转换为整数 并忽略前导零。

比较版本号时,请按 从左到右的顺序 依次比较它们的修订号。如果其中一个版本字符串的修订号较少,则将缺失的修订号视为 0。
返回规则如下:

  • 如果 version1 < version2 返回 -1,
  • 如果 version1 > version2 返回 1,
  • 除此之外返回 0。

eg1:
输入:version1 = “1.01”, version2 = “1.001”
输出:0
解释:忽略前导零,“01” 和 “001” 都代表相同的整数 “1”。
eg2:
输入:version1 = “1.0”, version2 = “1.0.0.0”
输出:0
解释:version1 有更少的修订号,每个缺失的修订号按 “0” 处理。

双指针做法,将两个字符串转换成整数

class Solution {
public:int compareVersion(std::string version1, std::string version2) {int i = 0, j = 0;int len1 = version1.size(), len2 = version2.size();while (i < len1 || j < len2) {// 获取 version1 中的下一个修订号int num1 = 0;while (i < len1 && version1[i] != '.') {num1 = num1 * 10 + (version1[i] - '0');i++;}i++; // 获取 version2 中的下一个修订号int num2 = 0;while (j < len2 && version2[j] != '.') {num2 = num2 * 10 + (version2[j] - '0');j++;}j++; // Skip the dot in version2// 比较两个修订号if (num1 > num2) return 1;if (num1 < num2) return -1;}return 0;}
};

8.最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。

输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”

把字符串列表看成一个二维数组,然后用一个嵌套 for 循环计算这个二维数组前面有多少列的元素完全相同即可。

class Solution {
public:string longestCommonPrefix(vector<string>& strs) {int minLen = strs[0].size();for(string str : strs){if(str.size() < minLen) minLen = str.size();}int n = strs.size();//行string res = "";for(int i = 0; i < minLen; i ++){char curStr = strs[0][i];for(int j = 1; j < n; j ++){if(strs[j][i] != curStr) return res;}res += curStr;}return res;}
};

9.面试题17.15.最长单词

给定一组单词words,编写一个程序,**找出其中的最长单词,且该单词由这组单词中的其他单词组合而成。**若有多个长度相同的结果,返回其中字典序最小的一项,若没有符合要求的单词则返回空字符串。

输入: [“cat”,“banana”,“dog”,“nana”,“walk”,“walker”,“dogwalker”]
输出: “dogwalker”
解释: "dogwalker"可由"dog"和"walker"组成。

class Solution {
public:string longestWord(vector<string>& words) {if (words.empty() || words.size() <= 1) {return "";}unordered_set<string> wordSet(words.begin(), words.end());string res = "";for (const string& word : wordSet) {if (isMatch(wordSet, word)) {if (word.length() > res.length()) {res = word;} else if (word.length() == res.length() && word < res) {res = word;}}}return res;}private:bool isMatch(const unordered_set<string>& wordSet, const string& word) {vector<bool> dp(word.length() + 1, false);dp[0] = true;for (int i = 1; i <= word.length(); ++i) {for (int j = 1; j <= i; ++j) {string cur = word.substr(j - 1, i - (j - 1));if (cur != word && wordSet.count(cur) && dp[j - 1]) {dp[i] = true;break;  // 找到一个有效的组合即可退出当前循环}}}return dp[word.length()];}
};

10.验证IP地址


正则表达式

#include <regex>
#include <string>using namespace std;class Solution {
public:bool ipv4(const string& ip) {regex pattern("(^((25[0-5]|2[0-4][0-9]|1\\d\\d|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1\\d\\d|[1-9][0-9]|[0-9])$)");return regex_match(ip, pattern);}bool ipv6(const string& ip) {regex pattern("(^([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}$)");return regex_match(ip, pattern);}string validIPAddress(const string& queryIP) {if (ipv4(queryIP)) return "IPv4";else if (ipv6(queryIP)) return "IPv6";else return "Neither";}
};

11.面试题01.06.字符串压缩

利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。

  • 遍历字符串,使用计数器记录每个连续字符的出现次数。
  • 当遇到不同字符时,将之前的字符以及计数拼接到结果字符串中。
  • 如果遍历到最后一个字符,将最后的字符及其计数添加到结果。
  • 最后,比较压缩后的字符串长度和原始字符串长度,返回长度短的那个。
class Solution {
public:string compressString(string s) {if(s.empty()) return s;  // 空字符串的处理int count = 1;string res = "";for(int i = 1; i < s.size(); i ++){if(s[i] == s[i - 1]){// 当前字符和前一个字符相同,计数加1count ++;}else{// 当前字符和前一个字符不同,将前一个字符及其计数添加到结果res += s[i - 1];// 添加字符res += to_string(count);// 添加计数count = 1;// 重置计数}}//处理最后一个字符串res += s[s.size() - 1];// 添加最后一个字符res += to_string(count);// 添加最后一个字符的计数// 如果压缩后的字符串长度不小于原字符串长度,返回原字符串return res.size() < s.size() ? res : s;}
};

相关文章:

codetop字符串刷题,刷穿地心!!不再畏惧!!暴打面试官!!

主要供自己回顾与复习&#xff0c;题源codetop标签字符串近半年&#xff0c;会不断更新 1.有效的括号字符串2.括号生成3.最长单词4.字符串转换整数(atoi)5.整数转罗马数字6.罗马数字转整数7.比较版本号8.最长公共前缀9.面试题17.15.最长单词10.验证IP地址11.面试题01.06.字符串…...

快速体验Linux发行版:DistroSea详解与操作指南

DistroSea 是一个功能强大的在线平台&#xff0c;允许用户在无需下载或安装的情况下&#xff0c;通过浏览器直接测试多种Linux和BSD发行版。该平台非常适合Linux爱好者、系统管理员和开发者&#xff0c;提供一个简便的方式来体验各种操作系统而无需影响本地设备。 为什么选择D…...

Java设计模式—面向对象设计原则(二) --------> 里氏代换原则 LSP (完整详解,附有代码+案列)

文章目录 里氏代换原则3.2.1 概述3.2.2 改进上述代码 里氏代换原则 里氏代换原则&#xff1a;Liskov Substitution Principle&#xff0c;LSP 3.2.1 概述 里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则&#xff1a;任何基类可以出现的地方&#xff0c;子类一定…...

使用ShardingSphere实现MySql的分库分表

目录 一 什么是ShardingSphere分库分表 二 代码实现 1.导入相关依赖 2.配置相关参数 3.创建学生类以及mapper接口 4.实现 StandardShardingAlgorithm接口自定义分片算法 唐洋洋我知道你在看!!!嘿嘿 一 什么是ShardingSphere分库分表 我们平时在设计数据库的时候&#xf…...

为什么 Feign 要用 HTTP 而不是 RPC?

一、引言 在现代微服务架构中&#xff0c;服务之间的通信是至关重要的环节。Feign 是一种常用的声明式 HTTP 客户端工具&#xff0c;它简化了服务间的调用过程。然而&#xff0c;在服务通信的领域中&#xff0c;除了基于 HTTP 的方式&#xff0c;还有 RPC&#xff08;Remote Pr…...

OJ在线评测系统 前端开发设计优化通用菜单组件二 调试用户自动登录

通用的菜单组件开发二 接下来要完善 权限功能 就是只有登录后才能进入题目查看界面 用户只能看到我们有权限的菜单 我们要在路由文件里面去操作 原理是控制路由设置隐藏 只要用户没有权限 就过滤掉隐藏 全局权限管理 实现想清楚有那些权限 /*** 权限定义*/ const ACCES…...

mongodb 安装教程

mongodb 安装教程&#xff1a; https://blog.51cto.com/u_13646338/5449015 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.9.tgz tar -zxvf mongodb-linux-x86_64-rhel70-5.0.9.tgz -C /opt/module/ [roothadoop102 module]# mv mongodb-linux-…...

切换淘宝最新镜像源npm

要切换淘宝的npm镜像源&#xff0c;可以按照以下步骤进行&#xff1a; 1. 打开命令行工具&#xff08;如Terminal、CMD等&#xff09;。 2. 输入以下命令来查看当前的npm镜像源&#xff1a; npm config get registry 3. 如果当前的镜像源不是淘宝镜像源&#xff…...

SpringAI-基于java大模型的胡言乱语

最近看了一点相关的springAI知识&#xff0c;做个小总结 胡言乱语开始 1.不同的ai调用api一般单独汇总成一个依赖&#xff0c;比如说调用openai的api的依赖是spring-ai-openai-spring-boot-starter。 2.最常用的展示方式是流式对话&#xff0c;AI的数据是一个字一个字生成的…...

python提问及解析

在看答案之前&#xff0c;可以先试试自己做哦&#xff01; 1.图书馆借书还书系统 问题描述 问题&#xff1a;设计一个Python程序&#xff0c;该程序模拟一个大型图书馆的图书管理系统。图书馆拥有成千上万的书籍&#xff0c;每本书都有一个唯一的ISBN号、书名、作者、出版年份…...

从Apple Intelligence到IoT Intelligence,端侧生成式AI时代加速到来

9月10日凌晨1点&#xff0c;苹果新品发布会如期举行&#xff0c;全新iPhone16系列成为苹果生态中真正意义上的第一款原生AI手机&#xff0c;在第二代3nm工艺A18和A18 Pro芯片的加持下&#xff0c;iPhone16系列能够容纳并快速运行以Apple Intelligence为中心的生成式AI功能在手机…...

智能AC管理系统HTTPD-AC 1.0服务存在未授权访问漏洞

@[toc] 智能AC管理系统HTTPD-AC 1.0服务存在未授权访问漏洞 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途…...

Sidewalk介绍

目录 1 前言2 简介2.1 注意事项 3 结束语 1 前言 Sidewalk是Amazon出的一个针对IoT物联网的协议&#xff0c;类似于LoRaWAN协议&#xff0c;针对小而美的低功耗设备。Amazon Sidewalk支持低带宽和远程连接&#xff0c;使用BLE进行短距离通信&#xff0c;使用900MHz的频率的LoR…...

Java数据结构 (泛型第二节) 泛型擦除机制/泛型的限制/上界下界

书接上回&#xff1a;Java数据结构 (泛型第一节) 为什么要有泛型/泛型语法/泛型方法-CSDN博客 访问作者Github: https://github.com/Joeysoda/Github_java/blob/main/20240908%E6%B3%9B%E5%9E%8B/src/%E6%B3%9B%E5%9E%8B.java 目录 1. 为什么要有擦除机制&#xff1f; 2. 类…...

数据安全标准在非结构化数据中台的遵守

在数字化转型的浪潮中&#xff0c;非结构化数据中台作为企业数据管理的核心枢纽&#xff0c;承载着海量且多样的数据资产。这些数据不仅关乎企业的运营决策&#xff0c;更涉及客户隐私、商业机密等敏感信息。因此&#xff0c;确保非结构化数据中台遵守数据安全标准&#xff0c;…...

探索Go语言中的Goroutine并发机制

什么是Goroutine 在Go语言中,Goroutine 是程序中最基本的并发单位。事实上,每个Go程序都会自动创建一个goroutine,那就是主goroutine,程序启动时会立即执行。Goroutine是Go语言中处理并发问题的核心工具,因此理解它的工作原理至关重要。 简而言之,Goroutine是并发执行的…...

实现实时Web应用,使用AJAX轮询、WebSocket、还是SSE呢??

文章目录 短轮询&#xff08;Short Polling&#xff09;长轮询&#xff08;Long Polling&#xff09;Comet “服务器推” &#xff08;这玩意现在用的很少了&#xff0c;了解一下即可&#xff09;WebSocket原理&#xff1a;方法&#xff1a;事件&#xff1a; SSE原理事件 总结 …...

3GPP协议入门——物理层基础(一)

1. 频段/带宽 NR指定了两个频率范围&#xff0c;FR1&#xff1a;通常称Sub 6GHz&#xff0c;也称低频5G&#xff1b;FR2&#xff1a;通常称毫米波&#xff08;Millimeter Wave&#xff09;&#xff0c;也称高频5G。 2. 子载波间隔 NR中有15kHz&#xff0c;30kHz&#xff0c;6…...

关于Java数据结构中集合的一个小知识

在我们以后刷题的过程&#xff0c;我们会遇到一些奇怪的集合数据类型。 如下图 这里&#xff0c;我们以顺序表的集合类为例&#xff0c;我们看到上图函数的返回值类型有点奇怪&#xff0c;其实并不奇怪&#xff0c;也就是穿过去的参数类型是一个顺序表的集合类型&#xff0c;也…...

leetcode41. 缺失的第一个正数,原地哈希表

leetcode41. 缺失的第一个正数 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 解释&#xf…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...