当前位置: 首页 > 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…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码&#xff1a;冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...