仿牛客网社区 部分代码逐行精读

怎么看项目?

  1. pom.xml看技术架构
  2. resource看配置文件,这个项目是前后端不分离的
  3. 以调试为导向,从前端入手检查
  4. 先看controller,只做调用;调用service,实现具体业务;service还会调用其他service
  5. 后看dao,与数据库相关
  6. 深入源码

如何调试

  1. 网页检查,看NetworkHeader是发送的请求,Preview是响应信息
  2. 找到接口,如:Login
  3. 找到该接口的.java文件,打断点调试,查看所带参数
  4. 再进到方法中,打断点,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

  1. 首先,总体上看看这个Controller包含哪些模块:
    • 未登录前,可以点击按钮得到注册和登录界面
    • 注册功能模块
    • 激活用户
    • 验证码模块
    • 检查账号密码
    • 登出
  2. Get、Post与Put
    • POST /url 创建
    • DELETE /url/xxx 删除
    • PUT /url/xxx 更新
    • GET /url/xxx 查看
  3. 注册功能模块先调用userService,userService:
    • 初始化一个HashMap,用于存放提示信息
    • 先进行空值处理,若参数为空直接返回
    • 调用userMapper,通过查询检查用户名和邮箱是否已经存在
    • 通过MD5算法对密码加密
    • 对User实体类创建的对象user,设置必要的数据,存入数据库
    • 通过TemplateEngine 和Context 的配合,使用thymeleaf模版来生产html文件
    • 调用MailClient工具类发送邮件,即上一步生成的html文件
  4. 激活模块调用userService,用不同数值来表示不同激活状态
  5. 验证码模块:
    • 服务器通过Cookie将验证码和用户标识发送给浏览器
    • 将验证码放入Redis,设置过期时间60s
    • 通过字节流向浏览器传输图片
  6. 检查账号密码:
    • 对密码进行md5加密,判断是否正确
    • 生成登录凭证,并将其存入Redis
    • 将登录凭证通过Cookie发送给浏览器

DiscussPostController

  1. 首先,总体上看看这个Controller包含哪些模块:

    • 发帖
    • 获取帖子详情页面
    • 置顶
    • 加精
    • 删帖
  2. 发帖模块:

    • 先创建DiscussPost实体对象

    • 调用discussPostService

      • discussPostService调用sensitiveFilter过滤敏感词,原理
    • 创建Event实体对象

      • 设置主题类型:有六种:评论、点赞、关注、分享长图、发帖、删帖。此处是发帖
      • 设置实体类型,有三种:帖子、评论、用户。此处是帖子
    • 调用eventProducer,生产者发布消息

    • 把帖子放入Redis中

  3. 获取帖子详情页面:

    • 查询帖子,根据帖子查询作者
    • 调用likeService查询点赞数量和当前用户对这个帖子的点赞状态
    • 遍历评论列表,创建评论VO(Value Object)列表,这个列表是要给用户看的。将查询到的数据put到Map,再add到List,最后放入model中。model中存放了数据,再经过渲染得到View,呈现给用户,这不就体现了Spring MVC嘛!
  4. 置顶、加精和删帖:

    • 设置不同的类型和主题,发布事件

MessageController

  1. 首先,总体上看看这个Controller包含哪些模块:

    • 私信列表
    • 私信详情
    • 发私信
    • 通知列表
    • 通知详情
  2. 私信列表:

    • 创建会话列表,存储Message实体

    • 这行命令的一些思考:

      List<Map<String, Object>> conversations = new ArrayList<>();
      
      • List可以表示一个表格,Map表示一行数据,参考

      • //父类引用指向子类对象,B是A的子类,a不能调用B新增的属性和方法
        A a = new B(); //a是B的对象,向上转型
        
        //a可以调用B的所有方法
        A a = new A();B a = (B)a; //a是A的对象,向下需要强制转换
        
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
仿UI(张俊峰) 1.图标来自app 2.大致实现UI效果 3.实现抽提 底部:RelativeLayout(学习、社区、消息、我的) + 中间 自定义ViewPager(禁止滑动) 一、学习界面: (1) 标题模块: (2) 图片滑动模块:ViewPager+Pager (3) 签到模块:显示(已打卡、今日刷题、今日学习、共打卡) (4) 学习模块:Linearlayout(可用GridView)(专题练习、公司套题、错题练习、课程学习、大题查看、期末备考) ? 点击中任何一个LAYOUT,会显示一个由ExpandableList实现一个列表 ? 点击ExpandabList子标签中的练习字样,会自动跳转到另一个Activity,进专项练习。 ? 可以进考试,有倒计时,要求达到的效果,并能出考试结果。 (5) 参与模块:(文字(我参与的课程)+添加按钮) ? 点击添加按钮跳转到另一页面。由 ListView实现 二、 社区界面: 1. 标题模块:显示文字(最新),点击最新会弹出一个上下文菜单(最新、最热、精华)。 2. 滑动标题模块:ViewPager+PagerSlidingTabStrip 3. 内容模块:使用ListView显示用户内容。 三、 消息界面: 1、 菜单模块:(朋友私信、系统通知)使用ViewPager实现(可用Tabhost) 2、 朋友私信页面:显示一个私信图片 3、 系统通知页面:(由ListView实现)由于比较固定本人使用RelativeLayout实现 四、 我的界面: 1. 头像显示模块:头像+用户名+用户信息 2. 内容显示模块 更多效果请试用,感谢支持!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值