zoukankan      html  css  js  c++  java
  • 字节跳动真实面试编程题与经验分享:后台研发工程师(直播)-抖音/火山职位

    概述

    整体来说,字节跳动的面试体验还是很好的,虽然本人只进行了一面,然后就凉了,但是起码HR会通知你结果,不用忐忑不安的等待。(指上一篇文章的京东,三面都面完了,然后就永久失联了,用两个星期从希望变成失望,又用了一个星期才平复了心态。)

    现在把面试经验总结一下。

    PS:本人Java开发2年经验,面的是Java开发岗位。


    过程

    1.首先本人于2020年11月15日通过拉勾APP投了一个字节跳动岗位。

    2.2020年11月16日,字节跳动就打来电话了,HR加了个微信,然后发了一个日历图片,让本人约一个面试时间;本人约了11月22日14:30的面试,那天是周日。

    可以选择周六日面试是比较好的。(当然也能选平时,下午2:00-7:00&晚上7:30-9:30两个时间段可以)

    3.之后HR会发来邮件,邮件中包含约好的面试时间,以及视频面试链接;然后本人就开始准备面试。

    PS:拉勾APP里的简历一直保持着“投递成功”的状态,看来字节跳动不修改拉勾中简历的状态。


    2020.11.22,面试开始。视频面试网站是有代码框的,面试官会让你写代码。

    问题大概如下(有遗忘):

    1.自我介绍。

    2.简要介绍下你做过的项目。

    3.一些项目细节问题。

    4.spring与springboot的区别。

    5.写一个sql,查询课程名、最高分、最低分、平均分。

    表:

    sql参考答案:

    select s.course,MAX(s.score),MIN(s.score),AVG(s.score) from scoreTable s group by s.course

    截图:

    6.写一个大数相乘的方法,传入两个string

    参考答案(Java):

    import java.util.Scanner;
    
    public class t2 {
    
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入第一个数:");
            String str1 = sc.next();
            System.out.println("请输入第二个数:");
            String str2 = sc.next();
            largenumberOperationMultiply bn = new largenumberOperationMultiply();
            //创建类largenumberOperationMultiply的对象bn
            String output = bn.multiply(str1,str2);
            //bn对象调用multiply方法对str1和str2进行操作
            System.out.println(str1+"与"+str2+"的积为="+output);
        }
                
        //创建类largenumberOperationMultiply
        public static class largenumberOperationMultiply {
    
            //定义方法multiply的功能
            public String multiply(String str1,String str2){
                int[] num1 = new int[str1.length()];
                int[] num2 = new int[str2.length()];
                int[] result = new int[str1.length() + str2.length()];
    
                //将两个字符串转成整型数组,顺序转换,数组下标越小,数字对应的位数越高
                for (int i = 0;i < str1.length(); i++){
                    num1[i] = Integer.parseInt(str1.substring(i,i+1));
                }
                for (int i = 0;i < str2.length(); i++){
                    num2[i] = Integer.parseInt(str2.substring(i,i+1));
                }
    
                //两大数相乘
                for (int a = 0;a < str1.length(); a++){
                    for (int b = 0;b < str2.length(); b++){
                        result[a+b] += num1[a]*num2[b];
                    }
                }
    
                ////判断是否需要进位,满10进1,因为存储顺序与位数高低相反,所以采用逆序进位
                int temp;
                for (int k = result.length-1; k > 0; k--){
                    temp=result[k]/10;  //数组下标大的向数组下标小的进位
                    result[k-1] += temp;
                    result[k] = result[k]%10;
                }
    
                //将结果数组逆序转化为字符串
                String resultstr = "";
                for (int i = 0; i < result.length-1; i++){
                    resultstr += "" + result[i];
                }
    
                return resultstr;
            }
        }
    }

    7.写一个二叉树层次遍历的方法:

    参考答案(Java):

    import java.util.LinkedList;
    import java.util.Scanner;
    
    public class t2 {
        public static class TreeNode {
            public int data;
            public TreeNode leftChild;
            public TreeNode rightChild;
    
            public TreeNode(int data){
                this.data = data;
            }
    
        }
        /**
         * 构建二叉树,先建左树后建右树
         * @param list   输入序列
         * @return
         */
        public static TreeNode createBinaryTree(LinkedList<Integer> list){
            TreeNode node = null;
            if(list == null || list.isEmpty()){
                return null;
            }
            Integer data = list.removeFirst();
            if(data!=null){
                node = new TreeNode(data);
                node.leftChild = createBinaryTree(list);
                node.rightChild = createBinaryTree(list);
            }
            return node;
        }
    
        public static void main(String[] args) {
            LinkedList<Integer> list = new LinkedList<>();
            //开始建二叉树,null是必要条件,大家可以打断点分析
    list.add(
    1); list.add(2); list.add(4); list.add(null); list.add(null); list.add(5); list.add(null); list.add(null); list.add(3); list.add(6); list.add(null); list.add(null); list.add(7); //7是最后一个元素,7的左右子树为null,现在省略不写即可 TreeNode binaryTree = createBinaryTree(list); //二叉树形状 /** * 1 * 2 3 * 4 5 6 7 */ levelOrder(binaryTree); } //层次遍历二叉树,输出 1 2 3 4 5 6 7 public static void levelOrder(TreeNode root){ LinkedList<TreeNode> queue = new LinkedList<>(); queue.add(root); while(!queue.isEmpty()){ root = queue.pop(); System.out.print(root.data+" "); if(root.leftChild!=null) queue.add(root.leftChild); if(root.rightChild!=null) queue.add(root.rightChild); } } }

    再附一个四种二叉树遍历的网址,写的挺好的(就是初始化二叉树时说的不详细):

    https://www.cnblogs.com/du001011/p/11229170.html

    以及二叉树前中后序遍历代码(Java),这些代码复制到上面的代码中直接就能使用,其中举例的树的样式也同上:

              1
    2 3
    4 5 6 7
    //前序遍历,根-左-右,1 2 4 5 3 6 7 
        public static void preOrderTraveral(TreeNode node){
            if(node == null){
                return;
            }
            System.out.print(node.data+" ");
            preOrderTraveral(node.leftChild);
            preOrderTraveral(node.rightChild);
        }
    //中序遍历,左-根-右,4 2 5 1 6 3 7 
        public static void inOrderTraveral(TreeNode node){
            if(node == null){
                return;
            }
            inOrderTraveral(node.leftChild);
            System.out.print(node.data+" ");
            inOrderTraveral(node.rightChild);
        }
    //后续遍历,左-右-根,4 5 2 6 7 3 1
        public static void postOrderTraveral(TreeNode node){
            if(node == null){
                return;
            }
            postOrderTraveral(node.leftChild);
            postOrderTraveral(node.rightChild);
            System.out.print(node.data+" ");
        }

    8.会用JVM调优吗?

    9.其它问题,记不清了,可能是些小问题吧,如果是明显不会的问题我应该会记下来的。(但是现在查笔记,发现没记录下什么问题来,只记录了编程大题)


    后记

    一面主要是面试编程题,甚至HR微信之前就提醒说可以刷LeetCode了。

    不过实际上这2道编程题与LeetCode关系不大。(尽管还是太菜,写一半就写不下去了)

    由于本人之前没有刷过LeetCode,听到要考算法题,就知道基本凉了,短期内又刷不完,所以这次已经做好凉的准备了。

    至于JVM调优,目前工作中没有机会用,也不知道怎么学……

    果然,2020.11.22面试完后,2020.11.24,HR微信上通知本人,一面凉了。(HR微信提过,字节跳动有三次技术面,一次HR面,共四面。)

    主要就是因为那2道编程题不会吧,也不能算很难,但是平时没有接触过,所以当时不会。

    还好,这次做好凉的准备了,继续学习,争取下次成功。

    PS:字节跳动可以约周六日面试,就算凉了HR也会通知,这两点挺好的。

  • 相关阅读:
    MS SQL Server迁移至Azure SQL
    Aras Innovator 11 sp2 firefox客户端设置
    Aras Innovator 11 sp2 IE客户端设置
    Aras Innovator 11 sp2安装
    JDK Windows安装
    mocha测试es6问题
    jQuery中animate与scrollTop、offset().top实例
    AI下载步骤
    Visual Studio Code必备插件
    Visual Studio code快捷键
  • 原文地址:https://www.cnblogs.com/codeToSuccess/p/14036803.html
Copyright © 2011-2022 走看看