树与二叉树算法实战
引言树是非线性数据结构中最重要的一种,二叉树更是面试高频考点。本文系统讲解树的核心概念和经典算法,帮助你全面掌握树数据结构。 一、树的基本概念1.1 树的定义12345678910// 二叉树节点public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int val) { this.val = val; }} 1.2 树的术语 根节点:树的顶部节点 叶子节点:没有子节点的节点 高度:节点到叶子节点的最长路径 深度:节点到根节点的路径长度 层:根节点为第1层 二、二叉树遍历2.1 前序遍历(根-左-右)1234567891011121314151617181920212223242526// 递归public void preorder(TreeNode root) { if (root == null) return; System.out.print(root.val + ...
Dockerfile最佳实践
引言编写高质量的Dockerfile是容器化的关键。本文介绍Dockerfile的最佳实践。 一、基础优化1.1 选择合适的基础镜像12345678# ✗ 不好:使用完整镜像FROM ubuntu:latest# ✓ 好:使用精简镜像FROM alpine:3.18# ✓ 更好:使用专用镜像FROM node:18-alpine 1.2 合并RUN指令12345678910# ✗ 不好:多个RUN层RUN apt-get updateRUN apt-get install -y curlRUN apt-get clean# ✓ 好:合并为一个RUNRUN apt-get update && \ apt-get install -y curl && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* 1.3 使用.dockerignore1234567node_modulesnpm-debug.log.git.gitignore.env*.md.DS_Store 二...
MySQL事务与锁机制
引言事务和锁是数据库并发控制的核心。本文系统讲解MySQL的事务和锁机制。 一、事务基础1.1 ACID特性1234567891011-- Atomicity (原子性):全部成功或全部失败START TRANSACTION;UPDATE accounts SET balance = balance - 100 WHERE id = 1;UPDATE accounts SET balance = balance + 100 WHERE id = 2;COMMIT;-- Consistency (一致性):数据完整性约束-- Isolation (隔离性):事务间互不影响-- Durability (持久性):提交后永久保存 1.2 事务操作1234567891011121314-- 开始事务START TRANSACTION;-- 或BEGIN;-- 提交事务COMMIT;-- 回滚事务ROLLBACK;-- 保存点SAVEPOINT sp1;ROLLBACK TO sp1; 二、隔离级别2.1 四种隔离级别123456789101112131415161718-- 1. R...
Elasticsearch核心概念详解
引言Elasticsearch是流行的分布式搜索引擎。本文讲解ES的核心概念和基本操作。 一、核心概念1.1 基本术语12345Index(索引) → Database(数据库)Type(类型) → Table(表,7.x后废弃)Document(文档) → Row(行)Field(字段) → Column(列)Mapping(映射) → Schema(模式) 1.2 倒排索引12345Term | Doc IDs--------|----------hello | 1, 3, 5world | 1, 2search | 2, 5 二、基本操作2.1 索引操作1234567891011121314# 创建索引PUT /products{ "settings": { "number_of_shards": 3, "number_of_replicas": 2 }}# 删除索引DELETE /products...
二分查找算法详解
引言二分查找是最基础也是最重要的算法之一,时间复杂度O(log n)。本文系统讲解二分查找的原理和应用。 一、基础二分查找1.1 基本模板1234567891011121314151617public int binarySearch(int[] nums, int target) { int left = 0, right = nums.length - 1; while (left <= right) { int mid = left + (right - left) / 2; if (nums[mid] == target) { return mid; } else if (nums[mid] < target) { left = mid + 1; } else { right = mid - 1; } ...
JVM内存模型与垃圾回收详解
引言JVM是Java程序运行的基础,理解JVM内存模型和垃圾回收机制对于编写高性能Java应用至关重要。本文将深入解析JVM的核心原理,帮助你掌握JVM调优的关键技术。 一、JVM内存结构1.1 运行时数据区12345678910111213141516171819┌─────────────────────────────────────┐│ 方法区 (Method Area) ││ (元空间 Metaspace in JDK8+) │├─────────────────────────────────────┤│ 堆 (Heap) ││ ┌──────────────────────────┐ ││ │ 新生代 (Young Gen) │ ││ │ ┌────┬──────┬──────┐ │ ││ │ │Eden│S0│S1 │ │ ││ │ └────┴──────┴──────┘ │ ...
MySQL索引原理与优化
引言索引是数据库性能优化的关键。本文深入讲解MySQL索引的原理和优化技巧。 一、索引基础1.1 什么是索引?索引是帮助MySQL高效获取数据的数据结构。 1234567891011-- 创建索引CREATE INDEX idx_name ON users(name);-- 创建唯一索引CREATE UNIQUE INDEX idx_email ON users(email);-- 创建复合索引CREATE INDEX idx_name_age ON users(name, age);-- 删除索引DROP INDEX idx_name ON users; 1.2 B+树结构MySQL的InnoDB引擎使用B+树作为索引结构: 12345特点:1. 所有数据存储在叶子节点2. 叶子节点之间用链表连接3. 非叶子节点只存储索引4. 高度通常为3-4层 二、索引类型2.1 主键索引(PRIMARY KEY)1234CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50)); 2....
链表数据结构详解与实现
引言链表是最基础也是最重要的数据结构之一,在算法面试中频繁出现。本文将系统讲解链表的原理、实现和经典算法题,帮助你全面掌握链表。 一、链表基础1.1 什么是链表?链表是一种线性数据结构,通过指针将一系列节点连接起来。 1234567891011121314// 单链表节点定义public class ListNode { int val; ListNode next; ListNode(int val) { this.val = val; }}// 创建链表: 1 -> 2 -> 3ListNode head = new ListNode(1);head.next = new ListNode(2);head.next.next = new ListNode(3); 1.2 数组 vs 链表 特性 数组 链表 内存分配 连续 不连续 随机访问 O(1) O(n) 插入/删除 O(n) O(1) 空间开销 无额外开销 指针开销 缓存友好 是 否 ...
Java并发编程面试题精选
引言并发编程是Java面试中的重点和难点,涉及线程、锁、内存模型等复杂概念。本文精选了最常见的并发编程面试题,并提供详细的解析和代码示例。 一、线程基础1.1 创建线程的几种方式方式1:继承Thread类 12345678910class MyThread extends Thread { @Override public void run() { System.out.println("Thread running: " + getName()); }}// 使用MyThread thread = new MyThread();thread.start(); 方式2:实现Runnable接口 12345678910class MyRunnable implements Runnable { @Override public void run() { System.out.println("Runnable running"...
Docker容器技术入门
引言Docker是最流行的容器技术。本文介绍Docker的基础概念和实战应用。 一、Docker基础1.1 核心概念 镜像(Image):只读模板 容器(Container):镜像的运行实例 仓库(Registry):存储镜像 1.2 Docker架构1234Docker Client → Docker Daemon → Containers → Images → Volumes → Networks 二、基本命令2.1 镜像操作123456789101112131415161718# 拉取镜像docker pull nginx:latest# 查看镜像docker images# 删除镜像docker rmi nginx:latest# 构建镜像docker build -t myapp:1.0 .# 推送镜像docker push myapp:1.0# 导出/导入镜像docker save nginx...





