前言

年底总是一个充满回顾与展望的日子,在2020这场哀鸿遍野的“寒冬”里尤为明显。

其实不管是公司、集体还是个人,都需要在这个时候找个机会停下来,思考一下这一年来的收获与成长、失去与遗憾。

每个人都有自己的希冀与计划,每个人又同你我一样,是犯有轻微拖延症的普通人。

面向即将到来的一年大家总会立各种 flag,临近年终时又总是自嘲式的将计划延期至新的一年。

2020的收获

2020是一个神奇的一年,发生了许多大事,但回到个人身上也只是一件一件小事。

一件一件小事本没有什么意义,但只要注意积累,重复练习,积少成多,应该也会有一定的价值~
下面总结一些2020年的一些小收获

  • 完成了一次跳槽,顺利进入一线互联网大厂

  • 坚持写文章

  • 坚持了ARTS打卡

  • 坚持了每周的总结与下周规划

2021的展望

  • 做一个100以上star的Github开源项目

  • 读几本计算机原理,计算机网络,数据结构等基础领域的书

  • 掌握flutter的使用与相关原理

  • 继续坚持ARTS打卡

  • 继续坚持每周的总结与下周规划

  • 最后,希望以上都能实现

下面是大家更关心的问题:

怎么挤进一线大厂

腾讯、阿里巴巴、字节跳动、华为、美团、滴滴、百度 ...

一线大厂一般有很多部门负责不同的项目,里面不乏知名大学毕业,技术大牛,往往在某一领域已经做到极致,有专门的团队负责某一功能点(性能优化、性能监控、中间件工具组件等),能投入人力物力去做好项目,并且薪酬福利可观,只是工作强度会很大。

我在一位同事身上看到很多优秀的学习习惯和方法,在这里不得不承认比你优秀的人还比你努力,是什么能让他变得如此优秀?

  • 多写多练,没有捷径 : 知识面广的人一定是不断积累形成的广度,一道难题他能解答,更多的可能在于 1. 这道题他做过 2. 做过相似的题型。 例如 链表中环的检测 ,没有做过或者了解相似题型的人,是很难能够写出答案的,但实际上它并不难。

  • 善于思考,系统性学习 : 例如网络编程 TCP / UDP 工作中接触的概率不大,大多数人都是冲着面试去学的,百度谷歌一下 TCP / HTTP 面试相关,知道有三次握手、四次挥手滑动窗口等,但很难把这些知识内容关联成网状结构,看了没多久又会忘得差不多。这里我建议系统性学习,从文档、书籍中更全面更系统地了解这些内容,加入到大脑的一个记忆分支中。

  • 不要试水,一步到位 : 人都会有侥幸心理,抱着试试看的态度。编码、学习、或者是面试,没有一次性做到位的决心。事实上重构、重新开始、重新面试都会花费更多的时间。像大厂的面试周期都要半个月或者一个月,没有通过的话不仅浪费时间,而且这段时间心情复杂、焦虑、期盼。因此如果想面试跳槽,尽量一步到位、下定决心,把目标放高一些,进不了一线大厂也能找到一个好的公司。

这次换工作差不多花了四个月时间,刷题、复习、学习,面试了数十家小中型公司,但是只面了两家大厂:腾讯和字节跳动,最终去了字节跳动。 两家都是内推的方式,如果身边有大厂的朋友,建议内推试试,避免在 HR 这关被筛了简历。

一些面试资源

今年完成了第一次跳槽,积累了一些面试相关的资源,在这里总结一下,希望对读者有用。

简历

首先是简历,一般找一个模板,填写掌握的技能和项目经历即可。
github上有一个不错的模板,详情可见:https://github.com/CyC2018/Markdown-Resume
项目clone后,个性Resuem.md即可,然后导出为pdf文件。
简历建议长度为2页,太长太短都不好。
建议用掌握与熟练掌握取代了解与精通。

刷题

算法题可以说是现在找工作必刷的了。不过根据我面试的经验,算法题总得来说问的还是比较少,还有一些公司是基本不问算法的。

当然如果碰到字节,快手这种每轮都问算法的公司,如果因为算法题拿不到offer就很可惜了。

算法题就好像高考语文的古诗词默写一样,分不多,但丢了就很可惜了。

根据我的经验,大概刷了,掌握100道题就足以应付面试了。

当然完全掌握需要重复练习,不是刷了一遍就可以的。

这里推荐一下极客时间上覃超的五遍刷题法:

1.第一遍,直接看解法
多解法,比较解法优劣,默写好的解法

2.第二遍,打开leetcode,直接开始写
多种解法比较,调优

3.第三遍,过一天之后,再重复做题

4.第四遍,过了一周,再来反复练

5.第五遍,面试前一周,恢复性训练

通过以上方法重复练习,大概刷100题就足以应付面试,如果每天刷3道,大概准备一个月即可。

Android核心知识点

Android 涵盖点比较广,建议以官方文档为主 : Android 开发者指南 ,官方文档很详细并且几乎覆盖所有的 Api ,如果你想学习Jetpack, 也建议从官方文档入手 Android Jetpack ,比大多数博客更权威,是一种不错的知识和资源获取途径。

