5面阿里,4面腾讯,却进了字节?Android程序狗开发三年9次大厂面试真实记录

到今年7月,我已经工作了整整3年!记得还是2017年的夏天,我脱下了属于大学时代的学位服,告别我的整个学生时代,当我找到第一份正式的工作时,就已经宣布我成为正式的上班族了!那个朝气蓬勃的时代、也是一个属于青春的年代。现在回味、无比悠长。

原谅我矫情了一会儿,现在进入正题。想知道阿里面了5次,腾讯面了4次的我,为什么会入职字节跳动吗?看官,请你们接着往下看。

9面大厂的原因

我相信每一位软件开发的毕业生都梦想着进入像BAT这样一线大厂,你们都想着进入当然我也不例外,谁叫我们都是“同道中人”呢!

先说说我吧,虽然我不喜欢别人夸但是你们夸我还是有一点小骄傲的。双非一本毕业,虽然谈不上多么厉害但是也还行,别说读研我是真的不喜欢读书,读研天天要背英语单词难道你们不觉得烦吗?我比较喜欢有逻辑性的事物,因为这样在之后的大厂面试中算法题基本都答对了。

我吧,接触编程接触的比较早,在高一的时候因为我哥给我带了一本自学C语言的书,我便开始沉迷在编程的海洋里,一蹶不振。到现在那本书我还没有扔掉,现在有时间的时候都会看一看,不过现在看来里面的知识点太少了,适合刚起步的新手学习。对了这本书叫《C primer plus》,安利一下。

因为高中三年都热爱着编程,所以我高考完以后报考的志愿只能是计算机这一方向,别人说大学生活都是丰富多彩的,我也信了高中老师的鬼话,说什么高中三年不要玩,好好学习等到上了大学随便你玩,老师都不带管你的。以至于到现在都还没有女朋友,真气死我了...

大学四年中,我自学过Java、Andorid、C++,到后来火热的GO语言、AI,也有一定的了解,却因为大学老师的一段话走上了APP的开发之路,因为当年抖音的爆火,无数短视频APP横空出世,他说:将来做Android的程序员肯定特别吃香,听了老头这话一入坑便是三年。

虽然现在也挺好,在字节能到税后34K,但是我还是觉得,程序员需要的不是行情行业,需要的是实力和技术,只要你有硬实力,无论市场行情怎样,走到哪都会公司企业接纳你。内推不就是一个很好例子吗?

5面阿里,4面腾讯的心路历程

阿里和腾讯和字节一直是我追求目标,其实毕业前,我并没有找到心仪的工作,只是找到了一家小型互联网公司做Android开发(当然,是在面试完腾讯和阿里之后我才明白了我自身实力的不足)。

但是咱不能放弃,一次不行还有第二次,两次不行还有无数次。起码我得进他们的研发部看看他们的大牛到底有多厉害才能进得去那样的大厂?

于是,我开始我的三年面试大厂之路;

三年,我卡死在无数面试题之下,挫败了我也成就了我

我这个人最好的好处就是会在失败中总结,面试遇到不会的题目我会在心中记下,面试结束以后再网上找答案,在记录在我自己的学习笔记中。

比如像Android的音视频,UI线程、view分发反向制约的方法、Future和microtask执行顺序,Java的对象锁和类锁、生产者消费者(非阻塞式)我都会记下来。这也为我之后成功入职字节跳动做好了铺垫。

一面(2018年10月秋招)

  1. 简单介绍项目

  2. 了解哪些数据结构

  3. 了解哪些排序算法

  4. 堆排序

  5. LinkedList与ArrayList;HashMap扩容 ConcurrentHashMap

  6. TCP与UDP,区别及运用场景

  7. http是用的TCP还是UDP

  8. http与https的区别

  9. JVM内存模型(Static方法在哪个区)

  10. Activity生命周期,Activity启动模式,Handler源码

  11. 旋转数组

二面(2019年3月春招)

  1. final、finally、finalize的区别

  2. 抽象类的成员变量与成员方法的继承

  3. union与union all的区别

  4. MySQL的索引的实现

  5. B+树查找的时间复杂度,数据结构

  6. 在浏览器输入网址敲回车后经历了什么

  7. 三次握手

  8. https的加密流程

  9. 对称加密与非对称加密原理(RSA、AES)

  10. 手撕DCL单例

  11. 还了解什么设计模式

