当前位置:首页 » 《休闲阅读》 » 正文

我“精通”Android!面试官问了3道题,让我当场社死!不说了,回去改简历了!_粉丝交流群:1087084956

6 人参与  2022年02月12日 17:40  分类 : 《休闲阅读》  评论

点击全文阅读


前言

最近有很多小伙伴私信我,说想趁着秋招准备跳槽,让我分享一下关于面试方面的文章

好吧,今天就如君所愿,这篇文章为你而写。

首先,你们要明白,关于面试每个公司都不一样,甚至同一家公司不同的面试官也不一样,没有一个统一的技巧或者面试流程教你们,但是对于面试是有一些通用的原则的,这些年我大小也面试过有上百人,所以姑且以一个面试官的角度来告诉你们应聘者哪些比较重要!

关于简历

简历重点是突出自我介绍、擅长技能、项目经验

自我介绍要做到一句话就能表述清楚自己的优势,比如:学习能力(短时间熟练掌握技能)、个人履历(BAT背景优势)、积极努力(个人推动什么项目等)。

擅长技能: 专业技能的描述词无非就那么几种:精通、熟练、熟悉、了解。

精通感觉一般还是不要写,除非你在某个技术点上真的有足够的把握,真正能做到精通一门语言、一个框架这才是精通。熟悉、熟练居多、精通是典型的金字塔顶部。总之,简历不要过于突出精通项数,而是突出精通的领域。

项目经验: 突出自己的王牌项目,最有技术含量、挑战和帮助最大一个项目讲就足够了,面试的过程中面试官也会重点让你描述这个擅长的项目,提前模拟这个项目的讲解顺序和重点,而不是临场讲解。

履历不要造假

这里首先强调大家一点,就是大部分靠谱点的公司都会有背调环节,比如你之前的教育经历,工作经历,薪资水平,离职原因等等这些千万不要造假,一旦发现有造假的,肯定不会被录取。而且如 BAT 这类大公司,甚至可能会被拉黑,永久进入黑名单。

所以简历填的各种信息请一定保证真实,当然我见过有不少毕业一年的同学为了提高自己的工作经验,写成2年,因为把实习经验也算上,关于这点可能不算造假,但是严格来说也有嫌疑,有些企业可能会在乎,有些不会在乎,这个因人而异,如果觉得自己能力确实很强,但是担心自己因为工作经验不够被刷掉,不妨是一种手段,但是这里不建议这样做。

基本素质

大部分企业招人都需要面试这个环节,那是因为只有面对面的交谈,才能看出一个人的基本素质。所以在交谈的过程中基本素质这个是默认的指标。这包括哪些呢?着装言谈,态度积极乐观,对待技术要谦逊,不要太浮夸,这点其实大部分人都没问题。

但是我见到过有些对前公司特别抱怨,但是自己又没有在前公司付诸过行动去尝试改变。

也见过对技术特别自信的,对没有接触过的技术或者知识很蔑视,就给你回复个这技术花点时间学习下不就ok了么?

那么这个世界上有什么是花时间学习不了的东西么?

还见过来面试的,但是对我们的产品不了解或者对整个公司都不了解的,这样的人,就属于基本素质不过关,不够职业。

打实基础

根据招聘岗位的不同这个方面有所差别,一般是针对 Android 中级以下的人会问一些基础,对于高级 Android 工程师岗位不会问,而直接聊项目,聊产品。

这方面的基础包括 Java 和 Android 的基础

  • 比如 ArrayList 和 LinkedList 的区别
  • Java 的一些线程用法
  • Java 的 GC 原理等等

这部分基础网上一大堆关于 Java 的基础面试题,自行搜索就好,但是大多只考Java SE,涉及到 Java EE 方面的知识毕竟跟 Android 开发没多大关系,可以忽略。然后就是 Android 基础

  • 如四大组件的具体用法
  • 如 Activity、Fragment 的生命周期与四种启动模式
  • Android 动画
  • View 的绘制流程
  • Sqlite 相关
  • 图片加载机制
  • 网络调用
  • 等…

关于 Android 方面的基础面试题网上也一大堆,在文末我也会分享一份我最新整理的大厂Android岗面试题集含解析,这里就不详细罗列了。

深入知识点

如果你面试的是初级岗位,那么基础知识是肯定要问的,如果你要找的是实习岗位,那么基本上只要基础够扎实就差不多了。

但是大部分公司都不只问基础知识的,会配合问一些深入点的问题考察下你技术的深度,知道你大概的水平高度。

