C++ std::print
1. 概述 C++23 引入了 std::print 和 std::println,这是现代 C++ 对格式化输出的重大改进。相比传统的 printf,这些新函数提供了类型安全、性能优异且易于使用的格式化输出方案。 2. 基本用法 简单输出 #include <print> int main() { // 基本输出 std::print("Hello, World!\n"); // 带换行的输出 std::println("Hello, World!"); return 0; } 格式化输出 #include <print> #include <string> int main() { int age = 25; std::string name = "Alice"; // 格式化输出 std::print("Name: {}, Age: {}\n", name, age); ...
Java 模块系统
Java 模块系统(Java Platform Module System,简称 JPMS)是 Java 9(2017 年发布)引入的一项重大特性,也被称为 Project Jigsaw。该系统旨在解决 Java 早期版本中类路径(classpath)管理的痛点,如 JAR Hell(依赖冲突)、模块化不足和封装性弱等问题。通过模块化,Java 应用可以更好地组织代码、提高安全性、减少依赖并提升性能。下面我将详细解释 Java 模块的核心概念、语法、用法以及优势与注意事项。 1. 什么是 Java 模块? 基本定义: 模块(Module)是 Java 中一种新的代码组织单位,它是一组相关包(packages)的集合,加上一个模块描述文件(module-info.java)。模块可以明确定义其依赖的其他模块、导出的包(exposed packages),以及对反射的访问权限。 与包(Package)的区别: 包是命名空间,用于组织类;模块是包的更高层抽象,用于组织应用或库的整体结构。模块可以包含多个包,但一个包只能属于一个模块。 模块类型: 命名模块(Named Module)...
cpp asio
Asio 是一个跨平台的 C++ 库,用于网络和低级 I/O 编程,提供了一套异步操作的框架。Boost.Asio 是其最知名的版本,但独立(standalone)版本的 Asio 允许在不依赖 Boost 的情况下使用。 1. Asio 库概述 Standalone Asio 是一个轻量级的网络编程库,设计目标是提供高效、异步的 I/O 操作。它支持以下功能: 网络编程:TCP、UDP、ICMP 等协议的客户端和服务器开发。 异步 I/O:通过回调、协程(C++20 起支持)或 Future/Promise 模型处理异步操作。 跨平台:支持 Windows、Linux、macOS 等操作系统。 低级 I/O:文件操作、串口通信、定时器等。 与 Boost.Asio 相比,standalone Asio 不依赖 Boost 的其他组件(如 Boost.System),因此更轻量,适合需要减少依赖的场景。 2. 安装与配置 下载 Standalone Asio 可从 GitHub 或其官方网站(think-async.com)获取最新版本。下载后,解压到项目目录。 配置 头文...
Cpp Asio
Asio 是一个跨平台的 C++ 库,用于网络和低级 I/O 编程,提供了一套异步操作的框架。Boost.Asio 是其最知名的版本,但独立(standalone)版本的 Asio 允许在不依赖 Boost 的情况下使用。 1. Asio 库概述 Standalone Asio 是一个轻量级的网络编程库,设计目标是提供高效、异步的 I/O 操作。它支持以下功能: 网络编程:TCP、UDP、ICMP 等协议的客户端和服务器开发。 异步 I/O:通过回调、协程(C++20 起支持)或 Future/Promise 模型处理异步操作。 跨平台:支持 Windows、Linux、macOS 等操作系统。 低级 I/O:文件操作、串口通信、定时器等。 与 Boost.Asio 相比,standalone Asio 不依赖 Boost 的其他组件(如 Boost.System),因此更轻量,适合需要减少依赖的场景。 2. 安装与配置 下载 Standalone Asio 可从 GitHub 或其官方网站(think-async.com)获取最新版本。下载后,解压到项目目录。 配置 头文...
Python 推导表达式
推导表达式(Comprehensions)是 Python 最优雅的特性之一:用单行代码完成循环、过滤、转换三件事。它不是语法糖,而是一种声明式的思维方式——你告诉 Python 你要什么,而不是怎么做。 列表推导 语法:[expression for item in iterable if condition] # 传统方式:命令式,告诉 Python "怎么做" squares = [] for i in range(10): if i % 2 == 0: squares.append(i ** 2) # 推导式:声明式,告诉 Python "要什么" squares = [i ** 2 for i in range(10) if i % 2 == 0] # [0, 4, 16, 36, 64] 嵌套循环:后面的 for 相当于内层循环 # 笛卡尔积 pairs = [(x, y) for x in range(3) for y in range(2)] # [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1...
sort summary
好的,这里为您总结了 C++、Java、Python、Golang 和 Rust 这些主流语言的排序方法,特别是自定义排序的实现方式。 概述 语言 内置排序方法 主要特点 自定义排序核心 C++ std::sort 非常高效,通常是 IntroSort 函数对象 (Functor)、Lambda、普通函数 Java Arrays.sort(), Collections.sort() 对象使用 TimSort,基础类型使用快速排序 Comparator 接口(Lambda 或匿名类) Python sorted(), list.sort() 稳定,使用 TimSort key 函数 或 cmp 函数(老式,不推荐) Golang sort.Sort(), sort.Slice() 使用快速排序 实现 sort.Interface 或使用 sort.Slice 与 Less 函数 Rust slice.sort(), vec.sort() 稳定,使用归并排序(TimSort 变种) 闭包 (Closure) 传递给 sort_by 或实现 Ord/Par...
sort summary
好的,这里为您总结了 C++、Java、Python、Golang 和 Rust 这些主流语言的排序方法,特别是自定义排序的实现方式。 概述 语言 内置排序方法 主要特点 自定义排序核心 C++ std::sort 非常高效,通常是 IntroSort 函数对象 (Functor)、Lambda、普通函数 Java Arrays.sort(), Collections.sort() 对象使用 TimSort,基础类型使用快速排序 Comparator 接口(Lambda 或匿名类) Python sorted(), list.sort() 稳定,使用 TimSort key 函数 或 cmp 函数(老式,不推荐) Golang sort.Sort(), sort.Slice() 使用快速排序 实现 sort.Interface 或使用 sort.Slice 与 Less 函数 Rust slice.sort(), vec.sort() 稳定,使用归并排序(TimSort 变种) 闭包 (Closure) 传递给 sort_by 或实现 Ord/Par...
Java Concurrency
Java的线程是Java并发编程的核心,允许程序同时执行多个任务。 虚拟线程相关内容 1. 线程概述 线程(Thread)是操作系统能够进行运算调度的最小单位。在Java中,线程是JVM(Java虚拟机)管理的轻量级执行单元,多个线程共享同一进程的内存空间(如堆、方法区),但每个线程有自己的栈空间(如局部变量和方法调用栈)。 Java通过java.lang.Thread类和java.lang.Runnable接口提供线程支持。Java的线程模型基于操作系统的原生线程,依赖于底层操作系统的线程实现。 2 线程的创建 Java中创建线程主要有以下几种方式: 2.1 继承Thread类 通过继承Thread类并重写run()方法来定义线程的执行逻辑。 class MyThread extends Thread { @Override public void run() { System.out.println("Thread running: " + Thread.currentThread().getName()); ...
Java Stream
Java Stream 是 Java 8 引入的一个功能强大的工具,用于处理集合数据(如 List、Set 等)或数组的声明式操作。它提供了一种函数式编程风格的方式,让开发者能够以简洁、可读性高且高效的方式处理数据。Stream 的核心思想是将数据操作分为一系列中间操作和终端操作,通过链式调用实现复杂的处理逻辑,同时支持并行处理以提高性能。 1. Stream 的核心概念 Stream 的设计灵感来源于函数式编程,强调数据的不可变性和声明式操作。以下是 Stream 的核心概念: Stream(流): Stream 是一个抽象的数据处理管道,表示数据的序列,但并不存储数据本身。 Stream 可以看作是对数据源(如集合、数组)的“视图”,支持对其进行操作(如过滤、映射、排序等)。 Stream 不修改原始数据源,操作的结果通常是生成新的 Stream 或最终的结果。 数据源: Stream 的数据源可以是集合(Collection,如 List、Set)、数组、文件、I/O 通道或其他数据结构。 常见创建 Stream 的方式:List<String> li...
Java Lambda
Java Lambda 表达式是 Java 8 引入的一项重要特性,用于简化函数式编程的实现。它允许开发者以更简洁的方式编写代码,特别是在处理集合操作、事件监听或函数式接口时。 1. 什么是 Lambda 表达式? Lambda 表达式是一种匿名函数,它提供了一种简洁的方式来表示函数式接口(Functional Interface)的实例。函数式接口是只包含一个抽象方法的接口,例如 Runnable、Comparator 或 Function。 Lambda 表达式的核心目的: 简化代码:减少样板代码(如匿名内部类的冗长写法) 支持函数式编程:使 Java 更适合处理函数式编程范式,例如流式操作(Stream API) 2. Lambda 表达式的语法 基本语法: (参数列表) -> { 方法体 } 参数列表:可以为空,也可以包含多个参数。如果只有一个参数,可以省略括号 箭头操作符(->):分隔参数列表和方法体 方法体:包含执行逻辑,可以是单行表达式或多行语句块。如果是单行表达式,可以省略大括号和 return 语句 语法示例 无参数: ()...





