Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
基于设计原则的重构:数据采集爬虫系统示例_创想鸟

基于设计原则的重构:数据采集爬虫系统示例

基于设计原则的重构:数据采集爬虫系统示例

介绍

提高代码质量始终是软件开发中的一个重要问题。在本文中,我们以数据收集爬虫系统为例,具体讲解如何通过逐步重构来应用设计原则和最佳实践。

改进前的代码

首先,我们从一个非常简单的网络抓取工具开始,所有功能都集成到一个类中。

由 deepl.com 翻译(免费版)

project_root/├── web_scraper.py├── main.py└── requirements.txt

web_scraper.py

import requestsimport jsonimport sqlite3class webscraper:    def __init__(self, url):        self.url = url    def fetch_data(self):        response = requests.get(self.url)        data = response.text        parsed_data = self.parse_data(data)        enriched_data = self.enrich_data(parsed_data)        self.save_data(enriched_data)        return enriched_data    def parse_data(self, data):        return json.loads(data)    def enrich_data(self, data):        # apply business logic here        # example: extract only data containing specific keywords        return {k: v for k, v in data.items() if 'important' in v.lower()}    def save_data(self, data):        conn = sqlite3.connect('test.db')        cursor = conn.cursor()        cursor.execute('insert into data (json_data) values (?)', (json.dumps(data),))        conn.commit()        conn.close()

main.py

from web_scraper import webscraperdef main():    scraper = webscraper('https://example.com/api/data')    data = scraper.fetch_data()    print(data)if __name__ == "__main__":    main()

需要改进的地方

违反了单一职责原则:一个类负责所有数据采集、分析、丰富和存储业务逻辑不清晰:业务逻辑嵌入在enrich_data方法中,但与其他处理混合在一起缺乏可重用性:功能紧密耦合,导致单独重用困难测试难点:难以独立测试各个功能配置刚性:数据库路径和其他设置直接嵌入代码中

重构阶段

1、职责分离:数据采集、分析、存储分离

重大变化:将数据采集、分析和存储的职责分离到不同的类中目标:应用单一责任原则,引入环境变量

目录结构

project_root/├── data_fetcher.py├── data_parser.py├── data_saver.py├── data_enricher.py├── web_scraper.py├── main.py└── requirements.txt

data_enricher.py

class dataenricher:    def enrich(self, data):        return {k: v for k, v in data.items() if 'important' in v.lower()}

web_scraper.py

from data_fetcher import datafetcherfrom data_parser import dataparserfrom data_enricher import dataenricherfrom data_saver import datasaverclass webscraper:    def __init__(self, url):        self.url = url        self.fetcher = datafetcher()        self.parser = dataparser()        self.enricher = dataenricher()        self.saver = datasaver()    def fetch_data(self):        raw_data = self.fetcher.fetch(self.url)        parsed_data = self.parser.parse(raw_data)        enriched_data = self.enricher.enrich(parsed_data)        self.saver.save(enriched_data)        return enriched_data

此更改明确了每个类的职责并提高了可重用性和可测试性。然而,业务逻辑仍然嵌入在 dataenricher 类中。

2.接口介绍和依赖注入

主要变化:引入接口并实现依赖注入。目的:增加灵活性和可扩展性,扩展环境变量,抽象业务逻辑

目录结构

project_root/├── interfaces/│   ├── __init__.py│   ├── data_fetcher_interface.py│   ├── data_parser_interface.py│   ├── data_enricher_interface.py│   └── data_saver_interface.py├── implementations/│   ├── __init__.py│   ├── http_data_fetcher.py│   ├── json_data_parser.py│   ├── keyword_data_enricher.py│   └── sqlite_data_saver.py├── web_scraper.py├── main.py└── requirements.txt

接口/data_fetcher_interface.py

from abc import abc, abstractmethodclass datafetcherinterface(abc):    @abstractmethod    def fetch(self, url: str) -> str:        pass

接口/data_parser_interface.py

