0%

java内存结构

​ 了解java的内存结构,能够更好地理解程序的调用,内存结构主要有: 栈、堆、方法区、程序计数器。可以看图。比较简陋,看懂就行

java

##### 虚拟机栈

​ 虚拟机栈,存放方法中的局部变量、方法的出口和入口等,我们程序从主方法进入会开辟一个栈,里面存放程序的局部变量等等,当主方法又调用另外一个方法时,会重新在栈空间中开辟一块新的栈。。。

​ 当调用一个方法时,叫做入栈,而当方法调用完之后,会出栈,从而开辟的那块栈空间会被销毁。

​ 例如下面这个程序

1
2
3
4
5
6
7
8
9
10
11
12
public class Test {
public static void main(String[] args) {
int a = 1;
int b = 2;
Test t = new Test();
int sum = t.add(a,b);
}

public int add(int a, int b) {
return a + b;
}
}

当启动程序时,会开辟一块主方法的栈,而当执行到add方法时,会在开辟一块区域。而执行完毕之后会销毁,最后直至程序结束

stack

阅读全文 »

1 两数之和

​ 经典力扣第一题,求两数之和。给定一个整形数组,并给定一个target值,判断在数组中是否存在两个元素,它们的和等于给定的target值,并返回这两个数组的下标。

​ 例:

1
2
输入: nums = [2, 7, 11, 15], target = 9
输出: indexes = [0, 1]
#### 1.1 暴力解法

​ 用双重循环来遍历数组,取出一个数组元素,并与后面的每一个元素进行相加然后比较是否与target相等,如果相等则直接返回当前元素的下标,否则返回null。 看代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public int[] twoSum(int target, int[] nums) {
//存放返回数组的下标
int[] indexes = new int[2];
for (int i = 0; i < nums.length - 1; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] == target) {
indexes[0] = i;
indexes[1] = j;
return indexes;
}
}
}

return null;
}
}

​ 上面算法可以达到题目要求,但是时间复杂度比较高,两层循环,时间复杂度为O(n^2)。可以优化

1.2 使用map

​ 使用一个map来存放数据,for循环遍历数组,并判断当前遍历的元素,target-当前元素的值,是否存在在map中,如果存在,说明找到了两个数相加 == target。如果不存在,就放入map中

阅读全文 »

舒芙蕾和妈妈一起去医院洗澡。。

果然是母女俩。。

cat


cat


cat

阅读全文 »

今天周末,在巷子里面发现了一只在觅食的橘猫。很小很小,本来已经回去了,最后还是下定决心把他带回去。

​ 最后还是找到了它,才两个月不到大,是一只异瞳猫。。。第二天带她去医院。。。

cat

太瘦弱了,连做检查抽血都抽不出来。。。


一个多星期以后。。。太小了,在外面吃了不干净的东西。。

已经恢复不过来了。。

给他取名叫做 柴富富。。。

富富回喵星了。。。。

希望来生,它可以做一只被人疼爱的猫,不用担心吃喝。。。

阅读全文 »

柴妙妙生了孩子

​ 最后给妙妙配种了,生了一大群猫崽子。其中留下了一只,取名叫做舒芙蕾

cat

因为疫情原因,还是很担心的, 不能去医院,最后还是都平安。。


后来舒芙蕾长大了。。。

两个月。。

cat

四五个月。。。

cat

阅读全文 »

我的猫

​ 陪伴了我大三的柴妙妙。那时候才只有五个月大

cat

记录可爱的小小的柴妙妙

cat

那时候在武汉,住在小小的单间里面,估计也很无聊吧。。。等着人回家,自己晒太阳。

cat

阅读全文 »