最接地气的 Android 面试总结心得
大家可以根据自己的情况自己创建,安排和查看都很方便。
面试排期面试多的话,不要一天排超过 4 个,2-3 个最好,有时候可能会赶不上,同时会给人家造成不好的印象,同时对自己太多劳累(面试比工作累多了)。
面试之中
这部分主要是面试相关,本身我是接近两年的工作经验。所以我面试的公司没有什么 BAT,也没有上千人的大企业。所以,如果不适合你,可以选择跳过。同时我面试的比较多,不乏一些初创的创业公司(10 个人一下,5 个人的公司)。但是每个公司的面试我们都要重视与尊重,因为只要是一个公司既然创办起来,必然有存活之道,所以没有高低,只有适不适合自己。如果特别少的面试邀请也可以试试锻炼自己。去不去那又是另一回事。
因为我面试时间并不长,面试的公司与周期不多(面试真心太累了),所以都是从我的个人实际触发,仅供参考。我面试的公司与内容如下:
XXXX 清承科技有限公司
公司方向:?主要是教育方面,是一家线上与线下结合的教育相关公司,提供不同年龄段的教育学习,同时自主研发平板投影,视频盒,定制钢琴,手机端在线教育软件等。公司也是初创团队,公司 40+人,近 20 人清华毕业,公司负责人与移动部负责人都是清华博士后毕业。说来也尴尬,因为由于个人原因,晚了面试时间 12 天,但是想着试试。公司人数:?30-50 主要内容:
java 核心思想
java 高级知识,注解,反射,泛型的理解与作用
framework 有那方面什么理解
Activity 的生命周期与启动模式
性能优化
内存优化
数据结构(这方面是我的弱项,于是给我一个场景让我如何去选择,为什么)
Bitmap 如果优化,他的三级缓存的大致思想与逻辑
给我说一个你项目中你用到的自定义 View 的实现,不用细节到代码,主要的思想与核心方法输出即可。
ListView 如何优化,复用的原理,为什么会图片错位,如何解决,分页的思想是什么。
会根据你所写的技能特长找出 3-4 个点来问一问。由浅入深。从使用到场景到优化再到源码等等。(所以前面说了,不要随便写精通,除非你真的"精通")。
你在公司中用的什么代码管理,如何解决 git 冲突。你在工作中你的职责和主要内容等工作相关的问题。
像我这种基本一遍都会在 1-1.5 小时就会结束,上面的问题问一遍基本也就差不多了。由于我去的时候他们 Android 已经招满了,但是考虑我我来,就给我一个机会。这个公司很看重员工的学习能力,鼓励学工多元化发展,后台,前台,硬件多元化。公司不错。面试时间:?1 小时面试结果:?已给 offer 这个面试内容能够通过,基本就是靠文章和 github 给的分,专业知识不足。没有达到他们的要求。所以文章和 github 真的加不少分。因为学习能力和自主学习能力还可以,并且能看重你能力的公司至少会看重你的发展不光是让你来了就干活。
XXX 云公司
公司方向:?物联网方向,提供云服务,与技术支持,企业定制软件,是一个软件超控硬件的公司。由 360 核心团队创业公司人数:?30-50 人。主要内容:
手写三种单例模式,冒泡排序
java 线程,场景实现,多个线程如何同时请求,返回的结果如何等待所有线程数据完成后合成一个数据
线程种类
Android 子线程与主线程交互方式,原理以及各自的优缺点。
有哪几种创建线程的方式,优缺点。
项目介绍,开源框架的认识如何封装,项目中的难点
Activity 的生命周期,热修复的实现原理与区别(因为我简历里写了)。
在实际开发中的内存泄漏产生原因,如何查看,和你所知道的内存泄漏检测工具
项目介绍,项目提问,结果那些第三方,用工具解决问题,如何科学上网,会浏览那些网站,了解 Android 等技术途径等。
git 相
关(这我装了一波,说我都是手写命令,因为当时是看书学的,因为在 github 上不存在冲突,所以真的就习惯性的用命令操作 github)
其实还聊了一些东西,很多细节我也记不住了,面试官很和蔼,你不会告诉会先引导你,可以允许你有自己的理解思维与想法,然后说出自己的想法。不会的还会和你解释,很有质量的一次面试,也是我所有面试中最舒服的一次。面试时间:?1.5-2 小时面试结果:?已给 offer 这个公司我真的很喜欢,虽然是创业公司但是技术过硬,产品很好。主要是我的面试官和负责人都让我感觉很亲切,这可能也是我喜欢他的原因吧。
XXX 驾科技有限公司
公司方向?技术支持与服务,基础软件服务,车载导航软件支持等方向。公司人数:?50-70 主要内容
handle 的使用与原理
线程切换与线程池的种类与作用,什么情况下使用多线程,有什么好处
简单介绍四大组件
Manfest.xml 的里有什么和作用
什么是多进程,进程和线程的区别,如何给四大组件指定多进程。
多进程之间的通信的方式,如何使用 AIDL。他的使用场景是什么。
View 的加载流程
如何实现一个自定义 View
如何选择第三方,从那些方面考虑
内存优化
bitmap 的三级缓存思想与如何优化 bitmap
注解的作用与原理
设计一个音乐播放界面,你会如何实现,用到那些类,如何设计,如何定义接口,如何与后台交互,如何缓存与下载,如何优化(15 分钟时间)
技能相关
项目相关提问
下面是公司负责人面试
什么是 hash,他的作用是什么。hashMap 源码是什么,他是依据什么原理实现的。
手写一段代码,如何找出一段字符串中,出现最多的汉字是哪个。
第一场面试的时候大约 2.5 小时,第二场 40-1 小时,共 3.5 小时左右,因为当天的面试安排特别多,所以早点去,而且离家近,去了等他们还没有上班,走的时候他们午饭已经吃完了。其实前一个面试官聊得很不错,一般聊到总负责人就不会在技术了。而且他们要的是实习生,当时我也不知道怎么就去了。后面关于数据结构原理与算法,我基本完败,我不知道 1-2 年的 Android 能理解到什么程度只能说我技不如人,走的时候给我留个作业,设计一个基于高德地图的车载功能,要求界面流程,路线图实时绘制,定位准确。2 天时间。
面试时间:?3.5 小时面试结果:?未给 offer 因为时间比较紧,而且面试比较多,所以没有事件去完成留得作业,毫无疑问没有通过,从这个面试中我也知道了 java 基础与高级技能,还有数据结构与算法是自己的弱项,以后一定要在这方面多努力。
XXXX 投约牛科技****公司方向:?金融方向,产品开发接近尾声,还差一些付费接口数据,项目内部测试,然后上线。公司人数:?100-150 主要内容:
说下你了解那些 framework。
说说你对布局优化的理解
你是如何实现类始于 QQ 表情图的,实现动图与图文并现的原理你简单说下(项目中有)
说下当前你所知道的热更新与插件化,他们的实现核心原理是什么,他的异同有什么。
从那些角度可以减少 APK 体积的
对 gradle 命令与打包,接触过那些平台的上架
简单说下接入支付的流程,是否自己接入过支付功能
谈谈你对自定义 View 的理解,如果有一个需求你会如何实现一个自定义 View
说下 LinkedList 与 ArrayList,HashTable 与 HashMap 的区别与存储过程与遍历方式。
说下你都看过那些技术书籍,你是如何自学的。你觉得自己的优势与弱点是什么。
说下四大组件的启动过程(从 Framework 层去说,不必说出每个方法的名字,大致流程即可)。四大组件的启动与销毁的方式。
Android 的数据存储方式有哪些,是否 SQLite 中要继承那个类来创建与更新数据库。SQL 语句掌握怎么样。如何得到操作数据库的类等。
说下你对多进程的理解,什么情况下要使用多进程,为什么要使用多进程,在多进程的情况下为什么要使用进程通讯。
说下你用过的那些第三方,是否可展示。
这个公司项目马上要内部测试,可能会用到一些第三方的接入的东西,比较注重工作能力,面试官人很好,也是比较看重学习能力,也说当天面试过的 5-6 个人中都没有人说看书学习写博客之类的,而且根据的实际情况和能力程度来看,对我很满意(嘻嘻,有些小激动,付出终于得到肯定)。当时直接要给 offer,由于一些其他问题需要和领导协商。
面试时间:?1.5 小时面试结果:?offer 意向
还未收到他们回复面试结果,所以也不知道自己通过与否,不过感觉面试的还不错,由于他们产品开发完成大半,目前就差一些第三方的接入与优化和调试,所以需要一个工作能力比较好的,可以上手比较快。总的来说面试过程不错,不过也知道了自己在实际开发中处理问题能力与调试能力还要加强。面试官很好,说我就在他手底下干活。挺喜欢我的。哈哈。
**XXXX 智能****公司方向:这是一家人工只能公司,主要是做人工智能机器人,无人机,视觉算法等方面,公司环境高大上,基本好像都是 90 后,很有活力。领域也比较前沿,是一个不错的公司。公司人数:?100-200 主要内容:**第一个面试官:
说下你所知道的设计模式与使用场景
java 语言的特点与是 OOP 思想
说下 java 中的线程创建方式,线程池的工作原理。
说下 handle 原理,为什么会出现内存泄漏,为什么继承 Handle 就不会出现能存泄漏
说下 Activity 的启动方式,生命周期,两个 Activity 跳转的生命周期,如果一个 Activity 跳转另一个 Activity 再按下 Home 键在回到 Activity 的生命周期是什么样的
说下 Activity 的横竖屏的切换的生命周期,用那个方法来保存数据,两者的区别。触发在什么时候在那个方法里可以获取数据等。
是否了 SurfaceView,它是什么?他的继承方式是什么?他与 View 的区别(从源码角度,如加载,绘制等)。
如何实现进程保活
说下冷启动与热启动是什么,区别,如何优化,使用场景等。
Android 中的线程有那些(我提到 HandlerThread,AsyncTask 又问了他们的原理与各自特点)
给定命题,一串字符串中有通配符与占位符,如何化简优化(方法忘记可以简写)
说下产生 OOM,ANR 的原因,三级缓存原理,如何优化 ListView。
说下你对 Collection 这个类的理解。
第二个面试官:
说下 AIDL 的使用与原理
说下你对广播的理解
说下你对服务的理解,如何杀死一个服务。服务的生命周期(start 与 bind)。
是否接触过蓝牙等开发
设计一个 ListView 左右分页排版的功能自定义 View,说出主要的方法。
说下 binder 序列化与反序列化的过程,与使用过程
是否接触过 JNI/NDK,java 如何调用 C 语言的方法
如何查看模拟器中的 SP 与 SQList 文件。如何可视化查看布局嵌套层数与加载时间。
你说用的代码管理工具什么,为什么会产生代码冲突,该如何解决
说下你对后台的编程有那些认识,聊些前端那些方面的知识。
说下你对线程池的理解,如何创建一个线程池与使用。
说下你用过那些注解框架,他们的原理是什么。自己实现过,或是理解他的工作过程吗?
说下 java 虚拟机的理解,回收机制,JVM 是如何回收对象的,有哪些方法等
一些 java 与 Android 源码相关知识等
第三个面试官(总负责人):
大学成绩
大学那些专业,你哪方面学得好
单片机,嵌入式,电子线路。
毕业设计什么,几个人实现的,主要功能是什么
还有些其他硬件相关知识
自己的职业规划与发展方向
第一个面试偏向 java 基础和数据结构与算法与 Android 基础,第二个面试官主要考察源码理解能力,与沟通理解能力,因为第二个面试官问的很多问题我很多的达不上来,所以会往我会的方向上靠,所以给我的建议是语言组织能力与抓住说话人表达内容的理解能力有待加强。因为是人工智能方向,所以以后会接触到硬件的开发,正好我电子专业,所以问了很多硬件方面的知识(瞬间打脸,有些东西不用就忘了,没有回答好)。
面试时间:?2.5-3 小时面试结果:?已给 offer
其实这次面试我个人觉得一般,很多问题都没有回答准确,用的框架很多,源码理解不够深入,只停留在表面,再一次暴露我的数据结构与算法的不足和我的逻辑思维能力也差很多。都能说出一些东西,但是不准确与不深入。
XXXXBT****公司方向:金融方面,马上上线,想要一个人就能挑起开发大梁的人公司人数:?50-150 主要内容:
数据结构与算法相关
实际开发中的内存优化,APK 体积优化,代码优化,资源优化,缓存,数据库等
各大平台打包上线的流程与审核时间,常见问题(主流的应用市场说出 3-4)
支付宝与微信的支付功能接入,常见问题
如何和后台交互,post 请求的数据格式定义在那里定义,手写出来。
http 与 https 的理解与 4 层都是哪 4 层,在一个请求过程中都是什么时候走这些流程与各自的作用
http 的结构有那些(请求头,请求行之类的)
session 与 cookie 的区别
如何在后台没有给接口的情况下如何开发应用
你是如何封装网络请求,数据缓存,优化,文件下载,线程池,OKHttp3 源码的理解,如何提交 post 请求,如何处理返回数据,异常处理,实体定义等实际开发中与后台协作相关知识。
说下 Android 中特有的数据结构与常见的 java 数据结构(熟悉那个说那个),存储过程,源码与底层实现。
有些问题我忘记了,就能想起这么多了,总之没有问太多的简历内容,全是实际开发中相关的问题,如何和后台交互,如何代码优化,如何封装,打包上线等问题。这也提现了 http 相关知识的重要性,一个问题出现,如果理解 http 协议与后台就会更好的找到问题的根源,所以这方面的知识很重要,自己在工作中很少去注意这些,以后要多去学习这方面的知识
面试时间:?40 分钟-1 小时面试结果:?未给 offer
由于项目比较急,而且想要一个能快速接手与上线的人员,同时自己实际开发能力与问题处理能力不足,未能给 offer。
其实还有一个途游 XXX 游戏的面试,这也是我面试用户量比较大的一个公司,但是由于面试官生病了,着急去医院也就草草了事了。说再给答复。这里我只拿出的一些比较能记得住问题的面试
其他
其实有一些所有面试通用的问题,我基本没写,如简单介绍自己,根据简历中所写技能拿出 3-4 深问,看你掌握程度;项目概述,研发中遇到的问题,如何解决;公司项目中你的职责,遇到的问题,如何协作解决问题;项目中用到框架的源码理解,如何封装等等;
总结
我的面试中,framework,线程,数据结构与算法基础知识,开发实际问题,自定义 View 相关,四大组件与加载流程源码,框架源码的理解程度与原理,MVP 架构的理解,接口与抽象的使用场景,Handle 相关,线程切换,内存,性能优化等等都是常见的问题。
评论