第一次后端复习整理(JVM、Redis、反射)

这篇具有很好参考价值的文章主要介绍了第一次后端复习整理(JVM、Redis、反射)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. JVM

文章仅为自身笔记
详情查看一篇文章掌握整个JVM,JVM超详细解析!!!

1.1 什么是JVM

jvm是Java虚拟机

1.2 Java文件的编译过程

  1. 程序员编写代码形成.java文件
  2. 经过javac编译成.class文件
  3. 再通过JVM的类加载器进入运行时数据区
    第一次后端复习整理(JVM、Redis、反射),后端复习,jvm,redis,反射

1.3 什么是运行时数据区

就是我们java运行时的东西的存放区域
其中分为五个模块
线程共享的:

  1. 方法区

  2. 线程私有的:
  3. 程序计数器
  4. 本地方法栈
  5. java虚拟机栈
  1. java虚拟机是线程私有的,它的生命周期和线程相同
  2. 每个方法在执行的同时会创建一个栈帧用于存储局部变量、操作数栈、动态链接、方法出口灯信息
    第一次后端复习整理(JVM、Redis、反射),后端复习,jvm,redis,反射

1.4 JVM的垃圾回收机制

垃圾回收机制简称GC
GC主要管理的是Java的堆,Java中的堆是JVM管理的最大的一块内存空间,主要用于存放各种类的实例对象

1.4.1 垃圾回收机制是什么

当程序运行时会产生大量的内存垃圾,为了保证程序运行时的性能,JVM在程序运行时不断的自动进行垃圾回收(GC)
GC是不定时的去清理堆内存中不可达对象(也就是不再引用的对象)。垃圾回收器在java中的执行是自动的,不能强制执行,即使程序员通过 System.gc() 进行手动回收垃圾,也只是建议执行,是否执行是不可知的
手动执行GC

System.gc();

1.4.2 Minor GC 、Major GC 、Full GC区别以及触发条件

  1. Minor GC 是新生代GC。GC频繁,回收速度也比较快
  2. Major GC 是老年代GC。通常之星Major GC 会连着Minor GC一起执行。Major GC的速度要比Minor GC的速度慢的多
  3. Full GC 是清理整个堆空间,包括年轻代和老年代
    Minor GC 触发条件一般为:
  • Eden区满时触发Minor GC,即申请一个对象,发现Eden区不够用时,触发一次Minor GC
  • 新建对象大小 > Eden区所剩空间
    Major GC 和 Full GC 触发条件一般为:
  • 每次晋升到老年代的平均大小 > 老年代剩余空间
  • Minor GC后存活的对象超过了老年代空间
  • 永久代空间不足
  • 执行 System.gc()
  • CMS GC异常
  • 堆内存分配很大的对象

1.5 垃圾回收机制策略

  1. 引用计数法
  2. 标记-清除算法
  3. 标记-整理算法
  4. 复制算法
  5. 分代算法

2. Redis

2.1 Redis 数据类型

Redis是键值对(key-value)存储,所以它的数据类型指的value的数据类型
主要包括常见的5种数据类型,分别是:String 、Hash 、List 、Set 、Zset

2.2 应用场景

  1. 缓存
    • 我们可以通过Redis将数据缓存,提高数据响应速度,减少数据库压力
  2. 计数器
    • 日常生活中,我们使用的软件,如抖音的点赞、收藏可以使用Redis完成
  3. 排行榜
    • 我们可以使用 sorted set 和一个计算热度的算法打造一个热度排行榜,例如微博的热点

2.3 常见问题

2.3.1 雪崩、穿透、击穿

雪崩
出现雪崩的情况有两种

  1. Redis宕机

解决方法: 搭建集群。因为Redis有可能挂掉,所以多增加几台Redis实例(一主多从或者多主多从),这样一台挂掉后还有其他的可以继续工作

  1. 在某个时间段,Redis中大量的key集体过期

解决方法: 将缓存失效的时间分开。比如我们可以在原有的过期时间的基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效

从而使大量请求直接访问数据库,导致数据库崩掉
穿透
用户访问一条不存在的数据,数据在缓存中没有找到,便访问数据库。如果用户一直请求或者大量访问不存在的数据,变回给数据库造成很大的压力从而导致数据库崩掉。这便是穿透

解决方法:

  1. 在缓存中缓存空对象。当请求访问一条不存在的数据时,数据库返回一个空对象,并将这个空对象和请求相关联,当下次还是该请求,这时缓存命中,直接返回这个空对象
  2. 添加布隆过滤器。将所有可能存在的数据缓存放到布隆过滤器中,当有人访问不存在的缓存时迅速返回避免缓存和数据库挂掉

击穿
出现击穿的情况有两种

  1. 一个冷门key突然被大量用户访问
  2. 一个热门key,在缓存中时间恰好过期,这时有大量用户进行访问
    从而导致数据库压力增大而挂掉

解决方法: 常用的方法是加锁。当key过期时,给缓存和数据库加上一把锁,只允许第一个请求查询数据库,然后把数据库查到的值存储到缓存中,剩下的请求就可以从缓存中直接获取

2.3.2 多线程的情况下,如何保证缓存和数据库的数据一致

