AI智能
改变未来

阿里钉钉Android实习面试也太太太太难了吧,对算法的要求堪比字节

本人研究生在读,在2月26日找了师兄内推阿里钉钉团队,28号接到了约1面的电话。幸好我提前准备了一个多月的样子,刷面试题、刷LeetCode(面了之后才觉得自己刷少了),对于我这样一个实习生来说题目还是有些偏难,不过在4月20号终于拿到意向书了,听内推人说阿里实习面试没有rank,可能单纯就是流程比较慢,漫长的等待和面试还是值得的呀。

钉钉1面,3月1日(电话面试,1个小时)

  1. 本科、研究生学过什么跟计算机相关的课?

  2. tcp、http协议相关;http1.1和2.0区别

  3. 堆排序的过程

  4. Java单例有几种方式

  5. 静态方法同步和普通方法同步的区别

  6. 线程池7大参数、工作原理

  7. 点击手机桌面应用图标后发生了什么

  8. View三大流程说了一下,流式布局FlowLayout怎么实现的

  9. retrofit原理,看过okhttp源码,讲了一下okhttp的工作原理(分发器、拦截器,讲了细节)

  10. 聊了项目(讲了好久),几个方面如下:

(1)项目中用了kotlin协程,于是问了协程的相关理念,面试官可能觉得说的不太全,就给补充了一下。 然后说协程这样的新技术国外有人用,国内用的很少(因为使用协程会改变老项目原有网络架构,对于新项目可以使用,想要取代老项目比较困难)。

(2)如果用户反应app有问题,该怎么解决?回答网络抓包,面试官说大型项目不可能通过抓包来找问题,后来经过暗示,正确做法应该是生成日志文件并提交到服务器。

(3)聊了项目中登录相关的业务怎么实现的(将服务器响应的token持久化并添加到请求头)。

  1. 提问环节。问了面试官kotlin在企业应用中是否有用到,面试官说由于Java和kotlin并不冲突,因此在项目中是共存的。

第二天下午接到了约2面的电话,就约在当天晚上

钉钉2面,3月2日(电话面试,1个小时)

  1. 聊了研究生、本科阶段得过哪些奖,做过哪些项目或者参加过哪些比赛。具体问了本科参加过的一个水中机器人的比赛(stm32单片机做的),怎么识别水中的路线之类的一些细节;又问了简历中的一个医疗机器人的项目(遇到了哪些问题、只是实验室做着玩还是准备用在现实生活中);又问了参加过的数学竞赛,这个竞赛考察了什么能力等等。

  2. 问设计模式,Android源码或者第三方开源框架应用设计模式举例?(说了okhttp拦截器责任链模式)
    自己的项目有没有用设计模式?(retrofit单例,用的kotlin的object关键字实现)

  3. Android源码中你认为有哪些方面设计的很优秀的地方?(说了Android view体系)

  4. 聊kotlin,kotlin相比于Java有哪些优势、具体有哪些特性、语法糖之类的

  5. 谈谈对mvvm、mvc架构的理解,为什么你要在项目中使用mvvm?(当然是Google推荐使用mvvm)

  6. 聊对工作、学习方面的态度,应该具备什么能力等等

  7. 三道算法题(说思路):
    (1)二叉树的最近公共祖先(只想出来一种比较笨的方法)
    (2)遍历二叉树的第k层节点(递归迭代都讲了)
    (3)1f24f给一个中文字符串“一万两千八百一十一”(只是个例子),输出这个字符串对应的数值(没想出来)

  8. 提问环节,问了部门的氛围如何之类的

二面之后参加了阿里的第一次笔试,两道力扣hard题,血难,加上我之前没练过ACM输入输出,最后一道也没过0分

(1)力扣1411:网格图涂色的方案数

(2)力扣815:公交路线

笔试之后心态崩了,觉得0分应该进不了阿里了,没想到过了两周二面的面试官给打了个电话,说前两面的面试成绩挺好,可以再给一个机会,用阿里伯乐平台出了4道题(其实是前两道有点难,第一道贪心算法,第二道工厂模式+策略模式+多线程都不会),才又出了后面两道简单的算法题,一个反转字符串中的单词,一个求链表倒数第k个节点,这俩写出来了。一周之后接到了3面的电话。

