- 博客(49)
- 收藏
- 关注
原创 SSH 深度实战:从基础到高级安全配置
本文全面介绍了 SSH 协议的核心技术与安全实践。主要内容包括:SSH 基础连接与密钥认证管理(RSA/ECDSA/ED25519 密钥生成与分发);服务器端安全配置(端口更改、root 登录禁用、Fail2Ban 防护);高级功能如端口转发(本地/远程/SOCKS 代理)、连接复用和代理转发;以及安全的文件传输方法(SCP/SFTP)。
2025-11-30 22:51:32
501
原创 Linux 文件权限深度解析与实战指南
本文全面解析了Linux文件权限管理,从基础概念到高级应用。主要内容包括:权限类型(读/写/执行)和表示法(字符/数字);核心命令chmod、chown、chgrp的使用;特殊权限(SetUID/SetGID/Sticky Bit)的原理与设置;umask默认权限配置;ACL高级权限控制方法。通过Web服务器配置、多用户协作等实战案例,演示了权限管理的实际应用,并提供了权限问题排查技巧和最佳实践建议。掌握这些知识对Linux系统安全和高效管理至关重要。
2025-11-30 22:50:13
165
原创 JavaScript高级程序设计(第4版)读书笔记:十四
定型数组是ECMAScript新增的结构,旨在提升向原生库传输数据的效率。它基于ArrayBuffer预分配内存,通过DataView或特定类型视图进行读写操作。DataView支持对缓冲数据的高度控制,但性能较低,需要指定ElementType和字节序(默认大端序)。定型数组源于WebGL的性能需求,解决了JavaScript数组与原生数组格式不匹配的问题。ArrayBuffer类似于C++的malloc(),但具有自动垃圾回收等特性。
2025-11-30 22:13:40
601
原创 JavaScript高级程序设计(第4版)读书笔记:十三
本文介绍了JavaScript中的两种集合引用类型:Object和Array。在Object部分,详细讲解了创建对象的两种方式(构造函数和对象字面量),属性访问方法(点语法和中括号),以及对象字面量作为函数参数的用法。Array部分阐述了数组的特点(动态大小、任意类型元素),创建数组的多种方法(构造函数、字面量、from()和of()方法),特别介绍了Array.from()的多种应用场景,包括字符串拆分、集合转换、数组浅复制等。文章通过丰富的代码示例展示了这些核心概念的实际应用。
2025-11-30 10:31:15
1037
原创 JavaScript高级程序设计(第4版)读书笔记:十二
JavaScript中的Global对象是ECMAScript的核心内置对象,它包含了不属于任何对象的全局属性和方法。Global对象提供了URL编码方法(encodeURI/decodeURI等)、强大的eval()函数(可执行字符串代码)以及各种全局属性(如undefined、NaN和原生构造函数)。在浏览器环境中,window对象充当Global对象的代理。需要注意的是,eval()虽然功能强大但存在安全风险,应谨慎使用;URI编码方法也已取代废弃的escape/unescape方法。
2025-11-30 10:28:39
644
原创 JavaScript高级程序设计(第4版)读书笔记:十一
JavaScript提供了三种原始值包装类型(Boolean、Number、String),它们允许原始值像对象一样拥有方法和属性。当访问原始值的方法时,JS会临时创建对应的包装对象,执行操作后立即销毁。包装类型与引用类型的主要区别在于生命周期——包装对象仅存在于代码执行期间。不建议显式创建包装对象,因为它们容易引起混淆(如Boolean对象在逻辑运算中总被视为true)。Number类型提供了toFixed()、toExponential()等格式化方法,但要注意浮点数精度问题。
2025-11-28 13:00:56
1052
原创 正则表达式
正则表达式核心指南摘要:正则表达式是处理文本的强大工具,本文涵盖从基础到高级的核心用法。包括字符匹配(. \d \w)、量词(* + ? {})、位置锚点(^ $ \b)、字符集合([])、分组捕获(() |)、零宽断言(?= ?!)、常用示例(邮箱、URL、日期匹配)以及修饰符(i g m s)。还介绍了回溯引用、贪婪/非贪婪匹配及实战技巧(测试工具、性能优化)。掌握这些核心概念可解决大多数文本处理需求,建议通过实践巩固学习。
2025-11-28 12:26:11
109
原创 JavaScript高级程序设计(第4版)读书笔记:十
本文介绍了JavaScript中的基本引用类型,重点讲解了Date类型的使用方法。Date类型将日期存储为自1970年1月1日至今的毫秒数,可通过构造函数new Date()创建实例。文章详细说明了Date.parse()和Date.UTC()两种日期创建方式,以及它们的区别:前者基于字符串解析,后者基于数值参数。此外还介绍了日期比较、格式化方法以及继承的方法如toString()和valueOf()等。不同浏览器对日期处理的差异也被提及,特别是边界情况的处理方式可能有所不同。
2025-11-24 19:48:22
743
原创 JavaScript高级程序设计(第4版)读书笔记:九
JavaScript执行上下文与作用域机制解析 执行上下文决定了变量和函数的可访问性,每个上下文关联一个变量对象存储数据。全局上下文对应window对象(浏览器环境),函数调用时会创建新的上下文并入栈。作用域链控制着变量访问顺序,从当前上下文逐级向外查找。内部上下文可访问外部变量,反之则不行。 ES6引入的let/const与var不同:var存在变量提升,未声明变量会变为全局变量;let/const具有块级作用域。特殊语句(with/try-catch)会临时增强作用域链。
2025-11-22 15:43:27
827
原创 JavaScript高级程序设计(第4版)读书笔记:八
JavaScript变量分为原始值(Undefined、Null、Boolean、Number、String、Symbol)和引用值(对象)。原始值按值访问,引用值按引用访问。原始值不能动态添加属性,而引用值可以。变量复制时,原始值创建独立副本,引用值共享同一对象引用。比较时,原始值比较内容,引用值比较内存地址。函数参数始终按值传递,对引用值的修改会影响原对象,但重写引用不会。typeof操作符适合判断原始类型,但对对象和null都返回"object"。
2025-11-21 23:09:51
1144
原创 JavaScript高级程序设计(第4版)读书笔记:七
本文介绍了JavaScript中的基本语句结构,包括if条件语句、do-while和while循环语句、for循环语句,以及for-in和for-of迭代语句。重点阐述了各种语句的语法格式、使用场景和注意事项,特别对比了for-in(遍历对象属性)和for-of(遍历可迭代对象元素)的区别。文章还强调了最佳实践,如使用语句块、推荐使用const声明变量等,并提供了详细的代码示例说明各种语句的具体应用。
2025-11-21 15:34:16
828
原创 JavaScript高级程序设计(第4版)读书笔记:六
JavaScript布尔操作符包括逻辑非(!)、逻辑与(&&)和逻辑或(||)。逻辑非将操作数转为布尔值并取反,可用!!快速转换为布尔值。逻辑与和逻辑或具有短路特性,前者在第一个操作数为false时直接返回,后者在第一个为true时直接返回。乘性操作符(乘法*、除法/、取模%)会将非数值操作数转换为数值,处理特殊值如Infinity和NaN时有特定规则。这些操作符在条件判断和数值计算中发挥重要作用。
2025-11-21 14:06:49
840
原创 JavaScript高级程序设计(第4版)读书笔记:五
ECMAScript 中的。对象通过 new 操作符后跟对象类型的名称来创建。这个语法类似 Java,但 ECMAScript 只要求在给构造函数提供参数时使用括号。Object 的实例本身并不是很有用,但理解与它相关的概念非常重要。类似 Java 中的,ECMAScript 中的 Object 也是派生其他对象的基类(或者说在 ECMAScript 中 Object 是所有对象的基类)。。每个 Object 实例都有如下属性和方法。
2025-11-20 20:34:24
753
原创 JavaScript高级程序设计(第4版)读书笔记:四
JavaScript中的Symbol类型 Symbol是ES6新增的原始数据类型,用于创建唯一标识符。主要特点包括: 使用Symbol()创建唯一符号实例,即使描述相同也不相等 可通过Symbol.for()在全局注册表中共享符号实例 适合用作对象属性名,避免属性名冲突 不是构造函数,不能使用new创建 可通过Object.defineProperty等方式作为属性使用 Symbol主要用于创建唯一标识符,而非实现私有属性。它解决了传统字符串作为属性名可能导致的命名冲突问题。
2025-11-20 18:19:02
1790
原创 JavaScript高级程序设计(第4版)读书笔记:三
JavaScript数据类型包括7种:6种原始类型(Undefined、Null、Boolean、Number、String、Symbol)和Object类型。typeof操作符用于检测变量类型,会返回对应类型的字符串表示。Undefined类型表示未初始化的变量,Null类型表示空对象指针,两者在比较时相等但用途不同。Boolean类型只有true和false两个值,其他类型可通过Boolean()函数转换为布尔值。Number类型支持十进制、八进制和十六进制表示,浮点数会自动优化存储格式。
2025-11-19 23:33:44
688
原创 JavaScript高级程序设计(第4版)读书笔记:二
本文摘要: JavaScript语言基础部分介绍了语法规则,包括区分大小写、标识符命名规范(首字符为字母/_/$,后续字符可包含数字)、注释方式(单行//和多行/* */)以及严格模式("use strict")。语句以分号结尾,代码块使用花括号{}界定。关键字和保留字不能用作标识符。变量声明方面,var是函数作用域,存在变量提升问题;let是块作用域,无变量提升,存在暂时性死区,全局let声明不会成为window属性。let不允许重复声明,而var可以。
2025-11-19 23:26:05
606
原创 JavaScript高级程序设计(第4版)读书笔记:一
本文介绍了在HTML中使用JavaScript的核心方法。重点包括: 使用<script>元素插入JavaScript的两种方式:直接嵌入代码或引用外部文件 <script>标签的重要属性如async、defer等的作用和区别 推荐将所有JavaScript引用放在<body>末尾以优化页面加载 动态加载脚本的方法及注意事项 使用外部JS文件的优势(可维护性和缓存) <noscript>元素在不支持脚本时的应用 文章提供了详细的代码示例,帮助开发者理解不同脚本
2025-11-19 23:22:36
722
原创 spdlog实现多线程日志管理器
本文介绍了一个基于spdlog库实现的多线程日志管理器LoggerManager。该管理器采用单例模式设计,提供以下核心功能: 支持创建控制台和文件日志记录器,可自定义日志格式 包含线程安全机制,使用互斥锁保护共享资源 内置异步日志功能,初始化8192大小的线程池 提供默认日志器和创建自定义命名日志器的接口 支持日志级别设置、定时刷新和关机清理功能 预定义了一系列宏简化不同级别的日志调用 日志格式包含时间戳、线程ID、日志级别、文件名和行号等信息,便于调试。
2025-09-02 23:04:08
958
原创 std::promise 使用详解
摘要:std::promise是C++11提供的线程间通信工具,与std::future配合实现异步结果传递。生产者线程通过set_value()或set_exception()存储结果/异常,消费者线程通过future.get()阻塞获取。典型应用包括线程池任务返回、超时控制等场景。需注意单次使用特性、移动语义及生命周期管理,避免broken_promise错误。
2025-09-02 22:56:52
458
原创 memset 和 memcpy 注意事项
memset和memcpy函数存在缓冲区溢出、地址重叠、错误size计算等危险,可能导致程序崩溃、数据损坏或安全漏洞。在C++中应避免对非平凡类型使用这些函数,改用类型安全的替代方案。关键规避措施包括:严格验证缓冲区大小、不确定时用memmove替代、使用安全清除函数处理敏感数据。核心原则是优先选择更安全的替代方案,使用时必须确保参数绝对正确。
2025-08-30 22:38:56
978
原创 编译教程(0) - 使用Visual Studio的Property Manager简化项目库配置
Visual Studio的属性管理器(.props)是管理C++项目依赖和编译设置的高效工具。通过创建属性表,可将第三方库路径、编译选项等通用配置集中管理,避免重复设置。主要步骤包括新建/导入属性表、配置VC++目录和链接器输入。团队协作时可统一库路径或使用环境变量,实现配置共享。该方案优点在于配置修改可全局生效、项目文件更干净、支持模块化组合,并能显著减少手动配置错误,特别适合中大型C++项目维护。
2025-08-30 17:42:59
844
原创 迭代器模式 (Iterator Pattern)
迭代器模式提供一种顺序访问聚合对象元素的方法,同时隐藏其内部表示。该模式包含迭代器接口(Iterator)、具体迭代器(ConcreteIterator)、聚合接口(Aggregate)和具体聚合(ConcreteAggregate)四个核心组件。文章展示了C++实现示例,通过IntegerCollection和IntegerIterator演示如何创建和使用迭代器来遍历集合元素。该模式适用于需要隐藏集合内部结构、支持多种遍历方式或提供统一遍历接口的场景。
2025-08-29 12:16:17
222
原创 中介者模式 (Mediator Pattern)
中介者模式通过封装对象间交互来降低耦合度,主要包括中介者接口(如ChatRoomMediator)、具体中介者(ChatRoom)、同事类(User)和具体同事类(NormalUser/AdminUser)。在聊天室场景中,用户通过中介者发送消息而无需直接引用其他用户,实现解耦。该模式适用于复杂交互关系的场景,使系统更易维护和扩展。C++实现展示了中介者管理用户通信的核心机制。
2025-08-29 12:15:45
255
原创 备忘录模式 (Memento Pattern)
备忘录模式用于在不破坏封装性的前提下保存对象状态,以便后续恢复。核心组件包括原发器(TextEditor)、备忘录(TextMemento)和管理者(History)。原发器创建并恢复状态,管理者保存备忘录但不操作内容。该模式适用于需要撤销/重做功能的场景,如文本编辑器。示例中,TextEditor通过History管理状态快照,实现撤销操作。组件关系:TextEditor创建TextMemento,History存储TextMemento,三者组合实现状态保存与恢复功能。
2025-08-28 17:24:51
141
原创 观察者模式 (Observer Pattern)
观察者模式定义对象间一对多的依赖关系,当主题状态变化时自动通知所有观察者。该模式包含Subject(维护观察者列表)、Observer(定义更新接口)及其具体实现。示例展示了气象站(ConcreteSubject)在数据更新时通知当前天气(ConcreteObserver)和统计显示(ConcreteObserver)。主题通过registerObserver/removeObserver管理观察者,setMeasurements触发状态更新和通知。该模式适用于需要动态通知多个对象的场景,如事件系统或数据监
2025-08-28 17:23:59
411
原创 策略模式 (Strategy Pattern)
策略模式通过定义算法族并封装每个算法,使它们可以互相替换。该模式由策略接口、具体策略类(如快速排序、归并排序)和上下文类组成,上下文持有策略引用并委托算法执行。示例展示了排序算法的动态切换,通过设置不同策略实现不同排序方式(快速/归并/冒泡排序),使算法与客户端解耦。这种模式适用于需要灵活切换算法的场景,避免了复杂条件判断。
2025-08-27 20:32:33
305
原创 访问者模式 (Visitor Pattern)
摘要: 访问者模式允许在不修改元素类的前提下定义新操作,通过分离操作逻辑与数据结构实现解耦。核心组件包括:Visitor(定义访问接口)、ConcreteVisitor(实现操作)、Element(声明接受访问者方法)和ObjectStructure(管理元素集合)。典型应用场景包括稳定对象结构上频繁添加新操作(如文档导出为PDF/HTML)。示例代码展示了文档元素(文本/图片/视频)通过不同访问者实现多格式导出,验证了模式扩展性——新增导出格式仅需添加ConcreteVisitor,无需改动元素类。
2025-08-27 20:31:35
209
原创 状态模式 (State Pattern)
状态模式允许对象在内部状态改变时改变行为,使对象看起来像修改了类。核心组件包括状态接口(定义行为)、具体状态(实现不同状态行为)和上下文(维护当前状态)。以C++电梯系统为例,通过StoppedState、MovingState和OpenState实现状态切换,避免条件分支。上下文类Elevator通过委托请求给状态对象,动态改变行为(如开门/移动)。该模式适用于行为随状态复杂变化且需封装转换逻辑的场景,提升代码可维护性。
2025-08-26 21:57:10
485
原创 命令模式 (Command Pattern)
命令模式是一种行为设计模式,将请求封装为对象,支持参数化、队列化、撤销/重做等功能。其核心组件包括Command接口、ConcreteCommand具体命令、Invoker调用者、Receiver接收者和Client客户端。通过智能家居控制实例(灯光/空调遥控)的C++实现,展示了如何将操作封装为可执行/撤销的命令对象,实现调用者与接收者的解耦。该模式特别适用于需要支持操作历史记录、事务回滚等场景,通过命令对象的持久化实现灵活控制。
2025-08-26 13:02:27
181
原创 职责链模式 (Chain of Responsibility Pattern)
职责链模式是一种行为设计模式,允许多个对象依次处理请求,避免请求发送者和接收者之间的直接耦合。该模式通过将处理器对象连成一条链,使请求沿着链传递直到被处理。示例中展示了报销审批流程,包含主管、部门经理等不同层级的审批者,每个审批者只能处理特定金额范围内的请求,超出范围则转交给下一级。这种模式适用于需要动态确定处理对象或需向多个对象提交请求的场景。
2025-08-26 13:02:00
384
原创 模板方法模式 (Template Method Pattern)
模板方法模式定义算法骨架,将可变步骤延迟到子类实现。抽象类(如DataProcessor)定义模板方法和基本操作,具体类(如CSVProcessor/JSONProcessor)实现特定步骤。该模式适用于固定流程中需定制部分行为(如数据加载/转换)的场景,通过钩子方法控制扩展。C++示例展示了不同数据处理器共享相同处理流程(加载→验证→转换→保存→清理),各步骤可灵活重写。模式核心是将不变结构与可变行为分离,提升代码复用性。
2025-08-25 22:22:22
304
原创 解释器模式 (Interpreter Pattern)
解释器模式简介 解释器模式是一种行为设计模式,用于定义语言的文法表示并创建解释器来执行该语言中的语句。该模式的核心组件包括抽象表达式、终结符表达式、非终结符表达式和上下文环境。典型应用场景是需要解释简单语言的场合,特别是当文法可表示为树形结构时。C++实现示例展示了布尔表达式解释器的构建过程,包含变量、与/或/非运算的逻辑处理。解释器模式虽然灵活,但执行效率通常不高,适合用在性能要求不高的场景中。
2025-08-25 22:19:54
269
原创 代理模式 (Proxy Pattern)
代理模式通过Proxy类控制对RealSubject的访问,核心组件包括Subject接口、RealSubject真实对象和Proxy代理类。Proxy持有RealSubject引用,在访问时进行权限检查等控制。典型应用包括远程代理、虚拟代理、保护代理等。示例展示了C++实现的文件访问控制代理,验证用户权限后才允许读取文件。与装饰器模式不同,代理侧重访问控制而非功能增强。
2025-08-25 22:16:13
160
原创 享元模式 (Flyweight Pattern)
享元模式通过共享技术有效支持大量细粒度对象,减少内存使用。核心组件包括享元接口(ParticleType)、具体享元(SharedParticleType)、非共享享元(UniqueParticle)、享元工厂(ParticleFactory)和客户端(Particle)。工厂管理共享对象的创建,客户端存储外部状态。示例展示了游戏粒子系统中,相同类型粒子共享实例,而特殊粒子独立创建。验证显示相同类型的多个粒子引用同一内存地址,证实了对象的共享性。该模式适用于需要大量相似对象且大部分状态可外部化的场景。
2025-08-25 22:14:26
317
原创 外观模式 (Facade Pattern)
外观模式为复杂子系统提供简化接口。通过创建HomeTheaterFacade外观类,封装投影仪、音响、蓝光播放器和灯光控制等子系统操作,实现一键开启/关闭影院功能。该模式降低了客户端与子系统的耦合度,典型应用场景包括家庭影院控制等需要简化复杂操作的场景。示例代码展示了如何通过外观类统一调用多个子系统方法,提供watchMovie()和endMovie()等便捷接口。
2025-08-25 22:12:31
229
原创 装饰器模式 (Decorator Pattern)
装饰器模式动态地为对象添加额外职责,比继承更灵活。该模式包含组件接口(Coffee)、具体组件(Espresso)、装饰器基类(CoffeeDecorator)和具体装饰器(Milk/Mocha/Whip)。装饰器持有组件引用,通过组合方式扩展功能。示例展示了给咖啡动态添加配料的过程:先创建基础咖啡(Espresso),再依次添加牛奶、摩卡和奶泡,每次装饰都会更新描述和价格。这种模式避免了继承带来的类爆炸问题,支持运行时灵活组合功能。
2025-08-25 22:10:25
227
原创 组合模式 (Composite Pattern)
组合模式是一种结构型设计模式,用于表示部分-整体的层次结构。通过统一处理单个对象和组合对象,使客户端可以一致地使用它们。该模式包含三个核心组件:Component接口、Leaf叶子节点和Composite复合组件。在文件系统示例中,Folder作为复合组件可以包含File叶子节点和其他Folder,形成树形结构。C++实现展示了如何通过继承和多态构建层次结构,其中Component定义统一接口,Leaf和Composite分别实现不同行为。
2025-08-25 22:07:56
395
原创 桥接模式 (Bridge Pattern)
桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使两者可以独立变化。该模式包含四个核心组件:抽象部分(Abstraction)、扩充抽象(RefinedAbstraction)、实现者接口(Implementor)和具体实现者(ConcreteImplementor)。示例中展示了遥控器(抽象)与设备(实现)的解耦,通过组合关系桥接二者,支持电视和收音机等不同设备的独立扩展。C++实现演示了基础遥控器和高级遥控器如何通过桥接设备接口实现功能扩展,体现了抽象/实现分离的设计原则
2025-08-25 22:05:51
190
原创 适配器模式(AdapterPattern)
适配器模式用于将一个类的接口转换为客户期望的另一个接口,实现接口兼容。分两种实现方式:类版本通过多重继承实现(如PowerAdapter继承USPowerOutlet和EuropeanPower),对象版本通过组合实现(如AnotherPowerAdapter持有EuropeanPower引用)。示例中,美国设备(USDevice)通过适配器调用欧洲电源接口(supplyEuropeanPower),完成电压转换。该模式适用于复用已有类但其接口不匹配的场景
2025-08-25 22:01:43
216
原创 单例模式 (Singleton Pattern)
单例模式确保类只有一个实例并提供全局访问点。核心组件包括私有构造函数、静态实例指针和获取实例的静态方法。典型应用场景包括配置管理、日志系统等需要全局唯一实例的情况。C++实现中,通过删除拷贝构造/赋值运算符保证唯一性,利用静态局部变量实现线程安全的实例化。模板版本进一步抽象,通过友元声明和智能指针管理生命周期,支持各类单例实现。该模式不涉及继承关系,主要关注实例控制。
2025-08-25 21:56:56
294
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