面试美团,爱奇艺等6家BAT公司收获一半Offer,这样准备面试通过率增加一半!

532 篇文章 0 订阅
340 篇文章 3 订阅

今天整理的这篇文章,整理自以前面试经历后的日常笔记。今天记录的是面试掌阅,马蜂窝,爱奇艺,美团,猎豹移动和摩拜一次经历以及面试记录,其中拿到了爱奇艺,猎豹移动和摩拜的Offer。

爱因斯坦说过“耐心和恒心总会得到报酬的”,我也一直把这句话当做自己的座右铭,这句箴言在今年也彻底在我身上实现了。

掌阅科技(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机制原理

三面:

  • 为什么重复造轮子,自己去设计一些框架的原因
  • 如何保证线上项目的稳定性
  • 自己之前做的项目的规模
  • 聊了聊他们目前在做的项目

三面面试官跟我聊了聊一些新技术,还有就是我自己为什么要重复造轮子,我说为了保证项目的稳定性同时能够更好地去定位问题,然后聊了聊他们目前在做的项目,整体感觉特别好。

面试之外的学习心得

1.好记性不如烂笔头

这句谚语,几乎无人不知无人不晓,但是总被许多初学者抛在脑后。在学习的时候,总是看的代码多,而动手练习的代码少!身为一个程序员都应该很清楚,代码如果不多动手敲它,它永远不会自己跑进脑中,所以多动手才是成功的关键。

2.花更多的时间分析问题

花更多的时间理解和分析问题,然后再设计方案吧。你会发现剩下的事情很容易了。设计不是说要用建模语言和工具,可以是仅仅看看天空在脑子里构思。那些在遇到问题就开始敲代码的人往往会最终偏离需求。作为程序员,当你在编写代码之前,尽量把问题分析透彻一点,这不仅能提高你编码的效率,更重要的是能提高你的分析问题能力。

3.重思考,多总结

一个段好的代码并不是它们越复杂越好,简单的方法,实现复杂的功能,才是我们最需要的。要提高编码速度,更重要的是简化梳理程序流程,以最小的代码量完成功能实现。所以编程最重要的事情是思考和总结。

最后

最后这里是关于我自己的Android 学习,面试文档,视频收集大整理,有兴趣的伙伴们可以看看~ 

2020年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。祝大家2020年万事大吉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值