2024面试字节跳动看这篇就够了!安卓程序员的面试经历及其感悟!(2)

文章围绕Android开发者的面试问题,涉及卡顿优化、性能调优、网络通信、内存管理、设计模式、JVM机制等多个技术点,强调实践经验、理论知识和系统学习的重要性。
摘要由CSDN通过智能技术生成

这个问题问的很深入,问了Android卡顿优化的几个思路和实现,紧扣项目和实习经历

10)有用过CPU Profiler吗?火焰图怎么看?

11)怎么抓包?Charles、Mock等

12)HTTPS怎么实现安全的?问的非常深,包括中间人攻击啥的

13)TCP、UDP,三次握手四次挥手,为什么是三次,为什么是四次

14)DNS的原理和过程,怎么防止DNS污染

15)平时自己怎么学习安卓的,有什么方式

16)算法题:写一个单例模式。

18)设计一个把日志上传到服务器的模块,保证数据不丢失,怎么实现?

19)给个数组,找出数组中第k大的数(利用快排思想/用小顶堆,他说可以用大顶堆?);

20)给一根不均匀烧完需要一个小时的绳子,问如何确定出15分钟

21)Android中Handler机制;

22)Java中HashMap机制,红黑树;

23)synchronized关键字;

24)volatile关键字作用,可见性,重排序,单例模式中为什么可以用它;

25)TCP如何保证可靠传输;

26)客户端设计一个网络库,需要考虑哪些问题;

29)Java中如何判断一个对象是否存活,有哪些GC Root根节点;

30)Java中异常体系;

31)什么时候出现内存溢出、用过什么内存泄漏的工具;

  • 二面

1)熟悉那些设计模式呢?

2)动态代理底层是如何实现的?

3)讲讲Retrofit的动态代理吧

4)能简单说说JVM内存模型的目的以及在内存中区分为哪些区域吗?

5)内存回收机制大致讲讲呗?

6)类加载机制完整细致的描述一下把

7)类加载器的双亲委派原则说一下吧?(这里有一个疑问,我说父子类加载器不是继承关系,然后面试官说不太对,这里我有一点点疑问,还请大家告知一下)

8)能说一下Java .class文件的结构吗?

9)线程池的基本机制有了解吗?非核心线程如何保证延迟结束?

10)为什么内部类会默认持有外部类的引用?

11)Handler消息机制简单说一下吧(延时的消息是如何发送的?以及通过Looper.loop()是如何处理延时消息的?)

12)为什么Handler会出现内存泄漏?

13)View中的post和handler的post有什么区别?(我说view中的handler是经过重写的,会处理关于View的相关绘制事件,然后面试官说只回答对了一部分,我有些疑问,还有其他的区别吗?)

14)有用到什么内存泄漏检测的框架吗?知道原理吗?(就是上面所说的JVM内存回收机制)

15)知道关于性能优化相关的吗?能简单讲一下吗?(布局,异步,过渡绘制)

16)能讲一下Activity的启动流程吗?

17)听你讲到了进程间通讯,PackageManagerService和ActivityManagerService进行通信的方式是什么?

18)Binder驱动底层原理了解吗?(mmap的内存地址映射)

19)Serializable和Parcable有什么区别?如何使用?

20)听你说到了sp(SharedPreference),你知道sp能跨进程通讯吗?

三面

1)自我介绍

2)讲个项目,自己最熟悉哪一个

3 )项目做了什么

4)网络请求框架怎么封装

5)还遇到什么问题没有

6)事件分发机制,多个RecycleView 嵌套怎么处理

7)OkHttp源码

8)讲一下拦截器

9)Cache缓存是怎么做的

10)图片做过吗

11)你的图片项目怎么加载大图

12)如何防止OOM

13)做过View 的性能优化吗

14)讲一下View的优化

15)层级布局

16)如何减少绘制

17)针对measure和draw 有什么优化的地方吗

18)多个view 加载卡顿怎么办

  • HR面:

1)自我介绍,抓住介绍的点让你详细说说?

2)期望工作地点

3)事业群介绍

4)为什么想要留在北京

5)为什么不读研究生

6)如何看待Android开发,为什么不接触IOS呢

7)刚开始工作压力会很大,你有没有想过怎么处理压力呢

反问
8)有没有健身房

9)有住房补贴或者房源推荐吗

10)招多少个Android应届生呀

11)应届生培养方案

12)为什么来美团?你对美团技术团队的了解有多少?

关于程序员的几个阶段

每个程序员、或者说每个工作者都应该有自己的职业规划,如果看到这里的朋友没有自己的职业规划,希望你可以思考一下自己的将来。

常常思考自己的未来,也从自己的思考中总结出了一些东西,作为第一部分来谈谈。认为一名程序员应该有几个阶段(以下时间都算上实习期):

  • 第一阶段----三年

  • 我认为三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适合写代码的人。这一阶段,我们走出校园,迈入社会,成为一名程序员,正式从书本上的内容迈向真正的企业级开发。我们知道如何团队协作、如何使用项目管理工具、项目版本如何控制、我们写的代码如何测试如何在线上运行等等,积累了一定的开发经验,也对代码有了一定深入的认识,是一个比较纯粹的Coder的阶段

  • 第二阶段----五年

  • 五年又是区分程序员的第二个门槛。有些人在三年里,除了完成工作,在空余时间基本不会研究别的东西,这些人永远就是个Coder,年纪大一些势必被更年轻的人给顶替;有些人在三年里,除了写代码之外,还热衷于研究各种技术实现细节、看了N多好书、写一些博客、在Github上分享技术,这些人在五年后必然具备在技术上独当一面的能力并且清楚自己未来的发展方向,从一个Coder逐步走向系统分析师或是架构师,成为项目组中不可或缺的人物

  • 第三阶段----十年

  • 十年又是另一个门槛了,转行或是继续做一名程序员就在这个节点上。如果在前几年就抱定不转行的思路并且为之努力的话,那么在十年的这个节点上,有些人必然成长为一名对行业有着深入认识、对技术有着深入认识、能从零开始对一个产品进行分析的程序员,这样的人在公司基本担任的都是CTO、技术专家、首席架构师等最关键的职位,这对于自己绝对是一件荣耀的事,当然老板在经济上也绝不会亏待你

一些面试建议及小技巧

第一部分总结一下,我认为,随着你工作年限的增长、对生活对生命认识的深入,应当不断思考三个问题:

1、我到底适不适合当一名程序员?

2、我到底应不应该一辈子以程序员为职业?

3、我对编程到底持有的是一种什么样的态度,是够用就好呢还是不断研究?

最终,明确自己的职业规划,对自己的规划负责并为之努力

关于专业技能

写完项目接着写写一名7年工作经验的Android程序员应该具备的技能,这可能是Android程序员们比较关心的内容。我这里要说明一下,以下列举的内容不是都要会的东西----但是如果你掌握得越多,最终能得到的评价、拿到的薪水势必也越高。

关于知识积累

  • 1. Android基础 & 常用

针对Android基础&常用知识,我认为对于初级开发者来说,按照优先级最主要的知识点主要包括:四大组件、布局使用、多线程 & 动画;

具体介绍如下:

结语

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!以下是目录截图:

由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。

再附一部分Android架构面试视频讲解:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值