自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(243)
  • 收藏
  • 关注

原创 架构:数据库分库分表,何时分?怎样分?

数据库分库分表是一种常见的数据库水平扩展方案,通常在数据量大、高并发、数据隔离等情况下考虑进行分库分表。在实际操作中,可以通过水平分库、水平分表和分库分表路由来实现数据库分库分表。希望本文的内容能够帮助你更好地理解数据库分库分表的原理和实践,祝你在实际应用中取得成功!

2024-03-09 18:52:01 376

原创 架构:主备+分库?主从+读写分离?

在设计数据库架构时,主备+分库和主从+读写分离是两种常见的方案。那么,这两种方案有何不同,如何选择?本文将为你一一解答。

2024-03-09 18:01:54 370

原创 单元测试应该测什么,不应该测什么?

它可以帮助我们验证代码的正确性,提高代码的质量,减少bug的出现。但是,单元测试并不是一种万能的工具,我们需要明确单元测试应该测什么,不应该测什么。单元测试的目的是验证我们自己的代码,而不是测试第三方库或框架的功能。这样的单元测试不仅可以帮助我们保证代码的质量,还能够提高我们的开发效率。单元测试应该关注代码的业务逻辑和功能实现,而不应该测试与业务逻辑无关的内容,比如UI交互、数据库操作等。比如,对于一个函数,我们可以编写测试用例来覆盖不同的输入情况,确保函数的逻辑能够正确处理各种情况。

2024-03-08 10:46:17 367

原创 JS入门:动态的时钟、显示完整的一些方法、新年倒计时

在网页设计中,动态的时钟和倒计时是很常见的元素,它们能够增加网页的趣味性和实用性。在本文中,我们将会介绍如何使用JavaScript来实现动态的时钟和新年倒计时。使用JavaScript来实现动态的时钟和新年倒计时,这些元素不仅可以增加网页的趣味性和实用性,还可以帮助我们学习和掌握JavaScript的基础知识。新年倒计时是指距离新年的时间倒计时,我们可以使用JavaScript来实现。动态的时钟是指能够实时更新的时钟,我们可以使用JavaScript来实现。希望本文能够对初学者有所帮助。

2024-03-08 10:39:10 476

原创 从企业的运行价值链说起——我眼中的测试驱动开发(TDD)

测试驱动开发(TDD)是一种先进的软件开发方法,其核心理念是在编写功能代码之前先编写测试代码,然后再编写足够的功能代码使得测试通过。这种方法能够有效地提高软件的质量,减少bug,增加代码的可维护性和可扩展性,从而提高产品的稳定性和用户体验。在这个背景下,测试驱动开发(TDD)作为一种先进的软件开发方法,对于企业的运行价值链有着重要的影响。本文将从企业的运行价值链出发,探讨我眼中的测试驱动开发,并通过步骤和代码的方式展示其实际应用。首先,我们以一个简单的示例来说明TDD的步骤和代码。一、企业的运行价值链。

2024-03-08 10:21:43 363

原创 功能强大的JavaScript引擎--SpiderMonkey

通过使用SpiderMonkey,开发者可以体验到JavaScript在嵌入式系统中的灵活性和高效性,为智能设备的开发和创新提供了强大的支持。通过体验SpiderMonkey带来的高性能和灵活性,开发者可以更好地理解其在JavaScript世界中的重要性和价值,从而推动Web技术的不断进步。SpiderMonkey是一款由Mozilla开发的JavaScript引擎,它作为Mozilla Firefox浏览器的核心组成部分,扮演着将JavaScript代码转换为计算机可执行代码的重要角色。

2024-03-08 10:17:24 665

原创 JavaScript中实现命名空间

命名空间是一种组织和管理代码的方式,可以避免不同模块之间的命名冲突,提高代码的可维护性和可读性。在上面的代码中,我们使用对象字面量创建了一个名为MyNamespace的命名空间,然后在该命名空间中定义了一个变量myVariable和一个函数myFunction。在IIFE内部,我们可以定义私有变量和函数,并通过返回一个包含公共变量和函数的对象来暴露命名空间的公共接口。对象字面量是JavaScript中一种非常方便的方式来创建对象,我们可以使用对象字面量来组织和管理相关的函数和变量。

2024-03-08 10:03:19 362

