字节跳动实习面经分享

参加的是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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355