记录第一次面试的体会(字节跳动实习生招聘)

首先说明自己的情况:自己一个普通本科大学的大三学生,然后前一阵子还在犹豫考研还是就业。但就业,觉得自己还有点菜。不过后面决定还是就业了。前一阵子,忙着考试,没想到突然在一个群里面看到了字节跳动的实习生招聘。想都没想,在2天的准备时间里,在一个带我走上这条路的大佬的指点下,写了人生第一份简历。没想到,字节跳动给我过了,通知我去面试。然后在毫无准备的情况下,大佬给我临时补了几个知识点就去面试了。。。。。。。

第二次去高新区那边,字节对面是携程,旁边是蚂蚁金服,隔壁是腾讯。。。。。。互联网的天堂,大概就是这样了吧。有种进城了的感觉。

一、算法:求一个只含有"(",")"的字符串的最长闭合子串。

开始面试,上来就是一个算法题,对于一个居然还没刷剑指offer的人,内心是崩溃的。所以大脑一下就宕机了。(后面大佬告诉我这就是剑指offer的原题,我裂开了)。

面试题如下:(回来后,好好捋捋,结果如下):
题目大概是:求一个只含有"(",")"的字符串的最长闭合子串。(当时内心感受:我去,什么是闭合?什么是子串。。。。)。后面面试小姐姐帮我梳理了一下,大概明白了。然后就开始敲,用栈解决,我十分幸运的把给的题目上的例子给求出了正确答案(狗头emoji)。然后小姐姐问我,你想想还有其他的情况吗?我当时一脸懵,其他情况?她告诉我,就是你得设计一个通用的呀。嗯?难道我在个不通用?然后小姐姐随手写了一串,好吧,果然不行了。下面是,这道题,我回来后,在实验室小伙伴的帮助下重新理清楚思路后,捋出来的代码:
思路:

        思路描述:
       1,首先,第一个必须要是“(”才能使得后面出现的括号有可能与其组成闭合括号,而“)”为第一个的话,必然不会有与他组成闭合括号的。
        2,如果即将入栈的括号是“)”时,就去判断已经在栈中的,栈顶的括号是不是“(”,如果是则组成闭合,将其弹出,并且最大的记录应该同时加2,因为是“(”“)”两个。
        3,如果入栈的括号是“(”时,就直接入栈即可。
        通过这样,就能求出闭合的最大子串了。
public class Test {
    public static void main(String[] args) {
     String s = ")((())(";
        System.out.println(Match(s));
    }
    public static int Match(String str){
        if(str.length()==0){
            return -1;
        }
        char[] ch = str.toCharArray();
        Stack<Character> stack = new Stack<Character>();
        int max = 0;

        /**
         *思路描述:
         * 首先,第一个必须要是“(”才能使得后面出现的括号有可能与其组成闭合括号,而“)”为第一个的话,必然不会有与他组成闭合括号的。
         * 当即将入栈的括号是“)”时,就去判断已经在栈中的,栈顶的括号是不是“(”,如果是则组成闭合,将其弹出,并且最大的记录应该同时加2,因为是“(”“)”两个。
         * 如果入栈的括号是“(”时,就直接加入即可。
         */
        stack.push(ch[0]);//先将第一个加入
        for(int i = 1;i < ch.length ;i++){
            if(!stack.isEmpty()&&stack.peek() == '('&& ch[i] == ')' ){
                    stack.pop();
                    max+=2;
            }
            else
            {
                stack.push(ch[i]);
            }
        }
        if (max!=0) {
            return max;
        }else {
            return -1;
        }
    }
}

不知道上面的描述对于其他人,是不是能够理解,自己到是有那画面了。其实在面试中,让别人理解你的思路真的很重要。

二,即时通讯的架构

面试小姐姐让我聊聊自己即时通讯项目中的架构(自己在简历中提到了参加了即时通讯的项目)好吧,自己这浅薄的见识还停留在C/S,B/S架构上,所以也是乱描述一通。。。。。。然后提到了自己项目中干了什么。。。。。。
自己回来后,查阅了相关资料,再想了想,觉得自己该这样描述:
由于项目是基于netty开发的即时通讯系统,是客户端到服务器到客户端的一个业务过程。在文本消息的发送和图片消息的发送,Android和PC都是作为客户端,通过netty的相关解决方案连接服务器,服务器作为消息转发中心,对封装的消息进行消息头和消息体的分离,解析出消息的发送人和接受者和消息具体内容,然后进行相应的消息持久化和同步(这里涉及到离线消息的设计),再根据在线情况推送消息。而在文件发送时,由于文件较大,因此通过webAPI上传到服务器,先上传完成后,在发送给服务器一个关于文件发送的信息描述。(比如文件的发送人,接收人,文件名,文件大小等)。这样保证了消息发送的稳定,同时也对文件进行了存档。
不知道这样描述对不对,其实自己还是不太理解什么叫架构,看来得好好补补课了。

三、数据库索引的设计

这个真的是触及到自己知识的浅薄区域了。平时很少见到设计比较复杂的数据库。自己做着玩的时候,数据库设计的也比较简单。项目中用比较复杂的数据库设计,也是别人或者老师设计好了,我只是使用的人。唉~,还是太菜了。数据库这种硬核技术需要像编程语言一样用的6才行啊。

四,“掷硬币”问题

面试小姐姐问我有一个两面的骰子,七个人通过骰子选出一个人去做一件事情,要保证公平。
当时是一脸懵逼,心里大概知道需要组合排列。但是自己已经好久没有碰这种东西了。真的是裂开。
回来后,好好捋了捋。才明白,这其实就是一个二进制问题嘛。两种可能性,不就是0,1吗?我。。。。。。
好吧,说思路。
1,先给7个人标记1到7。
2,硬币扔四次,根据0,1序列来选择那个人去做这件事。
因此01序列就会有下面的情况:
0001 = 编号为 1 的人去做
0010 = 编号为 2 的人去做
0011 = 编号为 3 的人去做
0100 = 编号为 4 的人去做
0101 = 编号为5 的人去做
0110 = 编号为6的人去做
0111 = 编号为7的人去做
1000 = 8 再来一次

五、总结:

  说实话,其实这次自己面试被刷,也是意料之中的事情。因为确实自己也没好好准备。但是也说明自己基础真的很不牢固。会有一些数据结构,但是根本不怎么6。**想起了,我刚来大学时,一位很德高望重的老师,告诉我们:“大一大二,先打好基础。java,spring那些东西后面很快就能上手的。”**可惜,当时浮躁。根本不信,听不进去。啥都去学,到头来啥也没精通,停留在了会用的层次,基础也挺卡顿的。不过还好发现早,早发现,早解决,自己在大三的年前就发现了这个问题,今年过年就不要玩了!剑指offer刷起来。
  其实虽然第一次面试就失败了,但是还是很感谢字节跳动给我的机会,第一次面试就能面试这种大厂,真的是十分幸运了。面试官小姐姐人很好,不懂的还耐心的给你讲解。作为一个把抖音卸载了的同学,给抖音一个好评,哈哈哈哈。感谢,字节跳动。
也谢谢大佬,帮我指点简历。

发布了28 篇原创文章 · 获赞 9 · 访问量 3066

猜你喜欢

转载自blog.csdn.net/H1517043456/article/details/103943233