今天下午参加了腾讯WXG的客户端面试,现在来做下复盘,总结面试中的不足。
上来后还是常规套路进行自我介绍。
面试官: 看了你简历的项目,主要是以后端的为主。可能你安卓相关的不是太熟悉,那我们今天的考察主要以基础为主吧。
我: 好的,太贴心了~ (心理)
面试官: 说下String s1 = “abc”; String s2 =new String(“abc”)区别;
我: “abc”会在字符串常量池创建。(如果已经存在,则不重复创建)
new String(“abc”)同样先检验,常量池是否存在该字符串,如果不存在则先创建。创建完成后,在堆内创建一个String对象,并指向字符串常量池的字符串。
面试官: short s = 1; 说下 s = s + 1; s +=1; 区别
这里我一开始没有想到。面试官提醒了下,s是short类型的。
我: s + 1后,因为1是int类型的,会自动发生隐式的类型转换。
而s +=1 等价于 (short)(i + 1)能够保持原来的类型。
面试官: 在Hashset中,如何判断两个对象不相同
我: 在HashSet中,是通过equals()方法判断两个对象是否相同的。
所以需要根据具体的类的业务逻辑重写equals()方法。当然,此处需要将hashcode()方法也重写。
面试官: 如果修改过了一个对象的hashcode,还能remove它吗
我: 不行,因为是通过hashcode()来判断对象该存放的位置,如果修改了它的值,那么就无法找到原本的位置了。所以也就无法删除了。
面试官: 那我们来考察下位运算相关的。如何用位运算判断一个数是否为2的n次幂。
我: 通过位运算 n &(n - 1)
如果结果为0,则表示该数是2的n次幂。这个知识点可以看以前写的一篇博客。
面试官: 用位运算实现两个数字的交换。
我: 使用异或操作实现。采用异或运算符来实现,这种方法的原理是使用了异或运算这样一个特点:一个数异或同一个数两次其结果还是那个数。
int a=10