工作三年的Android程序员 跳槽到“阿里“的面试经验分享

前言

工作三年,你可能会迷茫,要么觉得自己怀才不遇,要么觉得自己迷失方向,也可能觉得自己意气风发,不管怎么样,自己已经开始思考自己的人生了,事实上,很多工作三年的人就第一次做出了自己的选择,也就是换一份适合自己的工作。

面试分享

2017年毕业,从事android方面的工作已经3年啦,前段时间刚完成一次跳槽,面试了几家公司,终于拿到了心仪大厂offer,下面将一些面试经验分享给大家,希望对大家有所帮助。

截屏

面试题:

公司一

  1. 组件化和arouter原理
  2. recyclerview和listview区别
  3. glide流程,缓存前压缩,缓存命中
  4. APP性能优化,内存优化,布局优化,绘制优化,内存泄漏
  5. Http和Https区别
  6. socket心跳包
  7. jvm虚拟机,堆和栈的结构
  8. activity启动模式,有哪些不同
  9. stack栈的特点,自定义stack结构
  10. kotlin优劣势

公司二

  1. 自定义view,中英文字符串宽高测量显示,测量算法,可扩展性
  2. 事件分发机制
  3. Activity,view,window联系
  4. 热修复和插件化原理
  5. Synchronized底层原理,java锁机制
  6. java容器,hashmap和hashtable区别,hashmap原理,扩容流程,扰动算法的优势
  7. ArrayList和LinkendList区别,List泛型擦除
  8. Http和Https区别,SSL/TLS过程
  9. Android性能优化
  10. jvm虚拟机,堆和栈的结构,栈帧,JMM
  11. 组件化注意点,组件间通信机制
  12. 线程安全的单例模式有哪几种
  13. 熟悉的设计模式

公司三

  1. MVC,MVP,MVVM
  2. Activity和fragment生命周期区别,fragment正常添加和viewpager添加的区别,fragment懒加载原理,FragmentPagerAdapter 和 FragmentStatePagerAdapter
  3. 热修复和插件化
  4. 友盟bug统计,混淆后怎么定位bug。没接入热修复的APP中,上线后遇到bug怎么解决
  5. view绘制原理
  6. 使用Analyze减少APK体积,原理
  7. Android 版本差异

公司四

  1. 基础类型字节,汉字占几个字节,线程和进程
  2. 四大组件,fileprovider和Contentprovide区别,activity启动流程
  3. MVC,MVP,MVVM
  4. TCP三次握手,四次挥手
  5. Eventbus,glide原理
  6. 性能优化,内存抖动,内存泄漏,内存溢出,handler机制,IntentService和handlerThread,子线程更新view内容的方法
  7. GC回收算法
  8. recyclerview和listview区别
  9. 组件化,模块化,插件化,热修复
  10. 工作中遇到的难题怎么解决的
  11. Kotlin Java优缺点,kotlin什么时候用分号,run,with,apply,内联函数,高阶函数
  12. APK体积优化
  13. 进程间通信
  14. 单例模式,哪些是安全的
  15. retrofit设计模式
  16. 自定义view
  17. 是否做过音视频和IM?
  18. APK性能优化
  19. CurrentHashMap1.7和1.8区别
  20. volatile关键字的作用,怎么保证原子性呢?
  21. 网络优化
  22. 对新技术的看法
  23. java泛型,协变和逆变

公司五

  1. HTTPS具体步骤
  2. 常用的设计模式,代理模式和装饰者模式区别
  3. 服务端返回错误的json数据,客户端怎么自定义model,避免出错
  4. Hook技术
  5. kotlin了解,协程
  6. 屏幕适配
  7. 抓包工具使用和原理
  8. 网络优化
  9. 未来期望,对公司的了解
  10. Okhttp,rxjava,glide,retrofit等原理,okhttp底层数据传输原理,http报文体结构
  11. APK体积优化
  12. Android jetpack使用和原理,新技术看法
  13. crashHandler获取应用crash信息
  14. recyclerview和listview缓存区别
  15. Android 常见崩溃问题分析及一般的解决方案
  16. NestedScrollView触摸机制,AOP相关知识
  17. 设计APP,整体架构选型
  18. Android沙盒和底层Linux通信
  19. ACTION_CANCLE什么时候触发
  20. 线程池原理

公司六

  1. 组件化,arouter,组件化UI,还有哪些路由框架。AS调试方法
  2. MVC,MVP,MVVM,Jetpack
  3. JVM,JMM,java加载对象的步骤,classLoader,GC回收算法
  4. 插件化和热修复
  5. 唯一安卓ID,安卓安全的知识,加密算法,判断activity前台进程
  6. TCP三次握手和四次挥手
  7. hash算法,hashmap,怎么解决hash冲突
  8. 加载大图,glide缓存机制,设计模式,双重检测的单例模式为什么要检查两次,自己设计图片加载框架思路
  9. 启动未注册的Activity
  10. AOP,蓝牙开发,IOT
  11. glide缓存清除:lrucache算法
  12. glide缓存文件太大,查找效率慢怎么优化?glide下载高清图片优化
  13. 最近研究的技术,遇到最难的事,对公司的期望