三面(2019年四月春招)

  1. 动态代理的方法怎么初始化的

  2. cglib动态代理

  3. 三个线程wait,唤醒情况是什么样的

  4. 最终是谁持有的activity,handler内存泄露(内存泄漏这点真的是无比幸运,刚好找到的视频里面讲过)

  5. handler的sendmessage和postdelay的区别

  6. arraylist和hashmap的区别,为什么取数快

  7. 差不多重复的和模糊的

四面(2019年9月秋招)

  1. stringbuilder 和stringbuffer区别

  2. lock和syncrognized原理区别,适合什么场景。

  3. 实现生产者,消费者

  4. handler原理,是如何实现延时的。

  5. 一个activity启动另外一个activity的生命周期。

  6. 反转链表

  7. 归并排序

  8. 快速排序

五面(2020年5月春招)

  1. 抽象类和接口解释一下。

  2. 讲讲类的加载机制。

  3. jvm的内存回收机制,那你了解哪些内存回收算法。主要用的那个算法。

  4. 抽象类和接口的区别。

  5. Activity有哪些启动模式

  6. Fragment的生命周期和Activity有哪些不同,执行顺序解释一下。(这个回答的有点迷,只能说大体是那么一回事)

  7. 线程和服务的区别,解释一下。

  8. 事件分发机制讲解一下,view中有个onFilterTouchEventForSecurity还是啥,小哥哥说是view中独有的一个方法,你了解吗?(英语水平不过关,没听清是啥方法,表示不清楚。)

  9. 充值模块如何进行的封装

  10. handler的机制讲解一下。

  11. 模板方法讲解一下(脑袋抽了,记不起来)

  12. 如何保证应用的安全性,做了哪些处理。

  13. 加固的原理了解嘛。

腾讯5面面经

一面

  • mmap + native 日志优化?

讲了传统日志打印的两个性能问题,一个是反复操作文件描述符表,一个是反复进入内核态,然后讲了 mmap 的原理机制。

  • 广播和 EventBus 的区别?

说 EventBus 的实现原理是基于反射,里面管理了两张表,且代码之间关联性不大不易于维护,EventBus 不支持跨进程通信,被面试官反问你确定不支持跨进程?我说我的看的源码是不支持,面试官说那好吧。

  • 常用设计模式你了解哪些?

我开始巴拉巴拉说了一大堆,其中说到了装饰设计模式,被面试官打断了,请你具体说说装饰设计模式。

  • 跨进程通信有哪些?

管道,信号,信号量,文件,本地套接字,共享内存,binder 驱动

  • 简单讲讲 binder 驱动吧?

从 Java 层来看就像访问本地接口一样,客户端基于 BinderProxy 服务端基于 IBinder 对象,从 native 层来看来看客户端基于 BpBinder 到 ICPThreadState 到 binder 驱动,服务端由 binder 驱动唤醒 IPCThreadSate 到 BbBinder 。然后又讲了虚拟内存、物理内存和内存映射,跨进程通信的原理是要基于内核的, 当我讲到 binder_open 、binder_mmap 和 binder_ioctl 是被面试官打断了,估计是怕我讲太久了。

  • 跨进程传递大内存数据如何做?

我说 binder 肯定是不行的,因为映射的最大内存只有 1M-8K,可以采用 binder + 匿名共享内存的形式,像跨进程传递大的 bitmap 需要打开系统底层的 ashmem 机制。

  • 说说 ConcurrentHashMap 的实现原理说下,初始化大小是多少?

是线程安全的,实现原理采用的是分段锁,初始化大小是 16 ,必须是 2 的幂次。

  • 启动优化怎么优化?

我说了关键优化 Application ,被面试官打断了,说大家都能想到的东西你不要说了,我想听的是你能不能站在系统的角度去做一些优化,我提到了优化包体积大小能优化启动速度,优化 dex 分包能优化启动速度,可以参考最新的华为方舟编译器等等。

  • 你写的 rxpay 和 rxlogin 具体怎么实现的?

一般我们集成第三方登录和第三方支付 SDK 都需要监听 onActivityResult 方法,我是参考了 RxPermission 的实现方案添加了透明 Activity 。

  • kotlin + fullter 方面的

