Java牛客项目课_仿牛客网讨论区_已经看完的部分

Posted 夜中听雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java牛客项目课_仿牛客网讨论区_已经看完的部分相关的知识,希望对你有一定的参考价值。

✔✖❄🏵❀☆☂✡♥❤✴⭐❔🎵❓❕❗✅❌❤🧡💎✨🌸🐇🐕🐎🐍🐟🐖🌂💖💕🎁✨🐳🐋🐠🎀🎨🎵🩸🍀🍂🍁🍓💧⭐

数据库的表

comment
discuss_post
🉑login_ticket:后期把login_ticket完全存到了Redis里。LoginTicket这条线,从数据库到Mapper到xml都可以删除掉。service不能删除,因为存到Redis里也需要service。
message
user
分布式定时任务Spring Quartz的11张表

已经看完的部分

什么都没标记:还没看
-:目录
✅:我看完了。打前面。
🉑:测试,可删除,看完了。打前面。
⭐:重点。打后面。
❎:代码有问题。打后面。
💎:看不懂,不熟。打后面。


✅测试项目:7-1 springsecuritydemo-实现


resources

  • resources
    application.properties💎
    application-develop.properties💎
    application-produce.properties💎
    ✅logback-spring.xml
    ✅logback-spring-develop.xml:注释详细。视频课1.38。
    ✅logback-spring-produce.xml
    ✅sensitive-words.txt:过滤敏感词的敏感词文件。

    • mapper
      ✅comment-mapper.xml
      ✅discusspost-mapper.xml
      ✅message-mapper.xml
      ✅user-mapper.xml
    • static
      • css
        discuss-detail.css
        global.css
        letter.css
        login.css
      • html
        🉑ajax-demo.html:和AlphaController里的testAjax()一起测试AJAX。视频课3.6。
        🉑student.html:和AlphaController里的saveStudent()一起测试post请求。视频课1.14。
      • img
        ✅404.png
        🉑captcha.png
        ✅error.png
      • js
        ✅discuss.js
        ✅forget.js:重置密码页面,点击"获取验证码"时所做的操作。
        global.js:貌似是调用alert(“xx”)函数时,构建弹窗的样式。💎
        ✅index.js⭐:发布帖子的AJAX操作。
        ✅letter.js
        ✅profile.js
        ✅register.js⭐:前端判断注册时的密码和确认密码是否一致,不一致就addClass(“is-invalid”),即显示错误提示,并且无法提交表单。
        ✅setting.js⭐:"/setting"得到上传配置、"/header/url"更新数据库的header_url,图片上传七牛云,视频课7.23。
    • templates
      ✅index.html:重点:分页。
      • demo
        🉑view.html:和AlphaController里的getTeacher()一起测试ModelAndView,和AlphaController里的getSchool()一起测试Model。视频课1.14。
      • error
        ✅404.html
        ✅500.html
      • mail
        ✅activation.html
        🉑demo.html:和MailTests一起测试发送邮件。视频课2.1。
        ✅forget.html:找回密码操作的验证码的邮件页面
      • site
        ✅discuss-detail.html
        ✅followee.html
        ✅follower.html
        ✅forget.html:忘记密码、重置密码页面
        ✅letter.html
        ✅letter-detail.html
        ✅login.html
        ✅my-post.html
        ✅my-reply.html
        ✅notice.html
        ✅notice-detail.html
        ✅operate-result.html:注册时,发送邮件成功的页面。注册时,账号激活成功的页面。里面会秒数跳减。
        ✅profile.html
        ✅register.html
        search.html
        ✅setting.html:用户设置头像、修改密码的页面。
        • admin
          ✅data.html

test

  • community
    🉑BlockingQueueTests.java:测试阻塞队列BlockingQueue。视频课5.1。
    🉑CaffeineTests⭐:Caffeine压力测试,视频课7.27。
    🉑CommunityApplicationTests:视频课1.6。
    🉑ElasticsearchTests⭐:测试Elasticsearch。用狂神说ES7.x里的内容改了代码。视频课6.4。
    🉑KafkaTests.java⭐:测试Kafka。视频课5.9。
    🉑LoggerTests:测试Logger。视频课1.38。
    🉑MailTests:和templates/mail/demo.html一起测试发送邮件。视频课2.1。
    🉑MapperTests:测试用Mapper来CRUD数据库mysql
    🉑QuartzTests⭐:和QuartzConfig、AlphaJob、application-develop.properties一起测试Spring Quartz(分布式定时任务)。负责删除数据库中AlphaJob相关的内容。视频课7.13。
    🉑RedisTests⭐:Redis
    🉑SensitiveTests:过滤敏感词的测试。视频课3.1。
    🉑SpringBootTests⭐:Spring Boot Testing ,视频课8.1。
    🉑ThreadPoolTests⭐:测试两种JDK线程池,并且和ThreadPoolConfig和application-develop.properties中的两块配置一起测试Spring两种线程池和它们的简化版,视频课7.13。
    🉑TransactionTests:和AlphaService一起测试事务。视频课3.13。
    🉑WkTests⭐:测试软件wkhtmltopdf,用于把网页生成长图。视频课7.19。

