- 博客(65)
- 收藏
- 关注
原创 迪米特法则 (Law of Demeter, LoD)
迪米特法则(LoD)又称最少知识原则,强调软件实体应减少与其他实体的直接交互,仅与"朋友"对象(如自身成员、参数对象等)通信。该法则通过限制通信宽度和深度来降低耦合度,提高模块独立性,但过度使用可能导致中介类过多。实现时需创建弱耦合类、最小化成员访问权限、减少对象引用,并通过中介者模式等封装间接调用。如在GUI开发中引入中间类协调控件交互,或在学生-课程系统中通过Course封装对Teacher的访问。设计时应权衡法则应用,结合其他设计原则(如单一职责、开闭原则)构建高内聚低耦合的系统。
2025-05-27 20:30:12
794
原创 依赖倒置原则 (Dependency Inversion Principle, DIP)
依赖倒置原则(DIP)提倡高层与低层模块都应依赖抽象,而非具体实现。其核心在于面向接口编程,通过依赖注入实现松耦合。该原则能提高系统稳定性、降低耦合度,增强可扩展性。典型实现包括:定义抽象接口、通过构造器/Setter注入依赖、避免具体类派生等。
2025-05-27 20:27:27
487
原创 接口隔离原则 (Interface Segregation Principle, ISP)
接口隔离原则(ISP)强调使用多个专门的接口,而不是单一的总接口,以确保客户端不依赖不需要的接口。该原则要求将大接口拆分为更细小的接口,每个接口承担单一角色,避免实现类被迫实现无用方法。接口隔离原则与单一职责原则不同,前者关注接口依赖的隔离,后者关注类的职责单一。遵循接口隔离原则可以提高系统的灵活性、可维护性和内聚性,减少代码冗余和耦合性。实现时,接口应尽量小且服务于单一子模块,为依赖接口的类定制服务,避免“胖接口”问题。
2025-05-23 20:25:50
1056
原创 里氏替换原则 (Liskov Substitution Principle, LSP)
里氏代换原则(LSP)是面向对象设计中的一个重要原则,它指出在软件中,任何基类对象都可以被其子类对象替换,而不会引发错误或异常。这一原则强调了继承的优点,如代码共享、重用性和可扩展性,同时也指出了继承的缺点,如降低代码灵活性和增加耦合性。LSP通过确保子类能够透明地替换基类,帮助克服这些缺点,是实现开闭原则的关键手段之一。
2025-05-23 20:23:05
450
原创 开闭原则 (Open/Closed Principle, OCP)
开闭原则是面向对象设计中的一个重要原则,强调软件实体应对扩展开放,对修改关闭。这意味着在需求变化时,应通过扩展而非修改现有代码来实现新功能,以减少引入错误和重构的风险。通过抽象化设计,如使用接口或抽象类,可以将系统的稳定部分与可变部分分离,从而在不改动原有代码的基础上增加新功能。例如,在图形绘制系统中,通过定义一个抽象图形类,并让具体图形类继承它,可以在不修改渲染器代码的情况下添加新的图形类型。这种设计提高了代码的复用性和维护性,符合面向对象开发的要求。
2025-05-22 18:31:11
932
原创 单一职责原则 (Single Responsibility Principle, SRP)
单一职责原则(SRP)是面向对象设计中的一个重要原则,它规定一个类或接口应该只有一个引起它变化的原因,即只负责一个功能领域中的相应职责。这一原则的核心在于通过职责的分离来降低类的复杂性,提高代码的可读性、可维护性和系统的扩展性。例如,在设计电话功能时,将协议管理和数据传送两个职责分别封装在不同的接口中,可以避免因一个职责的变化而影响到另一个职责的正常运作。同样,在方法设计上,也应确保每个方法只完成一个明确的任务,避免职责混淆。通过遵循单一职责原则,可以有效减少类之间的耦合,降低系统变更带来的风险。
2025-05-22 18:28:52
790
原创 从0到1搭建一个vue项目(超详细步骤版)
本文详细介绍了如何从零开始搭建Vue.js开发环境并创建Vue项目。首先,需要安装Node.js 16.0以上版本,并验证安装是否成功。接着,全局安装Vue CLI工具,并检查安装状态。然后,通过命令行创建Vue项目,选择手动配置并设置Vue版本、路由历史模式等选项。项目创建完成后,可以通过命令行启动项目,并在浏览器中访问。最后,提供了关闭项目的命令。整个过程涵盖了从环境准备到项目启动的完整步骤,适合初学者快速上手Vue.js开发。
2025-05-15 18:05:49
899
原创 芋道项目中开启使用微信支付提示“无可用的平台证书”,请在商户平台-API安全申请使用微信支付公钥”
芋道框架提供统一的支付中心,简化了微信、支付宝等支付渠道的接入过程。然而,在微信小程序支付中,芋道框架尚未更新以支持微信支付V3的新要求,即使用微信支付公钥而非平台证书进行验签。本文介绍了如何通过修改芋道框架中微信支付抽象类的doInit方法,使其支持微信支付公钥验签。修改后的方法直接配置了支付相关的密钥和证书路径,避免了硬编码的问题。尽管此方法可临时解决支付问题,但后续仍需优化以避免在代码中直接暴露敏感信息。
2025-05-10 17:25:51
663
1
原创 芋道uniapp用户端
因为前段时间需要使用芋道的用户端,却发现现在只有uniapp管理端,而没有uniapp用户端。为了方便日后的使用,我利用空余时间开发了一个uniapp用户端。这个用户端通过调用芋道后端的接口来实现现有的用户端功能。目前用户端仍在不断完善中,欢迎大家使用并给予支持,也欢迎给项目点个star。
2025-03-24 21:29:13
384
原创 芋道生成代码后引入报错:java: 程序包jakarta.validation.constraints不存在
在芋道引入生成的代码后,出现了这个错误“java: 程序包jakarta.validation.constraints不存在”,本来以为是没有引入这个依赖,发现引入依赖后又出现的新的错误。突然想起会不会是因为jdk版本问题,因为芋道的master分支是jdk8的,发现切换jdk后,还是这个问题。然后去拉代码的地方发现文档上写的是springBoot2.7,springBoot2是不支持这个jakarta的,只有springboot3才支持jakarta。把生成代码中的所有的jakarta改为javax。
2025-03-20 21:36:12
531
原创 芋道打包时报错:缺失@unocss插件
在遇到打包时,报这个错误,提示构建失败是因为 ESLint 在加载 @unocss 插件时,找不到 @unocss/eslint-plugin 模块。解决办法:安装缺失的依赖:保证@unocss/eslint-plugin已经被正确安装,使用以下命令安装:(如果使用pnpm,需要确保node的版本在18以上)
2025-03-06 15:27:01
936
4
原创 芋道——在启用商城时报错:Could not find artifact cn.iocoder.boot:yudao-module-member-api:pom:2.4.1-jdk8-SNAPSHOT
最近在学习芋道的支付这一模块,发现在启用商城系统时,报了这个错误:Could not find artifact cn.iocoder.boot:yudao-module-member-api:pom:2.4.1-jdk8-SNAPSHOT in huaweicloud (https://mirrors.huaweicloud.com/repository/maven/)在issue中也翻了好久都没有解决这个问题,包括翻阅其他文章也都没有给出这个问题的方案。
2025-02-25 17:58:49
969
6
原创 Spring全局异常处理
System.out.println("全局异常捕获:"+e);return "全局异常捕获,错误原因:"+e.getMessage();/*错误码*//*错误描述信息*/// 数据操作错误定义SUCCESS("2000", "成功!"),BODY_NOT_MATCH("4000","请求的数据格式不符!"),SIGNATURE_NOT_MATCH("4001","请求的数字签名不匹配!"),NOT_FOUND("4004", "未找到该资源!"),
2025-02-20 16:43:20
488
原创 如何实现uniapp分享到微信,然后通过h5页面跳转到app内
项目背景:uniapp开发的app(Android和ios),需要将话题分享到微信内,再通过点击微信内的链接打开一个h5页面,跳转到app内。如果已安装则打开app,未安装则跳转应用宝,在ios下应用宝会自动跳转App Store。
2025-02-07 16:00:23
2445
3
原创 如何将DeepSeek部署到本地电脑
DeepSeek爆火,如何免费部署到你的电脑上?教程来了,先在你的本地电脑上安装Ollama,然后在Ollama搜索选择DeepSeek模型,即可成功在你的本地电脑上部署DeepSeek。
2025-01-29 20:54:43
24104
23
原创 在Vscode中,使用Shift + Alt + F导致本来一行的代码变成多行,如何解决这个问题?
进入设置页面之后,我们打开搜索,然后搜索一下的代码在,具体我会给出代码,注意在操作之前,请先对照你是否安装了Vetur插件,如果你没安装的话,这篇博客其实你并没有看下去的必要了,但是我相信,每个学Vue的同学都或多或少的安装了这个插件,毕竟他确实好用。如果你上边代码和我的不一样很正常,你只需要做的就是将上边代码,放在上图中的红色框框中,就基本完成了。之后去测试Shift+Alt+F,发现代码大多数代码由多行已经变为一行了,但是仍然存在多行的现象,但是总体来说,还是不错了!需要记得一定配置完要。
2025-01-18 20:51:53
359
原创 uniapp下的IOS隐私信息访问的许可描述
定位(iOS11.3及以上版本) NSLocationAlwaysAndWhenInUseUsageDescription。定位(使用时获取地理位置)NSLocationWhenInUseUsageDescription。相册(保存图片到相册) NSPhotoLibraryAddUsageDescription。定位(持续获取地理位置)NSLocationAlwaysUsageDescription。相册(访问) NSPhotoLibraryUsageDescription。
2025-01-09 21:04:59
719
原创 【小程序开发】解决 HBuilder X 提示“本项目类型无法运行到小程序模拟器”
今天在hbuilder引入一个项目时,准备将该项目在微信开发者工具上运行时,发现提示“本项目类型”,如何解决这个问题?然后再去运行菜单,运行到小程序模拟器,就出现各个开发者工具列表了。这样导入会导致hbuilder无法正常识别该项目类型。第二:右键该项目,点击重新识别项目类型。点击之后,会提示项目识别成功!
2025-01-01 19:40:09
1635
原创 八大排序——直接插入排序
插入排序是一种简单直观且稳定的排序算法。它在处理小规模数据或部分有序的数据时表现良好,而且作为在线算法具有独特的优势。虽然它的平均时间复杂度为 O(n^2),不适合大规模数据排序,但在某些特定场景下仍然很有用。插入排序的思想也被应用在一些更高效的排序算法中,如希尔排序。理解插入排序的工作原理对于深入学习更复杂的排序算法很有帮助。在实际应用中,需要根据数据的特性和规模来选择合适的排序算法,插入排序在处理小规模或近乎有序的数据时仍然是一个不错的选择。
2024-12-29 21:14:29
469
原创 八大排序——冒泡排序(Java实现)
冒泡排序是一种简单直观的排序算法,它通过相邻元素之间的比较和交换来实现排序。虽然它在效率上不如其他排序算法,但在某些特定场景下仍然有其应用价值。在实际应用中,我们应该根据具体需求和数据特点选择合适的排序算法。同时,我们也可以通过一些优化策略来提高冒泡排序的效率,如标记交换和鸡尾酒排序等。参考链接:https://blog.youkuaiyun.com/qq_41256535/article/details/139484533。
2024-12-29 20:48:06
842
原创 八大排序——快速排序(java实现)
有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的数放在6的左边,类似下面这种排列:在初始状态下,数字6在序列的第1位。
2024-12-28 23:01:35
718
原创 HTML<select>标签有关的定义和属性
select>元素用于创建按下拉列表。元素最常用于表单中,用于收集用户输入。提交表单后,需要将name属性引入表单数据(如果省略name属性,下拉列表中的数据将不会被提交)。元素内的标签定义下拉列表中的可用选项。需要使用id属性将下拉列表与标签(lable)相关联。tip:始终添加标签以获得最佳可访问性实践。
2024-12-28 22:25:46
956
原创 可搜索的下拉选择框:filterable属性详解
在前端开发中,下拉选择框(Dropdown Select)是一个常见的UI组件,它允许用户从一组预定义的选项中选择一个或多个值。然而,当选项数量较多时,手动查找特定的选项可能会变得繁琐。为了解决这个问题,许多现代前端框架和UI库提供了可搜索的下拉选择框功能,通常通过。
2024-12-22 19:10:49
1036
原创 JavaScript 中的 `parseInt()` 函数详解
在 JavaScript 编程中,parseInt()函数是一个非常实用的工具,它允许我们将字符串转换为整数。这个函数在处理用户输入、数据格式化以及进行数学计算时非常有用。本文将详细介绍parseInt()函数的用法、特点以及一些常见的陷阱。
2024-12-22 19:03:47
1213
原创 【报错】node:internal/modules/cjs/loader:936
当执行npm run dev后,出现下面错误这个错误一般是由于Node.js无法找到所需的模块而引起的,解决此问题的一种方法就是重新安装所需的模块。
2024-12-21 23:28:40
1593
原创 如何使用nvm来管理node版本
使用nvm来管理node版本,需要先把之前下载的node删除干净,把相关的文件夹也要删除nvm(node.js version management),是一个nodejs的版本管理工具。nvm和n都是node.js版本管理工具,为了解决node.js 各种版本存在不兼容现象 可以通过它可以安装和切换不同版本的node.js。【可同时在一个环境中安装多个node.js版本(和配套的npm)】
2024-12-21 11:31:25
643
原创 node版本过高导致vue-cli项目无法运行(Error: error:0308010C:digital envelope routines::unsupported )
由于node版本过高,导致vue-cli项目运行报错。
2024-12-21 11:29:26
1195
原创 如何通过云平台创建SpringBoot项目框架
♥️坚持分析平时学习到的项目以及学习到的知识,和大家一起努力呀!!!🎈🎈加油!加油!加油!加油在一次创建springboot项目时发现社区版的idea并不能够直接创建springboot项目,需要安装一定的插件才可以创建springboot项目。但是感觉有点麻烦,所以查询资料得知可以在云平台上直接创建springboot项目,非常方便👍🏻。
2024-12-20 13:37:03
233
原创 VMware16安装macOS12【详细教程】
VMware workstation pro 16 (试用30天,密钥可以单独去查,也可以看评论区)macOS 12 镜像安装包unlocker工具。用于解锁VMware中的mac系统安装功能。
2024-11-24 22:15:44
2843
原创 DTO和VO的区别及使用场景详解
DTO(Data Transfer Object)和 VO(Value Object)都是一种设计模式,用于封装数据和提供服务。VO(View Object):视图对象,专门用于前端展示层,专注于表示某个具体的值或对象的对象,包含业务逻辑;VO的作用是将一组数据以适合特定用户界面(UI)的形式封装起来,确保数据的呈现既符合设计要求也满足用户体验标准。例如我们有一个电子商务网站,其中产品详情页需要显示产品的名称、价格、库存、图片等信息。VO会将这些信息以最优化的方式组织起来,供前端展示。
2024-11-23 20:29:31
1598
原创 在uniapp中ios打包的时候报错 profile文件中没有配置“Associated Domain”能力
使用的功能模块要求开启“Associated Domain”能力,应用profile文件中没有配置。请到苹果开发者网站开启应用的“Associated Domains”,重新生成profile文件,再用新的profile文件提交云端打包。
2024-11-22 08:47:46
526
原创 IOS证书获取(证书profile文件,p12私钥证书,证书私钥密码,Bundle ID)
当我们在开发一个应用APP时需要真机测试,或者上架到对应的应用市场,这时就需要 App打包,那么打包时就需要Bundle ID、证书私钥密码,证书profile文件,私钥证书。这些资料均需要在苹果开发者中心申请(https://developer.apple.com/cn/develop)✨首先登录苹果开发者中心,找到证书选项点击进去就可以进行相关证书申请了(Mac和window电脑都可以登录获取,只是在某些证书需要Mac获取)
2024-11-21 22:14:45
2190
原创 VM虚拟机装MAC后无法联网,如何解决?
把这两个服务打开,专一般问题就出现在这里,服务没开启。(注意将vmware开头的四个都打开)✨在vm虚拟机上,给虚拟机MacOS设置网络适配器。选择NAT模式用于共享主机的IP地址。好了,目前已经可以上网了,可以去浏览器中尝试下,不需要重启虚拟机。✨在MacOS设置中设置网络 以太网 使用。✨回到本地电脑上,打开。
2024-11-21 21:26:14
3673
原创 在云服务器上宝塔安装流程【超详细】
服务器安全组添加8888端口(你生成对应的默认端口)规则,如果放开这个端口号,则不能访问。如果出现了“请输入命令编号:”直接输入14查看面板的默认信息,查看账号密码和你当前输入的是否有错。上图中的端口一般默认是8888,但我生成的并不是,这个没有什么影响,是官方为了安全随机生成的。随后下面会生成新的用户名和密码(testpasswd),重新登录就可以登录成功了。下载(百度上也有很多,这里不在写了),Xshell运行命令安装即可。登录宝塔面板,在浏览器地址栏中输入刚才所生成的外网面板地址.
2024-11-18 14:56:43
1006
原创 在云服务器上安装配置JDK
配置环境变量的步骤,安装12行代码打开配置文件,将输入法切换到英文,输入小写的“i”把光标移到最底下,将两条export命令复制粘贴到最后面,如下图所示,粘贴完成之后,按Esc 再按英文状态的“:wq” 保存退出。链接:https://pan.baidu.com/s/1WqNCR7_Wa43IQb0GSfNf2Q?通过百度网盘分享的文件:zulu8.74.0.17-ca-jdk8.0.392-linux_x...输入source /etc/profile 回车后,输入javac,如图所示。
2024-11-17 21:15:49
332
原创 ThreadLocal
ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。ThreadLocal 是Java中的一个类,它提供了一种线程局部变量的机制。
2024-11-16 15:00:41
484
原创 Spring Task详细讲解
Spring Task是Spring框架中非常强大且灵活的任务调度工具。它提供了简单易用的注解和配置方式,支持基于cron表达式的定时任务调度和异步任务处理。通过合理配置和使用Spring Task,开发者可以轻松地实现各种复杂的定时任务需求。
2024-11-13 22:04:01
1232
空空如也
计算机专业大学期间需要考什么证呢?
2024-11-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人