钉钉3面,3月24日(电话面试,40分钟)

  1. 自我介绍

  2. 聊项目,mvc、mvp和mvvm架构各自的特点;在项目中最具有挑战的是什么?项目收获到了什么?

  3. 算法题:给两个字符数组,举例:{h,e,l,l,o, ,w,o,r,l,d}和{e,o},如果第一个数组中存在第二个数组中的元素则去掉,后面的元素往前顺移,结果为:{h,l,l, ,w, r,l,d}。要求时间复杂度为O(n),空间复杂度为O(1)。

  4. 你认为什么样的人可以称之为技术大佬?如果只有30分钟,你会依据什么来判断一个人是不是大佬?你认为自己身边最厉害的技术大佬是谁?他为什么会成为大佬?你愿不愿意推荐他到我们顶顶团队(我说他投了蚂蚁,面试官说他做了错误的选择…)?如果让你在半年之内达到他的水平,你的学习规划是什么?你会不会向他请教学习方法?

  5. 反问:

(1)大厂对新技术的态度是怎样的?
(2)鸿蒙会不会取代Android?Android的前景怎样?面试官先问了我的观点,后来说了自己的观点:不会。
为什么不会?这个要自己查找最近几年出现的智能手机系统,它们为什么没有Android和iOS成功,从中找答案。

钉钉HR面,3月30日(钉钉视频面试,20分钟)

  1. 自我介绍,开了共享屏幕现场给HR展示了之前的一个项目

  2. 你的项目UI界面是自己设计的吗?

  3. 你对未来的规划是什么?

  4. 有没有投别的大厂?

  5. 大厂有很多,为什么要投阿里?为什么要投钉钉部门?

  6. 你对互联网行业加班现状怎么看?你对加班的态度怎样?

提问环节:

(1)实习生待遇怎样?

(2)转正率高不高?(阿里实习期间如果表现正常基本都能转正,除非自己不想转正)

(3)加班情况怎样?(除了大版本更新,平时不会像拼多多那么肝,一般晚上九点就清场了,周末基本也不用加班)

面试经验总结

  • 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你 的简历来问的;

  • 注重计算机基础。对自己投递岗位需要的技能足够熟练,对其他岗位需要的知识也要有所了解。

  • 注重算法。很多人都没有意识到算法的重要性,国外的企业都在问算法题,国内大厂算法现在也是必不可少的,算是行业风口,掌握算法的人将拿到更多的机会。

  • 关注技术视野。技术视野是大家容易忽略的一个点,包括深度和广度,包括阿里在内的很多大厂面试都很看重这个。有些人面试答得很好,却给面试官留下一个视野狭窄的印象。

  • 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试 之前好好回顾一下自己所做的项目;

  • 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是 如何使用的;

  • 建议提前了解一下自己想要面试的公司的价值观,判断一下自己究竟是否适合这个公司。

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、 丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

另外,希望学弟学妹早有规划,不妨正式工作前来阿里实习多看看。如果你觉得自己目前的硬实力又不到,我觉得还是有必要去努力一下的,技术能力的高低能决定你走多远,平台的高低,能决定你的高度。

面试官通常会问一些开放性的问题,对你的思维拓展能力、多方位的思考能力也是一种考验

永远不要打无准备之仗!早做准备,多做准备!

下面分享一下我之前刷过的面试题以及算法资料,希望能帮助到有心在技术这条道路上一路走到黑的朋友!

Java部分

  • 操作系统相关
  • JDK&JVM&JRE
  • 面向过程 & 面向对象
  • 八大基本数据类型&引用类型
  • 数组
  • Java异常
  • 集合(容器)
  • 线程
  • 泛型
  • 反射
  • 注解
  • Socket编程
  • 设计模式
  • JVM相关

Android部分

Activity

  • 典型情况下的Activity生命周期?
  • 异常情况下的Activity的生命周期 & 数据如何保存和恢复?
  • 从Activity A跳转到Activity B之后,然后再点击back建之后,它们的生命周期调用流程是什么?
  • 如何统计Activity的工作时间?
  • Activity的启动模式 & 使用场景
  • 如何在任意位置关掉应用所有Activity & 如何在任意位置关掉指定的Activity?
  • Activity的启动流程(从源码角度解析)?
  • Activity任务栈是什么?在项目中有用到它吗?说给我听听

BroadcastReceiver

  • 广播是什么?
  • 广播的注册方式有哪些?
  • 广播的分类 & 特性 & 使用场景?

ContentProvider

  • 什么是内容提供者?
  • 说说如何创建自己应用的内容提供者 & 使用场景
  • 说说ContentProvider的原理
  • ContentProvider,ContentResolver,ContentObserver之间的关系
  • 说说ContentProvider的权限管理

Service

  • 什么是Service?
  • 说说Service的生命周期
  • Service和Thread的区别?
  • Android 5.0以上的隐式启动问题及其解决方案。
  • Service保活方案
  • IntentService是什么 & 原理 & 使用场景 & 和Service的区别。
  • 创建一个独立进程的Service应该怎样做?