原创 优化JavaScript脚本的性能

通过以上的学习,我们已经了解了如何通过减少全局变量、避免使用eval函数、优化循环操作、合理使用缓存、使用事件委托和压缩合并JavaScript文件等方式来优化JavaScript脚本的性能。我们可以通过使用更高效的循环方式,如使用Array的map、filter、reduce等方法,或者使用for循环时避免频繁的数组操作,来提升循环操作的性能。在生产环境中,我们可以通过压缩和合并JavaScript文件来减少文件大小和HTTP请求次数,从而提升页面加载速度和性能。实际案例:优化JavaScript性能。

2024-03-06 15:18:57 591

原创 揭开正则表达式的神秘面纱

在上面的例子中,我们首先导入了Python的re模块,然后定义了一个包含邮箱地址的文本字符串。通过这个简单的例子,我们可以看到正则表达式的强大之处。正则表达式,简称正则,是一种强大的文本匹配工具,它可以帮助我们在处理文本时更加高效地进行搜索和替换操作。通过以上的学习,我们已经成功揭开了正则表达式的神秘面纱,掌握了基本语法和实际应用技巧。除了提取文本中的信息,正则表达式还可以用于替换文本中的特定内容。在上面的例子中,我们使用sub函数和正则表达式将文本中的所有数字替换为“*”,从而实现了对敏感信息的保护。

2024-03-06 15:06:37 350

原创 JavaScript判断是页面关闭还是页面刷新

在beforeunload事件中,我们可以使用event对象的type属性来判断当前页面是被关闭还是被刷新。在Web开发中,有时我们需要在页面关闭或刷新时执行一些特定的操作,例如保存用户输入的数据或清除一些缓存数据。但是,由于页面关闭和刷新的行为非常相似,我们需要使用JavaScript来判断当前页面是被关闭还是被刷新。在这个事件中,我们可以执行一些特定的操作,例如保存数据或清除缓存。在上面的代码中,我们根据event对象的type属性来判断当前页面是被关闭还是被刷新,并在控制台中输出相应的信息。

2024-03-06 14:58:08 455

原创 获取JavaScript用户自定义类的类名称

good7ob在JavaScript中,我们经常需要获取对象的类名称,特别是在处理用户自定义类的时候。本文将介绍如何通过不同的方法来获取JavaScript用户自定义类的类名称,包括使用原型链、class关键字和Object.create方法。我们将通过生动的语言、通顺的步骤和精美的代码示例来帮助你轻松掌握这一重要的知识点。

2024-03-06 14:52:29 427

原创 JavaScript中的prototype(原型)属性研究

通过原型,我们可以实现对象的继承和方法的共享,使得代码更加高效和可维护。子对象可以通过原型链访问父对象的方法和属性,从而实现代码的复用和扩展。实际案例:通过原型,我们可以在所有Person对象实例中共享greet方法,避免了重复定义方法,提高了代码的重用性。在JScript中,我们可以随时修改对象的原型,从而动态改变对象的行为。实际案例:通过原型继承,我们可以实现子类对父类方法的继承,并在子类中添加新的方法,实现代码的复用和扩展。实际案例:通过修改原型,我们可以动态改变对象的行为,实现对象功能的灵活扩展。

2024-03-06 14:44:20 344

原创 在JavaScript面向对象编程中使用继承

通过原型链、class关键字和Object.create方法,我们可以灵活地实现对象之间的继承关系,使代码更加清晰、可维护和可扩展。通过将子对象的原型指向父对象的实例,子对象可以继承父对象的属性和方法。实际案例:通过Object.create方法实现继承,我们可以更加灵活地指定原型对象,实现继承关系的精细控制。实际案例:通过class关键字实现继承,我们可以更加清晰地定义类和实现继承关系,使代码更易读和维护。实际案例:通过原型链实现继承,我们可以轻松地创建子类并继承父类的属性和方法,实现代码的复用和扩展。

2024-01-08 14:28:10 648

原创 单扫描的JScript版String.Format方法

