当前位置: 首页 > news >正文

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

1. JVM

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

1.1 什么是JVM

jvm是Java虚拟机

1.2 Java文件的编译过程

  1. 程序员编写代码形成.java文件
  2. 经过javac编译成.class文件
  3. 再通过JVM的类加载器进入运行时数据区
    在这里插入图片描述

1.3 什么是运行时数据区

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

  1. 方法区

  2. 线程私有的:
  3. 程序计数器
  4. 本地方法栈
  5. java虚拟机栈
  1. java虚拟机是线程私有的,它的生命周期和线程相同
  2. 每个方法在执行的同时会创建一个栈帧用于存储局部变量、操作数栈、动态链接、方法出口灯信息
    在这里插入图片描述

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实现类里面的方法和属性
这都是基于反射机制所实现的

相关文章:

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

1. JVM 文章仅为自身笔记 详情查看一篇文章掌握整个JVM,JVM超详细解析!!! 1.1 什么是JVM jvm是Java虚拟机 1.2 Java文件的编译过程 程序员编写代码形成.java文件经过javac编译成.class文件再通过JVM的类加载器进入运行时数据…...

python的web学习(一)-初识django

文章目录 软件创建项目默认项目文件说明App的概念(应用)apps.py编写URL和视图函数对应关系【urls.py】编写视图函数【views.py】启动服务 软件 python下载 django下载 创建项目 django-admin startproject 文件名默认项目文件说明 项目名 manage.py(项目管理,启…...

JavaWeb+jsp+Tomcat的叮当书城项目

点击以下链接获取源码: https://download.csdn.net/download/qq_64505944/88123111?spm1001.2014.3001.5503 技术:ssm jsp JDK1.8 MySQL5.7 Tomcat8.3 源码数据库课程设计 功能:管理员与普通用户和超级管理员三个角色,管理员可…...

【嵌入式Linux系统开发】——系统移植概述

目录 🍉🍉一、什么是嵌入式系统 🍉🍉二、嵌入式系统操作 🍉🍉三、嵌入式Linux的特点 🍉🍉四、嵌入式系统的组成 1、硬件和软件 2、硬件层 3、中间层 4、软件层 5、 功能层与执…...

升讯威在线客服系统是如何实现对 IE8 完全完美支持的(怎样从 WebSocket 降级到 Http)【干货】

简介 升讯威在线客服与营销系统是基于 .net core / WPF 开发的一款在线客服软件,宗旨是: 开放、开源、共享。努力打造 .net 社区的一款优秀开源产品。 完整私有化包下载地址 💾 https://kf.shengxunwei.com/freesite.zip 当前版本信息 发布…...

用VMware给运行在VMware上的CentOS7生成一个以SSH方式连接VMware上的CentOS7的运行在Windows上的命令行窗口

2023年7月27日,周四早上 目录 一个发现生成方法如果上面的方法连接失败,就采取这个方法 一个发现 今天早上无意间发现VMware可以生成一个以SSH方式连接着CentOS7的Windows命令行窗口, 这样做可以带来一定的便利性 : 方便复制、…...

C语言基础-3

1、函数 函数是C语言代码的基本组成部分,它是一个小的模块,整个程序由很多个功能独立的模块(函数)组成。这就是程序设计的基本分化方法。 main:C语言中所谓的主函数,主函数就是一种特别的函数。特别之处在于…...

Python 编程规范进阶(1) | 命名规范

养成良好的开发、编程习惯 跟着google开源项目走 https://github.com/google/styleguide 近期Target: 命名规范; Pythonic 积累 按照需求写需要的API; 写前先动脑子,比如画流程图,测试接口; Google 推荐的P…...

算法----二叉搜索树中第K小的元素

题目 二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 示例 1: 输入:root [3,1,4,null,2], k 1 输出&#xff…...

阿里Java开发手册~安全规约

1. 【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。 说明: 防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信 内容、修改他人的订单。 2. 【强制】用户敏感数据禁止直接展示,必须对展示数据进…...

消息中间件RabbitMQ——学习笔记

❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…...

爬虫005_python类型转换_其他类型转换为整型_转换为Float类型_转换为字符串_转换为布尔值---python工作笔记023

首先来看,字符串转换成int 很简单 float转换成int 会把小数点后面的内容丢掉 boolean转换为int true是1 false 是0 然后字符串转换为int,要注意 不能有特殊字符比如1.23 中有点 就报错 上面字符串12ab,有ab也报错 看上面...

SpringBoot复习:(5)使用PropertySource注解

一、自定义的一个配置文件 age33 nameliu二、实体类 package com.example.demo.domain;public class Student {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {retur…...

webrtc 支持H265(三) 总结

文章目录 web端的解码及渲染的实现应用场景单向视频流的场景datachannel通道的稳定性解码性能 双向视频流的场景有音频流的场景 web端的解码及渲染的实现 在前面的文章中介绍了ZLMediaKit的修改方法,在web端的播放器可以参照这个实现,基于wasm H265播放…...

Windows使用Notepad++编辑Linux服务器的文件

🚀 Windows使用Notepad编辑Linux服务器的文件 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介…...

升级你的数据采集引擎 使用多线程与代理池提升HTTP代理爬虫性能

在信息爆炸的时代,海量数据的采集和分析成为了企业发展和决策的关键。本文将分享如何通过多线程和代理池的应用,助您升级数据采集引擎,提高数据获取效率和稳定性。 HTTP代理爬虫作为数据采集的重要工具,其性能直接影响着数据采集…...

flask实现一个登录界面

flask实现一个登录界面 基础的Flask项目结构 forms.py:定义登录表单和表单字段的文件。templates/login.html:用于渲染登录表单的 HTML 模板文件。routes.py:定义应用的路由和视图函数的文件。__init__.py:创建并初始化 Flask 应…...

redis的四种模式优缺点

redis简介 Redis是一个完全开源的内存数据结构存储工具,它支持多种数据结构,以及多种功能。Redis还提供了持久化功能,可以将数据存储到磁盘上,以便在重启后恢复数据。由于其高性能、可靠性和灵活性,Redis被广泛应用于…...

maven本地仓库地址修改+maven国内镜像设置+maven运行所需pos.xml文件配置基本写法

1,maven本地仓库地址修改 maven在使用过程中,本地项目仓库其空间占用会越来越大,但是其默认仓库位置往往是以C盘为主,C盘作为系统盘常常会遇到所在盘空间占满的情况,所以我们将其改至其他硬盘空间位置为适合做法&#…...

Jenkins集成SonarQube保姆级教程

Jenkins是自动化部署平台,一个粗眉大眼的糙汉子! SonarQube是代码扫描平台,一个眉目清秀的小女子! 有一天,上天交给我一个任务,去撮合撮合他们! 我抬头看了看天, 不,…...

接口测试中缓存处理策略

在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

【HTTP三个基础问题】

面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线, n r n_r nr​ 根接收天线的 MIMO 系…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)

Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...