Java25 新特性
Java 25 是继 Java 21 之后的又一个长期支持(LTS)版本,于 2025 年 9 月 16 日发布,包含 18 个 JEP。Java 21 引入的虚拟线程、记录模式等在 25 中继续打磨成熟,同时 25 带来了模块导入、紧凑源文件、作用域值正式化等一批新特性,并在 AOT 提前编译、对象头压缩、JFR 可观测性等方面有显著提升。以下是对 Java 25 相比 Java 21 的主要新特性的详细总结,重点突出其提升,并尽量简洁: 语言特性改进 紧凑源文件与实例 main 方法(Compact Source Files and Instance Main Methods,JEP 512,Java 25 正式化) 允许省略类声明、String[] args 参数和 public static 修饰符,直接写一个 main 方法即可运行,新手和脚本场景更友好;同时默认隐式导入 java.io.IO,可直接用 println、readln 等方法。 示例: // 整个文件就这一段,无需 class 包装 void main() { String...
Java Class
类(class)是 Java 面向对象编程的基本构建单元,它既是数据抽象的载体,也是行为封装的边界。理解 class 的核心内容,本质上是理解 Java 如何用类型系统组织数据与行为。本文从现代 Java(25 LTS)视角出发,梳理 class 设计的核心要素。 类的本质:状态与行为的封装 一个 class 由两部分构成:字段(状态)和方法(行为)。封装的目的是把可变状态收敛到最小范围,对外只暴露不可变视图。 public final class User { private final String name; // 不可变状态 private final String email; public User(String name, String email) { this.name = Objects.requireNonNull(name); this.email = Objects.requireNonNull(email); } public String n...
C++ 中的 const 家族
C++ 里有三个"编译期求值"相关的关键字:constexpr、consteval、constinit。名字里都带 const,但职责各不相同——一个承诺"编译期可算",一个强制"只能在编译期算",一个解决"静态变量别出初始化顺序问题"。这篇把三者一次性梳理清楚。 一张表先建立全局印象 关键字 作用于 求值时机 能否修改 constexpr 变量、函数 必须可在编译期求值 否 consteval 函数 仅编译期,禁止运行期调用 — constinit 静态/线程存储期变量 编译期初始化 是(运行期可改) 记住一句话:constexpr 管"编译期可算",consteval 管"只能在编译期算",constinit 管"静态变量别出初始化顺序坑"。 constexpr:编译期就能算出来 constexpr(constant expression)要求对象或函数必须能在编译期求值。相比只承诺"运行期不可改&q...
Intel TBB
TBB (Threading Building Blocks) 是 Intel 出品的 C++ 并行编程库,也贡献给了 oneAPI 项目(oneAPI TBB)。它提供了高层抽象的任务并行、并行算法、并发容器和同步原语,让开发者不用直接操作 pthread/win32 thread 就能写出跨平台的高效并行程序。 1. 安装与配置 获取方式 oneAPI TBB(推荐):https://github.com/oneapi-src/oneTBB 包管理器:Ubuntu 下 apt install libtbb-dev,macOS 下 brew install tbb CMake 集成 find_package(TBB REQUIRED) target_link_libraries(my_app PRIVATE TBB::tbb) 头文件引用 #include <tbb/tbb.h> // 全量包含(方便但不推荐) #include <tbb/parallel_for.h> // 按需包含(推荐) #include <tbb/blocked_...
vite_handbook
Vite 是当前前端工程里最值得掌握的构建工具之一。它的核心思路很直接:开发时利用浏览器原生 ESM 按需加载,借助高性能预构建和插件体系,把“启动慢、热更新慢、构建慢”这些老问题尽量压到最低。 如果你已经熟悉 Webpack,那么理解 Vite 的方式可以简单粗暴一点:它不是在开发阶段先把整个应用打成一个大包再提供给浏览器,而是让浏览器直接加载源码模块,只有确实需要的依赖和资源才会被处理。这样一来,项目越大,体验差异越明显。 Vite 到底解决了什么 传统打包器在开发模式下通常要做两件事:分析依赖图和重新生成 bundle。项目一旦变大,这个过程就会变慢,热更新也会被牵连。Vite 则把开发期和生产期分开处理:开发期更像一个高性能的本地服务器,生产期才交给 Rollup 做最终打包。 它的优势主要体现在几个方面。 启动快:不用先全量打包,直接启动开发服务器。 HMR 快:热更新只影响变化的模块,而不是整个应用。 配置相对简单:大多数常见场景开箱即用。 插件生态清晰:开发和构建阶段都能通过插件扩展。 对于 Vue、React、Svelte、Solid 这类现代框架,Vite ...
前端工程化工具链:ESLint、Prettier、Tailwind CSS
ESLint ESLint 是 JavaScript 和 TypeScript 的代码检查工具,用于发现和修复代码中的问题。 安装与配置 # 安装 ESLint npm install -D eslint # 初始化配置(交互式) npx eslint --init # 或手动安装推荐的配置 npm install -D eslint @eslint/js typescript-eslint ESLint v9+ 扁平配置 ESLint v9 使用新的扁平配置文件 eslint.config.js。 // eslint.config.js import js from '@eslint/js'; import tseslint from 'typescript-eslint'; import vue from 'eslint-plugin-vue'; import react from 'eslint-plugin-react'; import importPlugin from 'eslint-plugin-import'; import unusedImports fro...
前端调试技巧与工具大全
浏览器开发者工具 Chrome DevTools 核心功能 Console 面板 // 基础输出 console.log('普通日志'); console.info('信息日志'); console.warn('警告日志'); console.error('错误日志'); // 格式化输出 console.log('字符串: %s', 'hello'); console.log('数字: %d', 42); console.log('对象: %o', { name: '张三' }); console.log('CSS 样式: %c自定义样式', 'color: red; font-size: 20px;'); // 表格输出 const users = [ { id: 1, name: '张三', age: 25 }, { id: 2, name: '李四', age: 30 }, { id: 3, name: '王五', age: 28 }, ]; console.table(use...
JavaScript 核心要点详解
ES6+ 关键特性 解构赋值 解构赋值是一种从数组或对象中提取值并赋给变量的语法糖。 数组解构 // 基本数组解构 const [a, b, c] = [1, 2, 3]; console.log(a, b, c); // 1, 2, 3 // 跳过某些元素 const [first, , third] = [1, 2, 3]; console.log(first, third); // 1, 3 // 剩余元素 const [head, ...tail] = [1, 2, 3, 4, 5]; console.log(head); // 1 console.log(tail); // [2, 3, 4, 5] // 默认值 const [x = 10, y = 20] = [5]; console.log(x, y); // 5, 20 // 交换变量 let m = 1, n = 2; [m, n] = [n, m]; console.log(m, n); // 2, 1 // 嵌套解构 const nested = [1, [2, 3], 4]; const [a,...
TypeScript 完全指南
基础类型系统 TypeScript 是 JavaScript 的超集,提供了静态类型检查,帮助在编译时发现错误。 基本类型 类型 关键字 说明 示例 布尔值 boolean 真/假值 let isDone: boolean = false 数字 number 整数、浮点数、BigInt let decimal: number = 42 大整数 bigint 任意精度的整数 let bigNumber: bigint = 9007199254740991n 字符串 string 文本数据 let name: string = '张三' 数组 T[] 或 Array<T> 相同类型的元素集合 let numbers: number[] = [1, 2, 3] 元组 [T, U] 固定长度和类型的数组 let tuple: [string, number] = ['年龄', 25] 枚举 enum 一组命名的常量 enum Color { Red, Green, Blue } 任意类型 any 任意类型(尽量避免) let anyV...
包管理器完全指南:NPM、Yarn、PNPM、Bun
NPM (Node Package Manager) NPM 是 Node.js 默认的包管理器,也是世界上最大的软件注册表。 安装与初始化 # 检查版本 npm --version # 或 npm -v # 初始化项目(交互式) npm init # 快速初始化(使用默认值) npm init -y # 安装所有依赖 npm install # 或 npm i 包安装 # 安装到 dependencies(运行时依赖) npm install express npm install lodash axios moment npm i <package-name> # 安装到 devDependencies(开发依赖) npm install --save-dev typescript jest eslint npm install -D @types/node @types/express npm i -D vite # 全局安装(命令行工具) npm install -g nodemon typescript create-react-app npm i -g...