在这个问题下,我们首先会考虑两点是先改数据库还是先改缓存。

  1. 先改数据库再更新缓存
    • 会将脏读数据刷新到缓存
  2. 先改缓存再改数据库
    • 缓存更新后,数据库更新失败,则会造成数据不一致,而且用于并发问题
      所以在此问题上,我们提出了延迟双删
      什么是延迟双删
      为了保证数据的一致性,我们可以先删除缓存,再更新数据库,并在间隔一段时间后,再次删除缓存,再把数据库数据插入缓存中

为什么间隔一段时间: 间隔时间是为了让数据库保持主从一致。

3. 反射

3.1 什么是反射

反射就是在运行状态中,对于任意一个类,我们都可以知道这个类的所有属性和方法;对于任意一个对象,我们都能调用它的属性和方法
举个例子就是,黑客可以通过你的姓名来获取你的其他个人信息

3.2 使用场景

目前我们使用反射最多的地方是在框架
像Spring/Spring Boot 、MyBatis等等框架中都大量使用了反射机制

比如我们可以通过@Value这一注解获取配置文件中的值
通过@Autowired获取到一个Service实现类里面的方法和属性
这都是基于反射机制所实现的文章来源地址https://www.toymoban.com/news/detail-614966.html

到了这里,关于第一次后端复习整理(JVM、Redis、反射)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • jQuery第一次接触

    jQuery是一个轻量级js库 1.下载jquery库,网址Download jQuery | jQuery npm i jquery 2.还可以从cdn中载入jquery script src=\\\"https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js\\\" 3.j代表js,query代表查询,jQuery可以进行查询的js语言,主要用来查询html元素 4.基础语法$(selector).action(),其中selector代表要进行操

    2024年02月12日
    浏览(46)
  • docker第一次作业

    docker第一次作业 1.安装docker服务,配置镜像加速器  yum install -y yum-utils device-mapper-persistent-data lvm2 y um-config-manager --add-repo https: //mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i \\\'s+download.docker.com+mirrors.aliyun.com/docker-ce+\\\'  /etc/yum.repos.d/docker-ce.repo yum makecache fast yum -y install docke

    2024年02月12日
    浏览(44)
  • 第一次面试复盘

    这个秋招到目前为止第一次拿到了面试机会,虽然是小公司,但是人家是有官网的!!!很爱!先赶紧复盘一下,因为还有很多笔试没有复盘。 你们的数学建模解决了什么问题?你觉得你们为什么能拿到这个成绩 说下对java这门语言的了解 它是一种面向对象的编程语言,所以

    2024年01月22日
    浏览(47)
  • 新学期第一次课

    在信息化飞速发展的今天,大数据技术的应用日益广泛,其重要性也日益凸显。对于大数据学院的同学来说,掌握行业前沿技术是至关重要的。本篇文章将详细指导同学们如何加入QQ群、云班课,并学会使用思维导图和CSDN博客。 我们有两个QQ群,分别是2021计应1班行业前沿技

    2024年02月10日
    浏览(43)
  • 树莓派第一次开机

    树莓派由英国的树莓派基金会发行,旨在通过发行这个廉价开源的可随意破解的微型计算机,推动中小学编程教育,发行之后很快在全世界的开源创客圈中流行。截止到2018年10月,最新版本的树莓派主板是3B+,国内某宝上卖230元左右,还有更微型的树莓派主板Zero,国内某宝卖

    2024年02月13日
    浏览(51)
  • 第一次作业

    作业内容:1,atd和crond的区别                   2,指定在2023/08/26 09:00将时间写入testmail.txt文件中                   3,指定在每天凌晨4:00将该时间点之前的系统日志信息备份到个目录下(/var/log/messages ),备份后日志文件名显示格式logfileYY-MM-DD HH-MM 1、运行方式不同

    2023年04月20日
    浏览(45)
  • java第一次作业(二)

     思路: 运用expression的字符串输出 重点: expression输出 代码: 知识点: expression输出 思路: 充分运用两个for循环,一个掌控行数,一个掌控输出的数字 代码: 知识点: 输入 数字所占空格 换行 思路: 这种复杂的配凑问题,不要去想枚举去解,充分利用for循环语句 像这题

    2024年04月11日
    浏览(77)
  • java第一次作业(一)

    知识点: 考查java的输入格式以及for循环 java格式 注意Main与main 代码: 知识点: for循环 数组 /输入数组 /数组比大小 代码: 知识点: println与print区别:println是输完之后转行 重点: 多重for循环 代码: 知识点: 调用函数 booean函数 重点: Scanner输入 代码: 知识点: 最后又有

    2024年03月25日
    浏览(64)
  • Java第一次blog

    7-1 答题判题程序-1 这些题目主要用到 对象与类的处理: 对象是现实世界或抽象概念中的实体在计算机程序中的表示。 类则是具有相同属性和方法的对象的集合,是创建对象的模板。通过类,我们可以定义一类对象的共同特征和行为。 1. 字符串处理: 需要对输入的题目信息

    2024年04月22日
    浏览(53)
  • 数据库第一次作业

    1.创建一个英雄表 create table t_hero (      id int primary key auto_increment,      name varchar(10) unique not null,      gender char(5) check (gender in (\\\'男\\\',\\\'女\\\')),      grade char(5) default \\\'5星\\\',      `groups` char(5) check (`groups` in (\\\'毁灭\\\',\\\'巡猎\\\',\\\'智识\\\',\\\'存护\\\',\\\'虚无\\\',\\\'丰饶\\\')),      tel char(11)   default \\\'

    2024年01月18日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包