站长信息
jeffery.xu
jeffery.xu

软件工程师

欢迎访问我的个人笔记网站!我是一名热爱技术的开发者,专注于Web开发和技术分享。

811495111@qq.com
18521510875
筛选

个人笔记

初步pom配置
编程技巧
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.5.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.mobizone</groupId>
    <artifactId>kb</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>kb</name>
    <description>kb</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>24</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>
    <dependencies>
    <!--    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>-->
<!--        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>com.mysql</groupId>-->
<!--            <artifactId>mysql-connector-j</artifactId>-->
<!--            <scope>runtime</scope>-->
<!--        </dependency>-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.5</version>
        </dependency>
        <!-- JWT -->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-api</artifactId>
            <version>0.11.5</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-impl</artifactId>
            <version>0.11.5</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-jackson</artifactId>
            <version>0.11.5</version>
            <scope>runtime</scope>
        </dependency>
        <!-- Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.38</version>
            <optional>true</optional>
        </dependency>
        <!-- Swagger (springdoc-openapi) -->
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>2.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

总结几个问题
1. springboot 3.5.4  Lombok要版本高
2. mybatis 版本要新
3. 其他的暂时没碰到问题

明末第二章
游戏攻略
第二章-云顶城

望山村:谜题门正确答案:逆行因果→桥头对话望山村女眷→神龛旁见到老婆婆,给她蒸面兔→村里打怪物获得【贵重物品】珊湖手串→一间房子里的人说有个大侠被打了东西被抢了→在药商之墓使用“调查”姿势,获得【贵重物品】蜀绣丝帕→珊湖手串给望山村女眷,刷新后死亡→落雪小道

落雪小道:对话年大侠→对话李定国、孙可望→落雪小道神龛前,打弓箭手得到大西军令,附近捡到【贵重物品】破烂的包袱→破烂的包袱给年大侠,可以选择揭穿逗逗他→落雪小道神龛旁对话吴刚

云顶外城:(女道士清醒线)房子里遇到女道士,对话得到【贵重物品】真武观秘卷→神龛附近村里房子二楼对话老婆婆→神龛附近烽火台上对话白袍老者→点燃三个烽火台,放下吊桥

寄死窟:矿道入口附近桥头发现寄死窟→和墙里的老人对话,得到【贵重物品】长寿碗→外城矿道→大西军营地

大西军营地:神龛旁帐篷打艾能奇的亲信,得到大西军营地钥匙→对话年大侠→打艾能奇→对话年大侠→白玉丸子给老婆婆

映雪门:过桥到映雪门打刘公公→进屋对话何有哉→出门对话雪堡账房李万三,(女道士清醒线)给李万三真武观秘卷,得到赤汞晶石给女道士→云顶内城

云顶内城:来到云顶内城,有只怪物堵在方瑶门口,干掉怪物和方瑶对话,她就是药商之女,给她蜀绣丝帕→客栈街道旁对话雪堡管家沈彦平,答应帮他找凤冠霞帔→客栈里见到俩小孩,对话沈静安帮她找胖子,长寿碗给麻杆→在云顶集市帐篷找到胖子,劝他回去找老大→找回胖子后,对话沈静安得到凤冠霞帔→给雪堡管家沈彦平看凤冠霞帔→雪堡主堡

雪堡主堡:(女道士清醒线)如果你没有打艾能奇就来了雪堡,李账房会在这里拦截你,他恨你断了他的财路→上楼对话素衣侠女、雪堡夫人→凤冠霞帔给雪堡夫人,隐瞒管家消息→电梯下方有隐藏缺口,到地下宝库见到熊猫

竖井:打雪堡夫人→回普元寺对话玄阳子→竖井入口神龛旁对话方瑶,答应帮忙→竖井里拿到【贵重物品】怪医研究手记→新娘闺阁神龛桥头对话何有哉,给他看怪医研究手记、实验手记·残页一→回普元寺对话玄阳子

新娘闺阁:沿着撒花瓣的路走,对话牢房里的红岚→打戴斗笠的红衣高级侍女,得到地牢钥匙给红岚→桥头对话说书人→过桥时掉下,在喜宴厅堂打完美新娘方灵→在神龛入梦刷新后,对话方瑶、说书人,说书人会把你传送到第三章入口→回普元寺对话瑜夏、玄阳子→去看望普元寺外的垂髫小童,没有对话,只听到痛苦的呻吟

