自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Python面向对象的写法

本文介绍了Python面向对象编程的核心概念,包括类的创建、实例化、访问属性、内置类属性、对象销毁机制等。重点讲解了类的继承、方法重写、运算符重载以及访问控制等特性。通过示例代码展示了如何使用构造器__init__和析构器__del__,以及self参数的作用。文章还详细说明了Python的垃圾回收机制、多继承支持、属性访问控制规则(public/protected/private)等内容。这些知识点是Python面向对象编程的基础,对于理解和使用Python类与对象非常重要。

2025-07-30 09:16:40 410

原创 Python Fastapi:2.接收参数,枚举参数,多参数和参数校验

本文介绍了FastAPI中枚举和参数校验的使用方法。主要内容包括:1) 通过定义枚举类型限制用户输入;2) 使用Query参数校验字符串长度、正则表达式匹配;3) 处理数组类型参数。这些方法能有效规范用户输入,提高代码复用性和安全性,防止非法数据注入。

2025-07-30 09:13:10 127

原创 Python Fastapi:1.Fastapi介绍;GET和POST请求的写法

FastAPI是一个高性能异步Web框架,支持高并发处理。通过uvicorn服务器运行,开发者可以使用async/await语法实现异步通信。框架提供GET和POST请求处理:GET请求支持路径参数和查询参数两种方式;POST请求需安装python-multipart,通过Form接收表单数据。示例演示了基础路由配置、参数接收和异步响应返回,体现了FastAPI简洁高效的开发特点。

2025-07-30 09:11:06 72

原创 Apache服务器指南

Apache HTTP Server 是一款广泛使用的开源 Web 服务器软件,支持多种操作系统和编程语言。本文介绍了 Apache 的基本功能、安装方法(Linux/Windows)、核心配置文件结构以及虚拟主机配置步骤。详细讲解了常用模块(如 mod_rewrite、mod_ssl)、HTTPS 配置流程、关键配置指令解析和 .htaccess 文件使用。还包含日志管理、推荐部署组合(如 LAMP 栈)以及权限管理、性能优化等注意事项,为开发者提供全面的 Apache 配置指南。

2025-07-29 10:00:11 1052

原创 Debian系和Redhat系防火墙配置

本文介绍了Linux系统中Debian系和Redhat系防火墙的配置方法。对于Debian系(如Ubuntu),主要使用UFW防火墙,包括安装、启用/禁用、端口/服务管理、默认策略设置等基本命令。对于Redhat系(如CentOS),则使用Firewalld防火墙,涵盖安装、启动/停止、端口开放/关闭等操作。文中特别强调了在配置防火墙时需注意保持SSH连接,并提供了典型配置示例。两种防火墙系统均支持持久化规则保存,重启后仍然有效。

2025-07-29 09:55:03 240

原创 Python的gunicorn服务器配置

Gunicorn是Python WSGI服务器,用于部署Flask/Django等应用。摘要介绍了Gunicorn的基本功能、安装方法、启动Flask应用的步骤,以及常用参数说明。重点内容包括:通过命令行或配置文件启动Gunicorn(示例配置详细列出关键参数);注意事项(Windows不兼容问题);推荐的生产环境部署组合(Nginx+Gunicorn+Supervisor)。文章提供了从基础到生产部署的完整指南,适合开发者快速掌握Gunicorn的使用方法。

2025-07-29 09:40:32 346

原创 Web服务器基础

本文简要介绍了Web的工作原理,包括HTTP协议的工作流程、URL的组成结构、DNS域名解析过程以及HTTP请求和响应的数据包格式。重点阐述了HTTP协议的无状态特性、四种交互方法(GET/POST/PUT/DELETE)及其应用场景,并对比分析了GET和POST请求的区别。文章还通过图示展示了Web访问的基本流程和DNS解析的层次结构,帮助读者理解从用户输入URL到页面显示的全过程。

2025-07-28 17:46:56 603

原创 Caddy服务器指南