而深入点的知识对于 Java 如注解原理、反射原理、Java 并发等,最重要的是基本上都会问到设计模式,这个几乎是必问, Effective Java 被认为是进阶必备的书籍,如果把这本书看完了那么对于一些面试问的设计模式也基本不是问题。

对于 Android 深入的点会问一些自定义组件、性能优化,屏幕适配,IPC、Binder的理解,插件化,常用开源库以及原理等等。

需要注意的是,深入的知识点不可能你每个问题都能答对,因为面试官也没奢望问的你都会,如果你是应聘的初级岗位,那么我起码知道你的技术深度到哪里,因为技术同岗位的职位也会选择最优的,如果对于中高级岗位,那么这些深入的知识点就要求高点,起码的70%、80%的知识点都知道或者熟悉吧。

项目经验

俗话说「术业有专攻」,对于我们来说,虽然都是做的 Android 开发,但是不同的方向,意味着每个人擅长的技术领域也不一样。包括我也一样,我很多领域也没接触过,如果我只问你我擅长的领域那显然是不公平的,所以大部分面试官都会结合你的项目经验去聊。

其实大部分一些固定的知识点都能答出来,区别就在于聊项目经验这块,这块可能占整个面试过程的70%以上。

而大部分聊的比较深入点的知识都是围绕你的项目经验来问,至于这个项目是不是你亲自做的,一聊就能知道。

所以如果这个项目是你伪造的,或者是你糊弄过去的,那么面试官一聊就会立马露馅,因为大部分面试官会针对你项目的点去一步步深入下去,以一个对话来举个例子:

我先开始:

  • 「这个项目你主要负责哪部分?」

  • 「图片加载是我主要负责的」

  • 「图片加载是你自己写的么?」

  • 「不是,用的第三方开源项目」

  • 「用的什么?」

  • 「Universal Image Loader」

  • 「恩,那说说你为什么要用它?」

  • 「人家封装的好,使用起来方便」

  • 「那你看过他的源码么?知不知道原理?」

  • 「源码…看过一点」(其实我只是随便一问,但是这里支支吾吾基本就判断他撒谎)

  • 「那说下他的缓存机制?」

  • 「二级缓存嘛,硬盘缓存和内存缓存」

  • 「恩,那硬盘缓存跟内存缓存他们的具体算法是怎样实现的?」

  • 「这个…这个没怎么看,知道有个LRUCache」

  • 「那你看过他什么源码?」

  • 「其实这个项目很早之前看的了,有点忘记了,现在项目都用 Picasso 了」

  • 「那好,那 Picasso 跟 UIL 有什么区别?为什么要换UIL?」

  • 「UIL项目作者不维护了,所以准备换到Picasso…」

  • 「为什么选择Picasso?」

  • 「听别人都说他好,就用了,还有最近 Facebook 还出了个 Fresco ,好像比 Picasso 要好」

  • 「Fresco 跟 Picasso 比好在哪里?原理有什么不同?」

  • 「这个还没时间研究…」

  • 「那最近在研究什么?」

  • 「最近在研究 Retrofit 」

  • 「有在项目中使用么?」

  • 「恩,用起来很方便,比 OkHttp 方便多了」

  • 「Retrofit 跟 OkHttp 的关系是什么?原理上有什么不同?」

  • 「他们都是 Square 公司开源的,在 Retrofit 上可以使用 OkHttp,不过 Retrofit 是基于注解的」

  • 「Retrofit的注解是编译前还是编译后?」

  • 「…」

  • 「看过 Retrofit 的源码么?」

  • 「哦,没有…」(这下聪明了,如果他说看过那我还会接着问下去的,说没有那接下来换个话题)

以上的对话是还原了很多面试的真实场景,其中就是想告诉大家两点:

面试官会结合你的项目经验来问你问题,而不是凭空的就问你没做过或者没接触过的领域,如果是你真实脚踏实地做过的项目,不出意外都能答出来;

不会或者不擅长的领域不要提,因为大部分面试官会抓住你提到的领域继续深入下去,会就是会,不会就直接说不会,不要企图蒙混过关,这只会减少你的印象分。

另外,回答的时候如果想要更多的延伸下来体现自己的技术水平,尽量多往你擅长的方向延伸,比如你不懂Freso,那就尽量别主动提,除非面试官主动问你。

总之,项目经验这块是大头,如果你是项目的主程,甚至一个人单枪匹马做的这个项目,那么项目中遇到的问题,解决方法以及技术选型,代码出现的问题等你都会很有印象,这些在面试的过程中都会被问到的,如果是真实的项目经历,这部分完全不是问题。

