网易一面笔试题

1、项目介绍

2、bean声明周期(自己从bean注册、注入和bean范围三方面进行了介绍,创建过程自己不是特别熟悉,也没有硬背诵)

3、mysql中常用数据存储引擎中索引差异

4、多线程实现方式(创建单个线程和使用线程池创建线程)

5、如可控制mq消费速度和mq如何保证可靠性消费(自己理解消费速度根据自己预估峰值消息量,消息太多,为了防止单个队列消息溢出,使用针对一个topic设置多个队列,针对消息可靠性或者至少被消费一次,分别从消息失败重试、手动Ack和死信队列进行回答)

6、jvm 内存模式

算法题:

力扣原题:链接Offer 68 - II. 二叉树的最近公共祖先

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

例如,给定如下二叉树:  root = [3,5,1,6,2,0,8,null,null,7,4] alt

示例 1:

输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出: 3
解释: 节点 5 和节点 1 的最近公共祖先是节点 3。

示例 2:

输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
输出: 5
解释: 节点 5 和节点 4 的最近公共祖先是节点 5。因为根据定义最近公共祖先节点可以为节点本身。

相比于力扣解法,考虑在面试过程中可能需要自己创建二叉树,下面给出了自己的创建二叉树和求两个节点的公共祖先解法,了解基于java完成的树的创建,方便灵活面试官的各种要求。

注意点1:为了方便使用数组创建非完全二叉树,使用null表示节点为空,二叉树中节点值使用Integer类型,而不是使用int类型。

注意点2:由于java中参数是指传递,所有在使用先序递归方式创建树时,采用创建函数带返回值的方式。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class Tree {
    private static TreeNode root;
    public Tree(TreeNode root){
        this.root = root;
    }
    public static void main(String[] args) {
        Integer[] data = {3,5,1,6,2,0,8, null,null,7,4};
        Tree tree = new Tree(new Tree.TreeNode());
        int index = 0;
        int len = data.length;
        tree.initTree(data,index);
       // tree.traverse();
        //计算树种两个节点的最小公共祖先
        int node1 = 7;
        int node2 = 4;
        int res = tree.lowestCommonAncestor(node1,node2);
        System.out.println(res);
    }

    public int lowestCommonAncestor(int  node1,int node2) {
        //求节点node1 和node2 的最近公共祖先
        List<List<Integer>> pathes = new ArrayList<>();
        findPath(root,node1,node2,new ArrayList(),pathes);
        List<Integer> path1 = pathes.get(0);
        List<Integer> path2 = pathes.get(1);
        int i = 0;
        for(;i < path1.size()&& i < path2.size();i++){
            if(!path1.get(i).equals(path2.get(i))){
                break;
            }
        }
        return path1.get(i-1);
    }
    private void findPath(TreeNode node,int node1,int node2,List curr,List<List<Integer>> pathes){
        if(node!=null){
            if(node.val == node1 || node.val == node2){
                curr.add(node.val);
                List temp = new ArrayList(curr);
                pathes.add(temp);
            }
            curr.add(node.val);
            findPath(node.left,node1,node2,curr,pathes);
            curr.remove(curr.size()-1);
            findPath(node.right,node1,node2,curr,pathes);
        }
    }

    /**
     * the definition of Tree Node
     */
    static class TreeNode{

        private Integer val;
        private TreeNode left;
        private TreeNode right;
        public TreeNode(){
        }
        public TreeNode(int val){
            this.val = val;
        }
        public TreeNode(int val,TreeNode left,TreeNode right){
            this.val = val;
            this.left = left;
            this.right = right;
        }
    }
    public void initTree(Integer[] data, int index){
        root = createTree(data,0, data.length);

    }
    private TreeNode createTree(Integer[] data,int index,int len){
        //先序遍历创建树
        if(index < len && data[index]!=null){
            TreeNode node = new TreeNode(data[index]);
            node.left = createTree(data,index*2+1,len);
            node.right = createTree(data,index*2+2,len);
            return node;
        }else{
            return null;
        }
    }
    public void traverse(){
        preOrder(root);
        System.out.println();
    }
    private  void preOrder(TreeNode root){
        //先序遍历
        if(root!=null){
            System.out.print(root.val+"\t");
            preOrder(root.left);
            preOrder(root.right);
        }
    }
}

运行结果:

alt

全部评论

相关推荐

秋招进行到现在终于能写总结了。完全没想到战线会拉这么长,过程会如此狼狈,不过更应该怪自己太菜了。好在所有的运气都用在了最后,也是有个去处。背景:双2本硕科班,无竞赛,本科一段研究所实习,硕士一段大厂暑期实习但无转正。技术栈是C++&nbsp;&amp;&nbsp;Golang,实习是客户端音视频(而且是鸿蒙端开发),简历两个C++项目一个Golang项目。主要投递岗位:后端,cpp软开,游戏服务端,测开,以及一些不拘泥于Java的岗位。从8月起总共投递123家公司,笔试数不清了,约面大约30家。offer/oc/意向:友塔游戏(第一个offer,面试体验很好,就是给钱好少南瑞继保(计算机科班点击就送(限男生),不...
乡土丁真真:佬很厉害,羡慕~虽然我还没有到校招的时候,也想讲一下自己的看法:我觉得不是CPP的问题,佬的背书双2,技术栈加了GO,有两段实习。投了123,面了30.拿到11个offer。这个数据已经很耀眼了。这不也是CPP带来的吗?当然也不止是CPP。至少来说在这个方向努力过的也会有好的结果和选择。同等学历和项目选java就会有更好的吗?我个人持疑问态度。当然CPP在方向选择上确实让人头大,但是我觉得能上岸,至于最后做什么方向,在我看来并不重要。至于CPP特殊,有岗位方向的随机性,java不是不挑方向,只是没得选而已。也希望自己以后校招的时候能offer满满
点赞 评论 收藏
分享
11-04 14:10
东南大学 Java
_可乐多加冰_:去市公司包卖卡的
点赞 评论 收藏
分享
10-24 13:36
门头沟学院 Java
Zzzzoooo:更新:今天下午有hr联系我去不去客户端,拒了
点赞 评论 收藏
分享
昨天 17:48
中山大学 C++
点赞 评论 收藏
分享
评论
点赞
6
分享
牛客网
牛客企业服务