0
点赞
收藏
分享

微信扫一扫

Android阿面试积累,soul移动端开发工程师

老榆 2022-03-19 阅读 55
  • 从长度为m的int数组中随机取出n个元素,每次取的元素都是之前未取过的,如何优化
  • https是如何保证安全的,证书如何校验
  • Android的签名机制,APK包含哪些东西
  • 是否遇到过OOM,如何解决
  • 是否做过逆向
  • 对JNI了解多少
  • 手写单例(DCL)
  • 是否写过so文件
  • 热修复原理,如何进行dex替换的

二面:

  • 简单说下项目
  • 内存泄露,如何检测以及检测的原理
  • 点击Launcher跟点击微信支付启动微信有什么区别
  • 逆序一个字符串,不能调用String的reverse方法(考察编码风格)
  • 组件化原理,模块化机制
  • 没有给权限如何定位,特定机型定位失败,如何解决
  • 同步跟异步机制(是业务上的,不知道他想问什么)
  • 线程池中核心线程数跟最大线程数如何定义

公司七:(Over)

面试机会来自于拉勾

一面:

  • StringBuffer跟StringBuilder之间的区别
  • 并发相关,各种锁
  • View的绘制流程,事件分发
  • Hashmap,Arraymap,SparseArray
  • 四种引用
  • MVP跟MVC的区别
  • LV跟RV之间的区别
  • Service相关,startService以及bindService
  • Fragment不同于Activity的生命周期
  • 生产者消费者问题:一对多,多对多情况
  • 常见的设计模式,并选择一种描述一下
  • Scroller的使用

二面:

  • Gradle生命周期
  • Java&Android关于Classloader源码解析
  • Python的class文件
  • DCL中Volatile的作用,如何防止反射实例化单例对象
  • 抽象类能否实例化,理论依据是什么?
  • 如何通过Gradle配置差异较大(20%差异)的多渠道包
  • class文件如何转化成dex
  • Service先start再bind如何关闭service,为什么bindService可以跟Activity生命周期联动?
  • JVM相关,DVM以及ART是如何进行优化的,具体步骤
  • 长连接常见的库,短链接
  • 静态同步锁与普通同步锁的区别
  • 直接在Activity中创建一个thread跟在service中创建一个thread之间恩区别

高德—汽车事业部(Over)

面试机会来自于Boss

一面:

  • View的生命周期
  • View的绘制流程跟事件分发
  • Activity跟Window之间的关系
  • 对C跟JNI是否熟悉
  • 热修复原理,插件化是如何进行加载插件的
  • Java中的锁,各种同步方式之间的区别
  • ANR在四大组件中的时间,场景
  • OOM,如何避免
  • 内存泄露原理,如何避免
  • MVC跟MVP之间的区别
  • ListView针对多种item的缓存是如何实现的
  • Android绘制二维跟三维的View的区别
  • 是否了解硬件加速
  • ListView是如何实现对不同type的item的管理的

二面:

  • Android中IPC方式,各种方式优缺点,为什么选择用Binder
  • 主流的热修复框架流派,原理,是否研究过classloader源码
  • Android为什么要设计两种classloader,为什么不用一种,通过type来区分
  • Bundle传递数据为什么需要序列化
  • 手写一个快排,分析原理
  • 广播传输的数据是否有限制,是多少,为什么要限制?
  • Activity启动时生命周期是如何回调的?
  • MVP.MVC.MVVM之间对比分析
  • 组件化通讯:有几种通信方式,Arouter原理
  • 插件化加载流程,原理
  • 关于反射混淆,耗性能的解决方式
  • 天猫七巧板布局原理
  • 热修复流派,原理

高德—地图事业部(Over):

面试机会来自于Trinea内推

一面:

  • RecyclerView的itemdecoration如何处理点击事件
  • 单例模式如何修改数据
  • android事件传递,非常细
  • 多线程

**二面:

  • JVM内存分布,Classloader
  • 静态代理跟动态代理
  • 线程的生命周期
  • 是否用过DataBinding
  • 是否接触过JNI
  • 对热修复跟插件化了解多少
  • 对RN了解多少
  • 二分查找
  • 说下多态
  • 编译期注解跟运行时注解
  • 线程跟进程间通信
  • Android中的IPC
  • java中的传递
  • equals跟==
  • Picasso的存储
  • 项目中的难点
  • 项目中用到了哪些第三方
  • MVC,MVVM,Clean架构
  • 抽象类跟接口的区别,接口的默认修饰符

