已经成功拿到了几个offer的我来告诉你,Android面试官问的一些问题,看完这一篇就没有拿不到的offer

Posted 码中之牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了已经成功拿到了几个offer的我来告诉你,Android面试官问的一些问题,看完这一篇就没有拿不到的offer相关的知识,希望对你有一定的参考价值。

前言

我是2020年毕业于中南大学的计算机学院的,大家可以叫我小吴,我嘞毕业之后在华为实习了差不多一年多,一直都从事着android开发。 然后2021年的时候因为我自己的一些原因打算离职到外面看看,那个时候我是投了超级多简历,然后去面试了小红书啊、快手啊,爱奇艺啊,微信,小米…等等很多的大厂,小厂然后下面这些嘞就是我和我同学每次面试后记录的一些面试官问我们的问题(ps:基本上特别的全面),我总结了一些给大家看一下。

简单粗暴的说:用最少的时间,最高效率,让你清楚:想要拿到Android工程师 offer你就要好好的看了

小红书 Android开发工程师

一面

  • Java方面
  1. 静态变量和实例变量的区别
  2. 静态变量有static关键字修饰
  3. 静态变量不属于某个实例对象,而是属于类,也叫类变量,只要程序加载了类的字节码,不用创建任何实例对象就会被分配空间,就可以被使用,也就是说,你创建了多个对象,他们共用了一个静态变量,而实例对象是属于自己的独有的,不会被共享!(可以Class.var使用),位于方法区
  4. 实例变量必须创建对象后,才可以通过这个对象来使用。即new Class().var,位于堆区
  5. “==” & equals()
  6. 浅拷贝 & 深拷贝
  7. HashMap , 扩容机制
  8. 多个线程如果共享多个资源,需要怎么保证安全
  9. volatile,CAS/ABA
  • Android方面
  1. 事件的分发机制
  2. Handler原理
  3. TCP UDP
  4. Kotlin和Java的区别

快手 Android开发工程师

一面:

  1. 一个平面上n个点,找出k条线穿过max点数
  2. 100位面试者,每人要四轮面试,怎么分配面试官

二面:

  1. 手撕:最长单调区间
  2. Android/ 布局优化
  3. Activity启动模式
  4. RecyclerView和ListView区别
  5. Handler机制,loop方法为何不会造成ANR
  6. View绘制流程
  7. SingleTop和standard启动模式下,生命周期回调有何不同
  8. onStart和onResume区别
  9. Java/ 面向对象三大特性
  10. Array和Linked区别
  11. HashMap底层
  12. 进程间通信方式
  13. equals和==区别
  14. 线程间加锁的方式
  15. 知道啥设计模式
  16. synchronized的不同使用
  17. 异常
  18. 线程池
  19. 创建线程的方式
  20. OS/ 死锁
  21. 网络/ tcp和udp的区别

微信视频号安卓工程师

Android方面:

1、讲一下Android发生Crash的整体流程。Android在遇到非可检异常时就会触发该线程的 unCatchExcepttionHandler中的unCatchException()方法,最终在该方法的 process.kill()方法中杀死该进程,appCrash完成。

2、Native层Crash是如何捕获到的?Android NativeCrash发生时会向该进程发出错误的不可处理信号,Linux系统收到该信号后无法处理便会杀死进程,发生Crash。Android当中捕获的方法主要是使用了Linux系统下的核心转储机制,在发生Crash前系统会记录下当前的上下文信息,形成tombstone文件,存储起来,再杀死线程,这个tombstone文件就是我们要分析的对象。

3、Java层Crash是如何捕获到的?JavaCrash的捕获有几个关键部分

4、RuntimeInit类中的LoggingHandler类,用于打印日志时使用

5、RuntimeInit类中的KillApplicationHandler类,是一个系统默认的 UncaughtExceptionHandler,用于发生JavaCrash时kill掉进程

6、RuntimeInit类中的commonInit方法,其内部就是初始化了所有线程的set UncaughtExceptionHandler()。因此在发生非可检异常时,就会调用该线程的
UncaughtExceptionHandler.unCatchException方法,在该方法内部进行捕获。

7、如何做到发生异常时不会杀死APP?在 
UncaughtExceptionHandler.unCatchException方法调用Looper进行死循环可以。

