前言
首先介绍一下我的我是双非本科计算机专业毕业的,从毕业时候简历被拒,到现在拿下字节跳动的offer,我花了一年时间。
印象中的今日头条
给的钱多,笔试也贼难
参加过头条笔试的同学都知道,头条笔试可以笔试三次,就是不论你有没有参加都有三次机会。笔试就5道算法题,两个小时,去年第一次看到算法题就自闭了,第一次挂了。第二次又很认真地做,做到一半放弃了。没过几天又邀请我做第三次,有一种强行被侮辱的感觉。
内推被拒
就像我在前面所说的,简历被拒。去年3月份在知乎上看到一个头条大佬说可以内推春季实习,于是私信并发了简历给他。看了我简历之后说头条竞争激烈,我背景不够,点到为止。。(打扰了)我直接心态崩了。
准备面试
背面试题
总的来说,我自己是非常不甘心的,小镇做题家即使努力也不会有结果吗,我开始给自己制定计划,泡图书馆,背面试题,我想着总有一天我能去头条工作。毫不夸张的说,图书馆的凳子就差没被我坐凹进去了。以下是我当时给自己制定的计划。
第1~3个月:基础知识与核心概念
每周目标: 熟悉Android开发的基础知识和核心概念,如Activity、Service、BroadcastReceiver、Content Provider等。
具体任务: 每天背诵并理解Android组件的生命周期和用途。 学习并熟悉AndroidManifest.xml文件的结构和作用。 掌握Android中的基本布局和控件使用。 学习并理解Intent和Intent Filter的使用。
第4~6个月:进阶知识与技术
每周目标: 学习Android开发中的进阶知识和技术,如Fragment、Handler、多线程、网络请求等。
具体任务: 学习Fragment的使用和最佳实践。 掌握Handler和Looper在Android中的应用。 学习并理解Android中的多线程编程,如AsyncTask和IntentService。 熟悉常用的网络请求库,如Retrofit、OkHttp等。 月末检测:完成一些进阶的面试题练习,检查自己对进阶知识的掌握程度。
第7~9个月:系统架构与设计模式
每周目标: 学习并掌握Android系统架构和设计模式,提升代码质量和可维护性。
具体任务:
学习并理解MVC、MVP、MVVM等架构模式。 掌握常见的设计模式,如单例模式、工厂模式、观察者模式等。 学习性能优化和内存管理的相关知识。 月末检测:完成一些涉及系统架构和设计模式的面试题练习,检查自己的理解和应用能力。
第10~12个月:实战经验与项目准备
每周目标: 结合实战经验和项目准备,提升面试中的实际表现。 具体任务: 回顾自己参与过的项目,总结经验和教训。 准备一些常见的面试项目,如新闻阅读器、社交应用等,并深入分析其实现原理和优化策略。 模拟面试场景,进行面试练习和反思。
在整个一年的学习过程中我还会定期参加一些知识类和技术类型的分享活动,也会和一些在大厂实习的同学交流。
攒面试经验
1、多参加面试
我在这一年里,不完全是每天都只是在学习,同时,我也会一遍投递简历,可能在一开始,大多数都是小厂,毕竟多多攒经验才是重要的。后来我也会去投递一些大厂,也遇到过一些大厂的面试。主要是为了锻炼面试时候不慌张,稳住自己的心态。
2、面试复盘
我会把岗位上面试官习惯性问的问题记录下来,每一次的面试都是一次经验,不断地总结不断地复盘,对照自己这段时间以来的学习成果,就知道自己缺少哪一块的知识点。
今日头条一面
-
python和java的相同点及各自的特性
-
和其他业务方合作时,一般谁来owner
-
介绍一下你自己的Android项目,存在哪些问题
-
你说自己做的东西存在很多冗余代码,结合你之前的代码同构经历,怎么复用代码?
-
你刚才提到了继承,它和组合相比有哪些优势和劣势?
-
TCP、UDP全套
-
开发过程中用到的设计模式,举例
-
刚才提到单例模式,说下Android中单例内存泄漏的原因(从生命周期的角度阐述
-
除了MVP还了解过其他架构么?说下MVVM?
-
学校里的项目和公司的项目,在开发过程中的区别(学校的只考虑了可用性,头条要考虑稳定性和可靠性,还要注重顶层设计
-
Android前沿知识有跟进么?源码看得多么?
-
看你有算法经历,之后的规划是做开发还是算法
-
相交链表,手写链表,新建的时候注意相交的部分使用相同一个对象
今日头条二面
-
项目介绍
-
view的事件传递机制
-
activity的生命周期
-
restart方法的调用时机,按home键的调用时机,恢复的调用时机,销毁的调用时机
-
on save/restore instate的时机,谁调用,怎么调用
-
bundle的数据结构,如何存储
-
listview内点击buttom并移动的事件流完整拦截过程
-
多点触控如何传递
-
service的意义
-
android的IPC通信方式,是否使用过
-
service如何实现跨进程通信
-
android的多线程机制
-
asynctask的原理
-
handler原理
-
app启动后是怎样运行的(我答的是mainlooper死循环)
-
线程池的种类,有没有用过
-
http的版本有几种
-
http请求包结构,有几种ContentType
-
http返回码的分类,400和500的区别
-
编程 按XML格式打印view和它的子view
今日头条三面
-
自我介绍
-
Collections和Map的区别,讲讲常用的工具类还有set,map的区别,代替vector的并发类。
-
多线程同步,说了一下理解,然后问怎么解决,答了锁然后问对象锁和方法锁的区别,说说可重入锁
-
view的分发机制
-
n个数中找出m的和,讲了一下思路,问能不能优化
-
怎么在List中删除一个数,要写代码
-
launchMode(这里实习时还花时间总结过,面试时发现不太记得清楚了....)
-
Activity跳转的生命周期
-
实习项目
-
java的反射
-
java中为什么有虚地址(好像是这样问的,就记得关键词是虚地址....)
-
简历上提到的框架原理。RxJava的好处,原理。
面试经验总结
1、简历是一块敲门砖
简历相当于门面,意味着在筛选简历的时候能否收到面试邀约。简历的好坏,至少影响这次面试结果的30%。
简历的注意事项也有蛮多。一定要主要自己有些什么成果及项目经历要及时的更新到自己的简历里面。简历的书写需要符合逻辑性,最好按结构化思维、金字塔原理、STAR原理等进行简历的结构编排。也需要注意好细节,简历里面不要出现错别字。对自己的项目经历要简短清晰的描述,能够数据化呈现就更好。模棱两可往往会让人觉得不自信不靠谱。
2、过硬的核心知识
过硬的核心知识是面试官衡量求职者是否符合岗位需求的关键指标。在面试过程中,面试官往往会针对岗位的核心职责和要求提出一系列的专业问题,如果求职者能够准确深入的回答问题,那么无疑会大大提高面试成功的概率。快速获得面试官的认可。
写在最后
为了助力朋友们跳槽面试、升职加薪、职业困境,提高自己的技术,本文给大家整了一套涵盖Android所有技术栈的快速学习方法和笔记。
网友评论