研发了这么多年,每天都在搬砖,斗转星移,从一个被面试者,成为了一个面试者。总感觉自己在面试的时候提出的问题没有一个由浅入深的感觉,总是东一个问题,西一个问题的,所以整理一些面试问题,首先是给自己扫盲,丰富自己的技术栈。其次作为一个下次被面试的准备。
如果文章有错误,希望指正。
将围绕下图进行面试题总结和整理:
1.基本数据类型,占用字节?
2. Integer c =128 , Integer d =128,c==d,输出的是什么?
输出的是false,因为128大于IntegerCache的最大值,所以需要重新创建对象。
在Integer内部有一个静态类
private static class IntegerCache {
static final int low = -128;
static final int high;
static final Integer cache[];
static {
// high value may be configured by property
int h = 127;
String integerCacheHighPropValue =
sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
if (integerCacheHighPropValue != null) {
try {
int i = parseInt(integerCacheHighPropValue);
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
} catch( NumberFormatException nfe) {
// If the property cannot be parsed into an int, ignore it.
}
}
high = h;
cache = new Integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
// range [-128, 127] must be interned (JLS7 5.1.7)
assert IntegerCache.high >= 127;
}
private IntegerCache() {}
}
参考资料: Integer缓存池(IntegerCache)及整型缓存池.
3.String能被继承吗?为什么?
不能被继承,因为被final修饰,主要目的就是保证String是不可变(immutable)。不可变就是第二次给一个String 变量赋值的时候,不是在原内存地址上修改数据,而是重新指向一个新对象,新地址。下面看String类源码如何保证是不可变的:
public final class String
implements java.io.Serializable, Comparable, CharSequence {
/** The value is used for character storage. */
private final char value[];
参考资料: 【JAVA基础】String类为什么是final的.
4.谈谈你对final的理解?
修饰类,修饰方法,修饰变量。
5.接口可以有方法体吗?
可以有方法体,前提是使用default修饰,这个是1.8的新特性。
6.JDK的新特性?
自己去看吧
参考资料: 【JAVA基础】String类为什么是final的.
7.Java 的反射机制?
通过反射,该类对我们来说是完全透明的,想要获取任何东西都可以。
……未完待续
JVM 主要从 内存划分,垃圾回收,JMM模型几个方面
1.JVM内存划分?
1.redis的数据类型
字符串,有序集合,无需集合,Hash,列表
2.redis的数据结构
注意两者的区别,一个是类型,一个是结构;底层的数据结构大概有:
SDS(Simple Dynamic String),链表,字典,跳跃表,整数集合,压缩列表。
3.redis持久化方案
RDB和AOF,这里简单说一下,目前的redis支持RDB和AOF混合的方式,4.0以后的版本,开启如下的配置,会生成一个混合的文件,
aof-use-rdb-preamble
4.redis的高可用实现
这样的问题无非就是几个回答,主从,哨兵,集群。这里的选择使用,结合自己公司的实际情况去考虑。
5.reids的主从
一个主服务器可以拥有多个从服务器,但是一个从服务器只能有一个主服务器。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