两年经验Android面经

去年跳槽不成功,在A公司又呆了一年。一年来收获蛮大,就公司项目来说,已经是非常熟悉了,很多入职不久的,都是不断抱怨,框架太老,技术太旧。这个是实话,但是细看里面的思想和设计还是能学到不少东西的,一年来也顺手优化了许多东西,根据业务也思考了很多更合理的方案。

不过还是打算跳槽了,薪资和无法推动项目是个大问题,总不能鱼渔都不得吧。我是抱着找不到好的,就北上的心态找的。

做股票期货的,经验类似,面试太过顺利…
  1. Activity的启动模式
  2. Activity和Fragment数据交互
    线程间交互的方法都行,进程间交互的就更可以了,FragmentManager/getActivity()
  3. 单例的实现方法
  4. 事件分发机制
  5. 开源库用过哪些
    自己平时写项目学习,基本都用过,原理也了解;重构项目的资讯模块用了Retrofit & RxJava,自己思考优化了代码框架,比如线程切换、页面查找等,其实弄清楚原理,要改哪里一目了然
  6. 项目中Socket是怎么分包、编码的?
  • 包类型分为Text类型、Table类型、资源类型、曲线类型、交互模式数据(曲线类型属性主要是点,关键方法append,可以增量更新数据)
  • 公司自己定义了个Base64编码,算法当然不要去纠结了
  • 延伸了下压缩(主要用于Table和曲线类型)和加密(参考HTTPS)
  1. 股票的图怎么画?像左右滑动、点击出现十字光标这些
    原理知道即可:自定义View & 触摸反馈
有赞

重点在kotlin、RN和weex,其实也正常,电商类都偏向混合开发,毕竟活动更新很频繁,和自己的技术栈不是很符合,估计是挂了,也正常,以公司角度肯定最好是找搞过的,以个人角度技术栈对不上肯定也会被压薪资…

  1. Handler、Looper、MessageQueue的关系
  2. 类似微博分享功能适合的launchMode,为什么不是singleInstance?
  3. Binder具体的实现原理,数据拷贝次数:代理模式 & 协议,太细的忘了,开发艺术探索、内核剖析、源代码情景分析里都看过…
  • 个人觉得学以致用,比如App启动,没必要每步都记清楚,知道需要创建ApplicationThread、ActivityThread,然后和冷热启动结合想一下,activity的启动流程和生命周期结合想一下,虽然还没深入到那一步,但是启动模式实现肯定也是在AMS的,知识其实是相通的,多想想设计者这样设计的道理
  1. RxJava:一个请求用完接着再用一个请求(concat)/两个请求并行使用哪个操作符(zip)
  • 其实场景是很常见的,比如我们也有委托双重认证,并发请求就更多了,但是RxJava用的少,没那个意识,资讯那块的请求很简单,不过提醒我了,双重认证可以封装简化 -> 可能不行,公司的网络框架没那么解耦的
  • 这种类似问题我是最烦的,确实不会,不过知道就是输入关键字搜索就可以知道的问题
  1. StringBuilder和StringBuffer的区别,StringBuffer的实现原理
  2. HashMap的rehash扩容是怎么操作的:没什么印象了
    1). 创建一个新的Entry空数组,长度是原来的2倍
    2). 遍历原Entry数组,把所有的Entry重新Hash到新数组里。为什么要重新Hash呢?因为长度扩大以后,Hash的规则也随之改变了
    -> 想问的应该是rehash的公式,之前看到过,不过没去记…
    -> 也有可能想知道的是:LoadFactor:HashMap负载因子,默认是0.75f;Capacity:HashMap的当前长度,HashMap的长度必是2的幂
  3. 栈虚拟机和寄存器虚拟机差异:听都没听过,不过知道寄存器处理速度是最快的
  4. Retrofit的注解是怎么解析的:动态代理、AOP
  5. Handler的内存泄漏原因;为什么内存释放不了,MessageQueue持有? -> 被带沟里了,肯定知道内部类持有外部引用导致activity无法释放;想的是线程是GC Root,Handler正在运行,会导致activity无法释放,所以被引导,顺势说了MessageQueue持有了activity
  6. JSBridge安全漏洞解决方法:知道有安全问题,但是没仔细研究
  7. ClassLoader双亲委派实现原理
  8. IntentService的实现原理
  9. 平时用过哪些框架:RxJava和Retrofit重构了资讯模块
淘客吧

View的绘制流程、承载的数据结构、树的好处
算法题:把0排到最前面
事件分发机制
MVC MVP MVVM的区别
ClassLoader的过程,ClassLoader的好处
Handler内存泄露
多线程机制
HTTPS工作原理
数据怎么压缩,数据的安全
插件化原理
ARouter原理
组件化通信
内存优化做过哪些
讨论了下负载均衡
系统启动流程和activity启动流程
成长最大的阶段

阿拉丁

领导不在,同学内推的,面试官说进阿拉丁有点屈才,该试试大厂。我也想,但是不认识内推的人…

