java实例对象存储位置
java实例对象存储位置在java内存模型中,运行时数据区是java程序得以运行至关重要的区域,主要的作用就是将字节码文件写入内存中,方便后续执行引擎的调用。而运行时数据区分为五个板块,程序计数器,java虚拟机栈,本地方法栈,java堆以及方法区。
程序计数器是一块比较小的内存区域,主要是充当着字节码文件的信号指示器,线程的分支、循环、异常跳出、恢复运行都是依靠着程序计数器对其发号指令。在多线程运行中,实际上就是多个线程不断切换获取cpu执行任务,而每次切换都需要将自己线程的状态存储,就是存储在程序计数器中,因此每一个线程都有其自己私有的程序计数器,程序计数器也是唯一一块没有规定OutOfMemoryError情况的区域。
虚拟机栈也是每个线程私有的,是每个线程方法执行的内存模型,线程在方法执行中,会生成一个栈帧,栈帧里边存储着局部变量表,操作数栈,动态链接,方法出口。线程每一个方法的执行,就是栈帧在虚拟机栈中入栈出栈的过程。因为每个线程执行的方法不同,因此每一个虚拟机栈都是私有的,其生命周期与线程相同。
在栈中放入超过虚拟机要求的长度,就会发生StackOverflowError ...
牛客NC3 链表中环的入口结点
牛客NC3 链表中环的入口结点题目如下:
主要思想就是首先利用快慢指针判断是否有环,如果有环,再根据下面的思想让快指针重头开始走,慢指针继续走,走到相遇就是环入口结点的地方:
代码如下:
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead) {
ListNode ft = pHead;
ListNode fast = pHead;
ListNode slow = pHead;
while(fast != null && fast.next != null){
fast = fast.next.next;
slow = slow.next;
if(fast == slow){
while(slow != ft){
slow = slow.next;
...
Leetcode37题,解数独
Leetcode37:解数独编写一个程序,通过填充空格来解决数独问题。
数独的解法需 遵循如下规则:
数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用 ‘.’ 表示。
主要思想的话就是先创建三个数组来存储每一列每一行每一个块这个字符出现的情况,遍历数独,将每个位置存在的数存入数组,将’.’所在的行列存入一个数组集合。之后调用递归,来对每一个’.’位置的字符进行尝试,如果尝试失败,则进行回溯。题解如下:class Solution {
private boolean[][] row = new boolean[9][9];
private boolean[][] col = new boolean[9][9];
private boolean[][][] block = new boolean[3][3][9];
private boolean valid = false;
private List<in ...
Leetcode34题,寻找子元素位置
Leetcode34:在排序数组中查找元素的第一个位置和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。要求时间复杂度为logn。
主要思想的话就是寻找大于等于target值在数组中出现的位置,之后再寻找target+1出现的位置,进行判断即可,题解如下:class Solution {
public int[] searchRange(int[] nums, int target) {
int l = searchBinary(nums,target);
int r = searchBinary(nums,target + 1);
if(l == nums.length || nums[l] != target){
return new int[]{-1,-1};
}
return new int[]{l,r - 1};
}
...
KMP算法
KMP算法指的是字符串模式匹配算法,问题是:在主串T中找到第一次出现完整子串P时的起始位置。kpm算法看了几天勉强看懂,但是过了几天就完全忘了当时怎么想的,所以直接背吧!
class Kmp{
public int findSubString(String t,String p){
int[] next = getNext(p);
for(int i = 0, j = 0; i < t.length();i++){
while(j > 0 && p.charAt(i) != p.charAt(j)) j = next[j - 1];
if(p.charAt(i) == p.charAt(j)) j++;
if(j == p.length()) return i - j + 1;
}
return -1;
}
public int[] getNext(String p){
int[] n ...
寻找下一个更大序列
题目:整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。
例如,arr = [1,2,3] 的下一个排列是 [1,3,2] 。类似地,arr = [2,3,1] 的下一个排列是 [3,1,2] 。而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。给你一个整数数组 nums ,找出 nums 的下一个排列。
必须 原地 修改,只允许使用额外常数空间。
来源:力扣(LeetCode)
主要思想就是倒序寻找一个与前面数相邻是大的数(比如nums[i] > nums[i - 1])此时为了保证交 ...
博客与博主
相遇皆是缘分
为什么建博客?肿么说了! 纯属个人兴趣,好玩,唉,就是玩!嘻嘻! 会有些成就感吧,拥有一个自己的博客写一些自己感兴趣的事或物,不是一件很酷的事嘛!
展望博客我会整理一些个人所学的知识(java的学习过程以及以后学习到新的技术栈)或生活方面有兴趣的事发到博客上供大家观摩,后边找工作时也会分享一些找工作的经验。
关于博主风中追风,是我一直比较喜欢的一个词语,希望在一生不断前进的道路上,能够乘风而行,不懈怠丝毫,一直向前进,风中追风!
《自由与爱情》---作者:裴多菲
生命诚可贵
爱情价更高
若为自由故
二者皆可抛
溜溜球啦!