心酸!来之不易的字节和腾讯offer,全程无雷点Android面试总结,让你成为下一个接力!

  • 自我介绍,项目经历,项目上的优化项以及优化的原因

  • Rxjava源码原理,以及项目中你是如何将Rxjava流进行复用。

  • 你项目中高度自定义了DiskLRUCache。问LRUCache的实现?问LinkedHashMap的实现?问DiskLruCache的实现?问Glide中实现的DiskLruCache的运用。

  • Handler的原理

  • volatile原理

  • synchronize 锁的转化流程。

  • ReentrantLock 实现。

  • ui 优化,首屏渲染时机优化

  • 启动优化,与AlphaManager的实现。

  • 插桩的原理以及运用。

  • ASM

  • Javapoet

  • 动态代理

  • LiveData 和 ViewModel的源码实现

  • x2c 源码实现

  • DNS 原理

  • https的原理

  • 算法:判断一个字符串是否是回文串(注意保证原字符串不可改变,可用O(n)的空间复杂度)。

方向:栈的考究。

字节3面 Leader面

  • 1.工作软技能的考核,以及团队中的定位

  • 2.如何进行io 优化,指标是什么,优化后的结果以及参数是多少?

方向:可以使用/proc/pid/stat读取cpu的idle,iowait等。使用mmap优化后的结果。

  • 3.算法:在一个单链表中,每k个节点进行反转,无法被反转的部分放在末尾。

腾讯面试


腾讯的面试风格,普遍是基于你的简历上项目经历,往细节往深处问。我是面试因算法失败了一次,后面第二次就成功了。

总结一下2次腾讯面试

腾讯第一次面试1面

  • 自我介绍,项目经历,项目上的优化项以及原因

  • ARouter 源码实现,项目中对ARouter的扩展实现详细设计

  • ui 优化,启动优化,首屏展示时机优化

  • volidate 实现

  • Java异常捕获

  • DNS 原理

  • https的原理

  • jni 中JNIEnv 和线程的关系

  • jni中有几种注册native方法。

  • Native异常捕获

腾讯第一次面试2面

  • 自我介绍,项目经历,项目上的优化项以及原因

  • ARouter的实现,以及自定义扩展ARouter的实现

  • 项目中的io 优化,以及为什么用mmap于io优化

  • mmap的实现

  • mmkv 中 对应 mmap 断电时候的处理机制

  • mmap没调用msync时候,落盘时机。

  • 算法:合并三个单链表(可参考leetcode 合并多个单链表)

因为自己画蛇添足,把每一个节点拷贝了一次,还没有往后迭代,实在是错漏百出就挂了。脑袋还是不够清醒,结果饮恨而归。

腾讯第二次面试1面

  • 自我介绍,项目经历,项目上的优化项以及原因

  • ARouter 的实现,以及扩展的实现

  • 启动优化,以及ARouter的启动优化方式,ARouter的分区方式

  • Navigation的源码解析

  • 基于Navigation 编写路由框架NavigationRouter 的源码实现,以及实现的优点

  • Navigation 实现的路由框架中如何处理Activity和Fragment 嵌套启动的方式

  • class的加载流程

  • Handler的实现(最好能回答到epoll和eventfd的层面)

  • 实现一个多线程下的消费者生产者模式

腾讯第二次面试2面

  • 自我介绍,项目经历,项目上的优化项以及原因

  • io 优化 与 使用mmap的优势和缺点

  • ARouter 的实现,以及扩展的实现

  • 多进程实现的路由

  • 如何进行多进程的同步调用,此时另一个进程还没有启动?

  • 数据结构中不支持多线程的数据结构,如果使用多线程操作会造成什么结构

  • ArrayMap 实现

  • HashMap 与 ArrayMap比较,两者的优缺点

  • handler 的原理

  • handler 是怎么进行postDelay 延时操作。

  • 当handler 只有一个延时的message时候,Looper中是如何运行。

  • volidate 原理

  • 当没有添加volidate 修饰属性的时候,数据什么时候从缓存行刷新到主存。

  • 算法题:在一个n*n的方格中。有两种方格,1代表阻塞不能经过,0代表可达。两点坐标,a和b。问a到b的最短路径。

腾讯第二次面试3面和4面

腾讯3面和4面是联系到一起的,这里一起说了

  • 自我介绍,项目经历,项目上的优化项以及原因

  • mmap 实现原理和io优化

  • View的绘制流程,从 setContentView 解析xml到View的绘制结束。

  • 硬件渲染流程

  • SurfaceFlinger 在 View绘制流程中扮演的角色

  • Choregrapher 的工作原理

  • OOM 如何优化,内存爆满是虚拟内存容易先爆掉还是物理内存容易,一口气映射4g的内存是否会发生异常。

  • Bitmap 如何优化避免OOM,为什么放在native中bitmap不容易OOM

  • 一个进程最多可以使用多少fd

  • 你研究过RN和Flutter,RN的渲染机制和Flutter的渲染机制是如何运作的?他们之间区别是什么?

  • 插件化你是如何实现的。

  • 算法1: 将一个int的数字转化成汉语说法。如10000转化为一万。

  • 算法2:中国下棋的马,能否吃掉另一个坐标的旗子,请找出坐标