如何使用 WSL(Windows Subsystem for Linux)
编程技巧

先决条件

必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令。 如果使用的是早期版本,请参阅 手动安装页。

安装 WSL 命令

现在,可以使用单个命令安装运行 WSL 所需的所有内容。 右键单击并选择“以管理员身份运行”,在 管理员 模式下打开 PowerShell 或 Windows 命令提示符,输入 wsl --install 命令,然后重新启动计算机。

PowerShell
wsl --install

此命令将启用运行 WSL 并安装 Linux 的 Ubuntu 分发所需的功能。 (可以更改此默认分布)。

如果运行的是较旧的版本,或者只是不想使用安装命令,并且想要分步说明,请参阅 适用于旧版本的 WSL 手动安装步骤。

首次启动新安装的 Linux 分发版时,控制台窗口将打开,系统会要求你等待文件取消压缩并存储在计算机上。 所有未来的发射应该需要不到一秒钟的时间。

知识库数据库设计
编程技巧
-- 用户表
CREATE TABLE users (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(100) UNIQUE,
    nickname VARCHAR(50),
    avatar VARCHAR(255),
    status TINYINT DEFAULT 1 COMMENT '1:正常 0:禁用',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- 角色表
CREATE TABLE roles (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    role_name VARCHAR(50) UNIQUE NOT NULL,
    role_code VARCHAR(50) UNIQUE NOT NULL,
    description TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 用户角色关联表
CREATE TABLE user_roles (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    user_id BIGINT NOT NULL,
    role_id BIGINT NOT NULL,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (role_id) REFERENCES roles(id),
    UNIQUE KEY uk_user_role (user_id, role_id)
);

-- 知识分类/目录表
CREATE TABLE categories (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    parent_id BIGINT DEFAULT 0 COMMENT '父分类ID,0为顶级分类',
    sort_order INT DEFAULT 0,
    description TEXT,
    icon VARCHAR(100),
    status TINYINT DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- 知识文章表
CREATE TABLE articles (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(200) NOT NULL,
    content LONGTEXT,
    summary TEXT,
    category_id BIGINT,
    author_id BIGINT NOT NULL,
    view_count INT DEFAULT 0,
    like_count INT DEFAULT 0,
    status TINYINT DEFAULT 1 COMMENT '1:发布 0:草稿 -1:删除',
    is_top TINYINT DEFAULT 0 COMMENT '是否置顶',
    tags VARCHAR(500),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (category_id) REFERENCES categories(id),
    FOREIGN KEY (author_id) REFERENCES users(id)
);

-- 附件表
CREATE TABLE attachments (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    article_id BIGINT,
    file_name VARCHAR(255) NOT NULL,
    file_path VARCHAR(500) NOT NULL,
    file_size BIGINT,
    file_type VARCHAR(50),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (article_id) REFERENCES articles(id)
);
java知识库网站初步设想
编程技巧

前后端分离 + Spring Boot + MyBatis + MySQL 暂定的项目架构:

## 后端技术栈

```xml
<!-- 主要依赖 -->
Spring Boot 3.x
├── Spring Security (认证授权)
├── MyBatis Plus (数据访问层)
├── MySQL 8.0 (数据库)
├── Redis (缓存)
├── JWT (Token认证)
└── Swagger (API文档)
```

## 项目结构

```
knowledge-base-backend/
├── src/main/java/com/example/kb/
│   ├── config/          # 配置类
│   ├── controller/      # 控制器
│   ├── service/         # 业务层
│   ├── mapper/          # MyBatis映射接口
│   ├── entity/          # 实体类
│   ├── dto/             # 数据传输对象
│   ├── vo/              # 视图对象
│   ├── common/          # 公共类
│   └── utils/           # 工具类
├── src/main/resources/
│   ├── mapper/          # MyBatis XML映射文件
│   ├── application.yml  # 配置文件
│   └── static/          # 静态资源
└── pom.xml
```

## Maven依赖配置

```xml
<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- Spring Security -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    
    <!-- MyBatis Plus -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.4</version>
    </dependency>
    
    <!-- MySQL驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    
    <!-- Redis -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    
    <!-- JWT -->
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt-api</artifactId>
        <version>0.11.5</version>
    </dependency>
    
    <!-- Swagger -->
    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
        <version>2.2.0</version>
    </dependency>
</dependencies>
```

## 核心实体类设计

### User实体类
```java
@Data
@TableName("users")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    
    private String username;
    private String password;
    private String email;
    private String nickname;
    private String avatar;
    private Integer status;
    
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createdAt;
    
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;
}
```

### Article实体类
```java
@Data
@TableName("articles")
public class Article {
    @TableId(type = IdType.AUTO)
    private Long id;
    
    private String title;
    private String content;
    private String summary;
    private Long categoryId;
    private Long authorId;
    private Integer viewCount;
    private Integer likeCount;
    private Integer status;
    private Integer isTop;
    private String tags;
    
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createdAt;
    
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;
}
```

## MyBatis配置

### application.yml
```yaml
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/knowledge_base?useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: your_password
    
  redis:
    host: localhost
    port: 6379
    database: 0

mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.example.kb.entity
```

## 前端技术栈

### 前台用户端
```json
{
  "技术栈": {
    "框架": "Vue 3 + Vite",
    "UI库": "Element Plus",
    "路由": "Vue Router 4", 
    "状态管理": "Pinia",
    "HTTP客户端": "Axios",
    "编辑器": "Vditor/TinyMCE"
  }
}
```

### 后台管理端
```json
{
  "技术栈": {
    "框架": "Vue 3 + Vite",
    "UI库": "Element Plus",
    "模板": "vue-element-plus-admin",
    "图表": "ECharts",
    "表格": "Element Plus Table"
  }
}
```

## API接口设计示例

### 文章相关接口
```java
@RestController
@RequestMapping("/api/articles")
public class ArticleController {
    
    @GetMapping("/list")
    public R<IPage<ArticleVO>> getArticleList(@RequestParam Map<String, Object> params) {
        // 分页查询文章列表
    }
    
    @GetMapping("/{id}")
    public R<ArticleVO> getArticleById(@PathVariable Long id) {
        // 获取文章详情
    }
    
    @PostMapping
    public R<Void> saveArticle(@RequestBody ArticleDTO articleDTO) {
        // 新增文章
    }
    
    @PutMapping("/{id}")
    public R<Void> updateArticle(@PathVariable Long id, @RequestBody ArticleDTO articleDTO) {
        // 更新文章
    }
}
```

## 开发建议

1. **数据库设计**:先创建数据库表结构
2. **后端开发**:从Entity → Mapper → Service → Controller的顺序开发
3. **前端开发**:先搭建基础框架,再开发具体页面
4. **接口联调**:使用Swagger进行接口测试

需要我提供具体的某个模块的详细代码吗?比如用户认证、文章管理等。

WSL上安装java
编程技巧

# 下载Oracle JDK 24
wget https://download.oracle.com/java/24/latest/jdk-24_linux-x64_bin.tar.gz

# 解压到/opt目录
sudo tar -xzf jdk-24_linux-x64_bin.tar.gz -C /opt/

nano ~/.bashrc

export JAVA_HOME=/opt/jdk-24.0.2/
export JAVA_BIN=$JAVA_HOME/bin
export JAVA_LIB=$JAVA_HOME/lib
export CLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar
export PATH=$JAVA_BIN:$PATH

source ~/.bashrc

source:Shell内置命令,用于执行脚本文件中的命令
.bashrc:Bash配置文件,包含用户的Shell环境设置
作用
重新加载当前用户的Bash配置文件,使新的环境变量和设置立即生效,而无需重新登录或重启终端。

# 检查环境变量
echo $JAVA_HOME
echo $PATH

# 检查Java是否可用
java -version

sudo apt update && sudo apt upgrade -y 解释
编程技巧

sudo:以管理员权限执行
apt:Ubuntu/Debian的包管理器
update:更新软件包列表(不安装软件,只更新可用软件的信息)
&&:逻辑与,前面命令成功后才执行后面的命令
upgrade -y:升级所有已安装的软件包到最新版本,-y表示自动确认所有提示
为什么更新了很多东西
WSL的Ubuntu系统预装了很多基础软件包:


Python:系统自带Python,很多Linux工具依赖它
系统库:各种系统级别的库文件
开发工具:编译器、构建工具等
网络工具:curl、wget等
这是正常的吗?
是的,这是完全正常的。首次运行时通常会更新:


100-300个软件包
包括Python、系统库、安全补丁等
确保系统处于最新和安全的状态
对你的Java开发影响
更新这些包是好事:


确保系统安全性
获得最新的开发工具
为安装Java环境提供更好的基础

7月小结
计划与总结

7月完成了个人网站的初步开发,采用了.net 8.0 + razor + Entityframecore 完成了设计, 前端纯js和 bootstrap完成。不得不说AI非常强力,替我完成90%以上的代码开发。

软考方面有点落后,需要加紧学习跟上。

8月份打算学习一下mysql和java,如果能再学习一门前端技术就好了。而且java的话发布要涉及linux,这一块实在没底,万一再碰docker那就是盲人摸象,一步一步来吧。

 

《明末渊虚之羽》攻略路线推荐 NPC剧情任务路线安排
游戏攻略
第一章-佛源镇

普元寺:走出燃灯洞→普元寺→普元寺二楼:对话玄阳子、对话谯麟→普元寺一楼:对话瑜夏、对话陶青→出门普元寺神龛,左边有几个帐篷→庭院对话老船夫→重生后出门→上坡对话垂髫小童→断桥边对话何有哉→摩崖像

摩崖像:瀑布前对话红衣少女→摩崖像神龛→打唐王宫女,下面洞口出去开宝箱→上面洞口出来,捡到【贵重物品】散落的包袱→含光禅院

含光禅院:神龛旁对话吴刚→竹子院里捡到【穆桂英面人】→打吃人头陀→神龛旁对话吴刚→传送回普元寺,帐篷处对话玄阳子→回含光禅院,用钥匙开门→三步地

三步地:对话年大侠→房子里,穆桂英面人给陶罐小童→右边路尽头洞里对话说书人、熊猫→回年大侠处,另一条路走上阶梯前往蜀王祠

蜀王祠:一楼对话年大侠、女道士、陶青、吴刚→二楼对话老婆婆、白袍老者→三楼BOSS房门口捡到【贵重物品】染血手书,打羽化祭司禄秉璋→不凝血块给年大侠→祭司的断杖给陶青→回普元寺,染血手书给瑜夏,楼上对话年大侠、玄阳子

竹林小院:蜀王祠外隐形桥→竹林小院门板对话:陶青情人、陶罐小童哥哥→开门打通回普元寺捷径→佛源镇

佛源镇:四合院楼上拿到【贵重物品】破损的书信→回竹林小院,破损的书信给陶罐小童哥哥→佛源镇戏台打唱戏怪,得到【杨宗保面人】→推倒树桥回蜀王祠捷径→对话陶青水太凉→回竹林小院,杨宗保面人给陶罐小童哥哥→罗家大院打陆红柳→回蜀王祠,白玉丸子给老婆婆→三清铃给女道士(清醒线),三清铃不给女道士(心魔线)

丹青苑:佛源镇戏台旁下坡过桥→丹青苑里拿【贵重物品】山水图→山水图给陶青

唐王行宫侧门外:蜀王祠二楼树桥出去→下山来到唐王行宫侧门→唐王行宫侧门外马厩对话玄阳子→开门打通回蜀王祠捷径

蜀王祠地下:蜀王祠一楼地下通道→赤炼工坊→盗洞→打噬毒千足大蚰蜒→回蜀王祠,对话陶青→(女道士心魔线)道士令牌给女道士→回普元寺,二楼对话玄阳子

秽柳滩:蜀王祠地下盗洞神龛→乘电梯上来,河边捡到【贵重物品】破损的令牌→对话何有哉,散落的包袱给他→对话白袍老者→陆家旧居→对话红衣少女→弃尸坑,打重生妖树缚魂木→行宫关隘

唐王行宫:行宫关隘→唐王行宫入口对话玄阳子→打开唐王行宫侧门→红色谜题门,故意答错回答羽化蜕皮(想要成就的话就得答羽化飞升),被传送到菜园对话老船夫→观音殿,打唐王宫女→行宫后山→后山凉亭对话素衣侠女→使用佛像机关放干大池塘的水→打锦衣卫指挥使红岚

普元寺:对话玄阳子→下楼对话瑜夏、何有哉→出去庭院对话年大侠→用钥匙开门后再对话年大侠→穿过山洞前往云顶城

快速进入环境变量
编程技巧

按Win + R键,输入sysdm.cpl
选择"高级"选项卡 → "环境变量"