【面试】二、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也有以下缺点:
- 占用CPU资源(线程的收集)
- 无法处理浮动垃圾(在并发清理的阶段仍然有新的垃圾生成)
- 需要预留出足够的内存
- 产生大量内存碎片(标记-清除算法)
封装关键词
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 领域的前沿问题,…...
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…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