Handler

  • 子线程一定不能更新UI吗?
  • 给我说说Handler的原理
  • Handler导致的内存泄露你是如何解决的?
  • 如何使用Handler让子线程和子线程通信?
  • HandlerThread是什么 & 原理 & 使用场景?
  • 一个线程能否创建多个Handler,Handler和Looper之间的对应关系?
  • 为什么Android系统不建议子线程访问UI?

AsyncTask

  • AsyncTask是什么?能解决什么问题
  • 给我谈谈AsyncTask的三个泛型参数作用 & 它的一些方法作用。
  • 给我说说AsyncTask的原理
  • 你觉得AsyncTask有不足之处吗?

Fragment

  • Android中v4包下Fragment和app包下Fragment的区别是什么?
  • Fragment的生命周期 & 请结合Activity的生命周期再一起说说。
  • 说说Fragment如何进行懒加载。
  • ViewPager + Fragment结合使用会出现内存泄漏吗 & 如何解决?
  • Fragment如何和Activity进行通信 & Fragment之间如何进行通信?
  • 给我谈谈Fragment3种切换的方式以及区别 & 使用场景。

文件存储

  • 说说Android中数据持久化的方式 & 使用场景
  • 接触过MMKV吗?说说SharedPreference和它的区别
  • 第三方数据库框架用过哪些?有没有自己封装过一个SQLite的库
  • SQLite是线程安全的吗 & SharedPreference是线程安全的吗?
  • 请简单的给我说说什么是三级缓存?
  • SharedPreference的apply和commit的区别
  • 谈谈你对SQLite事务的认识

ListView & RecyclerView

  • ListView是什么?如何使用?
  • RecyclerView是什么?如何使用?如何返回不一样的Item。
  • ListView和RecycyclerView的区别是什么?
  • 分别讲讲你对ListView & RecyclerView的优化经验。
  • 给我说说RecyclerView的回收复用机制
  • 说说你是如何给ListView & RecyclerView加上拉刷新 & 下拉加载更多机制
  • 谈谈你是如何对ListView & RecycleView进行局部刷新的?

图片编程

  • 你对Bitmap了解吗?它在内存中如何存在?
  • 有关Bitmap导致OOM的原因知道吗?如何优化?
  • 给我谈谈图片压缩。
  • LruCache & DiskLruCache原理。
  • 说说你平常会使用的一些第三方图片加载库,最好给我谈谈它的原理。
  • 如果让你设计一个图片加载库,你会如何设计?
  • 你知道Android中处理图片的一些库吗(OpenCv & GPUImage …)?

WebView

  • WebView会导致内存泄露吗?原因是什么?解决方式有哪些?
  • 你知道Hybrid开发吗?说说你的相关经验
  • 说说WebSettings & WebViewClient & WebChromeClient这三个类的作用 & 用法。
  • 说说你了解的Hybrid框架。
  • 如何提高原生的WebView加载速度?
  • 谈谈你对webView工作机制的认识,你在项目中优化过它吗?说说是从哪些方面着手的?

ViewPager

  • 什么是ViewPager?说说它的那些适配器。(校招&实习)
  • 你了解ViewPager2吗?和ViewPager 1有哪些区别?
  • ViewPager + Fragment结合使用存在的内存泄漏的原因是什么?如何解决?

View事件分发机制

  • 什么是事件分发机制?主要用来解决什么问题?(校招&实习)
  • 给我说说事件分发的流程 & 你项目解决事件冲突的一些案例。
  • 分别讲讲有关事件分发的三个方法的作用及关系。
  • 如果我在一个设置了点击事件的TextView中dispatchTouchEvent方法强制返回ture或
    者false会发生什么?
  • 谈谈你对MotionEvent的认识?Cancel事件是什么情况下触发的?
  • requestLayout(),onLayout(),onDraw(),drawChild()区别和联系?

由于篇幅有限,只能分享部分面试题,更多面试题及答案去我的【GitHub】阅读下载哦~无偿分享给大家,算是一个感恩回馈吧

知识深度

也许上面这些面试题,你通过背一背,就能掌握得八九不离十了,毕竟面试官提的很多问题也是在网上找到的,所以你可能会放松警惕,觉得这样就足够了。

其实不然,大厂面试官还有一个爱好,就是对于每个知识点,都喜欢深入往下问,问到没有问题可以问,或者问到你不会为止,这样提问的目的只有一个,就是试探你对这个知识点的理解深度,如果你无法提供足够深刻的回答,结果往往就是失败。

最后希望大家能够重视面试,不要浪费自己的机会!

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 阿里钉钉Android实习面试也太太太太难了吧,对算法的要求堪比字节