后端路线 Part1 MySQL
系列:后端路线 · Part 1数据持久化是后端的基石。本篇目标:能独立写出建表语句、熟练使用 CRUD、理解索引与事务、说清隔离级别,并应付常见面试题。更高级的主题(锁、执行计划、分库分表、主从复制等)留待后续。 0. 先建立直觉MySQL 是一个关系型数据库,数据按「库 → 表 → 行」组织。你通过 SQL(结构化查询语言) 与它对话,本质是向数据库下达”建什么、存什么、改什么、查什么”的指令。 一条 SQL 请求的旅程(面试常问):客户端 → 连接器 → 查询缓存(8.0 已移除)→ 分析器(词法/语法)→ 优化器(选执行计划)→ 执行器 → 存储引擎(InnoDB)→ 落盘。 为什么默认引擎是 InnoDB?因为它支持事务、行级锁、外键、崩溃恢复,是绝大多数业务场景的首选。MyISAM 不支持事务和行锁,已逐渐被淘汰。 1. 建表语句(DDL)DDL(Data Definition Language)负责定义结构:CREATE / ALTER / DROP。 1.1...
后端路线 Part2 Spring Boot
系列:后端路线 · Part 2上一篇(MySQL)让你会存数据。这一篇让你会”写程序去操作数据”。Spring Boot 是 Java 后端事实标准框架,目标:能搭起一个项目、写出接收 HTTP 请求并读写 MySQL 的接口。 1. 为什么是 Spring Boot?Spring 是庞大的 Java 企业级框架,但”原生 Spring”配置繁琐。Spring Boot 的核心思想是”约定优于配置 + 自动装配”: 内嵌 Tomcat,无需单独部署 Web 容器,java -jar 直接跑。 starter 依赖一键引入常用能力(web、mysql、mybatis…)。 自动根据 classpath 配置好 Bean,几乎零 XML。 面试常问:”Spring 和 Spring Boot 区别?” 答:Spring Boot 是基于 Spring 的快速开发脚手架,通过自动配置和起步依赖极大简化了搭建与配置。 2. 项目结构(标准分层)12345678910111213src/main/java/com/example/demo/├──...
后端路线 Part3 API 与 HTTP 协议
系列:后端路线 · Part 3框架(Part 2)让你能写接口,但接口”长什么样、前后端怎么对话”由协议决定。本篇讲清 HTTP 与 RESTful API——这是前后端协作的”普通话”。 1. HTTP 是什么?HTTP(超文本传输协议)是客户端与服务器之间请求/响应的文本协议,无状态(每次请求独立,服务器不记得你上一次是谁——需靠 Cookie/Token 弥补)。默认端口 80,HTTPS = HTTP + TLS 加密,端口 443。 2. 一个请求长什么样123456POST /api/user/login HTTP/1.1Host: api.example.comContent-Type: application/jsonAuthorization: Bearer <token>{"username":"zhang","password":"123456"} 请求行:方法 + 路径 +...
后端路线 Part4 部署与接口调用
系列:后端路线 · Part 4前面你写出了能跑的 Spring Boot 接口。本篇讲”怎么把它放到服务器上稳定运行”,以及”除了浏览器,还能怎么调它”。这是从”本地 demo”到”真能上线”的关键一跃。 1. 从本地到服务器:发生了什么?本地:mvn spring-boot:run → 进程在 IDE 里跑,你用 localhost 访问。服务器:把项目打包成 jar,传到 Linux,用命令在后台跑,别人通过服务器 IP/域名访问。 核心差别只有一个字:后台常驻。本地关了终端程序就停,服务器要”关了 SSH 还活着”。 2. 打包1mvn clean package -DskipTests # 生成 target/demo-0.0.1.jar -DskipTests 跳过测试加速;生产应跑测试。产物是可执行 jar(内嵌 Tomcat,自带运行环境)。 3. 服务器运行(三种方式)方式一:nohup(最简单,临时用)1nohup java -jar demo-0.0.1.jar > app.log 2>&1...
后端路线 · 一篇通关(图多字少)
把「全链路 / MySQL / Spring Boot / API·HTTP / 部署 / 完整示例 / 调试」浓缩成一图流。看不懂的细节回看各分篇。 0. 全链路一览 你写的后端 = 中间那一层:北接客户端(HTTP),南接存储(MySQL/Redis)。 1. MySQL 基础建表 —— 一张能打的 user 表: CRUD —— 增删改查,Update/Delete 必须带 WHERE: 索引 —— B+Tree 有序查找;组合索引遵循最左前缀;注意失效场景与回表: 事务 —— ACID 靠 undo/redo log + 锁/MVCC;转账两步同生共死: 隔离级别 —— 四种级别 × 三类问题;MySQL 默认 RR: 2. Spring Boot 后端框架分层 —— Controller 接活 → Service 干活 → Mapper 存取 → Entity 搬运: 核心注解 —— 启动/装配 与 Web/接口...
后端路线 全链路概览
系列:后端路线 · 导引篇在动手写 SQL、搭框架之前,先看清”后端”到底在做什么,一次请求从浏览器到数据库再回来,中间经历了什么。本篇建立全局地图,后续每一篇都是地图上的一个站点。 1. 后端在解决什么问题?前端(网页 / App)负责”长什么样、怎么交互”;后端负责”数据从哪来、业务逻辑怎么算、数据存哪去”。 一句话:后端 = 接收请求 → 处理业务 → 读写数据 → 返回结果 的那台(或那群)服务器上跑的程序。 2. 一次请求的全链路以”用户在网页点击登录”为例,请求穿过如下层级: 1234567891011121314151617浏览器/App │ HTTP 请求 (POST /api/login) ▼负载均衡 / 网关 (Nginx / 网关) ── 分发流量、HTTPS 卸载、限流 │ ▼后端服务 (Spring Boot 应用) ── 校验参数、查库、写业务 │ ├──────────────► 缓存 (Redis) ── 热点数据加速 │ ...
后端路线 完整示例 用户管理系统
系列:后端路线 · 完整示例把 Part 1(MySQL) ~ Part 4(部署) 全部焊死在一个项目里。这是一个复制即可跑的最小用户管理系统:建表 → 实体 → Mapper → Service → Controller → 接口自测。读完你已具备独立交付一个后端模块的能力。 1. 功能清单 接口 方法 路径 说明 注册用户 POST /api/users 新增 用户列表 GET /api/users 分页查询 用户详情 GET /api/users/{id} 按主键查 更新用户 PUT /api/users/{id} 改资料 删除用户 DELETE /api/users/{id} 逻辑/物理删除 按名查询 GET /api/users?username=xxx 条件查询 2. 建表 SQL(Part 1 的加强版)123456789101112CREATE TABLE `user` ( `id` BIGINT NOT NULL...
后端路线 常见问题与调试技巧
系列:后端路线 · 收官篇前面四篇 + 一个完整示例,你已经能写出来。但”写得出来”和”跑得通”之间,隔着一堆坑。本篇按”从外到内”的排查顺序,把最高频的问题与对应解法列给你。 1. 排查总原则:由外到内,逐层缩小1网络/防火墙 → 服务是否在跑 → 路由(404) → 参数(400) → 业务/数据库(500) → 数据正确与否 不要一上来就改代码。先确认”请求到底有没有到应用”,再往里查。 2. 连不上 / 超时(请求根本没反应) 现象 可能原因 排查/解决 Connection refused 服务没启动 / 端口错 ps -ef|grep java 看进程;确认 server.port 云上访问不了 安全组未放行端口 云控制台放行 8080/对应端口 Could not connect to MySQL 数据库地址/账号错、MySQL 未起、防火墙拦 3306 本地 mysql -u root -p 试连;检查 url 与 serverTimezone 本地能连、服务器不能连 DB 数据库只允许...
Go 语言学习(二)复合数据类型
摘要:本文是 Go 语言学习系列的第二篇,覆盖**第 2 章(复合数据类型)**的全部四种类型——数组(Array)、切片(Slice)、映射(Map)、结构体(Struct)。每种类型都从「是什么、怎么声明与初始化、底层语义(值类型还是引用类型)、怎么遍历、怎么当函数参数、有哪些常见陷阱」展开,配有可运行代码、对比表格、结构图示与速记钩子。读完你应能正确、地道地选用这四种类型,并看清它们彼此的关系。文末附核心速记、易错 Checklist 与自测题。 目录 2.1 数组(Array) 2.1.1 三条铁律 2.1.2 四种初始化 2.1.3 长度是类型的一部分 2.1.4 零值 2.1.5 下标与越界 2.1.6 值类型:整体复制 2.1.7 数组比较 2.1.8 指针数组 vs 数组指针 2.1.9 多维数组 2.1.10 遍历 2.1.11 作为函数参数 2.2 切片(Slice) 2.2.1 底层结构 2.2.2 三种创建方式 2.2.3 长度与容量 2.2.4 append 与扩容 2.2.5 共享底层数组的陷阱 2.2.6 遍历 2.2.7...
JVM学习笔记
内存结构 1.程序计数器作用:记录下一条指令的执行地址 特点: 线程私有 不会内存泄漏 2.Java虚拟机栈(存局部变量,方法参数)1.定义: 每个线程运行时需要的内存,称为虚拟机栈 每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存(参数、局部变量、返回地址) 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法。 2.问题辨析:1.垃圾回收是否涉及栈内存? 不会,也不需要。 2.栈内存分配越大越好吗? -Xss1024k 不一定,栈内存越大,线程数就越小。 3.方法内的局部变量是否线程安全? 需要判断变量是不是共享变量,私有变量是线程安全的。共享变量需要考虑线程安全问题。 局部变量是否逃离了方法的作用范围,通过返回值返回了引用地址,可能会被其他线程访问,也需要注意线程安全问题。 3.栈内存溢出 栈帧过多(如递归过深) 栈帧过大() 4.线程运行诊断1.线程占用cpu过高 定位 用top命令定位哪个进程对cpu的占用过高 ps H -eo pid,tid,%cpu | grep...