可以把 Android 分为以下几个大纲:

1.Android相关源码

学习Android源码有助于我们学习其中的设计模式、思想、架构。熟悉整个源码的架构,有助于我们更加正确地调用 Android 提供的 SDK,写出高效正确的代码。

我把源码相关资料整理成了PDF,内容涵盖MMKV、Retrofit、OkHttp、EventBus、View、Handler、Binder、Glide、JNI的源码深度解析。但由于篇幅原因,只做核心内容截图展示,笔记全文共有486页。

2.Android性能优化

在 Android开发中,性能优化策略十分重要。因为其决定了应用程序的开发质量:可用性、流畅性、稳定性等,是提高用户留存率的关键。

在此献上一份 Android性能优化的详细攻略, 含:优化方向、原因 & 具体优化方案、APP性能优化实践,希望你们会喜欢。

所有知识点详细内容都整理在了开源项目【GitHub】,有需要的可以自取。

3.Android开源框架

随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,还有65535,应用之间的互相调用等等问题,插件化技术应用而生。如果没有插件化技术,美团、淘宝这些集成了大量“app”的应用,可能会有几个g那么大。

所以,当今的Android移动开发,不会热修复、插件化、组件化,80%以上的面试都过不了。

我花了将近半个月时间将Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架整合成了一套系统知识笔记PDF,长达1042页!相信看完这份文档,你将会对这些Android第三方框架有着更深入、更系统的理解。

4.Android Framework

Framework 广泛的应用在各个领域。像掉帧监控,函数插装,慢函数检测,ANR 监控,启动监控,都需要对 Framework 有比较深入的了解,才能知道怎么去做监控,利用什么机制去监控,函数插桩插到哪里,反射调用该反射哪个类哪个方法哪个属性……

Framework的重要性不用多说,为此我整理了一份framework高级开发笔记,部分知识章节发布到了GitHub已经标星18k了 ,今天就拿出来分享给大家。

主要章节:

第一章:深入解析Binder
第二章:深入解析Handler
第三章:Dalvik VM 进程系统
第四章 深入解析 WMS
第五章 PackagerManagerService

按照上面大纲展开拓扑结构学习,最终形成知识大网。当然每个知识点都需要深入探索。

附加参考书籍: 《Android开发艺术探索》 《深入理解ANDROID 卷3》 《Android进阶解密》。

5.NDK模块开发

NDK是原生开发工具包,这套工具允许Android使用C/C++代码,并提供了众多的平台库。

我整理了一套有关NDK的资料,主要内容包含:

  • NDK 模块开发
  • JNI 模块
  • Native 开发工具
  • Linux 编程
  • 底层图片处理
  • 音视频开发
  • 机器学习

6.算法(字节必问)

算法没有什么窍门,多学多练多总结。

训练阶段可以按照

  1. 《算法 第4版》 学习数据结构和算法思想。

  2. 预备了理论知识后开始编码上手, 先按照 《剑指offer》 这本书的算法题目在牛客网上刷题。

  3. 可以说当你把《剑指offer》算法题都刷完了,算法这一关的通过率可以达到 60%。如果想要有更高的造诣,那就按照Leetcode 题解 - 目录上整理的题目大纲以及解题思路,更全面系统的提升算法能力。到达这一步,算法面试的通过率可以达到 90% 。

我自己也整理了一套算法资料,有兴趣的可以瞄一瞄。主要包含一下几个知识点:

①数组-快速排序-第k大个数
②数组-对撞指针-最大蓄水

③数组-滑动窗口-最小连续子数组
④数组-归并排序-合并有序数组
⑤链表-链表反转-链表相加
⑥链表-双指针-删除倒数第n个
⑦二叉树-递归-二叉树反转
⑧动态规划-连续子数组最大和
⑨数据结构-LRU淘汰算法

所有知识点详细内容都整理在了开源项目【GitHub】,有需要的可以自取。

写在最后

这篇博客主要在于总结和复盘,同时也给了大家一个学习的方向。

大厂会系统性的筛选面试者,一二轮面试通过 java、Android 的技术问题了解面试者的基础能力,能到达第三轮面试说明基础能力合格,再通过项目问题考察面试者的项目/合作能力,当然如果是在线面试会有可能让面试者写编程题或者算法题。

对于面试者来说,能做的就是提升面试通过率,系统性学习和总结。

人在年轻的时候,最核心的能力是什么?

我认为是:笃定一件事并有耐心长久坚持的能力。

所谓的幸运,就是当你准备好了的时候,机会来了。

