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

【面试】二、Java补充知识

JVM中的存储

JVM的五块存储区:

  • 方法区(线程共享)

    方法区用来存储类的各种信息(类名、方法信息等)、静态变量、常量和编译后的代码也存储在方法区中

    • 方法区中也存在运行时常量池

      ​ 常量池中会存放程序运行时生成的各种字面量和引用信息

  • 虚拟机栈

    虚拟机栈由一个个的栈帧组成、每一个栈帧对应一个被调用的方法,存储局部变量、操作数、方法的返回地址等。

  • 本地方法栈

    用于管理本地方法的调用(Native标识、负责与非Java语言的交互)

  • 堆(线程共享)

    堆中存储的是程序中创建出的对象实例(类的成员变量),垃圾回收机制也是主要作用于堆

  • 程序计数器

    存放要执行的指令地址

字符串在JVM中的存储

创建一个字符串时,回先检查字符串常量池中是否存储有对应的字符串,如果有,就把这个字符串拿到并赋值给对象,如果没有那就创建一个对象并把这个字符串加到常量池中。

SpringMVC的工作流程

  • 用户通过浏览器发送一个Http请求,这个请求会被DispatcherServlet拦截

  • DispatcherServlet调用HandlerMapping找到具体的Handler和拦截器。

  • 将获取到的具体的Handler信息发送给HandlerAdapter

  • HandlerAdopter根据Handler信息找到并执行对应的请求(Controller)并进行处理

  • Handler执行完毕之后返回给HandlerAdopter一个ModelAndView对象

  • HandlerAdopter接收到ModelAndView对象之后会将该对象返回给DispatcherServlet

  • DispatcherServlet在接收到ModelAndView对象之后会使用视图解析器对视图进行解析

  • 视图解析完成之后会将View返回给DispatcherServlet

  • DIspatcherServlet在接收到视图之后会进行视图渲染并将数据注入到View中对应的域中,生成最终的View并将结果返回给浏览器。

面试需要知道的Linux指令

查看日志:tail -f filename
ls
mkdir
cd 
zip / unzip (.zip文件)
gzip / gunzip (.gz文件)
tar -c (压缩文件) / tar -x (解压文件) (.tar文件)
cp 
rm (删除空目录) rm -f(递归删除目录)

数据库索引

数据库索引是一种特殊的文件、包含着对数据库表中所有记录的引用指针

索引可以有效的提高搜索效率

没有Where的情况、使用IS NULL的情况、比较不匹配的数据类型等等时、数据库索引会失效

Java垃圾回收机制

GC是Java垃圾回收机制的关键原理,垃圾回收是JVM中的重要功能:

垃圾回收分为两个阶段:

  • 垃圾标记阶段:

    垃圾只有先被标记出来了才可以被处理、在标记阶段有两种算法:

    • 引用计数算法

      对于每一个创建出来的对象都维护一个标记(整数),每多一次引用就将标记+1、引用结束就将标记-1,直至标记为0时就将这个对象标记为垃圾。

      优点:实现简单,逻辑清楚

      缺点:每个对象都要维护一个标记,浪费空间,且无法处理循环引用(Java没有这样做)

    • 可达性分析算法(JVM)

      GC会定义GC Roots节点、GC Roots节点可以是虚拟机栈中引用的对象(局部变量)、方法区中的静态变量、常量、本地方法栈中引用的对象、被同步锁(Synchronized)持有的对象、JVM的内部引用等。GC会从这个GC roots集合中进行搜索,查看被这些变量引用的对象以及查找到的这些对象引用的对象,这些被查找到的对象就被视为非垃圾、其他的就被视为垃圾。

    在JVM中、没有GC Roots的引用会对对象进行第一次标记、对finilize()方法进行检测与调用是第二次标记,两次标记都生效后,就彻底被归为需要回收的垃圾

  • 垃圾清理阶段

    • 标记-清除算法

      标记清除算法会在堆空间耗尽时进行全盘扫描,记录标记为垃圾的内容的地址并维护一张垃圾清单,下次有新内容进入时,会直接覆盖清单上的地址。

      缺点:需要维护一个空闲地址清单。 在进行回收时需要停止整个程序。回收出来的地址空间不连续,容易造成内存碎片。

    • 复制算法

      将内存空间分为两块,正常时使用一块,在进行垃圾回收时将还存活的内容复制到另一块并清除原先的所有内容。

      注意复制算法不标记需要清除的内容,只对非垃圾进行复制。

      缺点:需要两倍的内存空间、在回收时若发生存活内容较多的情况时需要复制很多内容。

    • 标记-压缩算法

      其将所有标记为存活的对象紧凑到内存地址的一端,解决了标记-清除算法产生内存碎片的问题,但仍然会造成STW停止。

    • 分代收集算法(JVM)

      利用JVM的分代模型(JVM将堆内容分为新生代和老生代)(新生代的内容大多存活时间较短、老生代的内容存活时间较长)

      对于两个区域实行不一样的垃圾清理算法,对于新生代使用复制算法

      对于老生代使用标记-清除或者标记-复制算法

    • 同时还有:

    • 增量收集算法:垃圾回收与线程交替进行(并发),来避免STW(会增加线程切换的开销)

    • 分代算法:将整个堆空间再进行划分(控制STW的时间)

