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

零基础设计模式——设计模式入门

第一部分:设计模式入门

欢迎来到设计模式的世界!别担心,这听起来可能很“高大上”,但我们会用最生活化的例子来帮助你理解。

1. 什么是设计模式?

想象一下,你是个大厨,每天都要做很多菜。有些菜的制作流程是固定的,比如“炒”这个动作:热锅、倒油、放葱姜蒜爆香、放主料、翻炒、加调料、出锅。这个“炒”的流程,就是一种“模式”。

设计模式 (Design Pattern) 在软件开发中,就像是大厨做菜的“秘方”或“固定流程”。它是前辈们在解决各种软件设计问题时,总结出来的、可重复使用的、高效的解决方案。

  • 设计模式的定义与重要性

    • 定义:在特定情境下,针对特定问题的、经过验证的、优雅的解决方案。
    • 重要性
      • 经验的沉淀:它们是无数程序员智慧的结晶,避免我们重复造轮子,少走弯路。
      • 沟通的桥梁:程序员之间可以用“单例模式”、“工厂模式”这样的术语快速准确地交流设计思想,就像医生说“阑尾炎手术”一样,大家都明白是什么意思。
      • 代码质量的保证:使用设计模式通常能写出更健壮、更易维护、更灵活的代码。
  • 设计模式的分类

    • 创建型模式 (Creational Patterns):关注如何“造东西”(创建对象)。
      • 生活例子:你想喝一杯饮料。可以直接去冰箱拿(简单直接),也可以去饮料机选择口味然后机器制作一杯(工厂模式),或者你有一个特别的杯子,全世界独一无二,只能用它喝水(单例模式)。
    • 结构型模式 (Structural Patterns):关注如何把“东西”组合起来形成更大的结构。
      • 生活例子:你买了一堆乐高积木。怎么把这些小积木搭成一个城堡?这就是结构的问题。你可能需要一个“万能转换头”(适配器模式)来连接两种不兼容的积木。
    • 行为型模式 (Behavioral Patterns):关注“东西”之间如何互动和分配责任。
      • 生活例子:你去餐厅吃饭。你点菜(请求),服务员(中介者)把你的菜单传给厨师,厨师做菜,服务员再把菜端给你。这个过程中,你、服务员、厨师之间的互动和各自的职责,就涉及到行为模式。
  • 学习设计模式的好处

    • 代码复用性:写好的“模块”可以在不同地方重复使用,不用每次都重写。
      • 生活例子:你有一个做“红烧肉”的秘方(一个设计模式)。无论是做红烧排骨还是红烧鱼,这个“红烧”的步骤和调料配比大同小异,可以复用。
    • 可读性:代码更容易被其他人(或者未来的你)理解。
      • 生活例子:一份清晰的菜谱(使用了设计模式的代码)比随手涂鸦的笔记(没有章法的代码)更容易让人看懂如何做菜。
    • 可维护性:当需求变化时,修改代码更容易,不容易“牵一发而动全身”。
      • 生活例子:模块化的厨房电器,如果微波炉坏了,直接修或换微波炉就行,不会影响冰箱和烤箱(高内聚低耦合)。
    • 灵活性/可扩展性:更容易增加新功能。
      • 生活例子:你的手机有很多App。每个App都是独立的功能模块。你想增加一个新功能,比如“手电筒”,直接下载一个手电筒App就行,不需要把整个手机系统重写一遍。
    • 健壮性:代码更稳定,不容易出错。
      • 生活例子:标准化的生产流程(设计模式)生产出来的产品,质量更稳定,次品率更低。

2. 面向对象设计原则 (SOLID)

