Android开发如何准备技术面试(含Android面试押题)

今年毋庸置疑是找工作的寒冬,每一个出来找工作的同学都是值得尊敬的。现在找工作,虽然略难,但是反过来看也会逼迫我们成为更加优秀的自己。

但是不管是旺季还是寒冬,有一些优秀的同学找工作还是挺顺利的。所以说还是得提高我们自己的硬实力。

本文主要解答这些问题,如果说你想知道以下几点,就可以看下去了

  • 当下好找工作嘛
  • 如何写简历
  • 如何挑选靠谱的公司
  • 我的经验水平能拿多少的工资
  • 问到项目中的技术难点怎么回答
  • 2021年Android面试押题
  • 如何和 HR 聊天,比如谈钱等等

一、当下好找工作嘛

想必大家现在经常能看到某某公司又裁员了,会担心是不是找不到工作了。其实总的来说虽然当下的环境确实不怎么好,但是有裁员的公司,也肯定有招人的公司,并且招人的公司一定比裁员的公司多得多。

那么再来回答这个问题「当下好不好找工作」。对于技术好的人来说,永远不会担心这个问题。但是对于技术不那么好的人来说,确实需要一些技巧才能比别人有更多的机会。比如说写一封清晰明了的简历,在面试前好好准备等等。

总的来说,机会是留给有准备的人。无论环境好与差,认真准备的你肯定会比别人有更多的机会。

二、如何写简历

平时有在做修改简历的收费服务,在公司里也会当个面试官啥的,总的来说也算看过很多简历了。但是大部分人的简历的套路都是一样的,项目用了什么技术栈,做了什么功能,总的来说就是流水账。

那么一旦你写出有别于这类套路的简历,你的简历必然会被用人方多看几眼,增加点成功率也是必然的。

一般来说我会这样建议别人写简历:

  • 全文杜绝任何的精通字眼,如果你真的精通,不需要投简历找工作了。

  • 简历控制在两页左右,不需要找什么简历模板,直接 Markdown 生成 PDF 文件,面试官不在意你的简历有多好看,他更在意的是你的简历内容。

  • 任何英文单词注意大小写,数字以及英文注意与中文之间有空格。

  • 项目中无需介绍这个项目到底有啥功能,单刀直入这个项目中最值得说的内容。比如遇到的 Bug,自己的思考等等。但是可能很多人会说,业务很简单没什么好说的或者压根没遇到什么问题。遇到这个问题的时候,首先跳脱出业务的框架,去思考其他的问题。相信每个人都写过组件,但是对于如何设计一个好的组件来说就不是每个人都能做的事情了。

  • 写项目经验最好按照这样的思路:遇到了什么问题,如何解决以及结果。

  • 假设简历上的每个技术点面试官都会问到,斟酌所有的知识点,保证都能回答。

三、如何挑选靠谱的公司

一家靠谱的公司,一定是以下几点加起来的:牛逼的核心管理层、不错的 idea、高额的融资、有前景的行业。

前两点对于求职者来说基本是黑盒,因此我们只能从后面两点来挑选公司了。

早期的融资越高,领投的公司越牛逼,那么这家公司靠谱的几率越大。因为这些公司的决策人都不是傻子,人家肯定有充足的理由才会选择相信并投钱给这家公司。

另外一个有前景的行业也是必须条件,如果你不知道啥是有前景的行业,就从与人息息相关的行业挑选吧。比如吃、住、行、教育等等。

这时候你可能会说,那我如果了解到一家公司的这些情况呢?那么「天眼查」可以完美解决你这个问题。我们可以通过这个网站详细了解到一家公司的融资、行业、竞品、法律风险、管理层、产品等等信息。

四、我的经验水平能拿多少的工资

对于这个问题,我真的很想说多少经验真的和多少工资没多大关系。

相同的一年经验,有人只能拿 10K,但是有人却能拿到 20K,原因就在于两个人的技术能力不一样。

你技术好,就能比别人多要工资;你技术一般,就只能拿少点的工资,这是一个很现实的问题。所以工资只与技术挂钩,而不是你所谓的经验。

