在小公司工作3年,从事Android 开发6年了,才发现自己还是处于“初级“水平,是不是该放弃....

作者分享了自己作为一名Android开发者,历经阿里、腾讯和字节跳动等大厂的面试经历,揭示了面试中遇到的基础和高级技术问题,包括Android的热修复、内存优化、JVM、网络、数据库等方面。同时,作者意识到自身技术水平的不足,对未来技术发展和学习方向进行了思考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

金三银四面试季,相信大家都想好好把握住这次机会拿到心仪的offer,今天就给大家分享我面试经历及总结,文章最后我还会分享一些自己的面试经验还有面试宝典,希望对程序媛们和程序猿们都能有所帮助~

市场分析

现在的市场环境确实不大好,裁员与及在预谋裁员的公司一大把,当然招人的公司也有。我这几天去面试了几家公司,目的有以下几点:

1、跟现在老东家签约的合同快到期了,想出来看看新机会,有好机会就考虑挪挪窝了;

2、现在外面的市场是个什么样子,求职的人和招聘的人比例;

3、市场对于一个高级/资深开发工程师的要求是什么样子(毕竟纸上得来终觉浅,觉知此事须躬行);

4、年龄到底是不是个坎。

阿里第一次尝试

阿里的面试基本上都是边聊边问,根据你的工作经历以及面试过程中的内容进行展开。

面试官先问,你最擅长Android中的哪个方向呢?

我答了插件化、组件化、热修复、React Native,最近也在钻研Flutter,对flutter有一些自己的理解。(我故意这么讲,希望面试官可以多问一下flutter。)

面试官:插件化和热修复有什么区别吗?

我:插件化是把需要实现的模块或功能独立提取出来,减少宿主的规模,需要相应功能时再去加载相应模块;而热修复则是从修复bug的角度出发,不需要二次安装应用、用户无感知的情况下就可以修复已知bug。(这么基础的问题,回答的时候自信满满…)

面试官:热修复的核心原理是什么?

我:主要是利用Android类加载机制,把需要修复的类打包成dex文件,把这个修复过的dex文件排在dexElements最前面,ClassLoader在修复过的dex文件加载到类之后就不会再去加载错误的类了。(还好面试前有看过)

面试官:类加载为什么要使用双亲委托机制?

我:…(我记得我看过的来着,一下子想不起来了。)

面试官:jvm和dalvik、art的区别是什么?

我:jvm是基于栈的,dalvik和art是基于寄存器的。(这时候我慌得一比,快顶不住了…)

面试官又追问:那什么是基于栈的虚拟机,什么又是基于寄存器的虚拟机?

我说不知道。(那时完全不懂面试官为什么要问这个)

面试官:art加载类的流程和Dalvik有区别吗?

我:有区别吗?不就是ClassLoader吗?(面试官稍微提了一下机器码。)

后续查学习文档笔记才知道,原来art水这么深,7.0以前直接编译为机器码。之后又变成混合aot、jit和解释执行了,加载类底层使用classlinker,先从classtable缓存查找,如果没有再从oat文件查找,否则就解释执行

面试官:那art下,热修复的实现上有什么需要注意的地方?

最后一个问题听完之后直接懵逼了…查学习文档笔记才感觉到面试官其实还是在问:art下类加载的流程。原来aot会生成一个base.art文件,在ClassLoader创建之后就会把base.art中的类注入到缓存中去&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值