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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 阿里

序言

本文主要介绍校招,疫情原因今年的春招持续的时间拉长了,截止到目前我已经面试超过一百位应届生,批改过超过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 知识点汇总

  • 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

    • 锁的分类

      • 悲观锁、乐观锁
      • 自旋锁、适应性自旋锁
      • 死锁
  • 引用类型
  • 动态代理
  • 元注解

答案解析

2020年Android开发最新全套面试题答案解析

第二章 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

2020年Android开发最新全套面试题答案解析

第四章 Android 开源库源码分析

  • LeakCanary

    • 初始化注册
    • 引用泄漏观察
    • Dump Heap
  • EventBus

    • 自定义注解
    • 注册订阅者
    • 发送事件

第五章设计模式汇总

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

答案解析

第六章计算机网络基础

  • 网络体系的分层结构
  • HTTP 相关

    • 请求报文

      • 请求行
      • 请求头
    • 响应报文
    • 常见状态码
    • 缓存机制
    • Https
    • Http 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(协程) 完全解析

答案解析

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

答案解析

2020年Android开发最新全套面试题答案解析

最后

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

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等录播视频免费分享出来。
[Android学习PDF+学习视频+面试文档+知识点笔记] 点击 https://shimo.im/docs/Q6V8xPVxHpkrtRtD 即可免费领取!
希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展~

相关文章
|
7月前
|
Python 开发工具
2024年Python最全使用Python实现音频双通道分离,2024年最新阿里p7面试难度
2024年Python最全使用Python实现音频双通道分离,2024年最新阿里p7面试难度
2024年Python最全使用Python实现音频双通道分离,2024年最新阿里p7面试难度
|
2月前
|
存储 关系型数据库 MySQL
阿里面试:为什么要索引?什么是MySQL索引?底层结构是什么?
尼恩是一位资深架构师,他在自己的读者交流群中分享了关于MySQL索引的重要知识点。索引是帮助MySQL高效获取数据的数据结构,主要作用包括显著提升查询速度、降低磁盘I/O次数、优化排序与分组操作以及提升复杂查询的性能。MySQL支持多种索引类型,如主键索引、唯一索引、普通索引、全文索引和空间数据索引。索引的底层数据结构主要是B+树,它能够有效支持范围查询和顺序遍历,同时保持高效的插入、删除和查找性能。尼恩还强调了索引的优缺点,并提供了多个面试题及其解答,帮助读者在面试中脱颖而出。相关资料可在公众号【技术自由圈】获取。
|
16天前
|
SQL 关系型数据库 MySQL
阿里面试:1000万级大表, 如何 加索引?
45岁老架构师尼恩在其读者交流群中分享了如何在生产环境中给大表加索引的方法。文章详细介绍了两种索引构建方式:在线模式(Online DDL)和离线模式(Offline DDL),并深入探讨了 MySQL 5.6.7 之前的“影子策略”和 pt-online-schema-change 方案,以及 MySQL 5.6.7 之后的内部 Online DDL 特性。通过这些方法,可以有效地减少 DDL 操作对业务的影响,确保数据的一致性和完整性。尼恩还提供了大量面试题和解决方案,帮助读者在面试中充分展示技术实力。
|
2月前
|
消息中间件 存储 canal
阿里面试:canal+MQ,会有乱序的问题吗?
本文详细探讨了在阿里面试中常见的问题——“canal+MQ,会有乱序的问题吗?”以及如何保证RocketMQ消息有序。文章首先介绍了消息有序的基本概念,包括全局有序和局部有序,并分析了RocketMQ中实现消息有序的方法。接着,针对canal+MQ的场景,讨论了如何通过配置`canal.mq.partitionsNum`和`canal.mq.partitionHash`来保证数据同步的有序性。最后,提供了多个与MQ相关的面试题及解决方案,帮助读者更好地准备面试,提升技术水平。
阿里面试:canal+MQ,会有乱序的问题吗?
|
7月前
|
机器学习/深度学习 Python 算法
最新【Python 百练成钢】时间调整、二进制数、回文素数、字母距离(1),2024年最新2024年阿里Python岗面试必问
最新【Python 百练成钢】时间调整、二进制数、回文素数、字母距离(1),2024年最新2024年阿里Python岗面试必问
最新【Python 百练成钢】时间调整、二进制数、回文素数、字母距离(1),2024年最新2024年阿里Python岗面试必问
|
2月前
|
消息中间件 架构师 Java
阿里面试:秒杀的分布式事务, 是如何设计的?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试阿里、滴滴、极兔等一线互联网企业时,遇到了许多关于分布式事务的重要面试题。为了帮助大家更好地应对这些面试题,尼恩进行了系统化的梳理,详细介绍了Seata和RocketMQ事务消息的结合,以及如何实现强弱结合型事务。文章还提供了分布式事务的标准面试答案,并推荐了《尼恩Java面试宝典PDF》等资源,帮助大家在面试中脱颖而出。
|
2月前
|
SQL 关系型数据库 MySQL
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
尼恩,一位40岁的资深架构师,通过其丰富的经验和深厚的技術功底,为众多读者提供了宝贵的面试指导和技术分享。在他的读者交流群中,许多小伙伴获得了来自一线互联网企业的面试机会,并成功应对了诸如事务ACID特性实现、MVCC等相关面试题。尼恩特别整理了这些常见面试题的系统化解答,形成了《MVCC 学习圣经:一次穿透MYSQL MVCC》PDF文档,旨在帮助大家在面试中展示出扎实的技术功底,提高面试成功率。此外,他还编写了《尼恩Java面试宝典》等资料,涵盖了大量面试题和答案,帮助读者全面提升技术面试的表现。这些资料不仅内容详实,而且持续更新,是求职者备战技术面试的宝贵资源。
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
|
2月前
|
Kubernetes 架构师 算法
阿里面试:全国14亿人,统计出重名最多的前100个姓名
文章介绍了如何解决“从全国14亿人的数据中统计出重名人数最多的前100位姓名”的面试题,详细分析了多种数据结构的优缺点,最终推荐使用前缀树(Trie)+小顶堆的组合。文章还提供了具体的Java代码实现,并讨论了在内存受限情况下的解决方案,强调了TOP N问题的典型解题思路。最后,鼓励读者通过系统化学习《尼恩Java面试宝典》提升面试技巧。
阿里面试:全国14亿人,统计出重名最多的前100个姓名
|
2月前
|
存储 缓存 NoSQL
阿里面试题:缓存的一些常见的坑,你遇到过哪些,怎么解决的?
阿里面试题:缓存的一些常见的坑,你遇到过哪些,怎么解决的?
|
3月前
|
缓存 监控 NoSQL
阿里面试让聊一聊Redis 的内存淘汰(驱逐)策略
大家好,我是 V 哥。粉丝小 A 面试阿里时被问到 Redis 的内存淘汰策略问题,特此整理了一份详细笔记供参考。Redis 的内存淘汰策略决定了在内存达到上限时如何移除数据。希望这份笔记对你有所帮助!欢迎关注“威哥爱编程”,一起学习与成长。