DarkYellowCat's Blog

分享技术与思考

1-Maven介绍

1.1 Maven两大功能

1.1.1 项目构建

Maven构建项目特点:

Maven可以将传统的项目构建标准化,每个阶段用一个命令完成。

1、Clean 生命周期:

clean:删除目标目录中的编译输出文件。这通常是在构建之前执行的,以确保项目从一个干净的状态开始。

2、Default 生命周期(也称为 Build 生命周期):

validate:验证项目的正确性,例如检查项目的版本是否正确。

compile:编译项目的源代码。

test:运行项目的单元测试。

package:将编译后的代码打包成可分发的格式,例如 JAR 或 WAR。

verify:对项目进行额外的检查以确保质量。

install:将项目的构建结果安装到本地 Maven 仓库中,以供其他项目使用。

deploy:将项目的构建结果复制到远程仓库,以供其他开发人员或团队使用。

3、Site 生命周期:

site:生成项目文档和站点信息。

deploy-site:将生成的站点信息发布到远程服务器,以便共享项目文档。

alt text

与其他项目构建工具对比

1.Ant:Ant没有依赖管理功能.

2.Gradle:在Maven Apache的基础上引入了基于Groovy的特定领域语言。

1.1.2依赖管理

传统

手动拷贝jar包

1.容易版本冲突;
2.难以寻找;
3.添加麻烦。

Maven

在pom.xml文件中添加jar包坐标,Maven会自动从仓库中下载
1.一步构建;

2.方便管理;

3.支持跨平台。

2-Maven仓库

2.1 本地仓库

本地仓库,在第一次执行 maven 命令的时候才被创建。

运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。

默认情况下,不管 Linux 还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/repository/ 的仓库目录。

2.2 远程仓库

2.2.1 中央仓库

中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。
https://repo.maven.apache.org/maven2/

2.2.2 私服仓库

局域网架设私有仓库服务器,常用于企业开发。

2.3 替换仓库至阿里云

中央仓库的服务器在国外,国内进行访问下载速度较慢,可以替换为阿里云的镜像仓库。

修改 maven 根目录下的 conf 文件夹中的 settings.xml 文件,在 mirrors 节点上,添加内容如下:

1
2
3
4
5
6
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>

如果想使用其它代理仓库,可在 节点中加入对应的仓库使用地址。以使用 spring 代理仓为例:

1
2
3
4
5
6
7
8
9
10
<repository>
<id>spring</id>
<url>https://maven.aliyun.com/repository/spring</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>

3-核心文件pom.xml

3.1 示例文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- Maven模型版本-->
<modelVersion>4.0.0</modelVersion>
<!--组织标识-->
<groupId>com.darkyellowcat</groupId>
<!--项目标识-->
<artifactId>untitled</artifactId>
<!-- 版本号-->
<version>1.0-SNAPSHOT</version>
<!-- 项目依赖-->
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!--项目依赖-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<!-- 配置项-->
<configuration>
<url>http://localhost:8080/manager/text</url>
<server>TomcatServer</server>
<path>/untitled</path>
</configuration>
</dependency>
</dependencies>

</project>

3.2 Maven坐标

Maven通过groupId,artifactId,version三个字段来获取坐标,进而获得jar包。

4-三大生命周期

官网
https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

4.1 clean清理项目

清理项目的临时文件和目录

1.pre-clean 清理前

2.clean

3.post-clean 清理后

命令

1
mvn clean

4.2 defalut项目构建

核心生命周期,负责项目构建和部署的所有核心步骤。

1
mvn validate/compile/test ...

4.3 site生成文档

1
mvn site

pre-site 生成前准备

site 生成项目站点文档

post-site 收尾

site-deploy 部署站点到服务器

5-依赖管理

5.1流程

pom.xml中添加地址 -> 在本地仓库中查找 -> 去远程仓库查找(如果有) -> 去中央仓库下载

5.2依赖传递

5.2.1 直接依赖和间接依赖

如果B使用A,C使用B,那么B是C的直接依赖,C是A的间接依赖。Maven 会自动将间接依赖引入,这种自动处理依赖关系的特性称为传递性依赖(Transitive Dependencies)。

5.2.2 影响

alt text
//本图来自菜鸟教程

5.2.3 依赖冲突

如果直接依赖和间接依赖同时包含一个包的不同版本,默认以直接依赖为准。
去除依赖:

1
2
3
4
5
6
7
8
<exclusions>
<groupId>
xxx
</groupId>
<artifactId>
xxx
</artifactId>
</exclusions>

6-插件

6.1 功能

插件用于用于执行特定任务(编译、测试、打包等),具体实现生命周期对应的功能。

6.2 绑定方式

Maven会为生命周期阶段预绑定插件,同时也支持在pom.xml中自定义绑定

补充:

推荐菜鸟教程,虽然直接点进去看起来有点乱,但知识点很全,也适合做笔记。
https://www.runoob.com/maven

前言

网上关于“MySQL密码正确却无法登录”的解决方案很多,比如跳过权限验证、重置 root 密码、检查插件认证方式等。但在我遇到的问题中,这些方法都不适用——因为根本不是密码错了,而是连错了实例
这里记录一下我的“乌龙”经历,希望能帮到踩了同样坑的朋友。

正文

情况描述

我在本地安装并配置好 MySQL 后,成功设置了 root 密码,并正常使用了一段时间。
但第二天再次尝试登录时,执行:

1
mysql -u root -p

却出现

1
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

于是按照网上的教程重置了密码,登录就成功了,我便没有深究。

然而,当我为了修改数据库默认编码(utf8mb4)而编辑 my.ini 文件并重启 MySQL 后,发现之前创建的数据库和表全都不见了!

病因分析

经过反复排查,终于发现问题根源:

我之前退出 MySQL 客户端时,直接关闭了命令行窗口,没有输入 exit 或 \q 正常退出。
第二天执行 mysql -u root -p 时,系统自动启动了一个新的、干净的 MySQL 实例(或连接到了另一个实例),而这个实例的 root 用户密码是空的(或默认值),和我之前配置的实例不是同一个!

更具体地说:

我本地可能同时存在两个 MySQL 服务

解决办法

1. 确认当前连接的是哪个 MySQL 实例

登录后执行:

1
SHOW VARIABLES LIKE 'datadir';

查看数据目录。对比你之前配置的 my.ini 中的 datadir 路径是否一致。

2. 检查 MySQL 服务状态

在 Windows 上:

1
2
3
sc query mysql
# 或
net start

看是否有多个 MySQL 服务在运行(如 MySQL80、MySQL 等)。

在 Linux/macOS 上:

1
ps aux | grep mysqld

3. 确保只启动一个 MySQL 服务

停止所有 MySQL 进程(把不是你需要的服务删除了),然后手动启动你配置过的那个实例:

Windows(以管理员身份)

1
2
net stop MySQL80
mysqld --defaults-file="C:\path\to\my.ini"

4. 使用明确的连接方式

如果你有多个实例,建议通过指定端口或 socket 连接:

1
mysql -u root -p -P 3306 --protocol=tcp

5. 避免“直接关窗口”

虽然直接关闭命令行通常不会导致数据丢失,
但介于我糟心的体验,还是建议养成输入 exit 退出的习惯。

bb

如果所有方法试过之后都不好用,重装可以解决你的一切烦恼(记得备份数据)。

引言

在 GitHub 上,我们经常会遇到一个共同的问题:项目结构太复杂,源码难以理解。而 DeepWiki 正是为了解决这个痛点而诞生的一个开源导航与推荐工具。它通过算法与人工整理相结合,帮助开发者快速解析 GitHub 项目、文档和资源。

正文

简介

DeepWiki 是一个聚焦于 GitHub 的“项目百科全书”,它从开源生态中自动抓取并解析优质项目,帮助开发者探索、学习与贡献。

它不仅仅是一个项目索引网站,更像是一个面向开发者的知识图谱平台,让你能在更短时间内发现优秀的轮子和前沿技术。

主要特点包括:

  • 操作简洁
  • 清晰的界面设计与标签导航
  • 高质量项目解析功能

