当前位置:网站首页>ARTS_20220628
ARTS_20220628
2022-07-04 15:43:00 【cswh】
ARTS 第 1 周
每周完成一个ARTS: Algorithm:每周做一个 leetcode 的算法题 Review:阅读并点评写作一篇英文技术文章 Tip:学习至少一个技术技巧 Share:分享一篇有观点和思考的技术文章。
Table of Contents
- Algorithm 二分查找
- Review JVM导读———解释Java虚拟机架构
- Tip 正则表达式,替换空格和注解
- Share 计算机科普课程推荐
Algorithm
704. 二分查找
题目描述:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
public class 二分查找_704 {
public static void main(String[] args) {
int[] nums = new int[]{-1,0,3,5,9,12};
int target = 9;
System.out.println(search(nums, target));
nums = new int[]{-1,0,3,5,9,12};
target = 2;
System.out.println(search(nums, target));
}
public static int search(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while (left <= right) {
int mid = (right - left) / 2 + left;
int num = nums[mid];
if (num == target) {
return mid;
} else if (num > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
}
时间复杂度:O(logn),其中 n是数组的长度。
空间复杂度:O(1)O(1)。
Review
JVM Tutorial - Java Virtual Machine Architecture Explained for Beginners
JVM导读——为初学者解释Java虚拟机架构,JVM(Java虚拟机)是Java生态系统的核心,使得软件程序能够“一次编写,随处运行”,JVM最初设计仅为了支持JAVA,后面随着时间推移,还支持了Scala、Kotlin和Groovey。这篇文章中,作者介绍了JVM的工作原理和它的各种组件。
什么是虚拟机?
虚拟机是物理计算机的虚拟表示,一台物理机可以运行多个虚拟机,每个虚拟机都有自己的操作系统和应用程序,这些虚拟机彼此隔离。
evernotecid://3E6433C6-011C-425E-8C4F-812D1500C164/appyinxiangcom/25583646/ENResource/p4599
什么是 Java 虚拟机?
在 C 和 C++ 等编程语言中,代码首先被编译成特定于平台的机器代码。这些语言称为编译语言(compiled languages)。
另一方面,在 JavaScript 和 Python 等语言中,计算机直接执行指令而无需编译它们。这些语言称为解释语言(interpreted languages)。
Java 结合了这两种技术。 Java代码首先被编译成字节码生成一个类.class文件。然后这个类文件由底层平台的Java虚拟机解释。相同的类文件可以在任何平台和操作系统上运行的任何版本 JVM上执行。
与虚拟机类似,JVM 在主机上创建一个隔离空间。该空间可用于执行 Java 程序,而与机器的平台或操作系统无关
Java 虚拟机架构
JVMb包括3个不同组件:
- Class Loader (类加载器)
- Runtime Memory/Data Area (运行时内存/数据区)
- Execution Engine (执行引擎) evernotecid://3E6433C6-011C-425E-8C4F-812D1500C164/appyinxiangcom/25583646/ENResource/p4600
image.png
类加载器 Class Loader
类加载过程分为三个阶段:加载(loading)、链接(linking)和初始化(initialization)。
evernotecid://3E6433C6-011C-425E-8C4F-812D1500C164/appyinxiangcom/25583646/ENResource/p4601
运行时内存/数据区Runtime Memory/Data Area
运行时数据区域内有五个组件,如下图
evernotecid://3E6433C6-011C-425E-8C4F-812D1500C164/appyinxiangcom/25583646/ENResource/p4602
执行引擎 Execution Engine
一旦字节码被加载到主内存中,并且运行时数据区域中的详细信息可用,下一步就是运行程序。执行引擎通过执行每个类中存在的代码来处理这个问题。
但是,在执行程序之前,需要将字节码转换为机器语言指令。 JVM可以为执行引擎使用解释器(Interpreter)或JIT 编译器。
evernotecid://3E6433C6-011C-425E-8C4F-812D1500C164/appyinxiangcom/25583646/ENResource/p4603
Java Native Interface (JNI)
Java支持通过Java本机接口 (JNI) 执行本机代码。
本机方法库(Native Method Libraries)是用其他编程语言(例如 C、C++ 和汇编语言)编写的库。这些库通常以 .dll 或 .so 文件的形式存在。这些本机库可以通过 JNI 加载。
总结:
作者在本文中讨论了 Java 虚拟机的体系结构及其各种组件。通常我们不会深入研究 JVM 的内部机制,也不会关心代码运行时它是如何工作的。只有当出现问题并且我们需要调整 JVM 或修复内存泄漏时,我们才会尝试了解其内部机制。
这也是一个非常流行的面试问题,无论是初级还是高级后端职位。深入了解 JVM 可以帮助您编写更好的代码并避免与堆栈和内存错误相关的陷阱。
Tip
使用VS code或者IDEA时,如果需要删除代码中的注释或者空格,可使用如下正则表达式
//格式注释,正则表达式
(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/|[ \t]*//.*)
空行,正则如下
^\s*(?=\r?$)\n
Share
分享一门计算机科普课程,十分钟课程系列:计算机科学
边栏推荐
- Chow Tai Fook fulfills the "centenary commitment" and sincerely serves to promote green environmental protection
- CocosCreator事件派发使用
- PingCode 性能测试之负载测试实践
- 手里10万元存款买什么理财产品收益最高?
- [Acwing] 58周赛 4489. 最长子序列
- Solution of dealer collaboration system in building materials industry: empowering enterprises to build core competitiveness
- Blood spitting finishing nanny level series tutorial - play Fiddler bag grabbing tutorial (2) - first meet fiddler, let you have a rational understanding
- 安信证券属于什么档次 开户安全吗
- 利用win10计划任务程序定时自动运行jar包
- 《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(2)-初识Fiddler让你理性认识一下
猜你喜欢
矿产行业商业供应链协同系统解决方案:构建数智化供应链平台,保障矿产资源安全供应
整理混乱的头文件,我用include what you use
利用win10计划任务程序定时自动运行jar包
CocosCreator事件派发使用
"Cannot initialize Photoshop because the temporary storage disk is full" graphic solution
The 18th IET AC / DC transmission International Conference (acdc2022) was successfully held online
2022年国内云管平台厂商哪家好?为什么?
7 RSA密码体制
Congratulations to Mr. Zhang Pengfei, chief data scientist of artefact, for winning the campaign Asia tech MVP 2022
离线、开源版的 Notion—— 笔记软件Anytype 综合评测
随机推荐
R language plot visualization: plot visualization of multiple variable violin plot in R with plot
一加10 Pro和iPhone 13怎么选?
被PMP考试“折磨”出来的考试心得,值得你一览
第十八届IET交直流輸電國際會議(ACDC2022)於線上成功舉辦
斑马识别成狗,AI犯错的原因被斯坦福找到了丨开源
Redis 的内存淘汰策略和过期删除策略的区别
Linear time sequencing
完美融入 Win11 风格,微软全新 OneDrive 客户端抢先看
长城证券安全不 证券开户
Is it safe to open an account online
关于nacos启动时防火墙开启8848的坑
Chow Tai Fook fulfills the "centenary commitment" and sincerely serves to promote green environmental protection
周大福践行「百周年承诺」,真诚服务推动绿色环保
Developers, MySQL column finish, help you easily from installation to entry
Years of training, towards Kata 3.0! Enter the safe container experience out of the box | dragon lizard Technology
Go language loop statement (under Lesson 10)
[unity ugui] scrollrect dynamically scales the grid size and automatically locates the middle grid
leetcode刷题目录总结
R语言plotly可视化:plotly可视化多分类变量小提琴图(multiple variable violin plot in R with plotly)
Implementation of super large-scale warehouse clusters in large commercial banks