@Service
public class PersonService {
//这里我们首先自定义一个类和对想, 将这个对象保存在缓存中
static class Person{
public String name;
public int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
private static Person person = new Person(“listen”, 21);
//缓存的查询 并将查到的数据保存至缓存中
@Cacheable(cacheNames = “person”, key = “#id”)
public Object getPersonById(int id) throws InterruptedException {
//我通过id查询我的person 如果此时缓存中没有这个id对应的person就会进行查询
System.out.println(“进入查询…”);
//方便我们演示如果进入查询我们多等待3秒
TimeUnit.SECONDS.sleep(3);
if (id == 1) {
return person;
}
return “Id错误…”;
}
//修改这个id绑定的对象的属性
@CachePut(cacheNames = “person”, key = “#id”)
public Object updatePerson(int id, String newName) {
System.out.println(“进入修改方法…”);
if (id == 1) {
person.name = newName;
return person;
}
return “Id错误…”;
}
//删除缓存
@CacheEvict(cacheNames = “person”, key = “#id”)
public boolean delPerson(int id) {
return id == 1;
}
}
编写触发代码
package listen.example3.serviceDemo.personController;
import listen.example3.serviceDemo.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
-
Created with IntelliJ IDEA.
-
Description: If you don’t work hard, you will a loser.
-
User: Listen-Y.
-
Date: 2020-08-23
-
Time: 15:54
*/
@RestController
@RequestMapping(value = “per”)
public class PersonController {
//注入对象
@Autowired
private PersonService personService;
//演示获取缓存
@RequestMapping(value = “get”)
public Object getPerson(int id) throws InterruptedException {
return personService.getPersonById(id);
}
//演示修改
@RequestMapping(value = “update”)
public Object updatePerson(int id, String newName) {
return personService.updatePerson(id, newName);
}
//演示删除
@RequestMapping(value = “del”)
public Object delPerson(int id) {
return personService.delPerson(id);
}
}
- 最后运行项目使用postman访问就会发现有缓存的好处
简述原理
- Cache本质上是用conCurrentMap的数据结构实现, 其key便是缓存的cacheName value便是我们的#id中的id, 可以有效节约数据库资源, 加速程序的查询效率
定时任务:顾名思义,定时执⾏的任务我们称之为定时任务。它包含了两层含义,第⼀是定时,第⼆是 任务。也就是说预计某个时间去执⾏某件事的这个⾏为就被称之为定时任务。
为什么需要定时任务?
定时任务的作⽤:防⽌错过某项重要的任务。
开启定时任务功能
package listen.example3;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableCaching //开启缓存的注解
@EnableScheduling //开启定时任务的注解
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
编写定时任务的代码
package listen.example3.serviceDemo;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
-
Created with IntelliJ IDEA.
-
Description: If you don’t work hard, you will a loser.
-
User: Listen-Y.
-
Date: 2020-08-23
-
Time: 16:21
*/
@Component //表示这是一个组件
public class SchedulingService {
//下面的cron表达式表示不管何时何月何年从启动开始 每三秒执行一次
//每位代表含义:秒 分钟 ⼩时 ⽇ ⽉ 周 年
@Scheduled(cron = “0/3 * * * * ?”)
public void schedule() {
System.out.println(“定时任务执行中…”);
}
}
cron表达式
cron 表达式可以是 6 位或者是 7 位,每个位置从左到右代表的含义如下:
最后运行代码就会发现定时任务的存在
简述定时任务原理
SpringBoot 在初始化 bean 之后,通过拦截器(postProcessAfterInitialization)拦截到所有⽤到 @Scheduled 注解的⽅法,再将这些⽅法放⼊到定时任务列表中,然后按照顺序执⾏这些定时任务。 定时任务的执⾏细节是,先解析 cron 表达式,获取到定时任务下次执⾏的时间,然后放⼊线程中等到对 应的时间到了之后进⾏执⾏,之后会按照执⾏的频次,定时执⾏这些任务。
常用cron表达式
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
总结
以上是字节二面的一些问题,面完之后其实挺后悔的,没有提前把各个知识点都复习到位。现在重新好好复习手上的面试大全资料(含JAVA、MySQL、算法、Redis、JVM、架构、中间件、RabbitMQ、设计模式、Spring等),现在起闭关修炼半个月,争取早日上岸!!!
下面给大家分享下我的面试大全资料
- 第一份是我的后端JAVA面试大全
后端JAVA面试大全
- 第二份是MySQL+Redis学习笔记+算法+JVM+JAVA核心知识整理
MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理
- 第三份是Spring全家桶资料
MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
64512254)]
后端JAVA面试大全
- 第二份是MySQL+Redis学习笔记+算法+JVM+JAVA核心知识整理
[外链图片转存中…(img-zc8YebbU-1712764512255)]
MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理
- 第三份是Spring全家桶资料
[外链图片转存中…(img-EjX2gJNO-1712764512255)]
MySQL+Redis学习笔记算法+JVM+JAVA核心知识整理
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-y9yKBbEh-1712764512255)]