从阿里9面到腾讯5面后被字节捞走,四年Android 开发辛酸之路……

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

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

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

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

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

二面(2017秋招)

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

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

  3. widget的root节点

  4. mixin extends implement之间的关系

  5. jvm内存模型

  6. Future和microtask执行顺序

  7. await for

  8. dart中…的用法

三面(2018春招)

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

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

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

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

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

四面(2018年4月春招)

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

  2. cglib动态代理

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

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

  5. handler的sendmessage和postdelay的区别

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

  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. Future和microtask执行顺序

  2. dart中…是什么

  3. await for使用

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

  5. wait和sleep的区别

  6. jvm线程私有的有哪些

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

  2. 什么是编译时异常

  3. object的方法有哪些

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

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

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

三面

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

  2. 事件分发

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

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

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

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

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

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

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

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

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

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

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

四面

  1. 先谈谈自己的项目

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

  1. 讲一下http连接的框架

  2. retrofit原理

  3. 什么是动态代理

  4. 自定义view

  5. 继承viewGroup的情况

  6. activity的生命周期

  7. 对handler机制的了解

五面

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

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

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

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

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

字节跳动面试题

=========================================================================

一面

  1. Jvm虚拟机

  2. messageQueue会不会阻塞ui线程

  3. 对象锁和类锁

  4. 之字形打印树

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

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
217957)]

[外链图片转存中…(img-iuinxz8R-1715882217960)]

[外链图片转存中…(img-fy6ffDu9-1715882217962)]

[外链图片转存中…(img-rOg1mNgf-1715882217963)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值