2024 java大厂面试复习总结(二)(持续更新)

embedded/2024/11/30 4:04:44/

10年java程序员,2024年正好35岁,2024年11月公司裁员,记录自己找工作时候复习的一些要点。

JVM

说一下 JVM 运行时数据区

  • 程序计数器(Program Counter Register):当前线程所执行的字节码的行号指示器,字节码解
    析器的工作是通过改变这个计数器的值,来选取下一条需要执行的字节码指令,分支、循环、跳
    转、异常处理、线程恢复等基础功能,都需要依赖这个计数器来完成;
    为什么要线程计数器?因为线程是不具备记忆功能
  • Java 虚拟机栈(Java Virtual Machine Stacks):每个方法在执行的同时都会在Java 虚拟机栈中创
    建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息;
    栈帧就是Java虚拟机栈中的下一个单位
  • 本地方法栈(Native Method Stack):与虚拟机栈的作用是一样的,只不过虚拟机栈是服务 Java
    方法的,而本地方法栈是为虚拟机调用 Native 方法服务的;
    Native 关键字修饰的方法是看不到的,Native 方法的源码大部分都是 C和C++ 的代码
  • Java 堆(Java Heap):Java 虚拟机中内存最大的一块,是被所有线程共享的,几乎所有的对象实
    例都在这里分配内存;
  • 方法区(Methed Area):用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。

常用的 JVM 调优的参数都有哪些?

#常用的设置
-Xms:初始堆大小,JVM 启动的时候,给定堆空间大小。
-Xmx:最大堆大小,JVM 运行过程中,如果初始堆空间不足的时候,最大可以扩展到多少。
-Xmn:设置堆中年轻代大小。整个堆大小=年轻代大小+年老代大小+持久代大小。
-XX:NewSize=n 设置年轻代初始化大小大小
-XX:MaxNewSize=n 设置年轻代最大值
-XX:NewRatio=n 设置年轻代和年老代的比值。如: -XX:NewRatio=3,表示年轻代与年老代比值为 1: 3,年轻代占整个年轻代+年老代和的 1/4
-XX:SurvivorRatio=n 年轻代中 Eden 区与两个 Survivor 区的比值。注意 Survivor 区有两个。8 表示两个Survivor :eden=2:8 ,即一个Survivor占年轻代的1/10,默认就为8
-Xss:设置每个线程的堆栈大小。JDK5后每个线程 Java 栈大小为 1M,以前每个线程堆栈大小为 256K。
-XX:ThreadStackSize=n 线程堆栈大小
-XX:PermSize=n 设置持久代初始值
-XX:MaxPermSize=n 设置持久代大小
-XX:MaxTenuringThreshold=n 设置年轻带垃圾对象最大年龄。如果设置为 0 的话,则年轻代对象不经 过 Survivor 区,直接进入年老代。
#下面是一些不常用的
-XX:LargePageSizeInBytes=n 设置堆内存的内存页大小
-XX:+UseFastAccessorMethods 优化原始类型的getter方法性能
-XX:+DisableExplicitGC 禁止在运行期显式地调用System.gc(),默认启用
-XX:+AggressiveOpts 是否启用JVM开发团队最新的调优成果。例如编译优化,偏向锁,并行年老代收集 等,jdk6纸之后默认启动
-XX:+UseBiasedLocking 是否启用偏向锁,JDK6默认启用
-Xnoclassgc 是否禁用垃圾回收
-XX:+UseThreadPriorities 使用本地线程的优先级,默认启用 等等等…

 JVM的GC收集器设置

  • -xx:+Use xxx GC

  • xxx 代表垃圾收集器名称

-XX:+UseSerialGC:设置串行收集器,年轻带收集器
-XX:+UseParNewGC:设置年轻代为并行收集。可与 CMS 收集同时使用。JDK5.0 以上,JVM 会根据系统
配置自行设置,所以无需再设置此值。
-XX:+UseParallelGC:设置并行收集器,目标是目标是达到可控制的吞吐量
-XX:+UseParallelOldGC:设置并行年老代收集器,JDK6.0 支持对年老代并行收集。
-XX:+UseConcMarkSweepGC:设置年老代并发收集器
-XX:+UseG1GC:设置 G1 收集器,JDK1.9默认垃圾收集器

mysql


http://www.ppmy.cn/embedded/141649.html

相关文章

英语知识网站开发:Spring Boot框架应用

3系统分析 3.1可行性分析 通过对本英语知识应用网站实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本英语知识应用网站采用SSM框架,JAVA作为开发语…

.cc扩展名是什么语言?主流编程语言扩展名?C语言必须用.c为扩展名吗?为什么看到Windows好多系统文件名的扩展名不超过3字符?

.cc扩展名是什么语言? .cc是C语言使用的扩展名,一种说法是它是c with class的简写,当然C语言使用的扩展名不止.cc和.cpp, 还包含.cxx, .c, .C等,这些在不同编译器系统采用的默认设定不同,需要区分使用。当然,编译器提…

RabbitMQ高级特性:TTL、死信队列与延迟队列

RabbitMQ高级特性:TTL、死信队列与延迟队列 RabbitMQ作为一款开源的消息代理软件,广泛应用于分布式系统中,用于实现消息的异步传递和系统的解耦。其强大的高级特性,包括TTL(Time-To-Live)、死信队列&#…

数据库学习记录03

DML【数据操作语言】 DQL是对数据的查操作,DML就是操作:增、删、改。数据库的基础操作就是:增删改查(CRUD); 1.插入(增) #语法1 insert into 表名(字段名1,...) values(值1,...);#语法2 insert into 表名(…

本地化部署 私有化大语言模型

本地化部署 私有化大语言模型 本地化部署 私有化大语言模型Anaconda 环境搭建运行 代码概述环境配置安装依赖CUDA 环境配置 系统设计与实现文件处理与加载文档索引构建模型加载与推理文件上传与索引更新实时对话与文档检索Gradio 前端设计 主要功能完整代码功能说明运行示例文件…

Docker安装ubuntu1604

首先pull镜像 sudo docker run -d -P m.daocloud.io/docker.io/library/ubuntu:16.04国内使用小技巧: https://github.com/DaoCloud/public-image-mirror pull完成之后查看 sudo docker images 运行docker sudo docker run -d -v /mnt/e:/mnt/e m.daocloud.io/…

面向对象高级-抽象类、接口

一、final 1、认识final关键字 final关键字是最终的意思,可以修饰:类、方法、变量。 修饰类:该类被称为最终类,特点是不能被继承了。(一般是用在工具类中) 修饰方法:该方法被称为最终方法&a…

SQLModel与FastAPI结合:构建用户增删改查接口

SQLModel简介 SQLModel是一个现代化的Python库,旨在简化与数据库的交互。它结合了Pydantic和SQLAlchemy的优势,使得定义数据模型、进行数据验证和与数据库交互变得更加直观和高效。SQLModel由FastAPI的创始人Sebastin Ramrez开发,专为与FastA…