十年磨一剑:站在面试官角度聊聊现下大环境面试,“野生”程序员现阶段面试问题 & 学习误区

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
img

正文

  • 文件流、Cursor等资源及时关闭;

  • Activity销毁时WebView的移除和销毁。

5. View

  • Window WindowManager WMS

  • View 工作流程

  • View.post

6. 动画

**帧动画 :**AnimationDrawable 实现,在资源文件中存放多张图片,占用内存多,容易OOM。

**补间动画 :**作用对象只限于 View 视觉改变,并没有改变View 的 xy 坐标,支持 平移、缩放、旋转、透明度,但是移动后,响应时间的位置还在 原处,补间动画在执行的时候,直接导致了 View 执行 onDraw() 方法。补间动画的核心本质就是在一定的持续时间内,不断改变 Matrix 变换,并且不断刷新的过程。

**属性动画 :**ObjectAnimator、ValuetAnimator、AnimatorSet 可以是任何View,动画选择也比较多,其中包含 差速器,可以控制动画速度,节奏。类型估值器 可以根据当前属性改变的百分比计算改变后的属性值 。因为ViewGroup 在 getTransformedMotionEvent方法中通过子 View 的 hasIdentityMatrix() 来判断子 View 是否经过位移之类的属性动画。调用子 View 的 getInverseMatrix() 做「反平移」操作,然后判断处理后的触摸点是否在子 View 的边界范围内。

提升动画 可以打开 硬件加速,使GPU 承担一部分CPU的工作。

7. Android 进程通讯方式

  • bundle

  • ContentProvider

  • 文件

  • Broadcast

  • AIDL

  • Messager

  • Socket

8. Android 线程通信

  • Handler线程间通信

  • Handler 同步屏障机制

  • Looper.loop 为什么不会卡死

  • Messaage复用

9. Android 和WebView 通信

  • js调用android

  • android 调用js

10. app优化 (项目中处理的一些难点)

  • 启动优化

  • 布局UI优化

  • 打包优化

11. 第三方库 源码总结

  • LeakCanary 原理

  • OkHttp

  • 同步请求流程

  • 异步请求流程

  • 责任链模式 和 拦截器

  • OkHttp 流程

  • ButterKnife

  • butterknife 实现流程

面试技巧


最近面试了很多人,但是基本上都没招到什么满意的人,是Android开发都凉了吗,其实并不是,从简历的数量上来看,金三银四的简历还是很多的,首先我们从简历上来说,面试官都希望看见什么样的简历呢?

大部分的简历,都是罗列自己的公司经历、项目经历,介绍了项目大概的情况,好一点的,罗列下项目的技术方案。

要知道,对于面试官来说,简历是很重要的一环,这是对你的第一印象评价,很大程度上决定了你的面试成败。我在面试的时候,简历发给我之后,通常会看一眼面试者的项目经历,从而决定了我的面试问题。所以,项目经历上只需要写下面几个方面:

  • 项目一句话简介,说明项目的大体情况和规模
  • 核心技术方案,介绍用到的核心技术、核心技术方案
  • 你在项目中承担的角色以及贡献等

实际上有了这些东西,我基本上可以了解你的这个项目大概是个什么规模,需要用到哪些技术点,以及你应该有的能力范围,下面我就会根据你的这些项目经历来对你提问,由浅入深,可能先问你大概的技术方案,是否有更佳方案或者现在的方案是否有什么问题等,再深入问问技术的细节,看你的技术深度和广度。

除了项目经历,你的简历上只应该出现你的亮点,切记各种废话,什么精通Java,精通设计模式、数据结构,这些根本不能体现你的特点,这些东西应该结合业务或者架构,例如利用设计模式改进了技术方案的流程,通过数据结构优化了程序的执行效率。

另外补充一点,好的开源项目、博客等等,这些都是比较好的加分项目,但是…如果你的开源项目连readme都没,你的博客全是流水账,那就不要贴了,反而容易减分。

面试实际上是一个双向的过程,所以,一场好的面试,绝不是面试官单方面的发问,面试者应该引导面试官,把面试当作是一场技术讨论,一来一回,双方都能了解对方的技术实力,我相信,这样双方都会对这次面试满意,通过面试也就是自然而然的了。

大公司和小公司该选哪个?

说完公司的面试,再说一下经常有读者私信我的一个问题,那就是A公司、B公司,我到底该选哪个公司,首先我要确认下你是不是来炫耀的。

对于这个问题,其实也是有一个个人看法的,这个看法是我的主观臆断,可能很多人也不会这样想,这里写出来,大家轻喷。

首先,如果你是刚毕业的学生,我会建议你去小公司、创业公司,但是,是技术型偏向的公司,绝不是外包或者某个公司的IT部,为啥呢,原因很简单,刚毕业这几年,是你飞速成长的几年,也是你选择方向的几年,在这些技术型小公司、小团队里,你可以非常快速的上手各种技术,没有任何外部压力,团队小,大家通讯基本靠吼,不需要走流程、发邮件、约评审,这是大公司的通病——决策链太长,同时,你对自己的技术定位,在一段时间后,也会更加清晰。