CMS收集器一致维护到JDK14、在JDK15中将CMS移除:

CMS可以实现垃圾收集的并发处理

1. 初始标记:通过GC Roots搜索所有直接关联的子节点(很短时间的STW)
2. 并发标记:进行可达性分析,找出不可达的对象(与正常线程并行执行,无STW)。
3. 重新标记:重新标记在并发标记时发生变化的对象(STW)
4. 并发清理:对垃圾进行并行的清理,即清理不影响其他线程

CMS基本实现了无STW情况的垃圾回收,但CMS也有以下缺点:

  1. 占用CPU资源(线程的收集)
  2. 无法处理浮动垃圾(在并发清理的阶段仍然有新的垃圾生成)
  3. 需要预留出足够的内存
  4. 产生大量内存碎片(标记-清除算法)

封装关键词

public:当前类、同包、子类、其他包

protected:当前类、同包、子类

缺省:当前类、同包

private:当前类

short s1 = 1; s1 = s1 + 1;	//会报错,因为会short自动转换成int(存在小转大、有损失)
short s1 = 1; s1 += 1;	//不会报错,+=会自动进行转换操作,将1转换为short(截断)

相关文章:

【面试】二、Java补充知识

JVM中的存储 JVM的五块存储区: 方法区(线程共享) 方法区用来存储类的各种信息(类名、方法信息等)、静态变量、常量和编译后的代码也存储在方法区中 方法区中也存在运行时常量池 ​ 常量池中会存放程序运行时生成的各种…...

LISTENER、TNSNAMES和SQLNET配置文件

LISTENER、TNSNAMES和SQLNET配置文件 用户连接验证listener.ora文件配置监听日志local_listener参数 tnsnames.ora文件配置 sqlnet.ora文件配置 用户连接验证 Oracle数据库中用户有三种常见的登录验证方式: 通过操作系统用户验证:必须是在数据库服务器…...

【Leetcode -225.用队列实现栈 -232.用栈实现队列】

Leetcode Leetcode -225.用队列实现栈Leetcode -232.用栈实现队列 Leetcode -225.用队列实现栈 题目:仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 …...

悟道3.0全面开源!LeCun VS Max 智源大会最新演讲

夕小瑶科技说 原创 作者 | 小戏 2023 年智源大会如期召开! 这场汇集了 Geoffery Hinton、Yann LeCun、姚期智、Joseph Sifakis、Sam Altman、Russell 等一众几乎是 AI 领域学界业界“半壁江山”的大佬们的学术盛会,聚焦 AI 领域的前沿问题&#xff0c…...

2023蓝桥杯大学A组C++决赛游记+个人题解

Day0 发烧了一晚上没睡着,感觉鼻子被打火机烧烤一样难受,心情烦躁 早上6点起来吃了个早饭,思考能力完全丧失了,开始看此花亭奇谭 看了六集,准备复习数据结构考试,然后秒睡 一睁眼就是下午2点了 挂了个…...

wkhtmltopdf踩坑记录

1. 不支持writing-mode。 需求是文字纵向排列,内容从左到右,本来用的是writing-mode: tb-rl;,插件转pdf后发现失效。 解决方法: 让每一列文字单独用一个div容器包裹,对它的宽度进行限制,控制每一行只能出现…...

贪心算法part2 | ● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

