应届毕业生拿到字节跳动offer是一种什么样的体验?

199 阅读10分钟

我是2020年6月毕业的某985计科应届本科生,2019年11月是先以实习的身份加入字节跳动上海的头条研发部门。

刚来实习我对于未来的打算如何权衡完全是走一步看一步,也不知读研还是工作。直到2月份,才在与同事的交流中认真思考了这件事情,然后大概3月初便转正彻底留下了,所以没参加过春招秋招拿过啥offer,做不了啥横向比较,只能谈一谈字节跳动实习和工作的体验,这点还是希望学弟学妹早有规划。

首先讲下字节跳动的新人实习,字节是不讲title的,这点可以说很大的提高了沟通效率,提意见没包袱也有益于新人成长。

另外,同事都很年轻,平均年龄只有二十几岁,没有大厂的论资排辈现象,就算是实习也可以own一些事情,不会出现大厂常见现象“面试造火箭,入职螺丝钉”,不会让你实习打杂。

对于还在上学的同学们而言,实习经历还是挺重要的,可以收获很多。建议在校的时候,就要考虑实习了,看看自己是否适合这家公司。

关于待遇和成长,字节跳动的工作薪酬、每月房补、食堂以及下午茶还是有一定竞争力的,这点大家可以自己去了解,这里就不细说了。

这里主要想说的是技术成长,这可能是搞研发的最关注的一个点了,这边研发基础设施很完善,最重要的是,这些轮子代码在公司内部是可见的,并且它们的wiki包括设计文档也都是有权限可看的,公司内部也会不定期组织技术分享,只要想学可以从中学到很多,也可以自己来分享,技术氛围还是相当浓厚的。

下面分享给大家我在面试实习岗时遇到的问题:

一面(问得比较基础):

  • 自我介绍
  • http,https,区别
  • tcp是哪个层,和udp区别
  • http get 和 post
  • jvm 内存
  • 进程线程
  • cpu 调度算法
  • hashmap 扩容,为啥是 2 倍,为啥 size 是 2 的幂次方

二面:

  • 自我介绍
  • 先写一个算法题,一个数组,有正有负,是否存在一个三个数的子序列,并且严格递增,解释了一下子序列,解释了一下严格递增,O(n2)写了,让优化……提示提示提示,我死活想不出来,这时候面试官的提示越来越高大上,提示包含关系,提示命题的逆否,提示到我越来越想不起来……
  • 线程池,线程池参数,从提交任务开始的过程
  • jvm线程怎么调度的
  • 线程生命周期,我说到中间他就会打断说那这个情况怎么出现呢,java怎么实现的,如何结束线程?提供了什么方法
  • java 的锁怎么实现的?
  • 显式控制各个线程竞争的有哪些对象呢?
  • 问操作系统一定有线程吗?
  • static、final、finalize、finally?
  • 设计题,讨论一下,如果我们要自己做一个在线合作文档,类似腾讯文档,有两个需求,一个是多个人在操作的时候尽可能快的要让另一个人去看到前面人的改动;另一个需求是要处理所有人操作的竞争问题,你是怎么想的呢?excel直观,如果是一个doc类型在协作呢?

三面(从项目讲起):

  • 什么时候开始接触Android
  • 挑一个你觉得你在其中贡献最大的比赛或者项目分享一下
  • 你觉得你对于这个项目]的核心贡献是什么
  • 项目里的有关数据是如何实现的?
  • 项目中其他成员的情况
  • 项目最后取得了什么成绩
  • 你平常是怎么学习的?有没有什么独特的学习习惯呢?
  • 你一般怎么安排自己一天的时间呢?
  • 分享一个攻克技术难点的case
  • 你会怎么评价自己呢?
  • 当时为什么会考虑学Android开发呢?
  • 分享一个让你最有挫败感的case

面试经验总结

  • 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你 的简历来问的;

  • 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试 之前好好回顾一下自己所做的项目;

  • 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是 如何使用的;

  • 建议提前了解一下自己想要面试的公司的价值观,判断一下自己究竟是否适合这个公司。

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、 丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

另外,希望学弟学妹早有规划,不妨正式工作前来字节跳动实习多看看。如果你觉得自己目前的硬实力又不到,我觉得还是有必要去努力一下的,技术能力的高低能决定你走多远,平台的高低,能决定你的高度。

下面分享一份我们内部一位大佬整理的《字节跳动Android面试指导小册》,希望能帮助到有心在技术这条道路上一路走到黑的朋友!

一、Android基础+进阶

1.Activity启动模式 2.Activity的启动过程 3.进程通讯 4.Android Binder之应用层总结与分析 5.进程保活方法 6.从源码了解handler looper ,messageQueue思路 7.handler如何实现延时发消息postdelay() 8.Android中为什么主线程不会因为Looper.loop()里的死循环卡死? 9.RxJava原理及如何封装使用 10.okhttp源码分析 11.retrofit源码分析 ......

