美文网首页
字节跳动实习面经分享

字节跳动实习面经分享

作者: 复旦猿 | 来源:发表于2020-02-05 13:08 被阅读0次

参加的是data数据平台-大数据开发实习生的岗位面试,一面二面一起,全程视频面试。两位面试官态度都很好,当提的问题我答不上来时,面试官会耐心得做些引导,体验还是比较好的。

一面

  1. 自我介绍
  2. 项目经历
    主要聊的是实验室做的一个数据流可视化分析平台,面试官问的问题很专业。简历上有三个项目,除了数据流可视化分析平台之外还有两个大学做的项目,面试官没怎么问,他让我自己讲下亮点,于是我就简单说了说放这两个项目的目的——证明下自己的工程能力和算法能力。

这一部分和面试官聊的挺多,自认为发挥的还可以。

  1. JVM基础
    3.1 JVM内存结构
    3.2 类加载
    3.3 垃圾回收
    3.4 线程池ThreadPool

我基本上把JVM准备的点都说了,过程比较顺利,对自己答得也比较满意。

  1. 做算法题
    去除链表中的所有重复元素,返回去除后的链表指针。使用哨兵节点,解决起来比较方便。
public static ListNode deleteDuplicates3(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }

        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;
        ListNode last = dummyHead;
        ListNode cur = head;
        while(cur != null && cur.next != null){
            if (cur.val == cur.next.val){
                int val = cur.val;
                while(cur != null && val == cur.val){  // 删除所有重复节点,仅保留只出现一次的节点。
                    cur = cur.next;
                    last.next = cur;
                }
            } else {
                last = cur;
                cur = cur.next;
            }
        }
        return dummyHead.next;
    }

一面结束后,面试官让我在线等会,马上进行二面。等了大概10多分钟,二面就开始了。

二面

  1. 实验室研究课题介绍
    面试让我介绍下目前研究课题的内容,我就把手头在做任务的背景和方法介绍了一下。
  2. Java基础
    2.1 static关键字的理解
    2.2 Object类中方法介绍,hashCode()、equals()、wait()、notify()、toString()等

2.1 回答还OK,2.2回答不是很好,因为也没怎么准备。

  1. 数据库
    2.1 MySQL索引理解
    2.2 B树与B+树的区别

这一部分自我感觉还OK。

  1. 操作系统
    4.1 进程间通信的几种方式
    4.2 进程调度

知识盲点,回答的一塌糊涂。

  1. 计算机网络
    5.1 tcp拥塞控制和流量控制

回答的不是很满意。

  1. 做算法题
    6.1 输出二叉树最左下节点的值。解题思路:层次遍历,从右往左依次进队列,最后出队列的即为输出。
/**
 * 寻找树中最左下角的值
 * @param root
 * @return
 */
public int findBottomLeftValue(TreeNode root) {
  TreeNode cur = null;
  //队列
  Queue<TreeNode> queue = new LinkedList();
  //根节点入队
  queue.offer(root);
  while(!queue.isEmpty()){
    //出队一个元素
    cur = queue.poll();
    //按顺序入队其右孩子和左孩子
    if(cur.right != null)
      queue.offer(cur.right);  
    if(cur.left != null)
      queue.offer(cur.left);
  }
  //所有元素出队后拿到的就是最后一个节点,返回
  return cur.val;
}

6.2 第一个错误的版本。解题思路:二分法。

public int firstBadVersion(int n) {
  int left = 1;
  int right = n;
  while (left <= right) {
    int mid = left + ((right - left) >> 1);
    if (!isBadVersion(mid)) {
        left = mid + 1;
    } else {
        if(mid == 0 || !isBadVersion(mid - 1)) return mid;  
        right = mid - 1;
    }
  }
  return -1;
}

两道算法写的比较顺利,可能是面试官太nice了,没出太难的算法题。

  1. 提问环节
    7.1 由于二面中2-5回答的不算很好,我就解释下,说我理论知识需要加强;不过平时工程能力还OK,上手速度快,善于解决问题,属于问题导向型。
    7.2 问了一下data数据平台部门使用的大数据框架,比如spark、flink,面试官说都会用到。

二面结束后,我就问HR小姐姐什么时候会出结果。没想到HR很快回复了,说我二面通过了,并且预约了三面的时间。天呐,还有三面。

三面

本来HR小姐姐说,这是最后一面,我就理解为HR面,没想到啊,竟然还是技术面。弄了半天,HR小姐姐搞错了,三面还是技术面,过了之后才是HR面(最后一面)。整个面试过程持续2个小时,真的是太漫长了~不过面试官还是很nice的,会有提示和引导。
不说废话了,进入正题。

  1. 自我介绍+项目介绍

回答和一二面差不多。

  1. 算法题目
    2.1 MapReduce实现PV统计

MapReduce代码不是很熟,面试官说让我讲讲思路就可以。
问题延伸:1. 堆排序应该放到哪个阶段?——Reduce阶段;2. 建堆的时间复杂度——O(n)

