- 博客(423)
- 资源 (23)
- 问答 (3)
- 收藏
- 关注
原创 设计模式:抽象工厂模式
抽象工厂模式是一种创建型设计模式,用于创建一组相关或依赖的对象(如不同操作系统的UI组件)。它通过抽象工厂接口(BaseUIFactory)和产品接口(Button、TextBox)解耦客户端与具体实现,使系统能灵活切换产品族(如Windows/Linux风格)。具体工厂(WindowsUIFactory、LinuxUIFactory)负责创建对应产品(WindowsButton/LinuxButton等)。优点包括确保产品兼容性和代码简化,缺点是扩展新产品族需修改多个类。典型应用如跨平台UI工具包,通过统
2025-08-22 22:55:22
28
原创 vue:vue中的ref和reactive
Vue3中ref和reactive是创建响应式数据的两种方式。ref适合基本类型和对象,通过.value访问,传递时不会丢失响应性;reactive仅处理对象,直接访问属性,但解构赋值会丢失响应性。ref更通用安全,适合独立数据;reactive适合逻辑相关的数据组。在组合式函数中推荐返回ref,复杂状态管理可用reactive配合toRefs。两者在模板中都能自动解包,但reactive需注意解构问题。
2025-08-20 22:06:12
205
原创 vue:vue3 watch 属性
Vue3中的watch属性用于监听响应式数据变化并执行回调函数。基本用法是通过watch(ref, callback)监听单个数据,回调函数接收新值和旧值。高级用法包括监听多个数据(使用数组)和监听对象属性(使用getter函数)。watch还支持配置选项,如immediate(立即执行)和deep(深度监听)。这些功能使watch成为处理数据变化时执行副作用操作的强大工具。
2025-08-16 20:01:25
78
原创 vue:vue3的方法torefs和方法toref
特性toReftoRefs作用对象单个属性整个 reactive 对象返回值单个 ref 对象包含所有属性 ref 的普通对象主要用途提取单个属性解构/展开整个对象保持响应性✔️✔️处理不存在属性会创建空 ref只转换已存在属性典型使用场景传递单个属性到组合函数从 setup() 返回响应式状态。
2025-08-16 11:44:52
38
转载 c++:【C++标准的演化】逐步解决历史遗留问题,从C++11到C++26的改进
本文系统梳理了C++标准从C++11到C++26的演进历程,从技术改进和心理学视角分析了各版本的核心特性。C++11引入的Lambda表达式、智能指针、移动语义等特性显著提升了代码表达力和安全性;C++14/17通过返回类型推导、结构化绑定、文件系统库等改进进一步优化开发体验;C++20/23引入模块、协程、概念编程等现代特性;展望C++26,将新增调试、线性代数等专用模块,并持续优化语言核心特性。文章强调标准演进不仅体现技术进步,更反映了对开发者认知负荷和心理需求的关注,使C++在保持高性能的同时不断提升
2025-08-15 21:58:55
20
原创 IDE:vscode的vue3模板
本文介绍了如何在VS Code中配置Vue 3代码片段。通过快捷键ctrl+shift+p打开配置选项,可以创建一个名为"Vue3SetupTemplate"的代码片段模板。该模板包含Vue 3组合式API的基本结构,包括template、script setup和scoped style三个部分,并支持文件名为类名、模块名定义等功能。代码片段通过"vue3"前缀触发,可用于快速生成Vue 3组件的基本框架。
2025-08-15 08:07:24
305
原创 vue:setup函数介绍
Vue3的setup函数是组合式API的核心入口,取代了Vue2的选项式API。它允许在函数内部定义响应式数据(ref/reactive)、计算属性(computed)、方法、侦听器(watch/watchEffect)和生命周期钩子(onMounted等)。setup通过props和context参数处理组件通信,支持更好的逻辑复用和代码组织,同时提供完善的TypeScript支持。需注意setup中不能使用this,且执行时机在beforeCreate和created之间,返回的对象会与其他选项合并。异
2025-08-14 18:24:08
14
原创 模式设计:策略模式及其应用场景
策略模式是一种行为型设计模式,用于在运行时动态选择算法。其核心是将算法封装为独立策略类,通过上下文对象调用,实现算法与使用的解耦。该模式包含三个角色:策略接口定义算法规范,具体策略实现不同算法,上下文负责持有和执行策略。典型应用场景如支付系统,可动态切换支付宝、微信等支付方式。优势在于符合开闭原则,消除条件分支,提高复用性和灵活性。与状态模式的区别在于策略切换由客户端主动控制,而非自动状态变迁。
2025-08-13 23:52:19
159
1
原创 web:vue中import *** from 和import {***} from的区别
Vue.js中import语法分为默认导入和具名导入。默认导入(不带花括号)用于导入模块的默认导出,如import Vue from 'vue',可自定义变量名。具名导入(带花括号)用于导入特定导出项,如import {ref} from 'vue',必须匹配导出名称或使用别名。两者可混合使用,如import axios, {CancelToken} from 'axios'。默认导入适用于Vue实例、单文件组件等;具名导入常用于工具函数、Composition API等需要精准导入的场景。
2025-08-09 08:35:14
63
原创 web:ts元组
TypeScript元组(Tuple)是一种固定长度、元素类型固定的特殊数组。元组可精确指定每个位置的类型,支持可选元素(?)、剩余元素(...)、只读(readonly)和命名标签等特性。与普通数组不同,元组各元素类型可以不同且长度固定。使用时需注意类型顺序和长度匹配,越界访问会报错。虽然可用类型断言修改只读元组,但会破坏类型安全。元组适合表示已知长度和类型的数据结构,如坐标点、HTTP状态码等场景。
2025-08-04 18:03:11
200
原创 web:ts的字符串string和String
在TypeScript中,string(小写)是原始字符串类型,推荐用于变量声明和函数参数/返回值;String(大写)是包装对象接口,极少需要显式使用。最佳实践是始终使用string原始类型,避免创建冗余的String包装对象。JavaScript会自动处理原始类型的方法调用(自动装箱),无需手动转换。两者主要区别在于:string是基本类型,String描述对象实例,前者更常用且安全。
2025-08-04 15:46:53
447
原创 java:类加载机制
Java类加载机制是JVM动态加载类的核心过程,主要分为加载、连接(验证/准备/解析)和初始化三个阶段。类加载器采用双亲委派模型,包含启动类、扩展类和应用类加载器,确保核心类安全并避免重复加载。该机制支持按需加载、环境隔离和热部署,是理解Java反射、动态代理等特性的基础,也是排查类加载异常的关键。自定义类加载器可通过继承ClassLoader实现特殊加载需求。
2025-08-03 09:23:47
27
原创 java:判断两个实例(对象)相等
Java对象相等判断有两种方式:==比较引用地址,equals()比较对象内容。==直接比较内存地址,适用于检查是否为同一实例;equals()默认行为同==,需重写才能实现内容比较。重写equals()必须同时重写hashCode(),确保内容相同的对象具有相同哈希值。重写时需遵循对称性等原则,可使用Objects.equals()和Objects.hash()简化操作。实际应用中,检查对象同一性用==,判断逻辑相等需重写equals()+hashCode()。
2025-08-03 08:06:38
59
原创 大教堂与集市:UML类图之间的各种关系
UML类图关系详解 UML类图是描述类、接口及其关系的静态结构图,包含六种核心关系: 关联关系 单向关联:用实线箭头表示,如User→Address 双向关联:用直线表示,如Student↔Course 聚合关系 弱整体-部分关系(空心菱形) 部分可独立存在,如Car◇→Engine 组合关系 强整体-部分关系(实心菱形) 部分随整体销毁,如Order◆→OrderItem 依赖关系 临时性使用(虚线箭头) 通过方法参数/局部变量实现 泛化关系 继承关系(实线空心三角) 体现"is-a"
2025-08-03 00:27:14
29
原创 web:js的模块导出/导入
摘要:本文演示了如何在HTML文件中通过type="module"引用JavaScript模块文件。HTML页面包含表单和表格,通过<script type="module">引入"常见事件优化.js"模块,该模块使用import导入"打印日志.js"中的变量和方法(content,printConsoleLog)。示例展示了事件绑定(mouseenter/mouseleave/click)和模块化开发,其中&quo
2025-08-02 20:49:53
153
原创 web:html表单提交数据
本文展示了一个HTML表单的基本结构,包含电子邮件、密码和昵称三个输入字段。表单通过<label>标签与输入框绑定,其中电子邮件字段使用type="email"实现格式校验,密码字段使用type="password"隐藏输入内容。关键点包括:所有可提交数据的输入元素必须设置name属性才能形成键值对向后端传输;<label>可通过for属性与对应id的输入框关联。表单最后包含提交按钮,收集数据后可发送至指定后端处理。
2025-07-30 16:47:10
172
原创 Java:各版本openjdk比较
OpenJDK主流厂商对比显示显著差异:Oracle在生产环境强制收费,而RedHat、Azul、Microsoft等提供免费方案。推荐企业根据需求选择:性能首选Azul Zulu Prime(15年支持),免费方案推荐Eclipse Temurin或Amazon Corretto,国产化可选华为BiSheng或阿里Dragonwell。特别提醒避免Oracle的"免费陷阱",生产环境使用需购买订阅。中小企业建议采用免费方案,性能敏感系统推荐Azul,国产项目根据场景选择相应方案。
2025-07-29 16:15:35
1059
2
原创 web:Vue的安装
Vue.js安装指南 提供两种主流安装方式: Vue CLI(传统方案): 需全局安装@vue/cli,通过vue create创建项目,支持自定义功能(Router/Vuex等) 启动命令:npm run serve Vite(推荐更快方案): 直接使用npm create vue@latest,按需选择TypeScript/Router/Pinia等配置 启动命令:npm run dev(默认端口5173) 前期准备:安装Node.js(LTS版本),建议配置淘宝镜像加速。 验证安装:检查项目目录结构(
2025-07-27 09:00:48
341
转载 c++:全面分析C++内存泄漏:你的程序正在悄悄“失血”
C++内存泄漏问题分析与防范指南 内存泄漏是C/C++开发中最常见的问题之一,根源在于其手动内存管理机制。当开发者使用malloc或new申请内存后,若未正确释放,就会导致内存泄漏。本文系统分析了内存泄漏的类型、危害及检测方法: 泄漏类型: 常发性泄漏(每次执行特定代码都会发生) 偶发性泄漏(特定条件下出现) 一次性泄漏(程序初始化时发生) 隐式泄漏(缓存未清理等) 主要危害: 程序性能下降 可能导致崩溃 存在安全隐患 检测方法: 动态检测(Mtrace、Memwatch等工具) 静态分析(BEAM、PC-
2025-07-26 08:38:59
44
转载 c++:C++程序崩溃现场破案指南:让 core dump 乖乖交代真相!(转载)
【文章摘要】coredump是程序崩溃时生成的内存快照文件,记录了崩溃现场的关键数据。通过配置系统参数(ulimit -c unlimited)可开启此功能。分析时使用GDB工具,结合bt命令查看调用栈、frame检查变量值,能精准定位空指针、内存泄漏等常见问题。文章通过两个典型崩溃案例(空指针解引用和释放后使用)演示了分析流程,并推荐了智能指针、边界检查等预防措施。掌握coredump分析技巧能有效提升C++程序的调试效率,使开发者具备快速诊断崩溃问题的能力。
2025-07-26 08:19:03
53
转载 Qt:信号与槽机制及动态调用
Qt的信号与槽机制概述:信号与槽是Qt的核心通信机制,相比回调函数具有类型安全、松耦合和支持多对多通信等优势。动态调用方法QMetaObject::invokeMethod()允许通过字符串名称调用槽函数或Q_INVOKABLE标记的方法,支持参数传递和返回值处理。调用方式包括同步(DirectConnection)、异步(QueuedConnection)等连接类型,适用于跨线程调用、插件系统等场景。使用时需注意方法名匹配、参数类型支持等事项。示例展示了如何动态调用计算和字符串拼接方法,并处理返回值。
2025-07-26 08:05:39
40
原创 Qt:qRegisterMetaType函数使用介绍
Qt中的qRegisterMetaType函数用于向元对象系统注册自定义类型,使其可用于信号槽机制(特别是跨线程通信)和QVariant操作。使用时需先通过Q_DECLARE_METATYPE宏声明类型,再调用qRegisterMetaType进行完整注册。注册类型必须满足公有构造/拷贝构造/析构函数要求,且应在使用前完成注册。常见错误包括未注册、注册顺序错误和类型不匹配等问题。该功能对实现跨线程传递std::shared_ptr等模板类尤为重要。
2025-07-25 22:48:37
127
原创 web:js函数的prototype(原型对象)属性
JavaScript原型机制是对象继承的核心。每个函数都有一个prototype属性,作为通过该构造函数创建对象的模板。对象通过__proto__属性访问其原型,当访问属性时,会沿原型链向上查找。通过构造函数创建的对象共享原型上的属性和方法,修改原型会影响所有实例。Object.create()可直接指定新对象的原型。所有对象最终都继承自Object.prototype,形成原型链。原型机制实现了属性和方法的共享,减少内存消耗,是JavaScript实现继承的基础方式。
2025-07-24 11:02:18
660
原创 Qt:信号槽的sender、receiver与信号、槽存在父子类关系时注意事项
Qt信号槽连接时出现类型不匹配问题的解决方法:当使用基类指针连接子类特有的槽函数时,会因C++成员函数指针类型不匹配而报错。推荐解决方案包括:1)将槽函数提升为基类虚函数,子类重写实现;2)直接使用子类指针连接;3)使用lambda表达式间接调用子类方法(需注意类型转换安全和对象生命周期)。最佳实践是采用方法1,通过合理设计基类接口实现多态调用,既保证类型安全又符合面向对象设计原则。
2025-07-22 08:18:35
70
原创 c++:父类的析构函数定义为纯虚函数注意事项
C++中纯虚析构函数的使用要点:必须将纯虚析构函数声明为"=0"并单独提供实现(即使为空),否则会导致链接错误。这种设计既能使基类成为抽象类,又能确保派生类对象析构时正确调用基类析构函数。与普通纯虚函数不同,纯虚析构函数需要基类提供定义,且派生类无需显式重写。该技术主要用于强制抽象基类实现和多态对象的安全释放,从C++11开始可用override明确析构关系。
2025-07-21 23:11:12
85
原创 web:js的函数
本文介绍了JavaScript中函数的定义与使用。主要内容包括:函数声明(具有提升特性)、函数表达式、箭头函数(ES6新增,简化语法)、Function构造函数、生成器函数和异步函数等定义方式。同时阐述了函数相关概念:参数处理(默认参数、剩余参数)、this关键字、闭包、立即执行函数表达式(IIFE)等核心特性。最后提出了最佳实践建议,如使用纯函数、避免全局污染、优先箭头函数等。全文系统性地讲解了JavaScript函数的核心知识点和使用规范。
2025-07-20 10:24:37
600
原创 c++:类型转换函数
C++类型转换运算符允许将类对象转换为其他类型,通过operator type() const形式声明,通常设为const成员函数。这种转换可以隐式进行,但可能导致意外行为,因此C++11引入explicit关键字限制隐式转换。示例展示了MyInt类到int的转换,以及Person类到string的显式转换。建议谨慎使用转换函数,优先采用explicit修饰以避免隐式转换问题,同时注意避免多重转换导致的歧义。转换运算符不同于static_cast等标准类型转换操作符。
2025-07-17 19:49:42
60
原创 c++:explicit关键字
摘要:C++中的explicit关键字用于防止构造函数的隐式类型转换。它强制要求显式调用构造函数,避免意外的自动转换问题。对于单参数构造函数或可能引发歧义的场景(如资源管理类),推荐使用explicit以提高代码安全性。C++11还支持对类型转换运算符使用explicit,防止隐式类型转换。通过强制显式构造,explicit使代码意图更清晰,减少潜在错误。
2025-07-17 18:58:04
59
原创 web:js中DOM、BOM介绍
摘要:DOM(文档对象模型)和BOM(浏览器对象模型)是浏览器中JavaScript操作的核心API。DOM作为W3C标准,通过树状结构表示HTML/XML文档,提供元素操作接口(如增删改查、样式修改)。BOM则处理浏览器窗口功能(导航、弹窗等),以window对象为核心,包含location、history等子对象。关键区别在于:DOM专注文档操作且标准化,BOM控制浏览器行为且无统一标准。实际开发中,DOM通过document访问,而BOM通过window操作,二者共同实现网页交互功能。
2025-07-17 09:56:31
486
原创 web:js提示框、询问框、输入框的使用
JavaScript提供三种浏览器对话框:警告框(alert)显示消息并阻塞代码执行;确认框(confirm)返回布尔值用于操作确认;提示框(prompt)获取用户输入的文本或null。三者都会阻塞页面交互,样式不可定制,现代开发建议使用HTML/CSS自定义模态框替代,后者提供更好的用户体验和界面控制。
2025-07-16 19:08:19
196
原创 IDE/OS:ReplaceGoogleCDN扩展下载和安装
本文介绍了替代GoogleCDN的浏览器插件安装方法。该插件可将Google的公共库、字体库等资源替换为国内CDN,解决访问问题。文章提供了Chrome浏览器的手动安装步骤:下载解压插件后,在开发者模式下加载extension目录完成安装。适用于无法访问扩展市场或GitHub的用户,支持Chrome、Firefox和Edge浏览器。安装后建议关闭开发者模式,确保使用安全。
2025-07-15 19:49:16
516
原创 web:js的switch语句
始终为每个case添加break(除非有意穿透)。使用default处理意外值。当分支超过 3 个且值为固定常量时优先选择switch。switch语句是JavaScript中用于多分支选择的重要工具。合理使用break可以避免意外的穿透,而利用穿透可以简化多个分支执行相同逻辑的情况。同时,注意作用域问题以避免变量冲突。
2025-07-15 16:59:18
489
原创 web:js的运算符
JavaScript运算符是执行操作的特殊符号,主要分为算术、赋值、比较、逻辑等类型。算术运算符用于数学计算(如+、-、*、/);赋值运算符(如=、+=)用于变量赋值;比较运算符(如==、===)比较值的大小;逻辑运算符(如&&、||)进行逻辑判断。此外还有位运算符、三元运算符等。运算符优先级决定了执行顺序,如()优先级最高,,最低。ES6新增了展开运算符(...)、空值合并运算符(??)等,使代码更简洁高效。掌握运算符对编写JavaScript程序至关重要。
2025-07-14 22:20:55
935
原创 web:js的数据类型转换
JavaScript数据类型转换分为显式和隐式两种。显式转换通过函数如Number()、String()实现,而隐式转换发生在运算符操作中(如+拼接字符串,-转换为数字)。特殊规则包括:数字转换时null变0,undefined变NaN;布尔转换时6种falsy值(false/0/""/null/undefined/NaN)为false。对象转换会调用valueOf()或toString()方法。建议多用显式转换和===严格比较,避免隐式转换带来的问题。典型场景如算术运算自动转数字,字符
2025-07-14 12:58:50
480
原创 web:js的三种引用方式
JavaScript有三种书写方式:行内式(直接写在HTML标签属性中,如onclick)、内嵌式(在HTML中用<script>标签包裹代码)和外链式(独立.js文件通过<script src>引入)。行内式代码分散难维护,内嵌式适合小型项目但影响加载速度,外链式最推荐,利于代码复用、维护和缓存优化。现代开发通常使用外链式,并将<script>标签放在<body>底部以避免阻塞页面渲染。
2025-07-13 18:18:23
376
原创 c++:#pragma once和#ifndef的区别
C++中防止头文件重复包含的两种机制:传统方法#ifndef通过定义唯一宏名实现跨平台兼容,而#pragma once是非标准但广泛支持的简洁方案。前者严格遵循标准但需手动命名,后者编译效率更高但存在边缘情况失效风险。现代项目推荐优先使用#pragma once,重要库可混合两种方式(双重保护)兼顾可靠性。主流编译器均支持#pragma once,仅在极老旧环境需强制使用#ifndef。
2025-07-13 09:21:05
42
原创 Qt:QCustomPlot类介绍
摘要:QCustomPlot是一个基于Qt的高性能图表库,其核心类QCustomPlot继承自QWidget,提供多层次绘图功能。支持多种图表类型(曲线图、柱状图、热力图等),具有双轴系统、交互式操作(缩放/平移/点选)和丰富的样式定制选项。通过分层绘制机制(6个默认图层)实现复杂图表组合,支持实时数据刷新和大容量数据渲染优化。典型应用包括科学可视化、工业监控和金融分析,并提供PDF/PNG导出功能。开发时只需添加图形、设置数据并调用replot()即可实现动态图表,是Qt环境下功能全面的数据可视化解决方案
2025-07-12 23:55:15
236
原创 IDE:vscode配置
这篇VSCode配置主要包含字体和代码格式设置:1) 使用JetBrains Mono Bold字体,字号17;2) 自定义滚动条和缩略图颜色;3) JavaScript文件采用2空格缩进,保存时自动格式化;4) 全局设置2空格缩进,禁用自动检测;5) JSX文件同样使用2空格缩进。配置强调代码格式一致性,特别针对JavaScript开发优化了编辑器行为。
2025-07-12 11:47:23
335
原创 Qt:主窗体(QMainwindow)初始化注意事项
摘要:在Qt中,使用setAttribute(Qt::WA_DeleteOnClose)可在控件关闭时自动释放资源,通常需在构造函数中设置。但若主窗口使用智能指针管理,则不应使用该属性以避免重复释放。此外,文章还介绍了如何为Qt窗口添加菜单栏和按钮:先声明QMenu和QAction对象,然后在源文件中实例化并设置文本、快捷键等属性,最后将动作添加到菜单中。
2025-07-07 13:45:57
166
原创 C++:编译QXlsx库过程
QXlsx是一个用于操作Excel文件的Qt库,可通过GitHub下载。该库支持CMake构建,配置文件要求CMake 3.16+和Qt5/6依赖。项目默认生成静态库,可通过修改CMakeLists.txt中的add_library语句添加SHARED选项来生成动态链接库。配置文件定义了源文件路径、编译选项和安装目标,支持C++11/17标准,并包含Qt核心模块依赖。编译后可根据构建类型(Debug/Release)生成对应的库文件。
2025-07-06 21:02:59
86
QTableView + QStandardItemModel模式显示表格冻结列(模板) 示例动图
2024-09-20
Expert_One-on-One_J2EE_Development_without_EJB中文版 part10
2009-02-11
Expert_One-on-One_J2EE_Development_without_EJB中文版 part7
2009-02-11
Expert_One-on-One_J2EE_Development_without_EJB中文版 part8
2009-02-11
Java高并发编程详解
2018-10-19
Java模式设计
2017-10-29
Expert_One-on-One_J2EE_Development_without_EJB中文版 part5
2009-02-11
Java并发编程实战 2nd
2018-10-19
c#本质论(英文版)
2008-09-22
Expert_One-on-One_J2EE_Development_without_EJB中文版
2009-02-11
Expert_One-on-One_J2EE_Development_without_EJB中文版 part2
2009-02-11
Expert_One-on-One_J2EE_Development_without_EJB中文版 part4
2009-02-11
Expert_One-on-One_J2EE_Development_without_EJB中文版 part9
2009-02-11
Expert_One-on-One_J2EE_Development_without_EJB中文版 part3
2009-02-11
Expert_One-on-One_J2EE_Development_without_EJB中文版 part6
2009-02-11
QtCreator创建工程后,添加新文件不显示的问题
2022-07-13
Pyside6:子线程运行的问题
2022-01-16
Model-View模型中如何如何选择显示部分数据
2021-10-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人