Caddy是一个基于Go语言开发的现代化Web服务器,默认支持HTTPS。安装过程包括下载主文件、创建专用用户和目录结构、配置systemd服务单元以及设置防火墙规则。Caddy支持正向代理和反向代理功能,可通过Caddyfile配置文件快速实现。它还内置了身份验证功能,使用basicauth模块可实现401认证,支持密码哈希和多模块导入。相比传统Web服务器,Caddy以配置简单、自动HTTPS和安全特性著称,适合快速部署Web服务。

2025-07-28 17:43:45 274

原创 Java进阶7:Junit单元测试

Junit单元测试是Java开发中重要的测试框架,主要用于验证单个方法的正确性。文章介绍了单元测试的基本概念、TDD开发模式以及Junit框架的核心功能。Junit通过@Before、@After等注解实现测试生命周期管理,利用断言机制验证结果,支持自动化测试。测试方法需满足无参、无返回值且带@Test注解的条件。文章还强调了测试通过不代表代码无bug,需要结合业务逻辑判断。Junit集成在IDEA中,可方便地执行单个或批量测试,是确保代码质量的有效工具。

2025-07-27 09:48:02 773

原创 Java进阶6:Java多线程编程

本文介绍了Java多线程的基本概念和实现方法。首先阐述了线程的生命周期,包括新建、就绪、运行、阻塞和死亡五种状态。然后讲解了线程优先级设置,优先级为1-10,默认5。重点介绍了三种创建线程的方式:实现Runnable接口、继承Thread类,以及使用Callable和Future组合方式。每种方法都通过代码示例展示具体实现,其中Runnable和Thread方式需要重写run()方法,而Callable方式则通过call()方法实现可返回值的线程。文章为Java多线程编程提供了基础指导。

2025-07-27 09:31:53 895

原创 Nginx服务器指南

Nginx服务器摘要 Nginx是一款高性能的Web服务器,采用事件驱动架构,相比Apache能处理更多并发连接且资源占用更少。其核心优势在于模块化设计、高效的事件处理机制和简洁的配置方式。Nginx通过单线程复用处理连接,而非传统多线程模式,大幅提升性能。安装方式多样,支持Linux/FreeBSD系统,可通过源码编译实现高度定制化配置。关键功能包括反向代理(通过proxy_pass指令)、负载均衡和管理命令(启动/停止/重载)。配置文件采用树状结构,指令分为全局块、events块和http块,语法清晰易

2025-07-26 09:28:05 730

原创 Java进阶5:网络编程和发送邮件

本文介绍了Java网络编程和邮件发送的实现方法。在网络编程部分,重点讲解了Socket编程原理,包括TCP客户端和服务器的实现代码示例,展示了如何建立连接、发送接收数据。邮件发送部分介绍了使用JavaMail API发送邮件的步骤,包括配置邮件服务器参数、创建和发送邮件消息的具体代码实现。文章提供了完整的代码示例,涵盖网络通信和邮件发送两个常见的Java网络应用场景。

2025-07-26 09:16:38 216

原创 网安面试必看:RootKitUnhooker检测工具的使用

Rootkit是一种获取系统root权限的恶意软件,能隐藏自身及关联文件、进程和网络链接。Rootkit Unhooker是专用于检测和清除Rootkit的工具,支持32位Windows系统。主要检测功能包括:SSDT钩子检测恢复(可追踪挂钩模块并清理)、隐藏进程/驱动/文件检测(识别未在系统列表中显示的可疑对象)、隐藏代码检测(发现驱动中的可执行代码片段)、用户模式钩子检测(处理进程注入)以及生成详细报告。该工具通过内核级扫描,有效对抗90%的Rootkit威胁,需管理员权限运行。

2025-07-25 09:59:16 453

原创 Java进阶4:泛型、序列化和反序列化

