深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
总结: 感觉伴鱼的面试目的是问倒你,很多次讨论问题,我说你有什么看法或者正确答案的时候,面试官就让我回去自己上网搜一下,或者给出的方案,经不起我的推敲,我问上两三个问题,面试官反而有点语塞,感觉很奇怪。
公司:最右
笔试题
- Android中的引用关系
- 自定义view步骤
- activity生命周期
一面
- 介绍最右的现状
- 常用的播放器,以及优缺点
- opengl的绘制流程
- 音视频编解码的流程
二面
- 在抖音做的工作
- 性能优化,包体积优化,冷启优化,卡顿优化的一些实现方案
- mvc mvp mvvm的区别,以及自己实现的轻量级mvvm的原理
- 编解码的相关知识
- ijkplayer的优缺点,以及是否看过相关源码
- flutter的探讨
总结: 总体来说面试流程中规中矩,但是面试官的问题并不是很全面,更加关心的是自己的关心的领域,对于我提出的问题(大前端和flutter),见解也仅仅是需要对新技术保持一定的敏感度,办公环境也一般,后面hr让我去跟cto再谈一轮,因为考虑到各个方面的因素,就直接拒绝了。
公司:BIGO
一面
- 多线程怎么保证线程安全,violated、sychronized、reenterLock,这三个锁的原理以及区别,JVM是怎样实现sychronized线程安全的。
- HashMap的实现原理,put()原理。hash冲突,resize,1.8的改动,什么是红黑树,优点。
- ui优化,主要从检测和优化两个部分说明,优化又分为通用的优化,和改变绘制流程的优化。
- jvm的介绍,内存介绍,gc等
- binder机制
二面
- hashmap是否线程安全,concurenthashmap实现原理,1.8之后有什么改变
- 播放透明的mp4的原理
- 冷启优化和ui卡顿的监测和优化
- thinker实现插件化的原理,我们使用什么什么实现热更新,热更新的通用方案,以及优缺点
三面
- 介绍自己之前的工作经历,在字节做了什么,为什么离开,在抖音都做了什么工作
- 实现mp4播放alpha视频的原理
- 是否使用过kotlin,kotlin的一些特性
- 内存泄漏和oom怎么产生的,内存泄漏的监控,leakcanery的实现原理
- 看过哪些第三方框架的源码,具体的实现原理。retrofit、okhttp和eventbus等
总结: BIGO一二面还是偏基础的知识,并没有很深或者很偏的问题,三面面试官是之前腾讯的大佬,面试更多的我做过的项目讨论和架构的问题,以及其他方面的一些问题,整体感觉还是比较好的,hr小姐姐是广东人,说话的声音很好听,也很真诚。
公司:音娱科技
主要做的日本的直播产品,好像是A轮,公司并不大,创始人好像也是头条出来的,各种福利制度和头条进本类似。
一面
- activity生命周期 以及各个函数的含义
- activity task的四种类型
- fragment的生命周期
- 启动server的两种方式
- intent传输数据的大小限制
- binder的原理
- activity的启动流程
- hashmap实现原理,1.8的改动,红黑树概念
- 合并两个有序的链表
二面
- 为什么离开抖音
- 组件化实现方案 spi的缺点,怎么使用字节码注入
- Dex的组成,为什么每个dex会有65536的限制
- 还有好多,时间太长记不太清楚了
总结: 是A轮创业公司,面试技术是通过了,最终卡在薪资,可能我要的太高,公司可能觉得依照我现在背景,性价比不高,就没谈下去。
公司:小红书
一面
- Activity的生命周期、fragment的生命周期,onRestart()什么时候调用
- service的两种启动方式,service的生命周期
- binder机制
- 进程保活:1.防止进程被杀 2.杀死后再拉起,详细的答案网上搜一下,这里就不列举出来了
app的包体积优化,lint、proguard、andresguard原理,字节码注入,删除R.java的变量,删除access001方法,压缩图片资源和使用redex等。
二面
- 自我介绍
- 对JNI和C++了解吗?基本不了解,就略过了
- Activity的launchMode,每个Mode的含义,Activity的启动流程
- 怎么样实现MP4播放alpha的视频,编解码的一些流程,NV20、YUV、RGB一些概念,SurfaceView和TextureSurfaceView的区别
- 组件化的实现,都有什么技术方案,优缺点
- 使用数组实现一个队列,有void add(int val)和void pop()两个函数,而且需要考虑扩容
三面(业务线负责人)
- 介绍自己,介绍在抖音做过的事情
- 哪两件事情做得最有成就感
- 怎样重构代码,基本的6大原则,详细讨论每个原则的含义,使用过的设计模式
- 假定场景,接口定义的有缺陷,第二版需要修改,是增加还是直接修改,以及还有没有其他的方案,怎么去做,为什么,这个是开放的题,结合设计原则,以及真实的情况和自己的一些例子说明即可
四面(Android负责人)
- 介绍自己,为什么离开抖音
- mp4播放alpha视频的实现方案,详细解说
- 跨部门合作,具体的一个例子,怎么去沟通,假设一个例子,用最恰当的方式去沟通。
- 怎么向上管理以及向下管理
五面(类似VP级别)
- 对技术选型的看法,flutter、c++、java、kotlin,核心是解决问题
- 是否会使用kotlin,优势,以及在项目中真正带来的收益
- 组件化,依赖版本号不同的解决办法
- 插件化,一些实际问题的,具体是什么记不太清楚了
总结: 小红书的装修真是豪,办公环境特别棒,但是面试流程有点多,足足面了5轮,不过总体来说技术还是很不错的,不论是广度还是深度,是一个值得加入的公司。
公司:饿了么
一面
- 包体积优化,Lint、proguard、andResGuard的原理,以及抖音做的一些包体积优化的方案
- 线程和线程池的讨论,为什么要用线程池,线程池各个参数的含义,如果队列满了会发生什么,为什么线程池的数量是cpu核数+1
好吧,记不起来了
二面
- 自我介绍
- 线程安全的方式,sychronized和violated的区别
- 怎么自定义Transform、自定义Task,Task之间怎么依赖,大致顺序是什么,增量编译的概念,异步加快文件的读取,ASM接口的使用
cookie、session、token的含义和区别,这里我确实不熟悉,就直接说我不太清楚了。
三面
- 自我介绍
- 在抖音都做过什么事情,相关的几个方向深入讨论一下
- 对于架构的思考,怎样设计一个好的架构,6大设计原则,分别说明一下
- 用过什么设计模式,为什么要用设计模式,对于设计模式的思考
- 怎样提高开发效率,较少沟通成本,实例说明下
- 为什么要引入kotlin,优缺点
- 以后的规划
四面(交叉面)
- 介绍自己,为什么离开抖音
- 音视频的相关知识,NV20,YUV,RGB的关系,为什么mp4的压缩率比webp的动画要高,编解码的流程,通用的编码格式,软硬解的区别。
- View的绘制流程,硬件加速的原理和软件绘制的区别,以及相关的view的优化
总结: 总体来说面试体验还是不错的,三面面试官对于职业发展和新技术的见解都是非常深刻,也给与了我很多建议。
公司:美菜网
一面
- 动画实现的方式,帧动画和属性动画的实现原理
- 一张图片加载到手机内存中真正的大小是怎么计算的
- OOM产生的原理,内存泄漏是由于什么引起的,GCRoot有哪几种类型,JVM等
- 一个二分查找的变形题,具体的题目记不清楚了
- 为什么要做组件化,组件化的实现方案都有什么,优缺点
- Activity的启动流程
- View的绘制流程,从VSYNC信号开始
二面
- 性能优化,包体积优化,R.java优化,access$xx方法优化,资源优化原理
- MVVM是什么,我自己做的轻量级的MVVM的实现方式,优点是什么
- 看过什么第三方的源码,retrofit原理,动态代理和静态代理的区别,是否使用反射,okhttp的原理,Http和Https的区别,Https的socket security layer的握手,EventBus的原理,3.0的区别,APT的使用以及怎样处理字节码(ASM、javaassit、BECEL等)
总结: 美菜网真的是好乱呀,面试人感觉有几十个,现在美菜网扩张这么厉害吗?我面试的时候我旁边的哥们也在面试,真的是很嘈杂,不过面试官的基础还不错,看过一些源码,但是并没有问到什么特别好的点,对整个新技术的见解和对我的建议(一般会问面试官一些对于新技术例如flutter看法,和对我的一些建议)感觉不是很深。跟hr谈完后就离开了。
公司:爱奇艺
一面
- 从Activity A跳到Activity B的生命周期的调用过程,如果是异步进程呢
- 冷起优化,systrace怎么使用,实现原理
- ANR是什么,怎么上报ANR,有些手机拿不出,有些手机拿不出anr/traces.txt,怎么查找ANR问题
- 插件化的原理,Activity的启动流程,hook点
- 一个类,内部有一个链表的数据结构,实现void add(Node n)和void remove(int index)的函数
二面
- 介绍工作经验,为什么离开抖音
- HashMap的实现原理
- 在抖音做的工作,主要说了ui优化和冷起优化两个部分,扩展开来,讨论了很多相关的知识点
- 手写消费者生产者模型的代码
总结: 这次面试的是爱奇艺TV端奇异果,并不是爱奇艺移动端app,因为我还是想做app,二面之后,我就跟面试官说了我的想法,就没必要聊下去了,就直接走了。
公司:快手
一面
- handler介绍,为什么阻塞不会造成anr,屏障消息,产生内存泄露原因,handler内存泄露的引用链
- 事件拦截机制,view的绘制流程
- android的系统渲染原理,renderthread的解释,三缓冲机制播放透明mp4的原理,surfaceview和textureview的区别
- opengl的绘制流程,texturesurface是什么,顶点着色器和片元着色器各自作用,VOB是什么
- 一个无序的int数组,给一个target数字,找出数组中两个数字相加为target,并输出坐标
二面
二面面试官是facebook回来的,面试风格的确和之前的面试官讨论不一样
- hashmap的实现原理,怎样找到index,size为什么是2的倍数,怎样resize,resize过后,之前的hash冲突还存在吗?currenthashmap的实现原理
- 怎样保证多线程的安全,什么是乐观锁,怎么使用
- 设计一个发送语音模块的架构,需要写出所有接口函数,并且需要详细说明,可能面试官更加在意设计能力,这里讨论的时间非常长。
view的绘制流程,onMeasure、onLayout、onDraw,各个参数是什么含义,尤其是widthMeasureSpec、heightMeasureSpec以及对应的AT_MOST、EXACTLY和UNSPECIFIED - 数组中存有1-3的三种数字,例如[1,2,3,1,2,2,1,3,3],将其排序为[1,1,1,2,2,2,3,3,3],要求时间复杂度,后续将内容变为一个对象,继续排序
三面
- 工作经历介绍,为什么离开抖音
- mp4播放alpha视频的原理,与其他方案的对比,收益点是什么
- "之"字形打印二叉树
- 1~100盏灯,都是亮的,第一次将能被1整除的数的灯按下,变暗,第二次将能被2整除的数的等按下,变亮,第三次将能被3整除的数的等按下,变暗…第100次将能被100整除的数的灯按下,问,最后有多少盏灯是亮的。
**总结:**总体来说面试官的技术还是很厉害的,二面面试官的背景很好,思路也独特,有点外企风格。三面面试官比较注重算法,和解决问题的思路。整个面试流程真的是不太友好,三次面试去了三次,而且前两次都是在茶水间,一直说会议室订不到,环境特别嘈杂,而且前两次都是临近饭点,茶水间送饭更是杂乱,感觉快手效率和环境有一些混乱(个人面试感觉),但是不能否认快手的成绩还是很好的。
HR面总结
在大多数互联网公司内(除了外企),到了HR面,基本上已经定下来,正常的聊聊就能发offer了,只要别太“个性”,或者三观异于常人就能收到offer,大体就是一个积极乐观的态度。有几点需要注意下:
- 不要说前公司和前leader的坏话
- 对于为什么离开原公司,标准答案是目前公司不适合现有的自身发展,寻求更好的机会,(当然大部分都是因为钱 心知肚明就行,不用说出来)
- 展现自己积极乐观和乐于助人的一面
- 注意以上几点大体就没问题了
面试总结
面试过程其实大部分时候是,面试官或者公司是主导方,大部分的节奏是跟着面试官走,但是我觉得面试其实就是一个相互探讨的过程,不仅是公司在选择你,你也在选择公司、以后工作的同事和leader。所以我这次面试中,更多的是和面试官探讨,也会反问面试官一些问题,不仅仅是最后面试官说可以问他几个问题,在面试过程中就会询问一些,优秀的面试官会跟你探讨,并且讨论出一个合理的方案或者正确的答案,整个过程非常愉悦,相互都学习到了。
这次最大的收获就是跟60多位面试官的交流,更加让我认清我自己,认清自己的长处、短板和以后的规划,和对做人做事的看法,在这里真诚的感谢60多位面试官。
大公司VS小公司
“大公司拧螺丝、小公司独当一面,进步更快”,我不太认同这句话,当然具体情况具体分析,每个人的情况不同,但是我还是觉得大家能去大公司还是尽量去大公司,原因我总结了以下几点:
镀金 ,这一点我相信大部分同学都是赞同的,我就不赘言了。知识的深度和积累,在大公司你能学到的东西更深和更加系统,而且可以有时间自己去思考和学习,尤其对于工作时间不长的同学。和优秀的人一起工作,大公司碰到优秀同事的概率更大 ,像我这样的普通人其实都是在模仿和学习,正是由于身边有了优秀太多的人,才会有危机感,才有机会跟着他们去学习,学习他们怎样学习、怎样思考问题甚至怎样为人处世,我从他们身上学到太多的东西,有一些能让我受益终身。
感谢大家能耐着性子,看完我啰哩啰嗦的面经,以上仅是个人的观点。
如何提升自身实力,突破能力瓶颈?
在这里给大家分享一些我面试之前刷过的面试真题,以及一些Android中高级进阶必备的PDF电子书,让你在学习的路上事半功倍
帮你在现在的基础上,重新梳理和建立 Android 开发的知识体系。 无论是你短期内想提升 Android 内功实力,突破自己工作中的能力瓶颈,还是准备参加 Android 面试,都能有所收获。
资料均无偿分享,有需要的朋友文末有领取方式:
一、架构师筑基语言基础
目前Android APP开发主流语言就是Java语言,Java语言最大的特性就是提高了软件的交互可能性,可以说安卓手机几乎所有应用程序都是利用Java语言来进行编写的。
知识要点:深入理解Java泛型、注解深入浅出、并发编程、数据传输与序列化、Java虚拟机原理、高效IO
二、Android高级UI开源框架进阶解密
Android 开发相对于前端开发来说统一的 UI 开源库比较少。做 Android 久了都会有种体会,大多数 App 都有
自己的 UI 风格。
UI 框架的使用可以帮助我们省去设计 UI 风格的时间,专注于业务需求定开发。比如:QMUI Android 腾讯的一款开源UI库,对于新创建的项目,或者维护个人开发的 App 可以说十分管用。
知识要点:SmartTable使用指南、TextSurface源码解析、FloatWindow源码解析、RippleEffect使用指南等等
三、Android Framework 开发揭秘
对于大多数 Android 开发工程师来说,掌握Android Framework 一定是一个不光要熟练而且还要精通的技能。大多数大厂面试的时候,对于Framework这方面的知识点都喜欢打破砂锅问到底,直到问的你答不上来为止,以此来探寻你的技术边际,这样就能更深入地了解你的技术能力。
所以,当今的Android移动开发,不会Binder、Handle、AMS,80%以上的面试都过不了。
知识要点:系统启动流程分析、Binder解析、Handler解析、AMS 解析、WMS解析、Android10.0 源码解读
四、Android性能优化—实战解析
安卓开发大军浩浩荡荡,经过十多年的发展。红利期已过,现在是增量有限,存量厮杀,从争夺用户到争夺时长。不管是用户也好、企业也好,都对 App 的用户体验和性能提出了更高的要求。
如果你已经有 2 - 3 年以上开发经验还不懂的怎么去优化自己的项目,那么想迈进中高级工程师这道门槛是不可能了。而这道门槛,说实话学习成本还是挺高的。
性能优化也是企业考察一个高级 Android 工程师技术水平的重要维度。特别是诸多大厂在这方面尤为看重,毕竟就算0.1%的瑕疵,影响的将是百万级、千万级的用户体验!
五、音视频精编源码解析
伴随着短视频行业的火爆,以及国内5G的普及,基本每个人在空闲刷短视频,国内短视频用户已达8.73亿,巨大的用户需求导致人才市场对音视频开发人才的紧缺,用人薪酬也自然水涨船高。
市场对音视频需求其实非常大,而且逐年上升,直播、点播、视频会议等等都是这些年起来的项目。
而音视频从业者基本少得可怕,我了解到的行情就是几个公司互相挖角,对人才的竞争属于存量搏杀,现在一名优秀的音视频开发人员,年薪很容易达到30万-50万。
知识要点:WebRTC Native 源码导读、X264源码解读、FFmpeg、ijkplayer 源码分析系列、jsmpeg源码解析、Live555源码解析、Opus源码解析
六、Flutter学习进阶
Flutter无疑是当下非常热门的技术之一。
每一个移动开发者都在为 Flutter 带来的“快速开发、富有表现力和灵活的 UI、原生性能”的特色和理念而痴狂,从超级 App 到独立应用,从纯 Flutter 到混合栈,开发者们在不同的场景下乐此不疲的探索和应用着 Flutter 技术,也在面临着各种各样不同的挑战。
知识要点:Flutter跨平台开发概述、Windows中Flutter开发环境搭建、编写你的第一个Flutter APP、Flutter Dart语言系统入门等等
七、微信小程序开发
微信小程序作为现在比较火的编程开发应用场景之一,深受市场的青睐,这让不少开发者眼馋不已。但是对于初学者来说,就完全摸不着头脑了,不知道微信小程序开发制作需要学习那些知识,有需要的朋友可以参考本篇。
本篇知识要点:小程序概述及入门 、小程序UI开发、API操作、购物商场项目实战
八、百大框架源码解读
对于开发者来说,框架并不陌生,在工作中普遍都会用到各种开源框架,框架的使用可以让我们用少量的代码实现所需要的复杂功能,大大的减少了工作量,提高了工作效率。
但是这样也让很多人只会使用框架,却看不懂源码,不了解其底层机制与实现原理,最后成为一名代码的搬运工。就像朋友开玩笑说的 “我们不生产代码,我们只是代码的搬运工” 。
主要知识点:微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等
最后再给大家分享一份最新大厂面试题,质量非常高!!!不要再看那些到处拼凑出来的面试题了。
《2022最新Android中高级面试题合集》
另外,以上所有资料以及更多学习手册、心得体会,直接送给大家!扫描下方CSDN官方二维码自行领取
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
ede28853727f929ad4a33dbaffc.png)
另外,以上所有资料以及更多学习手册、心得体会,直接送给大家!扫描下方CSDN官方二维码自行领取
[外链图片转存中…(img-wDgUljRV-1715373069498)]
[外链图片转存中…(img-ThLc7cBs-1715373069499)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!