文章目录 122.买卖股票的最佳时机II思路思路代码官方题解困难 55. 跳跃游戏思路思路代码官方题解代码困难 45.跳跃游戏II思路思路代码困难 今日收获 122.买卖股票的最佳时机II 122.买卖股票的最佳时机II 思路 局部最优:将当天价格和前一天比较,价格涨…...

[C++]异常笔记

我不怕练过一万种腿法的对手,就怕将一种腿法 练一万次的对手。 什么是C的异常 在C中,异常处理通常使用try-catch块来实现。try块用于包含可能会抛出异常的代码,而catch块用于捕获并处理异常。当异常被抛出时,程序会跳过try块中未执行…...

浅谈一级机电管道设计中的压力与介质温度

管道设计是工程设计中的一个非常重要的部分,管道的设计需要考虑到许多因素,其中就包括管道设计压力分类和介质温度分类。这两个因素是在设计管道时必须非常严格考虑的, 首先是管道设计压力分类。在管道设计中,根据工作要求和要传输…...

Docker网络模型(八)使用 macvlan 网络

使用 macvlan 网络 一些应用程序,特别是传统的应用程序或监控网络流量的应用程序,期望直接连接到物理网络。在这种情况下,你可以使用 macvlan 网络驱动为每个容器的虚拟网络接口分配一个MAC地址,使其看起来像一个直接连接到物理网…...

控制视图内容的位置

文本域中的提示内容在默认情况下是垂直居中的,要改变文本在文本域中的位置,可以使用android:gravity来实现。 利用android:gravity可以指定如何在视图中放置视图内容,例如,如何在文本域中放置文本。 如果希望视图文本显示在上方&a…...

【分布式系统与一致性协议】

分布式系统与一致性协议 CAP原理APCPCA总结BASE理论 一致性拜占庭将军问题 分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。 分布式系统的设计目标一般包含如下: 可用性:可用性是分…...

音视频领域的未来发展方向展望

文章目录 音视频领域的未来发展方向全景音视频技术虚拟现实和增强现实的区别 人工智能技术可视化智能分析智能语音交互图像识别和视频分析技术 语音处理智能推荐技术远程实时通信 流媒体技术未来方向 音视频领域的未来发展方向 全景音视频技术:全景音视频技术是近年…...

时间同步/集群时间同步/在线/离线

目录 一、能够连接外网 二、集群不能连接外网--同步其它服务器时间 一、能够连接外网 1.介绍ntp时间协议 NTP(Network Time Protocol)网络时间协议,是用来使计算机时间同步的一种协议,它可以使计算机对其服务器或时钟源做同步…...

基于BP神经网络对MNIST数据集检测识别(numpy版本)

基于BP神经网络对MNIST数据集检测识别 1.作者介绍2.BP神经网络介绍2.1 BP神经网络 3.BP神经网络对MNIST数据集检测实验3.1 读取数据集3.2 前向传播3.3 损失函数3.4 构建神经网络3.5 训练3.6 模型推理 4.完整代码 1.作者…...

HTML5-创建HTML文档

HTML5中的一个主要变化是:将元素的语义与元素对其内容呈现结果的影响分开。从原理上讲这合乎情理。HTML元素负责文档内容的结构和含义,内容的呈现则由应用于元素上的CSS样式控制。下面介绍最基础的HTML元素:文档元素和元数据元素。 一、构建…...

Vue中Axios的封装和API接口的管理

一、axios的封装 在vue项目中,和后台交互获取数据这块,我们通常使用的是axios库,它是基于promise的http库,可运行在浏览器端和node.js中。他有很多优秀的特性,例如拦截请求和响应、取消请求、转换json、客户端防御XSR…...

MLIR面试题

1、请简要解释MLIR的概念和用途,并说明MLIR在编译器领域中的重要性。 MLIR(Multi-Level Intermediate Representation)是一种多级中间表示语言,提供灵活、可扩展和可优化的编译器基础设施。MLIR的主要目标是为不同的编程语言、领域专用语言(DSL)和编译器…...

***杨辉三角_yyds_LeetCode_python***

1.题目描述: 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows …...

Mac使用DBeaver连接达梦数据库

Mac使用DBeaver连接达梦数据库 下载达梦驱动包 达梦数据库 在下载页面随便选择一个系统并下载下来。 下载下来的是zip的压缩包解压出来就是一个ISO文件,然后我们打开ISO文件进入目录:/dameng/source/drivers/jdbc 进入目录后找到这几个驱动包&#x…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...