在学习具体的“武功招式”(设计模式)之前,我们先要修炼“内功心法”(设计原则)。SOLID 原则是面向对象设计的五大基本原则,它们是写出优秀代码的指导方针,也是理解设计模式的基础。

  • S - 单一职责原则 (Single Responsibility Principle - SRP)

    • 定义:一个类(或模块、函数)应该只有一个引起它变化的原因。通俗地说,一个类只做一件相关的事情。
    • 生活例子
      • 瑞士军刀 vs. 专职工具:一把瑞士军刀功能很多,能开瓶盖、剪指甲、当螺丝刀。但如果只是想拧螺丝,一把专门的螺丝刀可能更好用,也更专业。如果瑞士军刀的某个功能坏了,可能整个刀都受影响。
      • 餐厅里的角色:厨师负责做菜,服务员负责点菜和上菜,收银员负责结账。如果一个厨师既要做菜,又要点菜,还要收银,那他会非常忙乱,效率低下,而且任何一个环节出问题都可能影响其他环节。
    • 软件中的体现:一个类叫 UserAuth,它只负责用户的登录、注册、权限验证。另一个类叫 UserProfile,它只负责管理用户的个人信息(昵称、头像等)。这样职责分明,修改用户验证逻辑不会影响到个人信息管理。
  • O - 开闭原则 (Open/Closed Principle - OCP)

    • 定义:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
    • 生活例子
      • USB接口:你的电脑有很多USB接口。你可以插U盘、鼠标、键盘、打印机等等。电脑的USB功能是“开放”给这些新设备的(扩展开放)。但你不需要为了插一个新的U盘而把电脑拆开,修改主板电路(修改关闭)。
      • 商场促销活动:商场经常搞各种促销活动,比如“满100减20”、“打8折”、“买一送一”。对于收银系统来说,它应该能够很容易地增加新的促销规则(对扩展开放),而不需要去修改原来已经写好的计算价格的核心代码(对修改关闭)。
    • 软件中的体现:通过接口、抽象类、回调等机制,当需要增加新功能时,我们倾向于增加新的类或模块来实现,而不是去改动已有的、稳定的代码。
  • L - 里氏替换原则 (Liskov Substitution Principle - LSP)

    • 定义:所有引用基类(父类)的地方必须能透明地使用其子类的对象。也就是说,子类对象能够替换其父类对象,而程序行为不发生改变。
    • 生活例子
      • 鸟会飞吗?:我们说“鸟会飞”。燕子是鸟,它会飞,没问题。企鹅也是鸟,但它不会飞。如果一个程序期望所有“鸟”都能飞,那么把企鹅传进去就会出问题。这就不符合里氏替换原则。更好的设计可能是,并非所有鸟都会飞,或者有一个“会飞的鸟”的子分类。
      • 遥控器:你有一个电视遥控器(父类),它可以控制电视。现在你买了一个新的智能电视,它的遥控器(子类)除了能控制电视,还能语音输入。在所有只需要“控制电视”的地方,这个新的智能遥控器应该也能正常工作,就像旧遥控器一样。
    • 软件中的体现:子类继承父类时,不应该重写父类的方法并改变其原有的行为逻辑,尤其是不要缩小父类方法的能力范围或抛出父类没有声明的异常。
  • I - 接口隔离原则 (Interface Segregation Principle - ISP)

    • 定义:客户端不应该被迫依赖于它不使用的方法。一个类对另一个类的依赖应该建立在最小的接口上。
    • 生活例子
      • 多功能打印机 vs. 专用打印机:一台多功能一体机,有打印、复印、扫描、传真功能。如果你只是想打印文件,但这个一体机的操作界面非常复杂,把所有功能都堆在一起,你可能需要找半天打印按钮。更好的方式是,即使是多功能一体机,也应该提供简洁的“打印”专用界面或按钮。
      • 餐厅菜单:一个大而全的菜单,包含了中餐、西餐、日料、韩料。如果你只想吃中餐,却要翻阅所有菜品,就很麻烦。更好的做法是提供分类菜单,比如“中餐菜单”、“西餐菜单”。
    • 软件中的体现:定义小而专的接口,而不是大而全的接口。如果一个类需要实现很多功能,可以考虑将这些功能拆分到不同的接口中。
      例如,一个 IWorker 接口有 work()eat() 方法。对于机器人来说,它只需要 work(),不需要 eat()。那么更好的设计是拆分成 IWorkable (有 work()) 和 IEatable (有 eat()) 两个接口,人类实现这两个接口,机器人只实现 IWorkable
  • D - 依赖倒置原则 (Dependency Inversion Principle - DIP)

    • 定义:高层模块不应该依赖于低层模块,两者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
    • 生活例子
      • 插座和电器:你家里的墙上有插座(抽象)。你的台灯、电脑、手机充电器(细节/低层模块)都是按照插座的标准设计的,可以直接插到任何符合标准的插座上使用。你不需要为每一种电器都准备一种特定的墙壁接口。高层模块(你使用电器的需求)和低层模块(各种电器)都依赖于“插座标准”这个抽象。
      • 老板和员工:老板(高层模块)不会直接关心每个员工(低层模块)具体是怎么完成任务的。老板只关心任务是否完成(依赖于“任务完成”这个抽象)。员工则按照任务要求(抽象)去具体执行。
    • 软件中的体现:多使用接口或抽象类进行编程。高层业务逻辑(比如订单处理流程)不直接依赖于具体的数据库实现(比如MySQL或Oracle),而是依赖于一个通用的数据访问接口。这样,如果以后想换数据库,只需要提供一个新的实现了该接口的数据库访问类即可,高层业务逻辑不需要改动。
  • 其他相关原则

    • 迪米特法则 (Law of Demeter - LoD) / 最少知识原则 (Least Knowledge Principle - LKP)

      • 定义:一个对象应该对其他对象保持最少的了解。通俗地说,只和你的直接朋友交谈,不要和朋友的朋友交谈。
      • 生活例子:你去ATM机取钱。你只需要和ATM机交互(插入银行卡、输入密码、选择金额)。你不需要知道ATM机内部是如何连接到银行系统、如何验证密码、如何吐钞的。ATM机帮你处理了这些复杂性。
      • 软件中的体现:一个类的方法应该尽量少地调用其他类的方法,尤其是那些通过好几层关系才能访问到的对象的方法。这有助于降低类之间的耦合度。
    • 组合/聚合复用原则 (Composition/Aggregation Reuse Principle - CARP)

      • 定义:尽量使用对象组合/聚合,而不是继承来达到复用的目的。
      • 生活例子
        • 汽车:一辆汽车是由发动机、轮胎、方向盘、座椅等部件“组合”而成的。汽车“拥有”一个发动机,而不是汽车“是”一个发动机(继承)。如果发动机坏了,可以换一个新的发动机,而不需要把整辆车都换掉。这种组合关系更灵活。
        • 电脑:你的电脑由CPU、内存条、硬盘、显卡等组件构成。你可以升级内存条,或者换一个更大的硬盘,而不需要换掉整个电脑。
      • 软件中的体现:当一个类需要另一个类的功能时,优先考虑将另一个类的对象作为当前类的一个成员变量(组合),而不是让当前类去继承那个类。组合比继承更灵活,耦合度更低。

