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。
- css
- 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
- admin
- demo
- mapper
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:每个页面的导航栏上显示的消息的未读数量。
- advice
-
dao
🉑AlphaDao:视频课1.6。
🉑AlphaDaoHibernateImpl:视频课1.6。
🉑AlphaDaoMyBatisImpl:视频课1.6。
✅CommentMapper
✅DiscussPostMapper
🉑LoginTicketMapper:后期把LoginTicket存到了Redis里,不需要这个Mapper。
✅MessageMapper
✅UserMapper- elasticsearch
✅DiscussPostRepository⭐:Elasticsearch
- 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牛客项目课_仿牛客网讨论区_已经看完的部分的主要内容,如果未能解决你的问题,请参考以下文章