一位30K大佬的面试经验!Android高级开发岗必问知识点,赶紧收藏

本文分享了作者在寻找Android工作期间的面试经历,包括对Android市场、热门技术(如组件化通信、进程间通信和性能优化)的理解,以及面试策略。作者提供了技术细节和自己的优缺点分析,展示了从初级到高级Android开发者的成长过程和求职建议。
摘要由CSDN通过智能技术生成

前言

马上就要开始春招了,不知道各位小伙伴有没有找到自己心仪的工作呢。

最近这两年移动开发遭遇寒冬,再加上培训机构以及很多应届生的加入,很多从事Android和IOS开发的同学,都出现了工作难找的情况。基于此种情况下,这段时间基于以下疑虑打算去外面看看:

1、了解Android的互联网市场到底如何?

2、了解当前的互联网公司更需要哪方面的热门技术?

3、面对移动互联网的滑铁卢,该何去何从?

基于以上问题,打算面试数家公司,一方面了解目前的Android市场情况,一方面提升自己的面试技术,从这些面试中学得更多的知识和技能,还有把此经历分享出来,希望大家多多交流。

No.1:金蝶(云之家)

面试结果:21K,15薪,公积金缴纳比例12个点,缴纳基数20k

面试过程:面试流程总的有三面,因为当时比较忙,所以约的电面,面试的是当时的技术经理,然后约的周六技术总监面试,最后人事面。

一面:Android技术经理

旁白:百分之90的面试第一句都是来自我介绍,所以这个时候把自己的项目经历准备充分就好,这方面需要在简历里面下功夫。

面试官问:App的性能指标有哪些?

我答:App的性能指标涉及的范围比较广,比如Crash率、卡顿、内存、CPU、网络流量、耗电等等。接下来面试官有问到Android里面的奔溃率多少合适,当时具体多少我没说,我讲到了在实际开发中可以集成腾讯的Bugly来解决和统计奔溃率的问题。然后,谈到了App卡顿优化,在这块我先谈App 卡顿的一些场景,像列表(RecycleView)滚动时的卡顿问题、频繁IO导致的卡顿、主线程做耗时操作、复杂的布局设计等几种情况进行讲解,在开发中怎么注意卡顿的问题,然后讲解了怎么使用工具来定位卡顿问题,如BlockCannary、TraceView,然后稍微说了下线上卡顿的定位,可以自建APM平台收集卡顿日志,以及第三方平台听云的使用。因为时间有限,其它性能指标就没有在谈及。

面试官问:Android组件化是怎么通信的?

我答:Android组件化的通信有多种方式,比如Activity的跳转可以使用路由机制,像Arouter框架或者自己根据uri机制来实现一套路由。还有组件之间的数据通信,可以使用LocalBroadcast、AIDL等来进行通信。

面试官问:了解Socket通信吗?

我答:Socket这块聊到了TCP协议以及三次握手,还有我以前参与过的一个车载系统的APP,使用了TCP通信来采集GPS、数据流量等信息,还有TCP长连接的保活机制。因为这个项目不是我负责的哈,所以这块讲的比较浅,当时面试官提到我们项目中的TCP通信协议怎么定义的,这块没有说上来。

面试官问:Android中的进程间通信有哪些?

我答:Android进程间通信包括Binder通信、Socket通信、广播、内容提供者等等,其实,Android里面的四大组件都涉及到了进程间通信。

面试官问:我的问题问得差不多,你有什么需要了解的吗?

我答:公司目前的Android团队是怎样的?这个职位将来要负责什么项目?

面试官答:目前这边项目组Android有3个,我是这边的Android技术经理,这个职位负责的是云之家APP。然后,我问了下上班时间这些。

最后,面试结束,面试官叫我等待通知。然后,下午,人事约我复试,复试的是项目组的总监,这次我约的是下班后7点钟。

二面:技术总监

面试官问:谈谈你对Android开发中架构的理解?

我答:Android项目中的架构是与业务有关,不同的业务场景需要不同的架构支持,我谈谈之前开发过的旅游APP的架构演进:

(1)快速开发:项目初期,业务量少,这个时候使用短平快的MVC模式,可以适应快速开发的节奏。然后,顺便说到了MVP和MVVM的区别和理解。

(2)模块化:随着业务量的增长,可以把项目中的功能按照模块进行划分,模块之间的通信可以使用EventBus,并且把一些基本的功能抽成一个CommonLib模块,包含utils(工具类)、自定义控件、功能组件。

(3)组件化:项目规模越来越大之后,可以对项目进行组件化,把项目按照业务模块进行拆分,拆分出一个一个的业务组件。组件化之后,业务模块之间更加独立了。这个时候,可以很方便的把一个业务组件独立出来,成为一个独立APP。

(4)插件化:随着业务进一步的发展,有的时候需要接入合作方的APP,作为项目中的一个模块。当时,我们的旅游APP,需要把合作方的酒店APP接入进来,作为我们旅游APP的一个模块,这个时候使用插件化,把酒店APP作为一个插件接入就可以了。当然,还有一些情况,使用插件化后,可以动态升级某个功能模块以及实现功能模块的按需加载。

面试官问:谈谈你对Android性能优化的理解?

我答:性能优化这块涉及到的话题很广,可以从内存、卡顿、网络、布局、启动等方面来说,我先说说Android中的卡顿优化吧。卡顿性能优化可以分为三个过程:开发期,测试期以及线上。

(1)开发期:一方面,需要开发注意平时的代码设计,多多关注哪些方面容易出现卡顿,如ListView卡顿优化、频繁IO等。另一方面,我们可以集成一些工具来自动检测卡顿的地方,如BlockCanary。

