Posts

C# 快速入门指南

后端 教程

C# 快速入门指南

先了解 C# 语言

C#(读作 “C Sharp”)是由微软开发的一种现代、类型安全、面向对象的编程语言,最初发布于 2000 年,运行在 .NET 平台上。

它融合了 C++ 的强大性能与 Java 的简洁语法,并不断进化,支持:

  • 面向对象编程(OOP)
  • 异步编程(async/await)
  • 函数式特性(LINQ、Lambda)
  • 跨平台开发(.NET 5+ 支持 Windows、Linux、macOS)
  • Web(ASP.NET Core)、桌面(WPF、WinForms)、移动(MAUI)、游戏(Unity)等多领域开发

C# 语法清晰、工具强大(Visual Studio / VS Code)、生态丰富,是企业级开发和现代应用的首选语言之一。

无论你是想开发 Web API、后台服务,还是桌面程序,C# 都是一个高效且可靠的 choice。

一个完整的 C# 控制台应用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;

// 主程序入口(.NET 6+ 单文件模式)
await Main();

async Task Main()
{
    Console.WriteLine("=== 欢迎使用 C# 快速入门示例 ===\n");

    // 1. 基础变量与字符串插值
    string name = "Alice";
    int age = 25;
    bool isDeveloper = true;

    Console.WriteLine($"姓名: {name}, 年龄: {age}, 开发者: {isDeveloper}");

    // 2. 条件判断
    if (age >= 18)
        Console.WriteLine("✅ 成年人");
    else
        Console.WriteLine("⚠️ 未成年人");

    // 3. 循环遍历
    List<string> hobbies = new() { "编程", "阅读", "跑步" };
    Console.WriteLine("\n兴趣爱好:");
    for (int i = 0; i < hobbies.Count; i++)
    {
        Console.WriteLine($"  {i + 1}. {hobbies[i]}");
    }

    // 4. 使用 LINQ 查询(函数式风格)
    var longHobbies = hobbies.Where(h => h.Length > 2).ToList();
    Console.WriteLine("\n长度大于2的兴趣:");
    longHobbies.ForEach(h => Console.WriteLine($"  • {h}"));

    // 5. 定义并使用类(面向对象)
    var person = new Person("Bob", 30);
    person.Greet();

    // 6. 异步获取网络数据(模拟 API 调用)
    Console.WriteLine("\n正在获取数据...");
    string data = await FetchDataAsync();
    Console.WriteLine($"✅ 数据长度: {data.Length} 字符");

    // 7. 自定义工具类:简易配置管理
    var config = new ConfigHelper();
    config.Set("AppVersion", "1.0.0");
    config.Set("MaxRetries", "3");

    string version = config.Get("AppVersion", "unknown");
    int retries = config.Get("MaxRetries", 1);

    Console.WriteLine($"\n配置信息:");
    Console.WriteLine($"  版本: {version}");
    Console.WriteLine($"  最大重试次数: {retries}");

    Console.WriteLine("\n=== 程序执行完成 ===");
}

// 自定义类:表示一个人
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }

    public void Greet() => Console.WriteLine($"👋 大家好,我是 {Name},今年 {Age} 岁。");
}

// 自定义工具类:简易配置管理器
public class ConfigHelper
{
    private readonly Dictionary<string, string> _values = new();

    public void Set(string key, string value) => _values[key] = value;

    public string Get(string key, string defaultValue = "")
        => _values.GetValueOrDefault(key, defaultValue);

    public T Get<T>(string key, T defaultValue)
    {
        var value = _values.GetValueOrDefault(key, null);
        return value == null ? defaultValue : (T)Convert.ChangeType(value, typeof(T));
    }
}

// 异步方法:从 HTTP 接口获取数据
public static async Task<string> FetchDataAsync()
{
    using var client = new HttpClient();
    client.Timeout = TimeSpan.FromSeconds(10);
    return await client.GetStringAsync("https://httpbin.org/json");
}

Docker 快速入门指南

运维 DevOps 教程

Docker 快速入门指南

先了解 Docker

Docker 是一个开源的容器化平台,它允许你将应用程序及其依赖(如库、配置、环境变量)打包成一个轻量级、可移植的“容器”,并在任何支持 Docker 的环境中运行。

传统部署中,我们常遇到:“在我机器上能跑!”的问题。
而 Docker 通过隔离环境,彻底解决了“开发环境 vs 生产环境不一致”的痛点。

