大家注意一下,这篇文章是针对于完全小白的同学编写的文章,如果大家对于前面的技术栈都有所了解的话,可以忽略此文章的阅读和学习。想学的同学给我冲!!!
一、学习的收获
如果你是个刚刚接触计算机的小白,那么说实话,本人的ByteOJ这个项目对你来说肯定是一个超大的挑战,但是如果你真的跟着我的文章一步一步学习下去,最终成功自己一步一步敲出来了这个项目。那么恭喜你!!!你至少可以有以下收获:
-
你可以基本学会如何完全从0开始构建出一个完全属于自己的 OJ 网站;
-
你可以学会当前市场所有人都需要学习的增删改查(CRUD) 的基本操作;
-
你可以学习到密码学的相关知识对自己的信息进行加密操作,减小抓包的风险;
-
你可以学习如何防止自己的网站被其他用户进行恶意攻击;
-
你可以学会如何使用爬虫进行一些简单的数据爬虫任务,当然仅针对于学习,切不可用于任何商业活动!!!
-
你可以学习前端常用工具和脚手架 (Vue + Vite + TypeScript + Element-UI + Pinia + Axios + OpenAPI Generated)
-
你可以学会用户登录的两个常用策略: Cookie和Token;
-
你可以学会如何监视用户的在线情况;
-
你可以学会如何实现关键词搜索、发帖、评论、点赞、代码调试、提交等多方面功能的实现;
-
你可以学会如何进行QQ邮箱验证功能的实现; (关键是不要钱,其他好多方式要钱)
-
你可以学会如何使用 RxJava 和大模型ChatGLM来进行 AI 问答功能的实现;
-
你可以学会如何将SpringBoot和阿里云OSS对象存储在后端进行结合使用,同时了解如何使用阿里云的 CDN 加速;
-
你可以认识Redis这个非关系型数据库和MySQL这个关系型数据库,同时知道使用代码来操作这两个数据库。同时你还可能学习到MongoDB这个非关系型数据库(这个数据库线上环境肯定是无法使用的,因为线上环境内存不足) ;
-
你可以学会如何使用ElasticSearch这个强大的搜索引擎;
-
你可以学会如何进行定时任务的发送,比如说:每隔一段时间,我的管理员的二重密码需要通过QQ邮箱的方式发送 (我在设计管理员登录的时候,设置了需要输入自己设定的密码和从QQ邮箱发送的随机密钥才可以成功登录管理页面) ;
-
你可以学会如何在Java中使用OpenCv和YOLO进行图像识别,或者选择使用Python来进行识别操作从而实现用户作弊行为的判定工作;
-
你可以了解什么是HTTP,什么是WebSocket,你可以学会如何使用WebSocket搭建一个简单的大型聊天室;
-
如何对 yml 文件进行加密 (注意:这里的加密方式是自创的) ;
-
你可以学会如何实现输入一个网址,显示的就是我们的本地效果的内容 (大白话)
- 如何获得自己的服务器? (免费、付费)
- 如何将自己本地的前、后端项目放到自己的服务器上? (XShell、Xftp、nginx)——(原生部署、宝塔部署)
- 如何使用Docker 进行部署?
-
最后一点,就是你可以学会如何实现后台管理工作的协调进行 (仅仅经验之谈);
二、技术要求
如果你还是个纯纯的小白,那么我建议大家先不要急着进行本项目的学习,我建议大家先进行以下技术层面的学习:
前端
- HTML + CSS + JS (需要了解的内容不要求很深,稍微看一点即可,建议视频,其他视频都好长,感觉没必要)
- Vue脚手架学习 + Node.js (最初的话先浅浅了解即可,建议视频,后面不知道的内容进行查缺补漏就可以了;对于npm和yarn的话大家了解一下这两个东西是干嘛用的即可,怎么用都不用去学,看两眼这篇文章足矣
- Router路由守卫初步了解 (大概随便喵两眼,之后在项目中可能不是这样用,但是大差不差,建议视频)
- 全局管理插件Pinia (相当于用来存储全局变量的一个东西,可以直接跳过,项目看看,知道怎么用即可,也可以先看看视频)
- daisyui组件库 (看文档)
- Element-UI组件库 (看文档)
- tailwindcss组件库组件库使用 (看文档)
- 详细了解WebSocket、HTTPS (后面也会单独出文章)
后端
- Java SE 基础学习 (这个随便看,随便学,东西不是很多,如果你想对Java概念化理解深一些,可以看王二;如果你并不想详细学习Java的话,直接看Java基础)
- MySQL基础学习 (MySQL的话,大家如果只是为了做项目,而不是说要深度了解的话,看B站视频的1-25,32-56,其他部分要学就是深层次学习)
- Spring框架学习 (可以暂时不学吧,也可以直接看文章)
- MyBatis框架和MyBatis-Plus学习 (MyBatis这个找个文章,比如说东西的话在后面操作MyBatis-Plus的时候给出代码的话会直接稍微讲解一些)
- SpringBoot中的各种好用的工具包 (后面会详细说明)
- 使用Python爬取网络数据 (学习Python可以随意找个文章看,比如菜鸟教学;如果想看爬虫的话可以选择看视频 + 笔记,笔记比较水;然后如果你想来个实战的话,你可以试一试文章1和文章2,如需密码请联系898561494@qq.com.
- Redis 数据库基础入门 (了解什么用即可,具体怎么写SQL不是很重要,视频的基础篇1 ~ 基础篇章22)
- MongoBD (可以不看,后面会详细说明)
- ElasticSearch (文章不是很多,或者你可以选择自己看官方文档学,但是全英文;后面会单独来出个文章讲解一下)
- RabitMQ/RocketMQ (这个可能会用于代码调试、提交、聊天室功能,用于提高性能,非必要)
- YOLO和OpenCv (进行图像、视频分析,后面再说,学习中,直接跳过。。。)
- RxJava + SSE + ChatGLM (实现AI问答功能,后面再说,学习中,直接跳过。。。)
- Caffeine缓存 (提高缓存性能的,后面再说,学习中,直接跳过。。。)
- Docker (先不用学。。。)
- ..............
三、前后端网页项目简单介绍
开始我点开了我的ByteOJ 网址,然后首先会根据阿里云的域名解析器将当前域名修改为IP地址,然后根据IP地址 拿到对应服务器中的nginx(存放页面展示代码的) 的前端页面展示的静态代码,然后访问了这个代码后,浏览器就会根据静态代码的内容对浏览器的空白页面进行渲染,渲染完成后就是你打开网站长的样子;在渲染的过程中还可能会根据代码向后端发送请求,后端就会根据写定的代码比如在数据库(用来存数据的,就是比如说排行榜信息等等都在这里面) 中拿取数据,然后将数据返回给前端,前端再根据数据对页面进行渲染,然后就有了排行榜的页面了,如果没有后端,那么排行榜中的人名、排名等等信息都是不会有的...........
本次文章到这里就结束了,ByteOJ项目专栏的学习之路,持续为你导航......O(∩_∩)O哈哈~