如果只是想了解行业平均薪水,直接去看当地的企业给出的工资是多少就好了。如果觉得自己薪水不符合行业平均薪水,就勇敢的跳槽呗。

五、问到项目中的技术难点怎么回答

对于这个问题来说,面试官考察的就是你的学习能力以及解决问题的能力。

很多人遇到这个问题会很懵逼,感觉基本啥问题都谷歌解决了。当然如果你真的有遇到不是马上能通过谷歌解决的问题便是极好的,按照描述问题、如何解决问题、结果这几个步骤来回答就行了。

那么如果你觉得你的项目真的很简单,没有什么可说的话,就按照以下的几个思路来聊这个话题。比如说你之前从没接触过某个技术,你是如何去学习这个技术的,在学习的过程中遇到了什么问题,怎么解决的。比如说你写了这个项目,自己有了什么感悟、想法。

因为这道题目面试官不是说一定要听你讲出项目里到底遇到了什么难的问题,而是考察你的学习能力以及解决问题的能力。即使你没有什么干货可以说,说点自己的学习过程、挫折、想法感悟也是可以的,毕竟总比说感觉都很简单来的好。

六、2021年Android面试押题

Java相关

1.容器(HashMap、HashSet、LinkedList、ArrayList、数组等)

2.内存模型

3.垃圾回收算法(JVM)

4.垃圾回收机制和调用 System.gc()的区别?

5.类加载过程(需要多看看,重在理解,对于热修复和插件化比较重要)

6.反射

7.多线程和线程池

8.设计模式(六大基本原则、项目中常用的设计模式、手写单例等)

9.Java 四大引用

10.Java 的泛型

11.final、finally、finalize 的区别

12.接口、抽象类的区别

(Java相关答案地址)

Android 相关

1.自定义 View

2.事件拦截分发

3.解决过的一些性能问题,在项目中的实际运用

4.性能优化工具

5.性能优化 (讲讲你自己项目中做过的性能优化)

6.Http[s]请求慢的解决办法(DNS、携带数据、直接访问 IP)

7.缓存自己如何实现(LRUCache 原理)

8.图形图像相关:OpenGL ES 管线流程、EGL 的认识、Shader 相关

9.SurfaceView、TextureView、GLSurfaceView 区别及使用场景

10.动画、差值器、估值器(Android中的View动画和属性动画 - 简书、Android 动画 介绍与使用)

11.MVC、MVP、MVVM

12.Handler、ThreadLocal、AsyncTask、IntentService 原理及应用

13.Gradle(Groovy 语法、Gradle 插件开发基础)

14.热修复、插件化

15.组件化架构思路

16.系统打包流程

17.Android 有哪些存储数据的方式。

18.SharedPrefrence 源码和问题点;

20.sqlite 相关

21.如何判断一个 APP 在前台还是后台?

22.AMS 、PMS

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

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

25.为什么使用 Parcelable,好处是什么?

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

(Android相关答案地址)

源码理解

  • Glide :加载、缓存、LRU 算法 (如何自己设计一个大图加载框架) (LRUCache 原理)

  • EventBus

  • LeakCanary

  • ARouter

  • 插件化(不同插件化机制原理与流派,优缺点。局限性)

  • 热修复

  • RXJava (RxJava 的线程切换原理)

  • Retrofit (Retrofit 在 OkHttp 上做了哪些封装?动态代理和静态代理的区别,是怎么实现的)

  • OkHttp

(源码相关答案地址)

算法与数据结构

  • 时间复杂度 / 空间复杂度

  • 常用的排序算法有哪些?

  • 字符串反转

  • 链表反转(头插法)

  • 如何查找第一个只出现一次的字符(Hash查找)

  • 如何查找两个子视图的共同父视图?

  • 无序数组中的中位数(快排思想)

  • 如何给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

  • 二叉树前序、中序、后序遍历

  • 最大 K 问题

  • 广度、深度优先搜索算法

  • String 转 int。核心算法就三行代码,不过临界条件很多,除了判空,还需要注意负数、Integer 的最大最小值边界等;

  • 如何判断一个单链表有环?

  • 100 亿个单词,找出出现频率最高的单词。要求几种方案;

  • 链表每 k 位逆序;

  • 镜像二叉树;

  • 找出一个无序数组中出现超过一半次数的数字;

  • 计算二叉树的最大深度,要求非递归算法。

  • String 方式计算加法。