Java泛型是JDK5引入的类型安全机制,通过参数化类型实现代码复用。摘要包含以下要点: 泛型方法:使用类型参数<>声明,支持多种类型参数(E,T,K,V等),如printArray()可遍历不同类型数组。 类型限定:通过extends约束类型范围,如Comparable<T>限定可比较类型。 泛型类:类名后加类型参数声明,如Box<T>类。 通配符:使用?表示未知类型,支持泛型集合的灵活处理,如List<? extends Number>。 序列化:实现Se

2025-07-25 09:45:29 988

原创 C++课设实践项目:C++构建的学籍管理系统

这篇150字的摘要概括了学生信息管理系统课设的核心内容: 本文介绍了一个基于C++开发的学生信息管理系统课程设计项目。系统采用模块化架构,实现了账户登录(MD5加密)、学生信息增删改查、成绩统计分析和柱状图展示等功能。项目包含控制器、界面、文件读写、数据模型和加密等核心模块,支持管理员和学生两种权限角色,数据以文本文件持久化存储。系统通过控制台界面运行,展示了成绩管理、合格率统计等教学管理功能,适合作为C++面向对象编程的学习案例。文章提供了项目亮点、技术环境、功能截图和源码获取方式,可作为类似课程设计的参

2025-07-24 16:21:51 697

原创 Java进阶3:Java集合框架、ArrayList、LinkedList、HashSet、HashMap和他们的迭代器

本文介绍了Java集合框架的核心概念和常用实现类。主要内容包括:集合框架的设计目标(高性能、互操作性、易扩展性);两种容器类型Collection和Map;主要集合接口List、Set、Queue的区别;常用实现类ArrayList、LinkedList、HashSet的使用方法。重点讲解了ArrayList的动态数组特性及其增删改查操作,LinkedList的链表结构及其适用场景,以及HashSet的无序不重复特性。文章还涉及集合排序、基本类型处理等实用技巧,为Java集合框架的使用提供了全面指导。

2025-07-24 15:42:36 1264

原创 Java进阶2:抽象类、接口、枚举

本文介绍了Java中的抽象类、接口和枚举的概念与用法。抽象类通过abstract关键字定义,不能被实例化,必须被继承才能使用,包含子类共有方法。接口是抽象方法的集合,使用interface声明,支持多继承,类通过implements实现接口。枚举使用enum定义,表示一组常量,内部通过Class实现,具有values()、ordinal()等方法。三者都是Java中重要的抽象机制,分别适用于不同的编程场景。

2025-07-24 15:36:58 835

原创 Java进阶1:面向对象、重载和重写、多态

摘要:本文介绍了Java继承机制的核心概念,包括单继承(extends)和多接口实现(implements),重点讲解了super/this关键字、final修饰符以及构造器的继承规则。详细阐述了方法重写(Override)与重载(Overload)的区别与实现方式,并深入解析了Java多态性的三大必要条件(继承、重写、父类引用指向子类对象)。文中通过动物类与猫类的代码示例,演示了继承体系的构建、方法重写和多态调用,同时对比了Java虚函数机制与C++的区别。最后强调了final修饰符在限制继承和方法重写中

2025-07-23 08:43:47 330

原创 Node.js:连接Mysql、JXcore打包

本文介绍了如何使用Node.js连接和操作MySQL数据库,以及使用JXcore打包Node.js应用。内容包括:1) 安装mysql驱动并配置连接;2) 执行查询、插入、更新和删除等数据库操作示例;3) 使用JXcore打包Node.js应用的方法,包括打包命令和运行方式。文中提供了详细的代码示例和输出结果,帮助开发者快速实现Node.js与MySQL的交互以及应用打包。

2025-07-23 08:39:56 265

原创 Node.js:RESPful API、多进程

本文介绍了REST架构风格和Node.js多进程编程。REST是一种基于HTTP协议的软件架构风格,通过GET、POST、PUT、DELETE等方法操作资源。文章演示了使用Node.js创建RESTful Web服务,包括获取用户列表、添加/删除用户等功能。对于Node.js多进程,介绍了child_process模块的exec()方法,该方法可以创建子进程执行命令并获取输出。代码示例展示了如何调用子进程执行命令并处理返回结果。REST和Node.js多进程都是构建高性能Web应用的重要技术。

