根据回忆写下的面试要点,都是比较常见的问题。大家可以对照回答下,不清楚的可以查下资料补充下。
今年疫情下,Android开发的岗位明显少了很多,开的工资也不是很高,除了一些大公司,比如字节跳动,小公司工资不高,要求还是挺高的,感觉啥都要会,所以Android开发现在也是亚历山大,所以离职要慎重,不要裸辞,多弥补下基础知识,梳理下自己的工作及对应的应用及实践,准备充足点,不要浪费少量的机会。
Android基础
1、什么是ANR 如何避免它?
如果耗时操作需要让用户等待,那么可以在界面上显示进度条。
2、View的绘制流程;自定义View如何考虑机型适配;自定义View的事件
3、分发机制;View和ViewGroup分别有哪些事件分发相关的回调方法;自定义View如何提供获取View属性的接口;
4、Art和Dalvik对比;虚拟机原理,如何自己设计一个虚拟机(内存管理,类加载,双亲委派);JVM内存模型及类加载机制;内存对象的循环引用及避免;
5、ddms 和 traceView;
6、内存回收机制与GC算法(各种算法的优缺点以及应用场景);GC原理时机以及GC对象;内存泄露场景及解决方法;
7、四大组件及生命周期;ContentProvider的权限管理(读写分离,权限控制-精确到表级,URL控制);Activity的四种启动模式对比;Activity状态保存于恢复;
8、什么是AIDL 以及如何使用;
9、请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系;
10、Fragment生命周期;Fragment状态保存startActivityForResult是哪个类的方法,在什么情况下使用,如果在Adapter中使用应该如何解耦;
11、AsyncTask原理及不足;ntentService原理;
12、Activity 怎么和Service 绑定,怎么在Activity 中启动自己对应的Service;
13、请描述一下Service 的生命周期;
14、AstncTask+HttpClient与AsyncHttpClient有什么区别;
15、如何保证一个后台服务不被杀死;比较省电的方式是什么;
16、如何通过广播拦截和abort一条短信;广播是否可以请求网络;广播引起anr的时间限制;
17、进程间通信,AIDL;
18、事件分发中的onTouch 和onTouchEvent 有什么区别,又该如何使用?
19、说说ContentProvider、ContentResolver、ContentObserver 之间的关系;
20、请介绍下ContentProvider 是如何实现数据共享的;
21、Handler机制及底层实现;
22、Binder机制及底层实现;
23、ListView 中图片错位的问题是如何产生的;
24、在manifest 和代码中如何注册和使用BroadcastReceiver;
25、说说Activity、Intent、Service 是什么关系;
26、ApplicationContext和ActivityContext的区别;
27、一张Bitmap所占内存以及内存占用的计算;
28、Serializable 和Parcelable 的区别;
29、请描述一下BroadcastReceiver;
30、请描述一下Android 的事件分发机制;
31、请介绍一下NDK;
32、什么是NDK库,如何在jni中注册native函数,有几种注册方式;
33、AsyncTask 如何使用;
34、对于应用更新这块是如何做的?(灰度,强制更新,分区域更新);
35、混合开发,RN,weex,H5,小程序(做Android的了解一些前端js等还是很有好处的);
36、什么情况下会导致内存泄露;
37、如何对Android 应用进行性能分析以及优化;
38、说一款你认为当前比较火的应用并设计(直播APP);
39、OOM的避免异常及解决方法;
40、屏幕适配的处理技巧都有哪些;
41、两个Activity 之间跳转时必然会执行的是哪几个方法?
42、Okhttp原理
43、Rxjava用法和原理
44,热更新技术有哪些,知道的原理!
45、Activity启动流程
46、Android内存管理
47、Android权限管理
48、将一下7.0的新特性
49、说下你你们项目的架构
50、组件化的有点和具体实施方案
51、内存泄露检测方法
52、Http协议,SSL握手机制。
Android——性能优化
1.如何对 Android 应用进行性能分析
2.什么情况下会导致内存泄露
3.如何避免 OOM 异常:首先OOM是什么?Android的OOM怎么样?如何避免OOM?
4.Android 中如何捕获未捕获的异常
5.ANR 是什么?怎样避免和解决 ANR(重要)
6.Android 线程间通信有哪几种方式
7.Devik 进程,linux 进程,线程的区别
8.描述一下 android 的系统架构
9.android 应用对内存是如何限制的?我们应该如何合理使用内存?
10.简述 android 应用程序结构是哪些
11.请解释下 Android 程序运行时权限与文件系统权限的区别
12.Framework 工作方式及原理,Activity 是如何生成一个 view 的,机制是什么
13.多线程间通信和多进程之间通信有什么不同,分别怎么实现
14.Android 屏幕适配
15.什么是 AIDL 以及如何使用
16.Handler 机制
17.事件分发机制
18.子线程发消息到主线程进行更新 UI,除了 handler 和 AsyncTask,还有什么
19.子线程中能不能 new handler?为什么
20.Android 中的动画有哪几类,它们的特点和区别是什么
21.如何修改 Activity 进入和退出动画
22.SurfaceView & View 的区别
项目框架的使用
1.开发中都使用过哪些框架、平台
2.使用过那些自定义View
3.自定义控件:绘制圆环的实现过程
4.自定义控件:摩天轮的实现过程
5.GridLayout的使用
6.流式布局的实现过程
7.第三方登陆
8.第三方支付
9.进程保活
非技术问题汇总
1、研究比较深入的领域有哪些;
2、对业内信息的关注渠道有哪些;
3、最近都读哪些书;
4、自己最擅长的技术点,最感兴趣的技术领域和技术点;
5、项目中用了哪些开源库,如何避免因为引入开源库而导致的安全性和稳定性问题;
6、实习过程中做了什么,有什么产出;
7、5枚硬币,2正3反如何划分为两堆然后通过翻转让两堆中正面向上的硬8币和反面向上的硬币个数相同;
8、时针走一圈,时针分针重合几次;
9、N * N的方格纸,里面有多少个正方形;
10、现在下载速度很慢,试从网络协议的角度分析原因,并优化(网络的5层都可以涉及)。
HR问题汇总
1、您在前一家公司的离职原因是什么?
2、讲一件你印象最深的一件事情;
3、介绍一个你影响最深的项目;
4、介绍你最热爱最擅长的专业领域;
5、公司实习最大的收获是什么;
6、与上级意见不一致时,你将怎么办;
7、自己的优点和缺点是什么?并举例说明?
8、你的学习方法是什么样的?实习过程中如何学习?实习项目中遇到的最9、大困难是什么以及如何解决的;
10、说一件最能证明你能力的事情;
11、针对你你申请的这个职位,你认为你还欠缺什么;
12、如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本13、不适合这个职位,你怎么办;
14、项目中遇到最大的困难是什么?如何解决的;
15、你的职业规划以及个人目标;未来发展路线及求职定位;
16、如果你在这次面试中没有被录用,你怎么打算;
17、评价下自己,评价下自己的技术水平,个人代码量如何;
18、通过哪些渠道了解的招聘信息,其他同学都投了哪些公司;
19、业余都有哪些爱好;
20、你做过的哪件事最令自己感到骄傲;
21、假如你晚上要去送一个出国的同学去机场,可单位临时有事非你办不可,你怎么办;
22、就你申请的这个职位,你认为你还欠缺什么;
23、当前的offer状况;如果BATH都给了offer该如何选;
24、你对一份工作更看重哪些方面?平台,技术,氛围,城市,money;
25、理想薪资范围;杭州岗和北京岗选哪个;
26、理想中的工作环境是什么;
27、谈谈你对跳槽的看法;
28、说说你对行业、技术发展趋势的看法;
疫情之下,如何做好职业规划
目前困难重重,简历多,招人少,个人前景不明
1,求职岗位数量缩减,招聘通道缩减
缺少招聘会通道,缺少面对面沟通了解,
各行业受到打击,减少人力成本,裁员和减少招聘需求很常见。
2,岗位竞争激烈
物以稀为贵,岗位少,必定求职竞争更加激烈。
怎样应对?
1,调整心态,做好持久战
接受目前现状,调整心态,多充电读书,做好长期求职准备,找工作当成一种状态,就是把找工作当成一种“工作”。
2,时刻准备,抢占先机
从职业规划上提升自己的自我竞争力。围绕内因和外因梳理强化自己的优势。内因就是我们的才干知识和技能,外因就是靠行业定位,企业匹配,职位设计。
自己的优势是什么,还需要提升什么技能,适合什么岗位,是专精一个岗位,还是所有岗位都涉猎,最后达到自己职业规划的目标。
行业和公司选择上,考虑直接进大厂还是去创业公司,是不是去竞品公司历练,是不是去外派公司积累经验。
一些个人建议:
做好长期职业规划,梳理自己的优劣势及兴趣爱好,找到自己的长期优势,并强化和建立起自己的优势。
在做好本质工作的前提下,发展多份收入模式,工作收入,发展兴趣带来的收入,投资产生的被动收入,多收入驱动,从此人生发展之路会顺利宽广很多。
找工作之前,以长远目标为终,想好自己想在哪个岗位发展,发展路线是什么,然后去各种招聘渠道去找合适的工作,多利用身边的资源和圈子,借助他人力量帮助你找到合适的工作。
找工作之前做好笔试面试的准备,准备充分点,不要浪费机会,在选择公司和岗位时要慎重综合考虑,当你拿到多个offer时,以最重要的三个要素去分别打分,最后确定你的决定。
找工作跟投资原理一样,选择好赛道,良好商业模式的公司,选择企业文化认同的公司,选择你佩服和领导力强的领导所带领的公司。
总之,所选工作是适合自己的,也是适合公司的,达到双赢结果。
最后
学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
如何进阶?
1、确定好方向,梳理成长路线图
不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的沉淀和技术的积累。
关于这一点,在我当时确立好Android方向时,就已经开始梳理自己的成长路线了,包括技术要怎么系统地去学习,都列得非常详细。
知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。
2、通过源码来系统性地学习
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
3、阅读前辈的一些技术笔记
4、刷题备战,直通大厂
历时半年,我们整理了这份市面上最全面的安卓面试题解析大全
包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。
如何使用它?
1.可以通过目录索引直接翻看需要的知识点,查漏补缺。
2.五角星数表示面试问到的频率,代表重要推荐指数
总结
爱默生说:一个朝着自己目标前进的人,整个世界都给他让路。所以,作为现在的你,不惑很简单,多思考多规划,未来会更清晰,朝着自己的目标一步一步走下去,尽早地取得成功。毕竟,年龄在程序员界里,也是一种优势。
如果,你没有靠山,就让自己成为自己最稳的靠山吧!
以上文章中的资料,均可以免费分享给大家来学习,无论你是零基础还是工作多年,现在开始就不会晚。
以上内容均放在了开源项目:【github】 中已收录,里面包含不同方向的自学Android路线、面试题集合/面经、及系列技术文章等,资源持续更新中...