12.LeakCanary核心原理源码浅析 13.LruCache 使用及原理 14.ARouter原理 15.注解框架实现原理 16.Android 如何编写基于编译时注解的项目 17.RxJava2+Retrofit2+OkHttp3的基础、封装和项目中的使用 18.Rxjava2.0+Retrofit+Okhttp(封装使用)+MVP框架搭建 19.Android 插件化和热修复知识梳理 20.Android开发中比较常见的内存泄漏问题及解决办法 21.如何检测和定位Android内存泄漏 22.图片占据的内存算法 23.为什么图片需要用软引用,MVP模式中的view接口用弱引用 24.基于DataBinding与LiveData的MVVM实践 25.App稳定性优化 26.App启动速度优化 27.App内存优化 28.App绘制优化 29.App瘦身 30.网络优化 31.App电量优化 32.安卓的安全优化 33.为什么WebView加载会慢呢? 34.如何优化自定义View

二、Java基础+进阶

1.HashMap 2.ArrayList 3.LinkedList 4.Hashset源码分析 5.内存模型 6.垃圾回收算法(JVM) 7.垃圾回收机制和调用 System.gc()的区别? 8.类加载过程 9.反射 10.多线程和线程池 11.创建多线程方式、线程池工作原理 12.设计模式(六大基本原则、项目中常用的设计模式、手写单例等) 13.断点续传 14.Java 四大引用 15.Java 的泛型 16.接口、抽象类的区别 17.从 java 容器类的设计讨论抽象类和接口的应用

三、数据结构与算法面试题

1.常用的数据结构有哪些? 2.数组 (1).如何在一个1到100的整数数组中找到丢失的数字 (2).如何在给定的整数数组中找到重复的数字? (小米) (3).如何在未排序整数数组中找到最大值和最小值?(字节跳动) (4).在Java中如何从给定数组中删除多重复制? (5).大数相加(今日头条)

3.链表 (1).那查询第一个跟倒数第二个呢?(这就不一样了,第一个直接给了头结点,倒数第二个需要从倒数第一个开始查询,走两步) (腾讯) (2).arrayList底层原理 (滴滴) (3).如何在一次遍历中找到单个链表的中值?(中国平安) (4).如何证明给定的链表是否包含循环?如何找到循环的头节点?(优酷) (5).两个有交叉的单链表,求交叉点 (华为) (6).如何得到单链表的长度?(360) (7).如何在不使用递归的情况下逆转单链表?(小米/美团) (8).怎么判断链表有环? (滴滴)

4.队列&堆栈 (1).如何使用栈实现队列的功能(广州荔枝FM) (2).两个栈实现一个队列(蘑菇街) (3).两个队列实现一个栈 (腾讯) (4).对比一下队列和栈,以及它们底部实现 (腾讯)

5.二叉树 (1).如何在给定的二叉树中执行先序遍历?(百度) (2).如何实现后序遍历算法?(百度) (3).如何在给定数组中执行二分法搜索?(苏宁) (4).已知前序遍历为{1,2,4,7,3,5,6,8},中序遍历为{4,7,2,1,5,3,8,6},它的二叉树是怎么样的? (5).输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构。 (爱奇艺) (6).请实现两个函数,分别用来序列化二叉树和反序列化二叉树(YY) (7).平衡二叉树和红黑树的区别?(字节跳动) (8).什么是平衡二叉树,它有什么特征 (美团) (9).B 树,B+树

6.HashMap (1).HashMap的底层原理是什么?线程安全么? (百度) (2).HashMap中put是如何实现的? (滴滴) (3).谈一下hashMap中什么时候需要进行扩容,扩容resize()又是如何实现的? (4).什么是哈希碰撞?怎么解决? (滴滴) (5).HashMap和HashTable的区别 (小米) (6).HashMap中什么时候需要进行扩容,扩容resize()是如何实现的? (滴滴) (7).hashmap concurrenthashmap原理 (美团) (8).arraylist和hashmap的区别,为什么取数快?(字节跳动)

7.图 (1).旋转输出矩阵 (2).给定一个矩阵 int matrixA[m][n],每行每列都是增序的,实现一个算法去寻找矩阵中的某个元素 element. 搜狗

8.排序算法有哪些? 9.查找算法 10.串

四、计算机网络部分

1.HTTP协议 2.TCP/IP协议 3.TCP的三次握手与四次挥手理解及面试题 4.网页中输入url,到渲染整个界面的整个过程,以及中间用了什么协议? 5.TCP和UDP的区别? 6.HTTP的几种请求方法具体介绍 7.HTTP请求和响应报文的格式,以及常用状态码 8.一个 TCP 连接上面能发多少个 HTTP 请求 ......

由于篇幅限制,展示了部分内容截图,需要这些文档资料的,可以点赞支持一下我,然后【点击这里】免费阅读下载哦。