java

  • community
    ✅CommunityApplication
    ✅CommunityServletInitializer⭐💎:项目部署到服务器的tomcat时,tomcat访问该方法作为入口来运行该项目。视频课8.3。

    • actuator
      ✅DatabaseEndpoint⭐:视频课8.2。

    • annotation
      🉑LoginRequired:结合LoginRequiredInterceptor测试自定义注解。该注解注解在方法上,被注解的方法在访问时需要登录,如果没有登录,则会重定向到登录页面。视频课2.41。

    • aspect
      🉑AlphaAspect:AOP,视频课3.33
      ✅ServiceLogAspect⭐:AOP,每次访问service方法前都要记录一个日志,视频课3.33。

    • config
      🉑AlphaConfig:视频课1.6。
      ✅EsConfig⭐:Elasticsearch
      ✅KaptchaConfig⭐:Kaptcha
      ✅QuartzConfig⭐:前半截和QuartzConfig、QuartzTests、application-develop.properties一起测试Spring Quartz(分布式定时任务),视频课7.13。后半截配置Quartz,把Quartz用在项目里,每5分钟计算一次有发帖、评论、点赞、加精的帖子的分数,视频课7.16。
      ✅RedisConfig⭐:Redis
      ✅SecurityConfig⭐:SpringSecurity的配置类,这里只有授权。认证在LoginTicketInterceptor的preHandle()方法和LoginController类的logout()方法中。视频课7.3。
      ✅ThreadPoolConfig⭐:和ThreadPoolTests和application-develop.properties中的两块配置和AlphaService中最下面的两个方法一起测试Spring的两种线程池和它们的简化版,视频课7.13。不加这个类,Spring可执行定时任务的线程池ThreadPoolTaskScheduler就无法注入。ThreadPoolTaskScheduler在项目的EventConsumer类中用到了,所以ThreadPoolConfig不可删。
      ✅WebMvcConfig⭐:配置每个拦截器(Interceptor)拦截哪些内容。
      ✅WkConfig⭐:不是为了配置,而是为了在程序一开始运行时,就创建WK图片目录。软件wkhtmltopdf,用于把网页生成长图。视频课7.19。

    • controller
      🉑AlphaController:开头一点点在视频课1.6。中间大部分在视频课1.14。底下一部分在视频课3.6。
      ✅CommentController⭐:重点:Kafka的生产消费事件:TOPIC_COMMENT、TOPIC_PUBLISH
      ✅DataController
      ✅DiscussPostController⭐:重点:1、帖子详情的Controller方法比较复杂。2、置顶加精删除,用到了Kafka的生产消费事件:TOPIC_PUBLISH、TOPIC_DELETE。
      ✅FollowController
      ✅HomeController
      ✅LikeController:1、触发Kafka的TOPIC_LIKE事件。2、计算帖子分数。
      ✅LoginController⭐:重点:1、kaptcha。2、登录和退出流程复杂。
      ✅MessageController
      ✅SearchController:搜索功能的Controller
      ✅ShareController⭐:wkhtmltopdf和Kafka异步把网页生成长图。视频课7.19。
      ✅UserController⭐:"/setting"和"/header/url"图片上传七牛云,视频课7.23。

      • advice
        ✅ExceptionAdvice⭐:统一处理异常,,视频课3.31。
      • interceptor
        🉑AlphaInterceptor⭐:测试拦截器Interceptor。视频课2.27。
        ✅DataInterceptor
        🉑LoginRequiredInterceptor:结合注解@LoginRequired测试自定义注解。该注解注解在方法上,被注解的方法在访问时需要登录,如果没有登录,则会重定向到登录页面。视频课2.41。
        ✅LoginTicketInterceptor⭐:重点:1、判断是否登录的流程难理解。2、SpringSecurity。
        ✅MessageInterceptor:每个页面的导航栏上显示的消息的未读数量。
    • dao
      🉑AlphaDao:视频课1.6。
      🉑AlphaDaoHibernateImpl:视频课1.6。
      🉑AlphaDaoMyBatisImpl:视频课1.6。
      ✅CommentMapper
      ✅DiscussPostMapper
      🉑LoginTicketMapper:后期把LoginTicket存到了Redis里,不需要这个Mapper。
      ✅MessageMapper
      ✅UserMapper

      • elasticsearch
        ✅DiscussPostRepository⭐:Elasticsearch
    • entity
      ✅Comment
      ✅DiscussPost⭐:ElasticSearch
      ✅Event⭐:连续set小技巧,Kafka
      ✅LoginTicket:登录凭证不保存到数据库中,而是保存到redis里,并且这些登录凭证在退出后并且到一定时间后会被删除。
      ✅Message
      ✅Page
      ✅User

    • event
      ✅EventConsumer⭐:后半截TOPIC_SHARE,图片上传七牛云,视频课7.23。
      ✅EventProducer⭐:Kafka

    • quartz
      🉑AlphaJob⭐:和QuartzConfig、QuartzTests、application-develop.properties一起测试Spring Quartz(分布式定时任务)。视频课7.13。
      ✅PostScoreRefreshJob⭐:记录Quartz要做的一个工作,每5分钟计算一次有发帖、评论、点赞、加精的帖子的分数,视频课7.16。
      ✅WKImageDeleteJob:课后练习,第七章第九节,7.26。启动定时任务(每4分钟执行一次),删除1分钟之前由分享功能所创建的临时文件。

    • service
      🉑AlphaService⭐:开头一部分测试注解@PostConstruct、@PreDestroy,视频课1.6。中间大部分和TransactionTests一起测试事务。视频课3.13。结尾一部分和ThreadPoolConfig和ThreadPoolTests和和application-develop.properties中的两块配置一起测试Spring两种线程池的简化版,视频课7.13。
      ✅CommentService⭐:里面有事务@Transactional
      ✅DataService:重点⭐:1、Redis高级数据类型:HyperLogLog、Bitmap。
      ✅DiscussPostService⭐:Caffeine缓存,缓存点击首页最热时的15页帖子,缓存点击首页时的帖子总数量,这个缓存3分钟刷新一次,视频课7.27。
      ✅ElasticsearchService⭐:Elasticsearch
      ✅FollowService
      ✅LikeService
      ✅MessageService
      ✅UserService

    • util
      ✅CommunityConstant⭐:常量类
      ✅CommunityUtil⭐:有生成UUID、MD5加密、得到JSONString。
      ✅CookieUtil:从HttpServletRequest中传来的所有cookie中,找出名字为name的cookie。
      ✅HostHolder:重点:1、ThreadLocal类
      ✅MailClient
      ✅RedisKeyUtil⭐:可以看这个知道Redis用在了哪些地方。
      ✅SensitiveFilter⭐:Trie树实现敏感词过滤。


