北京建设主管部门网站最基本最重要的网站推广工具是
仿牛客网社区Web开发项目
- 怎么看项目?
 - 如何调试
 - 项目前瞻
 - 技术架构
 - 项目亮点
 
- 开始看代码
 - LoginController
 - DiscussPostController
 
怎么看项目?
- pom.xml看技术架构
 - resource看配置文件,这个项目是前后端不分离的
 - 以调试为导向,从前端入手
检查 - 先看controller,只做调用;调用service,实现具体业务;service还会调用其他service
 - 后看dao,与数据库相关
 - 深入源码
 
如何调试
- 网页检查,看
Network,Header是发送的请求,Preview是响应信息 - 找到接口,如:
Login - 找到该接口的
.java文件,打断点调试,查看所带参数 - 再进到方法中,打断点,
F8执行到下一断点 
项目前瞻
技术架构
- 核心框架:SpringBoot SSM
 - 持久层框架:Mybatis
 - 日志管理:SLF4J
 - 模板框架: ElasticSearch
 - 项目管理框架: Maven
 - 消息队列:Kafka
 - 缓存框架:Redis
 - 其他:Spring Security、Quatz、Caffeine
 
项目亮点
参考文章
- 项目构建在Spring Boot+SSM框架之上,并统一的进行了状态管理、事务管理、异常处理;
 - 利用Redis实现了点赞和关注功能;
 - 利用Kafka实现了异步的站内通知;
 - 利用ElasticSearch实现了全文搜索功能,可准确匹配搜索结果,并高亮显示关键词;
 - 利用Caffeine+Redis实现了两级缓存,并优化了热门帖子的访问。
 - 利用Spring Security实现了权限控制,实现了多重角色、URL级别的权限管理;
 - 利用HyperLogLog、Bitmap分别实现了UV、DAU的统计功能,100万用户数据只需*M内存空间;
 - 利用Quartz实现了任务调度功能,并实现了定时计算帖子分数、定时清理垃圾文件等功能;
 - 利用Actuator对应用的Bean、缓存、日志、路径等多个维度进行了监控,并通过自定义的端点对数据库连接进行了监控。
 
开始看代码
启动zookeeper
bin\windows\zookeeper-server-start.bat config\zookeeper.properties
 
启动server
bin\windows\kafka-server-start.bat config\server.properties
 
LoginController
- 首先,总体上看看这个Controller包含哪些模块: 
- 未登录前,可以点击按钮得到注册和登录界面
 - 注册功能模块
 - 激活用户
 - 验证码模块
 - 检查账号密码
 - 登出
 
 - Get、Post与Put 
- POST /url 创建
 - DELETE /url/xxx 删除
 - PUT /url/xxx 更新
 - GET /url/xxx 查看
 
 - 注册功能模块先调用userService,userService: 
- 初始化一个HashMap,用于存放提示信息
 - 先进行空值处理,若参数为空直接返回
 - 调用userMapper,通过查询检查用户名和邮箱是否已经存在
 - 通过MD5算法对密码加密
 - 对User实体类创建的对象user,设置必要的数据,存入数据库
 - 通过TemplateEngine 和Context 的配合,使用thymeleaf模版来生产html文件
 - 调用MailClient工具类发送邮件,即上一步生成的html文件
 
 - 激活模块调用userService,用不同数值来表示不同激活状态
 - 验证码模块: 
- 服务器通过Cookie将验证码和用户标识发送给浏览器
 - 将验证码放入Redis,设置过期时间60s
 - 通过字节流向浏览器传输图片
 
 - 检查账号密码: 
- 对密码进行md5加密,判断是否正确
 - 生成登录凭证,并将其存入Redis
 - 将登录凭证通过Cookie发送给浏览器
 
 
DiscussPostController
-  
首先,总体上看看这个Controller包含哪些模块:
- 发帖
 - 获取帖子详情页面
 - 置顶
 - 加精
 - 删帖
 
 -  
发帖模块:
-  
先创建DiscussPost实体对象
 -  
调用discussPostService
- discussPostService调用sensitiveFilter过滤敏感词,原理
 
 -  
创建Event实体对象
- 设置主题类型:有六种:评论、点赞、关注、分享长图、发帖、删帖。此处是发帖
 - 设置实体类型,有三种:帖子、评论、用户。此处是帖子
 
 -  
调用eventProducer,生产者发布消息
 -  
把帖子放入Redis中
 
 -  
 -  
获取帖子详情页面:
- 查询帖子,根据帖子查询作者
 - 调用likeService查询点赞数量和当前用户对这个帖子的点赞状态
 - 遍历评论列表,创建评论VO(Value Object)列表,这个列表是要给用户看的。将查询到的数据put到Map,再add到List,最后放入model中。model中存放了数据,再经过渲染得到View,呈现给用户,这不就体现了Spring MVC嘛!
 
 -  
置顶、加精和删帖:
- 设置不同的类型和主题,发布事件
 
 
