- 有效括号
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
char[] charArray = s.toCharArray();//转化成数组
for (char ch : charArray) {
//如果是左括号则直接入栈
if (ch == '(' || ch == '{' || ch == '[') {
stack.push(ch);
} else {
//如果是右括号,并且此时栈不为空
if (!stack.isEmpty()) {
if (ch == ')') {
if (stack.pop() != '(')
return false;
} else if (ch == '}') {
if (stack.pop() != '{')
return false;
} else {
if (stack.pop() != '[')
return false;
}
}
else{ //此时栈为空,但却来了个右括号,也直接返回false
return false;
}
}
}
return stack.isEmpty();
}
}
- Java运行时数据区都有哪几块组成
线程共享:方法区、堆
线程独享:虚拟机栈、本地方法栈、程序计数器
- 类加载过程
- 加载阶段:主要负责查找并且加载类的二进制数据文件(class文件)
- 连接阶段:连接阶段做的比较多,细分为三个阶段:
验证:主要确保文件的正确性,比如class的版本,class的魔术因子是否正确
准备:为类的静态变量分配内存,并且为其初始化默认值
解析:把类中的符号引用转换为直接引用- 初始化阶段:为类的静态变量赋予正确的初始值(代码编写阶段赋予的值)
- gc的理解
首先是堆内存的了解分为了年轻代(eden区、两个幸存区s0和s1)、老年代、永久代;其次是垃圾回收过程中的算法(可达性分析算法、程序计数法)以及minor gc 和full gc,以及对象的晋升过程。