2025-07-22 22:43:48 1012

原创 Node.js:Web模块、Express框架

本文介绍了Web服务器基础及Node.js实现。主要内容包括:1)Web服务器概念与主流服务器(Apache/Nginx/IIS);2)使用Node.js创建Web服务器示例,演示文件服务功能;3)Node.js客户端实现;4)Express框架简介,包含安装方法和基本应用实例;5)Express中请求与响应对象的核心属性和用法。文章提供了完整的代码示例,帮助理解Node.js构建Web服务的基本流程和Express框架的核心特性。

2025-07-22 22:39:10 561

原创 Node.js:常用工具、GET/POST请求的写法、工具模块

本文介绍了Node.js中util模块的常用功能及GET/POST请求处理。util模块提供了callbackify(将async函数转为回调风格)、inherits(实现原型继承)、inspect(对象转字符串)等工具方法。GET请求可通过url.parse解析URL参数,POST请求则需监听data/end事件获取请求体内容。文章还简要提及了Node.js的其他核心模块(OS、Path、Net等)及其作用。这些工具模块和请求处理方法是Node.js开发的基础知识点。

2025-07-20 17:13:44 1131

原创 Node.js:函数、路由、全局对象

本文介绍了Node.js函数与全局对象的关键概念。主要内容包括:1) JavaScript函数作为参数传递的两种方式(具名和匿名函数);2) Node.js路由实现原理,通过url模块解析请求路径;3) 全局对象global及其常用属性(__filename、__dirname等);4) 定时器函数(setTimeout/setInterval)和标准控制台输出方法;5) process对象及其事件处理机制。这些知识点涵盖了Node.js开发中函数式编程、路由处理、全局变量管理和进程控制等核心内容,为Nod

2025-07-20 17:12:00 828

原创 Node.js:Stream、模块系统

摘要:本文介绍了Node.js中的Stream流操作、模块系统及相关应用。Stream是一个抽象接口,分为可读、可写、双工和转换流类型,通过事件机制处理数据。文章演示了文件读写、管道传输和压缩解压等流操作示例。模块系统部分说明了如何创建和引用模块,包括函数模块和对象模块,并解析了模块加载优先级策略(缓存>原生>文件)。服务端模块通过require方法加载,http等原生模块优先从内置模块加载而非文件系统。

2025-07-19 20:04:58 691

原创 Node.js:EventEmitter、Buffer

本文介绍了Node.js中的EventEmitter和Buffer模块的核心概念与用法。EventEmitter是Node.js事件驱动的基础,支持事件监听和触发,提供了添加、移除、触发事件等方法,并支持error事件处理。Buffer模块用于处理二进制数据,提供了创建缓冲区、读写数据以及与JSON转换的功能,支持多种编码格式。文章通过代码示例演示了EventEmitter的事件绑定与触发,以及Buffer的创建、写入、读取和JSON转换等操作。

2025-07-19 20:02:41 1125

原创 C++必看:关于多态下基类函数参数的调用问题

C++虚函数实现运行时多态的关键在于通过基类指针或引用调用时,实际执行的函数版本由对象动态类型决定。虚函数的多态性与函数参数类型无关,参数是否为指针不影响多态决议过程。当参数本身是基类指针时,其多态行为与调用者的多态行为相互独立。虚函数机制依赖于编译器生成的虚函数表和虚指针,在运行时动态确定函数调用。

2025-07-18 10:05:42 308

原创 C++必看:关于引用的多重引用问题

四种C++声明分析: A(int a, &ra = a, &&ref = ra;)错误,右值引用&&ref不能直接绑定左值ra; B(int &refa[10];)错误,C++不支持引用数组; C(int a, &ra = a, &*refp = &ra;)错误,&*refp语法无效; D(int* pi, *&pref = pi;)正确,pref是对指针pi的合法引用。 总结:涉及引用和指针的声明需注意绑定规则和类型匹

