From 116cb6f7ba0531690c9c0db409123312743bb2ea Mon Sep 17 00:00:00 2001 From: gitee-bot Date: Sat, 26 Jul 2025 02:06:55 +0000 Subject: [PATCH] Update README.md --- README.md | 140 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 81 insertions(+), 59 deletions(-) diff --git a/README.md b/README.md index 7111658..f94220f 100644 --- a/README.md +++ b/README.md @@ -1,61 +1,83 @@ -## 使用的框架 -- springboot -- mybatis-plus -- thymeleaf -- kaptcha -## 学习到的新知识 - -- 通过kaptcha去生成验证码图片并返回到浏览器 -- 封装并使用JavaMailSender发送邮件 -- 自定义注解的编写与读取 -- 通过自定义注解标记Controller方法+拦截器来实现对不同状态的访问限制 -- 使用ticket来保存用户的登录状态而不是session -- 封装ThreadLocal来保存用户登录信息(User对象) -- 使用前缀树过滤敏感词 -- 声明式事务并不都优于编程式事务(例如当某函数流程仅有某部分需要事务管理, 就不能使用声明式事务直接声明该函数) -- 通过实现Constants接口避免以导包的形式引用常量 - -### redis - -- 键值的设计规范 -- redis事务由命令队列实现, 不具有完全的acid - -### kafka - -- 一个分布式流媒体平台(不只是消息队列) -- 应用于消息系统,日志收集,用户行为追踪,流式处理 - -### thymeleaf - -- thymeleaf模板渲染时可以使用`${param.argName}`来访问request的参数 - -- thymeleaf模板渲染时可以使用`${#dates.format(Date, ‘yyyy-MM-dd HH:mm:ss’)}` 来格式化时间对象 - -- thymeleaf模板渲染时使用双竖杠进行字符串拼接`|我是字符串我的名字叫${user.name}|` 来格式化时间对象 - -- thymeleaf获取`th:each=“user:${users}”`当前循环计数通过`userStat.count`来获取.(xxxStat为thymeleaf的隐含对象, 由引擎自动赋值) - -- thymeleaf会自动返回/template/error下的500, 404错误页面. - - - -### Elasticsearch - -- 6.0版本,ES对象理解(索引 -> database, 类型 -> table, 文档(通常json) -> 行记录, 字段 -> 同数据库), 7.0之后(索引 -> table, 废弃类型) -- 将索引分片提高并发能力 -- 需要中文分词器来支持中文搜索, 分词器依赖字典进行分词. -- ES开放了两个端口9200(http), 9300(tcp) -- springboot-elasticsearch中通过注解标记实体类从而简化将实体手动存储到es. -- ik_max_word分词器会将文本做最细粒度的拆分通常(用在被搜索内容), ik_smart会做最粗粒度的拆分通常(用在搜索内容). -- spring-data-elasticsearch的版本要与使用的elasticsearch对应, 否则无法使用. -- 展示搜索结果时通过HighlightBuilder高亮关键词 -### Mysql -- InnoDB默认存储引擎, 相比MyISAM, 它支持事务,和外键. -- 事务ACID特性. -- 事务并发异常: 第一类更新丢失, 第二类更新丢失, 脏读, 不可重复读,幻读. -- 事务隔离级别: 读未提交, 读已提交, 可重复读, 串行化. -- 事务管理: 声明式事务(注解), 编程式事务(try-catch). -- 锁范围: 表级锁(MyISAM), 行级锁(InnoDB). -- 锁类型: 共享锁S, 排他锁X, 意向共享锁IS, 意向排他锁IX, 间隙锁NK. +# NowCoder 社区学习项目 + +## 使用的框架和技术 +* Spring Boot +* MyBatis +* Redis +* Kafka +* Thymeleaf 模板引擎 +* Elasticsearch +* MySQL + +## 功能特性 +* 用户注册与登录 +* 发布讨论帖 +* 评论与回复 +* 点赞功能 +* 私信系统 +* 关注/粉丝系统 +* 敏感词过滤 +* 邮件激活 +* 搜索功能 +* 用户设置(头像上传、密码修改) + +## 项目结构 +``` +src/ +├── main/ +│ ├── java/ +│ │ └── com.nowcoder.community/ +│ │ ├── annotation/ # 自定义注解 +│ │ ├── aspect/ # AOP切面 +│ │ ├── config/ # Spring配置类 +│ │ ├── controller/ # 控制器 +│ │ ├── dao/ # 数据访问层 +│ │ ├── entity/ # 实体类 +│ │ ├── event/ # 事件处理 +│ │ ├── service/ # 业务逻辑层 +│ │ ├── util/ # 工具类 +│ │ └── CommunityApplication.java # Spring Boot主启动类 +│ └── resources/ +│ ├── application.properties # 配置文件 +│ ├── mappers/ # MyBatis映射文件 +│ ├── templates/ # Thymeleaf模板 +│ └── static/ # 静态资源 +└── test/ + └── java/ + └── com.nowcoder.community/ + └── CommunityApplicationTests.java # 测试类 +``` + +## 安装和运行 +1. 克隆仓库 +``` +git clone https://gitee.com/zcyr/nowcoder-community-study +``` + +2. 进入项目目录 +``` +cd nowcoder-community-study +``` + +3. 运行项目 +``` +./mvnw spring-boot:run +``` + +## 新知识学习 +* Redis 缓存用户、验证码、点赞和关注信息 +* Kafka 异步消息处理 +* Thymeleaf 模板引擎使用 +* Elasticsearch 实现搜索功能 +* 使用ThreadLocal保存用户信息(HostHolder类) +* 自定义注解实现登录验证(LoginRequire和RestLoginRequire) +* 使用AOP记录服务调用日志 +* 敏感词过滤(Trie树算法实现) +* 邮件发送 +* 使用Redis实现点赞、关注计数 +* 使用Elasticsearch实现讨论帖搜索 + +## 项目说明 +这是一个学习性质的社区项目,实现了基本的社交功能。使用了现代Web开发的常用技术栈,包括Spring Boot、MyBatis、Redis、Kafka和Elasticsearch等。项目中包含了丰富的注解和AOP使用示例,以及各种实用工具类和异常处理机制。 \ No newline at end of file -- Gitee