2020年Android开发年终总结之如何挤进一线大厂?的更多相关文章

  1. 2020年Android开发最新整理阿里巴巴、字节跳动、小米面经,你不看看吗?

    前言 2020年是转折的一年,上半年疫情原因,很多学android开发的小伙伴失业了,虽找到了一份工作,但高不成低不就,下半年金九银十有想法更换一份工作,很多需要大厂面试经验和大厂面试真题的小伙伴,想 ...

  2. 2020年Android开发市场真的饱和了吗?

    公司在杭州,根据我的不客观数据体验来看,最饱和的是iOS,同样发布一个职位iOS是其他技术岗位10倍的投递量. 当然Android作为一个已经市场化十余年的技术门类,它必然早已经是成熟常态.这样的技术 ...

  3. Android 开发必备的知识点——JVM基础【转】

    image 1.JVM与操作系统的关系 Java Virtual Machine JVM 全称 Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机.它能识别 .class ...

  4. 我的大学Android开发学习之路——从开始到微信/支付宝/抖音Offer

    前言 笔者2016年高考考入华中科技大学计算机科学与技术专业. 2017年底(大二寒假)拿到今日头条(字节跳动)深圳研发中心Android开发实习生Offer,在深圳研发中心实习至2018年3月. 2 ...

  5. 双非本科Android开发,如何逆袭拿到大厂 Offer?

    从2020年3月18日投出第一份暑期实习简历至今,已经过去400多天.我也尘埃落定,即将去CVTE做Android开发. 休息了很长时间,如今已经能够很平静地回首这段历程,写下这篇文,致敬曾经走过的漫 ...

  6. 化学专业大二转战Android开发,终于拥有了鹅厂暑期实习offer

    我是双非学校,应用化学专业,一年前我大二,现在我大三.一年前我两手空空,现在我拥有了鹅厂暑期实习的offer. 虽然结果是好的,但我春招实习的道路远没有这么简单和辉煌,它是无比坎坷的:每个人应该量力而 ...

  7. 干了六年Android开发现在裸辞失业了,再过2个月就30了,该怎么继续生活?

    这是我在某论坛看到别人分享的故事,觉得可以展开聊一下,对于我们这些中年程序员,可以裸辞吗? 前言 首先介绍一下主人公的情况.目前所在的是一家小的创业公司,待了3年多,薪资一般吧,之前在一家中型上市企业 ...

  8. 40k*16 薪,五年Android开发4轮面试拿下腾讯 Offer !(附真题)

    概述 感觉毕业后时间过得真快啊,从16年6月本科毕业入职了一家不大的公司,到现在快五年了,前段时间金三银四想着找一个新的工作,前前后后花了一个多月的时间复习以及面试,前几天拿到了腾讯的offer,想把 ...

  9. Android开发没有一技之长就废了吗?

    写在前面的话 不知你发现没有,人到中年之后,时间流逝的速度仿佛越来越快? 还记得毕业那会儿,我们怀着新鲜和好奇踏进了职场,那个时候每天都是满满的挑战和需要学习的东西,感觉时间过得真慢啊: 不知道从什么 ...

随机推荐

  1. 三剑客-sed

    1.sed命令概述说明: 字符流编辑工具(行编辑工具) 2.sed命令作用说明: (1)擅长对行进行操作处理 (2)擅长将文件的信息进行修改调整/删除 3.sed具体功能 (1)文件中添加信息的能力( ...

  2. Vsftpd虚拟用户登陆配置(Centos7)

    1 安装Vsftpd服务 # yum install vsftpd -y vsftp虚拟用户是为了保证FTP服务器的安全性,由vsftpd服务器提供的非系统用户账号, 相对于FTP的本地用户来说,虚拟 ...

  3. 17、linux root用户密码找回

    17.1.救援模式: 光盘模式启动(第一启动项) 删除/mnt/sysimage/etc/passwd root的密码,halt重启. 改为硬盘启动模式,无密码进入root,为root新建密码 17. ...

  4. 12.10、elk实用案例

    1.架构图: 服务器名称 ip地址 controller-node1(主) 172.16.1.90 slave-node1(从) 172.16.1.91 2.安装filebeat: filebeat不 ...

  5. Oracle查询wm_concat返回[oracle.sql.CLOB@7D6414ed]之坑!

    在orcale中使用wm_concat函数将字段分组连接. 在linux环境下需要将wm_concat(字段)进行to_char(wm_concat(字段))处理.

  6. 如何在微信小程序的模板渲染中使用JS?

    在微信小程序中使用模板渲染时,可能需要用JS对其进行处理. <view class="price text-red text-lg"> <!-- 价格保留两位小数 ...

  7. logback学习与配置使用

    Logback介绍 Logback 分为三个模块:Core.Classic 和 Access.Core模块是其他两个模块的基础. Classic模块扩展了core模块. Classic模块相当于log ...

  8. nohup &的用法、进程查看以及终止

    p.p1 { margin: 0 0 2px; font: 16px ".PingFang SC" } p.p2 { margin: 0; font: 12px "Hel ...

  9. 《OpenResty 最佳实践》学习开篇

    前言:对openresty学习中,收集了一些相关知识的参考网站,有兴趣的可以看看.另附网盘分享. lua菜鸟教程 openresty最佳实战 lua在线解析工具 Nginx Lua API Nginx ...

  10. spring中如何向一个单例bean中注入非单例bean

    看到这个题目相信很多小伙伴都是懵懵的,平时我们的做法大都是下面的操作 @Component public class People{ @Autowired private Man man; } 这里如 ...