核心功能

  1. 智能推荐
    DeepWiki 利用算法从 GitHub 数据中挖掘高活跃度、高质量的项目,避免信息噪声,让用户更容易发现真正值得关注的仓库。

  2. 项目百科页
    每个项目页面不仅展示仓库信息,还包含简明的技术介绍、相关项目推荐以及技术栈标签,帮助你快速了解一个项目的全貌。

  3. 主题导航与技术地图
    用户可以按主题(如“AI”、“Web”、“Database”、“Security”)浏览项目,形成知识体系化的视图,便于系统学习。

  4. 趋势追踪与时间线
    DeepWiki 追踪项目的活跃度与更新时间,提供类似“今日热门”、“本周上升榜”等趋势榜单,帮助开发者掌握社区动态。

使用指南

http://github.com替换http://deepwiki.com
列如:https://github.com/spring-projects/spring-framework -> https://deepwiki.com/spring-projects/spring-framework

alt text ->

alt text

总结

DeepWiki 是一个极具潜力的开源项目导航与探索平台,对于经常逛 GitHub 的开发者而言,它能大大理解成本,帮助你快速了解技术生态、发现优秀项目。

无论你是想找灵感、学习新框架,还是参与开源贡献,DeepWiki 都是一个不可错过的工具。

🌐 官方网站:https://deepwiki.org/

💡 适合人群:开发者、开源爱好者、学习者

🧭 一句话总结:让 GitHub 的知识图谱更清晰,让探索更高效。

缘由

在大学生活中,我发现很多同学虽然渴望社交,却苦于没有合适的渠道。传统的社交平台要么信息过载,要么匹配机制粗糙。于是,我萌生了开发 weconnected 的想法——一个让用户通过自定义标签(如“摄影”“考研”“Java后端”)快速找到志同道合伙伴的轻量级社交平台。

💡 项目初衷:降低高质量社交的门槛,让“找人”变得更精准、更自然。

项目概览

  • 核心功能
    • 用户注册/登录(含密码加密)
    • 自定义兴趣标签(可增删改)
    • 基于标签的用户匹配与展示
    • 简易个人主页
  • 技术栈
    • 后端:Spring Boot 3 + MyBatis + MySQL + Redis
    • 安全:盐值 + MD5 加密(可后续升级为 BCrypt)
    • 工具:Knife4j(API文档)、Lombok、Maven
    • 前端:Vue 3 + Vite + Vue Router + Axios(借助 CLI 脚手架 + AI 辅助)

后端设计亮点

1. 标签系统设计

  • 用户标签存储在表 user中,支持一对多关系。
  • 查询“相同标签用户”时,使用 SQL 的 JOIN 实现高效匹配。
  • 为提升性能,对高频查询(如热门标签用户列表)引入 Redis 缓存,设置合理过期时间。

2. 安全实践

  • 密码采用 盐值 + MD5 加密存储(说明:MD5 已不推荐用于生产,但作为学习项目可接受;后续可替换为 Spring Security + BCrypt)。

3. API 文档与调试

  • 集成 Knife4j,自动生成美观的 Swagger UI,方便前后端联调。

前端实现简述

由于我主要专注后端开发,前端借助 Vue 3 官方脚手架(Vite) 快速搭建,并使用 AI 工具辅助编写组件逻辑(如标签选择器、用户卡片渲染)。虽然界面较为简洁,但功能完整、交互流畅。

🙏 欢迎前端高手提 PR 或建议!项目开源地址:https://github.com/darkyellowcat/weconnected

遇到的挑战与收获

  • 挑战1:如何高效实现“标签匹配”?
    → 最初用全表扫描,性能差;后改用 Redis 缓存热门标签用户 ID 列表,QPS 提升明显。

  • 收获:完整走通一个全栈项目流程,加深了对 Spring Boot、Redis 缓存策略、RESTful API 设计的理解。

下一步计划

  • 引入 WebSocket 实现实时聊天
  • 用 Spring Security 重构认证模块
  • 添加单元测试(JUnit + Mockito)
  • 优化前端 UI/UX

结语

weconnected 不仅是一个技术练手项目,更是我对“技术如何解决真实问题”的一次尝试。如果你也在做类似的项目,欢迎交流!也欢迎 Star / Fork 项目,一起让它变得更好 🌟

🚀 前言

