开头
面试时间:2021.2.9 1~3面、2021.2.13 4~6面、2021.2.26 HR面
面试部门 + 岗位:商业化 - 高级 Android 开发工程师
面试感想:整体面得比较累,基础面、交叉面、Boss面,前前后后对接了 6 个面试官 (离当初给我说的 3面+HR面 貌似差得有点远¬_¬) 。算法到 Boss 面都还在写,不过庆幸的是面试官没有为难我 (老实交代了算法没怎么准备,哎…),算法都不太难。整体项目比基础问得多。
面试建议:算法、基础是敲门砖,项目是试金石,良好的面试形象是加分项。
简历上列举的项目多想想,为什么做这个项目?做这个项目的目标是什么?我的方案是什么?相对其他方案我的方案优势是什么?项目的收益是什么?项目的架构图是否能画出来?项目中使用的主要框架原理是否前前后后都清楚?(我大概就是项目拯救了自己,基础准备有点仓促T^T)。
如果是现场或视频面试,良好的面试形象还是比较有必要的。在部门 TL 面的时候,就提到我相对很多其他面试者比较好的一点就是,整个人的形象状态比较好,没有让人觉得很疲惫。
面试题目
1.一个创业公司
(发现问下来几乎全是java基础知识,几乎没有android知识)
先是笔试:
- 生产者消费者模型用线程方式实现、按元素大小拼接两个链表
- 同步和异步的区别
- 阻塞和非阻塞的区别
- 泛型擦除
- 集合中线程安全的类和非线程安全的类(SparseArray和ListArray的区别,SparseArray怎么存数据、取数据)
- Gradle插件怎么做
- https怎么实现防抓包
- 封装第三方库等等;
2.一个五六百人的民企
- 线程池
- 消息推送(自己做一个消息推送怎么实现)
- Exoplayer相对于系统的MediaPlayer有什么优点
- h5面面加载缓存,和原生怎么传递数据
- MQTT和XMPP有什么区别,为什么会有那么多协议
- https的原理,中间人攻击
- 怎么中断一个线程
3.大厂
(多家公司面试题汇总,一些我认为的简单或是常规问题就不罗列了,全是我自己之前没怎么关注的问题,所以有时第三方库烂大街的原码分析要看,但有些关键点,其实很多博文可能都没分析到,需要自己多想想,自己主动去思考)
- AsyncTask原理,在子线程中定义AsyncTask实例可不可以,为什么不可以呢
- OkHttp原理(说了那些拦截器)怎么实现多路复用的(这个主要从https实现多路复用的原理上谈,用了二进制分帧,那okHttp其实就是按分帧来读取,具体可以自己看看相关博客)
- Handler的机制,android内部是怎么实现发送延时消息,(一开始以为是用个类似于Timer之类的定时任务,后来才知道是用系统开机时间+延时时间得到一个时间T1,当手机当前时间到了T1的话,就会把消息发送出去。但有可能UI线程被阻塞了,所以到了T1时间,也不能确保100%这个Message被发出去的)
- 性能优化减少apk体积,怎么减小so包的体积呢
- 怎么给一个应用加固
- ANR的原理,怎么从trace.log中找到ANR的原因及出现的地方(找到main thread),如果只是在主线程中Thread.sleep(10S),会不会出现ANR
- JNI层的Crash怎么定位(通过ndk中相应的工具addr2line ndk-stack等可以定位到行)
- 广播为什么能作为四大组件,有什么特殊之处(经面试官提醒,能实现一对多通信),本地广播的实现原理
- Android中设计Fragment的好处,那有了Activity为什么还要设计出Fragment来呢(解耦)
- ViewStub为什么能实现延迟加载(它没有进行测量和绘制,只在调flate或是setVisibility时才会加载进布局)
- Binder怎么实现进程间通信的,怎么注册服务的。。。。
。。。。还有很多题,就不一一举例了,只能说给自己一个教训,很多东西看深点就不会多问一点就不知道了。
4.创业公司想招团队负责人
- 做过哪些性能优化,Leakcanery的原理,怎么检测内存泄漏的
- android的新技术你用了哪些
- 你认为你应用中做得比较nb的地方有哪些,你认为你项目中解决了哪些技术难点等等。。。
5.我认为反常规的面试
1)直接拿着我做的公司某个应用开始一通批判,觉得我自己对自己做的应用都不负责任,还有什么理由来应聘你,问你认为你最善长做的是什么,比如UI、功能、性能优化等,你要说UI吧,你这UI做得怎么怎么的,你要说性能吧,应用性能也确实一般般,让我觉得我没有啥善长的。回来老公说我们公司害了我,因为我现在的公司做的应用要求太低了,能用就行。但是别人对我要求松,我得对自己严要求、高标准〜〜〜〜
2)上来弄个类似于脑筋急转弯的题
Set stack &#61; new HashSet<>();
for(Short i &#61; 0; i <100; i&#43;&#43;) {stack.add(i);stack.remove(i-1);
}
System.out.println(stack.size());());
我以为会抛异常&#xff0c;面试官问要是不抛&#xff0c;又会输出什么&#xff0c;我想着输出1呢。后来自己下来试验了一把&#xff0c;发现输出100&#xff0c;让我百思不得其解。后来百度搜索&#xff0c;经别人提点才知道因为i-1这里用到了隐式类型转换i-1会转成int型的减法&#xff0c;所以在remove时&#xff0c;根本没有那个对象&#xff0c;所以无论怎么调stack.remove(i-1)都不会有元素移出&#xff0c;我不得不感叹面试官设计的陷阱。后面又问了两个矩阵传送门问题&#xff0c;应该有取巧的办法&#xff0c;可能我脑子真是太笨了&#xff0c;最终也没有想出来。
面试感言
自己的总体感受是&#xff1a;现在市场大环境不好&#xff0c;各大互联网招人的部门都是些边缘部门或是新设部门&#xff0c;有些甚至是光杆司令或是完全全新的部门&#xff0c;从0个人开始招&#xff0c;先招团队负责人等。现在市场是供过于求&#xff0c;有不少被公司裁掉的员工&#xff0c;在这个节点找工作&#xff0c;导致楼主去面试&#xff0c;面试官一上来就问你现在是离职态还是在职。如果自己不够优秀&#xff0c;面试官有很多选择&#xff0c;是不愿意付高价来招聘你的&#xff0c;按道理什么时候都这样吧&#xff0c;只是现在有点过了。市场供过于求&#xff0c;应聘公司有得挑&#xff0c;不够优秀&#xff0c;可有可无的人&#xff0c;一般会倾向于压低工资。
通过这轮面试&#xff0c;让我知道了自己的差距&#xff0c;自己的研究的东西太浅薄了&#xff0c;而且没有自己的优势或者说专长。而且自己作为一个女程序员&#xff0c;发现HR面时很吃亏&#xff0c;HR好像提前给你考虑了各种因素&#xff0c;结婚了是吧&#xff0c;有没有小孩&#xff0c;有小孩你得照顾小孩吧&#xff0c;我们这里很忙的。即使你再想证明自己&#xff0c;工作方面不会受影响&#xff0c;但他们还是不想冒这个险&#xff0c;就像我当年校招找工作&#xff0c;去自己老家某银行面试&#xff0c;省行不要女生&#xff0c;可以去自己家里的分行。因为你要结婚&#xff0c;要生孩子&#xff0c;要休产假&#xff0c;要照顾家庭。我什么都没说呢&#xff0c;就把我给否完了&#xff0c;给我先下个定义&#xff0c;难不成想让女程序员都不要结婚不生娃么&#xff0c;你也有媳妇啊。
总的来说&#xff0c;自己劣势挺明显的&#xff0c;没有在某方面有很深研究&#xff0c;没有什么优势&#xff0c;知识面的广度和深度都不够&#xff0c;这方面要加强&#xff0c;同时作为一个有娃的女程序员&#xff0c;已经被别人否掉了50%了&#xff0c;所以必须从技术方面加强吧。
工作我还会继续找&#xff0c;人都是追求上进的&#xff0c;有好机会还是会考虑挪窝的。我不想在我30岁就干一份可以养老的工作&#xff0c;技术我也会努力去提升&#xff0c;愿我和大家都会有一个更好的未来。
最后
本文在开源项目腾讯文档已收录&#xff0c;里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等&#xff0c;资源持续更新中…
目前已经更新的部分资料&#xff0c;需要的自取&#xff1a;
-1616938570373)]
[外链图片转存中…(img-vuNAvaLT-1616938570375)]
[外链图片转存中…(img-3IbycGmP-1616938570377)]