HarmonyOS鸿蒙最全字节跳动换老板了,我面试也扑街了,滴滴面试题数据分析

img
img

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

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

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

面试扑街经历

一面问的 Java 和 Android 基础

  • Jvm虚拟机
  • messageQueue会不会阻塞ui线程
  • 对象锁和类锁
  • 之字形打印树
  • 还有其他的记不清了,主要是我对二面印象太深刻了。

二面问的 Flutter 和 Dart

  • dart是值传递还是引用传递
  • Widget和element和RenderObject之间的关系
  • widget的root节点
  • mixin extends implement之间的关系(除了extends其他的没怎么用过。。)
  • jvm内存模型(感觉这个是面试官可怜我,看我什么都不会才问的=。=)
  • Future和microtask执行顺序
  • dart中…的用法(基本没用过。。)
  • await for(没用过。。)

说实话,第一个、第三个、第六个我准备的话应该能答出来的,但是一个多月没碰Flutter了,忘了都差不多。。。

此外GitHub和博客维护好很重要,像我这种demo随手写,随手删的人直接GG。。

三面问的Android扩展技术

  • 描述下事件拦截机制
  • hanlder 机制
  • ui卡顿 卡顿的原因 如何监控
  • 热修复的原理是什么
  • 聊聊组件化
  • ndk 有没有写过(肯定没写过啊)
  • sharedperfence原理 commit apply之间的差别 如果写入失败了会怎么样
  • 如何做包体积优化,如果让你做dex包体积优化你会怎么做
  • apt 和gradle transform的差别是什么

apt生成的是java的class,而且不能更改原始的类,而transform这个东西你可以为所欲为,但是毕竟操作的是字节码,风险系数更高,面试官还特地问了我下是不是有classnotfound问题,其实貌似真的发生过,但是想想感觉有些丢人没敢承认,毕竟有点一知半解。

  • .class .java .dex之间的区别是什么

吐了,虚拟机什么的我面试的时候都给忘了。哎,太难了。.java是给开发看的,.class是给机器看的,而.dex是给安卓虚拟机看的。当然这边更多是想问安卓虚拟机相关的,反正答的稀烂

  • okhttp 的拦截器机制 如果让你监控网络请求的耗时你会怎么写

把责任链说了,写了关键字得分了,面试官也没继续往下问,其实还是可以聊聊dispatcher什么的,okhttp的源代码说实话有点深。

  • kotlin 协程和java的线程有什么区别
  • 启动优化是如何做的

我个人拙见哦,启动的东西要么延迟,要换缓存。时间轴总长其实比较难以优化,我们参考的是阿里的starup的任务图模式。

  • 如何只拉起推送进程而不拉起app的进程

死亡题目,完全不知道答案。

  • TraceView 和 Systrace直接的区别

哈哈哈,之前看过,然后忘了,这种东西一阵子不用吧就真的会忘掉。

面试总结:

对于这次的面试我的看法就是真的好难啊。要准备基础还要刷算法题,不仅问Android,还要问jvm虚拟机,顺便问问并发,还要会kotlin,最好还能来个flutter,给各位跪了。

下面是我在这次面试之后做出的一些反思以及对之后面试的一个学习复习方法:

技术储备不够面试被怼

为什么有些程序员就算是开发很多年了,去面试依旧会被怼呢?

大部分原因都来自于:技术储备不够

太多程序员在平时都是做着crud的工作,有些技术都是等到工作上要用到了才去学习,就是因为大家平时用到什么去学习什么,以至于面试的时候面试官问点延伸性或者他需要的人才技术就回答不上了。

简单来说就是:只有当下公司的业务能力,没有解决技术的能力,缺少技术创新的能力。

以至于最后只敢找跟之前公司差不多性质的,缩短了自己的职业规划,工作越找越不满意。

平时应该如何进行技术储备、高效复习呢?

那些底层知识都很枯燥,每次学完就忘,一合上书就忘得差不多了,不知道要怎样学才好了。