单扫描的 JScript 版 String.Format 方法是一种简洁而高效的字符串格式化方法,其核心思想是通过一次扫描字符串,将占位符替换为相应的值,从而实现字符串的格式化。在这个案例中,我们首先定义了一个学生信息模板,然后通过循环遍历学生信息数据,并使用 String.Format 方法将学生信息格式化成表格的行,最后将格式化后的学生信息展示在网页中。综上所述,通过使用单扫描的 JScript 版 String.Format 方法,我们可以更加方便地对字符串进行格式化,使得代码更加清晰和易读。

2024-01-08 13:37:26 379

原创 在popup窗口中俘获事件的缺陷&修复

然而,弹出窗口中事件的捕获存在一些缺陷,可能会导致一些意外的行为。使用 postMessage 方法进行跨窗口通信:通过使用 postMessage 方法,可以在父窗口和弹出窗口之间进行安全的跨窗口通信,从而解决弹出窗口无法直接访问父窗口的问题。综上所述,通过采取一些修复方法,我们可以解决弹出窗口中事件捕获的缺陷,确保弹出窗口中的事件能够得到正确处理,同时不会影响到父窗口。弹出窗口中的事件可能会被父窗口捕获:在某些浏览器中,弹出窗口中的事件可能会被父窗口捕获,导致事件处理出现混乱。

2024-01-08 11:16:59 396

原创 Redis:RDB 和 AOF 持久化的原理是什么?

首先,让我们来了解一下RDB持久化的原理。这个过程是通过fork一个子进程来完成的,子进程先将数据集写入临时文件,然后再用这个临时文件替换上次持久化的文件。通过以上实际案例,我们可以清晰地看到RDB和AOF持久化的原理,以及如何在Redis中进行配置和操作。Redis的持久化机制是保障数据安全的重要手段,了解其原理对于设计高可靠性的Redis系统至关重要。Redis是一款高性能的内存数据库,而RDB(Redis DataBase)和AOF(Append Only File)是Redis中常用的持久化方式。

2024-01-08 11:08:26 393

原创 MySQL:一份完整的MySQL规范是什么样?

在设计过程中,需要考虑到图书表和作者表的关联关系,以及字段的数据类型和长度,比如图书ID可以使用INT类型,作者姓名可以使用VARCHAR类型。通过以上实际案例,我们可以看到,遵循一份完整的MySQL规范可以帮助我们设计出高效、可靠的数据库系统,并编写出优化的查询语句,从而充分发挥MySQL的优势。MySQL的规范不仅仅是一份技术文档,更是一种设计艺术,一份规范的MySQL数据库设计将为您的应用程序带来更高效的性能和更好的用户体验。在创建数据表时,需要注意表的命名规范、字段的命名规范、主键和外键的设置等。

2024-01-08 11:02:25 462

原创 高并发文章浏览量计数系统设计

在面试中,架构设计问题是常见的考察点之一。其中,针对高并发场景下的系统设计问题尤为重要,本文将通过一个生动通顺的方式,结合实际案例,为您详细介绍如何设计一个高并发文章浏览量计数系统。

2024-01-07 19:31:36 332

原创 面试必备:举例说明ZAB协议在分布式系统中的应用,比如ZooKeeper分布式协调服务

ZooKeeper是一个分布式的、高可用的协调服务,它提供了一种类似于文件系统的数据模型,可以存储和管理分布式系统中的各种元数据。因此,当一个客户端在ZooKeeper上创建一个节点时,它会被序列化和复制到所有的ZooKeeper节点上,保证了数据的一致性和可靠性。ZAB协议的核心算法是基于Paxos算法的,它将所有的写操作序列化,保证了数据的有序性和可靠性。数据一致性:ZooKeeper使用ZAB协议来保证数据的一致性,所有的写操作都会被序列化,保证了数据的有序性和可靠性。

2024-01-07 19:25:05 368

原创 Redis:面试中经常被问到的 Redis 持久化与恢复

本文将介绍Redis持久化的两种方式,RDB和AOF,并提供相应的代码示例和实际案例,帮助读者更好地理解和掌握这一重要的知识点。RDB持久化是Redis默认的持久化方式,它可以在指定的时间间隔内将内存中的数据以快照的形式保存到磁盘上。由于开启了AOF持久化,我们可以通过AOF日志文件来恢复数据,保证数据的完整性。AOF持久化是将Redis的操作日志以追加的方式写入到磁盘文件中,可以保证数据的完整性和持久性。这个命令会返回AOF文件的保存路径,我们可以在该路径下找到最新的AOF文件。

