【面试】二、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…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