掌阅科技(Over)

面试机会来自于Boss

一面:

  • Canvas.save()跟Canvas.restore()的调用时机
  • 程序A能否接收到程序B的广播?接入微信支付的时候,微信是如何跟当前程序进行通信?
  • 对Java.nio了解多少
  • ConcurrentHashMap是如何实现分段锁?
  • 现在需要遍历SD卡下所有的文件打印出后缀名为.txt文件名称,如何提高时间效率?
  • 为什么复写equals方法的同时需要复写hashcode方法,前者相同后者是否相同,反过来呢?为什么?
  • Android4.0~8.0之间大的变化,如何处理?
  • 说一下Measurespec这个类
  • ViewHolder有什么用?
  • Gradle的Flavor能否配置sourceset?
  • 线程池核心线程数一般定义多少,为什么?
  • Intentservice有什么用
  • 弱引用什么时候被回收
  • Android中提供了哪些类来帮忙处理线程
  • http的状态码,常见的请求头,http缓存协议https如何加密
  • 多进程的优缺点,多线程的优缺点
  • 热修复如何修复资源文件?
  • 有没有遇到64k问题,为什么,如何解决?
  • httpUrlconnection跟httpClient有什么区别

马蜂窝(Over)

面试机会来自于Boss

一面:

  • 两个非基本数据类型数组: array1=[x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,×11] array2=[x6,x3,x10,x5] 计算结果:[x6,x7,x8,x9,x1,x2,x3,x4,x10,x11,x5],写出你的算法
  • 类的初始化过程
  • 点击事件穿透原则
  • 线程池使用的是哪一种,使用原则
  • LeakedCanary原理
  • LinerLayout跟RelativeLayout的绘制原理
  • Android新版本的一些新特性6.0,7.0,8.0
  • 类的初始化顺序依次是(静态变量、静态代码块)>(变量、代码块)>构造方法

二面:

  • 看了看项目提了问题如何进行优化
  • 如何实现马蜂窝中的一个动画效果
  • 软键盘顶起布局
  • 组件化通信方案

爱奇艺(Offer)

面试机会来自于拉勾

一面:

  • 聊聊RecyclerView,动画,缓存,数据绑定底层是如何实现的。
  • 聊了聊我的开源项目实现原理
  • View在屏幕中的移动底层是如何实现的
  • Binder跟Socket之间的区别,什么时候用哪一个,Binder的底层实现
  • Activity,Window跟View之间的关系
  • setContentView都干了啥
  • Activity的启动模式
  • MVC跟MVP之间的区别
  • 算法:将一个有序数组去重得到一个新数组(空间复杂度为O(N))

二面:

  • LruCache底层实现
  • Hashmap的hash算法
  • Bitmap在decode的时候申请的内存如何复用,释放时机
  • 注解如何实现一个findViewById
  • Android是如何学习的
  • sycronized关键字的类锁对象锁,如何保证线程安全?
  • 重入锁跟sycronized关键字之间的区别
  • 除了notify还有什么别的方式可以唤醒线程
  • 说说你对Context的理解

三面:

  • Listview的adapter是什么adapter,如何复用。
  • RV是如何布局的
  • 算法:如何从1T的无序数组(长度为n)里面找出前k大的数据,复杂度要求为O(logN)
  • 由A启动BActivity,A为栈内复用模式,B为标准模式,然后再次启动A或者杀死B,说说A,B的生命周期变化,为什么

美团(Over)

面试机会来自于内推

  • APP启动流程
  • Webview内存泄露
  • 组件间通信,如何传递对象
  • Arouter原理
  • 如何取消一个网络请求
  • 两个activity之间来回切换的生命周期变化
  • 进程间如何通信,Binder机制
  • 内存泄露及优化
  • 自定义view以及事件冲突
  • 线程池参数及定义,多线程是否一定会高效
  • 电量优化

