下血本买的!意外收获字节跳动内部资料,移动架构师成长路线

前言:

Android 应用开发发展到今天,已经成为一个非常成熟的技术方向,从目前的形势来看,Android开发相当火热,但是高级Android开发人才却比较少,现在移动互联网的开发者也逐步开始关注插件化技术、性能优化、行业新技术,系统架构等进阶技术。这也同时造成了一种现像,安卓开发人员感受到行业现在已经是冰火两重天的环境了,技术不全面,还停留在中低端技术水平的,辛辛苦苦写代码,为了一年涨2千块钱的工资,疯狂加班,还要被降薪,还要时刻担心被裁员,而中高级开发人员却是企业青睐的对象,工资越来越高,同时也出现了市场岗位情况是中低端开发人员多人竞争一个岗位,而中高级开发人员一人竞争多个岗位的现状。

那么作为安卓开发人员的你,该如何突破现状,成为架构师中的一员呢。

背景

面是是上海的Android leader岗位,周日一轮面试,自我感觉答的都还不错。

结果收到邮件面试结束了,说什么"你优秀的学识和能力给我们留下了深刻的印象!经过对你综合情况的仔细评估,并经过与岗位需求进行谨慎匹配和权衡之后, 非常遗憾,我们这次没有和你达成合作。但你的信息已经被录入到公司人才库"。意思就是挂了呗。

后来打电话问hr,没跟我说原因。然后面试过程中,有一点奇怪的地方,面试前面试官跟我说我面的而这个岗位有点奇怪,他也没跟我说哪奇怪。

面试过程

下面是面试官提的一些问题:

面试官:点击一个图标到这个应用启动的全过程(前面是项目经验没啥好说的)。

回答:

点击图标后通过startActivity远程调用到ams中,ams中将新启动的activity以activityrecord的结构压入activity栈中,并通过远程binder回调到原进程,使得原进程进入pause状态,原进程pause后通知ams我pause了。ams再根据栈中activity的启动intent中的flag是否含有new_task的标签判断是否需要启动新进程,启动新进程通过startProcessXXX的函数。启动新进程后通过反射调用ActivityThread的main函数,main函数中调用looper.prepar和lopper.loop启动消息队列循环机制。

最后远程告知ams我启动了。ams回调handleLauncherAcitivyt加载activity。在handlerLauncherActivity中会通过反射调用Application的onCreate和activity的onCreate以及通过handleResumeActivity中反射调用activity的onresume。一个应用就此启动。

面试官:Retrofit原理。

回答:

主要是通过动态代理将接口直接转换成代理对象。动态代理和静态代理的区别,动态代理直接在虚拟机层面构建字节码对象。

面试官:View自定义的流程,实现哪些方法。

回答:

实现OnMeasure,onlayout,onDraw。

继续问“onMeasure中会用哪些方法?”(我觉得这题可能没大好,我是想回答的详细点的,结果还没打到点他就说好,继续下一题,不知道是认可了还是觉得我答的过于啰嗦,如果觉得太啰嗦可以提出来啊。。。)

我回答onMeasure 中传入两个int数值,这个数值32位,前2位表示模式,后30位表示宽度、高度。这是外表容器给内部view的限制。

一种模式是容器给你多大的值,你就是多大的值(match_parent),
第二种,容易给内部view多大的空间,内部view不用管,是多大就是多大。
第三种,容器给子view多大的空间,和子view自己算出来的占用空间,选择小的那个(wrap_content)。说到这我正打算说onMeasure会调用measureChildwithmargin类的函数,他说好了,然后下一题。

面试官:怎么设计app的。

回答:

基本都用的mvc架构,曾经有个项目使用mvp。还有其它一些整体设计上的问题,很零碎,但都答的差不多。

面试官:(最后是算法题,面试官的表述不是很清晰,所以开始没理解他的意思,我归纳一下题目)

有1,3,7三个面值的金钱,现在要取n元。怎么取个数最少。(n是已知数) 意思就是 1 * a+3 * b+7 * c=n 什么情况(a+b+c)最小。

当然这是我自己归纳出来的,他开始的描述让我想哭。

回答:

开始脑子有点没反应过来,把它当逻辑题做了,想了5分钟后才反应过来,这是编程题啊。遍历呀, a的取值范围(0n)b的取值范围(0n/3) c的取值范围(0~n/7) 遍历取最小值。当然这种情况效率并不高,我当时也和面试官说了,没太考虑效率,如果需要可以再改。感觉他也认可,思路对就行了。 其它一些零碎的问题没印象了,主要就这些。

我想大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,比如我这次的挂了的面试,大家可以对比下,发现一些自己回答的话会有哪些问题,这样对自己之后的面试才更有帮助。

推荐学习资料


  • 脑图
    360°全方位性能调优


    由于文章篇幅问题点击链接查看详细文章以及获取学习笔记:GitHub

E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)**

回答: Java技术支持是为了帮助开发人员解决在Java编程过程中遇到的问题和困难。Java技术支持可以提供以下方面的帮助: 1. 提供关于Java语言和框架的技术指导和建议,帮助开发人员理解和正确使用Java的特性和功能。 2. 解决Java程序中的错误和异常,提供调试和故障排除的支持。 3. 提供性能优化建议,帮助开发人员改进Java应用程序的性能和效率。 4. 解答关于Java开发环境、工具和库的问题,帮助开发人员选择和使用合适的工具和技术。 5. 提供关于Java安全性和最佳实践的建议,帮助开发人员编写安全可靠的Java代码。 总之,Java技术支持的目标是帮助开发人员充分利用Java的强大功能和灵活性,解决开发过程中遇到的各种技术问题,提高开发效率和质量。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [Java:什么是Java框架?](https://blog.csdn.net/yueqian_edu/article/details/126784399)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [下血本的!java中mapper是干嘛的](https://blog.csdn.net/jixuczy/article/details/118368252)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值