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

前端设计模式介绍及案例(单例模式、代理模式、工厂模式、装饰者模式、观察者模式)

概要

本文主要介绍了前端设计模式的定义、分类以及常用设计模式的具体案例。

前言

使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

分类

一、创建型模式-研究高效的创建对象

单例模式

抽象工厂模式

建造者模式

工厂模式

原型模式

二、结构型模式-设计对象的结构和关系

适配器模式

桥接模式

装饰模式

组合模式

外观模式

享元模式

代理模式

三、行为型模式-设计对象的行为

模板方法模式

命令模式

迭代器模式

观察者模式

中介者模式

备忘录模式

解释器模式

状态模式

策略模式

职责链模式

访问者模式

开发时的流程

优先降低复杂度,尽量降低耦合度

1.利用单一职责原则,开闭原则,里氏代换原则降低复杂度。

2.通过迪米特法则减少耦合度

3.通过依赖倒置原则消除可以没有的耦合

定义及案例

1.单例模式:

​ 一个类仅有一个实例

<div class="toast"><button id="alertBtn">弹窗</button><button id="alertBtn1">弹窗1</button><button id="alertBtn2">弹窗2</button><div>我是弹窗</div></div><script>// var alert = (function(){//     var div = document.createElement('div');//     div.innerHTML = '我是弹窗';//     div.style.display = 'none';//     document.body.appendChild(div)//     return div// })()// document.getElementById('alertBtn').onclick = function(){//     alert.style.display = 'block'// }// var createAlert = function(){//     var div = document.createElement('div');//     div.innerHTML = '我是弹窗1'//     div.style.display = 'none'//     document.body.appendChild(div)//     return div// }// document.getElementById('alertBtn1').onclick = function(){//     var alertLayer = createAlert();//     alertLayer.style.display = 'block'// }var createAlert1 = (function(){var div;return function(){if(!div){div = document.createElement('div');div.innerHTML = '我是弹窗2'div.style.display = 'none'document.body.appendChild(div)}return div}})()var createIframe = (function(){var iframe;return function(){if(!iframe){iframe = document.createElement('div');iframe.innerHTML = '我是iframe'document.body.appendChild(iframe)}return iframe}})()var getSingle = function( fn ){var result;if(!result){result = fn.apply(this, arguments)}return function(){return result}}var createAlert3 = function(){var div = document.createElement('div');div.innerHTML = '我是弹窗3'div.style.display = 'none'document.body.appendChild(div)return div}var createSingleAlert = getSingle(createAlert3)// document.getElementById('alertBtn2').onclick = function(){//     var alertLayer = createSingleAlert();//     alertLayer.style.display = 'block'// }var createIframe1 = function(){var iframe = document.createElement('iframe')document.body.appendChild(iframe);return iframe}var createIframe2 = getSingle(createIframe1)document.getElementById('alertBtn2').onclick = function(){var iframe1111 = createIframe2();iframe1111.src = 'http://www.baidu.com'}</script>
2.代理模式:

​ 虚拟代理:虚拟代理是把一些开销很大的对象,延迟到真正需要它的时候才去创建执行=====图片加载,文件上传

​ 安全/保护代理:控制真实对象的访问权限=====登录操作后才能看全功能,前端校验

​ 远程代理(一个对象将不同空间的对象进行局部代理)=====监控多个对象的状态,总机监控分店

​ 智能代理(调用对象代理处理另外一些事情如垃圾回收机制增加额外的服务)=====提供额外的其他服务火车站代售处