2.2 自己实现一个BlockingQueue。

public class BlockingQueue {
    private final Queue<String> queue = new LinkedList<>();
    private Lock lock = new ReentrantLock();
    private Condition condition = lock.newCondition();
    public  String get() {
        try {
            lock.lock();
            while (queue.peek() == null) {
                try {
                    condition.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return queue.remove();
        } finally {
            lock.unlock();
        }
    }
    public void put(String request) {
        try {
            lock.lock();
            queue.offer(request);
            condition.signalAll();
        } finally {
            lock.unlock();
        }
    }
}

没回答好,不过在面试官不断提示下,还是有些思路——使用wait和notify实现。问题延伸:notify和notifyAll有什么区别。

2.3 DAG的拓扑排序

因为这一部分和项目介绍相关,所以比较熟。思路就是统计一下每个节点的入度,输出所有入度为0的节点。但面试官说能不能不先遍历图,直接输出。面试官真的很耐心,提示我参考二叉树的后序遍历——先子节点然后父节点,注意使用栈,和记录访问日志。

public class DAG {
    class Node{
        String val;
        List<Node> children;
        public Node(String val){
            this.val = val;
            this.children = new ArrayList<>();
        }

        public void addChild(Node node){
            this.children.add(node);
        }
    }

    private Stack<String> stack;
    private Set<String> visited;

    public DAG(){
        stack = new Stack<>();
        visited = new HashSet<>();
    }

    public void core(Node root){
        if (root == null || visited.contains(root.val)){
            return;
        }
        for (int i = 0; i < root.children.size(); i++){
            core(root.children.get(i));
        }
        if (!visited.contains(root.val)){
            stack.push(root.val);
            visited.add(root.val);
        }
    }

    public String topoTraverse(Node root){
        core(root);
        StringBuilder stringBuilder = new StringBuilder();
        while (!stack.isEmpty()){
            stringBuilder.append(stack.pop());
        }
        return stringBuilder.toString();
    }

    public static void main(String[] args) {
        DAG dag = new DAG();
        Node a = dag.new Node("A");
        Node b = dag.new Node("B");
        Node c = dag.new Node("C");
        Node d = dag.new Node("D");
        Node e = dag.new Node("E");
        Node f = dag.new Node("F");
        a.addChild(b);
        a.addChild(c);
        b.addChild(d);
        c.addChild(d);
        d.addChild(e);
        e.addChild(f);
        a.addChild(f);

        System.out.println(dag.topoTraverse(a));
    }
}
  1. 爱好
  2. 提问环节

虽然感觉自己发挥不咋的,但还是过了。可能是面试官看中了我的潜力~~~

HR面

顺利通过~

内推内推,很认真的内推,免笔试的那种哦

号外!号外! 字节跳动研发提前批开始啦~大量坑位,欢迎大家来占哦~网申时间6月16-7月16日,机会多多,快快投递简历吧,内推码:GHT9VNC
感兴趣的同学可以留言交流~

image.png

相关文章

  • 字节跳动实习面经分享

    参加的是data数据平台-大数据开发实习生的岗位面试,一面二面一起,全程视频面试。两位面试官态度都很好,当提的问题...

  • 手撕面经 - 精准打击

    校招2篇,实习1篇,会及时做出调整 字节跳动前端一面面经(感觉凉凉) [字节]一面凉经 腾讯暑期实习前端面经

  • 字节跳动安卓面经

    前两天面试了字节跳动安卓开发的实习生,给大家分享一下面经。字节跳动好像都是一下子把三面都面完,所以要好好准备一下,...

  • 字节跳动Android面经:3面+职业规划

    来自牛客网:小啊潇Ambition 的字节跳动Android实习面经,链接:https://www.nowcode...

  • 字节跳动面经

    只能自己给自己鼓励,不能总是按别人说的去做。有时,你甚至连为什么要这样做都分不清楚,任何的责任都可以让人振奋。但是...

  • 字节跳动--面经

    http和https的区别 https协议需要到CA(Certificate Authority,证书颁发机构)申...

  • 字节跳动--面经2

    TCP和UDP的区别、特点 TCP的主要特点是:面向连接。每一条TCP连接只能是点对点的(一对一)。提供可靠交付的...

  • 字节跳动--面经3

    设计用例的方法、依据有哪些 白盒测试白盒测试用例设计有如下方法:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件...

  • 字节跳动面经一

    了解内存管理吗,简单说说 了解epoll原理吗 进程间的通信 concurrentHashMap如何实现线程安全 ...

  • 字节跳动面经三

    rpc、netty、NIO实现原理,为什么要用NIO? https和http的区别 浏览器输入url的过程 htt...

网友评论

      本文标题:字节跳动实习面经分享

      本文链接:https://www.haomeiwen.com/subject/jrocxhtx.html