马上过年了,过完年回来就是春招和金三银四的面试季了,今天分享一下面试前的准备技巧和一些Android面试要点,这篇文章适用于所有需要就业的小伙伴,不管你是名校毕业,还是双非出身,我相信这篇文章能给你带来一点点的小的收获!
主要讲的几个部分:
- 引人注目的简历
- 常见的面试小技巧
- Android 面试要点
- 高质的学习资料
引人注目的简历
准备简历有两点是绝对要记住的:
简历真的很重要很重要,招聘系统或者是邮箱里一天可能会收到几十万份甚至更多的简历,HR可能打开10秒都不够就决定这份简历是不通过还是进入下一阶段了。
我的简历经过了五个版本的修改,从一开始的简历挂,到现在,基本上都变成笔试挂了(有毒?)
简历的目的:让企业的人从整体上了解你是一个具备什么能力的人
简历可能涉及到的分点都尽可能全地给你列出来了,你只需要选择其中适合你的即可:
- 个人信息:你的姓名、联系方式、求职岗位(切忌不要写无关的内容例如身高体重之类的)
- 掌握技能:这一块是最重要的,面试官会根据你写的内容考察你掌握的知识
- 校内经历:在校期间你主要的突出表现
- 项目经历:如果有团队项目最好,也可以从
GitHub
上找一个项目练手,再没有,可以把学校的课程项目写上去呀!
- 竞赛经历:数学建模、ACM、蓝桥杯这些高质量比赛一定要写
- 实习经历:这点不是必须的,如果有,最好描述清楚实习的工作内容、表现和收获
- 获奖证书:CET-4,CET-6,奖学金,软著,论文······
- 自我评价:不要局限于写上烂大街的协作能力强,工作认真······,可以要加上具体内容去支撑你的每个自我评价
如果你不知道该怎么写简历,我可以推荐两个链接给你,我基本上是按照他们的建议来写简历的:
一个程序员的简历模版分享
常见的面试小技巧
面试有很多小技巧的,特别是和 HR 对线的时候(HR看到不要找我呀,害怕.jpg)
我们先来看看和技术面试官对线的时候,有哪些可以用的小技巧:
- 不懂不要说不懂:面试官在知识深度上超出我们的掌握范围,如果问到不懂可以参考下面的做法:
- 可以结合自己的理解去回答,无论正确与否,虚心请教
- 若是有标准答案的问题但不懂,可以说:“目前还没有接触到这部分知识,面试完以后会去学习,加强理解!”
- 引导面试官:面试官抛出一个问题时,围绕该点展开回答,可以串联一些其它知识,但不要说太多,引导面试官:
- 提到 ArrayList 时,提一下 LinkedList,引出 LinkedList
- 提到 HTTP 时,提一下 HTTPS,引出 HTTPS
- 手撕代码:切忌抬手就写,要确定题意,对有不理解的地方要敢于提问。解题时跟面试官说自己的思路,以及每一步干什么,一边写一边向面试官解释。
- 不要一开始就追求最优解,面试官不会太反感粗糙的代码,但他希望你是一个有逻辑、思路严谨的人。
- 面试官会引导你优化你现有的代码,不必因为一开始写不出最优解而苦恼。
- 反问环节:要从面试官那儿获得对自己的反馈,比如:
- 你觉得我的基础如何,之后该向哪个方向加强?
- 当前企业最主要的技术栈是什么?
- 公司目前的主要业务是什么?该岗位主要负责什么内容?
当我们经历了技术面的洗礼后,顺利来到了 HR 面试,这时候要记得:在 HR 面试环节,要在不过分夸张的情况下表现出自己的优秀,表现出对加入公司的向往。
HR 主要会问以下几项内容:
- 了解你的个人情况(校内经历、兴趣爱好、家庭情况···)
- 询问你对公司的了解,我们可能面试很多家公司,不可能每家公司都了解很透彻,只要了解公司的行业,主要产品即可
- 询问你的期望薪资(这是 Battle 名场面!最后再展开说)
- 反问环节:可以问 HR 关于企业文化和培养新人的制度等,如果有完善的制度和文化,一般 HR 都会回答的很流利的,否则就要慎重了。
Android 面试要点
整个面试题分为三个部分:Java、Android和项目经验。
Java技术
Java基础
- 对抽象、继承、多态的理解
- 泛型的作用及使用场景
- 枚举的特点及使用场景
- 线程sleep和wait的区别
- JAVA反射机制
- weak/soft/strong引用的区别
- Object的hashCode()与equals()的区别和作用
集合类
- JAVA常用集合类功能、区别和性能
- 并发相关的集合类
- 部分常用集合类的内部实现方式
多线程相关
- Thread、Runnable、Callable、Futrue类关系与区别
- JDK中默认提供了哪些线程池,有何区别
- 线程同步有几种方式,分别阐述在项目中的用法
- 在理解默认线程池的前提下,自己实现线程池
字符
- String的不可变性
- StringBuilder和StringBuffer的区别
- 字符集的理解:Unicode、UTF-8、GB2312等
- 正则表达式相关问题
注解
Android技术
Android基础
- 四大组件的意义及使用,生命周期回调及意义
- AsyncTask、Handler的使用
- Android系统层次框架结构
- AsyncTask的实现方式
- AsyncTask使用的时候应该注意什么
- Android常见的存储方式
- Looper、Handler和MessageQueue的关系
- Activity的启动流程(考察对Framwork的熟悉程度)
- 多进程开发的注意事项(Application类区分进程,进程间内存不可见、进程间通讯方式)
Resource相关
- .9图片的意义
- style和theme的作用及用法
- dpi、sp、px的区别以及转换关系
- raw和assets文件夹的作用,二者有何区别
- Android系统如何在多个资源文件夹下查找匹配最合适的资源
虚拟机
- Java内存模型
- Android虚拟机的特点
- Dalvik和Art的区别
- 熟悉垃圾回收的实现机制,了解虚拟机的GC类型
View相关
- 常用组件的使用:ListView、RecyclerView及Adapter的使用
- View之间的继承关系
- Invalidate与postInvalidate的区别
- 自定义View的实现方式(根据项目经验询问相关组件)。
- onMeasure/onLayout/onDraw的作用
- Paint、Matrix、Shader等绘制相关类的方法作用
- 详细描述事件分发机制
动画
- Android有哪些动画的实现方式
- Interpolator类的意义和常用的Interpolator
- ViewAnimation与属性动画有什么区别
- 如何自定义ViewAnimation
- 属性动画的实现原理
图片处理
- 一般项目中如何加载大图
- 图片压缩的方式
- 如何不压缩图片加载高清图
- 图片加载过程中,一般会使用缓存,这个缓存的主要作用是什么
- 谈谈自己熟悉的图片加载框架
项目经验
开发工具
- 代码管理工具:SVN、Git
- 常用的调试工具:Hierarchy Viewer、DDMS等
- CI工具:Lint检查,FindBugs、Jenkins
- 内存分析工具:dumpsys、memoinfo、MAT
项目工程
- APP更新策略:推送或者拉取?
- 如何统一处理错误崩溃
- 如何进行用户行为收集
- 日志管理有哪些要点?(Debug包开放,release包关闭,错误日志反馈)
- 打包方式Ant、Maven、Gradle
- 机型适配情况
开放平台
- 是否使用过第三方平台
- 常用开放平台的熟悉度(微信、QQ、微博、支付宝等常用的支付和分享)
- 是否进行过对第三方平台的统一封装?
- 是否自己开发过SDK?
设计相关
- 有哪些常用的设计模式、设计原则
- 设计模式在Android源码中的应用
- 设计模式在项目中的应用
- 项目中的分包方式
- MVC在android中的应用,利弊
- android项目中的常见层次结构,包划分
- 有没有设计过项目中的层级结构、包划分
好了,大概就这么多,大家可以考察下自己对于知识点的掌握情况。
对于答案,我觉得只要你真的会了,用自己的语言去描述就是最好的答案~ 不过为了让大家方便复习,我将耗时一年多整理的1025页的Android高级面试及答案解析分享给大家~
接下来重点来了!!!
高质的学习资料
如今入门Android的门槛已不像十年前那么高,学习资料随便百度一搜一大把,我们需要选择适合自己的、高质的学习资料来学习,否则会降低我们的效率。
我整理了各个科目的一些学习资料,并且自己手工制作了几幅思维导图,相信一定对你有帮助!
私信我「资料」即可获取该文章中所有的高清脑图!
计算机网络
计算机网络是开发中的重中之重,基本上是离不开网络这一块的,因为我们开发的应用要给客户用的,给客户都用就涉及到联网,联网就涉及到网络。
对于开发人员而言,应用层、传输层是最最重要的,网络层次之,其余作为了解,感兴趣可以深入学习。
我阅读过的书籍有三本:
- 《图解 TCP/IP》
- 《图解 HTTP》
- 《计算机网络:自顶向下》
前两本书用大量的图解让我们对整个网络世界进行宏观上的了解,第三本书会更加系统、全面地将每一层的知识点讲解透彻。
数据结构与算法
这一块是最最重要的,只要你是研发岗位,就逃不过这一关,但恰恰这是最难的一关,因为它的灵活多变,学习的难度自然会上升,但这也是被最多人忽略的一个领域。
数据结构算法专题
Android七大核心知识
如果是从事 Android 开发,这部分就相当于我们的根基,这部分知识面有些广,重要的也很突出:
- 架构师筑基必备技能:深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IO
- Android高级UI与FrameWork源码:高级UI晋升+Framework内核解析+Android组件内核+数据持久化
- 360°全方面性能调优:设计思想与代码质量优化+程序性能优化+开发效率优化
- 解读开源框架设计思想:热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack
- NDK模块开发:NDK基础知识体系+底层图片处理+音视频开发
- 微信小程序:小程序介绍+UI开发+API操作+微信对接
- Hybrid 开发与Flutter:Html5项目实战+Flutter进阶
上面这几个知识点是我在面试过程中被问到过次数最多的,如果需要系统的学习,针对这些知识点,我手头上准备了不少的电子书和笔记,将这些笔记将各个知识点进行了完美的总结。
Android开发相关源码精编解析
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。
Android高级开发面试题及答案解析
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:
完全掌握以上这些不能够让你马上冲进大厂,但至少能够让你踏进中厂或者好的小厂,踏进大厂也只是时间问题!
总结
(1)准备一份好简历,格式一定要用 PDF,参考网上的模板不断优化自己的简历内容
(2)3月至5月是春招和金三银四的招聘时间,6月至8月是秋招提前批的黄金时间,9月至11月是秋招的大潮,一定要跟上!
(3)投递简历一定要内推,内推码和公司都在牛客网
(4)要有自己的一两个面试小技巧,可以在不断面试中总结出来
(5)心态要稳,要淡定,你总能成功的
英雄不问出处,总有一片属于你的天地,一定要试着坚持下去!
- 羡慕那些年薪几十万的同学吗?羡慕。
- 羡慕那些有大厂 Offer 的人吗?羡慕。
- 羡慕那些已经找到自己热爱的岗位工作的人吗?羡慕。
切忌因此而焦躁不安,盲目的攀比只会让自己的眼光更狭隘,做好自己的职业规划非常重要,享受追逐梦想的过程吧,万一实现了梦想,你的下一站又是哪里呢?
最后再补充一句,不要妄自菲薄,但也不要眼高手低,我们都是普通人,比昨天的自己更进步一些就好了!
以上内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容!!!