理解并运用好这些设计原则,是掌握设计模式、写出高质量代码的关键第一步。它们就像武侠小说里的内功心法,虽然不直接教你怎么打败敌人,但深厚的内力能让你学习任何招式都事半功倍!

相关文章:

零基础设计模式——设计模式入门

第一部分:设计模式入门 欢迎来到设计模式的世界!别担心,这听起来可能很“高大上”,但我们会用最生活化的例子来帮助你理解。 1. 什么是设计模式? 想象一下,你是个大厨,每天都要做很多菜。有些…...

通过vcpkg交叉编译grpc:构建Arm64平台的Docker化开发环境

一、引言 在现代软件开发中,交叉编译是构建跨平台应用程序的关键技术。本文将详细介绍如何使用Docker容器和vcpkg包管理器为Arm64架构交叉编译gRPC库。这种方法特别适用于需要在x86开发机上为ARM服务器或嵌入式设备构建高性能RPC服务的场景。 二、配置Docker交叉编…...

Nginx基础知识

Nginx是什么? Nginx 是一款高性能的 Web 服务器、反向代理服务器和负载均衡器,以其高并发处理能力和低内存消耗著称。以下是 Nginx 的基础知识和常见配置示例: 1. 核心概念 • 配置文件位置:通常为 /etc/nginx/nginx.conf 或 /us…...

【计算机主板架构】ITX架构