(算法与数据结构相关答案地址)

网络

1.网络框架对比和源码分析

  1. 网络七层协议有哪些?

  2. Http 和 Https 的区别?Https为什么更加安全?

  3. HTTPS的连接建立流程

  4. 解释一下 三次握手 和 四次挥手

  5. TCP 和 UDP的区别

  6. Cookie和Session

  7. DNS是什么?

  8. DNS解析过程

10.HTTP报文结构

11.HTTP与HTTPS的区别以及如何实现安全性

12.如何验证证书的合法性?

13.https中哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解?

14.client如何确定自己发送的消息被server收到?

15.谈谈你对WebSocket的理解

16.WebSocket与socket的区别

17.谈谈你对安卓签名的理解。

18.请解释安卓为啥要加签名机制?

19.视频加密传输

20.App 是如何沙箱化,为什么要这么做?

21.权限管理系统(底层的权限是如何进行 grant 的)?

(网络相关答案地址)

Kotlin 相关

1.从原理分析Kotlin的延迟初始化: lateinit var和by lazy

2.使用Kotlin Reified 让泛型更简单安全

3.Kotlin里的Extension Functions实现原理分析

4.Kotlin系列之顶层函数和属性

5.Kotlin 兼容 Java 遇到的最大的 “坑”

6.Kotlin 的协程用力瞥一眼

7.Kotlin 协程「挂起」的本质

8.到底什么是「非阻塞式」挂起?协程真的更轻量级吗?

9.资源混淆是如何影响到Kotlin协程的

10.Kotlin Coroutines(协程) 完全解析

11.破解 Kotlin 协程

(Kotlin相关答案地址)

Flutter相关

1.Flutter 原理与实践

2.揭秘 Flutter Hot Reload(原理篇)

3.Flutter 动态化探索

4.Flutter 如何和 Native 通信-Android 视角

5.深入理解 Flutter Platform Channel

6.Flutter Engine 编译指北

7.深入理解 Flutter 多线程

8.Flutter 状态管理 - 初探与总结

9.Flutter | 状态管理指南篇——Provider

10.深入理解Flutter应用启动

11.Flutter渲染机制—UI线程

(Flutter相关答案地址)

七、如何和 HR 聊天,比如谈钱等等

首先你面到 HR 了,说明你基本已经成为备选人之一了。这时候 HR 会和你聊很多问题,这些问题都是为了了解你的一些个人情况的。比如说性格啦、反应能力、情商等等。另外大部分公司的 HR 并没有一票否决权,面试没有成功多半是有更好的备选人而不是因为 HR 把你卡掉了。

然后说到谈钱的一个问题。首先以最少的工资招到需要的人肯定是 HR 的考核之一,所以压价是很正常的一个事情。并且上家公司的薪资也是一个很重要的参考,一般来说涨薪幅度在 30% 以上是很牛逼的事情了,通常都在 20% 左右。

你的开价一般就是 offer 的上限了,考虑到压价的情况,你可以在原本期望薪水上上浮 1K 左右,然后可以根据面试的情况来有选择性的开价。

  • 面的不错,本来想要 16K 的,那么就多要个 1-2K 没啥问题
  • 面的一般,那就报 16 K 吧
  • 面的一般或者不大好,但是又很想进这家公司,可以酌情下降 1-2K,这个主要还是看自己
  • 不怎么想去这家公司,随意开价

八、结语

我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。

首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。

更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。

找工作无非就是看三点:和什么人、做什么事、给多少钱,要给这三者在自己的心里划分一个比例。

猜你喜欢

转载自blog.csdn.net/zhireshini233/article/details/110148326