8、讲一下Handler机制

9、Looper的定时器是用如何实现的?通过nativePollOnce(ptr, nextPollTimeoutMillis);定时睡眠nativeWake(mPtr);进行唤醒

10、APK包里有什么?主要有5个部分:

dex文件:.class文件编译后的产物

Assets:资源文件,如图片等,主要是通过AssetsManger来进行加载。

Resource:资源文件,layout等,通过R.xxxxxx.id来进行引用

Library:so库引用目录

META-INF:APK 签名有关的信息

11、APP在运行时是通过什么来获取到layout文件的?

12、讲一下surfaceview跟textview。

13、Activity A 启动 Activity B 时,他们在同一个栈的情况下生命周期以及执行顺序是怎么样的?

14、Destroy()方法是什么时候调用的?

15、调用finish()方法。

16、Handler中已经没有要处理的message。 满足这两个条件才会调用。

Java方面:

  1. 有什么线程同步的机制?
  2. volatile关键字讲一下。
  3. volatile如何实现可见性?
  4. synchronize如何实现可见性?
  5. volatile防止指令重排代码级别如何实现?

操作系统的理解:

  1. 讲一讲操作系统内核态跟系统态的了解。
  2. 操作系统内核是什么?
  3. 操作系统内核本质上就是操作系统代码的常驻机构。
  4. 操作系统内核就是管理所有代码和数据结构的集合。
  5. 操作系统内核是软件和硬件之间的媒介。
  6. 为什么操作系统要有内核态、系统态的存在?
  7. Linux有什么信号?
  8. sigill信号在什么情况下会触发?

算法题:

  1. 给一个数组,每个值表示的是在坐标系中的点下标,找出该数组在组成的最长直线为多少,相同最长长度直线有几条?
  2. 给一段数字,给出其可能组成的所有IP地址。

小米 android开发

  1. http与https的区别。
  2. Java构造器工作工程。
  3. Java中的引用类型有哪些。
  4. http,http1.1,http2.0有啥区别。
  5. TCP/IP最大容量的意义是什么?
  6. 还有Integer与int类型区别?各自怎么比较大小?
  7. 还有垃圾回收机制还有final的用法
  8. 为什么HashMap在1.8中采用了红黑树?你能说下啥是红黑树吗?啥是平衡二叉树?啥是二叉搜索树?啥是满二叉树?
  9. Java1.7采用数组加链表与1.8采用红黑树有啥区别?
  10. HashMap 线程不安全原因是啥?分版本作答
  11. 如果线程安全的话 要用哪个?我说Hashtable。他说HashTable效率太低,怎么安全又效率高?
  12. 对称加密与非对称加密?
  13. SSL是干嘛的?

美团app android开发工程师

一面

  1. jvm内存模型
  2. new 对象的过程
  3. 类加载过程
  4. ClassLoader源码
  5. final关键字
  6. 匿名内部类
  7. 讲下垃圾回收算法
  8. LinkedList && ArrayList
  9. hashMap
  10. 常用注解,spring中的注解
  11. 锁,synchronized底层原理
  12. https && http
  13. 浏览器输入地址后的过程
  14. 状态码 303 304
  15. 你知道的设计模式
  16. 单例模式 说了双重校验锁,静态内部类 ,不同场景下如何选择
  17. 双重校验锁为什么要两次判空
  18. volatile,指令重排

爱奇艺 Android开发工程师

一面:

  1. 介绍项目
  2. Android布局嵌套深有什么问题
  3. kotlin协程
  4. HashMap原理
  5. 算法:手写快排

二面:

  1. Activity启动模式
  2. Activity A → B的生命周期在这四种启动模式下的状态
  3. 广播类型
  4. 有序广播如何实现的按顺序收到广播
  5. 持久化存储方式
  6. SharedPreferences的格式
  7. xml解析方式
  8. json与xml的区别,json为什么比xml更好
  9. Android view绘制流程
  10. surfaceView
  11. sp, dp, px的区别
  12. 机型大小适配
  13. 适配语言
  14. ANR 什么时候出现,如何排查
  15. Android动画
  16. startService与bindService的区别
  17. Service保活方式
  18. java泛型,<? extends T>能否add元素
  19. 重写equals方法需要重写hashCode方法吗
  20. ThreadLocal
  21. wait,sleep,yield,join的区别