from abc import abc, abstractmethodfrom typing import dict, anyclass dataparserinterface(abc):    @abstractmethod    def parse(self, raw_data: str) -> dict[str, any]:        pass

接口/data_enricher_interface.py

from abc import abc, abstractmethodfrom typing import dict, anyclass dataenricherinterface(abc):    @abstractmethod    def enrich(self, data: dict[str, any]) -> dict[str, any]:        pass

接口/data_saver_interface.py

from abc import abc, abstractmethodfrom typing import dict, anyclass datasaverinterface(abc):    @abstractmethod    def save(self, data: dict[str, any]) -> none:        pass

实现/keyword_data_enricher.py

import osfrom interfaces.data_enricher_interface import dataenricherinterfaceclass keyworddataenricher(dataenricherinterface):    def __init__(self):        self.keyword = os.getenv('important_keyword', 'important')    def enrich(self, data):        return {k: v for k, v in data.items() if self.keyword in str(v).lower()}

web_scraper.py

from interfaces.data_fetcher_interface import datafetcherinterfacefrom interfaces.data_parser_interface import dataparserinterfacefrom interfaces.data_enricher_interface import dataenricherinterfacefrom interfaces.data_saver_interface import datasaverinterfaceclass webscraper:    def __init__(self, fetcher: datafetcherinterface, parser: dataparserinterface,                  enricher: dataenricherinterface, saver: datasaverinterface):        self.fetcher = fetcher        self.parser = parser        self.enricher = enricher        self.saver = saver    def fetch_data(self, url):        raw_data = self.fetcher.fetch(url)        parsed_data = self.parser.parse(raw_data)        enriched_data = self.enricher.enrich(parsed_data)        self.saver.save(enriched_data)        return enriched_data

现阶段主要变化是

引入接口以方便切换到不同的实现依赖注入让webscraper类更加灵活fetch_data 方法已更改为以 url 作为参数,使 url 规范更加灵活。 业务逻辑被抽象为dataenricherinterface并实现为keyworddataenricher。允许使用环境变量设置关键字,使业务逻辑更加灵活。

这些改变极大地提高了系统的灵活性和可扩展性。然而,业务逻辑仍然嵌入在 dataenricherinterface 及其实现中。下一步是进一步分离这个业务逻辑,并将其明确定义为领域层。

3.领域层的引入和业务逻辑的分离

上一步中,接口的引入增加了系统的灵活性。但是,业务逻辑(在本例中为数据重要性确定和过滤)仍然被视为数据层的一部分。基于领域驱动设计的理念,将此业务逻辑视为系统的中心概念,并将其实现为独立的领域层,可以带来以下好处

业务逻辑集中管理通过领域模型更具表现力的代码更改业务规则具有更大的灵活性易于测试

更新了目录结构:

project_root/├── domain/│   ├── __init__.py│   ├── scraped_data.py│   └── data_enrichment_service.py├── data/│   ├── __init__.py│   ├── interfaces/│   │   ├── __init__.py│   │   ├── data_fetcher_interface.py│   │   ├── data_parser_interface.py│   │   └── data_saver_interface.py│   ├── implementations/│   │   ├── __init__.py│   │   ├── http_data_fetcher.py│   │   ├── json_data_parser.py│   │   └── sqlite_data_saver.py├── application/│   ├── __init__.py│   └── web_scraper.py├── main.py└── requirements.txt

现阶段,dataenricherinterface 和 keyworddataenricher 的角色将转移到领域层的 scrapeddata 模型和 dataenrichmentservice 中。下面提供了此更改的详细信息。

变更前(第 2 部分)

class dataenricherinterface(abc):    @abstractmethod    def enrich(self, data: dict[str, any]) -> dict[str, any]:        pass
class keyworddataenricher(dataenricherinterface):    def __init__(self):        self.keyword = os.getenv('important_keyword', 'important')    def enrich(self, data):        return {k: v for k, v in data.items() if self.keyword in str(v).lower()}

