到今年7月,我已经工作了整整3年!匆匆三年如白驹过隙,我还依然记得2017年的夏天。

在那个夏天,我脱下了属于大学时代的学位服,告别我的整个学生时代,我找到我的第一份正式的工作,也经历了我从校园融入社会的坎坎坷坷!那个朝气蓬勃的时代、也是一个属于青春的年代。现在回味、无比悠长。

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

25次大厂面试的原因

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

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

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

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

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

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

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

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

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

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

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

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

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

阿里9次面经

一面(2017校招)

  1. 数据库的四大特征,数据库的隔离级别?

  2. HTTP 与 HTTPS 有什么区别?

  3. 数据库设计中常讲的三范式是指什么?

  4. 说一下反转链表?

  5. 静态代理和动态代理的区别,什么场景使用?

  6. 线程池都有哪几种工作队列?

  7. 两个进程同时要求写或者读,能不能实现?如何防止进程的同步?

  8. 什么是 ANR 如何避免它?

  9. APP性能稳定性是怎么做的?

  10. 你做了内存优化最大的感受是什么?

  11. Kotlin 特性,和 Java 相比有什么不同的地方?

  12. react native 有多少了解?讲一下原理。

二面(2017秋招)

  1. 怎样获取当前线程是否是主线程

  2. 怎样检测函数执行是否卡顿

  3. 常用的对称加密算法,有什么同

  4. view分发反向制约的方法

  5. 这次的面试没及时复盘,所以后半个小时的面试题忘得差不多了。这次的面试官比较严肃,搞得我有点紧张,所以最后 还是挂了,然后就是新一轮的面试。

三面(2018春招)

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

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

  3. widget的root节点

  4. mixin extends implement之间的关系

  5. jvm内存模型

  6. Future和microtask执行顺序

  7. await for

  8. dart中..的用法

四面(2018年4月春招)

  1. Future和microtask执行顺序

  2. dart中..是什么

  3. await for使用

  4. singleinstance的启动模式如果不指定栈名,是怎么分配的

  5. wait和sleep的区别

  6. jvm线程私有的有哪些

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