2024-01-07 19:20:02 650

原创 MySQL:查询速度慢与性能差的解决方案

索引是提高查询性能的重要手段。但是,索引并不是越多越好,过多的索引会增加数据库的维护成本。在编写查询语句时,需要尽量避免使用SELECT *,而是明确指定需要查询的字段。另外,尽量避免在WHERE子句中使用函数,这会导致索引失效,影响查询性能。然而,随着数据量的增加和查询复杂度的提高,很多开发者都会遇到MySQL查询速度慢和性能差的问题。通过EXPLAIN语句可以发现,该查询没有使用到age字段上的索引,导致查询性能较差。通过以上优化措施,可以大大提升MySQL的查询性能,改善查询速度慢和性能差的问题。

2024-01-07 19:14:45 415

原创 MySQL:三大知识点,索引、锁、事务,原理分析

在该转账操作中,通过设置conn.setAutoCommit(false)来开启事务,通过conn.commit()来提交事务,通过conn.rollback()来回滚事务,保证数据的一致性和安全性。其中,B-Tree索引是最常用的索引类型,也是MySQL默认的索引类型。其中,行锁是最常用的锁类型。事务的原理是将一组操作放在一个逻辑单元中,通过锁机制和日志机制来保证操作的原子性、一致性和隔离性。其中,idx_name是索引名称,table_name是表名,column_name是需要建立索引的列名。

2024-01-07 19:09:53 391

原创 面试必备:Java并发编程10道面试题及答案

在多线程环境下,线程安全是指多个线程访问共享数据时,不会出现数据错误或不一致的情况。要保证线程安全,可以采用同步机制,比如使用synchronized关键字或Lock接口来保护共享数据的访问,或者使用线程安全的数据结构,比如ConcurrentHashMap。volatile关键字用于声明变量,保证了变量的可见性和禁止指令重排序。它可以用于多线程之间的通信,确保一个线程对变量的修改对其他线程是可见的。线程池是一种管理和复用线程的机制,可以提高线程的利用率和系统的性能。

2023-12-31 09:16:08 477

原创 8个Spring 面试问题及答案

简化开发:Spring框架提供了各种各样的功能,如数据访问、Web开发等,使得开发人员可以更加专注于业务逻辑的实现,从而提高了开发效率。依赖注入:Spring框架提供了依赖注入的功能,使得应用程序的组件之间的依赖关系更加清晰,同时也使得应用程序更加易于测试和维护。事务管理:Spring框架提供了事务管理的功能,使得应用程序的数据一致性得到了保证,同时也提高了应用程序的性能和可靠性。健康检查:Spring Boot提供了健康检查的功能,可以检查应用程序的运行状态,从而提高了应用程序的可靠性。

2023-12-31 09:09:46 813

原创 除了水平切分,数据库架构设计还经常遇到哪些问题

水平切分是将数据库表中的数据分成多个较小的表的过程。这种方法可以提高数据库的性能和可扩展性,因为它可以将负载分散到多个服务器上,从而减少单个服务器的压力。例如,如果您正在处理电子商务网站的订单,您可以使用订单ID作为分片键,将订单分布在多个服务器上。例如,如果您的订单表包含大量的文本数据,您可以将该数据分离到一个单独的表中,以减少查询所需的数据量。而水平切分是最常见的解决大量数据问题的方法,但是数据库架构设计还会遇到其他问题。您的订单表包含大量的数据,因此您需要使用水平切分来分散负载。

2023-12-31 09:05:13 350

原创 在什么时候才会用到fireEvent方法呢?

当需要编写自动化测试用例来验证网页或应用程序的交互功能时,我们就会用到fireEvent方法。这个方法可以帮助我们模拟用户的操作,例如点击按钮、输入文本等,从而触发相应的事件,进行测试和验证。

2023-12-31 08:41:03 362

原创 获取JavaScript用户自定义类的类名称

在这个示例中,我们定义了一个名为getClassName的函数,该函数接受一个对象作为参数,并返回该对象所属的类的名称。实际案例:使用获取类名称的功能 现在让我们来看一个实际的案例,演示如何在实际开发中使用获取类名称的功能。步骤二:获取类名称的方法 在JavaScript中,我们可以使用Object的constructor属性来获取一个对象所属的类的构造函数。在这个类中,我们使用了ES6的类语法来定义一个Animal类,其中包含了一个构造函数和一个makeSound方法。

