安卓找工作需要什么(安卓好找工作吗)

面试前的准备

简历

简历你要做好充分的准备; 这不仅仅是对自己负责,也是对公司和自己时间的尊重,明显不match的简历,就不要抱着 “要不过来试试看” 的想法了,如果跟你所要去面试的岗位不match, 也不要浪费大家时间

面试问题

面试官一般是了解清楚面试者的背景后,要根据简历,有针对性的准备问题; 可以是作品或做过项目里的某个技术细节的实现方式,也可以是对面试者声称精通的某些领域的相关问题; 特别是刚开始进行面试的同学,往往经验不足稍带紧张导致大脑短路,其实也是很尴尬的,所以面试者要准备充分

面试官考察哪些点?简历是否真实

这其实是面试第一要务,面试的过程其实就是看简历是否属实的过程; 因为能到面试环节,说明这个人是符合要求的,不满足要求的早就被剔除了,如果他真的如简历描述的那样,100%会招过来,如果人人都如此,那就不需要有面试这种过程了

需要注意的是这里的真实有三层含义:

一是如实描述了自身经历,很多人只在一些大项目里做一个很小的螺丝钉,但简历里往往夸张这段经历

二是不知道自己不知道,常见于简历里各种“精通”开头的描述,因为知识体系与视野的局限,明明只是了解很浅却夸口精通,很多时候并不认为自己说的有问题,而是真的以为自己已然精通,有点井底之蛙的感觉

三是简历里的真实要与你的期望相匹配,一门技术了解到怎样的程度才算精通,很难有定论,所以这里的“真实”只能是候选人与面试官标准之间的契合,这种有主观运气成分,也许是面试官水平不够错误判断了你,也不用感到不爽,面试何尝不是种双向选择呢

技术的深度

技术的深度一向是面试官最看重的部分; 当今任何一个技术领域都非常宽广,一个人要同时掌握那么多知识并且都深入几乎不可能,那都需要拼学习效率与工作年限了。而你曾经做过的东西,正在做的东西,是绝对可以了解得更深入的,一个对技术有好奇心,有技术热情的人,都不会仅仅停留在这个东西挺好用,而是会忍不住去探究它背后的技术原理

即便不是亲自去看源码,也会花点时间了解别人整理过的经验,所以单凭考察技术上的深度,就可以考察一个人是否对技术有热情,是否有技术好奇心等等这些很多大牛认为的所谓 “优秀程序员的特征”

之前曾看到过一句话:“一个人对他所做的事情了解得越深,他就能做的越好”;放在这里再合适不过了

技术的广度

深度是有了,还需要广度吗?

我个人的理解是:深度是必要条件,广度是加分项; 同样的有技术好奇心的优秀程序员,也不会满足于仅仅局限于自己的一亩三分地,工作之余,也会想要尝试一些其它的领域和方向,因为投入问题也许不够深入,但很多领域知识你知道与不知道,对你个人知识体系的形成关系很大

比如你要实现一个功能,在你当前熟悉的技术领域上很困难或者效果不佳,在你就要放弃时你的同事告诉你,这用一个简单sql语句就可以实现啦,为什么要搞得那么麻烦?这个例子虽然举得很蹩脚,但是我想意思大家应该已经明白了

知识越有广度,头脑里的技术体系就越完备; 同样的问题,你就可以想到N个解,思考一下就得出最优解了,如果你听都没听过一些东西,就会经常说出 “这个好难搞啊”,“这根本就不可能”, 其实有的时候真是知识的局限问题,所谓的从0到1难,也是这个意思

逻辑思维能力

这也是面试官比较看重的一点; 这里并不是指那些臭名昭彰的脑经急转弯问题,而是通过交流观察,判断一个人表达观点逻辑是否清晰,回答问题是否有章法,这个很难描述,但如果你细心观察,你会发现很容易通过一些简单的交流,就可以看出一个人是否逻辑清晰