二面

  1. 单例设计模式都写写,静态内部类是怎么保证线程安全的?

  2. synchronized 底层实现原理,ReentrantLock 公平锁与非公平锁。

  3. 主线程等待所有线程执行完毕,再执行某个特定任务怎么实现?原理和源码看过没?

  4. 自定义 view 的一般流程,要注意些什么如何优化,点击事件和长按时间分别是怎么实现的?

  5. 四种启动模式,在源码分析中的原理是怎样的?

  6. 讲讲 bindService 的过程,你当初是怎么优化后台服务进程的?

  7. 开发中你都用到了哪些设计模式?说说当时具体的场景。为什么你要用方法工厂,另外两种呢?

  8. RxJava 在使用过程中碰到了某些不友好的错误一般怎么解决?发现了内存泄露一般怎么解决分析,有没有碰到过系统服务内存泄露的问题?

  9. 你们用的 okhttp ?那你有没有做过一些网络优化呢?比如弱网环境。

  10. 给你个数 1 吧,比如 1000011 里面有几个 1 ?

  11. 快排了解不?最坏的情况是怎样?如果有大量重复数据怎么优化?

三面

  1. 讲讲 handler 的底层实现原理? 这么简单?问到碗里来了,后面渐渐说到延迟消息是 nativePollOnce 来处理的,在 6.0 以上用的是 epoll 方式来监听文件描述符。接着问道了为什么要用这种方案?它跟 poll 和 select 比起来有哪些优势?它是怎么监听的你看过它的内部实现原理没?反正感觉很难受了。

  2. 说说你做的日志记录优化? 把第一轮面试的又讲了一通,你在每个文件的最后写入了当前内容的大小,你有没有想过如果文件被破坏的情况?这种异常情况怎么处理?后面还问到了加密和压缩。

  3. 你看过 binder 驱动的源码,说说他的内存映射过程,说说客户端等待服务端处理返回的流程,如果要跨进程传递大内存数据你具体会怎么做?简单写一写吧。

  4. 在公司做过哪些优化? 内存优化,启动优化,网络优化,包体积优化,具体说说包体积优化。我提到了包体积优化不仅仅是优化了包的大小,包体积太大从安装的那一刻开始,我们的应用就可能比较慢了,因为 pms 会去拷贝解压解析我们的 apk 安装文件,会去优化我们的 dex 等等,包体积太大还会影响我们的启动速度。然后就巴拉巴拉说具体怎么做,问到了为啥混淆资源能减少包体积大小?你当时优化的时候效果是怎样的减少了多少?

  5. 开发过程中遇到的一些最难解决的问题? 提到了动态修复替换加载 so ,那你知道怎么修复 class 吗?怎么修复资源呢?后面又聊到了插件化,提到了 360 用的是借尸还魂,那如果我们在插件的 Androidmanifest.xml 中注册了其它属性该怎么解决,资源方面怎么处理?

四面

  1. 先谈谈自己的项目

远程数据库传输图片到app端,我们当时将图片转换成base64存在数据库中,然后传到app端,app解析base64获得bitmap,直接显示然后面试官疯狂diss 为什么要将图片转成base64再传(二面也diss这个,问是否可以直接传图片地址)

  1. 讲一下http连接的框架

  2. retrofit原理

  3. 什么是动态代理

  4. 自定义view

  5. 继承viewGroup的情况

  6. activity的生命周期

  7. 对handler机制的了解

字节跳动面试题

一面

  1. Jvm虚拟机

  2. messageQueue会不会阻塞ui线程

  3. 对象锁和类锁

  4. 之字形打印树

  5. 还有其他的记不清了,主要是我对二面印象太深刻了

二面

  1. dart是值传递还是引用传递、

  2. Widget和element和RenderObject之间的关系

  3. widget的root节点

  4. mixin extends implement之间的关系

  5. jvm内存模型

  6. Future和microtask执行顺序

  7. dart中…的用法

  8. await for

三面

  1. linux网络模型

  2. b+树

  3. 阻塞队列

  4. redis和MongoDB的区别。几个概念对比,还有底层实现。

  5. 算法题: mergeksortedlist,时间复杂度如何?

  6. HashMap 如果一直 put 元素会怎么样?hashcode 全都相同如何?equals方法都相同 如何?

所以的面试题和答案都被我整理成PDF,这也为我入职字节跳动提供的保证,近期需要面试的,需要面试题参考的小伙伴(Github领取)PDF资料

文末

最后希望小伙伴们都能有个好的归宿,找到高薪的工作,拿到自己满意的offer。一起朝着大厂努力前进,共勉!喜欢的小伙伴可以拿出自己的小手指点个赞哟(#.#)

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