2025-07-18 10:02:55 436

原创 C++必看:左值和右值问题

摘要: C++中的左值(lvalue)和右值(rvalue)是表达式分类的核心概念。左值具有持久身份,可被命名、取地址(如变量int x),常出现在赋值左侧;右值则是临时对象(如字面量42或表达式x+1),无持久地址,生命周期短暂。C++11引入右值引用(&&)后,右值细分为纯右值(临时值)和将亡值(可移动对象,如std::move(x))。关键区别在于左值可修改且持久,右值临时且不可直接修改。这一分类对赋值、引用绑定及移动语义(避免拷贝)至关重要。

2025-07-17 09:09:24 676

原创 Node.js:REPL、回调函数、事件循环

Node.js概述:REPL环境提供交互式命令执行功能,支持变量、多行表达式和下划线变量获取结果。采用事件驱动模型,通过回调函数实现异步非阻塞I/O操作,提升并发性能。事件循环机制基于观察者模式,内置events模块可创建/触发自定义事件。示例演示了阻塞与非阻塞代码的区别,以及事件绑定与触发的实现方式,体现了Node.js单线程但高并发的特性。

2025-07-17 09:07:39 715

原创 C++必看:子类引用绑定到父类问题

C++允许子类对象赋值给父类引用,这是面向对象多态性的核心特性。子类必须直接或间接继承父类,且父类方法需声明为虚函数才能实现动态绑定。关键注意事项包括:避免对象切片(应使用引用或指针而非直接赋值)、虚函数的使用(确保正确多态行为)以及访问权限限制(父类引用无法直接访问子类特有成员)。典型应用场景如工厂模式,通过基类引用操作不同派生类对象。正确使用该特性需遵循继承关系、虚函数机制,并警惕对象切片问题。

2025-07-16 09:33:52 316

原创 Node.js:创建第一个应用

Node.js是基于Chrome V8引擎的JavaScript运行环境,支持服务器端编程。它扩展了JavaScript的应用场景,可用于开发服务器、API、命令行工具和实时应用等。Node.js应用由引入模块、创建服务器和请求处理三部分组成。NPM是其包管理工具,支持模块安装(本地/全局)、卸载、更新和搜索。通过package.json文件管理项目依赖,使用npm init创建模块,npm publish发布模块。淘宝镜像可加速国内下载速度。Node.js简化了服务器开发流程,使JavaScript成为全

2025-07-16 09:32:23 520

原创 网安面试必看:内存马的排查思路

内存马是一种隐蔽性强的恶意软件,通过将恶意代码注入系统内存实现攻击。其工作流程包括注入代码、修改执行流程、隐藏进程和接收控制命令。查杀内存马可采取使用进程管理工具、分析网络流量、使用安全检测工具和升级安全补丁等方法。内存马主要分为servlet-api型和字节码增强型两类。排查思路包括判断注入方式、分析流量特征、检查中间件漏洞和框架漏洞等。内存马因其隐蔽性已成为主要网络攻击手段之一。

2025-07-16 09:24:05 542

原创 C++必看:[malloc、new、free和delete的比较]、[#define和const的比较]、[*p++、*(p++)、(*p)++、*++p、++*p的比较]、[inline和宏的比较]

C++内存管理与运算符解析 内存分配方面,new/delete与malloc/free的主要区别在于构造函数/析构函数的调用。new会调用构造函数并分配内存,delete先调用析构函数再回收空间,而malloc/free仅处理内存不调用构造/析构函数。 #define与const在预处理阶段、类型检查、内存分配和代码展开方式上存在显著差异。const具有类型安全性和内存分配优势,而#define是简单的文本替换。 指针运算符优先级方面,后置++优先级高于*,前置++与*同级。不同组合会产生不同的指针移动和值

2025-07-15 10:09:26 597

原创 C++必看:列表初始化、不能声明为虚函数的、const同名函数的调用优先级问题、指针和引用的区别

C++关键特性摘要:1)初始化列表必须用于const成员、引用成员、无默认构造函数的类成员及父类;2)构造函数、静态函数、全局/友元函数不能声明为虚函数,内联虚函数行为复杂;3)同名const函数调用优先级取决于调用对象const性,非const对象优先调用非const版本;4)指针与引用核心区别:引用必须初始化且不可更改,不能为空,而指针更灵活可修改和为空。虚函数调用时,const版本选择取决于调用上下文而非动态绑定。