其他可删除的内容

1、该文章🉑打头的类
2、标注"//废弃"的方法。ShareController、UserController里有
3、UserController类中的@LoginRequired注解删掉。因为这个注解是测试用的。
4、WebMvcConfig中AlphaInterceptor和LoginRequiredInterceptor要删掉。
4、QuartzConfig的上面两个@Bean被注释掉的方法是测试方法,要删掉。
6、application.properties中“community.path.upload=d:/work/data/upload”,和其他用到这个的@Value
7、UserController中删除上面三个@Value。ShareController也在删除废弃的方法后删除不用的@Value
8、application.properties中

# TaskExecutionProperties
spring.task.execution.pool.core-size=5
spring.task.execution.pool.max-size=15
spring.task.execution.pool.queue-capacity=100

是只有测试使用的,可以删除

CRUD一条线

数据库的CRUD

1、Message

难点:
1、message-mapper.xml里的sql有难度。

拦截器:MessageInterceptor

Message

MessageMapper
message-mapper.xml

MessageService

MessageController

letter.html
letter-detail.html
notice.html
notice-detail.html

letter.js

2、User

UserService中重点:
1、UserService中用到了发邮件,MailClient工具类。
2、UserService里用Redis缓存User。
3、LoginTicket完全存放到了Redis里。
4、UserService里有SpringSecurity的getAuthorities方法。

UserController中重点:
1、上传图片到七牛云

工具类:MailClient

User

UserMapper
user-mapper.xml

UserService

UserController
HomeController

profile.html
profile.js


登录、退出、判断是否登录的流程

LoginTicketInterceptor中重点:
1、判断是否登录的流程难理解
2、SpringSecurity

HostHolder中重点:
1、ThreadLocal类

LoginController中重点:
1、kaptcha
2、登录和退出流程复杂

重要类:LoginTicketInterceptor,HostHolder、CookieUtil

LoginTicket

UserService

LoginController

login.html

3、DiscussPost

DiscussPostService中重点:
难点:
1、elasticSearch
2、SensitiveFilter,Trie树过滤敏感词
3、Caffeine缓存。最热的帖子(orderMode == 1),才用Caffeine缓存

DiscussPostController中重点:
1、帖子详情的Controller方法比较复杂
2、置顶加精删除,用到了Kafka的生产消费事件:TOPIC_PUBLISH、TOPIC_DELETE。