其实造成这样的现象最主要的原因是没有掌握系统的学习方法,也没有系统的资料辅助理解和学习。

知识点就是那些,基本上,翻来覆去就是那些换汤不换药的问法。但是现在大家上班要写业务代码,下班又是家庭琐碎,要想自己静下心来好好学习根本不可能,仅仅只是有用信息的筛选就足够麻烦。

1、去学习「自己知道自己不会」的知识

其实在开发过程中,总有一些自己想学但是因为项目压力或者其他原因,然后自己打算放在以后 再学的东西,也就是所谓「自己知道自己不会」的知识。

例如:

  • 比较常用的一些框架,比如客户端的网络请求、图片加载框架
  • 常用的一些类和集合的源码,比如 ArrayList、LinkedList、HashMap(面试必问)
  • 觉得自己无法清晰表达出来的概念,如「内存泄露」、「Java 并发」

这个阶段是一个对自己当前知识体系查漏补缺的一个阶段,你要做的,就是把自己不会的东西完 整的列出来,然后逐个击破。

2、全方位的学习,构建自己的「知识体系」

其实很多人在平时学习技术和日常开发过程中,学了非常多的东西,但很少有人会去系统地复习,从而构建自己的知识体系,导致自己学到的很多知识点没办法更好的产生联系,而且可能会 导致学了某个知识点没过多久就忘了。

那如何构建我们的「知识体系」呢?

Android 里面所谓的「知识体系」,我认为主要包含这几个部分:

  • Java 和 Anroid 基础
  • 计算机网络
  • 操作系统
  • 设计模式
  • 数据结构和算法

也就是说我们需要将这几个部分逐步击破,慢慢完善我们的知识体系,这个阶段是最花时间和精力的,但是坚持下来会让我们的基础变得更加扎实,而且能最大限度的构建我们的知识体系。

3、学习「自己不知道自己不会」的知识

这时候面试题的作用就出来了,「面向面试题编程」其实是一个查漏补缺、增强自己编程基础的非常好的方式。

在做面试题的时候,你会遇到很多奇奇怪怪的问题,很多都是你「之前没有接触过」或者「有接触过却没有往那方面想」的问题。

刚开始遇到这些面试题确实很让人很不舒服,但是这些面试题也确实能够最大限度地提升我们对知识之间联系的理解以及引发我们对一些具体使用场景的思考。

当然更重要的是我们可以通过刷往年各大互联网公司的面试题,让我们对于公司面试题有一个大致的认识而且也能提前了解到面试官面试时候的一些套路和做法。

遇到不懂的面试题直接回答不懂,但最好能将面试官的思路往我们会的东西带。

在面试的时候,切勿不懂装懂

我们面试的是技术岗位,有几斤几两,面试官问几个问题就知道 了,如果面试官问到的某个知识点,你只是有点印象或者没多少了解的话,直接回答这个知识不是很熟就行了。不然被面试官针对这个知识点追加几个问题的话,分分钟打你脸。

当然,在说对这个知识不是很熟之后,可以试着将面试官的面试思路往我们会的东西带,例如我 在阿里二面的时候,面试官问我有没有用过 B 树,因为我对 B 树不是很熟,所以我当时是这么讲 的:“对于 B 树不是很熟悉,但之前在看 HashMap 源码的时候,有研究过红黑树,对红黑树比较熟。” 然后成功地将面试官的问题转向了我熟悉的红黑树和 HashMap 的源码上面。

总结

想要拿到满意的 offer,**「坚持」**是最重要的,抛开了努力和坚持,其他的一切方法论都毫无用处。

任何一个行业都是不容易的,唯有持续的**「有效」**努力,才能走得更远。 以上便是我对于面试的一些经验和体会,希望能对大家有所帮助。

最后很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,下面的学习路线帮你解决问题!

知己知彼才能突破难关,所以这里分享我整理的这份10+家大厂面试真题送给大家:

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


img
img

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

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

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

[外链图片转存中…(img-grwdY6l9-1715826411113)]

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值