一、引言 在计算机硬件的广阔领域中,主板架构犹如大厦的基石,对整个计算机系统的性能、功能和扩展性起着至关重要的作用。其中,ITX架构以其小巧、灵活和独特的设计理念,在特定的应用场景中脱颖而出。从家庭媒体中心到小型办公电脑…...

ubuntu 20.04 运行和编译LOAM_Velodyne

摘要:创建工作空间-->src下克隆代码(https://github.com/laboshinl/loam_velodyne)-->修改四处代码(找到src/loam_velodyne路径下的CMakeLists.txt文件,注释掉35行代码和将/LOAM/src/loam_velodyne/src/lib文件夹…...

云计算简介:从“水电”到“数字引擎”的技术革命

云计算简介:从“水电”到“数字引擎”的技术革命 在当今数字化浪潮中,云计算早已从一个技术概念演变为支撑现代社会运转的核心基础设施。无论是你手机里的天气预报、电商购物的推荐系统,还是企业内部的ERP系统,背后都离不开云计算…...

femap许可与多用户共享

随着电磁仿真技术的发展,Femap作为一款领先的工具,在多个领域中发挥着不可替代的作用。然而,对于许多团队和企业来说,如何高效、经济地管理和使用Femap许可证成为了一个亟待解决的问题。本文将探讨Femap许可与多用户共享的概念、优…...

spring中yml配置上下文与tomcat等外部容器不一致问题

结论:外部优先级大于内部 在 application.yml 中配置了: server:port: 8080servlet:context-path: /demo这表示你的 Spring Boot 应用的上下文路径(context-path)是 /demo,即访问你的服务时,URL 必须以 /d…...

网络I/O学习-poll(三)

一、为什么要用Poll 由于select参数太多,较于复杂,调用起来较为麻烦;poll对其进行了优化 二、poll机制 poll也是一个系统调用,每次调用都会将所有客户端的fd拷贝到内核空间,然后进行轮询,判断IO是否就绪…...

云原生攻防2(Docker基础补充)

Docker基础入门 容器介绍 Docker是什么 Docker是基于Linux内核实现,最早是采用了 LXC技术,后来Docker自己研发了runc技术运行容器。 它基于Google Go语言实现,采用客户端/服务端架构,使用API来管理和创建容器。 虚拟机 VS Docker Namespace 内核命名空间属于容器非常核…...

【C++模板与泛型编程】实例化

目录 一、模板实例化的基本概念 1.1 什么是模板实例化? 1.2 实例化的触发条件 1.3 实例化的类型 二、隐式实例化 2.1 隐式实例化的工作原理 2.2 类模板的隐式实例化 2.3 隐式实例化的局限性 三、显式实例化 3.1 显式实例化声明(extern templat…...

CI/CD 实践:实现可灰度、可监控、可回滚的现代部署体系

CI/CD 实践:实现可灰度、可监控、可回滚的现代部署体系 一、背景 随着微服务架构、云原生技术的普及,传统的手动部署方式已难以满足现代业务快速迭代、高可用的需求。CI/CD(持续集成/持续交付)作为现代 DevOps 的核心环节&#…...

后退的风景

后退的风景 前言回退的景色 前言 坐在高铁的窗边,这是一趟回程的旅途,所有的树木、铁塔、石碑向后涌去,一如从前。 所谓风景正是如此,无非是看到了一段触动内心的感受,这段感受可能是伤心,亦或是欣喜。这…...

腾讯云安装halo博客

腾讯云安装halo博客 如果网站已经配置好可以直接使用的,可以直接跳转到《6》进行1panel的安装, 如果跳过之后安装出现问题,可以看看前面步骤 从《6》开始的安装视频 我估计是网站默认放开的端口和他返代理应用的端口冲突了,重装…...

Excel宏和VBA的详细分步指南

Excel宏和VBA的详细分步指南 一、宏录制与代码分析(超详细版)1. 启用开发工具2. 录制宏 二、VBA核心语法(深入详解)1. 变量与数据类型2. 循环结构3. 条件判断2. Worksheet对象3. Range对象的高级操作 四、实用案例扩展1. 数据清洗…...

第十六届蓝桥杯复盘

文章目录 1.数位倍数2.IPv63.变换数组4.最大数字5.小说6.01串7.甘蔗8.原料采购 省赛过去一段时间了,现在复盘下,省赛报完名后一直没准备所以没打算参赛,直到比赛前两天才决定参加,赛前两天匆匆忙忙下载安装了比赛要用的编译器ecli…...

深度学习---模型预热(Model Warm-Up)

一、基本概念与核心定义 模型预热是指在机器学习模型正式训练或推理前,通过特定技术手段使模型参数、计算图或运行环境提前进入稳定状态的过程。其本质是通过预处理操作降低初始阶段的不稳定性,从而提升后续任务的效率、精度或性能。 核心目标&#xf…...

python:pymysql概念、基本操作和注入问题讲解

python:pymysql分享目录 一、概念二、数据准备三、安装pymysql四、pymysql使用(一)使用步骤(二)查询操作(三)增(四)改(五)删 五、关于pymysql注入…...

科普:极简的AI乱战江湖

本文无图。 大模型 ‌2022年2月,‌文生图应用的鼻祖Midjourney上线。 ‌2022年8月,‌开源版的Midjourney,也就是Stable Diffusion上线。 2022年11月30日‌,OpenAI正式发布ChatGPT-3.5。 此后,不断有【大模型】面世&…...

养生指南:解锁健康生活新方式

一、饮食:精准搭配,科学滋养 饮食以 “少加工、多天然” 为核心。早餐选择希腊酸奶搭配蓝莓与一把混合坚果,富含蛋白质与抗氧化成分;午餐用藜麦饭搭配香煎龙利鱼和彩椒炒芦笋,营养全面且低脂;晚餐则是山药…...

Dolphinscheduler执行工作流失败,后台报duplicate key错误

背景 现场童鞋发来一张图如下 我很懵逼,不知道出了啥问题,在聊天工具上聊了10m还不知道啥,干脆就搞个腾讯会议(在此感谢腾讯爸爸免费会议)。哦,现场临时搭建了dolphinscheduler,然后导入工作流…...

【Vue】路由2——编程式路由导航、 两个新的生命周期钩子 以及 路由守卫、路由器的两种工作模式

目录 一、路由的push 与 replace切换 二、编程式路由导航 三、缓存路由组件 四、新增的两个生命周期钩子 五、路由守卫 5.1 前置路由守卫 5.2 后置路由守卫 5.3 独立路由守卫 5.4 组件内 路由守卫 六、路由器的两种工作模式 6.1 hash模式 6.2 history模式 6.3 V…...

VDC、SMC、MCU怎么协同工作的?

华为视频会议系统中,VDC(终端控制)、SMC(会话管理)、MCU(媒体处理) 通过分层协作实现端到端会议管理,其协同工作机制可总结为以下清晰架构: 1. 角色分工 组件核心职责类…...

ETL数据集成产品选型需要关注哪些方面?

ETL(Extract,Transform,Load)工具作为数据仓库和数据分析流程中的关键环节,其选型对于企业的数据战略实施有着深远的影响。谷云科技在 ETL 领域耕耘多年,通过自身产品的实践应用,对 ETL 产品选型…...

DriveGenVLM:基于视觉-语言模型的自动驾驶真实世界视频生成

《DriveGenVLM: Real-world Video Generation for Vision Language Model based Autonomous Driving》2024年8月发表,来自哥伦比亚大学的论文。 自动驾驶技术的进步需要越来越复杂的方法来理解和预测现实世界的场景。视觉语言模型(VLM)正在成…...

【达梦数据库】过程、函数、包头和包体详解零基础

目录 背景参考链接解释包头包体 背景 最近遇到关于包头和包体的问题,学习并记录 参考链接 参考链接: oracle的过程、函数、包头和包体详解零基础 解释 包头主要用于定义接口,包体主要用以实现包体中声明的存储过程、函数等。 包头 包体...

HarmonyOS开发样式布局

个人简介 👨‍💻‍个人主页: 魔术师 📖学习方向: 主攻前端方向,正逐渐往全栈发展 🚴个人状态: 研发工程师,现效力于政务服务网事业 🇨🇳人生格言&…...

SpringCloud——EureKa

目录 1.前言 1.微服务拆分及远程调用 3.EureKa注册中心 远程调用的问题 eureka原理 搭建EureKaServer 服务注册 服务发现 1.前言 分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为服务。 优点: 降…...

【力扣刷题】LeetCode763-划分字母区间

文章目录 1. LeetCode763_划分字母区间 1. LeetCode763_划分字母区间 题目链接🔗 🐧解题思路: 区间合并 题目中这句话很关键“我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。” 你这句话你可以理解为 把…...

使用for循环和字典功能,统计字符出现在一个英文句子中的次数(python)

本题目要求写出一段代码实现输入一个英文句子后,统计句子中各个字符(不区分大小写,包含空格和标点符号)出现的次数。 输入格式: 请例如:输入 Life is short,we need Python. 。 输出格式: 对每一个字符输出对应的出现次数&…...

带你搞懂@Valid和@Validated的区别

前言 有参数传递的地方都少不了参数校验。在实际开发过程中,参数校验是保证程序健壮性的重要环节,前端的参数校验是为了用户体验,后端的参数校验是为了安全。试想一下,如果在 Controller 层中没有经过任何校验的参数通过 Service层…...

大数据hadoop小文件处理方案

Hadoop处理小文件问题的解决方案可分为存储优化、处理优化和架构优化三个维度,以下是综合技术方案及实施要点: 一、存储层优化方案 1.文件合并技术 离线合并:使用hadoop fs -getmerge命令将多个小文件合并为大文件并重新上传; MapReduce合并:开发专用MR…...

安装NASM

安装NASM 注意:这篇文章在librdkafka安装系列,不需要参考,仅为了记录而写,请不要参考,后续编译openssl的时候,可以使用参数no-asm,不影响整个的编译步骤。这里主要作为记录帖子。 本篇是Windows系统编译Qt使用的kafka(librdkafka)系列可以不参考的一篇,编译librdkaf…...

RabbitMQ-高级

RabbitMQ-高级 文章目录 RabbitMQ-高级前言:消息可靠性问题1.生产者可靠性1.生产者重连2.生产者确认机制3.生产者代码实现原理 2.MQ的可靠性1.数据持久化2.LazyQueue 3.消费者可靠性1.消费者确认机制1.确认机制2.确认功能 2.失败重试机制1.开启失败重试机制2.多次失…...

深入解析Spring Boot与Kafka集成:构建高效消息驱动微服务

深入解析Spring Boot与Kafka集成:构建高效消息驱动微服务 引言 在现代微服务架构中,消息队列扮演着至关重要的角色,而Apache Kafka凭借其高吞吐量、低延迟和可扩展性,成为了许多企业的首选。本文将详细介绍如何在Spring Boot应用…...

Unreal Engine: Windows 下打包 AirSim项目 为 Linux 平台项目

环境: Windows: win10, UE4.27, Visual Studio 2022 Community.Linux: 22.04 windows环境安装教程: 链接遇到的问题(问题:解决方案) 点击Linux打包按钮,跳转至网页而不是执行打包流程:用VS打开项…...

【图像大模型】FLUX.1-dev:深度解析与实战指南

FLUX.1-dev:深度解析与实战指南 一、引言二、模型架构与技术原理(一)模型架构(二)Rectified Flow 技术(三)指导蒸馏(Guidance Distillation) 三、项目运行方式与执行步骤…...

mariadb 升级 (通过yum)

* 注意下 服务名, 有的服务器上是mysql,有的叫mariadb,mysqld的 #停止 systemctl stop mysql #修改源 vi /etc/yum.repos.d/MariaDB.repo baseurl http://yum.mariadb.org/11.4/centos7-amd64 #卸载 yum remove mysql #安装 yum install MariaDB-server galera-4 MariaDB-…...

Flink 非确定有限自动机NFA

Flink 是一个用于状态化计算的分布式流处理框架,而非确定有限自动机(NFA, Non-deterministic Finite Automaton)是一种在计算机科学中广泛使用的抽象计算模型,常用于正则表达式匹配、模式识别等领域。 Apache Flink 提供了对 NFA…...

Profinet转Ethernet IP主站网关:点燃氢醌生产线的智慧之光!

案例分享:转角指示器和Profinet转EthernetIP网关的应用 在现代工业自动化中,设备和系统之间的高效通信至关重要。最近,我们在某大型化工企业的生产线上实施了一个项目,旨在通过先进的设备和通信技术提高生产效率和安全性。该项目…...

动态IP技术在跨境电商中的创新应用与战略价值解析

在全球化4.0时代,跨境电商正经历从"流量红利"向"技术红利"的深度转型。动态IP技术作为网络基础设施的关键组件,正在重塑跨境贸易的运营逻辑。本文将从技术架构、应用场景、创新实践三个维度,揭示动态IP如何成为跨境电商突…...

WEB安全--SQL注入--Oracle注入

一、Oracle知识点了解 1.1、系统变量与表 版本号:SELECT * FROM V$VERSION 用户名:USER、SYS_CONTEXT(USERENV,SESSION_USER) 库名:ALL_USERS、USER_USERS、DBA_USERS 表名:ALL_TABLES、DBA_TABLES、USER_TABLES 字段名&…...

Unity预制体变体(Prefab Variants)、接口(Interface)、抽象类(Abstract Class)、枚举(Enumeration)

一、预制体变体(Prefab Variants) 预制体变体是什么? 预制体变体是指从同一个基础预制体派生出来的不同版本的预制体。这些变体可以包含不同的组件配置、属性值、子对象或者行为,但它们共享一些共同的基础结构和特性。通过创建预…...

pymol包安装和使用

PyMOL 是一款分子可视化软件,而pymol则是其对应的 Python 包,借助它能够实现对 PyMOL 的编程控制。 主要功能 分子结构可视化:支持展示蛋白质、核酸、小分子等多种分子的 3D 结构。自定义渲染:可对分子的表示方式、颜色以及光照…...

【学习笔记】机器学习(Machine Learning) | 第七章|神经网络(2)

机器学习(Machine Learning) 简要声明 基于吴恩达教授(Andrew Ng)课程视频 BiliBili课程资源 文章目录 机器学习(Machine Learning)简要声明 神经网络在图像识别及手写数字识别中的应用一、神经网络在图像识别中的应用&#xff0…...

【神经网络与深度学习】model.eval() 模式

引言 在深度学习模型的训练和推理过程中,不同的模式设置对模型的行为和性能有着重要影响。model.eval() 是 PyTorch 等深度学习框架中的关键操作,它用于将模型切换到评估模式(evaluation mode),确保模型在测试和推理阶…...

ASIC和FPGA,到底应该选择哪个?

ASIC和FPGA各有优缺点。 ASIC针对特定需求,具有高性能、低功耗和低成本(在大规模量产时);但设计周期长、成本高、风险大。FPGA则适合快速原型验证和中小批量应用,开发周期短,灵活性高,适合初创企…...

JavaScript 性能优化实战指南

JavaScript 性能优化实战指南 前言 随着前端应用复杂度提升,JavaScript 性能瓶颈日益突出。高效的性能优化不仅能提升用户体验,还能增强系统稳定性和可维护性。本文系统梳理了 JavaScript 性能优化的核心思路、常见场景和实战案例,结合代码…...

Unity3D HUD UI性能优化方案

前言 在Unity3D中实现高性能的HUD UI需要综合考虑渲染效率、CPU开销和内存管理。以下是分步的优化方案: 对惹,这里有一个游戏开发交流小组,大家可以点击进来一起交流一下开发经验呀! 1. 降低Draw Call:合批与图集 …...

晶圆Map图芯片选择显示示例

效果 列表中有四个Mark点,需求是选择某一个点时在Map图中区别显示出来。 实现思路: 根据DataGrid 的行选择 SelectionChanged事件,先循环所有Mark点清除Rectangle的边框大小,再获取选择的芯片,设置Rectangle的边框大小和颜色。 示例代码 1.UI代码 <DataGrid Grid.…...