分享
这次面试我也做了一些总结,确实还有很多要学的东西。相关面试题也做了整理,可以分享给大家,了解一下面试真题,想进大厂的或者想跳槽的小伙伴不妨好好利用时间来学习。学习的脚步一定不能停止!
Spring Cloud实战
Spring Boot实战
面试题整理(性能优化+微服务+并发编程+开源框架+分布式)
🏆学习方向:JAVA后端开发
📣种一棵树最好的时间是十年前,其次是现在!
⏰往期文章:SpringBoot项目整合微信支付
🧡喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。
前言:
1.前面基于Springboot的单体项目介绍已经完结了,至于项目中的其他功能实现我这里就不打算介绍了,因为涉及的知识点不难,而且都是简单的CRUD操作,假如有兴趣的话可以私信我我再看看要不要写几篇文章做个介绍。
2.完成上一阶段的学习,我就投入到了微服务的学习当中,所用教程为B站上面黑马的微服务教程。由于我的记性不是很好,所以对于新事物的学习我比较喜欢做笔记以加强理解,在这里我会将笔记的重点内容做个总结发布到“微服务学习”笔记栏目中。我是赵四,一名有追求的程序员,希望大家能多多支持,能给我点个关注就更好了。
一: 同步&异步
1.同步与异步的概念
在进行问题探讨之前,我们有必要先了解一下什么是同步什么是异步。先来个官方点的说法:同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)。同步,就是调用某个东西是,调用方得等待这个调用返回结果才能继续往后执行。异步,和同步相反 调用方不会理解得到结果,而是在调用发出后调用者可用继续执行后续操作,被调用者通过状体来通知调用者,或者通过回掉函数来处理这个调用。
可能你会就得有点懵?下面我们举个简单点的例子:就好像你去买水果,发现水果卖完了,这时候水果还在来的路上,你选择等待,直到水果到了你买完才离开,这就是同步;而你知道水果卖完了,你跟店家说你要买什么然后店家到时候给你送货上门,你只是跟店家说了一句之后便离开去干其他事情了,这就是异步。
2.同步方法调用&异步方法调用
前面介绍完同步和异步的概念之后,我们要把它代入到我们的代码世界里面,在代码世界里面,同步和异步一般体现在方法调用和http请求(ajax发送异步请求)上面,这里主要介绍方法调用。
2.1:同步方法调用
所谓同步方法调用,就是一个方法A调用方法B之后,方法A必须要等待方法B执行完才能继续执行,要是方法B没执行完方法A就必须一直等待,见下图:
2.2:异步方法调用
异步方法调用指的是当方法A调用方法B之后,方法A不需要等待方法B执行完毕再去干别的事,方法A只需要发起调用请求之后便继续执行自己的程序,方法B在另外一个线程里面执行,两者互不干扰,见下图:
二:问题引入
1.功能需求
程序中我要实现的功能是作者发布文章之后线程A完成文章的保存工作,且在线程A里面要开启异步调用线程B实现文章的审核功能。部分代码如下
@Override
@Async //表明这是一个异步方法
public void AutoScanTextAndImage(Integer id) throws TencentCloudSDKException {
log.info("开始进行文章审核...");
WmNews wmNews = wmNewsService.getById(id);
if(wmNews == null) {
throw new RuntimeException("WmAutoScanServiceImpl-文章信息不存在");
}
if(wmNews.getStatus().equals(WmNews.Status.SUBMIT.getCode())) {
//1.提取文章文本及图片
Map<String,Object> map = getTextAndImages(wmNews);
//2.检测文本
//2.1提取文本
String content = ((StringBuilder) map.get("content")).toString();
//2.2调用腾讯云进行文本检测
Boolean THandleResult = handleTextScan(content, wmNews);
if(!THandleResult) return;
//3.检测图片
//3.1提取图片
List<String> imageUrl = (List<String>) map.get("images");
//3.2调用腾讯云对图片进行检测
Boolean IHandleresult = handleImageScan(imageUrl, wmNews);
if(!IHandleresult) return;
//4,审核成功
//4.1保存文章
log.info("检测到文章无违规内容");
ResponseResult responseResult = saveAppArticle(wmNews);
if(!responseResult.getCode().equals(200)) {
throw new RuntimeException("WmAutoScanServiceImpl-文章审核,保存文章失败");
}
//4.2回填article_id
wmNews.setArticleId((Long) responseResult.getData());
wmNews.setStatus(WmNews.Status.PUBLISHED.getCode());
wmNews.setReason("审核成功");
wmNewsService.updateById(wmNews);
}
}
@Autowired
private WmAutoScanService wmAutoScanService;
/**
* 提交文章
* @param dto
* @return
*/
@Override
public ResponseResult submitNews(WmNewsDto dto) throws TencentCloudSDKException {
//1.参数校验
if(dto == null || dto.getContent().length() == 0) {
return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
}
//2.保存或修改文章
//2.1属性拷贝
WmNews wmNews = new WmNews();
BeanUtils.copyProperties(dto,wmNews);
//2.2设置封面图片
if(dto.getImages() != null && dto.getImages().size() != 0) {
String images = StringUtils.join(dto.getImages(), ",");
wmNews.setImages(images);
}
//2.3封面类型为自动
if(dto.getType().equals(WemediaConstants.WM_NEWS_TYPE_AUTO)) {
wmNews.setType(null);
}
saveOrUpdateWmNews(wmNews);
//3.判断是否为草稿
if(dto.getStatus().equals(WmNews.Status.NORMAL.getCode())) {
//直接保存结束
return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
# **最后**
分享一些系统的面试题,大家可以拿去刷一刷,准备面试涨薪。
**这些面试题相对应的技术点:**
* JVM
* MySQL
* Mybatis
* MongoDB
* Redis
* Spring
* Spring boot
* Spring cloud
* Kafka
* RabbitMQ
* Nginx
* ......
**大类就是:**
* Java基础
* 数据结构与算法
* 并发编程
* 数据库
* 设计模式
* 微服务
* 消息中间件
![程序员,每个月给你发多少工资,你才会想老板想的事?](https://img-blog.csdnimg.cn/img_convert/d54a8878a9452588f9385179bf82ecde.webp?x-oss-process=image/format,png)
![程序员,每个月给你发多少工资,你才会想老板想的事?](https://img-blog.csdnimg.cn/img_convert/cc249285197e755d587bdef5e6ceba44.webp?x-oss-process=image/format,png)
![程序员,每个月给你发多少工资,你才会想老板想的事?](https://img-blog.csdnimg.cn/img_convert/58fdd14de9f57b19c097a5973f0a9aa3.webp?x-oss-process=image/format,png)
![程序员,每个月给你发多少工资,你才会想老板想的事?](https://img-blog.csdnimg.cn/img_convert/1ddc756def83ea1a75cfe56faa166126.webp?x-oss-process=image/format,png)
![程序员,每个月给你发多少工资,你才会想老板想的事?](https://img-blog.csdnimg.cn/img_convert/8af16ce9758dd40538a9e4323ba9f79f.webp?x-oss-process=image/format,png)
![程序员,每个月给你发多少工资,你才会想老板想的事?](https://img-blog.csdnimg.cn/img_convert/be11f4f2d91ca5a556963b0416fea69c.webp?x-oss-process=image/format,png)
![程序员,每个月给你发多少工资,你才会想老板想的事?](https://img-blog.csdnimg.cn/img_convert/d6c7840a3a4d2438ae0c18ec18351b5a.webp?x-oss-process=image/format,png)
![程序员,每个月给你发多少工资,你才会想老板想的事?](https://img-blog.csdnimg.cn/img_convert/97cd053f0c701737d21d3f8d4b214121.webp?x-oss-process=image/format,png)
![程序员,每个月给你发多少工资,你才会想老板想的事?](https://img-blog.csdnimg.cn/img_convert/74493e5c7cf2e8d904f848d8499a030c.webp?x-oss-process=image/format,png)
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**
**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**
**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**