(2)测试期:测试的同学可以把卡顿列为一个测试指标,在测试时遇到卡顿反馈给开发人员,还有我们集成多工具BlockCanary也可以在测试期检测到。

(3)线上:如果需要线上检测,那么自己可以搭建一个APM平台,来收集卡顿相关的数据然后来进行卡顿优化。当然,我们也可以使用第三方平台,如听云、OneAPM平台。

讲完卡顿性能优化后,技术总监聊了点java基础,涉及点内容没有深入,然后,问了几个非技术性问题。

面试官问:说说你的几个与工作相关的优缺点?

这个问题很多面试官都喜欢问,这个每个人的情况不同。举个例子,如英文不错,看英文的技术文档无障碍;工作认真负责;热爱新技术;喜欢研究一些深入的技术等等。缺点如,执行力有的时候不够,安排好的事情没能及时完成;做工作的时候有的时候比较专注于一些疑难问题,从而忘记了工作进度,这个时候加加班处理下没多大问题的。

ps:这个有缺点的问题尽量都能答上,如果答得不好,会大大减分,因而失去一个offer。

最后,面试官问:你还有什么问题需要问的吗?

我答:您这边项目组情况是怎么样的?有多少个Android开发的?工作时间是怎样的?

ps:面试快结束的时候,一般面试官都会这么问,当面试官提这个问题的时候最好别什么都不问,这样的话会大大减分,面试官会觉得你对他们公司不关心。但问问题的时候也不要随便问,根据不同的情况,如面试官是做技术的,我们一般可以问问技术团队是怎样,大概要做一个怎样的项目,然后,这个项目有什么规划。如果是HR,我们可以问项目情况,团队情况,上班时间等等。还有一个问题,最好问下,“贵公司对该职位有什么期望?”,这样可以了解这个职位和自己的契合度,方便以后入职。

三面:人事

人事这块问的非常详细,像上家公司做的每个项目,项目开发周期,团队多少人等等。这块根据自己以往的项目经验来说就行。一般正常来说,面到人事,差不多offer就快到手了。但是,也不是绝对,有的公司人事把关比较严格,在人事这块面挂的也出现过两次。这里来段小插曲,当时,人事问了一个问题,“你开发中遇到的技术难点是什么?”,人事问这个,当时,脑袋卡壳了,一时不知道怎么回答,不过后来缓过神来,既然是人事问题,那我就把抓着某个技术说就可以了,人事就没继续往下问。如果是技术人员问到这块,遇到脑袋卡壳,基本是挂了。在面试中,我遇到过一次,在后面的连载中继续分享。

怎个面试结束下来,就是谈offer了,我跟人事谈期望22K,不过一直没谈下来哈。

最后,说下最近的面试成果,目前拿到了多家公司的offer,知名点的如OPPO、魅族、金蝶、珍爱网等等,还有一些不太知名点的公司,如岩心、ECAR等,谈到的薪资分布在16k到30K,最高的达到30k,百分之九十分布在20k以上,当然,也有些公司没有面到最后,后续也都分享出来,希望读到的朋友们多多指教。

下面是整理的一些面试过程中Android高级知识点:

Android高级知识点

============

一、Android性能优化

1.描述一下android的系统架构?

2.Android线程间通信有哪几种方式

3. 如何避免OOM异常

4.Android程序运行时权限与文件系统权限的区别?

5.Hybrid 通信原理是什么,有做研究吗?

6.Framework工作方式及原理,Activity是如何生成一个view的,机制是什么

7.ANR是什么?怎样避免和解决ANR

8.Devik进程,linux进程,线程的区别

9.卡顿 {如何检测卡顿,卡顿原理是什么,怎么判断页面响应卡顿还是逻辑处理造成的卡顿} ,BlockCanary 的原理

二、Android热修复、插件化、组件化

1.谈谈对 ClassLoader 的理解

2.自定义 ClassLoader

3.插件化为什么会出现,如何代码加载,资源加载,代理 Hook)

4.如何从一个老项目一步步实现组件化,主要问思路,考察架构能力和思考能力。(需要考虑很多,每一步做什么,顺序很重要)

5.组件化和模块化的理解与区别?

6.class文件加载Dex原理

7.Gradle自动补丁包生成原理

三、Android Framework、 ROM定制、Ubuntu、Linux之类的问题

1.Binder 机制(IPC、AIDL 的使用)

2.Activity 启动流程,App 启动流程

3.Android 图像显示相关流程,Vsync 信号等

4.为什么使用 Parcelable,好处是什么

5.AMS 、PMS

6.类加载机制

7.Ubuntu编译安卓系统

8.对Dalvik、ART虚拟机有什么了解?

9.JVM内存区域,开线程影响哪块内存

四、架构设计和设计模式

1.MVC MVP MVVM原理和区别

2.项目中常用的设计模式

3.说说EventBus作用,实现方式,代替EventBus的方式

4.Fragment如果在Adapter中使用应该如何解耦?

5.实现一个Json解析器(可以通过正则提高速度)

6.从0设计一款App整体架构,如何去做?

7.Fragment如果在Adapter中使用应该如何解耦?

8.谈谈你对Android设计模式的理解

五、算法

1.手写一个冒泡排序

2.快速排序的过程、时间复杂度、空间复杂度

3.蚁群算法与蒙特卡洛算法
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

【附】相关架构及资料

源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,和技术大牛一起讨论交流解决问题。

image

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

src=“https://img-blog.csdnimg.cn/img_convert/4d7387d8486adb198bced3d5b7ec4f74.jpeg” />

【附】相关架构及资料

源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,和技术大牛一起讨论交流解决问题。

[外链图片转存中…(img-iK0EPWwp-1712336376501)]

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
  • 29
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值