在这之后,除非有一夜暴富的机会,就不应该在继续在小公司待下去了,这时候,一定要去大公司进行历练。大公司去干什么呢?其实很多大公司的技术并不很先进,代码很可能也很烂,但是你去大公司,就好像游击队变成了正规军,你要学的是规范和流程,小公司的这几年,让你的技术突飞猛进,但是却不成章法,大公司就是让你来沉淀技术的(这句话要屏蔽老板),大公司经营多年,技术方案早已成型,很多开发者进去也是拧螺丝,但是,你需要的是了解各个系统、各个平台的流程、优劣,做到心中有术,而不是心中有码,如果你是一个可造之材,那么经过这样两轮历练,我相信你应该是一个很不错的开发者了。

学习

首先,学习这件事情,就是一个认知的过程,既然是一个认知的过程,那就不能以管窥豹,而需要站在一个全局的思想上来看,例如在学习Flutter的时候,没有必要精通所有的Widget,掌握常见的Widget之后,就应该去思考Flutter的绘制流程、刷新流程,了解这些,才能让你在全局角度上掌握Flutter的渲染过程,这比你掌握几个Widget更加有用。

更加通用的,我们平时应该尽可能的拓宽自己的知识广度,这样才能让你的眼界更加宽广。就拿Flutter来说,总有一些敏感词喷Flutter,Flutter能不能火我不知道,能不能推广我也不知道,但是我依然学了Flutter,这是为啥?因为通过Flutter我学习到了一种新的跨平台思想,一种区别于现有的命令式编程的编程范式,一种全新的改进渲染流程的方法,掌握这些,我觉得比单纯的讨论阿里是不是不再用Flutter了更加有用。

学习,永远是一个认知碾压的过程,不断接触新思想、新技术,才能让自己有更加敏锐的认知洞察力,就好像学了Flutter,你会发现Compose好像也是一样啊,SwiftUI好像也是啊,从更高的眼界上去看这些东西,其实本质上,都是一种思想,现在的社会早已不存在信息孤岛,学会将信息链接起来,才是高效的认知方法。

井底之蛙永远跳不出去井,也永远别用阿里是不是还用Flutter这样的事来限制你的认知,就好像三体人用质子封锁了地球的科技进步,可悲。

努力成为一个优秀的程序员

在大公司一定要吾日三省吾身,千万不能贪图安逸,一个技术用十年,你也只有一年工作经验。

写代码

永远不要上手就写代码。

这句话我们从小就听——不要上手就写作文,先想好提纲。编程也是如此,除非胸有成竹,否则绝不一码十行。

当我们拿到一个需求进行开发的时候,一定要先在大脑中推敲推敲,这个需求的每个方面是否都是完备的,是否有异常流程,这个需求的每个技术点,是否能够胜任这个需求,这个需求的流程,我是否完全都清楚了,这些东西都想不好,那就不是在编程,而是在「拉屎」,而且你拉的这些shit,很可能会把后面的开发者「淹没」,造成一场信任危机。

所以,写一个好代码的时间一定比烂代码花的时间更少。

不过,面对日益压榨严重的资本家们,可能经常不太会给够一个好代码的开发时间,这个时候,就需要对代码进行取舍了,或是找轮子,或是改轮子,总之,要把精力花在刀刃上,一个最佳的原则——make it work, make it right, make it fast,我认为,这是一个代码最佳的生命周期。

系统面试复习路线参考

成年人想要改变生活、逆转状态时,会不约而同做一件事,那就是再次学习。

接下来分享的系统学习资源以详解各大互联网公司的 Android 常见面试题为主线,从面试的角度带你介绍必备知识点,以及该知识点在项目中的实际应用

**帮你在现在的基础上,重新梳理和建立 Android 开发的知识体系。**无论是你短期内想提升 Android 内功实力,突破自己工作中的能力瓶颈,还是准备参加 Android 面试,都会在这份资料中有所一些收获。

从架构基础开始,分了8个模块来逐步从基础进阶到架构师的环节:

多余的话就不讲了,接下来将分享面试的一个复习路线,如果你也在准备面试但是不知道怎么高效复习,可以参考一下我的复习路线,有任何问题也欢迎一起互相交流,加油吧!

首先是超级详细得不能再详细的Android开发学习思维导图,因为图片实在是太大了,所以我就只把二级目录的内容放出来,更加详细的你们可以点击**这里**。

总结

现在新技术层出不穷,如果每次出新的技术,我们都深入的研究的话,很容易分散精力。新的技术可能很久之后我们才会在工作中用得上,当学的新技术无法学以致用,很容易被我们遗忘,到最后真的需要使用的时候,又要从头来过(虽然上手会更快)。

我觉得身为技术人,针对新技术应该是持拥抱态度的,入了这一行你就应该知道这是一个活到老学到老的行业,所以面对新技术,不要抵触,拥抱变化就好了。

Flutter 明显是一种全新的技术,而对于这个新技术在发布之初,花一个月的时间学习它,成本确实过高。但是周末花一天时间体验一下它的开发流程,了解一下它的优缺点、能干什么或者不能干什么。这个时间,并不是我们不能接受的。

如果有时间,其实通读一遍 Flutter 的文档,是最全面的一次对 Flutter 的了解过程。但是如果我们只有 8 小时的时间,我希望能关注一些最值得关注的点。

(跨平台开发(Flutter)、java基础与原理,自定义view、NDK、架构设计、性能优化、完整商业项目开发等)

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

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
img

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

[外链图片转存中…(img-dLeZH4FP-1713309222723)]

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

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-gDxA2BXx-1713309222724)]

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

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值