考虑一下代码的输出结果
Number n1 = 1L;
Number n2 = 1;
System.out.println(n1==n2);
原因:通过将n1和n2的class打印出来,你会发现 n1是被包装为了 java.lang.Long,n2被包装为了 java.lang.Integer, 所以它俩并不相等。
两个不同的jar包中含有相同全限定名的class文件时,能否编译通过?程序能否正常执行?
强一致性,弱一致性,最终一致性
-
强一致性:系统中的某个数据被成功更新后,后续任何对该数据的读取操作都将得到更新后的值;
-
弱一致性:系统中的某个数据被更新后,后续对该数据的读取操作可能得到更新后的值,也可能是更改前的值。但经过“不一致时间窗口”这段时间后,后续对该数据的读取都是更新后的值;
-
最终一致性:是弱一致性的特殊形式,存储系统保证在没有新的更新的条件下,最终所有的访问都是最后更新的值。
ConcurrentHashMap 是弱一致性的 参考, 而且 ConcurrentHashMap 在迭代时如果数据被修改,也不会抛出异常(其他集合则会抛出ConcurrentModificationException)
考虑以下代码的输出结果:
@Test
public void concurrentHashMapTest() {
Map<String, Integer> map = new ConcurrentHashMap<>();
map.put("key1",1);
map.put("key2",2);
map.put("key3",3);
for (Map.Entry<String, Integer> en : map.entrySet()) {
map.remove("key2");
System.out.println(en.getKey());
}
}
设计一个函数 f(),每次调用时,返回最近5min内的调用次数
log文件中有格式如下,shell命令获取前10的
方法中获得当前方法的名称
Thread.currentThread() .getStackTrace() 可以获取到整个线程执行的执行链调用信息。
Thread.currentThread() .getStackTrace() 方法返回的信息中,第一个信息是对 getStackTrace() 这个方法的调用信息,所以如果要获取当前执行的main()方法的方法名,则是getStackTrace()返回信息中的第二个元素,即下标为1的元素信息。
public static void main(String[] args) {
// 获得当前类名
String clazz = Thread.currentThread() .getStackTrace()[1].getClassName();
// 获得当前方法名
String method = Thread.currentThread() .getStackTrace()[1].getMethodName();
System.out.println(method);
}
Integer.MAX_VALUE+1 是多少
(1«31)-1 = Integer.MAX_VALUE
Integer.MAX_VALUE+1 相当于 最高位变为了1, 其余位全是0,由于最高位是符号位,这样算的话,也就是 -0,但是在计算机里面,-0 和 0 重复了,所以用 -0 来表示负数的最小值,所以 Integer.MAX_VALUE+1 = Integer.MIN_VALUE,这也就是为什么 负数的范围比正数范围多一个的原因。同理 (byte)(Byte.MAX_VALUE+1) = Byte.MIN_VALUE
rabbitmq是推模式还是拉模式
默认是推模式,也可选择使用拉模式
项目中遇到的问题
- CPU 100% 问题排查
- 偶发性 频繁FGC 问题排查
- 数据reshard追数据问题
short s1 = 1; s1 = s1 +1;有错吗?short s1 = 1; s1 += 1;有错吗?
答:short s1 = 1; s1 = s1 + 1是错的,s1 + 1在运算过程中1是int类型,s1是short类型,向高的转,结果为int类型,所以这里需要强转,而 s1 += 1是正确的,因为jvm自动帮我们处理好了
面试问题
https://juejin.im/post/5c813c185188250f03184e1d#heading-4