前言
目前Android开发岗位确实没有以前那么火爆了,但是只要你确实有真才实学,想要找一份自己满意的工作还是相当容易的。
如果你是985,211,硕士学历,那么,拿个相当好的Offer更是不在话下。
即使学历不是特别出众的情况下,只要你好好努力的学习,把每一项的技术点攻破了,同样可以达到甚至是超越上面有着优越条件的朋友。
搞程序就是这么公平:学历固然对拿Offer有一定帮助,但哪怕你学历再高,技术不行还是得挂。面试从来都是考察你的技术、考察你的思维和解决问题的能力,技术才是打开新世界大门的钥匙!
我常常和身边的人分享,每隔一段时间就要出去面试一轮,面试的目的不一定是为了找到好的工作,而是知道自己的优缺点是什么?知道市场需要什么样的人?
定期的面试可以让你了解当下市场需要哪些技术,也更加容易确定自身的短板在哪,同时,也可以更加有针对性的学习提升,并且在面试过程中遇到了你不会的点,你也可以借机向面试官提问,趁机学习了一波大厂的技术操作。
要是运气好,拿到了高薪Offer,岂不是更赚?
同样,因为面试你的也是同行,这样也能够碰撞出不同的思想。如果你一直待在一家公司,都不知道外面的情况如何的话,那是非常可怕的,至少我这么认为。
好了,废话不多说了,直接进入正题。
下面博主将分享自己亲身经历的一次美团面试,这里写出来给大家分享一波,更多的是总结面试中遇到的问题以及以后学习过程中的方向。
面试真题
一面
1.手写算法题。一共有几个,面试官会随机抽一个作为题目。
给出一个序列包含n个正整数的序列A,然后给出一个正整数x,你可以对序列进行任意次操作的,每次操作你可以选择序列中的一个数字,让其与x做按位或运算。你的目的是让这个序列中的众数出现的次数最多。
请问众数最多出现多少次?
2.Activity的生命周期、加载模式。 什么时候会用到singleTask?
3.Handler机制 子线程可以创建handler吗? 一个线程是否只有一个Looper? 如何保证一个线程只有一个Looper?
4.多线程的方式有哪些?
5.生产者消费者模式
5.wait 和 sleep的区别
7.String、StringBuffer 、StringBuilder的区别
8.ANR异常发生条件 如何分析ANR
9.自定义View和ViewGroup
10.事件处理 分发,拦截,处理。
11.GC算法
12.四大引用 强,软,弱,虚,并说明下合适GC
13.动画 View动画,属性动画,帧动画。再说下View和属性动画区别。
14.JVM 原理
15.屏幕适配相关问题
美团的手写算法在业界算是比较出名,很多小伙伴可能卡在手写算法上。然后就是一些Android和Java的细节性东西,这些基础内容只要有一点工作经验的都基本能说得上来。
二面
1.Http和Https的区别?
2.看过哪些源码?Glide原理?
3.OkHttp原理?
4.Retrofit原理?为何用代理?代理的作用是什么?
5.ButterKnife原理?用到反射吗?为什么?
6.eventbus的原理。
7.Handler原理
8.Binder原理
9.ANR异常如何查找并分析?
10.JVM内存模型?性能调优?
11.垃圾收集算法有哪些?G1算法?
12.加密算法有哪些?对称加密和非对称加密的区别?
13.TCP的三次握手?两次行不行?为什么?TCP攻击知道吗?如何进行攻击?
14.性能优化方面
15.会对代码进行review吗?何时review?怎么review?
16.项目中遇到的让你棘手的问题?多久解决,怎么解决?
17.平常如何学习?何时学习?怎么学习?学习渠道?
二面跟比一面比起来,会更加深入,偏向原理性质。所以大家平时的编码过程中,要多思考,多看源码,要理解实现方式,而不要一味的去写代码完成需求,长此以往的话未来很容易被后浪淘汰的。
三面
1.前两轮面试感觉如何?
2.热修复
3.插件化组件化
4.动态化
5.Kotlin
6.Flutter
7.聊了一下之前的公司和项目
8.你觉得小团队好还是大团队好?
9.说说自己的优缺点
10.发展方向 职业生涯规划 是先讲究宽度还是讲究深度,为什么?
11.为什么离职?
12.其他小问题:哪里人啊?现在工资怎样?要求如何,何时到岗?有什么问题要问我的吗?
三面面试官可能考虑到之前两轮的原因没有问太多技术问题…
然而我确实已经是强弩之末了,行了行了,我不装了,坦白了,我就承认我不行好了吧?
这次面试感觉还不错,美团的同学待人方面很随和。很喜欢这种氛围。
最后的定级就不说了,我始终认为:结果不重要,重要的是过程。只要你有实力,就不用担心,Offer向来都不会亏待那些努力的人!
关于我的学习方式?
注:需要文中所有详细资料的小伙伴直接去文末领取!
《高级UI》
UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。
不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!
《Framework精编内核解析》
-
深入解析Binder
-
深入解析Handler
-
Dalvik VM 进程系统
-
深入解析 WMS
-
PackagerManagerService
《360°全方面性能调优》
1、设计思想与代码质量优化
2、程序性能优化
-
启动速度与执行效率优化
-
布局检测与优化
-
内存优化
-
耗电优化
-
网络传输与数据储存优化
-
APK大小优化
3、开发效率优化
-
分布式版本控制系统Git
-
自动化构建系统Gradle
4、项目实战
-
启动速度
-
流畅度
-
抖音在APK包大小资源优化的实践
-
优酷响应式布局技术全解析
-
网络优化
-
手机淘宝双十一性能优化项目揭秘
-
高德APP全链路源码依赖分析
-
彻底干掉OOM的实战经验分享
-
微信Android终端内存优化实践
《Android第三方框架》
本篇内容要点(1042页)
-
热修复设计
-
插件化
-
组件化框架设计
-
图片加载框架
-
网络请求框架
-
RXJava 响应式编程框架设计
-
IOC 架构设计
-
Android架构组件Jetpack
《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 最全上手指南
-
…
《高级JetPack强化实战》
-
初识ConstraintLayout之实现登录页面
-
Navigation实践之实现APP主框架以及Navigation的相关介绍
-
使用 Coroutines, Retrofit, Moshi实现网络数据请求
-
使用 TabLayout,ViewPager2 ,RecyclerView实现实现歌单广场页面
-
歌单页面MVVM架构改造及其ViewModel和LiveData的使用介绍
-
Paging实现加载更多和下拉刷新,错误后重新请求
-
vlayout嵌套横向RecyclerView和Banner 实现主页的展示,自定义Moshi的JsonAdapter
-
Room数据库实现增删改查和事务处理
-
Room数据库Migration
-
ExoPlayer进行视频播放的实现
-
…
《Flutter技术进阶》
-
为什么Flutter是跨平台开发的终极之选
-
在Windows上搭建Flutter开发环境
-
编写您的第一个 Flutter App
-
Flutter开发环境搭建和调试
-
Dart语法篇之基础语法(一)
-
Dart语法篇之集合的使用与源码解析(二)
-
Dart语法篇之集合操作符函数与源码分析(三)
-
Dart语法篇之函数的使用(四)
-
Dart语法篇之面向对象基础(五)
-
Dart语法篇之面向对象继承和Mixins(六)
-
Dart语法篇之类型系统与泛型(七)
-
Flutter中的widget、
-
…
《NDK模块开发》
主要内容包含:
-
NDK 模块开发
-
JNI 模块
-
Native 开发工具
-
Linux 编程
-
底层图片处理
-
音视频开发
-
机器学习
《深入理解Android插件化技术(附Demo)》
第一章 插件化技术的前世今生 第二章 插件化原理 第三章 Android插件化初探 第四章 架构演化(大厂篇)
-
360插件开发之DroidPlugin
-
滴滴VirtualApk实战
-
基于VirtualAPK Android重构之插件化
-
爱奇艺插件化原理分析之 Neptune框架
-
腾讯插件化框架 Shadow项目解析
《高级Android组件化强化实战(附源码)》
第一章 Android组件化初识 第二章 Android组件化初探目录 第三章 架构演化(大厂篇)
-
从智行 Android 项目看组件化架构实践
-
得到 App
-
微信 App
-
蘑菇街 App
-
爱奇艺 App
-
美团 App
-
携程App
-
支付宝 App
-
…
由于篇幅问题,详解资料太全面,细节内容太多。需要的下方领取。