头条面经

6号投简历,10号约面试,17面试,18给offer

头条一面

  • Spring bean的生命周期
  • Spring 循环依赖说一下?spring允许循环依赖吗 beanfactory和factorybean啥区别
  • JVM 垃圾回收算法(我就把几个垃圾回收算法全讲了,每个垃圾回收器应用 场景,什么算法全说一下) oom的场景?(我从metaspace、stack、堆三个⻆度说,然后怎么排查 mat 工具啊等等)
  • 因为我上面每个点都说的很⻓(显得我理解还ok的样子,导致时间不够了,他 就直接算法了

算法

  • 第一题:一个数组,找三个数字,问能组成三⻆形的个数–双指针
  • 第二题:lc 221 正方形那玩意,我推了很久,害 妈的都是做过的题

头条二面

ps:面试官都是知道一面面的啥的

  • 数据库索引底层说一下 数据库的事物隔离级别是什么?(我这边还说了事物隔离级别分别用到了什 么锁算法)扯了很久
  • 聊下mvcc redis线程模型,这边我扯了很久,反正很熟 如何设计一个像redis一样的缓存?这个简单,各种扯 redis的跳表知道吗。。。这个很简单,concurrentskiplistmap也给他扯了下
  • https的过程
  • tcp和udp的一些基础问题
  • 如何设计一个处于tcp和udp之间的协议,可以自定义应用场景,我说了个游戏的
  • 操作系统的分⻚和分段的区别是什么,随便扯

算法

  • 给定一棵完全二叉树,返回最后一层的最右边的节点,要求最优解,我憋了很久。
    代码如下
/**
     * 求完全二叉树最后一个节点的值,要最优解
     *
     * 思路
     *      方法一:层次遍历,输出最后一个节点,时间复杂度:O(N),BFS不给用的
     *      由于是完全二叉树,求高度时只需一直往左遍历即可。每次递归都下降一层
     * 		先走当前节点的右边,如果发现一样,继续走右边,如果发现高度不一样了,那就选择走左边
     *		每次都求树的高度,时间复杂度为O(lgN * lgN)。
     */
	//测试代码
    public static void main(String[] args) {
        TreeNode node1 = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        TreeNode node3 = new TreeNode(3);
        TreeNode node4 = new TreeNode(4);
        TreeNode node5 = new TreeNode(5);
        TreeNode node6 = new TreeNode(6);
        TreeNode node7 = new TreeNode(7);
        node1.left = node2;
        node1.right = node3;
        node2.left = node4;
        node2.right = node5;
        node3.left = node6;
        node3.right = node7;
        TreeNode lastNode = getLastNode(node1);
        System.out.println(lastNode.val);
    }


    static class TreeNode{
        int val;
        TreeNode left, right;

        public TreeNode(int val) {
            this.val = val;
            left = right = null;
        }
    }

    public static TreeNode getLastNode(TreeNode root) {
        //到达底层,如果这个节点的left为null,就说明是最后一个了,这是我们走一遍走过来的,每次只选一边
        if (root.left == null) {    //其实这里还要加个root == null
            return root;
        }
        int left = dfs(root.left);
        int right = dfs(root.right);
        if (left > right) {
            return getLastNode(root.left);
        } else {    //只要小于等于就继续走右边
            return getLastNode(root.right);
        }
    }

    //计算高度
    private static int dfs(TreeNode root) {
        if (root == null) return 0;
        return 1 + dfs(root.left);
    }
发布了43 篇原创文章 · 获赞 6 · 访问量 3907

猜你喜欢

转载自blog.csdn.net/weixin_44424668/article/details/104952098