作为一名计算机科学与技术专业的大二学生,我决定用一套完全免费的方式搭建属于自己的个人博客。
最终我选择了 Hexo + NexT + GitHub Pages 的组合,简单、美观、自动化。


🧰 一、环境准备

系统:Windows 10
需要安装:

  • Node.js(推荐 v20+)
  • Git
  • Hexo CLI

安装命令:

1
npm install -g hexo-cli

🏗️ 二、初始化博客

在安装好 Node.js 与 Git 之后,使用 Hexo CLI 初始化你的博客项目:

1
2
3
4
5
6
7
hexo init my-blog
cd my-blog
npm install
````

Hexo 会自动创建一个包含基本结构的文件夹:

my-blog/
├─ _config.yml # 主配置文件
├─ package.json # npm 依赖配置
├─ scaffolds/ # 模板文件
├─ source/ # 存放文章和页面
│ └─ _posts/ # 博文存放处
└─ themes/ # 主题目录

1
2
3
4
5

初始化完成后,可以运行以下命令预览网站:

```bash
hexo server

在浏览器中访问 http://localhost:4000
就能看到 Hexo 的默认页面啦 🎉

🎨 三、更换 NexT 主题

我选择了社区维护最好的主题 —— NexT

进入博客目录,克隆 NexT:

1
2
3
4
5
6
7
8
git clone https://github.com/next-theme/hexo-theme-next themes/next
````

修改博客根目录下的 `_config.yml`,
找到:

```yaml
theme: landscape

改为:

1
theme: next

然后运行:

1
hexo clean && hexo g && hexo s

再次打开 http://localhost:4000
你就能看到 NexT 的简洁界面了 ✨

🧭 四、配置导航栏与页面

NexT 的导航菜单配置在 themes/next/_config.yml 中,
找到:

1
2
3
4
5
6
7
8
9
10
11
12
13
menu:
home: / || fa fa-home
archives: /archives/ || fa fa-archive
````

修改为:

```yaml
menu:
home: / || fa fa-home
categories: /categories/ || fa fa-th
tags: /tags/ || fa fa-tags
about: /about/ || fa fa-user

然后创建对应页面:

1
2
3
hexo new page "categories"
hexo new page "tags"
hexo new page "about"

编辑这些文件:

source/categories/index.md

1
2
3
4
---
title: 分类
type: categories
---

source/tags/index.md

1
2
3
4
---
title: 标签
type: tags
---

source/about/index.md

1
2
3
4
---
title: 关于我
---
👋 你好,我是 DarkYellowCat,一名计算机科学与技术专业学生,热爱编程与技术分享。

重新生成:

1
hexo clean && hexo g && hexo s

刷新页面,你的导航栏就会出现“主页 / 分类 / 标签 / 关于我”四个菜单

⚙️ 五、部署到 GitHub Pages

为了实现自动部署,我使用了 GitHub Actions

1️⃣ 在 .github/workflows/ 下创建一个文件:
deploy.yml

2️⃣ 填入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
name: Deploy Hexo to GitHub Pages

on:
push:
branches: [ main ]

jobs:
deploy:
runs-on: ubuntu-latest

steps:
- name: Checkout source
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- name: Install dependencies
run: npm install

- name: Generate static files
run: npx hexo generate

- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v4
with:
personal_token: ${{ secrets.DEPLOY_TOKEN }}
external_repository: darkyellowcat/darkyellowcat.github.io
publish_branch: main
publish_dir: ./public
````

3️⃣ 推送到 GitHub:

```bash
git add .
git commit -m "Add deploy workflow"
git push origin main

GitHub Actions 会自动构建并部署。
几分钟后访问:

👉 https://darkyellowcat.github.io

你就能看到网站成功上线 🚀

✅ 六、总结

至此,你已经完成了:

  • Hexo 初始化与 NexT 安装
  • 导航栏与页面配置
  • GitHub Actions 自动化部署

Hexo 的结构清晰、NexT 的样式优雅、GitHub Pages 免费托管,
这套组合非常适合学生和个人开发者!

🎉 欢迎来到我的新博客!

这是我使用 Hexo + NexT + GitHub Pages 搭建的个人网站。
这篇文章仅作为示例,用来展示 NexT 主题的排版和样式
无其他含义。


0%