Java IO和流 - java.io 包提供了传统的流(字节流和字符流)方式来进行文件操作,适合处理一些基本的文件输入输出任务。 - java.nio.file 包引入了更现代的文件操作方式,提供了更高效的文件操作,如复制、删除、移动文件,读取文件等。 - 使用 BufferedReader / BufferedWriter 来优化文本文件的读取和写入操作。 - Path 和 Files 类是 Jav
Java字符串 在 Java 中,字符串(String)是一个非常常用的类型,它是字符的序列。字符串在 Java 中是不可变的(immutable),一旦创建,字符串的内容就不能被改变。Java 提供了丰富的字符串操作方法和类,帮助开发者高效地处理和操作字符串数据。 在 Java 中,字符串可以通过以下两种方式创建: `java String str = "Hello, Wo
Java并发编程 进程&线程&协程&纤程 !学习路线 - 线程和进程 - 线程状态 - 并行和并发 - 同步和异步 - Synchronized - Volatile 关键字 - Lock 锁 - 死锁 - 可重入锁 - 线程安全 - 线程池 - JUC 的使用 - AQS - Fork Join - CAS Java并发
Java日期时间 Java中的日期和时间操作通常通过以下几个类来处理: java.util.Date 是 Java 中最早用于表示时间和日期的类,但它的设计存在一些缺陷,并且不推荐直接使用。它包含了日期和时间(到毫秒级)的信息。 `java import java.util.Date; public class DateExample { public stat
Java网络编程 Java 网络编程允许程序通过网络进行通信和数据交换。Java 提供了丰富的类和库来进行网络编程,主要使用 java.net 包。通过该包,Java 程序可以实现客户端和服务器的通信,支持常见的网络协议,如 TCP/IP 和 UDP。 - 客户端(Client):发送请求并接收响应的程序。 - 服务器(Server):接收客户端请求并返回响应的程序。 - Socket:网
Java集合和泛型 * ArrayList * LinkedList * List * Set * HashSet * LinkedHashSet * TreeSet Java中的集合(Collections)和泛型(Generics)是两大核心概念,对于Java开发者来说非常重要。下面我会简要概述这些知识点。 Java集合框架是一组接口、类和算法的集合
Java底层知识 bin/:包含 Java 编译器、解释器和其他工具的目录。常见工具包括: - javac.exe:Java 编译器,用于将 .java 文件编译为 .class 文件。 - java.exe:Java 运行时环境,用于运行 .class 文件。 - javadoc.exe:生成 Java 文档的工具。 - jar.exe:用于打包和管理 Java 归档文件的工具。 -
Java性能优化 Java性能优化:https://blog.csdn.net/t4i2b10X4c22nF6A/article/details/123453062 Java性能优化的50个细节:https://blog.csdn.net/zl1zl2zl3/article/details/87444326 !9ea9bb27c2e7d434aeceb8bf402798bc
推荐20个开源的前端低代码项目 [toc] xiangzhihong 2022-11-1153,058阅读7分钟 近几年,在技术领域低代码是比较热门的话题,比如阿里云推出了易搭,通过简单的拖拽、配置,即可完成业务应用的搭建,腾讯云则是推出了微搭,通过行业化模板、拖放式组件和可视化配置快速构建多端应用。 低代码是基于可视化和模型驱动理念,结合云原生与多端体验技术,它能够在多数业务场景下实现大
行业系统 行业系统是针对特定行业需求设计和开发的软件系统,旨在提升业务效率和服务质量。不同行业有不同的系统,以下是一些常见的行业系统示例: 1. 医疗保健行业: - 电子健康记录系统(Electronic Health Record System,EHR) - 医院信息系统(Hospital Information System,HIS) - 医疗影像管理系统(Pict
单元测试框架 JUnit 在JUnit4 中常用的注解有@Test、@BeforeClass、@AfterClass、@Before、@After 详细描述 @BeforeClass:它会在所有的测试方法执行之前被执行,只执行一次该方法,且必须为 public static void。当运行一些关联的用例时,可能会需要执行一些相同的操作,这时可将共用的部分
Java接口文档 https://doc.xiaominfo.com/docs/quick-start https://openapi.apifox.cn/ Swagger中文网:https://xiaoxiami.gitbook.io/swagger Swagger 是一个用于生成、描述和调用 RESTful 接口的 Web
Java日志框架 * Log4j - 简介:Log4j是Apache软件基金会下的一个经典日志框架,提供了简单且功能强大的日志记录功能。尽管有Log4j2作为继任者,但旧版Log4j在某些项目中仍然有所使用。 - 流行程度:虽然Log4j的流行程度在一定程度上被其继任者Log4j2所取代,但在一些老旧项目或特定场景中,它仍然具有一定的市场份额。 `properties
RxJava RxJava(Reactive Extensions for Java) 是一个基于 响应式编程(Reactive Programming) 的 Java 库,主要用于 异步编程、事件驱动编程 和 流式数据处理。 RxJava 提供了 可观察对象(Observable) 和 观察者(Observer) 的模式,让开发者可以更方便地处理 异步任务、多线程操作、事件流,避
Druid学习笔记 官网:https://druid.apache.org/ Druid 是 阿里巴巴开源的数据库连接池(JDBC Connection Pool),专门用于提升 Java 数据库访问性能,同时提供 SQL 解析、监控、数据安全等功能。 Druid 适用于 MySQL、PostgreSQL、Oracle、SQL Server 等主流数据库,广泛用于 Spring Boot 和
EclipseLink EclipseLink 是 Java 持久化(JPA) 的开源实现,由 Eclipse 基金会 维护,提供 对象-关系映射(ORM)、NoSQL 支持 和 Web 服务集成,用于管理 Java 应用程序中的数据访问。 它是 Jakarta Persistence(JPA,原 JPA 2.x) 的官方参考实现,同时支持 JPA、JDBC、JAXB、JCA、JSON-B、
Hibernate 6 简介 版本 6.3.1.最终版 目录 [toc] Hibernate 6 是对世界上最流行且功能丰富的 ORM 解决方案的重大重新设计。重新设计几乎涉及 Hibernate 的每个子系统,包括 API、映射注释和查询语言。这个新的 Hibernate 更强大、更健壮、类型更安全。 有了如此多的改进,很难概括这项工作的意义。但以下一般主题很突出。休眠6: -
Java数据库操作之JDBC Connect.java `java package com.pcf.lab_jsp_3; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Connect { private static final Str
JPA JPA(Java Persistence API) 是 Java 官方提供的 ORM(对象关系映射)标准,用于 在 Java 应用中操作数据库。它定义了一套 统一的接口,让开发者可以用 面向对象的方式 进行数据库操作,而不需要写大量 SQL 代码。 JPA 本身只是一个规范,并没有具体实现,常见的 JPA 实现有: - Hibernate(最流行,Spring
Java数据库操作 Java数据库操作的库非常丰富,以下是按照市场流行程度排序的一些主要库: 1. JDBC (Java Database Connectivity) - 简介:JDBC是Java官方提供的用于执行SQL语句的API,它允许Java程序连接到数据库并执行SQL查询和更新。 - 流行程度:JDBC作为Java官方标准,具有极高的流行度和广泛使用。它是Java数据库操
MyBatis使用 动态SQL 中间表 插件:pageHelper db.properties ` jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/xwebdb?useSSL=false&serverTimezone=UTC jdbc.username=xwebdb jdbc.pass
MyBatis-Plus MyBatis中文文档:https://baomidou.com/pages/24112f/ 本文讲述了:... [toc] ` com.baomidou mybatis-plus-generator 最新版本 ` MyBatis-Plus (简称 MP)是一个 MyBatis的
QueryDsl Querydsl 是一个 类型安全的查询框架,它使得在 Java 程序中构建 SQL、JPQL 或者 Hibernate 查询 变得更加简单、安全和灵活。Querydsl 通过提供 强类型的 API,可以避免传统的字符串拼接 SQL 可能引起的错误,同时使得代码可读性和维护性大大提高。 - 类型安全:Querydsl 通过自动生成 Java 类来表示数据库表或
数据库目前国际上有许多著名的数据库系统,不同数据库在功能、特性和应用场景上各有优势。以下是数据库的分类、一些知名数据库以及市场占有率的概述: ------ 数据库主要分为以下几种类型: 1. 关系型数据库(Relational Database) - 基于表格结构,使用 SQL 语言操作。 - 适用于结构化数据和事务处理。 - 代表数据库:MySQL、P
Java虚拟机 JVM JVM 性能调优 !JVM 类的加载(Load) 类的链接(Link) 类的初始化(Initialize) 运行时常量池、虚拟机启动、创建和加载、链接、初始化、绑定本地方法实现、Java虚拟机退出。 引导类加载器 扩展类加载器 系统类加载器 Java
Java编程开发 本文章主要讲述Java知识点,及其生态以及需要掌握的相关知识点和内容,本篇主要讲述概念,及其范围,并不对实际技术进行讲解, 1、需要学习的内容 2、开放方向 3、开源项目 4、市场占有率以及现有项目 参考资料: * Java全栈知识体系:https://pdai.tech/ * 二哥的Java进阶之路:https://javabetter.c
Java内置包 * java.applet * java.awt * java.beans * java.io * java.lang * java.math * java.net * java.nio * java.rmi * java.security * java.sql * java.text * java.time * java.util * javax.
Java 动态代理 Java 动态代理是一种在运行时动态生成代理类的机制,主要用于拦截方法调用、增强功能或实现 AOP(面向切面编程)。 1. 运行时生成代理类:无需手动编写代理类,减少代码冗余。 2. 接口代理:基于接口的代理,使用 java.lang.reflect.Proxy 实现。 3. 灵活性:可以在方法调用前后添加自定义逻辑。 1. 日志记录:在方法调用前后记录日志
Java反射 Java反射(Reflection)是 Java 提供的一种强大功能,它允许程序在运行时动态地获取类的信息、访问类的成员(如字段、方法和构造方法),并可以在运行时操作它们。通过反射,Java 可以动态地加载类、调用方法、访问和修改字段值,而不需要在编译时知道具体的类和方法。 Java反射主要依赖以下几个核心类: - Class 类:用来表示一个类或接口。 - Fiel
Java基础 参考笔记: * 二哥的Java进阶之路(沉默王二):https://javabetter.cn/ * Java学习:https://dev.java/learn/ * java官网:https://www.java.com/zh-CN/ * 杨焱老师笔记:http://www.yangeit.cn:21010/ * Java面试指南(鱼皮):https://javagu
Java多线程 Java 多线程是指在一个程序中同时运行多个执行流(线程)的机制。Java 提供了丰富的工具和类库来支持多线程编程,使得开发者可以在多核处理器上并发执行任务,从而提高应用程序的性能和响应性。多线程编程在现代应用中非常常见,尤其是在高性能计算、网络编程和用户界面编程等领域。 线程(Thread)是程序执行的最小单位。每个线程都属于一个进程,且一个进程中可以有多个线程,它们共享进
Java学习路线 Java学习路线 https://github.com/liyupi/codefather/blob/main/%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF/Java%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF%20by%20%E7%A8%8B%E5%BA%8F%E5%91%98%E9%B1%BC%E7%9A%AE.md
Java异常 在 Java 中,异常(Exception) 是程序运行过程中发生的错误或意外情况。异常机制是 Java 语言中处理错误的关键机制。通过异常处理,程序能够在遇到错误时不中断运行,而是按照程序员的设定执行一些补救措施或记录错误日志等。 Java 中的异常分为两大类: 检查型异常是指在编译时必须进行处理的异常。如果代码中可能抛出检查型异常,则必须显式地捕获(try-
Java面向对象 Java 面向对象(Object-Oriented Programming, OOP)是编程的一个重要范式,它通过将数据和操作数据的代码封装在一起,帮助程序员创建模块化、可维护、可扩展的软件。Java 是一种典型的面向对象的编程语言,几乎所有的 Java 程序都由类和对象组成。 在 Java 中,面向对象的核心概念包括 类、对象、封装、继承、多态 和 抽象。 - 类(C
NSIS(Nullsoft Scriptable Install System) NSIS 是一个开源的 Windows 安装程序制作工具,常用于为 C++ 应用程序创建安装包。 1. 轻量高效:生成的安装程序体积小,运行速度快。 2. 高度可定制:通过脚本语言控制安装流程。 3. 支持多语言:内置多语言支持,适合国际化应用。 1. 前往 NSIS 官网 下载最新版本。 2. 安装完成后,将 NSIS 的安装目录添加到系统环境变量中(可
C++ JSON & XML解析 JSON++ 是一个轻量级的 C++ JSON 解析库,支持 JSON 的解析和生成,适合嵌入式和高性能场景。 1. 下载 JSON++ 源码并将其包含到项目中。 2. 在代码中包含头文件: `cpp #include "json.hpp" ` 以下是一个解析和生成 JSON 的示例: `cpp #include
C++ MySQL 数据库操作 本文档介绍如何在 C++ 中使用 MySQL Connector/C++ 操作 MySQL 数据库。 MySQL Connector/C++ 是官方提供的 C++ API,用于与 MySQL 数据库交互。它支持标准的 C++ 编程接口,适合高性能数据库操作。 1. 前往 MySQL 官方网站 下载 MySQL Connector/C++。 2. 解压后
C++ 加密库 本文档介绍常用的 C++ 加密库及其使用方法,包括 OpenSSL 和 Crypto++。 --- OpenSSL 是一个开源的加密库,支持多种加密算法(如 AES、RSA、SHA),广泛应用于网络通信和数据加密。 1. 安装 OpenSSL: - 在 Linux 上: `bash sudo apt-get inst
C++ 测试库 本文档介绍常用的 C++ 测试库及其使用方法,包括 Google Test 和 Catch2。 --- Google Test 是一个流行的 C++ 单元测试框架,支持断言、测试套件和测试运行器,适合大规模项目的单元测试。 1. 克隆 Google Test 源码: `bash git clone https://github.co
C++字符串 - 字符串是位于双引号中的字符序列 + 在内存中以“\0”结束,所占字节比实际多一个  - 在C语言中没有专门的字符串变量,通常用一个字
C++文件操作 - 文件流: + C 语言把文件看作是一个字符的序列,即文件是由一个一个字符组成的字符流,因此 c 语言将文件也称之为文件流。 - 文件分类 + 文本文件 + 以 ASCII 码格式存放,一个字节存放一个字符。 文本文件的每一个字节存放一个 ASCII 码,代表一个字符。这便于对字符的逐个处理,但占用存储空间 较多,而且要花费时间转换。 + .c文件就
C++网络编程 C++ 网络编程有哪些库?这是一个很常见的问题,因为 C++ 本身没有提供标准的网络库,所以需要借助第三方的库来实现网络编程的功能。根据我搜索的结果,有以下几种比较流行的 C++ 网络编程库: - Boost.Asio,这是一个基于 Boost 库的异步网络编程库,它支持多种协议和平台,提供了高性能和高可移植性的网络编程接口。它也是 C++ 标准委员会考虑加入标准库的候选网络库之一1
MSBuild MSBuild(Microsoft Build Engine)是微软提供的构建工具,用于构建 .NET 和 C++ 项目。它是 Visual Studio 的核心构建引擎,支持命令行操作,适合自动化构建流程。 1. 跨平台支持:支持 Windows 和部分跨平台构建。 2. 高度可配置:通过 XML 配置文件(.vcxproj 或 .csproj)定义构建流程。 3. 集
QtCreator  - 当我们按下运行按钮的时, 其实Qt Creator编译器做了5件事情 + 对源文件进行预处理, 生成预处理文件 + 对预处理文件进行编译, 生成汇编文件 + 对汇编文件进行编译, 生成二进制文件 + 对二进
VisualStudio Visual Studio 是微软开发的一款集成开发环境(IDE),支持多种编程语言,包括C++。它提供了强大的调试工具、代码编辑器和项目管理功能,是开发C++程序的常用工具。 1. 前往 Visual Studio 官网 下载安装程序。 2. 在安装过程中,选择“使用C++的桌面开发”工作负载。 1. 打开Visual Studio后,创建或
vcpkg 官网:https://learn.microsoft.com/zh-cn/vcpkg/ vcpkg 是一个开源的 C++ 包管理工具,由 Microsoft 开发和维护。它旨在简化跨平台库的获取和管理,并且可以轻松集成到 CMake、MSBuild 和其他构建系统中。 特点:使用广泛、跨平台、大量库支持、易于集成 其他包管理器:Conan & Hunter
C++图形用户界面开发C++ 图形用户界面开发有哪些库?这是一个很常见的问题,因为 C++ 本身没有提供标准的图形用户界面库,所以需要借助第三方的库来实现图形用户界面的功能。根据我搜索的结果,有以下几种比较流行的 C++ 图形用户界面库: - Qt,这是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Comma
Boost C++ Boost C++ 是一个非常强大的 C++ 库集合,涵盖了许多有用的功能和工具,特别是在标准 C++ 库尚未提供的领域。以下是一些常见的 Boost C++ 知识点: - boost::shared_ptr: 与 std::shared_ptr 类似,提供引用计数的智能指针,确保在没有更多引用时自动释放资源。 - boost::weak_ptr: 配合 shared_pt
BoostC++学习笔记 BoostC++库-书栈网:https://www.bookstack.cn/read/boost/ch0.md Boost C++ 是一些为 C++ 语言标准库提供扩展的 C++ 程序库的总称1。Boost C++ 库可以提高你作为一个 C++ 开发人员的生产力,因为它们包含了许多实用的功能,例如: - 智能指针,可以自动管理内存,避免内存泄漏和空悬指针。 - 字符
C++ 使用 Bass 音频库 Bass 是一个跨平台的音频库,支持音频播放、录制和流媒体功能,适用于 C++ 开发者。 1. 多格式支持:支持 MP3、WAV、OGG 等多种音频格式。 2. 高性能:提供低延迟的音频处理能力。 3. 插件扩展:支持通过插件扩展功能,如音效处理和 MIDI 播放。 1. 前往 Bass 官方网站 下载适合的版本。 2. 解压后,将 bass.h
GuiLite知识点 GuiLite 是一个轻量级的 C++ GUI 库,旨在为嵌入式设备和资源受限环境提供简单、快速的图形用户界面解决方案。以下是 GuiLite 的一些关键知识点: GuiLite 的设计目标是非常简洁,适用于内存和处理能力有限的嵌入式设备。它使用极少的资源,不依赖于操作系统,也不需要专门的图形驱动程序。 GuiLite 支持多种平台,包括 Linux、Windo
tstring tstring 是一种在 Windows 平台上常用的字符串类型定义,通常用于支持 Unicode 和 ANSI 编码的兼容性。 tstring 是基于宏定义的类型别名,通常定义如下: `cpp #ifdef UNICODE typedef std::wstring tstring; #else typedef std::string tstring; #endi
使用C++完成Base64编码 本文档介绍如何在C++中实现Base64编码功能。 Base64是一种基于64个可打印字符来表示二进制数据的编码方式,常用于在文本环境中传输二进制数据。 在C++代码中,需要以下头文件: `cpp #include ` Base64编码需要一个字符表: `cpp const std::string base64_chars =
使用C++调用C#开发的DLL 本文档介绍如何在C++项目中调用由C#开发的DLL文件。 1. 确保已安装以下工具: - Visual Studio(支持C++和C#开发) - .NET Framework(与C# DLL兼容的版本) 2. 已有一个由C#开发的DLL文件。 1. 在C#项目中,确保导出的类和方法使用public修饰符。 2. 使用[DllExport]或[
使用C++调用Python开发的DLL 本文档介绍如何在C++项目中调用由Python开发的DLL文件。 1. 确保已安装以下工具: - Visual Studio(支持C++开发) - Python(与DLL兼容的版本) 2. 已有一个由Python开发并通过工具生成的DLL文件。 1. 使用ctypes或cffi模块导出函数。 2. 如果需要生成DLL,可以使用pyinstal
C++ STL详解 STL 是 C++ 的标准模板库,它提供了一系列的数据结构和算法,可以帮助你编写高效和复用的 C++ 程序。STL 的主要组成部分有: - 容器,可以存储各种类型的数据,例如数组、链表、堆栈、队列、集合、映射等。 - 算法,可以对容器中的数据进行排序、查找、计数、比较、修改等操作。 - 迭代器,可以遍历容器中的数据,支持各种操作,例如过滤、转换、组合等。 - 函数对象,可以将函
C++ STL学习笔记 C++ STL(Standard Template Library,标准模板库)是 C++ 编程语言的核心之一,提供了丰富的容器、算法、迭代器和函数对象。STL 让 C++ 编程变得更加简洁和高效,极大地提升了程序员的开发效率。STL 采用了泛型编程的思想,通过模板支持多种数据类型,从而实现了高度的代码复用。 在这篇学习笔记中,我将带你深入探讨 STL 中的各种组件,了解如何
C++ gnu c扩展语法:http://gcc.gnu.org/onlinedocs/gcc-4.6.2/gcc/C-Extensions.html#C-Extensions Cpp常用方法 Cpp反射 Cpp新特性 C++参考-Github:https://github.com/balloonwj/CppGuide/blob/master
C++关键字 C++ 11 alignas alignof and and_eq asm auto bitand bitor bool break case catch char char8_t char16_t char32_t class
C++内存管理 - 程序,是经源码编译后的可执行文件,可执行文件可以多次被执行,比如我们可以多次打开 office。 - 而进程,是程序加载到内存后开始执行,至执行结束,这样一段时间概念,多次打开的wps,每打开一次都是一个进程,当我们每关闭一个 office,则表示该进程结束。 - 程序是静态概念,而进程动态/时间概念。 ###进程空间图示 有了进程和程序的概念以后,我们
C++变量与常量 - 变量作用域基本概念 + 变量作用域:变量的可用范围 + 按照作用域的不同,变量可以分为:局部变量和全局变量 - 局部变量 + 定义在函数内部的变量以及函数的形参, 我们称为局部变量 + 作用域:从定义的那一行开始, 直到遇到}结束或者遇到return为止 + 生命周期: 从程序运行到定义哪一行开始分配存储空间到程序离开该变量所在的作用域 + 存储位置: 局部变
一、C++语言基础 C++ 11 alignas alignof and and_eq asm auto bitand bitor bool break case catch char char8_t char16_t char32_t clas
C++指针 - 什么是地址 + 生活中的地址:  + 内存地址: ,这就是条件编译。 - 为什么要使用条件编译 + 1)按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。有利于程序的移植和调试。 + 2)条件编译当然也可以用条件语句来实现。 但是用条件语句将会对整个源程序进行编译,生成 的目标代码程序很
C++枚举 - 什么是枚举类型? + 在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型 显然是不妥当的。 + C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值, 被说明为该“枚举”类型的变量取值不能超过定义的范围。 + 该说明的是,枚举类型是一种基
C++标准 C++ 语言也经历了多个版本的标准化,每个版本都带来了不同的特性、改进和增强。以下是 C++ 主要的标准版本及其特点: 标准化背景: - C++98是C++的第一个国际标准,由ISO于1998年发布,基于1990年代初期的C++语言。 主要特性: - 面向对象的编程:C++98进一步完善了面向对象的特性,包括继承、封装、多态等。 - 模板编
C++模板语法 C++模板是 C++ 编程中的一种强大工具,它允许程序员编写通用的代码以处理不同类型的数据。通过使用模板,可以避免重复编写类似的代码,提升代码的可维护性、扩展性和重用性。模板是 C++ 中泛型编程的核心部分,能够在编译时提供类型安全的通用解决方案。本文将详细讲解 C++ 模板的基本概念、语法、应用以及一些进阶特性。 C++ 模板分为两类:函数模板 和 类模板。它们使得函数或类
C++结构体和共用体 - 结构体和数组一样属于构造类型 - 数组是用于保存一组相同类型数据的, 而结构体是用于保存一组不同类型数组的 - 例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。 - 显然这组数据不能用数组来存放, 为了解决这个问题,C语言中给出了另一种构造数据类型——“结构(structure)”或叫“结构体”。 ---
C++计算机运算过程分析 - 1.编写一个简单的加法运算 - 2.调试编写好的代码, 查看对应的汇编文件  ,产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 - 为了区分预处理指令和一般的C语句,所有预处理指令都以符号“#”开头,并且结尾不用分号 - 预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾。习惯上我们尽可能将预处理指令写
使用 VitePress 搭建文档站点 VitePress是Vue团队提供的一个基于Vue 3与Vite的开源框架,通过MarkDown文档和简单配置就能快速生成静态文档站点。与基于WebPack的VuePress相比,VitePress拥有更快的启动和打包速度 除了支持标准和扩展的md语法外,VitePress还支持在md文档内书写Vue语法,非常适合前端组件库文档或普通技术文档的搭建 如果不想了解完整
VitePress 扩展首页内容(旧) 许多的自定义主题中都有提取页面并以列表形式展示在首页的功能,例如配置解析-主题配置中介绍的vitepress-blog-zaun 在 VitePress 1.0 之前的实现思路大致是通过 NodeJS 在构建阶段读取项目中的 md 文件,获取关键信息后存储在 .vitepress/config 配置选项 themeConfig 中,再利用存储的信息自定义首页的样式 利用
VitePress 添加评论功能 博客想添加评论功能通常有两种方法: 1. 自建或第三方的评论服务 2. 基于 Github Issue 或 Discussion 等实现 使用第三方评论比较明显的缺陷是需要复杂的注册认证,而且用户评论时大概率也需要注册登录,并且可能会有广告 而基于 Github 功能实现的评论功能,可以直接借助于 Github 账号登录实现评论,而且评论直接放在仓库中个人觉得也
VitePress 进阶语法 VitePress 使用 markdown-it 作为 md 语法解析器,md 基础语法可以参考基本撰写和格式语法,此外 vitepress 还提供了更多个性化语法 md 文档中的标题会自动生成锚点链接,可以通过页面路径#锚点名称的形式跳转到文章的具体位置,还可以通过如下格式自定义锚点名称 `md ` 定义后便可以通过最新的锚点名称定位页面位置(此时
VitePress 配置解析 页面中可以通过FrontMatter覆盖配置项 运行完npx vitepress init后会在.vitepress文件夹下生成config.ts文件,vitepress 基础配置均在此文件中完成 可以结合官方文档-Reference以及框架提供的defineConfig API 查看 TS 类型了解配置项的作用以及格式 这里仅对本项目所用到的配置(也是
C语言知识点 1. 介绍:CNote 致力于打造最易懂的 C 语言入门教程,让天下没有难学的 C 语言 2. PDF版本 : CNote PDF 版本下载 提取码:dmqx 3. 视频教程 : CNote 配套视频保姆级视频教程共计 170 节,学不会,算我输。 4. 转载须知 :以下所有文章与视频教程皆为我的原创,转载请联系我们,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益,
cJSON使用笔记 cJSON 是一个轻量级的 C 语言 JSON 解析库,适用于需要处理 JSON 数据的嵌入式系统或者对内存和资源有限的环境。下面是一些常见的 cJSON 使用笔记,包括基本的功能、示例和常见问题的解决方法。 `c #include "cJSON.h" ` - 使用 cJSON_CreateObject 创建一个 JSON 对象。 `c cJ
XML解析库minixml的使用 minixml 是一个轻量级的 XML 解析库,适用于嵌入式系统和对内存有限制的场景。它的目标是提供简单、易用的接口来解析和生成 XML 文件。 以下是 minixml 的基本使用方法,包括如何解析 XML 文件、生成 XML 文件、遍历 XML 树等。 minixml 是一个开源项目,你可以通过源代码编译安装。一般来说,你可以将源代码直接包含到你的项目中,或者使用以下
C语言glib的使用 glib 是一个广泛使用的 C 语言库,提供了许多有用的功能,比如数据结构、算法、内存管理、字符串操作、文件 I/O 等。它是 GTK(用于图形用户界面开发的库)的基础,也被许多其他项目使用。glib 是跨平台的,适用于 Unix/Linux、Windows 等系统。 下面是 glib 的一些常见用法和基础示例。 在 Linux 系统上,你可以使用包管理器安装 glib
部分关键字描述 参考:https://blog.csdn.net/ipmux/article/details/17316671 - volatile用于防止编译器对某些特定变量进行错误优化,确保这些变量在不同的情况下始终保持一致性。 - typedef不仅能提高代码的可读性,还能方便跨平台移植,减少重复代码。 内联函数的作用是建议编译器将函数体直接插入到调用函数的地方
C语言之内存详解[内存篇] 原文链接:https://blog.csdn.net/ipmux/article/details/17549775 原文链接:https://blog.csdn.net/ipmux/article/details/17549157 由于C语言指针高度灵活和自由,导致内存操作中陷阱很多,比如之前的堆泄漏,栈溢出,野指针等,此外还有一种常见的“内存访问
C语言内存操作 C语言中的内存操作是非常重要的,因为它直接影响程序的效率和可靠性。在C语言中,内存操作主要包括动态内存分配、指针操作和内存管理。C语言提供了很多操作内存的函数和技术,以下是C语言内存操作的详细介绍: C语言提供了两类内存:静态内存和动态内存。静态内存在编译时就确定,动态内存则是在运行时申请的。 静态内存的分配在程序编译时完成。程序中的全局变量、局部静态变量以及常
C语言libjpeg库的使用 在 Linux 系统中,通常可以通过包管理器安装 libjpeg 库: `bash sudo apt-get install libjpeg-dev ` 在 macOS 上,可以使用 Homebrew 安装: `bash brew install libjpeg ` Windows 上可以从官方网站下载并安装 libjpeg,或者使用包管理工具如 v
C语言libpng库的使用 libpng 是一个用 C 语言编写的库,用于处理 PNG 格式的图片。它可以帮助你读写 PNG 文件、进行图片的压缩与解压缩操作,并处理图片的颜色、透明度等信息。 在 Linux 系统中,通常可以通过包管理器安装: `bash sudo apt-get install libpng-dev ` 在 macOS 上,可以使用 Homebrew 安装: `
C语言基本概念 - 计算机只能识别0和1, 所以计算机中存储的数据都是以0和1的形式存储的 - 数据在计算机内部是以补码的形式储存的, 所有数据的运算都是以补码进行的 - 正数的原码、反码和补码 - 正数的原码、反码和补码都是它的二进制 - 例如: 12的原码、反码和补码分别为 - 0000 0000 0000 0000 0000 0000 0
C语言字符串操作 C语言中的字符串操作是非常基础但又非常重要的,因为字符串在很多程序中都起着至关重要的作用。C语言的字符串与其他语言不同,它没有专门的字符串类型,而是通过字符数组(char 数组)来表示字符串。操作字符串时,通常会涉及到字符数组、指针、标准库函数等。以下是C语言字符串操作的详细介绍。 在C语言中,字符串是以 char 数组的形式存储的,且以 空字符(\0)作为结束标志。因此,C
C语言实现进制转换 * 进制转换是什么?进制转换的算法 * 使用C语言实现进制转换 - 10 进制转 2 进制 + 除2取余, 余数倒序; 得到的序列就是二进制表示形式 + 例如: 将十进制(97) 10转换为二进制数  - Vim(初学者入门门槛高) - VSCode(不喜欢) - eclipse(不喜欢) - CLion(深爱, 但收费) - Xcode(逼格高, 但得有苹果电脑) - Qt Creator(开源免费,跨平台安装和运行) 注意:学习 C 语言,选择任意一款你喜欢的工具即可。 - Qt Creator 是一款新的轻量级集
C语言指针操作 C语言中的指针是非常强大的特性,它允许程序直接操作内存,提供了高效和灵活的方式来处理数据。指针的概念在C语言中非常重要,掌握指针的使用可以帮助你深入理解C语言的内存管理、数据结构和系统编程。 指针是一个变量,它存储另一个变量的内存地址。简单来说,指针指向某个变量的内存位置,通过指针可以间接访问该变量的值。 指针变量是一个存储内存地址的变量。指针的类型决定了它可以
C语言轻量级的关系型数据库sqlite库的使用 SQLite 是一个轻量级、服务器无关的关系型数据库库,广泛应用于嵌入式系统、移动设备、桌面应用程序等场景。它的特点是简单易用、体积小、支持 SQL 标准,且不需要安装和配置数据库服务。下面是如何在 C 语言中使用 SQLite 库的基本教程。 在大多数 Linux 发行版中,你可以通过包管理器安装 SQLite: `bash sudo apt-get install
C语言操作MySQL数据库 在 C 语言中操作 MySQL 数据库,通常会使用 MySQL 官方提供的 MySQL Connector/C,这是一个 C 语言库,可以方便地与 MySQL 数据库进行交互。 在 Linux 系统中,通常可以通过包管理器安装: `bash sudo apt-get install libmysqlclient-dev ` 在 macOS 上,使用 Homeb
C语言文件操作 C语言的文件操作是通过标准库提供的函数来进行的,主要是使用 stdio.h 头文件中的函数进行文件的打开、读取、写入和关闭。C语言对文件的操作分为两类:文本文件和二进制文件。 在 C 语言中,文件操作的基本步骤通常包括以下几个步骤: 1. 打开文件:使用 fopen() 函数打开文件,并返回一个文件指针。 2. 读取/写入文件:使用不同的函数读取或写入文件内容。 3
C语言文件I/O详解 文件I/O是C语言中常用的操作之一,它是对磁盘中存储数据的读取与写入。文件I/O的操作由C语言的标准库提供,具体通过 fopen、fread、fwrite 和 fclose 等函数实现。本文将详细介绍C语言文件I/O相关的常见问题,并对常见的易混淆点进行澄清。 在Unix/Linux系统下,文件I/O有两套接口:fopen/fread/fwrite系列和 open/read/
C语言日志记录库log4c的使用 log4c 是一个用于 C 语言的日志记录库,基于 log4j(一个 Java 日志记录框架)。它提供了灵活的日志记录功能,可以将日志输出到不同的目标,如控制台、文件、网络等。下面是如何安装和使用 log4c 库的详细说明。 首先,您需要下载和安装 log4c 库。可以通过源代码安装,也可以使用包管理工具(如 apt 在 Ubuntu 上)进行安装。 1. 下载
C语言杂项-实现面向对象风格编程 在C语言中实现面向对象编程的一种常见方法是通过结构体和函数指针来模拟类和对象。下面是一个简单的示例,演示如何使用C语言实现一个简单的面向对象程序。 首先,定义一个结构体,表示一个对象,结构体中包含对象的属性和方法。如下所示: `c struct { int x; int y; void (move)(void this, int dx, int
C潜规则篇之如何实现平台无关 参考链接:https://blog.csdn.net/ipmux/article/details/17302979 或许大家都有这样类似经历:要在某平台上开发一个模块,很幸运找到了功能类似的参考代码,拿来修改却发现它是基于其它平台,底层接口完全不同,且全都嵌在代码里,要一个个改。面对一堆编译错误,用着麻烦,丢了可惜,真成了“鸡肋”。 C代码复用不象JAVA那么简单,一
C语言标准 C语言有多个标准版本,每个版本都在不同程度上改进了语言的特性、标准库和编译器行为。以下是主要的C语言标准版本及其特点: 标准化背景: - 1989年,C语言通过了美国国家标准学会(ANSI)的标准化,成为标准化的C语言。它也被称为C89。 - C89标准为C语言定义了规范,包括语法、类型、结构体、函数调用、头文件等方面。 主要特性: - 定义了标准库,包括
C语言前言篇 双鱼林程序设计网:http://www.shuangyulin.com/ - 方式1: - 点击小榔头将"源代码"编译成"可执行文件" - 找到编译后的源代码, 打开终端(CMD)运行可执行文件 - 方式2 - 直接点击Qt开发工具运行按钮 --- - C语言中,每条完整的语句后面都必须以分号结尾 `c
C语言网络编程 C语言网络编程涉及的内容包括使用 C 语言来实现网络通信功能。常见的网络编程功能包括客户端和服务器之间的数据传输、协议的实现、以及如何处理网络连接等。下面我将简要介绍一下 C 语言网络编程的基础,并给出相关代码示例。 网络编程的核心是套接字(Socket)。套接字是一种通信机制,用于在不同的计算机或进程之间进行数据交换。通常网络编程分为两部分:客户端和服务器。客户端负责发送请
C语言网络请求库libcurl的使用 libcurl 是一个强大的 C 库,广泛用于发送网络请求,支持多种协议,包括 HTTP、HTTPS、FTP、SFTP 等。它可以用于发送 GET、POST、PUT 等请求,处理返回的数据,并支持文件上传、下载、会话保持等功能。libcurl 的 API 非常灵活,适用于各种网络编程需求。 下面是 libcurl 的基本使用方法,涵盖了常见的请求类型、错误处理、以及一些进阶功能。
C语言输入输出 * printf * scanf * putchar和getchar - printf函数称之为格式输出函数,方法名称的最后一个字母f表示format。其功能是按照用户指定的格式,把指定的数据输出到屏幕上 - printf函数的调用格式为: + `printf("格式控制字符串",输出项列表 );` + 例如:`printf("a = %d, b =
VitePress 扩展首页内容 在 VitePress 1.0 之后,官方提供了 createContentLoader API,可以更方便的收集文档信息 createContentLoader API 是 VitePress 提供的辅助方法,接受相对于 srcDir 的 glob 匹配表达式,以及选项参数。执行后会返回一个 { watch, load } 的加载器对象,VitePress 要求默认
VitePress 自动生成目录插件 VitePress 是继 VuePress 后全新的静态站点生成器,基于 Vite 实现最大的特点就是快,官网对其的介绍是 Simple, powerful, and fast,非常适合搭建博客和组件库文档等。 最近 VitePress 更新到了 v1.0.0-rc 版本,基本处于可以放心使用的状态。如果还不熟悉,可以查看官方中文文档或我的个人文档。 使用 Vi
devops常见面试题总结1 抱歉,明白了!以下是保留了文章中链接以及回答细节的整理版本: ------ - 回答者: shfshanyue TODO - 回答者: DoubleRayWang 使用 Jenkins + Docker 进行自动化部署。 - 回答者: Carrie999 需要 1 小时,且需要人工干预。 - 回答者: shfs
docker常见面试题总结 --- title: "【Q008】当新入职一家公司时,如何快速搭建开发环境并让应用跑起来 | devops,react,vue,前端工程化高频面试题" description: "如何启动一个项目,取决于公司的基础设施水平,一般来说,照着 Dockerfile 跑就完事了,哪还有以下事项需要注意 字节跳动面试题、阿里腾讯面试题、美团小米面试题。" --- 欢
Git 当Git执行到子文件夹的时候 ` git config core.excludesfile .\docker\.gitignore ` 教程和工具 * Git可视化工具 - 推荐:https://blog.csdn.net/qq_36075612/article/details/137636841 * 【Git】本地仓库强制覆盖远程仓库:https://blog
Docker Compose Docker Compose 是 Docker 官方提供的容器编排工具,用于定义和管理多个 Docker 容器的应用。它允许你通过一个 docker-compose.yml 文件来定义多个服务、网络、存储卷等,然后使用一条命令 (docker-compose up) 统一管理这些容器。 🚀 Docker Compose 适用于本地开发、测试、多服务部署,解决了多容器管理、环境一致性
Docker Docker官网:https://www.docker.com/ Docker教程:https://www.runoob.com/docker/docker-tutorial.html Docker制作镜像:https://blog.csdn.net/qq_42211536/article/details/141324789?spm=1001.2100.3001.7377&ut
docker技术(六)--Dockerfile Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 FROM和RUN命令 在一个空目录下,新建一个名为 Dockerfile 文件,并在文件内添加以下内容: ` FROM nginx RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.h
Docker大数据环境搭建 * docker安装flink * docker安装flume * docker安装hadoop * docker安装hbase * docker安装hive * docker安装MaxWell * docker安装mycat * docker安装pig * docker安装spark * docker安装zookeeper
Docker常用软件和服务安装 * 操作系统层面:CentOS、Ubuntu、Windows、MacOS * 常用中间件:ElasticSearch、MySQL、Redis * 服务器:Nginx、Tomcat、 * 数据库:MySQL、 * 对象存储:Minio * `shell docker pull elasticsearch:7.9.2 mkdir -
Docker环境安装与配置 !img * 在Linux、Winodws、MacOS上安装Docker * 配置阿里云镜像加速 参考:https://blog.csdn.net/weixin_48953586/article/details/145597723 * Ubuntu / Debian * CentOS / Fedora `bash sudo apt up
Kubernetes K8s官网:https://kubernetes.io/ Kubernetes(通常缩写为k8s)是一个开源的容器编排引擎,用于自动化部署、扩展和管理容器化应用程序。它最初由Google设计,并于2014年发布为开源项目,目前由Cloud Native Computing Foundation(CNCF)维护。 Kubernetes的主要特性包括: 1. 自动化部署和扩展
.gitignore模板 以下是常见的 .gitignore 模板,根据不同项目类型和使用的技术选择适合的模板即可。 ------ ` .DS_Store Thumbs.db *.log npm-debug.log* yarn-debug.log* yarn-error.log* *.class *.pyc *.pyo *.exe *.dll *.so
GitLab GitLab 是一个基于 Git 的 DevOps 平台,提供 代码仓库管理、CI/CD 持续集成、自动化部署、权限控制、代码审查、Issue 追踪 等功能,适用于企业级开发。 ------ 👉 GitLab 官方网站 直接注册账号使用。 GitLab 可部署在自己的服务器上: `sh sudo apt update && sud
Gitee GitCode Gitee(码云)是国内知名的 Git 代码托管平台,类似于 GitHub 和 GitLab,提供Git 版本控制、团队协作、私有仓库、代码审查、CI/CD(Gitee Actions)、Wiki、Issue 管理等功能。 ------ - 访问 Gitee 官网 - 支持 邮箱注册、GitHub/微信/QQ 登录
Github Actions、Issues、Projects、Wiki Github-Huaqiwill:https://github.com/huaqiwill GitHub 是全球最流行的基于 Git 的代码托管平台,提供版本控制、协作开发、CI/CD、代码审查、Issue 追踪、Wiki 文档等功能,并支持开源和私有项目。 ------ 👉 Git
SourceForge SourceForge 是一个面向开源软件开发的 代码托管平台,提供类似于 GitHub 和 GitLab 的功能。它为开发者提供了版本控制、项目管理、Bug 跟踪、文件管理、讨论区等功能,特别适合 开源项目。 ------ - 访问 SourceForge 官网 - 支持 邮箱注册 或使用 GitHub 等社交账号登录。 1. 登录后,
如何成为一名开源作者要成为一名开源作者,可以从以下几个方面努力: 一、技术准备 1. 提升编程技能 - 精通一种或多种编程语言:选择一种主流的编程语言,如 Python、Java、C++ 等,深入学习其语法、特性和最佳实践。通过在线课程、书籍、实践项目等方式不断提升编程能力。 - 掌握软件开发工具和技术:熟悉版本控制工具(如 Git)、代码编辑器(如 Visual Stud
开源许可证 开源许可证是为开源软件定义使用规则的法律工具,不同的许可证提供了不同程度的自由和限制。以下是一些常见的开源许可证及其特点: ------ - 特点: - 强制性“开源”条款(Copyleft),修改和分发时必须采用相同的许可证。 - 强调自由软件,用户可以自由使用、修改和分发软件。 - GPLv3 在 GPLv2 的基础上增强了对专利、Tivo化等问题
Hugo huaqiwill-blog:https://huaqiwill.github.io/huaqiwill-blog/ HugoMods官网:https://hugomods.com/ Hugo官网:https://gohugo.io/ Hugo中文文档:https://www.gohugo.org/ Hugo主题:https://themes.gohugo.io/
PHP从0搭建个人博客系统 在阅读本项目制作系列时,读者需要有PHP基础知识和MySQL数据库基础知识,以及对Laravel框架有所了解即可,接下来我将带大家一起完成这个项目,项目的每一个步骤我将会详细记录,并且源码我会开源到Github上。 ...
使用 GitHub 托管 Hugo 资源 Hugo 是一个快速、灵活的静态站点生成器,结合 GitHub,可以轻松实现站点的托管和自动化部署。本文将介绍如何使用 GitHub 托管 Hugo 生成的静态资源。 1. 已安装 Hugo(安装指南)。 2. 已安装 Git 并配置好 GitHub 账户。 3. 已创建一个 Hugo 项目。 1. 登录 GitHub。 2. 创建一个新的仓库,用
教程生产规范 教程按照内容形式分为这两种: 1. 文本教程(图文) 2. 视频教程 教程按照 1. 问题解答 2. 问题解释 一周至少创建内容4篇 一篇文字不得少于600字 博客模板、教程录制、教程模板
VitePress * VuePress中文网:https://www.vuepress.cn/ * https://juejin.cn/post/7107114276967415844 * https://www.vuepress.cn/ * VitePress中文网:https://vitejs.cn/vitepress/ * https://vitepress.dev/zh/ * 参考 - 鱼
uniapp 中实现全局自定义浮层 业务场景中有许多的全局浮层需求,例如WEB端常见的登录框浮层,带有抢单功能的APP、小程序等 在WEB端可以通过将浮层组件定义在顶层父组件中的方式实现,但uniapp的App.vue中不能写视图元素,也无法使用vue-router的嵌套路由功能,无法以常规方式实现 最简单能想到的方式是在每一个要用到的页面引入组件,并处理相关逻辑 导入可以用easycom规
JS 模块化原理 JavaScript 在设计之初并没有想到会用于实现复杂的功能,所以没有提供模块化功能。但在逐步的发展中,没有模块化暴露出了很严重的问题: 1. 命名冲突 HTML中通过script标签加载每个脚本,并按顺序执行。所以需要十分小心脚本中的变量名是否与其他脚本冲突 1. 不利于代码拆分 当代码量增加时,拆分文件很有必要。但script标签加载的方式要求每个脚本的书写顺
Axios 源码解析 阅读源码前先熟悉库实际的使用方式以及各种 API 有助于找到阅读的切入点,官方中文文档 axios 库基于核心类Axios,在库中默认导出了一个名为axios的实例对象,并传入了基础配置defaults 使用中所有的操作通常基于默认导出的实例对象axios实现。当然也可以自己导入Axios类,手动定义全部配置后新建实例使用 基础 API 有: 1. ins
Git 详解 Git 是分布式代码托管的标杆,这里将提供如何学习 Git,以及 Git 工作流的总结,和常用的操作命令 如果要问一本就可以学习 Git 的书或者文章,毫无疑问我会推荐 Git Pro2,绝对是良心之作啊 - Git Pro 2 - Git Pro2 中文 Gitbook - 其它资料 - 99%的时间在使用的 Git 命令 - GI
Windows 实用工具 毫秒级搜索电脑全局文件,还支持搜索文件内容,点击前往官网 在 Microsoft Store 中下载,可以通过鼠标或快捷键调节多个屏幕的亮度 同国外比较出名的 Notion,免费功能够用,点击前往官网 或直接通过我的邀请链接注册 类似的工具很多,例如飞书、语雀等,各有优劣,可以自行比较 插件工具集合,插件市场中有许多实用工具,免
VSCode 插件推荐 名称: Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code ID: MS-CEINTL.vscode-language-pack-zh-hans 名称: Code Spell Checker ID: streetsidesoftware.code-spell-checker
VSCode 设置 VSCode 是目前前端最常用的编辑器,优点无需多说。这里记录下我使用过程中让 VSCode 变得更好用的一些理解 VSCode 中的设置分为三级,打开项目后会读取每一级别的设置,小区域级别的设置会覆盖大区域级别的设置 项目 > 工作区 > 用户 也就是项目中.vscode文件夹下的配置文件,需要手动添加,常用的包括: `Markdown - .
Windows + WSL 搭建开发环境 常听说 Mac 更适用于开发,主要是因为 Mac 既拥有 Windows 系统一样丰富的生产力软件,又拥有 Unix 系统一样好用的命令行等工具 但其实 Windows 也能拥有这两种能力,只需要借助 WSL WSL 即 Windows Subsystem for Linux,是 Windows 官方提供的一项功能,用于在 Windows 系统上运行 Linux 环境。目前仅
monorepo 项目搭建 monorepo 多包项目指的是将多个项目存放在一个仓库中进行管理,并通过工具支持互相依赖。 相对于普通的一个项目一个仓库(multirepo),monorepo 最大的好处是项目间引用更便捷,关联包更新后无需经过打包、发布、安装等步骤就能够直接使用。 monorepo 有多种搭建方式,目前较为主流(Vue3 采用)的是使用 pnpm。本文不是完整的教程文,而是在 sp
无感刷新 Token JWT 已经在 HTTP 鉴权中被广泛使用,但普通方案中 Token 到期后用户就需要重新登录,为了安全性也不能将 Token 有效期设置的过长。 为了解决这个问题,可以使用的方案包括: 1. 后端额外返回 Token 过期时间,前端开启定时任务或在请求前判断是否临期,并重新获取 Token。 2. 后端返回 AccessToken + RefreshToken,前端使用 A
浏览器从输入网址到页面显示的过程 1. 浏览器主进程解析地址栏中的内容,如果是地址正确拼接协议;如果是搜索内容,拼接搜索地址。 2. 将请求地址交给浏览器网络进程,构建请求行 3. 查找是否存在缓存,有则直接返回缓存 4. 通过 DNS 域名解析得到 IP 地址 查找顺序为: 1. 查找浏览器缓存,有缓存则返回 IP 2. 查找本机缓存,有缓存则返回 IP 3. 查找本机配置
JS 执行流程 1. 渲染引擎在解析 HTML 过程中遇到 script 标签时,会暂停解析并开始请求脚本(需要 script 标签没有 defer 或 async 属性),脚本内容响应后作为一个宏任务放入消息队列(Message Queue)中 2. 事件循环(Event Loop)机制从消息队列取出脚本任务后,引擎对代码进行词法分析,将代码拆分为一个个词法单元(Token) 3. 引擎对代码进行语
vue 中的 v-if 和 v-for vue 中有一个经典的面试题:v-if 和 v-for 能够一起使用吗? 简单的回答是: - vue2 中不可以 - vue3 中可以 再深入回答一点可能会提到两个命令优先级的问题,但不知道为什么是这样的。这篇文章从原理来理解这个问题。 我们分别使用官方提供的 Vue Template Explorer 和 Vue SFC Playground 来查看 v
vue 中的 watch 和 watchEffect vue 提供了 watch 方法,可以监听值的变更,在变更时触发回调。vue3 中又新增了 watchEffect 方法,可以不指定监听的值,而是在回调中直接使用,方法会自动收集使用到的依赖,并在依赖更改时重新执行。 watch 和 watchEffect 源码都定义在 runtime-core/src/apiWatch.ts 中。 学习 watch 前需要先了解 Vu
数据调整顺序方案 在业务场景中,经常会有数据需要调整顺序的需求,例如菜单上、下移动,表格数据拖动排序等等。 这个需求前后端实现起来都有一定的难度,本文是在开发全栈应用时,对后端调整顺序处理的思考和记录。 在下文中,以 D(data)指代全部数据排序字段值组成的数组,以 C(current index)指代需要移动的数据的当前下标,以 N(new index)指代需要移动的数据的目标下标
对 dts 文件以及类型解析的理解 在 ts 项目的根目录下都有一个 tsconfig.json 文件,按照官方的说法当目录中出现了 tsconfig.json 文件,则说明该目录是 TypeScript 项目的根目录。tsconfig.json 文件指定了编译项目所需的根目录下的文件以及编译选项。 tsconfig.json 配置主要分为几类: `json // tsconfig.json {
认识 package.json package.json存在于每个基于node的前端工程化项目中,所以正确的认识该文件中的字段,对理清项目流程、提升工程化能力格外重要 中文文档中翻译的介绍,理解起来仍有难度。简单来说package.json就是一个包(package)描述文件,在node对包内文件进行处理(比如模块类型识别等)时,会按照最近的平级或上级package.json中描述的规则处理,另外p
Vue 静态资源处理 vue 项目中使用动态的图片链接是较为常见的需求场景,大部分人应该都遇见过动态链接无效的情况。这篇文章就详细介绍 Vite 中静态资源处理方式以及各种引入方法 基于 webpack 打包的项目中静态资源处理方式与 vite 有部分差别,详情请对照vite 文档-静态资源处理与vue-cli 文档-HTML 和静态资源 因为项目打包后非 public 文件夹中的
实用浏览器工具 需要梯子或者参考离线安装方式 - Ajax Interceptor 拦截网络请求并自定义返回值,可以在开发中快速模拟部分情况 - FeHelper(前端助手) JSON 自动格式化、排序解码等多种实用功能 - Global Speed:视频速度控制 网页中通用的自由设置音视频播放速度 - Octotree - GitHub c
Vue3 Provide/Inject 使用指南 Provide 与 Inject API 提供了跨层级传递数据的功能,便于更灵活的组织代码。但这种灵活性也容易伴随着容错性降低,比如: - 注入名称容易拼错,或取名困难 - 需要在代码见反复横跳查看注入的内容 - 有可能意外的注入了同名的内容,导致数据相互覆盖 - 获取的注入未必存在,需要做空值或默认值处理 最简单的注入使用方式为: `ts [fat
Emmet语法介绍 快速生成HTML结构与CSS代码块的开发工具 点击查看官方文档或语法速查表 语法中html标签、css属性支持缩写,可以在官方仓库中查看。也可以在项目根目录中创建snippets.json文件,添加或覆盖代码片段 - 语法支持嵌套 - 语法不包含空格,会停止解析 - HTML标签名无需是标准标签 - a、img等标签生成后会有默认属性,可以手动添加覆盖默认属
搭建uniapp通用业务框架 仓库地址:https://github.com/Xaviw/uniapp-template 当前1.0版本仅是根据自身业务需求搭建的一套跨端应用开发框架,本人经验有限,功能与开发体验并没有特别完善,例如没有权限控制功能,没有做全端的兼容性处理等... 开发这个仓库的初衷是让自身业务开发中框架更为易用,以及提升自己逻辑抽离、封装能力。如果业务需求不复杂,可以尝试直接使用本框架。或
封装APP跳转微信小程序支付方法 相比于安卓应用开通第三方支付或苹果应用开通内购支付,会有较复杂的资质要求以及部分手续费。跳转微信小程序页面进行支付是一种更加容易的支付方案 本文介绍个人在使用uniapp中封装APP跳转小程序支付的思路,而不会介绍微信小程序中支付相关使用方法 跳转微信小程序支付,重点在于跳转后检查支付状态。可以在点击支付后全局存储支付ID,因为支付后返回APP会触发onShow,所以在
uniapp对比原生小程序 uniapp和原生小程序都有不少的槽点,但相对来说更推荐uniapp uniapp官方文档-选型指南提供了详细的多方对比评测,需要深入了解可以阅读参考 APP端的跨端框架发展迅猛,本文仅针对小程序端进行对比 我个人的看法是:涉及跨端那就是无底的大坑,但uniapp是权衡下还不错的选择 uniapp编写小程序最终是将代码转换为原生小程序 uniapp本
解决uniapp首页闪烁问题 大部分需要登录的程序在进入时都会先判断用户是否登录,再决定跳转登录页还是首页。uniapp将pages.json中第一项作为项目首页,这也导致了如果登录页作为第一页,用户已登录时就会先显示登录页然后很快跳转到首页,出现页面“闪烁”现象 在APP端提供了启动界面配置,可以将Splash图设置为手动关闭,完成鉴权判断并跳转到正确页面后再关闭Splash图 打开man
HBuilderX设置 HBuilderX在代码格式化方面与VSCode相差甚远,但没办法还得继续用。所以配置了一套自用基本顺手的配置,保存在仓库HBuilderX-Settings中 - eslint-js - eslint-plugin-vue - prettier - 代码拼写检查器 HBuilderX仅支持根据eslint插件配置的规则进行自动格式化,无法读取项目中的eslint