【退役之重学Java】总结

带着一把伤心的吉他,我背井离乡
你居然想要成为别人的老婆
只有代码
不伤人心

一、深入理解 JVM 底层原理

  1. 运行时数据区域

JVM 运行时数据区域,分为栈区、堆区、方法区、程序计数器、本地方法栈
栈区存放的是变量的最浅层的值,如果是基本数据类型,存放的就是变量值,如果是引用数据类型,存放的就是其引用
堆区存放的是对象,如果对象有嵌套,那么采用链式存储
方法区里存放的是静态变量,方法字节码,类的结构信息,运行时常量池等

  1. 类加载机制

.java 文件编译产生 .class 文件,类加载器(由JVM 自身管理维护)将 ·.class` 文件加载到方法区中,生成对应的元数据
当代码运行到 new 创建对象时,就使用方法区内的元数据,在堆里创建对象

  1. GC
    1. 堆的分区

young: S1, S2, Edge,
old
2. 具体过程
对象在 Edge 中产生,当 Edge 快满了,就做一次 GC,将 存活的独享放入 S1,当 Edge 又一次满了,将 S1 和 Edge 做一次 GC,这样 S1 和 S2 交替和 Edge 做 GC
将存活六次以上的对象放入 old
当 old 快满了,做一次 full GC(整个 JVM 阻塞)

  1. JMM

每个线程都有自己的工作内存
线程间的变量传递通过主内存完成
工作内存存放的是变量的副本

  1. Synchronized
    Synchronized 是 Java 中用于实现同步的关键字。当一个方法或代码块被 Synchronized 修饰时,它将具有互斥访问的特性,即同一时间之允许一个线程访问该方法或代码块。这可以防止多个线程同时访问共享资源而导致数据不一致或竞态条件的问题。在 Java 中,Synchronized 关键字可以实现方法级别的同步,也可以用于同步代码块。通过 synchronize 关键字,可以确保线程安全性,避免数据竞争和并发问题。
  2. volatile
    volatile 是Java 中的一个关键字,用于修饰变量。当一个变量被声明为volatile 时,表示该变量是易变的,任何对该变量的读写操作都将直接在主内存中进行,二不会被缓存到线程的工作内存中。volatile 关键字可以确保多个线程之间对变量的可见性,即一个线程对 volatile 变量的修改对及其他县城是可见的。baolatile关键字适用于一些特定的场景,如标识位,但不能确保原子性,在多线程编程中,volatile 关键字可以用于确保线程的可见性,但对于符合操作,扔需要结合Synchronized 等机制来保证线程安全性。
  1. AQS
    抽象的队列同步器,是实现锁和其他同步器的重量级基础性框架。加了锁,多线程中就会有阻塞情况,有阻塞就需要排队,AQS 使用 CLH 来实现排队,有个 int 类型的状态标志变量,使用 volatile 修饰,让其多线程可见,使用 CAS 保证其原子性
  2. 线程池
    线程池是一种管理和复用线程的机制,可以提高多线程应用程序的性能和效率。在 Java 中,线程池是通过 java.util.concurrent.Executor 框架来实现的。线程池包含一组预先创建的此案成,这些县城可以重复使用来执行多个任务,而不需要频繁地创建和销毁线程,从而减少了线程创建和销毁的开销。
    Java 中的线程池有多种类型,常见的包括:
  1. Cached Thread Pool:根据需要创建新县城,并在线程空间一段时间后回收,适用于短生命周期的异步任务。
  2. Fixed Thread Pool:固定数量的线程池,适用于需要控制并发线程数量的场景。
  3. Single Thread Pool:只有一个工作线程的线程池,适用于需要按顺序执行任务的场景
  4. Scheduled Thread Pool:用于定期执行或周期性执行任务的线程池

JVM 调优

堆内存设置:通过调整-Xms和-Xmx参数来设置初始堆大小和最大堆大小,避免频繁的堆内存扩展和收缩。

垃圾回收器选择:根据应用程序的特性选择合适的垃圾回收器,如串行回收器、并行回收器、CMS回收器或G1回收器。

永久代大小设置:对于JDK8及更早版本,可以通过-XX:MaxPermSize参数来设置永久代大小,而对于JDK9及更新版本,永久代已被元数据区(Metaspace)取代,可以通过-XX:MaxMetaspaceSize参数来设置元数据区大小。

GC日志:通过启用GC日志(-Xloggc:filename)来监控垃圾回收情况,分析GC行为并进行优化。

调整新生代和老年代比例:通过调整-XX:NewRatio参数来设置新生代和老年代的比例,根据应用程序的内存使用情况进行调优。

并发标记:对于CMS和G1回收器,可以通过-XX:+UseConcMarkSweepGC和-XX:+UseG1GC来启用并发标记,减少停顿时间。

线程栈大小:根据应用程序的需求和线程数量,适当调整线程栈大小,避免栈溢出。

mysql 底层原理

  1. 事务隔离级别
  1. 读未提交

允许事务读取未提交的数据,会有很多问题:脏读,不可重复读,幻读

  1. 读提交

允许事务读取提交的数据,避免了脏读问题,但会有不可重复读,幻读问题

  1. 可重复读

通过快照机制,一定程度上解决了不可重复读和幻读问题,但没有彻底解决,是 mysql 默认的隔离级别

  1. 串行化

解决了不可重复读问题和幻读问题

  1. InnoDB 引擎
  1. 行级锁定
  2. MVCC 多版本并发控制
    ReadView 相当于一套坐标系统,记录当前事务在当前系统状态喜爱,事务所处的位置,以及此时系统中存在的事务,与其他事务在时间轴上的关系,依靠ReadView 机制,保证事务的准确回滚
    若 row_trx_id【在数据表的数据行中】小于 min_trx_id【事务ReadView中】,则此数据早已经存在,并由其他事务提交,则当前事务能读到【时间轴原理】
    如果当前数据的 row_trx_id 大于等于 max_trx_id,则表示在当前事务开启后,过了一段时间,体统中有新的事物开启了,并且新的事物修改了这行数据并提交了事务,所以当前事务肯定读不到。简而言之,row_trx_id 大于 max_trx_id 表示,当前事务开启之后又有一个事务开启了并修改了数据,所以当前事务读不到最新数据,只能沿着版本连往回查找自己能读到的版本数据。
    row_trx_id 在 m_ids 中,表示更新此数据的事务,在本事务创建时就已经存在并且处于未提交状态,既然未提交,那么本事务就无法读取到这个版本的数据
    如果不在m_ids 中,哈哈,那就说明,更改此数据的事务已经提交了,所以是能够读取到的。(读提交事务隔离级别下会出现此情况)
  1. 覆盖索引

覆盖索引是指一个索引包含了查询语句中涉及的所有字段,使得查询可以直接从索引中获取所需的数据,而不必再去访问实际的数据行。这样的索引能够减少数据库的IO操作,提高查询性能。覆盖索引通常用于查询中只涉及索引列的情况,通过避免访问实际数据行,加快查询速度。

  1. SQL 优化

索引优化:合理创建索引可以加快查询速度。确保在经常用于查询条件和连接条件的列上创建索引,避免过多或不必要的索引。

避免使用SELECT:只选择需要的列,避免使用SELECT * 查询所有列,可以减少数据传输和提高查询效率。

优化查询条件:避免在WHERE子句中使用函数或表达式,这会导致索引失效。尽量使用索引列进行条件过滤。

合理使用JOIN:选择合适的JOIN类型,如INNER JOIN、LEFT JOIN、RIGHT JOIN等,避免多表连接时产生笛卡尔积。

分页查询优化:对于大数据量的分页查询,使用合适的分页方式,如LIMIT offset, size或ROWNUM进行分页,避免全表扫描。

避免嵌套查询:尽量避免嵌套查询,可以考虑使用JOIN来替代子查询,提高查询效率。

定期分析执行计划:通过分析SQL执行计划,了解SQL语句的执行情况,优化慢查询,提高查询性能。

缓存查询结果:对于一些静态数据或频繁查询的数据,可以考虑使用缓存技术,减少数据库查询压力。

深入理解 Spring、Spring MVC、MybatisPlus、Spring Boot等开源框架的设计原理和底层架构

Spring框架:Spring框架是一个轻量级的Java开发框架,主要用于企业级应用程序的开发。其设计原理包括控制反转(IoC)和面向切面编程(AOP)。Spring的核心是IoC容器,通过IoC容器管理Java对象的生命周期和依赖关系。Spring还提供了许多模块,如Spring MVC用于构建Web应用程序,Spring JDBC用于数据库访问等。

Spring MVC:Spring MVC是Spring框架中的一个模块,用于构建基于MVC(Model-View-Controller)模式的Web应用程序。它包括前端控制器(DispatcherServlet)、处理器映射器(HandlerMapping)、处理器适配器(HandlerAdapter)等组件,通过这些组件实现请求的分发和处理。

MybatisPlus:MybatisPlus是MyBatis框架的增强工具,简化了MyBatis的使用。它提供了代码生成器、通用Mapper、分页插件等功能,帮助开发人员简化数据库操作和提高开发效率。

Spring Boot:Spring Boot是Spring框架的一个子项目,用于简化Spring应用程序的搭建和部署。Spring Boot提供了自动配置、嵌入式Web服务器、Actuator监控等功能,使得开发人员可以快速构建独立的、生产级别的Spring应用程序。

熟悉 Spring Cloud 微服务架构的设计原理,如服务注册、发现、降级、熔断、限流等

熟悉 Redis 核心数据使用场景

  1. String: 用于缓存 kv 键值对
  2. hash: 用于缓存对象,将对象转换为 json 形式,使用 RestTemplate 进行存储操作
  3. list:
    有序列表,这个可玩性很高,比如,可以通过list 存储一些 列表型的数据结构,蕾西粉丝列表,文章评论之类的东西,比如可以通过 lrange 命令,从某个元素开始读取多少个元素,尅基于 list 实现 分页查询,这是一个很棒的功能,基于 redis 实现简单的高性能分页,可以做类似微博那种下拉不断页的东西,一页一页走。
  4. set:
    无序列表,自动去重,可以做集合操作,查看共同粉丝等
  5. sorted set:
    去重但排序,可以自定义排序规则,比如排行榜。

缓存雪崩:大量数据同时失效,恰好遇上大量请求,导致去请求数据库了
解决方案:随机设置过期时间,避免大量数据同时失效
缓存穿透:某个或某些数据失效,恰好遇上大量请求,导致去请求数据库了
解决方案:使用互斥锁,对相同的请求,保证只有一个线程能访问数据库,其他线程等待结果,从缓存里获取,避免大量请求同时查询数据库

熟悉消息中间件

  1. 为什么要使用 消息中间件
    解耦,异步,削峰
  2. 如何保证高可用
    镜像集群模式
  3. 如何处理消息丢失问题
    生产者设置channel 为 confirm 模式
    MQ设置消息和队列持久化
    消费者手动确认
  4. 异步确认发布
    mq 维护一个 map(消息 ID+内容)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/18799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git新电脑下载配置记录

1、官网下载 2、安装 3、配置 (1)先生成密钥 ssh-keygen -t rsa -C “XXXqq.com” (2)生成两个文件,复制.pub,在GitHub的setting里面设置ssh, (3)验证远程是否配置成功 ssh -T g…

Python轻量级的插件框架库之pluginbase使用详解

概要 在软件开发中,插件系统是一个常见的需求。插件系统允许开发者动态加载和卸载功能模块,从而提高应用程序的灵活性和可扩展性。Python的pluginbase库是一个轻量级的插件框架,旨在简化插件系统的构建过程。pluginbase库提供了一套简单易用的API,使开发者能够快速集成插件…

【408真题】2009-23

“接”是针对题目进行必要的分析,比较简略; “化”是对题目中所涉及到的知识点进行详细解释; “发”是对此题型的解题套路总结,并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材(2025版&…

Windows电脑高颜值桌面便利贴,便签怎么设置

在这个看颜值的时代,我们不仅在衣着打扮上追求时尚与美观,就连电脑桌面也不愿放过。一张唯美的壁纸,几款别致的小工具,总能让我们的工作空间焕发出不一样的光彩。如果你也热衷于打造高颜值的电脑桌面,那么,…

探索智能零售的未来商机与运营策略

探索智能零售的未来商机与运营策略 在智能零售的广阔图景中,无人售货机加盟赫然矗立为一股不可小觑的力量,预示着零售业态未来的转型与机遇。其核心优势多维展开,具体阐述如下: 1. **全天候服务**:无人售货机的运行跨…

优思学院:什么是DMADV模式?和DMAIC有何区别?

在现代企业管理中,质量管理是一项至关重要的工作。六西格玛管理法作为一种高效的质量管理方法,已在全球范围内得到了广泛应用。它不仅在制造业中发挥了巨大的作用,在服务业和其他行业中也同样表现出了强大的生命力。六西格玛管理法主要有两种…

SQL 语言:触发器

文章目录 基本概述创建触发器更改和删除触发器总结 基本概述 存储过程,类似于高阶语言的函数或者方法,包含SQL语句序列,是可复用的语句,保存在数据库中,在服务器中执行。特点是复用,提高了效率&#xff0c…

B3956 [GESP202403 三级] 字母求和

[GESP202403 三级] 字母求和 题目描述 小杨同学发明了一种新型密码,对于每一个小写英文字母,该小写字母代表了一个正整数,即该字母在字母顺序中的位置,例如字母 a 代表了正整数 1 1 1,字母 b 代表了正整数 2 2 2&a…

【30天精通Prometheus:一站式监控实战指南】第10天:blackbox_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

亲爱的读者们👋   欢迎加入【30天精通Prometheus】专栏!📚 在这里,我们将探索Prometheus的强大功能,并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。🚀   Prometheus是云原生和DevOps的…

Java——执行流程

一、执行流程 1、示例 //第一个Java程序 public class Hello{public static void main(String[] args){System.out.println("Hello World!");} } 编译: 执行: 我们可以看到这里的是类名,而不是字节码文件名 Hello.class &#…

通过 coze 快速构建自己的智能体机器人

通过 coze 快速构建自己的智能体机器人 coze 的使用 一)coze 是什么 「Coze 扣子」AI Bot 开发平台。任何用户都可以快速、低门槛地搭建自己的 Chatbot,且平台支持用户将其一键发布到飞书、微信公众号、豆包等渠道。 二)coze 怎么注册 1. …

【网络层】ICMP 因特网控制协议

文章目录 ICMP 含义以及作用ICMP协议解析结合ICMP协议和ping常见问题 ICMP 含义以及作用 ICMP:Internet control massage protocol 因特网控制协议 Internet控制报文协议ICMP是网络层的一个重要协议。 ICMP协议用来在网络设备间传递各种差错和控制信息,…

js 不同源的情况下 iframe还可以通讯吗

是的。即使在不同源的情况下,iframe之间仍然可以通过postMessage API进行通信。postMessage方法允许来自不同源的脚本采用异步方式进行有限的通信,这对于实现跨域通信非常有用。 基本原理 发送消息:使用window.postMessage方法从一个窗口向另…

QT6.2.4 MSVC2019 连接MySql5.7数据库,无驱动问题

1.下载 查询一下数据库驱动 qDebug()<<QSqlDatabase::drivers(); 结果显示&#xff0c;没有QMYSQL的驱动。 QList("QSQLITE", "QMARIADB", "QODBC", "QPSQL") MySql6.2.4驱动下载地址&#xff0c;如果是别的版本&#xff0c;…

在 OpenKylin 上安装 Docker

在 OpenKylin 上安装 Docker 可能会遇到与 Ubuntu 略有不同的包管理问题。以下是一个更详细的过程&#xff0c;确保你能正确添加 Docker 仓库并安装 Docker&#xff1a; 1. 确保系统更新 首先&#xff0c;更新系统包索引&#xff1a; sudo apt-get update2. 安装必要的依赖包…

用易查分制作研学活动报名,支持在线签名,一键导出报名统计表格!

学校组织研学活动时&#xff0c;需要家长扫码在线填写报名信息&#xff0c;确认安全承诺和手写签名&#xff0c;提交报名后希望分配报名号&#xff0c;应该如何实现&#xff1f; 易查分的新建填表功能就可以实现上述需求&#xff0c;下面就来教大家如何制作吧。 &#x1f4cc;使…

【LORA协议栈】工作记录

一、硬件资源 MCU型号&#xff1a;STM32F401xE。Lora芯片&#xff1a;SX1276。硬件看门狗。ATT7022E三相电能专用计量芯片。 二、功能简介 作为一个组件&#xff0c;通过485与网关或者各种子设备连接在一起。支持boot升级。通过SPI与LORA芯片通信。接收和发送数据。有3路通信…

Java设计模式-活动对象与访问者

活动对象 Java设计模式中&#xff0c;活动对象是指一个对象始终处于活动的状态&#xff0c;该对象包括一个线程安全的数据结构以及一个活跃的执行线程。 如上所示&#xff0c;ActiveCreature类的构造函数初始化一个线程安全的数据结构&#xff08;阻塞队列&#xff09;、初始化…

Mac | Mac M 芯片应用意外退出问题

现象问题 电脑配置&#xff1a;MacBook Pro M1&#xff0c;系统 Sonoma 很多小伙伴新买了 M 芯片的 MacBook&#xff0c;在下载下应用后进行安装&#xff0c;安装成功后却无法打开&#xff0c;提示意外退出。报错如图 原因 部分应用过适配了 M 芯片&#xff0c;但还是有些应…

乡村振兴与农业科技创新:加大农业科技研发投入,推动农业科技创新,促进农业现代化和美丽乡村建设

一、引言 在当代中国&#xff0c;乡村振兴已成为国家发展的重要战略之一。作为国民经济的基础&#xff0c;农业的发展直接关系到国家的稳定和人民的福祉。随着科技的不断进步&#xff0c;农业科技创新在推动农业现代化和美丽乡村建设中发挥着越来越重要的作用。本文旨在探讨如…