美文网首页程序员Android开发Android开发经验谈
2020秋招某大厂面试官:刷掉一批又一批的Android开发面试

2020秋招某大厂面试官:刷掉一批又一批的Android开发面试

作者: 冬日毛毛雨 | 来源:发表于2020-12-09 22:05 被阅读0次

    前言

    该文是主要讲述一下2020这一年的秋招,上半年因疫情原因,大多数人是属于失业状态在家休息,直到下半年才稳定下来,正式这样导致许多找工作人群都挤在一起。

    从今年的九月份初到十月底,我大概面试了三百多位Android程序员,但因通过率较低,同事老实劝我手下留情。可能是我面试的标准要求比较高吧!

    下面我就在这大概的讲述一下我面试人的标准,这不是一篇什么攻略文,旨在抛砖引玉,大家一起探讨如何面试更有效率。

    需要写在前面的是,“平等“和”高效”一直都是互斥的。信息从一个人传递到另一个人那里,由于表达能力和接收能力的限制,必然产生信息熵,所以花一天的时间好好了解一个人的技术实力和学习能力,自然要比一场一个小时的面试要更加的全面。但很可惜的是,我在现实中并没有那么长的时间,所以作为一个面试官最基本的任务,就是引导面试者在最有限的时间里,最大化展示出自己的能力。

    简历原则

    最近看到很多技术大牛放出来自己的简历,但就我个人而言,感觉参考意义真的不大——这些大牛不管简历写成啥样,模板用啥,哪怕是TXT格式不做排版,就光看项目内容和技术深度就足够拿到offer了,但是正常人来说并没有这种“底蕴”,看完可能只会觉得“握草牛逼啊”,然后自己写简历时候仍然一脸懵逼。

    其实我们做简历真没那么复杂,能够突出的无非是:

    • GPA、算法奖项名次、奖学金之类的学习成果等信息。
    • 工作经历:在哪里,做了什么,取得了什么成绩,解决了什么问题。有量化标准更好,比如说“降低了10%内存占用”这种。
    • 做个那些项目,在项目中负责担当个什么岗位等信息

    简述Activity(或Service,ContentProvider)的使用?

    像这样的相对开放的问题,基本上是懂多少答多深,对于这种问题我个人的评分标准是这样的:

    基本用法(Manifest配置、生命周期简述、重要API等)介绍没有错的话,至少给到总分85%
    特别有介绍到源码层面,或者运行机制之类的,会给到满分。
    如果答案中有错误的地方,会反而酌情扣分,所以基本上靠量取胜反而有更大风险,因为错误的内容也可能更多。

    这些标准中可能争议比较大的就是“答错内容扣分”这一点,但是我仍然认为这是必要的。比如对于Service,有人会写“由于也是运行在主线程,不能做任何耗时操作”,我认为这是需要扣分的,原因如下:

    “Service运行在主线程”是论据,“不能做任何耗时操作”是论点,但中间省略了论证过程,论据怎么推导出论点的?我感觉这是逻辑能力较差的一种表现。

    默认运行在应用进程的Service,可不可以指定Service的process将它定义在子进程里?Service在子进程里做耗时操作比如网络请求之类的,为何不可以呢?如果可以,为何要说“不能做任何耗时操作”呢?我个人会感觉这个面试者实际并没有使用过,只是懂得书上的理论知识。
    当然,只写一些基本用法拿到85%分的人,可能也有一些逻辑短板,也有一些技术能力不足,但像我上文说的,效率与公正无法兼得,并且隐藏自己短板也算是一种能力。

    面试注意点

    在面试的过程中,我印象最深的几点感受一定要告知大家:

    1、回答问题不要过于着急,一定要耐心等待面试官把问题说完
    2、回答问题要有逻辑、干练简洁
    3、如果面试官打断你说话,此时一定要谨慎回答,因为很有可能你回答过于繁琐且他对你当下的回答不满意
    4、一个问题不要纠结很久,尤其是让面试官感受到你在敲键盘…
    5、不会的面试题必须干脆利落的回答不会
    6、面试的时间最好控制在 30 ~ 40 分钟左右,这样互相之间的体验不会很差
    7、面试是一个挖掘面试者能力和潜力的过程
    8、面试官不是全能的,面试一定是一个互相学习的过程
    9、一定要提前准备好自己想要问的问题,最致命的是别人把你安排的明明白白结果你对别人一无所知…

    关于第 2 点还是要说明一下,很多面试者回答问题没有逻辑性,在回答之前可以先思考一下,然后告诉面试官将从 n 个方面进行讲解,首先第 1 个方面是…,其次第 2 个方面是…

    友情提示:面试的时候发现大部分的面试者普遍存在 1 和 2 两个问题。如果你的回答没有逻辑还繁琐且没有命中要点,通常面试官对你的印象会非常差。相反,如果你回答问题过于简洁,通常情况下面试官会觉得你没 Get 到他的问题点(当然会怀疑自己的表述有没有问题),一般都会追加更详细的问题描述,毕竟这是一个挖掘的过程。

    面试题解析

    一般我在面试别人前,会根据他们在简历记录的一些项目,提前准备10道左右的相关题目,检测他简历中做个那些项目的真实性。

    下面是我针对现在Android开发行业行情进行整理的Android核心知识,大家感兴趣的话可以简信回复【666】进行参考。

    第一章 Java 知识点汇总

    • JVM
      • JVM 工作流程
      • 运行时数据区(Runtime Data Area)
      • 方法指令
      • 类加载器
      • 垃圾回收 gc
        • 对象存活判断
        • 垃圾收集算法
        • 垃圾收集器
        • 内存模型与回收策略
    • Object
      • equals 方法
      • hashCode 方法
    • static
    • final
    • String、StringBuffer、StringBuilder
    • 异常处理
    • 内部类
      • 匿名内部类
    • 多态
    • 抽象和接口
    • 集合框架
      • HashMap
        • 结构图
        • HashMap 的工作原理
        • HashMap 与 HashTable 对比
      • ConcurrentHashMap
        • Base 1.7
        • Base 1.8
      • ArrayList
      • LinkedList
      • CopyOnWriteArrayList
    • 反射
    • 单例
      • 饿汉式
      • 双重检查模式
      • 静态内部类模式
    • 线程
      • 状态
      • 状态控制
    • volatile
    • synchronized
      • 根据获取的锁分类
      • 原理
    • Lock
      • 锁的分类
        • 悲观锁、乐观锁
        • 自旋锁、适应性自旋锁
        • 死锁
    • 引用类型
    • 动态代理
    • 元注解

    第二章 Android 知识点汇总

    • Activity
      • 生命周期
      • 启动模式
      • 启动过程
    • Fragment
      • 特点
      • 生命周期
      • 与Activity通信
    • Service
      • 启动过程
      • 绑定过程
      • 生命周期
      • 启用前台服务
    • BroadcastReceiver
      • 注册过程
    • ContentProvider
      • 基本使用
    • 数据存储
    • View
      • MeasureSpec
      • MotionEvent
      • VelocityTracker
      • GestureDetector
      • Scroller
      • View 的滑动
      • View 的事件分发
      • 在 Activity 中获取某个 View 的宽高
      • Draw 的基本流程
      • 自定义 View
    • 进程
      • 进程生命周期
      • 多进程
      • 进程存活
        • OOM_ADJ
        • 进程被杀情况
        • 进程保活方案
    • Parcelable 接口
      • 使用示例
      • 方法说明
      • Parcelable 与 Serializable 对比
    • IPC
      • IPC方式
      • Binder
      • AIDL 通信
      • Messenger
    • Window / WindowManager
      • Window 概念与分类
      • Window 的内部机制
      • Window 的创建过程
        • Activity 的 Window 创建过程
        • Dialog 的 Window 创建过程
        • Toast 的 Window 创建过程
    • Bitmap
      • 配置信息与压缩方式
      • 常用操作
        • 裁剪、缩放、旋转、移动
        • Bitmap与Drawable转换
        • 保存与释放
        • 图片压缩
      • BitmapFactory
        • Bitmap创建流程
        • Option类
        • 基本使用
      • 内存回收
    • 屏幕适配
      • 单位
      • 头条适配方案
      • 刘海屏适配
    • Context
    • SharedPreferences
      • 获取方式
        • getPreferences
        • getDefaultSharedPreferences
        • getSharedPreferences
      • 架构
      • apply / commit
      • 注意
    • 消息机制
      • Handler 机制
      • 工作原理
        • ThreadLocal
        • MessageQueue
        • Looper
        • Handler
    • 线程异步
      • AsyncTask
        • 基本使用
        • 工作原理
      • HandlerThread
      • IntentService
      • 线程池
    • RecyclerView 优化
    • Webview
      • 基本使用
        • WebView
        • WebSettings
        • WebViewClient
        • WebChromeClient
      • Webview 加载优化
      • 内存泄漏

    第三章 Android 扩展知识点汇总

    • ART
      • ART 功能
        • 预先 (AOT) 编译
        • 垃圾回收优化
        • 开发和调试方面的优化
      • ART GC
    • Apk 包体优化
      • Apk 组成结构
      • 整体优化
      • 资源优化
      • 代码优化
      • .arsc文件优化
      • lib目录优化
    • Hook
      • 基本流程
      • 使用示例
    • Proguard
      • 公共模板
      • 常用的自定义混淆规则
      • aar中增加独立的混淆配置
      • 检查混淆和追踪异常
    • 架构
      • MVC
      • MVP
      • MVVM
    • Jetpack
      • 架构
      • 使用示例
    • NDK 开发
      • JNI 基础
        • 数据类型
        • String 字符串函数操作
        • 常用 JNI 访问 Java 对象方法
      • NDK 开发
        • 基础开发流程
        • System.loadLibrary()
      • CMake 构建 NDK 项目
      • 常用的 Android NDK 原生 API
    • 类加载器
      • 双亲委托模式
      • DexPathList

    第四章 Android 开源库源码分析

    • LeakCanary
      • 初始化注册
      • 引用泄漏观察
      • Dump Heap
    • EventBus
      • 自定义注解
      • 注册订阅者
      • 发送事件

    第五章设计模式汇总

    • 设计模式分类
    • 面向对象六大原则
    • 工厂模式
    • 单例模式
    • 建造者模式
    • 原型模式
    • 适配器模式
    • 观察者模式
    • 代理模式
    • 责任链模式
    • 策略模式
    • 备忘录模式

    第六章计算机网络基础

    • 网络体系的分层结构
    • HTTP 相关
      • 请求报文
        • 请求行
        • 请求头
      • 响应报文
      • 常见状态码
      • 缓存机制
      • Https
      • Http 2.0
    • TCP/IP
      • 三次握手
      • 四次挥手
      • TCP 与 UDP 的区别
    • Socket
      • 使用示例
        答案解析

    第七章 常见面试算法题汇总

    • 排序
      • 比较排序
        • 冒泡排序
        • 归并排序
        • 快速排序
      • 线性排序
        • 计数排序
        • 桶排序
    • 二叉树
      • 顺序遍历
      • 层次遍历
      • 左右翻转
      • 最大值
      • 最大深度
      • 最小深度
      • 平衡二叉树
    • 链表
      • 删除节点
      • 翻转链表
      • 中间元素
      • 判断是否为循环链表
      • 合并两个已排序链表
      • 链表排序
      • 删除倒数第N个节点
      • 两个链表是否相交
    • 栈 / 队列
      • 带最小值操作的栈
      • 有效括号
      • 用栈实现队列
      • 逆波兰表达式求值
    • 二分
      • 二分搜索
      • X的平方根
    • 哈希表
      • 两数之和
      • 连续数组
      • 最长无重复字符的子串
      • 最多点在一条直线上
    • 堆 / 优先队列
      • 前K大的数
      • 前K大的数II
      • 第K大的数
    • 二叉搜索树
      • 验证二叉搜索树
      • 第K小的元素
    • 数组 / 双指针
      • 加一
      • 删除元素
      • 删除排序数组中的重复数字
      • 我的日程安排表 I
      • 合并排序数组
    • 贪心
      • 买卖股票的最佳时机
      • 买卖股票的最佳时机 II
      • 最大子数组
      • 主元素
    • 字符串处理
      • 生成括号
      • Excel表列标题
      • 翻转游戏
      • 翻转字符串中的单词
      • 转换字符串到整数
      • 最长公共前缀
      • 回文数
    • 动态规划
      • 单词拆分
      • 爬楼梯
      • 打劫房屋
      • 编辑距离
      • 乘积最大子序列
    • 矩阵
      • 螺旋矩阵
      • 判断数独是否合法
      • 旋转图像
    • 二进制 / 位运算
      • 落单的数
      • 格雷编码
    • 其他
      • 反转整数
      • LRU缓存策略
        答案解析

    第八章 Kotlin 相关知识点

    • from-java-to-kotlin

    • kotlin_tips

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

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

    • Kotlin里的Extension Functions实现原理分析

    • Kotlin系列之顶层函数和属性

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

    • Kotlin 的协程用力瞥一眼

    • Kotlin 协程「挂起」的本质

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

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

    • Kotlin Coroutines(协程) 完全解析

    第九章 Flutter 相关知识点汇总

    • Flutter原理与实践

    • 揭秘Flutter Hot Reload(原理篇)

    • Flutter 动态化探索

    • Flutter如何和Native通信-Android视角

    • 深入理解Flutter Platform Channel

    • Flutter Engine 编译指北

    • Flutter Engine 线程模型

    • 深入理解Flutter多线程

    • Flutter状态管理 - 初探与总结

    • Flutter | 状态管理指南篇——Provider

    • 深入理解Flutter应用启动

    • Flutter渲染机制—UI线程

    • Flutter渲染机制—GPU线程

    • 深入理解Flutter应用启动

    • 深入理解setState更新机制

    • 深入理解Flutter消息机制

    • 深入理解Flutter动画原理

    • Dart虚拟机运行原理

    • 源码解读Flutter tools机制

    • 源码解读Flutter run机制

    上面的资源已整理为PDF文档,上传至GitHub,大家可以点击查看。

    最后希望大家能够在面试中能够一帆风顺,拿到自己心仪的Offer。

    相关文章

      网友评论

        本文标题:2020秋招某大厂面试官:刷掉一批又一批的Android开发面试

        本文链接:https://www.haomeiwen.com/subject/oqdkgktx.html