核心概念

  • 镜像(Image):一个只读模板,包含运行应用所需的一切(如 nginx:latest)。
  • 容器(Container):镜像的运行实例,可以启动、停止、删除(如一个正在运行的 Nginx 服务)。
  • Dockerfile:一个文本文件,定义如何构建镜像(类似“配方”)。
  • Docker Compose:用于定义和运行多容器应用(如 Web + DB + Cache)。
  • Registry:镜像仓库,如 Docker Hub,可上传/下载镜像。

为什么使用 Docker?

  • 环境一致性:一次构建,到处运行
  • 快速部署:秒级启动容器
  • 资源高效:比虚拟机更轻量,共享宿主机内核
  • 微服务友好:每个服务一个容器,独立部署
  • CI/CD 集成:与 Jenkins、GitHub Actions 等无缝协作

Docker 已成为现代云原生开发的基础设施标准

常用 Docker 命令合集(实战速查)

# 1. 镜像操作
docker images                    # 查看本地所有镜像
docker pull nginx:latest         # 从 Docker Hub 拉取镜像
docker build -t myapp:1.0 .      # 使用当前目录 Dockerfile 构建镜像
docker rmi myapp:1.0             # 删除指定镜像
docker rmi $(docker images -q)   # 删除所有本地镜像(慎用!)

# 2. 容器操作
docker run -d --name web -p 8080:80 nginx:latest    # 启动容器(后台模式,端口映射)
docker run -it ubuntu:20.04 /bin/bash               # 启动并进入容器(交互模式)
docker stop web                    # 停止容器
docker start web                   # 启动已停止的容器
docker restart web                 # 重启容器
docker rm web                      # 删除容器
docker rm $(docker ps -aq)         # 删除所有容器(慎用!)

# 3. 查看状态
docker ps                          # 查看正在运行的容器
docker ps -a                       # 查看所有容器(包括已停止)
docker logs web                    # 查看容器日志
docker logs -f web                 # 实时跟踪日志(类似 tail -f)
docker exec -it web /bin/bash      # 进入正在运行的容器
docker inspect web                 # 查看容器详细信息(IP、挂载等)

# 4. 数据卷(持久化数据)
docker volume create app-data      # 创建命名卷
docker run -d -v app-data:/app/data myapp:1.0   # 挂载卷到容器
docker volume ls                   # 列出所有卷
docker volume rm app-data          # 删除卷

# 5. 网络
docker network create app-net      # 创建自定义网络
docker run -d --network app-net --name db mongo  # 容器加入网络
docker network ls                  # 查看网络
docker network inspect app-net     # 查看网络详情

# 6. Docker Compose(多容器应用)
# 创建 docker-compose.yml 后使用:
docker-compose up -d               # 启动所有服务(后台)
docker-compose down                # 停止并删除所有服务
docker-compose logs -f             # 查看所有服务日志
docker-compose build               # 重新构建服务镜像

# 7. 清理资源(释放磁盘空间)
docker system prune                # 清理未使用的容器、网络、镜像、构建缓存
docker system prune -a             # 清理所有未使用的资源(更彻底)
docker volume prune                # 删除未使用的卷

HTML & CSS 极简入门

前端 教程

HTML & CSS 极简入门

先了解 HTML 与 CSS

  • HTML 是网页的结构:用标签定义标题、段落、按钮等内容。
  • CSS 是网页的样式:控制颜色、字体、布局和动画。

它们是所有网页开发的起点,无需复杂工具,用浏览器即可查看效果。
学会它们,你就能创建自己的第一个网页!

精简代码:一个漂亮的居中卡片

<!DOCTYPE html>
<html>
<head>
  <style>
    body {
      margin: 0;
      height: 100vh;
      display: flex;
      justify-content: center;
      align-items: center;
      font-family: Arial, sans-serif;
      background: #e3f2fd;
    }
    .card {
      width: 300px;
      padding: 30px;
      background: white;
      border-radius: 12px;
      box-shadow: 0 4px 12px rgba(0,0,0,0.1);
      text-align: center;
    }
    h2 {
      color: #1976d2;
      margin-bottom: 10px;
    }
    p {
      color: #555;
      font-size: 14px;
    }
    .btn {
      display: inline-block;
      padding: 8px 16px;
      margin-top: 15px;
      background: #1976d2;
      color: white;
      text-decoration: none;
      border-radius: 4px;
    }
  </style>