算法1:

  1. 字符串全排列

算法2:

1、删除链表中倒数第n个节点

字节跳动旗下的抖音短视频Android开发工程师

一面:

  1. 项目
  2. volitale与synchronized的区别
  3. 手写单例
  4. 匿名内部类如何持有外部类对象
  5. 内存泄漏的概念
  6. 内存泄漏的场景
  7. 内存泄漏检测的工具
  8. handler原理,sendMessage与sendMessageDelay如何保证Message放入MessageQueue中的顺序
  9. 两个Message相隔5秒,这5秒内线程会一直阻塞吗
  10. 自定义 View如何特殊处理wrap_content,padding的实现
  11. MVVM和MVP 的区别(引出了一系列问题,不是很了解就直接说不了解比较好)
  12. LiveData与RxJava的区别
  13. LiveData生命周期感知如何实现
  14. 介绍RxJava
  15. https与http的区别,中间人如何修改密钥
  16. 算法:二叉树z字形打印

二面:

  1. 项目
  2. final、finally与finalize的区别
  3. java开启一个线程的方式
  4. Thread.start()与直接调用run()的区别
  5. Java默认提供了几种线程池
  6. thread i++ 执行10次结果,如何让i最后等于10
  7. synchronized与reentrantlock区别
  8. 死锁
  9. 悲观锁乐观锁
  10. gc垃圾回收
  11. 垃圾标记阶段,Python如何实现的断开循环引用
  12. Retrofit返回的是什么数据类型
  13. 服务器返回的数据有哪些类型,为什么不能用xml类型返回
  14. 请求数据这个过程发生了什么
  15. get与post请求的区别,get与post携带数据的区别
  16. java注解
  17. kotlin扩展函数原理
  18. 算法:两个链表相加

三面:

  • main方法执行之前发生了什么
public class Main  
  	public static void main(String[] args)  System.out.println(Main.class.getName());
 

  • System.out.println(“a”)将字符输出到屏幕发生了什么
  • 双击QQ发生了什么
  • 浏览器输入url发生了什么
  • 根据前序遍历和中序遍历输出后序遍历
  • 如果排期只有一周的任务,但是以我的能力需要两周才能完成,这个时候你会怎么办。
  • k个一组反转链表

字节跳动旗下的抖音电商相关 Android开发工程师

一面:

  1. 实习学到的架构
  2. MVVM
  3. Dagger原理
  4. livedata原理
  5. 进程和线程
  6. 操作系统IO模型
  7. 进程通信方式
  8. 管道通信原理
  9. TCP协议如何实现可靠传输
  10. UDP如何实现可靠传输
  11. java创建线程
  12. 线程池原理
  13. 线程池拒绝策略
  14. synchronized与reentrantlock实现方式的区别
  15. AQS原理
  16. handler原理
  17. Retrofit原理

算法:

  1. 二叉树右视图 — 非递归实现

二面:

  1. Navigation的优缺点
  2. 如何实现的自定义navigate方法切换fragment,如何让被覆盖的fragment感知到生命周期
  3. gc如何判断垃圾对象
  4. 成员变量与局部变量的区别,局部变量的值一定是存放在堆中吗()
  5. jvm类加载的时机
  6. jvm类加载过程
  7. 双亲委托机制是什么
  8. 双亲委托机制什么时候会被破坏
  9. 内存泄漏是什么
  10. volatile的作用
  11. 写一个死锁
  12. 算法:判断A是否是B的子树

三面:

  1. 自己是如何学习Android的
  2. 实习过程中做的需求说一下
  3. 实习过程中的难点说一个
  4. 实习过程中和哪些人接触的比较多
  5. 如何和别人沟通的
  6. 实习的收获
  7. 挑一个项目说一下
  8. 里氏替换原则
  9. http状态码
  10. http多路复用
  11. 数据库
  12. 拿了哪些offer
  13. 算法 汉字表示的数字转成阿拉伯表示。

最后

我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。其实我觉得技术面试是一个 让我们认识自己 的一个过程,让我们知道现在招聘这个岗位的要求差距和我们差多少。

更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 去发现对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有问题了,要去试图了解他的工作内容、了解这个团队的工作氛围。