五面(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. java异常分类

  2. 什么是编译时异常

  3. object的方法有哪些

  4. 虚拟机为什么能让class文件让机器识别

  5. 除了json之外,客户端和服务器通信还有哪些格式

说了xml,hashmap,但是好像不是很满意,后来网上查到还有protobuf

  1. 源码中looper的while循环是怎么确定调度的,比如MQ为空时怎么办?

  2. 事件分发

字节跳动面试题

一面

  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,这也为我入职字节跳动提供的保证,近期需要面试的,需要面试题参考的小伙伴如下领取方式。

领取方式:

需要获取资料文档的朋友 可以关注+转发后点击这里免费领取

感言

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

需要获取资料文档的朋友 可以关注+转发后点击这里免费领取

大厂面试辛酸泪,阿里面了9次,字节捞了offer?Android开发狗25次相关推荐

  1. 阿里P7大牛整理!BAT大厂面试基础题集合,成功入职字节跳动

    都说大厂面试必问源码,可很多人看完MMKV 源码.Handler 源码.Binder 源码.OkHttp 源码等源码记不住,是脑子有问题吗?当然不是!是因为你没有掌握学习源码的技巧. 我的朋友子路,很 ...

  2. 计算机视觉算法实习生:大厂面试经历(百度、京东、滴滴、字节、美团,旷视,快手,小米)

    一.自我介绍: 不谈自我介绍直接说经验,就是耍流氓,软性条件决定了简历筛选和面试的侧重点. 一些内容我可能没复习到,但不是说不重要,明确这点! 学历:985硕士 实习:清华大学(2020.4~2022 ...

  3. 【大厂面试合集】每日一刷——5. 字节跳动飞书部门2022后端工程师实习真题

    每日一句 每日一刷 考试时间 100min 一面 1. TCP,UDP介绍,差别 TCP/UDP协议为传输层协议,传输层用于向用户提供可靠的端到端(每个进程都用一个端口号唯一标识)的通信,通过提供流量 ...

  4. 讲述非科班的面试过程:阿里三面+交叉面试+技术面试+HR面试,一路艰难,中拿下了字节跳动的offer!

    阿里三面+技术面试+两轮交叉面试+HR面试,终于艰难啃下了这份阿里淘宝的Offer 背景介绍:项目是管理系统,本科211(非科班),硕士985(非科班). 我面试的岗位:java工程师 部门:新零售事 ...

  5. Android面试中多说这么一句话,薪水直接涨5k,Android开发社招面试解答之性能优化

    实际上,工资结构是由:月薪.五险一金.加班费.带薪年假.期权.股票等一起构成的.所以在后面的面试环节一定要问清楚公司的工资结构是由哪几部分构成的. 在了解工资结构之后,要对所投递行业的薪水范围进行调查 ...

  6. 一起看看这些大厂面试真题查漏补缺吧,专题解析

    前言 职场的金三银四跳槽季又来了,不同的是今年比往年「冷」一些,形式更加严峻一些,大家多多少少可能都听到或看到一些信息,就是好多公司在优化裁员,作为求职者来说,面试是一道坎,很多人会恐惧面试,即使是工 ...

  7. Android开发新手入门教程!阿里面试100%会问到的JVM,一线互联网公司面经总结

    前言 2020年,互联网裁员潮下,我度过了人生中最清晰的半年. 今年我本命年,熬过了程序员35的坎,却在36岁被公司破产来了当头一棒,领完了当月份的工资,老板,也是我哥们的老李走进我的办公室,没有迂回 ...

  8. Android开发社招面试解答之性能优化,鬼知道我经历了啥

    写在前面 1月初失业,找了近2个多月的工作了,还没找到心仪的工作,感觉心好慌,不知道该怎么办了?找不到工作的时候压力很大,有人说自信会很受打击,还有人说会很绝望,是人生的低谷--尽管很多时候我们自己知 ...

  9. Android开发知识体系!Android面试吃透这一篇就没有拿不到的offer!挥泪整理面经

    1.项目介绍 Flutter是目前比较流行的跨平台开发技术,凭借其出色的性能获得很多前端技术爱好者的关注,比如阿里闲鱼,美团,腾讯等大公司都有投入相关案例生产使用. 基于Flutter+Dart+ch ...

最新文章

  1. POJ2728 Desert King ——01分数规划Dinkelbach迭代法+最小生成树prim算法
  2. 1、在Centos上安装Grafana
  3. 专访4秒源码商城CTO陈杰:扎根互联网的“不安的心”
  4. 1.4 Hive和数据库的比较
  5. Android Wifi方法大全
  6. r生成新的dataframe_2020-08-11R语言中dataframe与list的转换方法
  7. python数据结构递归树_python数据结构(对称二叉树递归和迭代)
  8. 聚焦LS-MIMO的四大层面,浅谈5G关键技术
  9. HBase编程 API入门系列之HTable pool(6)
  10. 怎么编译shell_运维如何才能学好 Shell?
  11. java 构造函数的执行顺序
  12. 【读书笔记】企业IT架构转型之道 阿里巴巴中台战略思想和架构实战
  13. 云服务器快速配置阿里巴巴NTP(网络时间协议)
  14. 微型计算机就是完全采用大规模集成电路,湖南工大计算机在线作业
  15. 查看本地硬盘raid级别linux,linux 下查看硬盘型号、大小等信息(含Raid)
  16. 记录下对游戏主机配置的个人理解与心得
  17. 神话情话(神雕侠侣主题曲)铃声 神话情话(神雕侠侣主题曲)手机...
  18. wlh机器人_恐怖谷理论,人类对仿真机器人的天生恐惧
  19. DEP6957: 未能使用“通用身份验证”连接到设备“127.0.0.1”
  20. prototype鼠标指针_html5鼠标点击页面光标圆点动画特效

热门文章

  1. matlab留学生作业代做,25877留学生作业代做、代写MATLAB,R编程设计作业、代做MATLAB/R课程作业、代写portfolio作业...
  2. isakmp_profile
  3. 计算机十六进制4BH表示多大,【转】windows消息16进制对应表
  4. 清晰理解Yii的事件和行为
  5. 在过程中要正式批准可交付成果_●根据客户的要求,CCB批准对项目可交付成果做重大变更;项目质量标准也要据此变更进行相应变更。项目质 - 信管网...
  6. git -- 安装及配置
  7. Linux常用命令——unzip命令
  8. [ 树状数组 ] BZOJ5170
  9. 笔记:使用win10自带功能进行提取PDF页面的操作
  10. 《点云-外文文献翻译》part2 Computing and Rendering Point Set Surfaces-Marc Alexa