</head>
<body>
  <div class="card">
    <h2>你好,世界!</h2>
    <p>这是一个用 HTML 和 CSS 创建的简单卡片。</p>
    <a href="#" class="btn">点击试试</a>
  </div>
</body>
</html>

Java 面向对象指南

后端 教程

Java 面向对象指南

先了解 Java 与面向对象

Java 是一门纯面向对象的语言,程序通过“类”和“对象”建模现实世界。

OOP 四大特性:

  1. 封装:隐藏数据,用 private + getter/setter
  2. 继承:子类复用父类属性和方法(extends
  3. 多态:同一方法不同行为(方法重写)
  4. 抽象:定义通用结构(abstract

掌握 OOP,就掌握了 Java 的核心思维。

一个学生管理系统

// 抽象类:人(体现“抽象”和“封装”)
abstract class Person {
    protected String name;
    
    public Person(String name) {
        this.name = name;
    }
    
    // 抽象方法
    public abstract void study();
}

// 子类:学生(体现“继承”和“多态”)
class Student extends Person {
    private int grade;

    public Student(String name, int grade) {
        super(name);
        this.grade = grade;
    }

    // 重写抽象方法(体现“多态”)
    @Override
    public void study() {
        System.out.println(name + " 正在学习,年级:" + grade);
    }

    // Getter(体现“封装”)
    public int getGrade() { return grade; }
}

// 主程序
public class StudentDemo {
    public static void main(String[] args) {
        // 创建学生对象
        Student s1 = new Student("小明", 3);
        Student s2 = new Student("小红", 4);

        // 调用方法(多态)
        s1.study(); // 输出:小明 正在学习,年级:3
        s2.study(); // 输出:小红 正在学习,年级:4

        // 简单管理
        System.out.println("\n📋 学生列表:");
        Student[] students = {s1, s2};
        for (Student s : students) {
            System.out.println("学生: " + s.name + ", 年级: " + s.getGrade());
        }
    }
}

MyBatis-Plus

后端 Java 教程

MyBatis-Plus

一、什么是 MyBatis-Plus?

MyBatis-Plus(简称 MP)是 MyBatis 的增强工具,在 不改变 MyBatis 原有功能的基础上,提供了大量“开箱即用”的便捷功能,极大地简化了单表 CRUD 操作,提升开发效率。

它被广泛应用于 Spring Boot 项目中,号称:“只为简化开发,提高效率而生”。

✅ 核心特性

特性 说明
无侵入 只做增强不做改变,引入不影响原有流程
强大的 CRUD 操作 内置通用 Mapper 和 Service,无需写 SQL 即可操作数据库
Lambda 查询 支持链式调用 + Lambda 表达式,类型安全,避免字段名拼写错误
代码生成器 可根据数据库表自动生成 Entity、Mapper、Service 等代码
分页插件 内置高性能分页插件,支持多种数据库
性能分析插件 输出 SQL 执行时间,辅助优化慢查询

二、快速集成(Spring Boot 项目)

1. 添加依赖(Maven)

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.5</version>
</dependency>

<!-- 数据库驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

MySQL CRUD 快速指南

数据库 后端

MySQL CRUD 快速指南

一个完整的 MySQL 增删改查(CRUD)示例,包含建表、插入、查询、更新、删除操作,一步到位。

完整 CRUD 示例

-- 1. 创建表
CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  email VARCHAR(100) UNIQUE,
  age INT,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 2. 插入数据(Create)
INSERT INTO users (name, email, age) VALUES 
  ('Alice', 'alice@example.com', 25),
  ('Bob', 'bob@example.com', 30),
  ('Charlie', 'charlie@example.com', 35);

-- 3. 查询数据(Read)
SELECT * FROM users;
-- 结果:返回所有用户

SELECT name, age FROM users WHERE age > 28;
-- 结果:Bob, Charlie

-- 4. 更新数据(Update)
UPDATE users 
SET age = 26 
WHERE name = 'Alice';

-- 5. 删除数据(Delete)
DELETE FROM users 
WHERE name = 'Charlie';

-- 6. 再次查询验证结果
SELECT * FROM users;
-- 结果:仅剩 Alice (26岁), Bob (30岁)