有时候你会觉得某个人表达沟通很不错,其实不是沟通的问题,是他说出去的话,经过了他大脑的条理清晰的整理,让你很容易就能明白;这种习惯不是一朝一夕就能养成的,所以面试过程中这点装不出来

另外一个人如果逻辑清晰,而且反应又敏捷,语速很快,那是大大的加分项

具体问哪些问题?

前面提到的是要重点考察的点,那么具体的Android开发,有没有一些通用的问题可以问的呢?我个人一般会从这几个角度考察候选人:

Android经验

如果不是校招,Android经验是必须的,面试官会比较喜欢问一些基础概念与技术原理,比如Activity、View、Window的理解,各LaunchMode的使用场景,View的绘制流程,Touch事件机制,Android动画的原理,Handler, Looper的理解,Android跨进程通讯的方式,Binder的理解,Android Mashup设计的理解等等

Java水平

基本上就是Effective Java那本书里提到的东西,如果你背完那本书里的问题,并且对答如流,没问题,就要你这样的。其实也会考察关于final用法,反射原理,注解原理,java编译过程,GC等一些常见问题

IT基础知识

其实就是计算机科班学生学校里学到的一些东西,在校招时这块是重点,社招会放宽,但一些基本的常识是要有的,比如不少人都不知道http的get post有啥区别,https的那个s是什么意思,讲不清进程与线程的概念,不知道二分算法是个啥东西

这些简单问题的筛选,可以过滤一些所谓野路子的程序员,是不是科班出身不重要,搞这行就得对一些基本常识有概念,不然以后怎么愉快的交流呢?

代码质量的认识

面试官所需要的是一个对代码味道有感觉的人,关于这点,看下Clean Code就够了,面试中这点其实不好考察,可以让面试者聊一聊对代码质量的认识,虽然不能排除面试者夸夸其谈,至少想法不多,只能提到命名风格这一点的人是不符合要求的,也可以在写Code的环节中观察

技术视野

比如对Android开发新技术的了解与学习,对其它流行技术领域的了解,这其实与我刚才提到的技术广度的考察有关,就我面试过程中,发现很多非互联网行业的从业人员,因为公司各种操蛋规定与公司技术氛围的原因,技术视野相当狭窄

我个人对这点深有体会,2011年我还在传统行业从事软件研发,当时的公司因为担心技术信息泄露,不让上网,相当封闭,我个人虽然自认为已在那个行业内做到业内专家的级别,但总感觉哪里不对,有一天我很兴奋的打算跟身边同事聊一聊Android的时候,发现他们居然都不知Android为何物?

2011年啊同志们,当时的震惊无法言表,深切感觉到需要作出改变了,毅然放弃多年行业积累,转战移动互联网,直到现在。时至今日,多年前的小伙伴也有很多混出了名党,开始走向人生巅峰,我也从来没有后悔当初做出的选择

技术想象力

一个优秀的技术人,如果知识的深度与广度足够,知识已成体系,那么他对于一些从未接触过的领域,也是可以做出足够合理的想象与判断

面试官在对其面试过程中如果问到一些领域面试者没有涉猎,这时候你一般可以不用过多纠缠,但如果你想借这个问题考察下他的技术想象力,可以深入下去,比如问他:“你觉得这个东西应该是什么原理呢?”,“这个酷炫的控件,如果要你来做,你会怎么实现?”

在这方面表现出色的同学无疑是有深厚基础与足够广度的人

技术习惯

好的程序员都会有好的习惯; 比如各种快捷键的熟练应用,各种命令行的掌握,一些提高开发效率的工具与习惯,碰到问题是baidu还是google,有没有做一些小工具帮助减少重复工作,工作之余有没有继续学习?有没有看什么不错的书等等

这些小细节很大程度上决定了程序员的开发效率,这也是为什么很多人说一个优秀程序员抵得上100个普通程序员,这也是重要原因之一

面试后的反馈

面试一般不止一轮,你需要给出你的反馈,多轮面试结果一起考量,减少误判的风险,反馈一般怎么写呢?以下是我的建议:

