-
线程池7大参数、工作原理
-
点击手机桌面应用图标后发生了什么
-
View三大流程说了一下,流式布局FlowLayout怎么实现的
-
retrofit原理,看过okhttp源码,讲了一下okhttp的工作原理(分发器、拦截器,讲了细节)
-
聊了项目(讲了好久),几个方面如下:
(1)项目中用了kotlin协程,于是问了协程的相关理念,面试官可能觉得说的不太全,就给补充了一下。 然后说协程这样的新技术国外有人用,国内用的很少(因为使用协程会改变老项目原有网络架构,对于新项目可以使用,想要取代老项目比较困难)。
(2)如果用户反应app有问题,该怎么解决?回答网络抓包,面试官说大型项目不可能通过抓包来找问题,后来经过暗示,正确做法应该是生成日志文件并提交到服务器。
(3)聊了项目中登录相关的业务怎么实现的(将服务器响应的token持久化并添加到请求头)。
- 提问环节。问了面试官kotlin在企业应用中是否有用到,面试官说由于Java和kotlin并不冲突,因此在项目中是共存的。
第二天下午接到了约2面的电话,就约在当天晚上
钉钉2面,3月2日(电话面试,1个小时)
-
聊了研究生、本科阶段得过哪些奖,做过哪些项目或者参加过哪些比赛。具体问了本科参加过的一个水中机器人的比赛(stm32单片机做的),怎么识别水中的路线之类的一些细节;又问了简历中的一个医疗机器人的项目(遇到了哪些问题、只是实验室做着玩还是准备用在现实生活中);又问了参加过的数学竞赛,这个竞赛考察了什么能力等等。
-
问设计模式,Android源码或者第三方开源框架应用设计模式举例?(说了okhttp拦截器责任链模式)
自己的项目有没有用设计模式?(retrofit单例,用的kotlin的object关键字实现)
-
Android源码中你认为有哪些方面设计的很优秀的地方?(说了Android view体系)
-
聊kotlin,kotlin相比于Java有哪些优势、具体有哪些特性、语法糖之类的
-
谈谈对mvvm、mvc架构的理解,为什么你要在项目中使用mvvm?(当然是Google推荐使用mvvm)
-
聊对工作、学习方面的态度,应该具备什么能力等等
-
三道算法题(说思路):
(1)二叉树的最近公共祖先(只想出来一种比较笨的方法)
(2)遍历二叉树的第k层节点(递归迭代都讲了)
(3)给一个中文字符串“一万两千八百一十一”(只是个例子),输出这个字符串对应的数值(没想出来)
- 提问环节,问了部门的氛围如何之类的
二面之后参加了阿里的第一次笔试,两道力扣hard题,血难,加上我之前没练过ACM输入输出,最后一道也没过0分
(1)力扣1411:网格图涂色的方案数
(2)力扣815:公交路线
笔试之后心态崩了,觉得0分应该进不了阿里了,没想到过了两周二面的面试官给打了个电话,说前两面的面试成绩挺好,可以再给一个机会,用阿里伯乐平台出了4道题(其实是前两道有点难,第一道贪心算法,第二道工厂模式+策略模式+多线程都不会),才又出了后面两道简单的算法题,一个反转字符串中的单词,一个求链表倒数第k个节点,这俩写出来了。一周之后接到了3面的电话。
钉钉3面,3月24日(电话面试,40分钟)
-
自我介绍
-
聊项目,mvc、mvp和mvvm架构各自的特点;在项目中最具有挑战的是什么?项目收获到了什么?
-
算法题:给两个字符数组,举例:{h,e,l,l,o, ,w,o,r,l,d}和{e,o},如果第一个数组中存在第二个数组中的元素则去掉,后面的元素往前顺移,结果为:{h,l,l, ,w, r,l,d}。要求时间复杂度为O(n),空间复杂度为O(1)。
-
你认为什么样的人可以称之为技术大佬?如果只有30分钟,你会依据什么来判断一个人是不是大佬?你认为自己身边最厉害的技术大佬是谁?他为什么会成为大佬?你愿不愿意推荐他到我们顶顶团队(我说他投了蚂蚁,面试官说他做了错误的选择…)?如果让你在半年之内达到他的水平,你的学习规划是什么?你会不会向他请教学习方法?
-
反问:
(1)大厂对新技术的态度是怎样的?
(2)鸿蒙会不会取代Android?Android的前景怎样?面试官先问了我的观点,后来说了自己的观点:不会。
为什么不会?这个要自己查找最近几年出现的智能手机系统,它们为什么没有Android和iOS成功,从中找答案。
钉钉HR面,3月30日(钉钉视频面试,20分钟)
-
自我介绍,开了共享屏幕现场给HR展示了之前的一个项目
-
你的项目UI界面是自己设计的吗?
-
你对未来的规划是什么?
-
有没有投别的大厂?
-
大厂有很多,为什么要投阿里?为什么要投钉钉部门?
-
你对互联网行业加班现状怎么看?你对加班的态度怎样?
提问环节:
(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
总结
最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
相信它会给大家带来很多收获:
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
团等公司2021年的面试题**,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
相信它会给大家带来很多收获:
[外链图片转存中…(img-wZPVmNua-1715424342402)]
[外链图片转存中…(img-YRJoGHoP-1715424342403)]
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!