2023-12-31 08:34:40 392

原创 JScript中的“this“关键字使用方式补充

在上面的例子中,通过调用call和apply方法,我们可以将"sayHello"方法中的"this"指向"person1"和"person2"对象,从而分别访问它们的"name"属性。在上面的例子中,当调用"person"对象的"sayHello"方法时,"this"关键字指向"person"对象,因此可以访问到"person"对象的"name"属性。在上面的例子中,箭头函数中的"this"指向了"person"对象,因此可以访问到"person"对象的"name"属性。在对象方法中使用"this"

2023-12-28 15:29:14 346

原创 JScript中的“this“关键字使用方式补充

在上面的例子中,通过调用call和apply方法,我们可以将"sayHello"方法中的"this"指向"person1"和"person2"对象,从而分别访问它们的"name"属性。在上面的例子中,当调用"person"对象的"sayHello"方法时,"this"关键字指向"person"对象,因此可以访问到"person"对象的"name"属性。在上面的例子中,箭头函数中的"this"指向了"person"对象,因此可以访问到"person"对象的"name"属性。在对象方法中使用"this"

2023-12-28 15:26:46 727

原创 在JavaScript中使用面向对象

同时我们也通过一个实际的案例,演示了如何创建一个简单的图形类,并实现了圆形和矩形两种图形的面积和周长计算方法。在上面的例子中,我们定义了一个名为Student的构造函数,它继承了Person的属性和方法。然后我们使用Object.create方法来创建一个新的对象,它的原型指向了Person.prototype,从而实现了对象继承。在上面的例子中,我们定义了一个名为Person的构造函数,它有两个参数name和age,分别用于初始化对象的name和age属性。实际案例:创建一个简单的图形类。

2023-12-28 15:21:40 339

原创 JavaScript之内嵌函数

我们了解到内嵌函数可以在外部函数内部定义和调用,并且可以访问外部函数的变量和参数。作用域链决定了变量和函数的可见性和访问权限,当内嵌函数在外部函数中被调用时,它可以访问外部函数的作用域,包括变量和参数。在JavaScript中,函数是一等公民,可以作为参数传递给其他函数,也可以在函数内部定义其他函数。首先,我们需要定义一个外部函数,内嵌函数将在这个外部函数内部被定义和调用。接下来,我们在外部函数内部定义一个内嵌函数,用于计算两个数字的差。最后,我们在外部函数中根据操作符调用相应的内嵌函数,并将其结果返回。

2023-12-28 15:16:23 463

原创 JavaScript中的this关键字

我们了解到this关键字在不同的上下文中有不同的引用对象,并且可以根据函数的调用方式进行动态的绑定。它在不同的上下文中有不同的含义,可以引用不同的对象。在JavaScript中,this关键字是一个指向当前执行上下文的对象的引用。在函数内部,this关键字引用的是调用该函数的对象。例如,当我们将一个函数作为对象的方法调用时,this关键字将引用该对象。构造函数用于创建对象的模板,使用new关键字调用时,this关键字将引用新创建的对象。在函数内部,this关键字引用的是调用该函数的对象。

2023-12-28 15:08:06 320

原创 再来5道前端面试题

总的来说,HTML5的文档声明的简洁性使得开发者可以更加专注于页面的内容和结构,而不需要过多关注文档声明的细节。具体来说,渐进式渲染是指将页面内容分块加载和渲染,使用户能够尽快看到页面的部分内容,而不必等待整个页面完全加载完成。此外,HTML5的文档声明只有一行,不占用额外的空间,减少了页面的加载时间。异步加载其他资源:将页面中的其他资源,如图片、脚本等,使用异步加载的方式加载,以不阻塞页面的渲染。延迟加载次要块:将页面中次要的块延迟加载,等待关键块加载完成后再加载,以提高页面的渲染速度。

2023-12-28 15:03:36 301

原创 5道前端面试题

