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

《AI大模型趣味实战》第6集:基于大模型和RSS聚合打造个人新闻电台

《AI大模型趣味实战》第6集:基于大模型和RSS聚合打造个人新闻电台

摘要

本文将带您探索如何结合AI大模型和RSS聚合技术,打造一个功能丰富的个人新闻电台系统。我们将使用Python和PyQt5构建一个桌面应用程序,该应用可以从多个RSS源抓取新闻,使用大模型进行内容优化和标签生成,并通过语音播报功能将文字新闻转化为语音广播。本项目融合了爬虫、自然语言处理、数据库存储和语音合成等多种技术,是一个非常实用且有趣的AI应用实例。
完整代码仓 https://github.com/wyg5208/rss_news_boke
在这里插入图片描述

核心概念和知识点

1. 项目架构概述

我们的RSS新闻电台系统由以下几个核心模块组成:

  • RSS抓取模块:负责从各种新闻源获取最新内容
  • 内容提取模块:使用多种策略从HTML页面中提取新闻正文
  • 大模型优化模块:利用Ollama本地大模型精炼内容、去除广告
  • 标签生成模块:基于大模型分析新闻内容并生成分类标签
  • 数据存储模块:使用SQLite数据库保存新闻和标签信息
  • 语音播报模块:将新闻转化为语音进行播报
  • 定时任务模块:实现定时抓取和播报功能

2. 环境设置与依赖安装

首先,我们需要安装必要的依赖包:

# requirements.txt
beautifulsoup4==4.13.3
feedparser==6.0.10
requests==2.31.0
selenium==4.15.2
webdriver-manager==4.0.1
lxml==4.9.3
ollama==0.1.5
PyQt5==5.15.9
schedule==1.2.1
pyttsx3==2.90

安装依赖包:

pip install -r requirements.txt

此外,确保安装了Ollama并拉取GLM4模型:

# 安装Ollama (按官方文档步骤)
# 启动Ollama服务
ollama serve
# 拉取GLM4模型
ollama pull glm4:latest

3. 大模型正文优化实现

大模型在新闻内容处理中扮演着关键角色。传统的HTML解析往往无法准确区分正文与广告、导航等无关内容。通过大模型,我们实现了智能内容精炼:

