【笔试面试】腾讯客户端面试复盘

今天下午参加了腾讯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;
    int b=52;
    System.err.println("开始:"+a+","+b);
    a=a^b;
    b=a^b;
    a=a^b;
    System.err.println("结束:"+a+","+b);

面试官: 用递归实现字符串倒置
我: 当时在这题上卡了比较久。这题本身不难,但是递归的思路一开始没想明白,绕进去了。递归这块还需要加强。

public class te {
	public static void main(String[] args) {
		System.out.println(g("abcde"));
	}
	static String g(String s){
		if(s.length()<=0) return s;
		return g(s.substring(1)) + s.charAt(0);
	}
}

面试官: 二叉树的最大路径

我: 大致代码如下

  class Solution {
    static int max = 0;
    public int diameterOfBinaryTree(TreeNode root) {
        max = 0;
        dfs(root);
        return max;
    }
    
    public int dfs(TreeNode root){
        if(root == null)
            return 0;
        int leftMax =  dfs(root.left);
        int rightMax = dfs(root.right);
        max = Math.max(max,leftMax+rightMax);
        return 1 + Math.max(leftMax,rightMax);
    }
}

大体来说这次面试考了很多算法的题目,还是比较考验基础的。最后面试官问了是否了解过flutter Kotlin这些新技术?
由于平时的项目和这块关系不大,确实了解的比较少。这点是需要着重加强的。

最后,求个三面吧! 我太难了。
更新,进三面啦!

你可能感兴趣的:(面试,java)