安卓开发者模式!一个三非渣本的Android校招秋招之路,高级面试题+解析
本篇将由 环境搭建、实现原理、编程开发、插件开发、编译运行、性能稳定、发展未来 等七个方面,对当前的 React Native 和 Flutter 进行全面的分析对比,希望能给你更有价值的参考。
前言
移动端跨平台在经历数年沉浮之后,如今还能在舞台聚光灯下雀跃的, 也只剩下 React Native 和 Flutter 了,作为沉淀了数年的 “豪门” 与 19 年当红的 “新贵” ,它们之间的 “针锋相对” 也成了开发者们关心的事情。
过去曾有人问我:“他即写 Java 又会 Object-C ,在 Android 和 IOS 平台上可以同时开发,为什么还要学跨平台呢?”
而我的回答是:跨平台的市场优势不在于性能或学习成本,甚至平台适配会更耗费时间,但是它最终能让代码逻辑(特别是业务逻辑),无缝的复用在各个平台上,降低了重复代码的维护成本,保证了各平台间的统一性, 如果这时候还能保证一定的性能,那就更完美了。
我以为是HR一面,结果是技术,没想到啊,没想到!
1、描述Activity的生命周期。
2、描述一个Activity启动另外一个Activity的生命周期
3、Activity标签可以配置什么
4、IntentFilter里面的标签可以干嘛
5、Service怎么启动
了解IntentService吗?
6、几大控件有
7、存储数据的方式有
8、Intent可以干嘛
9、Sharedpreference里面的apply和commit有什么区别
10、ContentProvider用过吗?为什么要用这个
11、ASyncTask用过吗?知道是怎么实现的吗?
12、线程池知道吗?怎么创建?底层怎么实现?
13、Set、List、Map区别,Map底层怎么实现的
14、重写View怎么重写?
15、快排实现
16、实现两个链表表示的整数相加(空间复杂度要求很低)
看到还有很多程序员连面试流程都没有彻底弄清楚,今天,我们以阿里为例,来聊聊互联网大厂的面试流程和过程!
本篇主要还是聊聊社招的面试过程!阿里以及其他的互联网大厂的技术类社招面试,通常情况是 4 个轮次。第一、第二面是技术面,第三面是主管面试,第四面是 HR 面试。对于目标级别在 P6+ 的候选人,我们会增加至少一轮的跨团队 Review 面试,因为涉及招聘委员会(Hire Committee)的定级流程,所以要复杂一些。接下来的内容,主要针对通常情况下 P5~P6 的面试来介绍,大神请直接忽略。
01 技术面
1. 个人介绍和基础知识考查
这部分算是必备技能。我个人倒是倾向于弱化基础知识的考查,毕竟每个候选人的背景不同,应该更看重聪明程度、学习能力、沟通理解力等,基础知识只能证明他不是一个优秀的工程师,却无法证明他是一个优秀的工程师。
2. 项目经历考查
从这个阶段开始就格外重要了,因为面试官之前并不一定完整浏览候选人的简历,所以聆听候选人对项目的介绍是了解候选人的最主要途径。在这个过程中,面试官试图刨根问底,这跟各公司内部的技术评审很相似。几个关键点,希望你格外注意:
- 对项目背景的了解程度,讲不清楚需求从哪里来是非常可怕的,这说明你更多只是一个执行者,不是负责人,且缺少对于项目整体的思考。
- 对需求的合理性进行分析,一味听从 PM,不能把控需求的研发是很可怕的。
- 对技术方案设计的调研和选型,我们更希望看到你的方案是经过充分思考、调研、对比、论证的,通过这个过程,可以看到候选人的系统设计功底,是否对业界技术有足够了解,对开源技术的掌握情况,是否愿意应用开源技术。哪怕你的项目只是一个简单的业务系统,那么仍然应该有很多亮点可寻,否则这段项目经历可能会减分。
- 取得的成效。很多工程师只看重过程,不看重结果,这是不可取的。
3. 编程技术考查
在我的团队中,我要求每一轮技术面,都至少要有 1 道编程题目。一方面,我们非常看重侯选人的代码风格、优雅程度,还有对边界条件的考虑,这些都是好的程序员必须具备的素质。对于代码混乱、边界考虑不清的人,我们会认为他没有足够的编程素养和追求,在逻辑思维层面,也有所欠缺。**这样的候选人进入团队,短期可能造成 Bug 多、项目质量差等影响,长远来看,不利于合作开发、项目传承等。**另一方面,**我们非常看重数据结构、算法等的高效实现。能够快速设计出高效的程序,这体现了候选人日常的深厚积累,还有对编程的极致追求。**前不久就有一个典型案例,我们的运维同学发现一个后端模块上线后处理性能只有几十 QPS,很不理解为什么性能这么差。直到我们重新 review 代码后,才发现是个“经典”问题,即 for 循环里调用 sort(虽然是隔了几次函数调用),简单优化后,性能就可以提升 1~2 个数量级。优秀的工程师,一定会尽可能规避这类问题,几行代码的优化,就能提升用户体验、降低服务器成本、方便代码维护、减少兄弟们的工作量。
4. 逻辑题目或数学题目
这类题目的核心不在于它有多复杂,需要多少经验背景,而在于,只要逻辑清晰,认真思考,大多能得出结果,虽然不一定是最优解。我举几个例子:
- 一个六位数字,逆时针旋转 180 度后与之前完全相等的概率是多少?
- 边数是 3*4 的网格,从左下角的 A 点走到右上角的 B 点,一共有多少种不同的走法?
这类题目其实很简单,可以用编程的思路解决,比如递归(当然还有很多其他方式),也可以用概率论、组合数学的方式解决,甚至一个一个“数”也是能得到答案的。在思考问题的过程中,可以看出候选人的思维习惯,也可以看出候选人的逻辑能力。另外,这类题目其实有很多变化,如果候选人很轻松完成了回答,面试官就可以适当加大难度,比如 3*4 的网格有一个点不能经过,那么会是什么结果?这类题目看似简单,实则分辨率很高,可以充分挖掘候选人的潜力。除去上面的介绍外,候选人还应该对行业情况有所理解,包括竞品、开源项目等,这可以体现一个人的眼界和行业洞察能力,也可以看出一个人的学习态度,他是否在持续更新自己的知识储备。
02 主管面
相对于技术面而言,主管面试不会过多考查基础知识、数据结构及算法,但因为技术主管大多具备很强的技术背景,所以仍然会针对技术面过程中的一些遗漏点(可能是面试官没有考查到,也可能是候选人的回答不够完善),着重补充考查。除此之外,主管面的核心就是判断候选人除了技术能力外的其他维度,是否与团队相匹配。第一类维度,软素质能力。软素质的维度很丰富,每一次面试过程不会面面俱到地考查,但一些重要的维度一定会被照顾到。
1. 逻辑思维。
与技术面的逻辑题目类似,团队可以接受不足够聪明的人,但无法接受逻辑不清晰的人。在这个环节,可以提出一些进阶的题目,比如给候选人一个很复杂的问题,希望候选人可以尝试分析、分解,让看起来一团乱麻的问题变得清晰可实现。或者,让候选人阐述一个经历过最有挑战的问题,是如何定义问题并分析解决的。当然这类问题,一般初入职场的同学都很难回答完美;不过对于工作 2 年 + 的同学,我觉得问题的分析、分解、设定目标、规划、执行都是必备素质。这个能力很难在工作中迅速培养,它更多是通过候选人过去一二十年的学习和工作经历,一点一滴积累的,所以对于社招而言,希望候选人已经具备很好的逻辑思维能力。
2. 沟通能力。
不能有效且高效地沟通,对于团队项目是场灾难。在日常工作中,经常会看到几个同学针对一个问题争论得不可开胶,但其实他们往往没有理解对方所讲的主旨是什么,甚至对于一些名词和概念的理解都不一致,就更不要说同理心了,这种无效沟通是导致会议冗长的最主要因素。这类的面试考查,一般会依附于项目介绍或者设计题目等。
如果候选人已经具备不错的沟通能力,我们一般还会考查进阶能力:说服和影响。这是成为技术 / 项目负责人的必备能力。面试官可能会和候选人进行一个简短的虚拟沟通或辩论环节,希望候选人可以说服面试官接受某个观点或技术方案。当然,在这个过程中,面试官扮演的反派可能会用一些偏激的词汇和行为,这一方面是看候选人的沟通说服和影响他人的能力,另一方面也是压力测试,看看候选人在受到刁难时的反应,是否足够职业。创新能力。
在过去的项目中,请讲述一次发现传统方法的不足,尝试新的解决问题的方法,并获得成功的经历。这类题目非常开放,但遗憾的是,在我面试过的候选人中,近半数都是在思索一会儿后回答“没有什么”。
当然,一方面可能候选人很谦虚,另一方面,则很可能是候选人确实没有尝试做过什么创新。
互联网行业,创新是一切之源,如果真的“没有什么”,如何给 Offer 呢?
第二类维度,文化价值观。
工程师文化是务实、自驱、Follow Through(跟进到底,有始有终)。一个浮夸,不思进取,凡事不愿承担责任,不能将项目跟进到底的候选人,很难成为我们的伙伴。这类维度,其实没有太多经验可谈,每个公司都有它的文化基因,而候选人是否与之匹配,是基因和环境使然。我只说下从我个人角度,最为看重的内容,否则我会一票否决。乐观积极。不得不承认,每个人都有积极的一面和消极的一面,职业化的思维在于将积极的一面展现出来,尽量弱化消除消极一面的影响。
在日常工作中,每个人都不希望遇到一群愁眉苦脸、满腹牢骚的同事。善于合作。一位同学加入到我们的团队,他不仅需要具备优秀的个人能力,同时也需要能和其他人协同合作,起到 1+1>2 的效果。我们会考查候选人在过去的经历中,对待合作的态度,有没有接触过比较复杂、跨越多个角色或团队的合作,遇到过的协作困难是什么,遇到这类困难是如何解决的。有些候选人经常会无意识地表达出,在项目研发过程中,多人写代码,还要同步需求、设计、协商接口、联合调试,而且有 Bug 修复推动也很麻烦,如果我一个人开发早就解决了。这种思维虽然无可厚非,但希望每个人可以看得更远,大型项目是一个人完成不了的,在多人合作的背景下,如何提升合作的效率和质量才是重点,而不是过多地看到负面。追求极致。这一条很难。在我发过的这么多 Offer 中,具备这个素质的候选人也是凤毛麟角,但只要具备这个素质,我几乎一定会给 Offer。当然,追求极致不等于钻牛角尖。
03 总结
面试的学问很多,很多方面我都无法讲到(比如 HR 面,我能讲的实在不多,请表现出你最积极的一面就好)。一家之言,作为参考,总之,你具备了这些,肯定能从我的手中拿到满意的 Offer。
总结
算法知识点繁多,企业考察的题目千变万化,面对越来越近的“金九银十”,我给大家准备好了一套比较完善的学习方法,希望能帮助大家在有限的时间里尽可能系统快速的恶补算法,通过高效的学习来提高大家面试中算法模块的通过率。
这一套学习资料既有文字档也有视频,里面不仅仅有关键知识点的整理,还有案例的算法相关部分的讲解,可以帮助大家更好更全面的进行学习,二者搭配起来学习效果会更好。
部分资料展示:
有了这套学习资料,坚持刷题一周,你就会发现自己的算法知识体系有明显的完善,离大厂Offer的距离更加近。
资料获取方法:点赞+关注+转发,然后进入我的【GitHub】,里面有免费获取途径
安卓开发者模式!一个三非渣本的Android校招秋招之路,高级面试题+解析相关推荐
- android即时通讯开发!一个三非渣本的Android校招秋招之路,附答案
开头 最近很多网友反馈:自己从各处弄来的资料,过于杂乱.零散.碎片化,看得时候觉得挺有用的,但过个半天,啥都记不起来了.其实,这就是缺少系统化学习的后果. 为了提高大家的学习效率,帮大家能快速掌握An ...
- Android面试题整理,一个三非渣本的Android校招秋招之路,附超全教程文档
前言 2020年,互联网裁员潮下,我度过了人生中最清晰的半年. 今年我本命年,熬过了程序员35的坎,却在36岁被公司破产来了当头一棒,领完了当月份的工资,老板,也是我哥们的老李走进我的办公室,没有迂回 ...
- Android面试:一个三非渣本的Android校招秋招之路,附答案
前不久听我一个字节的朋友说了一个神转折的故事. 一名大专生,异常执着地向他们公司投简历,屡战屡败,屡败屡战,前前后后向字节跳动投了九次简历. 你猜后面怎么着?还真让他成功了,第九次居然拿到了offer ...
- 一个三非渣本的Java校招秋招之路,吊打面试官
一.Spring Boot 相关 (1)SpringBoot 面试专题 什么是 Spring Boot? Spring Boot 有哪些优点? 什么是 JavaConfig? 如何重新加载 Sprin ...
- 一个三非渣本的Java校招秋招之路,搞懂这些直接来阿里入职
性能调优 影响MySQLServer 性能的相关因素 商业需求对性能的影响 系统架构及实现对性能的影响 Query语句对系统性能的影响 Schema设计对系统的性能影响 硬件环境对系统性能的影响 My ...
- 【秋招总结】双非本小菜鸡的坎坷秋招之路(附面经)
前言 因为大环境的影响,今年秋招hc骤缩,导致竞争的激烈程度比往年高了不少. 在秋招的时候,经历过简历石沉大海的无奈,也体验过人家收割offer而自己却依旧0offer的焦虑,不过好在最终也拿到了还算 ...
- app安卓开发教程!Android组件化架构实践,高级面试题+解析
前言 互联网时代的到来,让我们获取知识变得更加简单,理论上讲只要你想学,便会有不尽的知识等你,只要方法得当,够努力,任何人都可以都有可能成为大牛. 自己在努力的基础上,还学习了一些高效的学习方法,让我 ...
- 一个双非渣硕的自我救赎之路
AI尽在AI蜗牛车,关注我没毛病!! 作者:算法才是灵魂 转自:https://www.nowcoder.com/discuss/328830 授权文章,转载请联系作者 编辑:Che_Hongs ...
- 火狐/谷歌浏览器打开开发者模式的三种方法
1.谷歌浏览器打开开发者模式的三种方法 直接按"F12":通过点击右上角的菜单来打开:Ctrl+Shift+I 2.火狐浏览器打开开发者模式的三种方法 直接按"F12&q ...
- 双非本23秋招之路-从考研跑路到某安全大厂(无实习、项目)
文章目录 双非本23秋招之路-从考研跑路到某安全大厂(无实习.项目) 一.自我介绍 二.简历准备 三.刷题 四.八股文 五.项目方面 六.关于实习 七.面试方面 八.秋招路程 九.简历投递 十.面经分 ...
最新文章
- 小游戏掉帧卡顿启动慢运行内存不足……这些问题有解吗?
- 配置库用户_GEE学习笔记 六十八:【GEE之Python版教程二】配置Python开发环境
- mysql strtok_c函数: strtok 和 strtok_r 详解
- 子函数的指针释放问题
- 11条建议让你成为优秀的JavaScript程序员
- U盘安装ubuntu 14.10遇到gfxboot.c32
- NOIP2010 提高组 机器翻译
- 在一个机器上创建多个独立Firefox运行环境
- 能源36号文解读_财税2016年36号文件全文解读【专业分析】
- 如何在Mac视频中添加表情符号
- 离散数学蕴含式的问题
- 前端开源项目周报0412
- mysql回调地狱_es6 promise 所见
- Ubuntu 16.04 安装iNode客户端
- 三维空间点到线段的距离
- 索爱S318小蜜蜂扩音器性能如何?
- 33岁学做软件测试还来得及? 4个建议送给你!
- 3个思考方向,轻松实现快速涨粉
- Leetcode77 组合
- CLCL-多重剪切板
热门文章
- VBA: 如何停止当前VBA程序(尤其是死循环)的运行,用程序停止其他程序,暂停程序等(未完成)
- C#实战小技巧(十一):获取网站图标
- pov-ray软件绘图--室内一角
- 多用户多语言韩国跨境电商独立站系统搭建(后台采集功能)
- C++ 堆与栈、空指针的释放等
- 如何将PC的VPN代理分享给局域网的其它Linux嵌入式设备、或其它PC
- ceph tell 常用命令
- CentOS 下安装Nginx 0.8.30 + PHP 5.3.1+MySQL 5.5.0
- 网络连接中无VMnet1和VMnet8,设备管理器中两者出现黄色感叹号。
- 『已解决』Synchronous operations are disallowed. Call ReadAsync or set AllowSynchronousIO to true instead