def refine_content_with_llm(title, description, raw_content):"""使用大模型精炼新闻正文内容,去除广告和无关信息"""try:if not raw_content or len(raw_content) < 200:return raw_content# 如果原始内容过长,截取适当长度content_for_processing = raw_content[:8000] if len(raw_content) > 8000 else raw_content# 准备提示词prompt = f"""请帮我提取以下网页内容中的新闻正文,清除广告、导航栏、版权声明等非核心内容。标题: {title}
描述: {description}
原始内容:
{content_for_processing}请按以下规则处理:
1. 只保留与新闻主题相关的正文内容
2. 移除所有广告、推荐阅读、社交媒体链接等无关内容
3. 移除网站导航、页脚版权信息等
4. 保持原文的段落结构
5. 如果找不到明确的正文,返回最有可能的主要内容
6. 直接返回处理后的纯文本,不要添加额外说明处理后的正文:
"""# 调用大模型进行内容处理response = ollama.chat(model='glm4:latest', messages=[{'role': 'user','content': prompt}])refined_content = response['message']['content']# 如果结果不合理,回退到原始内容if not refined_content or len(refined_content) < 100 or len(refined_content) > len(raw_content) * 1.5:print(f"大模型内容提取结果不合理,回退到原始内容处理")return raw_contentreturn refined_contentexcept Exception as e:print(f"使用大模型精炼内容失败: {str(e)}")return raw_content  # 出错时回退到原始内容

4. 大模型标签生成

除了内容优化,我们还利用大模型进行智能标签生成,帮助用户更好地分类和筛选新闻:

def generate_tags(self, title, description, content):try:# 获取标签库中的所有标签library_tags = self.get_library_tags()# 构建提示,让模型识别已有标签并建议新标签prompt = f"""请分析以下新闻内容,从标签库中选择最多5个相关标签,并在需要时建议最多2个新标签。标题: {title}描述: {description}内容概要: {content[:500]}...标签库中的现有标签:{', '.join(library_tags)}请按以下JSON格式返回:{{"existing_tags": ["已有标签1", "已有标签2", ...],"new_tags": ["新标签1", "新标签2"]}}"""response = ollama.chat(model='glm4:latest', messages=[{'role': 'user','content': prompt}])result = response['message']['content']# 提取JSON内容(可能需要从markdown代码块中提取)json_match = re.search(r'```json\s*(.*?)\s*```', result, re.DOTALL)if json_match:result = json_match.group(1)else:# 尝试直接解析JSONjson_match = re.search(r'({.*})', result, re.DOTALL)if json_match:result = json_match.group(1)try:tags_data = json.loads(result)# 处理现有标签existing_tags = tags_data.get("existing_tags", [])# 处理新标签并添加到标签库new_tags = tags_data.get("new_tags", [])for tag in new_tags:self.add_to_library(tag)# 合并所有标签all_tags = existing_tags + new_tags# 更新标签使用频率self.update_tag_frequency(all_tags)return all_tagsexcept json.JSONDecodeError:# 回退到基于关键词的标签生成return self.match_tags_from_library(title + " " + description)except Exception as e:print(f"生成标签失败: {str(e)}")# 回退到简单的标签匹配return self.match_tags_from_library(title + " " + description)

5. 语音播报功能

将文字转化为语音是本项目的核心功能之一,使用pyttsx3库实现:

class NewsBroadcaster:def __init__(self):"""初始化语音引擎"""self.engine = pyttsx3.init()# 设置默认语速和音量self.engine.setProperty('rate', 150)  # 语速self.engine.setProperty('volume', 0.8)  # 音量# 尝试设置中文语音voices = self.engine.getProperty('voices')for voice in voices:if "chinese" in voice.id.lower() or "zh" in voice.id.lower():self.engine.setProperty('voice', voice.id)breakdef broadcast(self, text):"""播报文本内容"""self.engine.say(text)self.engine.runAndWait()def broadcast_news(self, news_items):"""播报新闻列表"""if not news_items:self.broadcast("没有找到可播报的新闻")returnself.broadcast("开始播报今日新闻")time.sleep(1)for i, news in enumerate(news_items):# 播报标题self.broadcast(f"第{i+1}条新闻")self.broadcast(f"标题: {news['title']}")# 播报来源self.broadcast(f"来源: {news['source']}")# 播报摘要if news['description']:self.broadcast("新闻摘要:")self.broadcast(news['description'])# 间隔time.sleep(1)self.broadcast("新闻播报完毕")

6. 定时任务管理

通过schedule库实现定时抓取和播报功能:

class ScheduleManager:_instance = None_running = False_thread = None_fetch_tasks = {}  # 存储抓取任务_broadcast_tasks = {}  # 存储播报任务@classmethoddef get_instance(cls):if cls._instance is None:cls._instance = ScheduleManager()return cls._instancedef start(self):"""启动定时任务线程"""if not self._running:self._running = Trueself._thread = threading.Thread(target=self._run_scheduler, daemon=True)self._thread.start()def _run_scheduler(self):"""运行定时器"""while self._running:schedule.run_pending()time.sleep(1)# 添加月度任务示例def add_broadcast_task(self, task_id, schedule_type, value, time_value, app_instance, count=5):"""添加新闻播报定时任务"""# 先删除同ID的旧任务self.remove_broadcast_task(task_id)# 创建新任务job = Noneif schedule_type == "每天":job = schedule.every().day.at(time_value).do(app_instance.start_news_broadcast, count)elif schedule_type == "每周":days = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]day_attr = getattr(schedule.every(), days[value-1])job = day_attr.at(time_value).do(app_instance.start_news_broadcast, count)elif schedule_type == "每月":# 智能月度任务实现 - 使用每日检查日期方法def monthly_broadcast_job():# 仅在每月特定日期运行if datetime.now().day == value:app_instance.start_news_broadcast(count)job = schedule.every().day.at(time_value).do(monthly_broadcast_job)if job:self._broadcast_tasks[task_id] = jobreturn Truereturn False

疑难点和技术突破

1. 多层内容提取策略

一个主要的挑战是如何从各类网站中提取有效的新闻内容。我们采用了多层内容提取策略,结合传统爬虫和大模型:

def extract_content(url, use_selenium=False):# 第一层:尝试使用Selenium提取(处理动态内容)if use_selenium:try:return RSSParser.extract_with_selenium(url)except Exception as e:print(f"Selenium提取失败: {url}, 错误: {str(e)}")# 回退到普通提取# 第二层:使用requests+BeautifulSoup提取try:# 添加用户代理头,模拟Chrome浏览器headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...',# 其他请求头...}response = requests.get(url, headers=headers, timeout=15)response.raise_for_status()# 检测并处理页面编码if response.encoding == 'ISO-8859-1':response.encoding = response.apparent_encodingsoup = BeautifulSoup(response.text, 'html.parser')# 移除脚本、样式和其他非内容元素for element in soup(['script', 'style', 'nav', 'header', 'footer', 'aside', 'form', 'iframe']):element.extract()# 多种策略提取内容content = ""# 策略1: 尝试找到常见的文章容器article_containers = soup.find_all(['article', 'main', 'div'], class_=lambda x: x and any(term in str(x).lower() for term in ['article', 'content', 'post', 'entry', 'main', 'text', 'body']))if article_containers:# 使用最大的容器largest_container = max(article_containers, key=lambda x: len(str(x)))content = largest_container.get_text(separator='\n', strip=True)# 策略2: 尝试找长段落if not content or len(content) < 200:paragraphs = soup.find_all('p')# 筛选长段落 (可能是正文)long_paragraphs = [p.get_text(strip=True) for p in paragraphs if len(p.get_text(strip=True)) > 60]if long_paragraphs:content = '\n\n'.join(long_paragraphs)# 第三层:如上述方法都失败,则在主函数中会尝试使用大模型优化return contentexcept Exception as e:print(f"提取内容失败: {url}, 错误: {str(e)}")# 如果普通提取失败但还没尝试过Selenium,则尝试Seleniumif not use_selenium:try:return RSSParser.extract_with_selenium(url)except Exception as selenium_error:print(f"Selenium备选提取也失败: {url}, 错误: {str(selenium_error)}")return f"内容提取失败: {str(e)}"

2. WebDriver资源管理

在使用Selenium时,一个常见问题是浏览器资源未正确释放。我们通过单例模式解决这一问题:

class WebDriverManager:_instance = None_driver = None@classmethoddef get_instance(cls):if cls._instance is None:cls._instance = WebDriverManager()return cls._instancedef get_driver(self):"""获取或创建WebDriver实例"""if self._driver is None:try:service = Service(ChromeDriverManager().install())options = webdriver.ChromeOptions()options.add_argument("--headless")  # 无头模式options.add_argument("--disable-gpu")options.add_argument("--disable-extensions")options.add_argument("--disable-dev-shm-usage")options.add_argument("--no-sandbox")self._driver = webdriver.Chrome(service=service, options=options)print("已初始化WebDriver")except Exception as e:print(f"初始化WebDriver失败: {e}")raisereturn self._driverdef close_driver(self):"""关闭WebDriver释放资源"""if self._driver:try:self._driver.quit()except Exception as e:print(f"关闭WebDriver出错: {e}")finally:self._driver = Noneprint("已释放WebDriver资源")

3. 智能月度任务实现

在实现月度定时任务时,我们采用了一种创新的方法,通过每日检查当前日期来执行月度任务:

# 月度任务实现
def monthly_job():# 仅在每月特定日期运行if datetime.now().day == value:app_instance.start_fetch_scheduled()
job = schedule.every().day.at(time_value).do(monthly_job)

4. 链接去重机制

为了避免重复处理相同的新闻,我们实现了高效的链接去重机制:

def link_exists(self, link):"""检查链接是否已存在于数据库中"""conn = sqlite3.connect(self.db_path)cursor = conn.cursor()try:cursor.execute("SELECT id FROM news WHERE link = ?", (link,))result = cursor.fetchone()return result is not Noneexcept Exception as e:print(f"检查链接存在性失败: {e}")return Falsefinally:conn.close()# 在抓取线程中使用
if self.db.link_exists(link):self.update_signal.emit(f"已跳过(数据库中已存在): {title}")continue

完整代码实战

下面通过一个完整的流程示例,展示如何从RSS源抓取新闻、优化内容、生成标签并播报:

def run(self):total = len(self.rss_urls)total_processed = 0total_new = 0for i, url in enumerate(self.rss_urls):try:self.update_signal.emit(f"正在处理 ({i+1}/{total}): {url}")feed = self.parser.get_feed(url)if not feed:continuesource = feed.feed.title if hasattr(feed.feed, 'title') else urlprocessed = 0new_added = 0for entry in feed.entries[:100]:  # 每个源最多处理100条新闻title = entry.title if hasattr(entry, 'title') else "无标题"link = entry.link if hasattr(entry, 'link') else ""description = entry.description if hasattr(entry, 'description') else ""pub_date = entry.published if hasattr(entry, 'published') else ""if not link:continueprocessed += 1total_processed += 1# 检查链接是否已存在于数据库中if self.db.link_exists(link):self.update_signal.emit(f"已跳过(数据库中已存在): {title}")continueself.update_signal.emit(f"正在提取: {title}")# 提取正文内容,根据选项使用Seleniumraw_content = self.parser.extract_content(link, self.use_selenium)# 根据选项使用大模型精炼内容content = raw_contentif self.use_llm:self.update_signal.emit(f"正在使用大模型优化正文: {title}")content = self.parser.refine_content_with_llm(title, description, raw_content)# 生成标签self.update_signal.emit(f"正在生成标签: {title}")tags = self.tag_generator.generate_tags(title, description, content)# 保存到数据库if self.db.add_news(title, link, description, content, source, pub_date, tags):new_added += 1total_new += 1time.sleep(1)  # 避免过快请求self.update_signal.emit(f"完成 {url}: 处理 {processed} 条新闻,新增 {new_added} 条")self.news_added_signal.emit(processed, new_added)except Exception as e:self.update_signal.emit(f"处理RSS出错: {url}, 错误: {e}")self.update_signal.emit(f"抓取完成: 共处理 {total_processed} 条新闻,新增 {total_new} 条")self.finished_signal.emit()

播报新闻实例:

def start_news_broadcast(self, count=5):"""开始新闻播报"""self.log_message(f"开始新闻播报,播报{count}条最新新闻")# 获取最新的新闻news_list = self.db.get_latest_news(count)if not news_list:self.log_message("没有找到可播报的新闻")return# 使用单独线程进行播报,避免UI卡顿broadcast_thread = threading.Thread(target=self.broadcaster.broadcast_news,args=(news_list,),daemon=True)broadcast_thread.start()# 记录播报内容for i, news in enumerate(news_list):self.log_message(f"播报第{i+1}条: {news['title']} - {news['source']}")

运行效果

*图1: RSS新配置界面 *
在这里插入图片描述

*图2: 标签管理界面 *
在这里插入图片描述
*图3: 标签过滤管理界面 *
在这里插入图片描述
*图4: 定时播报管理界面 *
在这里插入图片描述

需要完整代码请私信

总结与扩展思考

项目总结

本项目成功实现了一个融合AI大模型的RSS新闻聚合与播报系统,具有以下特点:

  1. 多层内容提取:结合传统爬虫和大模型,提高内容提取的准确性
  2. 智能内容优化:使用大模型去除广告和无关内容,提升阅读体验
  3. 自动标签生成:利用大模型理解新闻内容,自动生成相关标签
  4. 语音播报功能:将文字转化为语音,打造个人专属新闻电台
  5. 定时任务管理:实现定时抓取和播报,保持内容更新
  6. 高效资源管理:采用单例模式管理浏览器资源,确保资源正确释放
  7. 多线程设计:避免UI卡顿,提升用户体验

扩展思考

本项目还有许多可扩展的方向:

  1. 个性化推荐:基于用户阅读历史,使用大模型推荐相关新闻
  2. 情感分析功能:使用大模型分析新闻情感倾向,提供情绪过滤功能
  3. 多语言支持:增加多语言翻译功能,使用大模型进行实时翻译
  4. 语音交互:添加语音命令功能,实现与系统的对话式交互
  5. 新闻摘要生成:使用大模型自动生成新闻摘要,便于快速浏览
  6. 跨平台支持:将应用移植到移动端或Web端,实现多设备访问
  7. 订阅源推荐:基于用户兴趣,使用大模型推荐相关RSS源

在AI时代,将大模型与传统应用结合,能极大提升软件的智能化水平和用户体验。本项目展示了如何在实际应用中使用本地大模型,避免了隐私问题和API调用成本,同时保持了强大的AI能力。希望这个实战案例能够启发更多开发者探索AI应用的无限可能。


通过本文的实战指南,您可以构建自己的AI新闻电台,享受个性化、高质量的新闻阅读和收听体验。结合大模型的内容优化和语音播报功能,让新闻消费变得更加智能和便捷。

相关文章:

《AI大模型趣味实战》第6集:基于大模型和RSS聚合打造个人新闻电台

《AI大模型趣味实战》第6集&#xff1a;基于大模型和RSS聚合打造个人新闻电台 摘要 本文将带您探索如何结合AI大模型和RSS聚合技术&#xff0c;打造一个功能丰富的个人新闻电台系统。我们将使用Python和PyQt5构建一个桌面应用程序&#xff0c;该应用可以从多个RSS源抓取新闻&…...

Unity 与 JavaScript 的通信交互:实现跨平台的双向通信

前言 在现代游戏开发和 Web 应用中&#xff0c;Unity 和 JavaScript 的结合越来越常见。Unity 是一个强大的跨平台游戏引擎&#xff0c;而 JavaScript 是 Web 开发的核心技术之一。通过 Unity 和 JavaScript 的通信交互&#xff0c;开发者可以实现从 Unity 到 Web 页面的功能扩…...

Sql Server 索引性能优化 分析以及分表

定位需优化语句 根据工具 skywking 或者开启慢查询日志 找到 慢sql 的语句根据 执行过程 来 判断 慢的原因 row filter 指标 看查了多少数据 比例多少 type 看下是单表 还是 join联表 比如 执行步骤多 没索引 优化方向 减少执行次数索引 没索引考虑加索引 加索引 尽量选择 i…...

Vue.js 模板语法全解析:从基础到实战应用

引言 在 Vue.js 的开发体系中&#xff0c;模板语法是构建用户界面的核心要素&#xff0c;它让开发者能够高效地将数据与 DOM 进行绑定&#xff0c;实现动态交互效果。通过对《Vue.js 快速入门实战》中关于 Vue 项目部署章节&#xff08;实际围绕 Vue 模板语法展开&#xff09;…...

【JVM】内存区域划分,类加载机制和垃圾回收机制

本篇内容为了解 JVM 的内存区域划分&#xff0c;类加载机制&#xff0c;垃圾回收机制。实际开发中几乎用不到&#xff0c;但为了某些情况我们又不得不了解。 目录 一、JVM中的内存区域划分 1.1 内存区域划分考点 二、JVM的类加载机制 2.1 类加载流程 2.2 类加载什么时候会…...

代码随想录算法训练营第十四天|替换数字

文档讲解&#xff1a;代码随想录 难度&#xff1a;easy 附&#xff1a;冲 passion&#xff01;&#xff01;&#xff01;passion&#xff01;&#xff01;&#xff01;passion&#xff01;&#xff01;&#xff01; 替换数字 卡码网题目链接(opens new window) 给定一个字符串…...

Java实体类(Javabean)-编程规范

Java学习笔记-Java实体类详解 今天我们要聊一个看似简单却至关重要的知识点——Java实体类。就像快递小哥打包物件需要包装盒一样&#xff0c;在Java世界里处理数据也需要专门的容器&#xff0c;这就是我们的实体类&#xff01; 一、实体类是什么&#xff1f;——程序的"…...

深入解析 Java Stream API:筛选子节点的优雅实现!!!

&#x1f680; 深入解析 Java Stream API&#xff1a;筛选子节点的优雅实现 &#x1f527; 大家好&#xff01;&#x1f44b; 今天我们来聊聊 Java 8 中一个非常常见的操作&#xff1a;使用 Stream API 从 Map 中筛选出特定条件的元素。&#x1f389; 具体来说&#xff0c;我们…...

Vala编程语言教程-面向对象编程语基础

基础 尽管Vala语言并不强制你使用对象进行编程&#xff0c;但有些功能只能通过对象的方式来实现。因此&#xff0c;在大多数情况下&#xff0c;你肯定会希望采用面向对象的编程风格。与大多数当前的编程语言一样&#xff0c;为了定义你自己的对象类型&#xff0c;你需要编写一个…...

写读后感的时候,可以适当地引用书中的内容吗?

写读后感时&#xff0c;适当地引用书中的内容是可以的&#xff0c;这样可以更好地支持你的观点和感受&#xff0c;增强文章的可信度和说服力。 引用书中的内容可以帮助读者更好地理解你所讨论的主题和人物&#xff0c;同时也可以展示你对原著的深入理解和阅读能力。但是&#…...

计算机网络高频(二)TCP/IP基础

计算机网络高频(二)TCP/IP基础 1.什么是TCP/IP⭐⭐ TCP/IP是一种网络通信协议,它是互联网中最常用的协议之一。TCP/IP有两个基本的协议:TCP(传输控制协议)和IP(互联网协议)。 TCP(Transmission Control Protocol,传输控制协议)是一种可靠的、面向连接的协议。它负…...

蓝桥杯 之 数论

文章目录 习题质数找素数 LCM报数游戏 快速幂数字诗意 组合数与错位排序小蓝与钥匙 同余取模 数论&#xff0c;就是一些数学问题&#xff0c;蓝桥杯十分喜欢考察&#xff0c;常见的数论的问题有&#xff1a;取模&#xff0c;同余&#xff0c;大整数分解&#xff0c;素数&#x…...

无法写入文件:(FileSystemError): Error: EPERM: operation not permitted, open...)

问题分析&#xff1a; 当我想在Visual Studio Code中编写文件时&#xff0c;出现无法写入文件的错误&#xff0c;发现是权限的问题 解决办法&#xff1a; 右键应用图标 → 以管理员身份运行就可以了...

Java爬虫抓取B站视频信息

依赖 <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.17.2</version> <!-- 最新版可去官网查看 --></dependency>编码 public static List<VideoDto> parseSearchPage(Str…...

Sql Server数据迁移易错的地方

背景&#xff1a;之前一直台式机&#xff0c;毕业准备答辩了&#xff0c;要将代码搬到笔记本运行才方便些。这个Sql数据弄过来搞了好几个小时 还原备份报错&#xff1a;媒体簇的结构不正确。SQL Server 无法处理此媒体簇。 解决&#xff1a;升级到sql server版本比备份的那个高…...

七、服务器远程桌面报错

&#x1f33b;&#x1f33b;目录&#x1f33b;&#x1f33b; 一、远程桌面报错-用户账户限制&#xff08;例如&#xff0c;时间限制&#xff09;会阻止你登录。 一、远程桌面报错-用户账户限制&#xff08;例如&#xff0c;时间限制&#xff09;会阻止你登录。 原因是被远程的系…...

JAVA 之「优先队列」:大顶堆与小顶堆的实现与应用

Java 优先队列&#xff1a;大顶堆与小顶堆的实现与应用 文章目录 Java 优先队列&#xff1a;大顶堆与小顶堆的实现与应用一、什么是优先队列和堆&#xff1f;1. 优先队列2. 堆 二、Java PriorityQueue 基本用法1. 默认小顶堆示例代码输出 2. 实现大顶堆示例代码输出 三、大顶堆…...

压缩壳学习

壳是什么 壳就是软件的一个保护套&#xff0c;防止软件被进行反编译或被轻易地修改。 其作用就是为了保护软件。 常见的大类壳有压缩壳、加密壳、VM 壳的分类。 压缩壳顾名思义就是用来减小软件的文件大小的&#xff1b;加密壳&#xff0c;通过加密软件来保护软件&#xff…...

VRRP配置双出口ipsec隧道建立。

背景&#xff1a;在做毕设时&#xff0c;发现规划的不是那么合理&#xff0c;vrrp主备切换后&#xff0c;ipsec隧道并没有跟着切换到与备防火墙建立隧道&#xff0c;这是因为配置了双出口&#xff0c;路由的设计导致vrrp主备切换ipsec隧道没有跟着切换。 fw1为主&#xff0c;fw…...

机器学习——Numpy的神奇索引与布尔索引

在 NumPy 中&#xff0c;神奇索引&#xff08;Fancy Indexing&#xff09; 和 布尔索引&#xff08;Boolean Indexing&#xff09; 是两种强大的索引方式&#xff0c;用于从数组中提取特定元素或子集。以下是它们的详细说明和示例&#xff1a; 1. 神奇索引&#xff08;Fancy In…...

Linux:进程间通信

文章目录 前言一、进程间通信介绍1.1 进程间通信的目的1.2 进程间通信的发展与分类 二、管道2.1 匿名管道原理2.2 通信管道会出现的情况和特性&#xff08;重要&#xff09;2.3 命名管道2.3.1 命名管道与匿名管道的区别 三、system V3.1 共享内存原理3.2 键值3.2.1 键值生成原理…...

Mysql配套测试之查询篇

&#x1f3dd;️专栏&#xff1a;Mysql_猫咪-9527的博客-CSDN博客 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 条件查询简单测试&#xff1a; 1.查询英语成绩不及格的同学(<60) 2…...

基于SSM框架的汽车租赁平台(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;汽车租赁平台当然不能排除在外。汽车租赁平台是在实际应用和软件工程的开发原理之上&#xff0c;运用Java语言以及SSM框架进行开发&#x…...

常考计算机操作系统面试习题(三下)

20. 请求页式存储管理系统缺页率计算 题目&#xff1a; 假设一个作业的页面走向为 1、2、3、4、1、2、5、1、2、3、4、5&#xff0c;当分配给该作业的物理块数分别为 3 和 4 时&#xff0c;计算采用下述页面置换算法的缺页率&#xff1a; (1) 先进先出&#xff08;FIFO&…...

Spring IOC核心详解:掌握控制反转与依赖注入

文章目录 前言一、IOC核心思想二、IOC容器实现1.核心接口&#xff1a;2.XML配置范例 三、Bean管理实践1.创建对象&#xff08;1&#xff09;基于xml方式创建对象&#xff08;2&#xff09;用注解的方式创建对象 2.依赖注入&#xff08;1&#xff09;基于xml方式注入属性基础类型…...

Servlet、HttpServletRequest、HttpServletResponse、静态与动态网页、jsp、重定向与转发

DAY15.2 Java核心基础 JavaWeb 要想通过浏览器或者客户端来访问java程序&#xff0c;必须通过Servlet来处理 没有Servlet&#xff0c;java是无法处理web请求的 Web交互&#xff1a; 接收请求HttpServletRequest&#xff1a;可以获取到请求的信息&#xff0c;比如uri&#…...

Linux 内核源码阅读——ipv4

Linux 内核源码阅读——ipv4 综述 在 Linux 内核中&#xff0c;IPv4 协议的实现主要分布在 net/ipv4/ 目录下。以下是一些关键的源文件及其作用&#xff1a; 1. 协议栈核心 net/ipv4/ip_input.c&#xff1a;处理接收到的 IPv4 数据包&#xff08;输入路径&#xff09;。net…...

组合总和 II:去重逻辑深度解析

组合总和 II&#xff1a;去重逻辑深度解析 在算法中&#xff0c;解决“组合总和 II”这类问题时&#xff0c;去重往往是最具挑战性的一环。如何避免重复组合&#xff0c;同时保证所有组合的唯一性&#xff0c;是实现高效算法的关键。今天&#xff0c;我们就来深度解析组合总和…...

蓝桥杯备考:二分答案之路标设置

最大距离&#xff0c;找最小空旷指数值&#xff0c;我们是很容易想到用二分的&#xff0c;我们再看看这个答案有没有二段性 是有这么个二段性的&#xff0c;我们只要二分就行了&#xff0c;但是二分的check函数是有点不好想的&#xff0c;我们枚举空旷值的时候&#xff0c;为了…...

[HY000][1366] Incorrect string value: ‘张三‘ for column ‘name‘ at row 1

常见原因 字符集不兼容 插入的数据包含当前字符集&#xff08;如 latin1&#xff09;不支持的特殊字符&#xff08;如中文、Emoji 等&#xff09;。 表、列或连接的字符集未正确配置为支持目标字符&#xff08;如未使用 utf8mb4&#xff09;。 客户端/服务端编码不一致 客户…...

什么是C++对象之间的view proxies

在C中&#xff0c;view proxies 是一种轻量级的对象&#xff0c;用于提供对另一个对象的间接访问或视图&#xff0c;而不直接拥有或管理该对象的数据。它们通常用于简化对复杂数据结构的访问&#xff0c;或在不需要复制数据的情况下提供特定的视图。 1. View Proxies 的核心概…...

MyBatis参数赋值技巧:#{} 和 ${} 的区别与实践

目录 一、前言二、 #{} 和${} 的使用方法和区别2.1 #{}使用方法2.2 ${}使用方法2.3#{} 和 ${} 的主要区别2.4使用建议 三、总结 一、前言 在 MyBatis 中&#xff0c;#{} 和 ${} 都用于在 SQL 语句中绑定参数&#xff0c;但它们在具体实现和安全性方面有所不同。理解它们的区别…...

5-1 使用ECharts将MySQL数据库中的数据可视化

方法一&#xff1a;使用Python Flask框架搭建API 对于技术小白来说&#xff0c;使用ECharts将MySQL数据库中的数据可视化需要分步骤完成。以下是详细的实现流程&#xff1a; 一、技术架构‌ 后端服务‌&#xff1a;使用Python Flask框架搭建API&#xff08;简单易学&#xff…...

协程的调度的对称与非对称

下图表示的就是对称协程&#xff0c;进入到该协程之后只能有一个操作就是yield&#xff0c;把cpu让回给调度器; 下图表示非对称协议&#xff0c;可以有两个操作&#xff0c;就是resume和yield&#xff0c;从哪里resume的&#xff0c;yield就会回到该位子&#xff1b;...

C# 中比较实用的关键字,基础高频面试题!

前言 在C#编程中关键字是构建逻辑和实现功能的基石&#xff0c;它承载着编程语言的语法规则和编程智慧。熟练掌握这些基础高频关键字对提升编程能力和面试表现至关重要&#xff0c;它们是日常开发和解决复杂问题的关键。 DotNetGuide 全面的C#/.NET/.NET Core学习、工作、面试指…...

文献分享: XTR——优化Token级检索的高效多向量模型

原文章 文章目录 1. XTR \textbf{1. XTR} 1. XTR原理 1.1. \textbf{1.1. } 1.1. 导论 1.2. XTR \textbf{1.2. XTR} 1.2. XTR的训练和推理 2. \textbf{2. } 2. 实验与分析 2.1. \textbf{2.1. } 2.1. 实验配置与结果 2.2. \textbf{2.2. } 2.2. 结果分析 3. \textbf{3. } 3. 其它分…...

【数据结构】C语言实现树和森林的遍历

C语言实现树和森林的遍历 导读一、树的遍历二、森林的遍历2.1 为什么森林没有后序遍历?2.2 森林中存不存在层序遍历?三、C语言实现3.1 准备工作3.2 数据结构的选择3.3 树与森林的创建3.4 树与森林的遍历3.4.1 先根遍历3.4.2 后根遍历3.4.3 森林的遍历3.5 树与森林的销毁3.6 算…...

《Python深度学习》第七讲:生成式深度学习

在深度学习的世界里,生成式模型是一种非常有趣且富有创造力的技术。它们能够生成全新的内容,比如文本、图像、音乐等,甚至可以创造出从未见过的虚拟世界。这一讲,我们将深入探讨生成式深度学习的核心技术,包括 LSTM 文本生成、DeepDream、神经风格迁移、变分自编码器(VAE…...

Spring的IOC

在现代 Java 开发中&#xff0c;Spring 框架几乎无处不在&#xff0c;特别是其核心的 IOC&#xff08;Inversion of Control&#xff09; 容器&#xff0c;几乎所有Spring的功能都与它紧密相关。 一、什么是IOC IOC&#xff0c;全称为 Inversion of Control&#xff08;控制反…...

常考计算机操作系统面试习题(四)

目录 1. Peterson 算法伪代码 2. 信号量生产者消费者问题分析 3. 注释 Peterson 主函数并分析输出结果 4. 用 fork 创建子进程的程序 1. Peterson 算法伪代码 题目&#xff1a; 写出 Peterson 算法的伪代码。 参考答案&#xff1a; // 定义变量 boolean flag[2]; //…...

Visual Studio Code 连接 SAP ERP 系统

首先确保服务打开 在vscode&#xff0c;在extension安装ABAP remote filesystem&#xff0c;然后打开设置SAP 系统的地址配置 CtrlshiftP 执行代码&#xff1a;AbapFS connect to an ABAP system&#xff0c;可以根据要求一步一步配置。 根据配置。加载系统 也可以直接在extens…...

从报错到成功:Mermaid 流程图语法避坑指南✨

&#x1f680; 从报错到成功&#xff1a;Mermaid 流程图语法避坑指南 &#x1f680; &#x1f6a8; 问题背景 在开发文档或技术博客中&#xff0c;我们经常使用 Mermaid 流程图 来可视化代码逻辑。但最近我在尝试绘制一个 Java Stream 转换流程图时&#xff0c;遭遇了以下报错…...

TDengine 中的 show 命令

简介 SHOW 命令可以用来获取简要的系统信息。若想获取系统中详细的各种元数据、系统信息和状态&#xff0c;请使用 select 语句查询 INFORMATION_SCHEMA 数据库中的表, 详见 元数据查询 SHOW APPS SHOW APPS;显示接入集群的应用&#xff08;客户端&#xff09;信息。 SHOW …...

博弈论中的均衡精炼:完美贝叶斯均衡、序贯均衡与颤抖手均衡详解

博弈论中的均衡精炼&#xff1a;完美贝叶斯均衡、序贯均衡与颤抖手均衡详解 1. 引言&#xff1a;为什么需要均衡精炼&#xff1f; 在博弈论中&#xff0c;纳什均衡是分析策略互动的核心工具&#xff0c;但其存在一个显著缺陷&#xff1a;无法排除不合理的均衡。例如&#xff0…...

github代理 | 快速clone项目

代理网址&#xff1a; https://ghproxy.com/ https://ghproxy.com/代理网址&#xff1a; https://ghproxy.com/ 比如需要克隆的项目git地址为&#xff1a;https://github.com/AUTOMATIC1111/stable-diffusion-webui.git git clone https://ghproxy.com/https://github.com/AUTO…...

C语言基础与进阶学习指南(附运行效果图及术语解析)

C语言基础与进阶学习指南&#xff08;附运行效果图及术语解析&#xff09; 目录 C语言标准与编译流程CPU与内存基础C语言基础语法数据类型详解变量与内存管理运算符与表达式输入输出函数函数与内存管理指针与内存操作结构体与高级应用 1. C语言标准与编译流程 1.1 C语言标准演…...

【Scrapy】Scrapy教程8——处理子链接

通过前面几篇文章,已经了解了如何去爬取网页内容并存储到数据库,但是目前只是存储了一个页面的内容,现在想要获取每篇文章链接内的文章内容,我们来看看怎么获取。 生成新请求 首先我们肯定要先拿到链接,所以第一步都获取文章标题和链接肯定少不了,然后再爬取获取到到子…...

Python推导式深入解析

引言 Python 以其简洁、高效的语法而备受开发者喜爱&#xff0c;其中推导式&#xff08;Comprehensions&#xff09;更是 Python 语法的一大特色。推导式提供了一种简洁明了的方式来创建列表、集合和字典等数据结构&#xff0c;让代码更加紧凑和易读。本文将深入探讨 Python 推…...

在 macOS 上配置 SSH 连接 GitHub

在 macOS 上使用 SSH 连接 GitHub&#xff0c;可以免去每次使用 Git 时输入密码的麻烦&#xff0c;提高开发效率。本文将介绍如何在 macOS 上生成 SSH 密钥并配置 GitHub 进行身份认证。 1. 检查是否已有 SSH 密钥 在终端运行以下命令&#xff0c;检查是否已有 SSH 密钥&#…...

常考计算机操作系统面试习题(二)(中)

目录 24. 操作系统的主要功能有哪些&#xff1f; 25. 文件的属性主要有哪些&#xff1f; 26. 对文件的基本操作主要有哪些&#xff1f; 27. 目录的基本操作有哪些&#xff1f; 28. 目录的逻辑结构有哪些种&#xff1f; 29. 简述银行家算法的Available、Max、Allocation、…...