腾讯二次面试5面

本次面试是两个面试官进行考察,考察的东西偏向网络协议。

  • 自我介绍,项目经历,项目上的优化项以及自己开源在GitHub上项目的特点。

  • 当遇到弱网络时候的优化

  • 当遇到弱网络时候,网络是如何进行文件重传

  • 当遇到弱网络时候,手机连接上了4g,但是没有数据流量时候,如何检测并恢复。

  • 当app在播放音视频的时候,需要注意的要点,以及相关的实现。

总结

从专业技能考察可以看到,实际上整个面试过程。腾讯面试的会相对仔细一点,技术广度更加广一点;而字节则更加偏向基础是否扎实。都是从你的简历项目,技术点开始询问,并根据你回答的问题,不断的调整询问的方向,不断的向下挖你的知识点,看能达到什么程度

但是无论如何,你回答的层面最好足够深,从源码层级说起来。有时候面试官的对问题的看法和你的看法有分歧,此时就需要你是否可以从源码的层面上对这些问题有自己的解释。

面试的时候只需要沉着冷静的思考,从源码的角度对面试官抛出来问题进行分析,就能比较轻松的解决。

最后有人好奇我去了哪里。应该是去腾讯。

Android开发技能储备

Android学习是一条漫长的道路,我们要学习的东西不仅仅只有表面的 技术,还要深入底层,弄明白下面的 原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。

如果你觉得自己学习效率低,缺乏正确的指导,可以参考下下面分享我多年工作以来收集整理的学习路线,给大家做个参考:

学习一线大厂的各项技术:

大厂是我们的技术先驱,不仅仅是各种技术,还有很多令你大开眼界的使用方法,学习这些有利于自己竞争力的提高,深入理解后也可以提升你的学习效率。

现在竞争这么激烈,只有通过不断学习,提高自己,才能保持竞争力。

1.2020大厂面试高频知识点

  • 图片

  • 网络和安全机制

  • 数据库

  • 插件化、模块化、组件化、热修复、增量更新、Gradle

  • 架构设计和设计模式

  • 性能优化

  • Android Framework

  • Android优秀三方库源码

2.Jetpack架构组件从入门到精通

  • Android Jetpack - Navigation

  • Android Jetpack - Data Binding

  • Android Jetpack - ViewModel & LiveData

  • Android Jetpack - Room

  • Android Jetpack - Paging

  • Android Jetpack - WorkManger

  • Android Jetpack架构组件之Lifecycle

  • Android Jetpack Compose 最全上手指南

3.Framework精编内核解析

主要内容包含:

  • 深入解析Binder

  • 深入解析Handler

  • Dalvik VM 进程系统

  • 深入解析 WMS

  • PackagerManagerService

4.Kotlin强化实战(附Demo)

  • 第一章 Kotlin入门教程

  • 第二章 Kotlin 实战避坑指南

  • 第三章 项目实战《Kotlin Jetpack 实战》

  • 从一个膜拜大神的 Demo 开始

  • Kotlin 写 Gradle 脚本是一种什么体验?

  • Kotlin 编程的三重境界

  • Kotlin 高阶函数

  • Kotlin 泛型

  • Kotlin 扩展

  • Kotlin 委托

  • 协程“不为人知”的调试技巧

  • 图解协程:suspend

5.Android设计思想解读开源框架

  • 热修复

  • 插件化

  • 组件化框架设计

  • 图片加载框架

  • 网络请求框架

  • RXJava 响应式编程框架设计

  • IOC 架构设计

  • Android架构组件Jetpack

6.NDK模块开发

  • NDK 模块开发

  • JNI 模块

  • Native 开发工具

  • Linux 编程

  • 底层图片处理

  • 音视频开发

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

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

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

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

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

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

如果你进阶的路上缺乏方向,可以加入我们的圈子和安卓开发者们一起学习交流!

  • Android进阶学习全套手册

    img

  • Android对标阿里P7学习视频

    img

  • BATJ大厂Android高频面试题

    img

最后,借用我最喜欢的乔布斯语录,作为本文的结尾:

人这一辈子没法做太多的事情,所以每一件都要做得精彩绝伦。
你的时间有限,所以不要为别人而活。不要被教条所限,不要活在别人的观念里。不要让别人的意见左右自己内心的声音。
最重要的是,勇敢的去追随自己的心灵和直觉,只有自己的心灵和直觉才知道你自己的真实想法,其他一切都是次要。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

[外链图片转存中…(img-J0YH0aiJ-1713612652451)]

  • Android对标阿里P7学习视频

    [外链图片转存中…(img-CioC3Oj5-1713612652452)]

  • BATJ大厂Android高频面试题

    [外链图片转存中…(img-UlRhF8li-1713612652453)]

最后,借用我最喜欢的乔布斯语录,作为本文的结尾:

人这一辈子没法做太多的事情,所以每一件都要做得精彩绝伦。
你的时间有限,所以不要为别人而活。不要被教条所限,不要活在别人的观念里。不要让别人的意见左右自己内心的声音。
最重要的是,勇敢的去追随自己的心灵和直觉,只有自己的心灵和直觉才知道你自己的真实想法,其他一切都是次要。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值