工具类:SensitiveFilter

DiscussPost

DiscussPostMapper
discusspost-mapper.xml

DiscussPostService

DiscussPostController

4、Comment

CommentService中重点:
1、事务@Transactional

CommentController中重点:
1、Kafka的生产消费事件:TOPIC_COMMENT、TOPIC_PUBLISH

Comment

CommentMapper
comment-mapper.xml

CommentService

CommentController

Redis的CRUD

配置类:RedisConfig

工具类:RedisKeyUtil

5、Data

DataService中重点:
1、Redis高级数据类型:HyperLogLog、Bitmap。

测试类:RedisTests

DataService

拦截器:DataInterceptor

DataController

data.html

6、点赞Like

    // 某个实体的赞
    // value是点赞的人userId的set集合
    // like:entity:entityType:entityId -> set(userId)
    public static String getEntityLikeKey(int entityType, int entityId) {
        return PREFIX_ENTITY_LIKE + SPLIT + entityType + SPLIT + entityId;
    }

    // 某个用户的赞
    // key中的userId是被点赞的帖子/评论/回复的主人的userId,value是赞的数量
    // like:user:userId -> int
    public static String getUserLikeKey(int userId) {
        return PREFIX_USER_LIKE + SPLIT + userId;
    }

LikeService

LikeController

discuss-detail.html

discuss.js

7、Follow

FollowService

FollowController

profile.html

followee.html

follower.html

各种工具

Kafka

    //用户 aaa 评论了你的帖子/回复, 点击查看 ! 链接:帖子详情页面
    //用户 aaa 点赞了你的帖子/回复, 点击查看 ! 链接:帖子详情页面
    //用户 lhh 关注了你, 点击查看 ! 链接:lhh的个人信息页面
    @KafkaListener(topics = {TOPIC_COMMENT, TOPIC_LIKE, TOPIC_FOLLOW})

Event

EventProducer

EventConsumer

Elasticsearch

配置类:EsConfig

DiscussPostRepository

ElasticsearchService

kaptcha

KaptchaConfig

LoginController

login.html

作为练习的CRUD一条线

第二章

开发忘记密码的功能

第二章第五节,2.26。
开发忘记密码的功能:
1、点击登录页面上的“忘记密码”链接,打开忘记密码页面。
2、在表单中输入注册的邮箱,点击获取验证码按钮,服务器为该邮箱发送一份验证码。
3、在表单中填写收到的验证码及新密码,点击重置密码,服务器对密码进行修改。

修改的文件:
UserService
LoginController
forget.js
/site/forget.html
/mail/forget.html
login.html

细节:
用session来存储正确的验证码。

开发修改密码功能

第二章第七节,2.40。
开发修改密码功能:
1、在账号设置页面,填写原密码以及新密码,点击保存时将数据提交给服务器。
2、服务器检查原密码是否正确,若正确则将密码修改为新密码,并重定向到退出功能,强制用户重新登录。若错误则返回到账号设置页面,给与相应提示。

修改的文件:
UserService
UserController
setting.html

第三章

第三章第八节,3.30。
开发删除私信功能,即点击某条私信的删除按钮时,将其状态设置为删除态。

存在问题:这个功能相当于撤销,因为无论那一边删除了哪条私信,那么两边的人都看不到这条私信了。如果要改为只在一边删除,那么就要修改message表了。

修改的文件:
MessageController
MessageService
letter.js
letter-detail.html

ps:
同一条线路还可以删除通知。只需要在notice-detail.html里加一句<!--删除时依赖的条件--> <input type="hidden" th:value="${map.notice.id}">,其他都不用改,直接复用删除私信的这条线就好,

第四章

第四章第六节。4.21,4.22。
开发我的帖子功能,即在个人主页上,显示当前用户曾经发布过的帖子。
开发我的回复功能,即在个人主页上,显示当前用户曾经为帖子发布过的评论。

修改的文件:
CommentMapper
comment-mapper.xml
CommentService
UserController
profile.html
my-post.html
my-reply.html

第七章

第七章第九节。7.26。
启动定时任务(每4分钟执行一次),删除1分钟之前由分享功能所创建的临时文件。

修改的文件:
WKImageDeleteJob
QuartzConfig

以上是关于Java牛客项目课_仿牛客网讨论区_已经看完的部分的主要内容,如果未能解决你的问题,请参考以下文章

Java牛客项目课_仿牛客网讨论区_第八章

Java牛客项目课_仿牛客网讨论区_第七章

Java牛客项目课_仿牛客网讨论区_第六章

Java牛客项目课_仿牛客网讨论区_第五章

Java牛客项目课_仿牛客网讨论区_第三章

Java牛客项目课_仿牛客网讨论区_html页面