公司七

  1. 组件化, arouter优缺点
  2. MVC,MVP,MVVM
  3. 项目中的亮点,对架构的理解
  4. handler原理及相关知识点,message回收策略
  5. hashmap原理,arraymap原理,对比性能。
  6. hashmap为什么大于8才转化为红黑树,加载因子为什么是0.75
  7. Synchronized底层原理,java锁机制
  8. 服务和广播
  9. activity启动模式(给例子具体分析,A(标准)-》B(单例)-》C(singleTop)-》D(singleTask),分析有几个栈,每个栈内的activity)
  10. 常用设计模式,线程安全的单例模式

公司八

  1. static、final;继承与多态
  2. 组件化, arouter优缺点
  3. context相关知识点
  4. handler原理及相关知识点,handler缓存池大小
  5. 性能优化,启动速度优化,架构
  6. java虚拟机与Dalvik和ART区别
  7. Kotlin协程,扩展函数和属性以及伴生对象
  8. 电商APP的首页,怎么设计一个APP架构
  9. MVP中数据请求为什么要和M一起,答:网络请求和javabean都是数据模型相关
  10. Glide的存储EngineKey是怎么保证唯一的。面试官答:有个队列会将EngineKey存储起来,每次生成后进行对比存储。这个我在源码中没找对位置,如果知道的同学,麻烦帮忙解释下。
  11. retrofit是怎么将service接口转化为我们需要的javabean的?
  12. 怎么做管理,新技术学习

公司九

1、项目经历,
2、最有成就感的项目
3、性能优化:UI优化、内存泄漏
4、大图加载;xhdpi的图片放到xxhdp的手机上,内存会如何变化;Bitmap内存复用
5、网络优化,数据库优化
6、Handler
7、ThreadLocal,LocalBroadcastReceiver实现
8、binder的mmap
9、Java的线程同步方式;synchronized和Lock的实现及区别
10、线程池如何配置,核心线程数你一般给多少
11、Java内存模型
12、TCP和UDP区别,TCP为何是三次握手,为何是四次挥手
13、设计模式(问了一个什么模式,我没听清)
14、自定义View,测量模式的匹配
15、事件分发,如何处理滑动冲突
16、启动速度优化,IdleHandler用法
17、冷启动热启动优化
18、组件化架构设计,ARouter具体实现
19、Activity生命周期,按Home按键后的生命周期
20、启动模式及其用法。A应用的A1页面启动B应用的B1页面,A1和B2都是standard模式,B1启动后B1在那个任务栈,按下back键后显示那个页面,再按一次back键呢?
21、MVC、MVP、MVVM
22、IM你知道多少?

公司十

1、讲下flutter的项目
2、kotlin的扩展,属性是否可以扩展,是否可以扩展跟现有方法签名相同的方法
3、讲一下Activity的TaskRecord,也就是四种启动模式。
4、方法内部的匿名内部类,比如说给View设置的OnClickListener,它里面相关调用外部方法的形参,必须使用final修饰这个形参,为何?
5、Android里面进程间通信方式,ContentProvider可以用file实现么?
6、linux下常见的进程间通信方式,Android为何自己搞一个Binder,有何优势?
7、本地广播为何效率高?
8、讲下synchronized和volatile;读写锁和ReentrantLock,synchronized和读写锁的区别。
9、布局优化

公司十一

1、从0到1搭建一个项目框架,你会怎么做?
2、flutter的生命周期管理?讲讲做过的flutter项目。flutter的路由管理方式。除了默认的两种路由方式,有没有考虑过记录路由状态?
3、讲下arraylist、hashmap、linkedlist、linkedhashmap的实现。linkedhashmap为何会有这样的特性(lru)?它有个参数,表示命中率和使用次数。
4、lru是通过linkedhashmap实现的么?
5、线程的使用。讲下线程池的类型,线程池对象的参数,线程池最大线程数和核心线程数的关系,task的优先级如何实现?(优先级队列)
6、activity启动模式:standard、singleTop、singleTask、singleInstance。taskAffinity,allowTaskReparting,常见应用场景。
7、startActivity方法是异步的么?同步的。
8、activity生命周期。A启动B,生命周期;B回到A,生命周期
9、rxjava源码。用过哪些操作符?map和flatmap区别。
10、讲下View绘制流程。canvas可以画Bitmap么?画布要做旋转、缩放、平移等操作该如何实现?
11、讲下事件分发。如果onInterceptTouchEvent返回true,但是onTouchEvent返回了false,是什么效果?如果还想让其他View接收事件,该怎么做?
12、flutter中,有没有遇到过路由断掉的情况,比如说原生打开flutter,flutter再打开原生这种?

学习经验

在复习的过程中,都是从一个个小的知识点开始学的,复习到一定阶段,可以尝试着去把这些东西串联起来,由点及面。自己可以去各大平台查相关资料,大厂的面试算法题是肯定会问的,所以算法方面一定要多刷。

我这里有一份面试的资料有需要的可以点击这里领取

部分目录截图

总结

面试总体上是一个你跟面试官相会了解、相互交流的过程,大厂的面试官一般都很奈斯,如果你遇到不会的问题了,可以及时请教对方,不会了就问,不要怕丢面子,面试本就是一个学习和相互交流的过程,offer不是目的,只是个过程。
还有需要注意的一点,对于不会的东西,可以尝试从原理角度去回答,但是尽量不要说错,回答的不全和方向错了是两个概念。

最后祝大家都能拿到心仪的offer!

猜你喜欢

转载自blog.csdn.net/weixin_47933729/article/details/116793171