前端开发是当前互联网行业中最热门的职位之一,随着移动互联网的快速发展,对前端开发人员的需求量也越来越大。事件冒泡是指事件从最具体的元素开始,逐级向上冒泡到最不具体的元素。事件捕获则是相反的过程,事件从最不具体的元素开始,逐级向下捕获到最具体的元素。在JavaScript中,每个函数都会创建一个闭包,闭包中包含了函数定义时所在的作用域。跨域问题是指在浏览器中,一个域下的网页试图去请求另一个域下的资源时,由于浏览器的同源策略,请求会被拒绝。实现函数柯里化:闭包可以通过返回函数的方式,实现函数的柯里化。

2023-12-27 17:57:24 334

原创 原型虚拟机+解释器实现,一起搞懂 JS 指令关键原理

通过这样的方式,解释器可以将 JavaScript 代码转换为可执行的指令序列,并传递给原型虚拟机来执行。通过理解原型虚拟机和解释器的工作原理,我们可以更好地理解 JavaScript 的执行过程,并能够更深入地研究和优化 JavaScript 的执行性能。本文将介绍如何使用原型虚拟机和解释器实现一个简单的 JavaScript 执行环境,以便更深入地理解 JS 的指令关键原理。解释器是 JavaScript 执行的关键组成部分,它负责将 JavaScript 代码转换为虚拟机可以执行的指令。

2023-12-27 17:52:34 558

原创 编译运行结合源码调试,高效理解 QuickJS 源码

要深入理解 QuickJS 的工作原理和内部机制,我们可以通过编译运行结合源码调试的方式来进行。最后,我们释放了相关的资源。通过以上步骤和示例代码,我们可以高效地理解 QuickJS 的源码,并深入了解其内部机制。希望通过本文的分享,大家能够掌握编译运行结合源码调试的技巧,提高对 QuickJS 源码的理解和应用能力。当程序运行到断点处时,我们可以使用 "step" 命令逐行执行源码,并观察变量的值和函数的调用栈等信息。在调试源码的过程中,我们可以逐步分析 QuickJS 的源码,理解其内部机制。

2023-12-27 17:45:53 860

原创 一文详解 DolphinDB SQL 标准化

我们可以使用create table语句创建表格,使用insert into语句插入数据,使用select语句查询数据,使用update语句更新数据,使用delete语句删除数据。在本文中,我们将详细介绍DolphinDB中的SQL标准化,包括步骤和代码,以及实际案例。在本文中,我们将详细介绍DolphinDB中的SQL标准化,包括步骤和代码,以及实际案例。例如,我们可以创建一个名为employee的表格,其中包含员工的姓名、年龄和工资信息。例如,我们可以查询工资大于6000的员工的姓名和工资信息。

2023-12-27 17:34:14 948

原创 使用psql操作PostgreSQL数据库

其中,psql是PostgreSQL自带的交互式命令行工具,它可以让用户通过命令行界面来操作和管理数据库。总之,psql是一种非常有用的工具,可以帮助我们更好地管理和操作PostgreSQL数据库。其中,username是数据库用户名,database_name是要连接的数据库名,host是数据库所在的主机名,port是数据库的端口号。它提供了一种直观和灵活的方式来操作和管理PostgreSQL数据库,无论是创建表、插入数据、查询数据还是更新数据和删除数据,都可以通过简单的命令来完成。

2023-12-21 15:17:25 363

原创 ReactiveCocoa (RAC) 函数响应式编程框架的原理以及配合MVVM设计模式的使用

ReactiveCocoa是一个基于响应式编程思想的库,它允许开发者通过使用信号(Signal)和订阅(Subscription)的方式来处理异步事件和数据流。它的核心概念包括信号、操作符、订阅和调度器,这些组合在一起使开发者能够更容易地处理异步操作和事件处理。

2023-12-21 15:09:17 860

原创 MVC与MVVM的区别与联系?各自的优缺点?MVP模式

MVC是一种经典的架构模式,它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。每个组件有不同的责任。模型(Model):负责管理应用程序的数据和业务逻辑。它通常不直接与用户界面交互,而是提供数据供视图和控制器使用。视图(View):负责呈现数据给用户,并将用户的输入反馈给控制器。视图通常是 passives(被动的),它们不处理业务逻辑。控制器(Controller):充当模型和视图之间的中介,处理用户输入并更新模型和视图。

2023-12-07 20:26:32 797

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除