<script>// 代理模式// 定义:为一个对象提供一个代用品或占位符,以便控制它的访问。// 关键点:当客户不方便直接访问一个对象或者不满足需求的时候,提供一个替身对象来控制对这个对象的访问,客户实际上访问的是替身对象。// 替身对象对请求做出一些处理之后,再把请求转交给本体对象(女神)// 租房者  中介代理4500  房东3500// 代理模式好处有点事什么。// 第一回 第一个人上// // var Flower = function(name) {//     var flowers = {//         flowers: name//     }//     return flowers// }// var dengGe = {//     sendFlower: function(target) {//         var flowers = new Flower('向日葵')//         target.receiveFlower(flowers.flowers)//     }// }// var goddess1 = {//     receiveFlower: function(flower) {//         console.log('收到:' + flower + ',你是个好人')//     }// }// dengGe.sendFlower(goddess1)// 第二回,第二个人上// var Flower = function(name) {//     var flowers = {//         flowers: name//     }//     return flowers// }// var dengGe = {//     sendFlower: function(target) {//         var flowers = new Flower('向日葵')//         target.receiveFlower(flowers.flowers)//     }// }// var chengGe = {//     receiveFlower: function(flower) {//         goddess2.receiveFlower(flower)//     }// }// var goddess2 = {//     receiveFlower: function(flower) {//         console.log('女神收到:' + flower + ',你是个好人')//     }// }// dengGe.sendFlower(chengGe)// 第三回,众人出主意var Flower = function(name) {var flowers = {flowers: name}return flowers}var dengGe = {sendFlower: function(target) {var flowers = new Flower('向日葵')target.receiveFlower(flowers.flowers)}}var chengGe = {receiveFlower: function(flower) {// 监听心情好的时候goddess3.listenGoodMood(function() {goddess3.receiveFlower(flower)})}}var goddess3 = {receiveFlower: function(flower) {console.log('女神收到:' + flower)},listenGoodMood: function(fn) {setTimeout(function() {fn()}, 200000)}}//一天一束  有需求的时候一束 解约成本// 开销很大的对象,等待真正需要的时候再去创建// 代理另一个优点:保护的作用// 登录的时候,// 代理模式:保护,节约成本。// 代理模式的本质:保护和中介dengGe.sendFlower(chengGe)</script>
3.工厂模式:

​ 高效的创建对象

​ 定义:工厂模式定义创建对象的接口,但是让子类去真正的实例化。也就是工厂方法将类的实例化延迟到子类

    <!-- 统一建造 --><!-- 简单工厂  抽象工厂  工厂模式--><!-- 造车 --><script>// 定义车工场function CarFactory() {}// BBACarFactory.BMW = function() {this.name = "宝马"}CarFactory.Benz = function() {this.name = "奔驰"}CarFactory.Audi = function() {this.name = '奥迪'}CarFactory.prototype.drive = function() {return '该批次的' + this.name + '添加了自动驾驶功能'}CarFactory.create = function(carName) {if (typeof(CarFactory[carName]) !== 'function') {console.log('无法建造' + carName)return false}if (typeof(CarFactory[carName].prototype.drive !== 'function')) {CarFactory[carName].prototype = new CarFactory();}var newCar = new CarFactory[carName]();return newCar}var car = CarFactory.create('BMW')console.log(car.drive())// 创建的时候使用,用来统一建造</script>

4.工厂方法模式(抽象工厂)

​ 代码比简单工厂模式复杂了,引入了抽象层,还有子工厂,这会增加代码的复杂度和理解难度。

​ 但是相比于简单工厂模式,代码的维护性和扩展性提高了,新增产品时,只需要增加对应的产品类和产品工厂类,不需要修改到抽象工厂类和其他子工厂。

​ 更加符合面向对象的开放封闭原则

5.装饰者模式

​ 定义:在不改变元对象的基础上,通过对其进行包装拓展(添加属性方法)

​ 装饰者(decorator)模式能够在不改变对象自身的基础上在程序运行期间给对像动态的添加职责。

​ 与继承相比,装饰者是一种更轻便灵活的做法。

​ 可以当脚本运行时,在子类中增加行为会影响原有类所有的实例,而装饰者却不然。取而代之的是它能给不同对象各自添加新行为

​ 实现:构造函数需要一个装饰资源池,提供相应的装饰方法,提供添加装饰方法的方法。

    <script>// 定义:在不改变远对象的基础上,通过对其进行包装和拓展(添加属性和方法)使原有的对象可以满足用户更复杂的需求。// 买房子,给你交付毛坯房,功能性不强,外观,卧室,客厅,洗手间。。。。// var house = {//     name: '房子',//     xxx: 'k',//     yyy: ''// }// Macbook 没有光驱,内存8G,16G。保险function Macbook() {this.cost = function() {return 1000}}// 内存function Memory(macbook) {this.cost = function() {return macbook.cost() + 100}}// 蓝光驱动器function BlurayDrive(macbook) {this.cost = function() {return macbook.cost() + 300}}// 保险function Insurance(macbook) {this.cost = function() {return macbook.cost() + 200}}var myMacBook = new Macbook();var myMacBook1 = new Memory(new Macbook())console.log('我花费了:' + myMacBook1.cost())</script>
6.观察者模式

