c++的namespace
C++ 命名空间(Namespace)详解C++命名空间是语言的核心特性之一,用于解决名字冲突问题,尤其在大项目或使用多个库时。基于最新C++23标准,命名空间用法稳定,但结合模块(modules)使用更高效。下面直击要害,逐一拆解,包括inline namespace、匿名命名空间和命名空间别名。 1. 基本用法:声明与定义命名空间通过namespace关键字声明,内容可以分散在多个文件中定义(如同函数定义)。 namespace MyLib { int add(int a, int b) { return a + b; } class Widget { public: void use(); }; } 使用方式: 限定名:MyLib::add(1, 2); 最安全,避免污染全局。 using声明:using MyLib::add; 只引入add,作用域内可用add(1,2)。 using指令:using namespace MyLib; 引入整个空间(慎...
Java juc
JUC 是 java.util.concurrent 的缩写,它是 Java 标准库中一个至关重要的包,专门用于支持并发编程。从 Java 5 开始引入,JUC 极大地简化了多线程开发的复杂性,并提供了更强大、更灵活、更安全的并发工具。可以毫不夸张地说,掌握 JUC 是从“会用多线程”到“精通并发编程”的必经之路。 一、 为什么需要 JUC ?在 JUC 出现之前,我们主要依赖 synchronized、wait()、notify() 等关键字和方法来实现同步。但它们存在一些明显的缺点: 不够灵活:synchronized 是非公平锁,且无法中断一个正在等待获取锁的线程,也无法设置超时。 功能单一:它只是一个简单的互斥锁,无法实现更复杂的锁功能,如读写锁。 API 原始:wait()/notify() 的使用非常容易出错,比如忘记在 synchronized 块内调用,或者信号的丢失(notify 在 wait 之前执行)。 性能瓶颈:在 JDK 1.6 之前,synchronized 是重量级锁,性能较差。虽然之后有了锁升级等优化,但 JUC 中的 Lock 在某些...
Java gc
Java 8 (2014年) 是一个里程碑式的版本,其 GC 组合(Parallel GC + CMS/G1)在当时非常经典。但从 Java 9 开始,GC 领域进入了快速迭代和创新的时期,核心目标是:降低停顿时间、提高吞吐量、更好地适应现代大内存和多核硬件,并简化 GC 的使用和调优。 一、核心思想转变:从“选择”到“自适应”在 Java 8 之前,你需要根据应用场景(吞吐量优先还是低延迟优先)手动选择一个 GC,比如 -XX:+UseParallelGC 或 -XX:+UseConcMarkSweepGC 或 -XX:+UseG1GC。从 Java 9 开始,一个重要的趋势是 “自适应”。JVM 变得更”聪明”,它可以在运行时根据硬件配置和应用行为,动态地调整 GC 的行为,甚至在某些情况下,可以在不同的 GC 算法之间切换,以达到最佳性能。 二、G1G1((Garbage-First) Garbage Collector (G1GC) - 持续进化,成为默认G1 在 Java 7 引入,Java 9 中成为 默认的垃圾回收器。它是一个平衡型收集器,旨在兼顾吞吐量和...
c++ std::print
概述C++23 引入了 std::print 和 std::println,这是现代 C++ 对格式化输出的重大改进。相比传统的 printf,这些新函数提供了类型安全、性能优异且易于使用的格式化输出方案。 基本用法简单输出#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 模块系统(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 ...
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)获取最新...
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/...
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 Api
Java Stream API 是 Java 8 引入的一个功能强大的工具,用于处理集合数据(如 List、Set 等)或数组的声明式操作。它提供了一种函数式编程风格的方式,让开发者能够以简洁、可读性高且高效的方式处理数据。Stream API 的核心思想是将数据操作分为一系列中间操作和终端操作,通过链式调用实现复杂的处理逻辑,同时支持并行处理以提高性能。 1. Stream API 的核心概念Stream API 的设计灵感来源于函数式编程,强调数据的不可变性和声明式操作。以下是 Stream API 的核心概念: Stream(流): Stream 是一个抽象的数据处理管道,表示数据的序列,但并不存储数据本身。 Stream 可以看作是对数据源(如集合、数组)的“视图”,支持对其进行操作(如过滤、映射、排序等)。 Stream 不修改原始数据源,操作的结果通常是生成新的 Stream 或最终的结果。 数据源: Stream 的数据源可以是集合(Collection,如 List、Set)、数组、文件、I/O 通道或其他数据结构。 常见创建 Stream 的...
Java lambda
Java Lambda 表达式是 Java 8 引入的一项重要特性,用于简化函数式编程的实现。它允许开发者以更简洁的方式编写代码,特别是在处理集合操作、事件监听或函数式接口时。 1. 什么是 Lambda 表达式?Lambda 表达式是一种匿名函数,它提供了一种简洁的方式来表示函数式接口(Functional Interface)的实例。函数式接口是只包含一个抽象方法的接口,例如 Runnable、Comparator 或 Function。 Lambda 表达式的核心目的是: 简化代码:减少样板代码(如匿名内部类的冗长写法)。 支持函数式编程:使 Java 更适合处理函数式编程范式,例如流式操作(Stream API)。 2. Lambda 表达式的语法Lambda 表达式的基本语法如下: (参数列表) -> { 方法体 } 参数列表:可以为空,也可以包含多个参数。如果只有一个参数,可以省略括号。 箭头操作符(->):分隔参数列表和方法体。 方法体:包含执行逻辑,可以是单行表达式或多行语句块。如果是单行表达式,可以省略大括号和 return 语...