其他

当然除了根据你的项目经验之外,大部分面试官都会问一些你可能从没基础过的领域,比如问你一些 Service保活、JNI 甚至还会问你一些跟 Android 无关的后端技术,这些你回答不出来不影响大局,毕竟总会有你没接触的领域,这些问题面试官主要是想看下你技术的广度,看下你知识面的广度,答出来了会锦上添花,给你加分,但是答不上,并不会给你减分。

除以上之外,还有代码质量与重构、版本控制Git、是否参与产品、自己未来的规划等可能都会涉及,但是这些都不是硬性条件,综合起来,之前这篇文章有介绍 ,面试时企业最看中你什么能力?,企业最关心的三种能力无外乎「学习能力」、「解决问题的能力」、「团队协作能力」,基础知识体现了你基本的学习能力过不过关,项目经验体现了你解决问题的能力,这个项目如果不是你单枪匹马的话,那么这中间的过程以及版本控制Git的使用等也会体现你的团队协作能力。

分享

花了1个月的时间,整理了一份2021年各大厂Android岗面试题集,共1599页的pdf文档。内容涵盖::Java基础部分、Android部分、数据结构与算法部分、常用的开源库部分、计算机网络认识部分。由于篇幅原因,就不全部展示了,给大家局部内容截图展示下:有需要的朋友可以点击下方卡片直达

比如:比如以JVM为例;

  • Java 类加载过程?
  • 描述一下JVM 加载 Class文件的原理机制?
  • Java 内存分配
  • GC 是什么? 为什么要有GC?
  • 如何判断一个对象是否存活?(或者 GC 对象的判定方法)
  • 垃圾回收的优点和原理。并考虑 2 种回收机制
  • 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
  • Java 中会存在内存泄漏吗,请简单描述

image

Android面试笔记(组件+View+线程)

以Android四大组件为例

  • 说下Activity的生命周期?
  • onStart()和onResume()/onPause()和onStop()的区别?
  • Activity A启动另一个Activity B会回调哪些方法?如果Activity B是完全透明呢?如果启动的是一个Dialog呢?
  • 谈谈onSaveInstanceState()方法?何时会调用?
  • onSaveInstanceState()与onPause()的区别?
  • 如何避免配置改变时Activity重建?
  • 优先级低的Activity在内存不足被回收后怎样做可以恢复到销毁前状态?
  • 说下Activity的四种启动模式?(有时会出个实际问题来分析返回栈中Activity的情况)
  • 谈谈singleTop和singleTask的区别以及应用场景

image

Android面试笔记(Binder+Handler+Bitmap)

以binder为例

  • Binder的定向制导,如何找到目标Binder,唤起进程或者线程
  • Binder中的红黑树,为什么会有两棵binder_ref红黑树
  • Binder一次拷贝原理
  • Binder线程、Binder主线程、Client请求线程的概念与区别
  • Binder线程的睡眠与唤醒(请求线程睡在哪个等待队列上,唤醒目标端哪个队列上的线程)
  • Binder协议中BC与BR的区别
  • Binder在传输数据的时候是如何层层封装的–不同层次使用的数据结构(命令的封装)
  • Binder驱动传递数据的释放(释放时机)
  • 一个简单的Binder通信C/S模型

image

image.png

Android面试笔记(RecyclerView+Webview)

以RecyclerView为例

  • 请说一下RecyclerView?adapter的作用是什么,几个方法是做什么用的?如何理解adapter订阅者模式?
  • RecyclerView绘制原理如何理解?性能优化本质是什么?RecyclerView绘制原理过程大概是怎样的?
  • RecyclerView常见的优化有哪些?实际开发中都是怎么做的,优化前后对比性能上有何提升?
  • 如何解决RecyclerView嵌套RecyclerView条目自动上滚的Bug?如何解决ScrollView嵌套RecyclerView滑动冲突?
  • RecyclerView的Recyler是如何实现ViewHolder的缓存?如何理解RecyclerView三级缓存是如何实现的?
  • RecyclerView源码分析

image

image

Android面试笔记(架构篇)

image

Android面试笔记(Jetpack篇)

image

Android面试笔记(NDK开发篇)

image

对于程序员来说,一定要提前做好复习规划、认真刷题,在学习中不断提升自己,请记住,从来都是只是我们去适应环境,而不是环境来适应我们!

最后,需要这份Android进阶突击宝典(PDF版)的朋友,点击下方卡片直达!

image


点击全文阅读


本文链接:http://zhangshiyu.com/post/34628.html

项目  面试  都会  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1