​ 定义:观察者模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。

​ 事实上,只要你曾经在DOM节点上绑定过事件函数,那么你就曾经使用过观察者模式了!

<!-- 发布订阅模式 --><!-- 设立一个观察哨,监视你的一举一动,根据你的一举一动,来做出相应的反应 --><!-- 发布消息,订阅消息,退订消息  公众号 发布一篇文章,订阅公众,取消关注 --><!-- A 对象 -> B对象 --><!-- 多线程 --><!-- 汇率计算  1 人民币兑美元  日元  韩元 --><script>var observer = (function() {var _message = {};return {// 订阅信息regist: function(type, fn) {if (typeof _message[type] === 'undefined') {_message[type] = [fn]} else {_message[type].push(fn)}},//发布信息fire: function(type, args) {// 如果消息没有被注册,则返回if (!_message[type]) {return}// 定义一下消息信息var events = {type: type,args: args || {}}var len = _message[type].length;for (var i = 0; i < len; i++) {_message[type][i].call(this, events)}},// 移除remove: function(type, fn) {if (_message[type] instanceof Array) {var i = _message[type].length - 1;for (i; i >= 0; i--) {_message[type][i] === fn && _message[type].splice(i, 1)}}}}})()observer.regist('test', function(e) {console.log(e.type, e.args.msg)})observer.fire('test', {msg: '发布信息1111'})</script>

相关文章:

前端设计模式介绍及案例(单例模式、代理模式、工厂模式、装饰者模式、观察者模式)

概要 本文主要介绍了前端设计模式的定义、分类以及常用设计模式的具体案例。 前言 使用设计模式的目的&#xff1a;为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化&#xff1b;设计模式是软件工程的基石脉络&#xff0c;如同大厦…...

开源堡垒机 JumpServer 社区版实战教程:基于 Ubuntu 22.04 离线安装 JumpServer 社区版 v4.4.1

文章目录 开源堡垒机 JumpServer 社区版实战教程&#xff1a;基于 Ubuntu 22.04 离线安装 JumpServer 社区版 v4.4.1一、环境要求1.1 操作系统1.1.1 Ubuntu1.1.2 CentOS 1.2 数据库1.2.1 JumpServer 需要使用的数据库1.2.2 创建数据库 SQL 参考1.2.2.1 PostgreSQL1.2.2.2 MySQL…...

电源测试和测量系统的创新遥感方法可以消除哪些潜在问题

传统的遥感方法 远程感测是一种行之有效的方法&#xff0c;通过消除连接电缆中压降的影响来调节负载点的直流功率。这在测试和测量应用中尤其重要&#xff0c;在这些应用中&#xff0c;电源电压在一系列负载条件下的准确性和一致性通常对于获得准确且可重复的测试结果至关重要…...

10、《Thymeleaf模板引擎:动态页面开发全攻略》

Thymeleaf模板引擎&#xff1a;动态页面开发全攻略 一、Thymeleaf核心价值解析 天然HTML亲和力&#xff1a;Thymeleaf允许直接使用.html文件作为模板&#xff0c;支持浏览器直接预览静态原型&#xff0c;同时通过属性标签&#xff08;如th:text&#xff09;实现动态渲染&…...

Day1 25/2/14 FRI

【一周刷爆LeetCode&#xff0c;算法大神左神&#xff08;左程云&#xff09;耗时100天打造算法与数据结构基础到高级全家桶教程&#xff0c;直击BTAJ等一线大厂必问算法面试题真题详解&#xff08;马士兵&#xff09;】https://www.bilibili.com/video/BV13g41157hK?p3&v…...

untiy3D 让角色动起来,角色动画的使用

1.untiy 商店下载动画模型 2.导入项目 模型拖入到场景中 3.创建动画器控制器 4.动画控制器挂载到plarer上 5.把动画idle和pickup拖入到动画器 6.右键动画创建过渡效果(Make Transition) 6.设置参数用条件控制 7.当选中参数时启动过渡 运行效果 119 (二)用脚本控制动画…...

Word 里面嵌入DeepSeek

目录 一、问题描述 二、解决方法 三、代码 四、注意事项 五、总结 一、问题描述 如何在Word里面嵌入DeepSeek? 二、解决方法 1、新建文档&#xff0c;按 AltF11&#xff0c;进入VB界面。 2、选中文档&#xff0c;右键->插入->模块。 3、进入模块&#xff0c;粘入…...

深入浅出Java反射:掌握动态编程的艺术

小程一言反射何为反射反射核心类反射的基本使用获取Class对象创建对象调用方法访问字段 示例程序应用场景优缺点分析优点缺点 注意 再深入一些反射与泛型反射与注解反射与动态代理反射与类加载器 结语 小程一言 本专栏是对Java知识点的总结。在学习Java的过程中&#xff0c;学习…...

exr 格式下 全景图(经纬图、panorama)转 cubemap

先上效果 &#xff08;X, -X, Y, -Y, Z, -Z&#xff09; 下载 exr 经纬图 笔者用的这张&#xff1a;https://polyhaven.com/a/kloofendal_48d_partly_cloudy_puresky 使用 Openexr 的 exrenvmap 工具 下载 我 build 了一份 3.3.2 版本的&#xff0c;免积分下载。 https:/…...

解锁建造者模式:Java 编程中的对象构建秘籍

系列文章目录 后续补充~~~~ 文章目录 一、引言二、建造者模式原理剖析2.1 定义与概念2.2 模式结构与角色2.2.1 产品(Product)2.2.2 建造者(Builder)2.2.3 具体建造者(ConcreteBuilder)2.2.4 指挥者(Director)2.3 工作流程与交互机制三、建造者模式在 Java 中的优势3.1 …...

ArcGIS Pro显示缓存空间不足导致编辑或加载数据显示不完全

ArcGIS Pro对于显示缓存有32GB的限制&#xff0c;所以当缓存设置中&#xff0c;缓存将达到32GB时&#xff0c;会出现编辑、加载slpk显示不全的情况。 清除计算机上的显示缓存方法 1.启动 ArcGlS Pro。单击左下角的设置&#xff0c;然后单击选项&#xff1b; 2.在选项窗口中&…...

大数据、云计算、人工智能等技术深度融合的智慧快消开源了。

智慧快消视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。 基于多年的深度…...

C++17 中的 std::reduce:详细教程

文章目录 1. 简介2. 函数签名3. 使用场景3.1 简单的累加操作3.2 自定义归并操作3.3 并行计算的性能优势 4. 注意事项4.1 归并操作的结合律和交换律4.2 默认值的使用 5. 总结 1. 简介 std::reduce 是 C17 标准库中引入的一个算法&#xff0c;用于对范围内的元素进行归并操作。它…...

Python爬虫实战:获取笔趣阁图书信息,并做数据分析

注意:以下内容仅供技术研究,请遵守目标网站的robots.txt规定,控制请求频率避免对目标服务器造成过大压力! 1. 环境准备与反爬策略 python import requests from bs4 import BeautifulSoup import pandas as pd import re import time import random from fake_useragent …...

win11系统 Docker Desktop提示Docker Engine stopped解决全过程记录

DockerDesktop安装指南以及Windows下WSL2和 Hyper-V相关问题追查 【已解决】win10系统 Docker 提示Docker Engine stopped解决全过程记录 本篇文章主要记录Docker Desktop安装和使用时出现的问题及解决方法&#xff0c;以及后续使用夜神模拟器&#xff0c;关闭了Hyper-V时&am…...

c# sqlite 批量生成insert语句的函数

函数开始 using System; using System.Collections.Generic; using System.Text;public class SqliteHelper {public static List<string> GenerateInsertStatements(string tableName, List<string> columns, List<List<object>> data){List<stri…...

ASP.NET Core SixLabors.ImageSharp v3.x 的图像实用程序类

使用用 C# 编写的 asp.net core web 应用程序示例在 Windows 和 Linux web 服务器上处理图像&#xff0c;包括创建散点图和直方图&#xff0c;以及根据需要旋转图像以便正确显示。 这个小型实用程序库需要将 NuGet SixLabors.ImageSharp包&#xff08;版本 3.1.x&#xff09;添…...

湖仓分析|浙江霖梓基于 Doris + Paimon 打造实时/离线一体化湖仓架构

导读&#xff1a;浙江霖梓早期使用 CDH 产品套件搭建了大数据系统&#xff0c;面临业务逻辑冗余、查询效率低下等问题&#xff0c;基于 Apache Doris 进行整体架构与表结构的重构&#xff0c;并基于湖仓一体和查询加速展开深度探索与实践&#xff0c;打造了 Doris Paimon 的实…...

【AI-34】机器学习常用七大算法

以下是对这七大常用算法的浅显易懂解释&#xff1a; 1. k 邻近算法&#xff08;k - Nearest Neighbors&#xff0c;KNN&#xff09; 想象你在一个满是水果的大广场上&#xff0c;现在有个不认识的水果&#xff0c;想知道它是什么。k 邻近算法就是去看离这个水果最近的 k 个已…...

2025年金三银四经典自动化测试面试题

概述 觉得自动化测试很难&#xff1f; 是的&#xff0c;它确实不简单。但是学会它&#xff0c;工资高啊&#xff01; 担心面试的时候被问到自动化测试&#xff1f; 嗯&#xff0c;你担心的没错&#xff01;确实会被经常问到&#xff01; 现在应聘软件测试工程师的岗位&…...

遵循规则:利用大语言模型进行视频异常检测的推理

文章目录 速览摘要01 引言02 相关工作视频异常检测大语言模型 03 归纳3.1 视觉感知3.2 规则生成Normal and Anomaly &#xff08;正常与异常&#xff09;Abstract and Concrete &#xff08;抽象与具体&#xff09;Human and Environment &#xff08;人类与环境&#xff09; 3…...

RFM模型-数据清洗

在进行数据清洗时&#xff0c;主要的目标是确保数据质量良好&#xff0c;以便后续的分析和建模工作能够顺利进行。针对你使用粒子群优化算法改进RFM模型来对电商数据进行用户群像划分的实验&#xff0c;数据清洗环节尤其重要&#xff0c;因为不干净的数据会影响模型的精度和效果…...

文件系统惹(细)

目录 块概念 分区 inode ext2文件系统 Boot Sector Super Block GDP&#xff08;group descriptor table&#xff09; Block Bitmap&#xff08;块位图&#xff09; Inode Bitmap &#xff08;inode位图&#xff09; Data Block inode和Datablock映射 目录和文件名 …...

中望CAD c#二次开发 ——VS环境配置

新建类库项目&#xff1a;下一步 下一步 下一步&#xff1a; 或直接&#xff1a; 改为&#xff1a; <Project Sdk"Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>NET48</TargetFramework> <LangVersion>pr…...

Centos7安装Clickhouse单节点部署

​ 部署流程 1、关闭防火墙&沙盒 关闭防火墙并关闭开机自启动 systemctl stop firewalld && systemctl disable firewalld查看selinux状态是否为disabled&#xff0c;否则修改 [rootlocalhost ~]# getenforce Enforcing修改为disabled vim /etc/selinux/config…...

4.SpringSecurity在分布式环境下的使用

参考 来源于黑马程序员&#xff1a; 手把手教你精通新版SpringSecurity 分布式认证概念说明 分布式认证&#xff0c;即我们常说的单点登录&#xff0c;简称SSO&#xff0c;指的是在多应用系统的项目中&#xff0c;用户只需要登录一次&#xff0c;就可以访 问所有互相信任的应…...

使用 Notepad++ 编辑显示 MarkDown

Notepad 是一款免费的开源文本编辑器&#xff0c;专为 Windows 用户设计。它是替代记事本&#xff08;Notepad&#xff09;的最佳选择之一&#xff0c;因为它功能强大且轻量级。Notepad 支持多种编程语言和文件格式&#xff0c;并可以通过插件扩展其功能。 Notepad 是一款功能…...

Spring 框架数据库操作常见问题深度剖析与解决方案

Spring 框架数据库操作常见问题深度剖析与解决方案 在 Java 开发的广阔天地中&#xff0c;Spring 框架无疑是开发者们的得力助手&#xff0c;尤其在数据库操作方面&#xff0c;它提供了丰富且强大的功能。然而&#xff0c;就像任何技术一样&#xff0c;在实际项目开发过程中&a…...

第一天:爬虫介绍

每天上午9点左右更新一到两篇文章到专栏《Python爬虫训练营》中&#xff0c;对于爬虫有兴趣的伙伴可以订阅专栏一起学习&#xff0c;完全免费。 键盘为桨&#xff0c;代码作帆。这趟为期30天左右的Python爬虫特训即将启航&#xff0c;每日解锁新海域&#xff1a;从Requests库的…...

ECP在Successfactors中paylisp越南语乱码问题

导读 pyalisp:ECP中显示工资单有两种方式&#xff0c;一种是PE51&#xff0c;一种是hrform&#xff0c;PE51就是划线的那种&#xff0c; 海外使用的比较多&#xff0c;国内基本没人使用&#xff0c;hrform就是pdf&#xff0c;可以编辑pdf&#xff0c;这个国内相对使用的人 比…...

Express 中间件分类

一、 按功能用途分类 1. 应用级中间件 这类中间件应用于整个 Express 应用程序&#xff0c;会对每个进入应用的请求进行处理。通过 app.use() 方法挂载&#xff0c;可用于执行一些全局性的任务&#xff0c;像日志记录、请求预处理、设置响应头这类操作。 const express req…...

基于Multi-Runtime的云原生多态微服务:解耦基础设施与业务逻辑的革命性实践

引言&#xff1a;当微服务遭遇复杂性爆炸 在分布式系统复杂度指数级增长的今天&#xff0c;一线开发者平均需要处理27种不同的基础设施组件配置。CNCF最新研究报告指出&#xff0c;采用Multi-Runtime架构可减少83%的非功能性代码编写量&#xff0c;同时使分布式原语&#xff0…...

flutter isolate到底是啥

在 Flutter 中&#xff0c;Isolate 是一种实现多线程编程的机制&#xff0c;下面从概念、工作原理、使用场景、使用示例几个方面详细介绍&#xff1a; 概念 在 Dart 语言&#xff08;Flutter 开发使用的编程语言&#xff09;里&#xff0c;每个 Dart 程序至少运行在一个 Isol…...

Http connect timed out

客户向云端服务请求时&#xff0c;连接云端域名显示连接超时&#xff0c;为什么呢&#xff0c;偶尔会有。 java.net.SocketTimeoutException: connect timed out at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketI…...

Flutter 异步编程利器:Future 与 Stream 深度解析

目录 一、Future&#xff1a;处理单次异步操作 1. 概念解读 2. 使用场景 3. 基本用法 3.1 创建 Future 3.2 使用 then 消费 Future 3.3 特性 二、Stream&#xff1a;处理连续异步事件流 1. 概念解读 2. 使用场景 3. 基本用法 3.1 创建 Stream 3.2 监听 Stream 3.…...

langchain实现的内部问答系统及本地化替代方案

主旨&#xff1a;问答系统搭建使用langchain要token&#xff0c;本文目的在于一、解析langchain调用过程&#xff0c;二、不使用langchain规避token&#xff0c;而使用本地化部署的方案方向。主要是本地向量化库的建立。 文章目录 主旨&#xff1a;问答系统搭建使用langchain要…...

“新旗手”三星Galaxy S25系列,再次定义了AI手机的进化方向

一年多前&#xff0c;三星Galaxy S24系列正式发布&#xff0c;作为首款由Galaxy AI赋能的AI手机&#xff0c;带来了即圈即搜、通话实时翻译、AI扩图等“神奇能力”。 彼时AI手机还是一个新物种&#xff0c;没有明确的产品定义&#xff0c;体验上也没有“标准答案”。三星Galax…...

JVM的类加载器

什么是类加载器&#xff1f; 类加载器&#xff1a;JVM只会运行二进制文件&#xff0c;类加载器的作用就是将字节码文件加载到JVM中&#xff0c;从而Java 程序能够启动起来。 类加载器有哪些&#xff1f; 启动类加载器(BootStrap ClassLoader):加载JAVA HOME/jre/lib目录下的库…...

Node.js中的模块化:从原理到实践

目录 一、为什么需要模块化&#xff1f; 二、Node.js模块类型解析 2.1 核心模块 2.2 文件模块 2.3 第三方模块 三、CommonJS规范深度解析 3.1 模块加载原理 3.2 模块缓存机制 3.3 循环依赖处理 四、ES Modules新特性 4.1 基本用法 4.2 与CommonJS的差异比较 五、模…...

LLM论文笔记 6: Training Compute-Optimal Large Language Models

Arxiv日期&#xff1a;2022.3.29机构&#xff1a;Google DeepMind 关键词 scaling lawpower law参数量FLOPStokes 核心结论 1. 当前大多数大语言模型&#xff08;如 GPT-3 和 Gopher&#xff09;在计算预算分配上存在问题&#xff0c;模型参数过大而训练数据不足 2. 计算预算…...

数仓:核心概念,数仓系统(ETL,数仓分层,数仓建模),数仓建模方法(星型模型,雪花模型,星座模型)和步骤

数仓建模的核心概念 事实表&#xff08;Fact Table&#xff09;&#xff1a; 存储业务过程的度量值&#xff08;如销售额、订单数量等&#xff09;。 通常包含外键&#xff0c;用于关联维度表。 维度表&#xff08;Dimension Table&#xff09;&#xff1a; 存储描述性信息&…...

markdown|mermaid|typora绘制流程图的连接线类型怎么修改?

1、使用typora绘制流程图。别人例子里面的连线是圆弧&#xff0c;我的画出来就是带折线的 这是卖家秀&#xff1a; 这是买家秀&#xff1a; 无语了有没有&#xff1f; 犹豫了片刻我决定一探究竟&#xff08;死磕&#xff09;。 Typora --> 文件 --> 偏好设置 --》 mar…...

理解WebGPU 中的 GPUDevice :与 GPU 交互的核心接口

在 WebGPU 开发中&#xff0c; GPUDevice 是一个至关重要的对象&#xff0c;它是与 GPU 进行交互的核心接口。通过 GPUDevice &#xff0c;开发者可以创建和管理 GPU 资源&#xff08;如缓冲区、纹理、管线等&#xff09;&#xff0c;并提交命令缓冲区以执行渲染和计算任…...

庞氏骗局(Ponzi Scheme):金融投资与公司经营中的隐形陷阱(中英双语)

庞氏骗局&#xff1a;金融投资与公司经营中的隐形陷阱 庞氏骗局&#xff08;Ponzi Scheme&#xff09;&#xff0c;这个词在金融史上屡见不鲜。从投资骗局到企业经营中的资本运作&#xff0c;庞氏骗局的核心逻辑始终如一&#xff1a;用后来的资金填补前面的缺口&#xff0c;营…...

【黑马点评】 使用RabbitMQ实现消息队列——3.批量获取1k个用户token,使用jmeter压力测试

【黑马点评】 使用RabbitMQ实现消息队列——3.批量获取用户token&#xff0c;使用jmeter压力测试 3.1 需求3.2 实现3.2.1 环境配置3.2.2 修改登录接口UserController和实现类3.2.3 测试类 3.3 使用jmeter进行测试3.4 测试结果3.5 将用户登录逻辑修改回去3.6 批量删除生成的用户…...

前端调用串口通信

项目录结构 node项目 1&#xff09; 安装serialport npm install serialport 2&#xff09;编写index.js 1 const SerialPort require(serialport); 2 var senddata [0x02];//串口索要发送的数据源 3 var port new SerialPort(COM3);//连接串口COM3 4 port.on(open, fun…...

微信小程序请求大模型监听数据块onChunkReceived方法把数据解析成json

自己写的真是案例&#xff0c;onChunkReceived监听到的数据块发现监听到的内容不只是一个块&#xff0c;有时候会是多块&#xff0c;所以自己加了一个循环解析的过程&#xff0c;不知道大家监听到的数据情况是否一致。 在网上翻阅大量资料有的说引入js文件&#xff0c;亲测无效…...

SQL Server STUFF 函数的用法及应用场景

在 SQL Server 中&#xff0c;STUFF 函数是一种强大的字符串处理工具&#xff0c;常用于删除指定位置的字符并插入新的字符。通过这个函数&#xff0c;开发者能够灵活地修改字符串&#xff0c;从而在数据处理、字符串拼接和格式化等方面大显身手。本文将深入探讨 STUFF 函数的语…...

Qt使用CipherSqlite插件访问加密的sqllite数据库

1.下载 git clone https://github.com/devbean/QtCipherSqlitePlugin.git 2.编译CipherSqlite插件 使用qt打开QtCipherSqlitePlugin项目&#xff0c;并构建插件 ​ 3.将构建的插件复制到安装目录 ​ 4.使用DB Browser (SQLCipher)创建数据库并加密 ​ 5.qt使用Ciphe…...

美国哈美顿零件号A203560 HAMILTON 10µl 1701 N CTC (22S/3) A200S 203560

零件号a61092-01 hamilton ml600 电源 110-220 vac 61092-01 零件号a81322 hamilton 1001 tll 1ml 注射器带塞子 81322 零件号a61710-01 hamilton ml600 探头支架 管架 61710-01 零件号a61614-01 hamilton ml600 填充管 12 ga 1219mm 4.57ml 61614-01 零件号a61615-01 ham…...