修改后(第3部分)

@dataclassclass scrapeddata:    content: dict[str, any]    source_url: str    def is_important(self) -> bool:        important_keyword = os.getenv('important_keyword', 'important')        return any(important_keyword in str(v).lower() for v in self.content.values())
class dataenrichmentservice:    def __init__(self):        self.important_keyword = os.getenv('important_keyword', 'important')    def enrich(self, data: scrapeddata) -> scrapeddata:        if data.is_important():            enriched_content = {k: v for k, v in data.content.items() if self.important_keyword in str(v).lower()}            return scrapeddata(content=enriched_content, source_url=data.source_url)        return data

此更改改进了以下内容。

业务逻辑已移至领域层,消除了对 dataenricherinterface 的需求。

keyworddataenricher 功能已合并到 dataenrichmentservice 中,将业务逻辑集中在一处。

scrapeddata 模型中添加了 is_important 方法。这使得领域模型本身负责确定数据的重要性,并使领域概念更加清晰。

dataenrichmentservice 现在直接处理 scrapeddata 对象,提高类型安全性。

webscraper 类也将更新以反映此更改。

from data.interfaces.data_fetcher_interface import DataFetcherInterfacefrom data.interfaces.data_parser_interface import DataParserInterfacefrom data.interfaces.data_saver_interface import DataSaverInterfacefrom domain.scraped_data import ScrapedDatafrom domain.data_enrichment_service import DataEnrichmentServiceclass WebScraper:    def __init__(self, fetcher: DataFetcherInterface, parser: DataParserInterface,                  saver: DataSaverInterface, enrichment_service: DataEnrichmentService):        self.fetcher = fetcher        self.parser = parser        self.saver = saver        self.enrichment_service = enrichment_service    def fetch_data(self, url: str) -> ScrapedData:        raw_data = self.fetcher.fetch(url)        parsed_data = self.parser.parse(raw_data)        scraped_data = ScrapedData(content=parsed_data, source_url=url)        enriched_data = self.enrichment_service.enrich(scraped_data)        self.saver.save(enriched_data)        return enriched_data

这一改变将业务逻辑从数据层完全转移到了领域层,使系统的结构更加清晰。删除 dataenricherinterface 并引入 dataenrichmentservice 不仅仅是接口替换,而是业务逻辑处理方式的根本性改变。

概括

本文演示了如何通过数据收集爬虫系统的逐步重构过程来提高代码质量并应用设计原则。主要改进的地方如下。

职责分离:应用单一职责原则,我们将数据获取、解析、丰富和存储分离到不同的类中。接口和依赖注入的引入:大大增加了系统的灵活性和可扩展性,更容易切换不同的实现。引入领域模型和服务:清晰分离业务逻辑,定义系统核心概念。采用分层架构:明确分离领域、数据和应用层,并定义各层的职责。5.维护接口:维护数据层的抽象,以确保实现的灵活性。

这些改进极大地增强了系统的模块化、可复用性、可测试性、可维护性和可扩展性。特别是,通过应用领域驱动设计的一些概念,业务逻辑变得更加清晰,结构更加灵活,以适应未来需求的变化。同时,通过维护接口,我们确保了轻松更改和扩展数据层实现的灵活性。

需要注意的是,这个重构过程不是一次性的,而是持续改进过程的一部分。根据项目的规模和复杂程度,在适当的级别采用设计原则和 ddd 概念并进行渐进式改进非常重要。

最后,本文介绍的方法可以应用于各种软件项目,而不仅仅是数据收集爬虫。我们鼓励您在提高代码质量和设计时将它们用作参考。

以上就是基于设计原则的重构:数据采集爬虫系统示例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1348116.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
用有限的资源微调 LLAMA 或文本分类
上一篇 2025年12月13日 11:45:17
Python
下一篇 2025年12月13日 11:45:26