面试纪录

面试过程中的完整纪录,尽量客观评价,让其它面试官知道你回答了哪些问题,回答的怎么样,也避免了重复问题的尴尬

优点与缺点

你的主观评价,亮点有哪些,你觉得这家公司有哪些地方不够好?

面试官怎样才给通过

通过标准因人而异,每个人都有自己心中的bar, 但还是有些可直观考量的因素的:

一是岗位的要求,不同的岗位标准当然不一样,校招与设招肯定也不一样


二是岗位的紧急程度,兄弟们天天加班忙死了,赶紧找人过来帮忙吧哈哈


三是面试者的年龄,大龄程序员莫怪,一把年纪了还跟刚毕业一两年的同事一个水平,说明成长太慢,做技术的潜力有限,这个大家应该能理解


四是前面提到的做技术的深度,这个是必须的,广度也要有一些,视野不能太窄


五是要有亮点,大家在面试的过程中要注意发掘亮点,有时候面试者问题很多但有一个足够的亮点也够了,用心观察也发现不了什么亮点的,就要注意了

说了这么多,其实最重要的就是一句话,问问你自己:你现在所拥有的技术层次真的有信心在这家公司入职吗?

近段时间我这里整理了一份完整的《2022年 Android 中高级面试题汇总》希望这份系统化的技术体系对大家有一个方向参考

有需要的同学,可以顺手给我点赞评论支持一下

内容如果对大家有用的话,可以转发分享一下

获取方式:

私信发送:“面试”或“进阶”即可免费获取

《2022年 Android 中高级面试题汇总》

由于篇幅有限,仅展示部分内容

第一章 Java 基础

第一节 静态内部类和非静态内部类的比较

1.1 静态内部类和非静态内部类的区别

1.2 扩展:内部类都有哪些?

1.3 同部内部类

1.4 匿名内部类:是一种没有炎名的内部类

第二节 多态的理解与应用

2.1 多态概述

2.2 多态中成员的持点

2.3 instanceof关桩字

2.4 多态的转型

2.5 多态案例


第三节 java 方法的多态性理解

3.1 什么是java的多态

3.2 远行时多态3.3代码理解

3.4 深一点

3.5 再深一点

3.6 最后一个炼习

第四节 java中接口和选承的区别

第五节 线程池的好处,详解,单例(绝对好记)

5.1 线程池的好处

5.2 线程池的详解

5.3 线程池的单例


第二章 Android 基础

第一节 Activity 知识点(必问)

1.1 Activity 启动过程全解析

1.2 启动模式以及使用场景

1.3 onSavelnstanceStatelJBonRestorelnstar

1.4onConfigurationChanged使用以及问题解决


第二节 Fragment 知识点

2.1 Fragment的通信问题,新建Fragment为何不

2.2 为什么官方推荐Fragment.setArguments(B

2.3 Androidx下Fragment懒加载的新实现

2.4 Fragment全解析系列(一):那些年深过的

2.5 Google-Fragment 概览

2.6 Google -与其他 Fragment 通信


第三节 Service 知识点

3.1 Handle 知识点(必问)

3.2 Android 主线程阻塞处理及优化

3.3深入聊聊Android消息机制中的消息队列的

3.4深入理解MessageQueue

3.5 你真的懂Handler.postDelayed(的原理吗?

3.6 Handler.postDelayed0是如何精确延迟指成

3.7 Handler 延迟消息执行机制,会阻塞吗?

第四节Intent知识点

4.1 Android 跨进程传递大内存数据

4.2 数据存健


获取方式:

私信发送:“面试”或“进阶”即可免费获取

技术是无止境的,你需要对自己提交的每一行代码、使用的每一个工具负责,不断挖掘其底层原理,才能使自己的技术升华到更高的层面

Android 架构师之路还很漫长,与君共勉

PS:有问题欢迎指正,可以在评论区留下你的建议和感受;

欢迎大家点赞评论,觉得内容可以的话,可以转发分享一下