阿里面试官现身说法:刷了一批又一批,有些话不得不对你们说

序言

本文主要介绍校招,疫情原因今年的春招持续的时间拉长了,截止到目前我已经面试超过一百位应届生,批改过超过150份笔试的试卷,因为通过率较低,我也被同事吐槽许多次让我“手下留情”。今天我就想聊一聊,我自己的面试标准。这不是一篇什么攻略文,旨在抛砖引玉,大家一起探讨如何面试更有效率。

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


阿里面试官现身说法:刷了一批又一批,有些话不得不对你们说

简历原则

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

GPA、算法奖项名次、奖学金之类的信息等。实习经历:在哪里,做了什么,取得了什么成绩,解决了什么问题。有量化标准更好,比如说“降低了10%内存占用”这种。个人项目、Github等

笔试阅卷原则

很多人好奇,笔试不是都固定答案吗?那有啥可原则不原则的?

是的,有些题是有固定答案,但也有一些问题答案相对开放。比如说这样一个常见的#### 笔试题

简述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 到他的问题点(当然会怀疑自己的表述有没有问题),一般都会追加更详细的问题描述,毕竟这是一个挖掘的过程。

面试题解析

一般我在面试开始前,会根据应聘者的简历提前准备 8 道左右的面试题(在面试的过程中可能会有调整)。

接下来我会重点讲解一些面试题,面试题解答思路(可从答案解析PDF中找到答案),供大家参考。

第一章 Java 知识点汇总

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

答案解析

阿里面试官现身说法:刷了一批又一批,有些话不得不对你们说

第一章Java知识点汇总

2020年Android开发最新全套面试题答案解析 关注+转发+私信**学习**,前往领取!

第二章 Android 知识点汇总

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

答案解析

阿里面试官现身说法:刷了一批又一批,有些话不得不对你们说

第二章Android知识点汇总

第三章 Android 扩展知识点汇总

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

第三章 Android 扩展知识点汇总

2020年Android开发最新全套面试题答案解析 关注+转发+私信**学习**,前往领取!

第四章 Android 开源库源码分析

  • LeakCanary初始化注册引用泄漏观察Dump Heap
  • EventBus自定义注解注册订阅者发送事件
阿里面试官现身说法:刷了一批又一批,有些话不得不对你们说

第四章 Android 开源库源码分析

第五章设计模式汇总

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

答案解析

阿里面试官现身说法:刷了一批又一批,有些话不得不对你们说

第五章设计模式汇总

第六章计算机网络基础

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

答案解析

阿里面试官现身说法:刷了一批又一批,有些话不得不对你们说

第六章计算机网络基础

2020年Android开发最新全套面试题答案解析 关注+转发+私信**学习**,前往领取!

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

  • 排序比较排序冒泡排序归并排序快速排序线性排序计数排序桶排序
  • 二叉树顺序遍历层次遍历左右翻转最大值最大深度最小深度平衡二叉树
  • 链表删除节点翻转链表中间元素判断是否为循环链表合并两个已排序链表链表排序删除倒数第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(协程) 完全解析

答案解析

阿里面试官现身说法:刷了一批又一批,有些话不得不对你们说

第八章 Kotlin 相关知识点

第九章 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机制

答案解析

阿里面试官现身说法:刷了一批又一批,有些话不得不对你们说

第九章 Flutter 相关知识点汇总

2020年Android开发最新全套面试题答案解析 关注+转发+私信**学习**,前往领取!

最后

题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等录播视频免费分享出来。

【Android学习PDF+学习视频+面试文档+知识点笔记】关注+转发+私信**学习**,前往免费领取!

希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展~


分享到:


相關文章: