安卓面试中高级安卓开发工程师总结之——大公司面试的方向和套路以及应对方法

简介: 上一篇我们说了大公司的任职资格描述可能很简单,但是有很多点需要注意。下面我们说说中高级安卓开发工程师岗位在大公司应聘中的复习方向:安卓已经火了这么多年了。

上一篇我们说了大公司的任职资格描述可能很简单,但是有很多点需要注意。下面我们说说中高级安卓开发工程师岗位在大公司应聘中的复习方向:

安卓已经火了这么多年了。现在如果还从事安卓开发,基本上都是中高级安卓开发工程师。


那么用人单位在对中高级安卓开发工程师方面的要求要达到什么程度呢?

在回答这个问题之前,我先说一下中高级安卓开发工程师的薪资水平吧。至于为什么,先说这个。因为我怕接下来你没有动力去看,去学习,去提高。所以先给你一点动力。

贝壳,汽车之家,这些中高级安卓开发工程师的薪资范围是30K-50K,并且有可能达到14薪(因为被爆出的链家门事件,具体参考http://www.sohu.com/a/248709552_100079542

https://mp.weixin.qq.com/s/GapQX15P-4Jg92-8TyVaUA ,所有租房类公司,博主也拒绝了面试邀请)。美团,百度,京东,滴滴(现在正值全民抵制滴滴的时候,博主也拿到了滴滴的offer,因为滴滴顺风车造成多起治安事件,引起全国人民的愤怒,所以,博主本人决定不去滴滴履任,以后也拒绝再投或给滴滴推荐简历。除非滴滴做到如下所有滴滴注册司机必须按照出租车司机标准审核,并且滴滴内置一键报警功能,同时滴滴客服业务自己经营管理。)的薪资范围是 18K-35K,可以拿到16薪,并且有年终奖。如果分到比较好的项目组,年终或者季度分红的奖励买房买车也是有的(比如华为荣耀,腾讯王者荣耀和吃鸡手游,季度分红达到100薪以上。各位吃瓜群众还是要有梦想的)。

回到之前的那个问题,用人单位在对中高级安卓开发工程师方面的要求要达到什么程度呢?

举例说明:百度,汽车之家有笔试。笔试大多都比较简单,会有几个不好回答的。不过笔试其实真的没有多大关系,主要还是面试


面试官一般会从最简单的入手(博主本人因为是自学的,4个月就自学完了Java。所以基础很差,也最怕问这些。),比如会问object有哪些方法?我回答完后,面试官就会继续问,那equals方法的比较原理是什么?hashCode的原理,跟equals的区别。随即转到Map中的hashMap的相关原理。

有问listview(recycleview)有哪些方法,然后每一个方法的作用(这里的方法会根据你前面回答的不断的深问),参数的作用。问到这,还有公司会问,由于一个项目中需要用到的这2个控件太多了,每次都要写,会很麻烦,并且要写很多次,怎么解决这个问题。

这个问题的解答,各位可以百度一下。一般我的解决方式是自定义一个带泛型和不指定参数个数的adapter。然后再定义一些方法,这样就不需要再adapter里面做太多的操作。具体自定义封装的会在后面的博文中详细说明这里的自定义封装方式和应用方式。当然鼓励大家自己发掘,并且给我留言,我好补充完整这个问题。


第二种问题:你经常用到的第三方库有哪些?然后开始考你对第三方库的源码的熟悉程度,熟练使用能力,和扩展能力。

比如博主遇到过面试官问我gson解析的多方面问题。因为博主项目中有硬件交互,所以服务端接口返回的有对象,有不是对象的,有字段的,有连字段都没有,直接返回的,有返回是字符串的,有直接返回是二进制(或16进制)的。所以在回答这方面问题的时候,对使用面试官很满意。但是接下来的一个问题,让我很难受。面试官是这么说的:假如后台给你了一个错误的数据类型,我们作为前端,怎么做一个容错处理来保证APP的正常使用(根据接口文档,后台就是给错了,前端也必须能做兼容这种错误数据的解析。)。这道题也是很多大公司要面临的问题,尤其是发展很快的创业公司。在创业中前端和后台人事变化大,并且开发需求变化也比较大。后台API和前端的版本没有做到同步更新会导致这些问题。所以各位想跳槽的,心里有一个类似这种兼容,容错问题的准备。(备注:这道题可以用泛型,反射。但是还是有一定的问题。一般问这种问题的,也是公司当前面临这个问题亟待需要解决的问题。通常问这种问题的面试官,会不仅仅只问一个这种问题,他会前后循序渐进都这种类型的问题,围绕这个主题问,所以面试时遇到这种没有准备的,又不知道怎么做的,可以前后思考一下面试官前后的几个问题和引导方向,综合这几个问题,思考一下解决思路)。


第三种:算法。这个从各个大公司的招聘来看,都有这个方向的要求。并且博主在去面试的过程中,真的有问算法方面的问题。这个主要考察一个人的解决问题的能力,思路能力,是否开阔,活跃。

并且这种题有2种考法。第一种是用Java或者安卓代码能实现的方法去解决。第二,可以不考虑具体用代码怎么实现,而是要看你的分析问题,解决问题的能力。当然第二种的情况比较少。

举个栗子:比如博主在去知乎的时候,面试官出了2个关于这方面的题。第一:比如一张图片,有很多颜色,那么在打开这个图片的时候,这个图片下边会有这张图片上有颜色的色块。(可参见苹果手机系统的图片编辑)。这个题用最原始的方法实现(不要说用python,不要说用现在有了一个这个类palette)。第二个题:一篇新闻,点赞(或评论),2个维度时间和点赞,用什么样的函数来做到时间的新鲜度和点赞的数量来决定这篇新闻的排名。(面试官说现在只让我考虑2个维度,时间和点赞数。从原则上来讲,时间约大,点赞越多,排名越靠前。),然后面试官给我画了一个函数图线。我一看,像是对数函数的大致走势,然后就说用对数函数。但是由于很多年没有在看数学,真的忘了这些。线性函数,对数,指数,凸优化,统计,微积分,真的忘了。不过靠这个的不多。因为大公司会有专门的算法工程师。这里只是做一个强调:大公司会很看着一个人的逻辑思维和解题能力。答案是否够完美,不重要。


第四种:混合开发经验。这个是目前很火的一种安卓开发工程师的需求。Hybrid开发经验。由于本人是native和App的混合开发。所以今日头条HR也给我打了面试要求电话。先说一下今日头条技术很强大,原以为可以到今日头条看看。然而去面试,才一把辛酸。本人面试的是今日头条的【懂房帝】,新项目团队,团队很小,办公也不怎么的。跟今日头条是分开办公的。人员不多。我去面试的时候,可能对方的HR没有跟技术人员沟通好,临时2个一线开发人员面试。所以对方也很紧张,很匆忙。然后从最基础的面试开始,没有涉及有深度的问题。我很不舒服,发表了一句,你们面试都这么基础吗?对方回怼:那你认为什么是高端问题?我回怼:不是说那个问题高端和low的问题。你们问的问题本身就很不明确,我不知道你想问的知识点是什么。对方说:我们一般由浅入深。我继续回怼:那我回答后,为什么不继续问,而是不停的跳转其他基础问题。对方在问问题的时候,也暴露出很多知识点的不确定和知识点的范围不够广。举个例子,问的最确定的一个问题是:说说安卓的4大组件。然后没有深问其中任何一个组件。又问:activity的启动。就这几个字。我很懵,这个要问我activity的启动模式,还是就是问activity怎么启动的。如果是后者,我还需要明确我是否需要回答启动的调用方法过程(这个过程20多步,我没有全部记住,我只记得大概)。然后问二维码你用的什么。我说这个用zxing。对方很懵。事件分发,问的是:手势冲突。就这几个字。基本上,说着说着我也懒得说了。不知道为什么,我没有继续说下去的欲望了。最后他们说,我们需要的是hybrid开发经验。我说简历,我没有投你们,是你们给我打的面试要求电话。简历,你们的技术大佬肯定看过。你说的hybrid开发经验,你们偏web。而我偏native。关于网络请求,你全程就问了我我的网络请求用的什么。我说retorfit2+OKHTTP3。你也没有再深问了。你没有问过我web方面的,没有问过我webkit。我也很委屈。然后他们的技术大佬不在,然后就没有然后了。中午1点赶到面试的。竟然来了一个这。中间还有一个插曲是我说,activity的生命周期你别问吗?对方也很尴尬。我说没有一个深入,我该怎么回答这个问题呢?是回答6个生命周期,还是12个生命周期,还是更多?我回答6个没什么意义,回答12个我不确定你们希望是否认可,是否知道activity的其他生命周期及其作用。

扯了一会淡,回归正题。目前互联网大公司大多还是偏纯应用,偏web方面的,所以,hybrid开发经验在目前还是比较好找工作的。没有这个方面知识的,要开始狂补了。



总结:目前想换一个18K以上,尤其是想拿到25K以上的;想从一个初级安卓开发工程师进阶到中高级安卓开发的。这几个方面的知识点要开始狂补了:

第一:Java基础,要有深度,原理要知道。

第二:源码是否经常看,是否能自己封装,扩展一些第三方类库。比如常用的listview,recycleview,gson,okhttp,图片加载框架,内存优化,内存溢出,传感器(sensormanager),兼容性(分两个方面,第一UI适配(今日头条适配方案),第二性能适配(so文件))。


(备注:以上2个方面在下文中有具体方向说明)


第三:算法,逻辑思维能力。这个可以大公司都会问一些这方面的问题。多想想为什么。数据结构,几个排序要会写。还有就是多看看常用APP他们的有些算法是怎么做的,琢磨琢磨

第四:目前非常火的就是hybrid混合开发(偏前端),这个要开始写一个项目了。简单的都行。从Github上下载一个项目,自己再敲一遍。

第五:很重要。就是据我所知,很多应用都准备加入小视频的功能。很多大公司的APP也是。所以,视频音频,这个必须会。GitHub上很多这方面的源码,可以下载自己看看,不说自己敲一遍,至少要知道用什么,怎么做。


基础知识 – 四大组件(生命周期,使用场景,如何启动)

java基础 – 数据结构,线程,mvc/MVP/MVVM框架

通信 – 网络连接(HttpClientHttpUrlConnetion),Socket

数据持久化 – SQLiteSharedPreferencesContentProvider

性能优化 – 布局优化,内存优化,电量优化

安全 – 数据加密,代码混淆,WebView/Js调用,https

UI– 动画,view自定义,adapter的泛型和不指定参数数量的优化,滑动控件的深度优化,图表

其他 – JNIAIDLHandlerIntent

开源框架 – OKHTTPGildeRxJavaGson



说了这么多,那应聘中高级安卓开发工程师,要做哪些面试准备呢?

在这里,博主也准备好了几个方面的知识点,不过会在后面的博客中,慢慢更新出来。

今天先给大家分享一个面试题准备的:https://blog.csdn.net/huangqili1314/article/details/72792682

后面,博主会不断一个知识点一个知识点的更新,希望能让你进阶成一位中高级安卓开发工程师。

下一篇,博主会主要讲一下:中高级安卓开发工程师面试之——如何写一份让HR主动邀请你面试的简历

相关文章
|
1天前
|
安全 Android开发 Kotlin
Android经典面试题之Kotlin中常见作用域函数
**Kotlin作用域函数概览**: `let`, `run`, `with`, `apply`, `also`. `let`安全调用并返回结果; `run`在上下文中执行代码并返回结果; `with`执行代码块,返回结果; `apply`配置对象后返回自身; `also`附加操作后返回自身
17 8
|
23小时前
|
前端开发 Android开发 iOS开发
探索安卓与iOS开发的差异性与互补性
在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统各据一方,引领着市场潮流。它们在技术架构、开发环境及用户群体等方面展现出独特的差异性,同时也存在着潜在的互补性。本文将深入剖析这两种平台的开发细节,从不同角度揭示其各自优势及相互之间的协同潜力,为开发者提供全面而深刻的视角。
7 2
|
2天前
|
SQL Java Unix
Android经典面试题之Java中获取时间戳的方式有哪些?有什么区别?
在Java中获取时间戳有多种方式,包括`System.currentTimeMillis()`(毫秒级,适用于日志和计时)、`System.nanoTime()`(纳秒级,高精度计时)、`Instant.now().toEpochMilli()`(毫秒级,ISO-8601标准)和`Instant.now().getEpochSecond()`(秒级)。`Timestamp.valueOf(LocalDateTime.now()).getTime()`适用于数据库操作。选择方法取决于精度、用途和时间起点的需求。
15 3
|
6天前
|
SQL 安全 Java
Android经典面试题之Kotlin中object关键字实现的是什么类型的单例模式?原理是什么?怎么实现双重检验锁单例模式?
Kotlin 单例模式概览 在 Kotlin 中,`object` 关键字轻松实现单例,提供线程安全的“饿汉式”单例。例如: 要延迟初始化,可使用 `companion object` 和 `lazy` 委托: 对于参数化的线程安全单例,结合 `@Volatile` 和 `synchronized`
17 6
|
7天前
|
Java Android开发 iOS开发
探索安卓与iOS开发的差异性与互操作性
【7月更文挑战第17天】在移动应用开发的广阔天地中,安卓和iOS这两大操作系统如同双子星座般璀璨夺目。它们各自拥有独特的开发环境、编程语言和用户群体,为开发者提供了不同的挑战和机遇。本文将从多个维度深入剖析安卓与iOS开发的差异性,并探讨它们之间的互操作性如何实现,以期为开发者们提供一份实用的指南。
21 7
|
5天前
|
Java Android开发 Swift
探索iOS与安卓开发的差异与挑战
本文深入探讨了iOS和安卓两大移动操作系统在应用开发领域的不同点及其所面临的挑战。通过对开发环境、编程语言、用户界面设计、性能优化及市场策略的比较分析,揭示了各自平台的独特性以及开发者需要克服的技术与市场障碍。 【7月更文挑战第19天】
|
5天前
|
Java Android开发 iOS开发
探索安卓与iOS开发的差异:平台特性与用户体验的对比分析
【7月更文挑战第19天】在移动开发的广阔天地中,安卓与iOS两大阵营各据一方,它们在开发环境、用户界面设计、性能优化等方面展现出独特的魅力与挑战。本文旨在深入探讨这两个平台在技术开发和用户体验上的根本差异,并分析这些差异如何影响开发者的策略和最终用户的选择。通过比较两者的编程语言、工具、框架以及设计理念,我们将揭示各自平台的优势与局限,为开发者提供实用的参考,并为消费者呈现一个更加清晰的平台选择视角。
|
6天前
|
安全 Java Android开发
探索安卓与iOS开发的差异:构建未来应用的关键考量
【7月更文挑战第18天】在移动应用开发的广阔天地中,安卓和iOS两大平台各领风骚。本文将深入探讨这两个平台在开发过程中的主要差异,包括编程语言、用户界面设计、性能优化、安全性以及市场策略等方面。通过比较分析,旨在为开发者提供决策支持,帮助他们选择最适合自己项目需求的平台,同时考虑到用户体验和市场需求的变化,为未来的应用开发指明方向。
|
7天前
|
监控 开发工具 Android开发
探索安卓与iOS开发的差异:平台特性、工具和市场趋势
在移动应用开发的广阔舞台上,安卓与iOS两大操作系统扮演着主角。它们各自拥有独特的平台特性、开发工具和市场定位,这些差异深刻影响着开发者的决策和产品的最终形态。本文将深入分析这两大平台的关键技术差异,探讨各自的开发环境和工具集,以及它们在市场上的表现和未来的趋势,为开发者提供一个全面的视角,帮助他们在这两个平台上做出更明智的开发选择。
|
4天前
|
开发工具 Android开发 Swift
探索Android与iOS开发的差异与挑战
【7月更文挑战第20天】在移动应用开发的广阔天地中,Android和iOS两大平台如同双子星座,各自闪耀着独特的光芒。本文将深入探讨这两个平台在开发过程中的主要差异,以及开发者面临的技术挑战。我们将从开发环境、编程语言、用户界面设计、性能优化、安全性考量等多个维度展开讨论,旨在为那些即将踏入或已在这片星空下航行的开发者提供一盏明灯。