先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
正文
近期在CSDN平台上开设了一个个人专栏《从0搭建项目》,从而来向大家分享自己是如何一步步搭建项目的,以及记录在项目开发中遇到的一些问题是如何解决的。 并且该专栏中的搭建的项目将全部开源,供大家参考学习。凭借这个由头,也是引来了不少志同道合的同学的支持,并且在这过程中也是帮助解决了不少同学开发中遇到的问题,不仅如此,也有不少大佬对我开源的项目中存在的不足进行了指点以及修正。随后就在想,反正都是在平台上分享知识和资源,那为什么自己不能搭建一个资源分享的平台呢?想到这里,脑子一热拍一拍大腿”干就完了!“。紧接着就开始技术选型和着手数据库的设计,经过了比较漫长的一段时间也是慢慢的把项目搭建起来了。
🏡 博客首页:派 大 星
⛳️ 欢迎关注 ❤️ 点赞 🎒 收藏 ✏️ 留言
🎢 本文由派大星原创编撰
🚧 系列专栏:项目从0搭建
🎈 本系列项目从设计到实现源码全部开源免费学习使用,一起追向理想,欢迎各位大佬监督打卡开发!
文章目录
-
- 🍌 难度分析
-
- 🍉 实现点赞功能简易流程图
-
🍍 项目回顾(知识分享平台)
-
- 🍇 最终效果演示
-
🌽 技术选型:
-
🥝 项目需求分析
-
🌾 搭建项目
-
- 1. 导入部分Maven依赖
-
2. 配置文件编写
-
3. 项目初期基本配置
-
- ① SwaggerAPI文档的使用与配置
-
② 配置异常处理类以及响应码
-
③ 点赞业务逻辑实现
-
❗️❗️❗️注意事项
-
⭐️ 项目总结
后端的难度主要在于使用Redis来实现点赞功能
等部分操作以及其中的一些逻辑校验
的处理,再对Redis缓存的数据定时进行持久化操作。
🍉 实现点赞功能简易流程图
对上图稍作解释:
-
参数校验 :对入参进行非空校验
-
逻辑校验 :对于用户点赞,要对操作逻辑进行校验,用户不能重复点赞同一个资源项,对于取消点赞,
用户则不能取消未进行点赞的资源项
-
存入Redis :存入Redis的数据主要是资源的点赞数,某个资源的点赞数,用户点赞的资源项
-
定时任务 :通过定时任务,从Redis读取数据并且持久化到MySQL中【本项目每两个小时执行一次】
🍇 最终效果演示
🌽 技术选型:
-
🍅 SpringBoot
-
🥒 MySQL
-
🍑 MyBatis-Plus
-
🍋 Redis
-
🍊 Swagger
-
🍆 阿里云Oss存储对象实现文件上传
-
🍉 Vue
-
🦞 Axios
-
🍰 Vue Router
-
🍨 Vue AntDesign
🥝 项目需求分析
用户通过该平台可以搜索自己想要查询到的资源,同时也可以把自己拥有以及保存的学习资料进行无偿的开源给使用平台的用户。用户上传的资源是需要后台管理员审核后选择某资源是否上线以及可以对自己感兴趣的资源进行点赞收藏到自己的个人中心以防后续难以查询。
🌾 搭建项目
1. 导入部分Maven依赖
org.springframework.boot
spring-boot-starter-data-redis
org.apache.commons
commons-pool2
com.baomidou
mybatis-plus-boot-starter
3.4.0
com.aliyun.oss
aliyun-sdk-oss
3.4.2
joda-time
joda-time
2.10.5
…
2. 配置文件编写
3. 项目初期基本配置
① SwaggerAPI文档的使用与配置
对于典型的前后端项目来说,文档的编写是必不可少的,因为对于这种项目的架构在公司中一般是由两班人马联合开发:前端组和后端组。这种模式的开发有什么好处呢?简单来说可以并行开发,大大减少了项目的开发周期,前端不需要等后端的接口,而后端也不需要等待前端页面才能测试响应接口是否正确,如果没有前端页面的配合那么后端组又该如何测试接口是否正确呢,解决方案也就是现在介绍的SwaggerAPI文档,可以帮助后端人员大大减少等待时间,而且可以完美的符合我们的要求。
@Configuration
@EnableSwagger2
public class SwaggerConfig {
private Boolean enable = true;
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage(“com.pdx.controller”))
.paths(PathSelectors.any())
.build()
.enable(enable);
}
private ApiInfo apiInfo(){
return new ApiInfoBuilder()
.title(“派大星在线图书室”)
.description(“派大星在线图书室”)
.termsOfServiceUrl(“”)
.version(“1.0”)
.build();
}
}
② 配置异常处理类以及响应码
对于一个项目来说,不管是使用Thymeleaf
模板渲染还是JSP
搭建的项目,配置异常处理类都是不可忽略的存在,它可以对我们的操作出现异常的业务进行精准的捕获以及反馈出来,以至于我们可以对特定的异常做出特定的处理,而避免使用户看到一些不友好的页面或场景比如:404、403
等等。而响应码的配置更是前后端分离开发的一大特点,我们在前端请求数据时可以根据后端提示的响应码来向用户显示一些友好的提示,但是响应码的设定是需要在项目启动前就要进行统一的,不能存在一个接口前端使用某个自定义响应码进行判断,而后端使用另一响应码进行判别和处理,最终会造成一些不必要的问题。
异常处理类:
@RestControllerAdvice
@Slf4j
public class RestExceptionHandler {
@ExceptionHandler(value = Exception.class)
public DataResult exception(Exception e){
log.error(“Exception====>{}”,e.getLocalizedMessage(),e);
return DataResult.getResult(BaseResponseCode.SYSTEM_ERROR);
}
@ExceptionHandler(value = BusinessException.class)
public DataResult businessException(BusinessException e){
log.error(“businessException ====>{}”,e.getLocalizedMessage(),e);
return DataResult.getResult(e.getCode(),e.getMsg());
}
/**
-
框架异常
-
@param e
-
@param
-
@return
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
DataResult methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {
log.error(“methodArgumentNotValidExceptionHandler bindingResult.allErrors():{},exception:{}”, e.getBindingResult().getAllErrors(), e);
List errors = e.getBindingResult().getAllErrors();
return createValidExceptionResp(errors);
}
private DataResult createValidExceptionResp(List errors) {
String[] msgs = new String[errors.size()];
int i = 0;
for (ObjectError error : errors) {
msgs[i] = error.getDefaultMessage();
log.info(“msg={}”,msgs[i]);
i++;
}
return DataResult.getResult(BaseResponseCode.METHOD_IDENTITY_ERROR.getCode(), msgs[0]);
}
}
系统响应码:(推荐使用枚举类型)
public enum BaseResponseCode implements ResponseCodeInterface{
/*
-
code=0: 服务器已成功处理了请求。通常,这表示服务器提供了请求的
-
code=20x: 系统主动抛出的业务异常
-
code=301: 系统异常
-
*/
SUCCESS(0,“操作成功”),
SYSTEM_ERROR(301,“系统异常,请稍后再试…”),
METHOD_IDENTITY_ERROR(201,“数据校验异常”),
ACCOUNT_LOCKED(202,“用户已被锁定”),
ACCOUNT_PASSWORD_ERROR(203,“用户密码错误”),
CAPTCHA_EXPIRED(204,“验证码已过期”),
CAPTCHA_IS_ERROR(205,“验证码错误”),
PASSWORD_IS_EMPTY(206,“密码不能为空”),
OPERATION_ERROR(207,“操作异常”),
PARAM_CAN_NOT_NULL(212,“参数不能为空”),
LIKE_BOOK_IS_EXISTS(213,“重复点赞”),
;
/*
-
响应码
-
*/
总结
在这里,由于面试中MySQL问的比较多,因此也就在此以MySQL为例为大家总结分享。但是你要学习的往往不止这一点,还有一些主流框架的使用,Spring源码的学习,Mybatis源码的学习等等都是需要掌握的,我也把这些知识点都整理起来了
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
;
/*
-
响应码
-
*/
总结
在这里,由于面试中MySQL问的比较多,因此也就在此以MySQL为例为大家总结分享。但是你要学习的往往不止这一点,还有一些主流框架的使用,Spring源码的学习,Mybatis源码的学习等等都是需要掌握的,我也把这些知识点都整理起来了
[外链图片转存中…(img-W9fzmmBj-1713674291299)]
[外链图片转存中…(img-se9qQDG4-1713674291299)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-W4kQvUwA-1713674291300)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!