2025-07-15 10:00:23 683

原创 C++必看:关于const关键字用法的总结

C++ const用法总结 const关键字在C++中用于限制变量修改,增强代码安全性和可读性。主要用法包括: 基础用法: 常量声明:const int x = 10; 指针常量:int* const ptr(指针不可变) 常量指针:const int* ptr(内容不可变) 函数参数: 值传递:void func(const int x)(限制内部修改) 引用传递:void func(const int& x)(避免拷贝且保护数据) 指针传递:void func(const int* x)(保护指

2025-07-14 13:57:34 1030

原创 C++必看:<<左移操作 和 >>右移操作的相关问题

C++中的位操作符<<和>>的补位规则不同。左移<<总是低位补0,但若修改有符号数的符号位会导致未定义行为。右移>>则分两种情况:无符号数高位补0(逻辑右移),有符号数高位补符号位(算术右移)。建议位运算优先使用无符号类型,避免未定义行为。对有符号数需要逻辑右移时,可先转为无符号类型再操作。

2025-07-14 13:53:21 388

原创 C++必看:C++的运算符重载

摘要: C++运算符重载的返回值选择取决于语义、性能和使用场景。**算术运算符(如+、-)通常返回新对象(如Complex),因其需生成独立结果;而赋值类运算符(如=、+=)和访问类运算符(如[])**返回引用(如Complex&),以支持链式操作和直接修改。返回对象确保安全性但可能拷贝,返回引用高效但需注意生命周期。特殊运算符(如后置++返回对象,前置++返回引用)需结合语义设计。成员函数重载适用于紧密关联对象的运算符(=、[]、->等),非成员函数(如友元)适用于对称操作(如a+b和b+a

2025-07-13 21:27:21 1062

原创 C++必看:关于static_cast和dynamic_cast问题

C++中static_cast和dynamic_cast是两种类型转换运算符: static_cast在编译时进行类型转换,适用于基本类型转换和类层次中的向上/向下转换,但不做运行时检查,存在安全隐患; dynamic_cast在运行时通过RTTI检查类型安全,仅适用于多态类(需虚函数),转换失败会返回nullptr或抛出异常,安全性高但性能较低。 static_cast类似C风格强制转换但更规范,适用于确定类型关系的场景;dynamic_cast适合需要运行时类型安全的复杂类层次转换。

2025-07-13 21:22:34 791

原创 C++必看:很重要的C++内存对齐模型

摘要:本文探讨了C++中空类和空结构体的内存模型问题,以及结构体内存对齐机制。空类/结构体的sizeof为1字节,添加普通成员函数不影响大小,但虚函数会引入虚表指针(4/8字节)。结构体对齐遵循系统资源分配规则,其大小为对齐要求的整数倍(最小8字节或最大成员大小)。嵌套结构体需特殊处理,对齐到所有成员的最大对齐数。代码示例展示了不同结构体布局对内存占用影响,并提及了修改对齐数的方法。

2025-07-13 09:12:26 282

原创 C++必看:运算符优先级问题

这篇文章总结了C++运算符的优先级规则,分为六个层级和特殊运算符。最高优先级是括号和成员访问,其次是单目运算、算术运算、位运算、比较和逻辑运算,最后是赋值和逗号运算。特殊运算符如三目运算符和移位运算符也有明确的优先级位置。文章通过简洁的口诀帮助记忆,如“括号优先,点箭头紧跟”和“乘除模,加减后”。这些规则对于编写正确且高效的C++代码至关重要。

2025-07-13 09:11:25 449

空空如也

空空如也

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

TA关注的人

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