美团实际上面了三面,但是面试题跟前面的面试官很多重复的,所以就只写了上面几道题目,整体面试感觉都答上来了,但是问的有些问题确实没接触过,比如说Webview的性能优化,电量优化等,最后HR反馈的情况是基础很好,项目经验不足。

猎豹移动(Offer)

面试机会来自于Boss

笔试:

  • 请例举Android中常用布局类型,并简述其用法以及排版效率
  • 区别Animation和Animator的用法,概述其原理
  • Thread,Looper,MessageQueue,Handler,Message每个类的功能以及这些类之间的关系
  • 如何加载NDK库?如何在jni中注册native函数,有几种注册方法?
  • 操作系统中进程和线程有什么联系和区别?系统会在什么情况下会在用户态好内核态中切换。
  • 如果一个APP里面有多进程存在,请列举你所知道的全部IPC方法
  • 请画出MVC、MVP模式的差异
  • 对于Android APP闪退,可能的原因有哪些?请针对每种情况简述分析过程。

一面:

  • listview跟recyclerview之间的区别,然后上拉加载的时候分别应该如何处理
  • 项目中用过哪些技术
  • 同步普通方法跟static方法之间的区别
  • 不用锁如何保证int自增安全
  • 内存为什么会发生泄露
  • 做过的性能优化,原理
  • DVK跟JVM之间的区别
  • 有没有diss过产品经理
  • 平时看什么书
  • 为什么学python
  • 项目中用到过哪些技术
  • 期望在项目中扮演什么样的角色

二面:

  • Sycronized原理
  • ReentrantLock原理
  • 静态内部类为什么能保证单例,JVM是如何实现的
  • ART跟DVM做了哪些优化
  • View是如何绘制到屏幕上的
  • 写一个快排,有时间限制

三面:

  • GitHub上的开源项目是如何实现的
  • 未来的职业规划
  • 遇到问题如何解决

摩拜(Offer)

面试机会来自于拉勾

笔试:

自己带电脑,他们提供一个接口,实现一个瀑布流,需要考虑动画,内存管理等,可以上网搜,限时90分钟 当时我去的时候出了个以外,HR给我的WiFi我没法连GitHub,当时想着用自己封装的ImageLoader,没想着直接用第三方,在使用RecyclerView的时候依赖也没法添加,所以最开始时间都浪费了,直到一面面试官下来,给我连接了他们的员工wifi,我才能添加依赖,尴尬的一比,不过到最后时间到了还是没有实现预期的效果,面试官最后问我,我说了我的考虑,他说只是想看看我解决问题的能力,完全可以用第三方,没必要自己实现,不过对我的态度还是表示认可的,然后开始一面。

一面:

  • 深拷贝浅拷贝
  • 输出一个集合{A,B,C,D}的全部子集
  • 自定义View及注意事项
  • 如何自动化部署打包发包流程
  • JNI是否了解过
  • 内存回收
  • classloader
  • 对热修复以及插件化了解多少
  • 微信支付宝支付调用时上层是如何封装AIDL的
  • 如何给一个app瘦身

二面:

  • 如何实现一个推送,极光推送原理
  • 说说Http协议,以及Tcp/Udp
  • 常见的设计模式,如何实现一个观察者模式,如果需要有序通知观察者,该如何操作
  • 实现一个图片加载框架应该考虑哪些
  • 线程池有哪些参数,应该如何设计
  • 性能优化是如何做的
  • Java为什么要推出HashMap,它是如何解决hash冲突的
  • JVM内存分配,编码时如何注意内存泄露
  • Binder机制原理

三面:

写在最后

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从哪里入手去学习,对此我整理了一些资料

如果你熟练掌握以下列出的知识点,相信将会大大增加你通过前两轮技术面试的几率!这些内容都供大家参考,互相学习。

**①「Android面试真题解析大全」PDF完整高清版+②「Android面试知识体系」学习思维

Android阿面试积累,soul移动端开发工程师

导图压缩包**,最后觉得有帮助、有需要的朋友可以点个赞

Android阿面试积累,soul移动端开发工程师

Android阿面试积累,soul移动端开发工程师

Android阿面试积累,soul移动端开发工程师

举报

相关推荐

0 条评论