相关推荐

  • Bing浏览器怎么使用Web选择_Bing浏览器网页内容选择工具操作

    Bing浏览器怎么使用Web选择_Bing浏览器网页内容选择工具操作Bing浏览器怎么使用Web选择_Bing浏览器网页内容选择工具操作Bing浏览器怎么使用Web选择_Bing浏览器网页内容选择工具操作Bing浏览器怎么使用Web选择_Bing浏览器网页内容选择工具操作

    首先启用Bing浏览器的Web选择工具,点击地址栏右侧图标激活;随后拖动鼠标选择内容,支持多区域选取;最后通过右键复制或使用截图功能保存所选文字、图片等内容。 如果您希望在浏览网页时快速提取或分享特定内容,Bing浏览器的Web选择工具可以帮助您实现精准选取和便捷操作。以下是使用该功能的具体步骤: …

    2026年9月24日 • 用户投稿
    700
  • 原神鹤观岛火炬怎么点亮 鹤观岛火炬解谜详细攻略

    原神鹤观岛火炬怎么点亮 鹤观岛火炬解谜详细攻略原神鹤观岛火炬怎么点亮 鹤观岛火炬解谜详细攻略原神鹤观岛火炬怎么点亮 鹤观岛火炬解谜详细攻略原神鹤观岛火炬怎么点亮 鹤观岛火炬解谜详细攻略

    原神鹤观岛知比山区域的地下洞穴中,新增了两组富有挑战性的火炬机关谜题,成为2.2版本后玩家们探索时的一大亮点。这些解谜设计延续了原神一贯的环境互动风格,同时融入了更具创意的视觉提示机制。 位于洞穴入口附近的小型密室是第一处火炬谜题的所在地。房间墙壁上刻画着太阳与星辰的古老壁画,其中部分星星呈现出明显…

    2026年9月24日 • 用户投稿
    200
  • 不同 DP 与 HDMI 线材版本对高分辨率高刷新率支持度

    不同 DP 与 HDMI 线材版本对高分辨率高刷新率支持度不同 DP 与 HDMI 线材版本对高分辨率高刷新率支持度不同 DP 与 HDMI 线材版本对高分辨率高刷新率支持度不同 DP 与 HDMI 线材版本对高分辨率高刷新率支持度

    选对线材才能发挥显示器高分辨率高刷新率,DP1.2支持4K@60Hz,DP1.4支持4K@144Hz需DSC,DP2.0带宽80Gbps面向未来;HDMI2.0支持4K@60Hz,HDMI2.1支持4K@120Hz并普及于电视;应认准HBR3、HDMI2.1标识及官方认证,避免信号衰减。 想让显示器…

    2026年9月24日 • 用户投稿
    000
  • Java 正则表达式非贪婪匹配替换:精准替换字符串中的特定部分

    Java 正则表达式非贪婪匹配替换:精准替换字符串中的特定部分Java 正则表达式非贪婪匹配替换:精准替换字符串中的特定部分Java 正则表达式非贪婪匹配替换:精准替换字符串中的特定部分Java 正则表达式非贪婪匹配替换:精准替换字符串中的特定部分

    本文旨在解决 Java 中使用正则表达式进行字符串替换时,如何避免过度匹配,实现对特定字符串的精准替换。通过使用单词边界 ,我们可以确保只替换独立的 $c 字符串,而不会影响到 $c_new 等包含 $c 的其他字符串。本文将提供详细的代码示例和解释,帮助开发者掌握这一技巧。 在 Java 中,使用…

    2026年9月24日 • 用户投稿
    1000
  • 手机淘宝搜索怎么开启不了?手机淘宝搜索功能用不了

    手机淘宝搜索怎么开启不了?手机淘宝搜索功能用不了手机淘宝搜索怎么开启不了?手机淘宝搜索功能用不了手机淘宝搜索怎么开启不了?手机淘宝搜索功能用不了手机淘宝搜索怎么开启不了?手机淘宝搜索功能用不了

    首先检查网络连接,确保Wi-Fi或移动数据正常;重启淘宝应用以清除临时错误;清除应用缓存和检查权限设置,确保网络、定位、存储权限已开启;最后通过更新或重装淘宝应用解决潜在Bug。 如果您在使用手机淘宝时发现搜索功能无法正常使用,可能是由于应用缓存异常、权限设置问题或网络连接不稳定导致的。该问题会直接…

    2026年9月24日 • 用户投稿
    400
  • 如何在Debian 10(Buster)Linux上安装MySQL

    了解如何在debian 10(buster)linux上安装mysql。本指南将引导您完成在最新版本的debian系统上安装mysql 8或mysql 5.7的步骤。 第1步 – 准备工作 首先,确保您拥有Debian 10系统的shell访问权限。如果是远程系统,可以通过SSH连接。W…

    2026年9月24日
    1000
  • ubuntu vnc端口冲突怎么解决

    在ubuntu系统中,如果vnc端口发生冲突,通常意味着另一个应用程序或服务已经在使用vnc默认的端口(通常是5900)。为了解决这个问题,你可以按照以下步骤操作: 查找占用端口的进程:使用netstat或lsof命令来查找哪个进程正在使用5900端口。例如,你可以运行以下命令: sudo nets…

    2026年9月24日
    000
  • sublime怎么去除购买弹窗_sublime关闭试用版购买提示的方法

    sublime怎么去除购买弹窗_sublime关闭试用版购买提示的方法sublime怎么去除购买弹窗_sublime关闭试用版购买提示的方法sublime怎么去除购买弹窗_sublime关闭试用版购买提示的方法sublime怎么去除购买弹窗_sublime关闭试用版购买提示的方法

    答案:可通过修改hosts文件、清理授权信息或降级版本缓解Sublime Text启动弹窗。具体操作包括屏蔽验证域名license.sublimehq.com、重命名Local目录下的Registry.dat文件,或安装旧版本并关闭更新提示,但建议支持正版以获得更好体验。 Sublime Text …

    2026年9月24日 • 用户投稿
    000
  • 对话非遗簪花传承人,华硕a豆携豆叮寻香泉州 国庆假期与未来香遇

    对话非遗簪花传承人,华硕a豆携豆叮寻香泉州 国庆假期与未来香遇对话非遗簪花传承人,华硕a豆携豆叮寻香泉州 国庆假期与未来香遇对话非遗簪花传承人,华硕a豆携豆叮寻香泉州 国庆假期与未来香遇对话非遗簪花传承人,华硕a豆携豆叮寻香泉州 国庆假期与未来香遇

    即日起至10月8日,时尚数码潮创先锋华硕a豆于福建泉州限时开启「与未来香遇」 “豆叮的寻香之旅”集章打卡活动,围绕茶桌仔、泉州鲤物、有鲤天台咖啡等三处特色地标打造沉浸式城市寻香狂欢;旗下ip豆叮以头戴非遗簪花的泉州限定皮肤萌力“占领”西街,延续上海安福路街区花车巡游派对的浪漫繁花景象,以“科技与非遗…

    2026年9月24日 • 用户投稿
    900
  • mysql存储过程在哪里写

    mysql存储过程在哪里写mysql存储过程在哪里写mysql存储过程在哪里写mysql存储过程在哪里写

    MySQL 存储过程存储在 MySQL 数据库中的 mysql.proc 表中。创建存储过程需要使用 CREATE PROCEDURE 语句,调用存储过程需要使用 CALL 语句。 MySQL 存储过程存储位置 存储过程在哪里写? MySQL 存储过程存储在 MySQL 数据库中。 详细说明: 存储…

    2026年9月24日 • 用户投稿
    500
  • 手机摄像头被入侵特征 手机摄像头被入侵有哪些特征

    手机摄像头被入侵特征 手机摄像头被入侵有哪些特征手机摄像头被入侵特征 手机摄像头被入侵有哪些特征手机摄像头被入侵特征 手机摄像头被入侵有哪些特征手机摄像头被入侵特征 手机摄像头被入侵有哪些特征

    手机摄像头入侵特征包括:异常指示灯闪烁、可疑应用权限、隐私泄露、摄像头画面模糊、异常噪声、设备过热、远程访问,发现这些特征应采取措施断开网络、关闭摄像头、扫描恶意软件、检查权限、恢复出厂设置、报告执法机构。 手机摄像头被入侵的特征 随着智能手机的普及,摄像头入侵事件逐渐增多。一旦摄像头被入侵,黑客可…

    2026年9月24日 • 用户投稿
    100
  • windows声音图标有个红叉怎么办_声音图标红叉问题的解决方法

    windows声音图标有个红叉怎么办_声音图标红叉问题的解决方法windows声音图标有个红叉怎么办_声音图标红叉问题的解决方法windows声音图标有个红叉怎么办_声音图标红叉问题的解决方法windows声音图标有个红叉怎么办_声音图标红叉问题的解决方法

    首先检查并启动Windows音频服务,确保Windows Audio和Windows Audio Endpoint Builder服务已运行;接着更新或重装声卡驱动程序,通过设备管理器卸载后重启以重新安装驱动;若问题仍存,需通过注册表编辑器检查HKEY_LOCAL_MACHINESOFTWAREMi…

    2026年9月24日 • 用户投稿
    000
  • 铁路12306电子发票下载失败怎么解决_铁路12306电子发票下载问题解决方案

    铁路12306电子发票下载失败怎么解决_铁路12306电子发票下载问题解决方案铁路12306电子发票下载失败怎么解决_铁路12306电子发票下载问题解决方案铁路12306电子发票下载失败怎么解决_铁路12306电子发票下载问题解决方案铁路12306电子发票下载失败怎么解决_铁路12306电子发票下载问题解决方案

    首先检查网络连接并重新尝试下载电子发票,若失败可联系12306客服重发,同时查看邮箱垃圾文件夹,最后可通过个人所得税App等工具同步管理发票。 如果您在尝试下载铁路12306电子发票时遇到失败情况,可能是由于网络连接、系统状态或权限设置等问题导致。以下是针对该问题的多种解决方案。 本文运行环境:iP…

    2026年9月24日 • 用户投稿
    100
  • AI音频工具有哪些_好用的AI音频工具大全

    AI音频工具有哪些_好用的AI音频工具大全AI音频工具有哪些_好用的AI音频工具大全AI音频工具有哪些_好用的AI音频工具大全AI音频工具有哪些_好用的AI音频工具大全

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 魔音工坊:AI配音神器,轻松打造媲美真人声线 讯飞智作:科大讯飞出品的语音转换与配音利器 听脑AI:智能语音记录助手 Suno:高品质AI音乐创作平台 海绵音乐:字节旗下免费AI音乐创作与探索平…

    2026年9月24日 • 用户投稿
    300
  • 手机淘宝中如何收藏店铺?手机淘宝中如何收藏店铺信息

    手机淘宝中如何收藏店铺?手机淘宝中如何收藏店铺信息手机淘宝中如何收藏店铺?手机淘宝中如何收藏店铺信息手机淘宝中如何收藏店铺?手机淘宝中如何收藏店铺信息手机淘宝中如何收藏店铺?手机淘宝中如何收藏店铺信息

    1、可通过店铺主页、客服聊天窗口或“我的收藏”反向添加三种方式收藏淘宝店铺。进入店铺主页点击“+店铺”,或从聊天界面点店铺头像后关注,也可在收藏的商品页进店并收藏,操作后可在收藏夹随时访问该店铺。 如果您想在浏览商品时将心仪的商家店铺保存下来以便日后快速访问,可以通过手机淘宝的收藏功能来实现。将店铺…

    2026年9月24日 • 用户投稿
    400
  • 比漫熊正版官网入口_比漫熊漫画官网正版漫画在线阅读地址

    比漫熊正版官网入口_比漫熊漫画官网正版漫画在线阅读地址比漫熊正版官网入口_比漫熊漫画官网正版漫画在线阅读地址比漫熊正版官网入口_比漫熊漫画官网正版漫画在线阅读地址比漫熊正版官网入口_比漫熊漫画官网正版漫画在线阅读地址

    比漫熊漫画官网入口为https://www.bimanxiong.com,平台涵盖恋爱、悬疑等多种题材,每日更新连载,提供高清画质与简洁界面,支持分类筛选、夜间模式及书架收藏,优化阅读体验。 比漫熊漫画官网入口地址在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来比漫熊漫画官网在线阅读入口地…

    2026年9月24日 • 用户投稿
    700
  • NVIDIA GeForce RTX 4090 液氮超频世界纪录挑战全程

    NVIDIA GeForce RTX 4090 液氮超频世界纪录挑战全程NVIDIA GeForce RTX 4090 液氮超频世界纪录挑战全程NVIDIA GeForce RTX 4090 液氮超频世界纪录挑战全程NVIDIA GeForce RTX 4090 液氮超频世界纪录挑战全程

    RTX 4090液氮超频突破4090MHz,成为首款破4GHz的消费级显卡,七彩虹iGame LAB显卡在液氮冷却下创下3DMark多项世界纪录,展现AD102核心极限性能潜力。 RTX 4090 液氮超频破纪录,不只是频率数字的突破,更是硬件极限与技术操作的集中体现。德国超频高手 CENS 使用七…

    2026年9月24日 • 用户投稿
    000
  • 台积电2nm忙着涨价50% 三星低价抢单:足足便宜三成

    台积电2nm忙着涨价50% 三星低价抢单:足足便宜三成台积电2nm忙着涨价50% 三星低价抢单:足足便宜三成台积电2nm忙着涨价50% 三星低价抢单:足足便宜三成台积电2nm忙着涨价50% 三星低价抢单:足足便宜三成

    9月29日消息,全球半导体制造工艺正快速迈向2nm时代,台积电计划于明年正式投入量产。苹果将再次拔得头筹,预计其新一代m5芯片将成为首款搭载2nm工艺的产品。 NVIDIA此次也将打破惯例,提前采用2nm制程技术,预计将应用于其下一代“费曼”GPU架构。新架构有望在明年3月的GTC大会上正式揭晓。 …

    2026年9月24日 • 用户投稿
    000
  • 2025年最受欢迎的手机数据恢复免费软件

    2025年最受欢迎的手机数据恢复免费软件2025年最受欢迎的手机数据恢复免费软件2025年最受欢迎的手机数据恢复免费软件2025年最受欢迎的手机数据恢复免费软件

    数据恢复软件可找回误删的手机数据,推荐2025年实用工具:一、数据蛙恢复专家支持快速与深度扫描,预览后导出至电脑;二、转转大师操作简单,适合新手,可恢复多种场景数据;三、Recuva无需安装,擅长小文件快速恢复,建议启用深度扫描;四、奇客数据恢复专为安卓设计,兼容性强,无需Root即可恢复消息与媒体…

    2026年9月24日 • 用户投稿
    100
  • Java正则表达式:利用词边界实现精确的非贪婪字符串替换

    Java正则表达式:利用词边界实现精确的非贪婪字符串替换Java正则表达式:利用词边界实现精确的非贪婪字符串替换Java正则表达式:利用词边界实现精确的非贪婪字符串替换Java正则表达式:利用词边界实现精确的非贪婪字符串替换

    本教程探讨如何在Java中使用正则表达式精确替换字符串中的特定部分,特别是在目标字符串不应消耗后续字符的场景。通过分析常见错误,文章详细介绍了词边界的原理与应用,展示了如何利用它实现非贪婪且不破坏原字符串结构的替换,确保匹配的精确性与替换结果的完整性。 在处理字符串替换时,我们经常面临需要精确匹配特…

    2026年9月24日 • 用户投稿
    700

发表回复

登录后才能评论
关注微信