找工作无非就是看这三点:做什么事,和什么人,给多少钱,要给这三者在自己的心里有那么一个划分。

谢谢各位看官老爷的观看,虽然我只是把题目提供给大家了,但是大家理解一下小吴题目实在太多了(ps:其实是我偷偷在玩游戏没有搞完,然后看到现在是三月了,很多企业都开始大规模的招聘了),各位看官老爷下次更新我一定后答案也反正里面,小吴在这里希望各位看官老爷通过我分享的题目顺利的拿到自己心爱的offer。点点赞和关注,给小吴加油咯。(ps:这可是熬夜写出来的呀,各位各位看官老爷动一动小手!)

嘻嘻!刚拿到毕业证的我,拿着offer走进了字节跳动,美滋滋

前言:

没有绝对的天才,只有持续不断的付出。对于我们每一个平凡人来说,改变命运只能依靠努力+幸运,但如果你不够幸运,那就只能拉高努力的占比。

2021年7月,我有幸成为了字节跳动的一名Java后端开发,正如标题所说,大专刚毕业的我,走进字节跳动拿下了offer。相信同行都清楚,从外包进大厂有多难,运气之余,也离不开我自己的脚踏实地,所幸每踏出的一步都留下了厚厚的脚印。

我从外包辞职了,10000小时后,走进字节跳动拿了offer

下文内容涉及到:面试题(含答案)+学习笔记+电子书籍+学习视频!

A:字节跳动IES互娱面试经历还原(抖音后台)

<1> 字节跳动抖音4面面试题

因为我个人有复盘的习惯,所以在面试字节跳动时,基本是做到了每一轮结束就把面试题给总结出来,当然总结出来的可能跟实际情况有细微出入,但相差不大,基本上是我记忆里的极限。

Java部分:

  • synchronized,lock,AtomicInteger底层原理
  • HashMap,ConcurrentHashMap底层结构原理
  • 讲讲服务注册于发现(这部分主要讲了springcloud eureka 和部分 zookeeper,zookeeper的选举机制)
  • Spring AOP 的实现方式,siglib 能否代理final修饰的类?
  • JVM垃圾回收过程,并详细讲一种垃圾回收器
  • 强引用,软引用,弱引用,虚引用应用场景

计算机网络:

  • 拥塞控制和流量控制
  • 快重传和超时重传
  • 为什么四次挥手后客户端等2MSL
  • DNS解析全过程
  • http2.0,http3.0
  • https的连接过程
  • CA证书的验证过程
  • RPC框架了解吗?
  • 如何设计基于udp的可靠传输?
  • tcp如何保证数据安全性的?磁盘如何保证数据不丢的?

操作系统:

  • 阻塞io和非阻塞io
  • 进程和线程区别,通信方式分别是什么?
  • 虚拟内存和物理内存
  • linux 按 ctrl + c 中断的原理
  • 协程高效在哪?

MySQL:

  • Innodb,B+树,聚簇索引和非聚簇索引区别
  • 一千万条数据,问 b+树大概多高?
  • 为什么用b+树而不是 b树,红黑树?
  • 在设计联合索引时需要注意什么?
  • 联合索引最左原则的底层原理
  • mysql 的 MVCC 以及是否解决幻读?
  • 手写sql,实现一个按时间降序的分页查询
  • redo log,bin log,undo log

Kafka:

  • kafka的rebalence
  • ISR
  • 如果新加进一个消费者会发生什么?
  • 如何保证数据一致性?

Redis:

  • RDB和AOF区别
  • 为什么RDB 要 fork子进程而不是线程?
  • redis基本数据类型
  • zset的底层数据结构,跳表何时增加高度?
  • 分布式 redis,缓存和数据库读写不一致,答的延迟双删
  • 面试官让随便讲讲redis,所以还说了缓存穿透,击穿,雪崩以及处理方法

场景题和智力题:

  • 打字的智能提示和纠错的原理,让你来设计,你怎么做?
  • 如果有一个访问过的所有网站的记录集合,如何快速判断当前网站是已经访问过?(考虑布隆过滤器)
  • 从一个网站下载的时候,进度条如何实现的?
  • 64匹马,八个赛道,问至少跑多少次能找到最快四匹马?
  • 操作系统给你一块空闲内存,你如何设计使用和回收?

