- 博客(21)
- 收藏
- 关注
原创 JVM--方法区学习笔记
方法区 方法区在逻辑上是堆的一部分,但在具体实现上不强制方法区的位置,不同的虚拟机厂 商可以有不同的实现 如 JDK1.8 之前使用永久代实现,1.8 后使用元空间实现 方法区在 JVM 启动时创建它是所有线程所共享的 方法区用于存储类的结构: 运行时常量池(含字符串常量)、静态变量、类的信息、常量。 类信息: 魔数,版本号,常量池,类(字段和方法),父类和接口数组,字段,方法等 信息 方法区是 JVM 中的一个规范、永久带和元空间是方法区的两个不同实现 JVM 内存模型不同版本间的..
2022-03-25 16:59:07
1180
原创 一篇了解JVM——堆Heap学习笔记
一、核心概述 通过new关键字创建的对象都会使用堆内存 它是线程共享的,堆中对象都需要考虑线程安全问题 堆,是GC(Garbage Collection,垃圾收集器)执行垃圾回收的重点区域 《Java虚拟机规范》中对java堆的描述是:所有的对象实例以及数组都应当在运行时分配在堆上。 从实际使用的角度看,“几乎”所有的对象的实例都在这里分配内存 (‘几乎’是因为可能存储在栈上) 数组或对象永远不会存储在栈上,因为栈帧中保存引用,这个引用指向对象或者数组在堆中的位置 在方法结束...
2022-03-25 16:01:27
858
原创 虚拟机栈中常见混淆问题解析
1、垃圾回收是否涉及栈内存 不涉及,垃圾回收只会回收堆内存中的内存占用,栈内存不需要 栈帧运行完会自动出栈 2、栈内存分配越大越好吗 不是,栈内存设置的越大,线程数就越小 (物理内存是一定的) 3、方法内的局部变量是否线程安全 如果方法局部变量没有逃离方法的作用访问,他是线程安全的 如果是局部变量引用了 对象,并逃离方法的作用方法,需要考虑线程安全 ...
2022-03-23 16:59:43
690
原创 虚拟机栈笔记
一、虚拟机栈概述 1、背景 由于跨平台的设计,java指令都是根据栈来设计的。不同平台cpu架构不同,所以不能设计基于寄存器的。 优点是跨平台,指令集小,编译容易实现 缺点是性能下降,实现同样的功能需要更多的指令 2、内存中的堆与栈 栈 运行时的单位 解决程序运行的问题,即程序如何执行,或者说如何处理数据。 存放基本数据类型的局部变量,以及引用数据类型的对象的引用 堆 是存储单位 解决数据存储的问题,即数据怎么放,放在哪 对象主要放在堆空间的,是运行时数据区...
2022-03-23 14:47:35
1436
原创 2、什么是程序计数器Program Counter Register
一、概念 JVM中的程序计数寄存器(Program Counter Register),Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。JVM中的PC寄存器是对屋里PC寄存器的一种抽象模拟 二、作用 PC寄存器是用来存储指向下一条指令的地址,也即将将要执行的指令代码。由执行引擎读取下一条指令。 三、特点 它是一块很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域 在jvm规范中,每个线程都有它自..
2022-03-22 20:14:52
1388
原创 1、什么是JVM?
定义: Java Virtual Machine - java 程序运行的环境(java二进制字节码 的运行环境) 好处: 一次编写,到处运行 自动内存管理,垃圾回收功能 数组下标越界 越界检查 多态 比较:jvm jre jdk
2022-03-22 17:51:07
573
原创 二叉树我真的掌握了吗?再再实践一道面试题
第六天搜索与回溯算法(简单) 剑指 Offer 32 - III. 从上到下打印二叉树 III 难度中等 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。 例如: 给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], [20,9], [15,7] ..
2022-03-22 17:44:54
103
原创 二叉树我真的掌握了吗?再实践一道面试题
第 6 天搜索与回溯算法(简单) 剑指 Offer 32 - II. 从上到下打印二叉树 II 难度简单 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], [9,20], [15,7] ] 思路: 建议先做面试题32 - I. 从上到下打印二叉树再做...
2022-01-27 21:50:39
110
原创 二叉树我真的掌握了吗?实践一道面试题
面试题32 - I. 从上到下打印二叉树 难度中等 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 例如: 给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回: [3,9,20,15,7] 思路: 题目要求的二叉树的从上至下打印(即按层打印),又称为二叉树的广度优先搜索(BFS)。 BFS 通常借助队列的先入先出特性来实现。 题解: /** ...
2022-01-27 21:15:55
139
原创 剑指 Offer 50. 第一个只出现一次的字符
第五天查找算法 剑指 Offer 50. 第一个只出现一次的字符 难度简单 在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。 示例 1: 输入:s = "abaccdeff" 输出:'b' 示例 2: 输入:s = "" 输出:' ' 知识补充: 字符串长度较大、重复字符很多时,“有序哈希表” 解法理论上效率更高。 HashMap HashMap 散列式,键值对 数组+单向链表
2022-01-27 20:12:37
127
原创 11.旋转数组的最小数字
排序数组的查找问题首先考虑使用 二分法 解决,其可将 遍历法 的 线性级别 时间复杂度降低至 对数级别 。 字符串长度较大、重复字符很多时,“有序哈希表” 解法理论上效率更高。
2022-01-27 18:58:07
125
原创 找出数组中重复的数字。
第 4 天查找算法(简单) 剑指 Offer 03. 数组中重复的数字 难度简单 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 题解: 解题思路: 利用数据结构特点,容易想到使用哈希表(Set)记录数组的各个数字,当查找到重复数..
2022-01-24 16:46:59
610
原创 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
第 4 天查找算法(简单) 剑指 Offer 53 - II. 0~n-1中缺失的数字 难度简单 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。 示例 1: 输入: [0,1,3] 输出: 2 示例2: 输入: [0,1,2,3,4,5,6,7,9] 输出: 8 题解: 解题思路: 排序数组中的搜索问题,首先想到二分法解决。 ...
2022-01-24 16:04:06
3649
原创 【无标题】
第 4 天查找算法(简单) 剑指 Offer 53 - I. 在排序数组中查找数字 I 难度简单 统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums = [ 5,7,7,8,8,10] , target = 8 输出: 2 示例2: 输入: nums = [ 5,7,7,8,8,10] , target = 6 输出: 0 题解: 解题思路: 排序数组中的搜索问题,首先想到二分法解决。 初始化: 左边界 i = 0,右边界 j...
2022-01-24 15:55:52
367
原创 左旋转字符串
第 3 天字符串(简单) 剑指 Offer 58 - II. 左旋转字符串 难度简单 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 示例 1: 输入: s = "abcdefg", k = 2 输出:"cdefgab" 示例 2: 输入: s = "lrloseumgh", k = 6 输出:"umghlrlose" ..
2022-01-22 18:21:12
141
原创 实现一个函数,把字符串 s 中的每个空格替换成“%20“。
第 3 天字符串(简单) 剑指 Offer 05. 替换空格 难度简单 请实现一个函数,把字符串s中的每个空格替换成"%20"。 示例 1: 输入:s = "We are happy." 输出:"We%20are%20happy." 题解: class Solution { public String replaceSpace(String s) { StringBuilder str=new StringBuilder(); for..
2022-01-22 16:23:36
804
原创 【无标题】
第 2 天链表(简单) 剑指 Offer 24. 反转链表 难度简单 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 题解:俩种方法 (1)迭代(双指针) /** * Definition for singly-linked list. * public class ListNode { *
2022-01-21 23:43:56
488
原创 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
第 2 天链表(简单) 剑指 Offer 06. 从尾到头打印链表 难度简单 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 题解: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) {
2022-01-21 22:20:36
978
原创 一把王者荣耀的时间打卡剑指 Offer简单入门题
剑指 Offer 09. 用两个栈实现队列 难度简单 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 ) 示例 1: 输入: ["CQueue","appendTail","deleteHead","deleteHead"] [[],[3],[],[]] 输出:[null,null,3,-1] 题解: class C...
2022-01-20 15:44:12
476
原创 剑指 Offer每日打卡
第 1 天栈与队列(简单) 剑指 Offer 30. 包含min函数的栈 难度简单 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。 示例: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.min(); --> 返回 -3. min.
2022-01-20 15:38:04
327
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