HTTP和HTTPS区别
HTTPS流程,项目中安全和压缩处理
Binder机制
ClassLoader机制
对架构的理解
OkHttp原理,怎么把参数组装的
事件分发机制
HashMap的哈希散列实现,线程安全吗,为什么?
ArrayList和Vector扩容的区别
HashTable,ConcurrentHashMap怎么实现线程安全
jvm内存模型,新生代和老年代的比例?
新生代里怎么划分?好处?
熟悉哪些数据结构?
设计模式在源码和项目中的使用
单例模式的写法,思路
java8对hashmap的优化
hashmap和hashset区别,hash怎么散列的
tcp三次握手
sp的apply和commit区别?

头条

项目中成就最大的部分
对Thread的理解?线程状态?阻塞和运行状态区别?
锁的种类,什么是自旋锁,ReentrantLock?
HashMap原理?
HandlerThread原理和使用场景?
-> IntentService
线程池怎么实现,阻塞队列原理?
–> DelayedQueue、LinkedBlockingQueue、SynchronousQueue的实现
Fragment初始化参数调用哪个方法?
Fragment懒加载怎么实现?
事件分发机制,分析3层View包裹,点击click
自定义View怎么绘制,注意点?
网络框架怎么重构封装的?
TCP三次握手
对资讯进行了MVP封装,讲讲MVC和MVP的理解
为什么使用Bundle不用HashMap传输数据?
Serialable 和 Parcelable区别
glide的图片三级缓存
交互模式

爱库存

面完有个面产品的漂亮小姐姐搭话,心里美滋滋

大都问的项目,每个点延伸讲了很多,所以问的个数不多
Service熟悉吗?
Service进程保活?
MVC和MVP

做电商的

九宫格图片处理,图片上传按顺序排列:map存key
确认线程全部执行完
数据类型处理
32位和64位机器计算差异
svn和git的区别
对RN、weex、flutter区别看法

微选

协议规范更新处理 protocol buffer,网络库封装
TCP连接的维护,TCP连接请求确定发送
activity启动模式
启动优化
创建线程方式
类加载机制和好处
性能优化处理
什么情况会导致oom、内存泄露
对混合开发的研究

小影

项目中的难点、安全实现,压缩率?
HTTPS流程
项目中引进的开源框架
TCP连接资源优化?
动态代理模式?
抽象类和接口使用场景
String和StringBuilder区别
ViewStub和gone的区别:gone,避过layout、measure、draw环节,但是仍然生成对象占用资源/ViewStub在没有inflate时只是空白的View不消费资源
EventBus如何保证线程安全,遍历的时候删除一个
RxJava Observable和Flowable/observeOn和subscribeOn/map和flatmap区别,还有一些操作符的区别
还问了很多第三方

腾讯

腾讯这个是真没想到会有面试,确实是自己发挥的太差,这么基础的问题两个完全不知道,一个答的不满意,两个不确定,白白浪费了面试机会

  1. 堆和栈的区别?
  2. 堆和栈在操作系统的区别?没懂是什么意思…结束后查了下说的都是内存模型相关的,如果是就亏大了,这部分其实是强项
  3. 对C++熟悉吗?不熟
  4. Android中哪四大组件?
  5. Activity、Window、View的理解?
  6. 事件分发机制?
  7. 如果我设计View怎么设计?
  8. 对设计模式的理解?
  9. 自己公司项目中用到了那些设计模式?
  10. 昼夜模式、屏幕适配、多语言的实现?(应该就炸这了,感觉被误会成老油条了,实际上我可是港美股小组的新技术主推进者,泪奔…)
  • 提到公司的屏幕适配、不敢把最新技术用到公司项目上,好像面试官很不满意这点,明显感觉到态度发生180°转变,看来腾讯很重实战
  • 追问了下如果我从头开始设计怎么搞这些适配?再追问了头条屏幕适配方案的原理
  1. 快速排序时间复杂度:O(nlogn)
  2. 怎么处理内存优化?
  3. 知道某个页面导致了OOM,但是不知道产生的情景如何排查
  4. 网络协议熟悉吗?
  5. GET和POST的区别?
  6. TCP四次挥手原因?
  7. 属性动画和补间动画的区别
宜信

视频面,面试官在我卡编程题的时候,看我的简书。面试结束说他们的项目组小,怕我过去没多久就跑了…

项目介绍,分层设计
模板方法模式注意点,在JDK中的使用?
内部类访问局部变量的时候,为什么变量必须加上final修饰
-> 问的应该是这个问题?
https://www.zhihu.com/question/21395848
https://blog.csdn.net/zzp_403184692/article/details/8014235
编程题:

  1. 两个栈实现读多写少的队列
  2. 队列怎么实现线程安全 -> 读写锁机制,能同时读写吗
  • 发现大都问的相似,都想停更了…

据我的面试经验,想进大厂,一定要把基础打的非常非常扎实。
大厂面试分好几轮,第一轮基础没答的不理想(即使是知道要点也不行),哪怕确实是简单的知识点,逻辑一定要理的很通顺,否则给人印象就是基础不扎实,就不会往深层问了的,也就没机会了。
研究不深的不要给自己挖坑,大厂一定要对某方面有很突出的研究。

祝好,持续更新…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值