手撕代码:

  • 柱状图中矩形最大面积 leetcode 84
  • 查找第k小的数,用堆以外的方法做
  • 给m个房子涂n种颜色,相邻房子不同色,cost[i][j]表示给i号房子涂j颜色代价,求最小上色总成本。(LeetCode原题)

其他:(HR和Leader都问了一些开发性问题)

  • 你认为遇到过最大的挫折是什么?怎么解决的?
  • 职业规划
  • 对字节跳动的认识
  • 你认为字节是一家年轻的公司吗?年轻是核心竞争力吗?
  • 你有没有崇拜的人
  • 不考虑公司地理因素,最想要去哪个城市工作?
  • 平时的兴趣爱好?
  • 喜欢写博客吗?看什么书?

我从外包辞职了,10000小时后,走进字节跳动拿了offer

赠送我的刷题题库(1:BAT一线大厂面试真题)

我从外包辞职了,10000小时后,走进字节跳动拿了offer

赠送我的刷题题库(2:专题面试题)

<2> 字节跳动面试总结(一些心得和小建议)

  1. 字节跳动对算法真的非常重要,提前刷题真的很有必要,不然基本上没戏,运气好的说不定还能被问到原题,当然你是算法大神,就不需要浪费时间在这上面了。
  2. 基本上每轮都有算法题,1~3道左右,难度不一,一般根据当次面试情况来的,会考虑的面试者的表现,但也不会太为难你。
  3. 拿到算法题时,不要立即作答,可以先和面试官聊一下自己的思路。

我从外包辞职了,10000小时后,走进字节跳动拿了offer

B:我为什么想要去字节跳动?(字节跳动的优势)

①福利待遇

我不是hr,也不是给字节打广告,这里真的要提一下字节跳动的福利待遇绝对是一线厂子里数一数二的。加上我是外包出身,这种待遇给我造成的落差感就更明显,让我觉得能够进字节跳动工作算是我最大的幸运了。

至于福利待遇,这里随便提及几点:

  1. 弹性打卡
  2. 房补(额度算很高了,算很人性化)
  3. 免费的三餐、下午茶(吃胖了)
  4. 免费健身房
  5. 顶配16寸MacBook
  6. 各种节日礼包

②巨大的知识库

字节跳动对于我来说,算是一个巨大的知识库,之所以这么说,从面试的流程及细节,到后来我入职之后工作上面的安排,都让我有不一样的触动。从这几方面,我们都能够感受到公司对于员工的职业规划非常重视,你的主管和导师都会主动去找你沟通这方面的,这对比我之前的外包,是截然不同的地方。而在这个交流过程中,我获得到的,不是一星半点。

最让我佩服的是,字节有统一的入口可以导航到海量的指南和知识沉淀,甚至是其他各个产品线整理的技术和业务文档等等。

③我看到了认同

来到字节,我看到了认同,收获了归属感。字节跳动虽然年轻,但在做事上有共同一致的目标,这里的人讲“字节范儿”,它不是条条框框的束缚,它是一种精神食粮,实质是一种价值认同。恰好,拥有同一种价值认同的人走到了一起。

④虽辛苦,但不感觉累

字节跳动是一家非常年轻化的公司,对于一线的互联网公司来说,996是常态,字节跳动也脱离不开“加班”二字。但是字节给我最大不同的感受是,忙碌且生机勃勃。在字节工作一段时间了,我也算是跟上了这里的节奏,虽然辛苦,但我却一点也不感觉累,因为在充实的工作环境中,我是有所收获的,在公司野蛮生长的同时,我个人也得到了快速的成长。

另外,别以为一线大厂的“打工人”只会死工作,字节人最大的特点就是年轻,他们同样会玩,每个人都有自己的爱好,骑行、狼人杀、健身、摄影、瑜伽等等,这与我之前对大厂人的印象显然不同,我也一点一点在慢慢被影响着。

⑤反思:关注工作效率

以前觉得自己的工作效率和时间管理做得还不错,至少能拿出时间做一点大家想做却没有做的事情,但现在才发现这也许只是错觉,你总做容易的事情,当然不会感觉到时间的压力,即便是项目进度比较紧的时候,加加班,搞搞996似乎也就那么回事。我们通常都会愿意延长时间,而不是考虑如何提高效率,在同样的时间内完成更多的工作,当然也有很多不言自明的客观原因。

来字节后,我才从身边同事的工作细节中看到了什么才是“效率”。

我从外包辞职了,10000小时后,走进字节跳动拿了offer

C:实习教了我什么?(积累了什么?)

很多人认为在实习学不到什么东西,但我却不这么认为,无论你身处什么环境,造成什么样结果的人都是你自己。所以,在外包工作的这些年,我并不是单一的机械化敲代码,在这个过程中,我会主动地去复盘,去总结,去学习,而慢慢积累的工作方式才铸就了我今天的“质变”。

在实习中,我积累到了什么?

  1. 代码效率;
  2. 各种项目和业务的理解;
  3. 熟练使用增删改查。

在实习中,我复盘了什么?做了哪些总结?(写了一些博客,做了一些笔记总结,附下PDF)

  • Java架构成长笔记

我从外包辞职了,10000小时后,走进字节跳动拿了offer

  • Redis核心技术笔记(学习总结)

我从外包辞职了,10000小时后,走进字节跳动拿了offer

  • Spring全家桶学习笔记(SpringBoot+SpringMVC+SpringCloud+源码等)

我从外包辞职了,10000小时后,走进字节跳动拿了offer

  • 其它

D:下一个3年如何规划?

1.确定发展方向

程序员生涯大致分为五个阶段:

  • 第一阶段:2-3年,初级程序员
  • 第二阶段:3-5年,中级程序员
  • 第三阶段:4-7年,高级程序员
  • 第四阶段:5-8年,互联网架构师,大数据工程师
  • 第五阶段:8年+,技术总监,技术主管,首席架构师

目前,我处于第二阶段,有一定的工作经验,可以独立做一些项目,也有自己的代码习惯,甚至在团队中我也可以担任重要的角色。而日后的1-2年内,我肯定是要往三阶段过渡,甚至是四阶段过渡。

2.梳理学习路线

想要快速成长,一条合理且正确的学习路线才是最为重要的,所以梳理学习路线,是我目前学习上最重要的事情。(个人梳理的学习路线图如下)

目标:能够独当一面,在专业领域具备辅导他人的能力

学习内容:并发编程与JVM实战+缓存中间件+消息中间件+搜索中间件+高并发+高可用+搞扩展+网络通信与协议+分布式与微服务+分布式权限控制+微服务熔断降级与限流+微服务链路追踪+底层&源码深入解读+一线大厂分布式场景实战

我从外包辞职了,10000小时后,走进字节跳动拿了offer

3.学习方法

我个人的学习方法很简单,利用碎片时间进行系统性的学习。关于学习方法,我个人喜欢阅读书籍文档结合视频的方式,对于这些我自己个人也有一些整理。

  • 阅读书籍文档:

我从外包辞职了,10000小时后,走进字节跳动拿了offer

  • 看视频学习:

结尾:未来愿景及祝福

我知道,对于一些学历没有优势的人来说,外包是别无选择,但是未来的路究竟要怎么走,取决你的步子迈多开。每个人都有自己的选择,如果你喜欢稳定,那按部就班适合你,但你有想法,不甘平庸,那就别让外包埋没了你。

最后,希望未来的我发展顺利,早日拿下p7!同样,也祝愿你实现自己的人生理想,愿我们都越来越好,共勉!

由于内容实在太多,无法全部展示,需要的朋友们注意啦:一键三连(点赞+收藏+关注)

以上是关于已经成功拿到了几个offer的我来告诉你,Android面试官问的一些问题,看完这一篇就没有拿不到的offer的主要内容,如果未能解决你的问题,请参考以下文章

谷歌PM面试官告诉你,如何成功拿到理想offer

学校带学院结尾,是我的锅吗?但就算如此,二本渣院的我还是拿到了阿里的Offer

6k工资的软件测试工程师真的够了吗,不甘现状---最后成功拿到15k+的offer

你们计划金九银十面试?38岁的大龄程序猿就靠这份参考指南Java面试题成功拿到大厂offer,年薪涨到68w真香啊~

嘻嘻!刚拿到毕业证的我,拿着offer走进了字节跳动,美滋滋

仅一年工作经验成功跳槽字节跳动,腾讯并拿到字节的offer,全靠这份面经!