我是双非学校,应用化学专业,一年前我大二,现在我大三。一年前我两手空空,现在我拥有了鹅厂暑期实习的offer。

虽然结果是好的,但我春招实习的道路远没有这么简单和辉煌,它是无比坎坷的;每个人应该量力而行,找到自己舒适的学习方法和学习节奏,不要一味地抱着“抄作业”的心态生搬硬套。

自学的漫漫长路

我是2020年6月正式开始转行自学的,而我的实习offer是在2021年4月初拿到的,所以其实给我自学的时间不到一年,而且因为我还要上本专业的课程,作业、实验、考试等都在占据我为数不多的时间,时间对我来说真的很宝贵,所以合理的安排是十分关键的。

我的自学路线参考的是GitHub上很火的一张Android学习路线,由于图片太大仅展示大标题,有需要的朋友移步文末获取完整版。

我的目标是在春招中可以找到一份实习工作,所以我的计划都是为了达到这个目标而制定的。了解自己需要什么,拒绝盲目很是关键。

由于那张学习路线实在是太吓人,所以我们必须要围绕自己的目标缩减那份庞大的学习路线。由于我要找的是一份实习,公司对实习生的要求并不会太高,注重基础的同时增加亮点,这足矣给我找到实习的机会。

于是我的学习安排就是:

第一阶段:Java面向对象编程

1.Java基本数据类型与表达式,分支循环。

2.String和StringBuffer的使用、正则表达式。

3.面向对象的抽象,封装,继承,多态,类与对象,对象初始化和回收;构造函数、this关键字、方法和方法的参数传递过程、static关键字、内部类,Java的垃极回收机制,Javadoc介绍。

4.对象实例化过程、方法的覆盖、final关键字、抽象类、接口、继承的优点和缺点剖析;对象的多态性:子类和父类之间的转换、抽象类和接口在多态中的应用、多态带来的好处。

5.Java异常处理,异常的机制原理。

6.常用的设计模式:Singleton、Template、Strategy模式。

7.JavaAPI介绍:种基本数据类型包装类,System和Runtime类,Date和DateFomat类等。

8.Java集合介绍:Collection、Set、List、ArrayList、Vector、LinkedList、Hashset、TreeSet、Map、HashMap、TreeMap、Iterator、Enumeration等常用集合类API。

9.Java I/O输入输出流:File和FileRandomAccess类,字节流InputStream和OutputStream,字符流Reader和Writer,以及相应实现类,IO性能分析,字节和字符的转化流,包装流的概念,以及常用包装类,计算机编码。

10.Java高级特性:反射、代理和泛型。

11.多线程原理:如何在程序中创建多线程(Thread、Runnable),线程安全问题,线程的同步,线程之间的通讯、死锁。

12.Socket网络编程。

第二阶段:Java Web开发

1.Java解析XML文件DOM4J。

2.MySql数据库的应用、多表连接查询的应用。

3.Jsp和Servlet应用。

4.Http协议解析。

5.Tomcat服务器的应用配置。

6.WebService服务配置应用。

第三阶段:android UI编程

1、Android开发环境搭建:Android介绍,Android开发环境搭建,第一个Android应用程序,Android应用程序目录结构。

2、Android初级控件的使用:

TextView控件的使用

Button控件的使用方法

EditText控件的使用方法

ImageView的使用方法

RadioButton的使用方法

Checkbox的使用方法

Menu的使用方法

3、Android高级控件的使用:

Autocompletion的使用方法

ListView的使用方法

GridView的使用方法

Adapter的使用方法

Spinner的使用方法

Gallary的使用方法

ScrollView的使用方法

4、对话框与菜单的使用:

Dialog的基本概念

AlertDialog的使用方法

DatePickerDialog的使用方法

Menu的使用方法

自定义Menu的实现方法

5、控件的布局方法:

线性布局的使用方法

相对布局的使用方法

表格布局的使用方法

6、多Acitivity管理:

AndroidManifest.xml文件的作用

Intent的使用方法

使用Intent传递数据的方法

启动Activity的方法

IntentFilter的使用方法

Activity Group的使用方法

7、自定义控件实现方法:

自定义ListView的实现方法

可折叠ListView的使用方法

自定义Adapter的实现方法

自定义View的实现方法

动态控件布局的上实现方法

第四阶段:android网络编程与数据存储

1、基于Android平台的HTTP通讯:

Http协议回顾

Apache Commons 工具包介绍

使用Get方法向服务器提交数据的方法

解析服务器响应数据的方法

使用POST方法向服务器提交数据的实现方法

向服务器提交非文本数据的实现方法

使用Http协议实现多线程下载

使用Http协议实现断点续传

2、Android数据存储技术:

SQLite3数据库简介

SQL语句回顾

SQLite3编程接口介绍

SQLite3事务管理

SQLite3游标使用方法

SQLite3性能分析

访问SDCard的方法

访问SharedPreferences的方法

第五阶段

学完上面这些差不多算入门的初级程序员了,可以在公司里干很多体力活了,但是一些很重要的任务还是做不了。为了能面上腾讯,还是得加把劲呀。这是后续的学习路线:

  • 需要学习的内容就很多了,如下所示:
  • AIDL:熟悉AIDL,理解其工作原理,懂transact和onTransact的区别;
  • Binder:从Java层大概理解Binder的工作原理,懂Parcel对象的使用;
  • 多进程:熟练掌握多进程的运行机制,懂Messenger、Socket等;
  • 事件分发:弹性滑动、滑动冲突等;
  • 玩转View:View的绘制原理、各种自定义View;
  • 动画系列:熟悉View动画和属性动画的不同点,懂属性动画的工作原理;
  • 懂性能优化、熟悉mat等工具懂点常见的设计模式

学习方法

阅读进阶书籍,阅读Android源码,阅读官方文档并尝试自己写相关的技术文章,需要有一定技术深度和自我思考。在这个阶段的学习过程中,有2个点是比较困扰大家的,一个是阅读源码,另一个是自定义View以及滑动冲突。

如何阅读源码呢?这是个头疼的问题,但是源码必须要读。阅读源码的时候不要深入代码细节不可自拔,要关注代码的流程并尽量挖掘出对应用层开发有用的结论。另外仔细阅读源码中对一个类或者方法的注释,在看不懂源码时,源码中的注释可以帮你更好地了解源码中的工作原理,这个过程虽然艰苦,但是别无他法。

如何玩转自定义View呢?我的建议是不要通过学习自定义view而学习自定义view。为什么这么说呢?因为自定义view的种类太多了,各式各样的绚丽的自定义效果,如何学的玩呢!我们要透过现象看本质,更多地去关注自定义view所需的知识点,这里做如下总结:

  • 搞懂view的滑动原理
  • 搞懂如何实现弹性滑动
  • 搞懂view的滑动冲突
  • 搞懂view的measure、layout和draw
  • 然后再学习几个已有的自定义view的例子
  • 最后就可以搞定自定义view了,所谓万变不离其宗

春招的坎坷

看我上面学习的知识量就能知道,我的简历是非常单薄的,而且我又是双非学校的转行生,这让我处于极其不利的位置。

我在三月初开始投递简历,起初只是投了一些小公司,想着先通过小公司积累经验,然后再鼓起勇气去投大公司。所以我投大公司其实就是抱着碰碰运气的心态投的。但是小公司一直都没有回应的消息,简历一直处于审核状态,倒是大公司很快就进入面试状态了。第一家就是腾讯。

这让我很紧张,我没想到我最想去的公司会是我的第一场面试。

我和面试官约好晚上7点电话面,虽然是电话面,但我还是难以抑制自己紧张的心情。我提前一小时就坐在宿舍的椅子上,不停地翻着手中的复习资料却坐立难安,时不时盯着桌上的手机生怕它突然响起,不停地咽口水,时不时咳嗽。我确实特别紧张,脑子里想着面试官会怎么刁难我、会问什么问题、我该怎么回答。最后颤颤巍巍地接起了面试官的电话。

幸运的是,很顺利,一面电话面,面的都是一些基础,没有算法题。一面的面试官说我一开始很紧张,声音都在发抖,后面渐渐地就很有自信,表达方面也比较清晰,基础还是学的很不错。

听到面试官的评价,我当时心中就乐开了花,能得到鹅厂面试官的肯定让我充满了自信,自己的努力得到了他人的认可,那种感觉真的很棒很棒。我开始幻想难道我难道可以进鹅厂?可是很快,梦就被打碎,狠狠地击碎。

二面是视频面,我心想着自信自信,一定要自信,结果上来面试官第一个问题就把我问蒙了:如何设计一套图片加载框架;三级缓存。为什么选择LruCache?我尝试着挣扎回答了一些自己的想法,但都被否定,大部分时间都是安静的,安静的让人害怕。好不容易跳到了下一个问题,“红黑树怎么实现的?说一下它的插入逻辑”“IntentService原理”......安静,还是安静。

渐渐地我乱了分寸,我开始想着自己这次肯定是要挂了,回答的声音越来越小,脑袋越来越低,自信这个对于我来说最重要的东西彻底的丢失了。

压死我的最后一根稻草是力扣的原题62. 不同路径,听到面试官念这个题的时候我心里又燃起了希望,这不就是个简单的DP嘛,紧接着面试官一句话让我产生了疑惑,“三分钟内给我答案”,不coding直接报答案?我想着手算能不能算出来,但三分钟对我来说是不够的。面试官冷冷地说了一句:“你知道这是个什么问题吗?”,“动态规划?”,“这是个组合数学问题!”

我的信心崩溃的很彻底,脑子基本停止运转了。二面挂了。雪上加霜的是,投递小公司的简历被刷了。这让我对自己陷入的深深地怀疑之中,“我是不是找不到实习了?我是不是该去考个计算机的研再来找工作?我是不是......我该怎么办?”

可是哪里有时间给我多想,腾讯又接到了另外一个部门一面的通知,阿里也接到了一面的通知。我扇了自己两个巴掌又投入到了面试中。

这次腾讯一面是视频面,面试官问的都是很基础的问题,但这次我说的结结巴巴,我的嘴像是不受我控制,明明一开始说的好好地,慢慢地慢慢地声音就开始变弱变小,突然的哑火让面试官和我都措手不及,我老是自己打断自己的思路,说着说着开始自暴自弃。我逐渐的意识到我还没有走出上一次面试的阴影中,我丢失了我最需要最重要的自信。我向面试官解释、倾诉,我并不是想得到面试官的可怜,我只是不想让那次的不甘与颓废憋在心里,它影响了我这次面试,但我并不想让它影响我下一次面试。我向面试官道歉,因为我占用他的时间只是听我倾诉,浪费了一次宝贵的面试。这次面试不出所料的挂了,但我如释重负。

紧接着就是阿里的面试,三面都是电话面,一面面试官主要问的是基础,二面面试官主要问了Java相关,三面面试官主要问编程相关。我表现得还不错,哪怕不会我都会和面试官积极沟通思路,请求他给予提示,而不再是单纯的泄气和自暴自弃。我一次又一次地将自信紧紧攥在手心里,我告诉自己我可以。

另一边腾讯也顺利的通过了二面,对,我再一次被腾讯捞起来(第二次被捞)继续面试,但这次我挺进了HR面。

一切看起来都是那么顺利,就在我做着选阿里还是腾讯的梦时,阿里HR的一通电话又击碎了我的梦。“我看你本科是学化学的,简历上也没有什么实习经历和项目经历,你投的是我们这边的核心部门,我很担心你能否胜任这个岗位。”,“这么跟你说吧,我这边有很多有丰富经验的研究生,他们也在和你竞争同一个岗位,就是这么现实。”

我唯唯诺诺的听着HR说着,也不知道该说什么,她说的都没错,我看着自己单薄的简历叹了口气。想不到会被阿里HR这样刷掉......

不过腾讯HR面是比较顺利的,我也就如愿拿到了鹅厂的offer。

分享一些小技巧

最后我分享一些自己的方法和经验,尽量不说一些四处可见的经验,希望能够帮助到大家。

我的学习以视频为主,书籍为辅

  • Java相关:B站
  • Android相关:B站,官方文档
  • 算法:AcWing,LeetCode
  • 项目:GitHub

初学者不要深究一个问题太久,目前这个知识点不会,可以暂且放一放,不要停滞不前。

不要在简历上暴露自己的弱点。 面试官是根据简历的内容来提问,所以一定要注意简历的用词,实事求是,不要夸大也不要谦虚。比如我就没有在简历上写操作系统,因为我学的并不扎实,面试官也没有问我操作系统的问题。

刷面经,这一点很重要。在面试的前一个月我就利用爬虫把网上的Android面试题爬取,然后一个问题一个问题的过,并做了一份笔记。

需要的可以 点赞支持一下 后,然后【点击这里免费获取

数据结构与算法,这个都被说烂了,但确实特别重要。个人感觉我的算法题刷的还是可以的,LeetCode题量400+,周赛平均能A 3题。在腾讯的面试中,面试官直接给腾讯文档在线写题,一面4题40分钟我A了3个,二面5题50分钟我A了4个,这给我的面试很大的加分,一定要重视。面试时的算法题一般是LeetCode类型,笔试题是ACM型。

扎实的基础知识。 这个看起来很模糊很宽泛,学到什么程度才是熟悉,学的多好才算扎实。我认为,对于我们求职者而言,能拿下面试官的问题,那么这个知识点就是熟悉,面对面试官的追问能够有理有据的应对,那么这块知识点就学的很扎实。所以在刷面经时,希望你能够自己问自己一些问题,不要仅仅停留在面经的问题上。

这是我收集整理的一份Android开发核心知识笔记,需要的朋友【点击这里免费获取】。

我给这篇文章的定位是一篇经历分享而不是一篇面经分享,所以大多笔墨都是在平铺直叙我这一年来是如何走过的。

我试图让大家能够了解我,认识到我真的只是一个普普通通的、双非学校的、化学专业的大三学生,而不是一个大佬,我想证明的是,凭借自己的努力,做好充足的准备是可以得到一个满意的结果的。

回看自己的三月,在背知识点、刷题、面试中度过 ,期间有苦恼,有怀疑,有高兴,有得意......

最后,我转身成功,曾经一起“搬砖”的工友发来了祝贺;打数模的队友也为我高兴;周边质疑的声音渐渐消去,取而代之的是羡慕与崇拜的目光......

但是,还远远没有结束,这只是我故事新的开始。希望每个人都能得到自己满意的答案。

化学专业大二转战Android开发,终于拥有了鹅厂暑期实习offer的更多相关文章

  1. 设计模式笔记之二:Android开发中的MVP架构(转)

    写在前面,本博客来源于公众号文章:http://mp.weixin.qq.com/s?__biz=MzA3MDMyMjkzNg==&mid=402435540&idx=1&sn ...

  2. android高速上手(二)android开发环境搭建及hello world

    基本了解了java语法,下一步.我们一起开启hello world的神奇之旅. (一)android开发环境搭建 之前搭建android开发环境是件很费力的事情,下载Eclipse.安装ADT等,现在 ...

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

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

  4. 记拿到鹅厂前端开发暑期实习offer的经历

    #想起来时的路 在真正拿到腾讯实习offer之前,也是看过不少人的面经,心生向往.很早在入前端坑之前,我就想着大四的时候有机会要尝试去腾讯里实习. 大一入门语言就是C++,这让我很无奈,所以我很快的就 ...

  5. 大疆无人机 Android 开发总结——视频解码

    DJI_Mobile_SDK是大疆为开发者提供的开发无人机应用的开发接口,可以实现对无人机飞行的控制,也可以利用无人机相机完成一些视觉任务.目前网上的开发教程主要集中于DJI 开发者社区,网上的资源非 ...

  6. appium环境搭建(二)----搭建android开发环境

    一.安装Java环境: java 环境分JDK 和JRE ,JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境. JRE ...

  7. A10 平板开发二搭建Android开发环境

    我是直接在Ubuntu 12.10 64位系统下操作的,搭建Ubuntu开发环境类似,见Ubuntu 10.04开发环境配置.需要注意的是,64位的系统,需要安装支持32位的库(sudo apt-ge ...

  8. 大三小学期 Android开发的一些经验

    1.同一个TextView几种颜色的设置: build=(TextView)findViewById(R.id.building); SpannableStringBuilder style = ne ...

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

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

随机推荐

  1. 『无为则无心』Python序列 — 18、Python列表概念及常用操作API

    目录 1.列表的概念 (1)列表的定义 (2)列表的应用场景 (3)列表的定义格式 2.列表的常用操作 (1)列表的查找 1)通过下标查找 2)通过方法查找 3)判断是否存在 (2)列表的增加 @1. ...

  2. 对volatile的理解--从JMM以及单例模式剖析

    请谈谈你对volatile的理解 1.volitale是Java虚拟机提供的一种轻量级的同步机制 三大特性1.1保证可见性 1.2不保证原子性 1.3禁止指令重排 首先保证可见性 1.1 可见性 概念 ...

  3. Docker安装单点RabbitMQ

    环境准备 Centos 7.5 docker环境 安装步骤 拉取镜像 $ docker pull rabbitmq:management 说明: 获取rabbiymq镜像的时候要记得获取managem ...

  4. 资源:docker离线安装包下载路径

    docker安装包下载路径: docker所有版本:https://download.docker.com/linux/static/stable/

  5. Linux之 du的用法

    du 显示目录和文件的大小,常用命令为 du -sh * du -sm * | sort -n //统计当前目录大小 并按大小 排序 du 无参数 显示当前路径下的目录大小和子目录大小 -b/-k/- ...

  6. 微信app支付,完整流程,完整代码 (转)

    微信app支付流程 需要的配置参数 private function wechat($body,$indent_id,$cou,$user_id,$total_fee,$ip,$domain,$non ...

  7. ESP32智能配网笔记

    基于ESP-IDF4.1 #include <string.h> #include <stdlib.h> #include "freertos/FreeRTOS.h& ...

  8. Linux | 搜索命令

    grep grep 命令用于在文本中执行关键词搜索,并显示匹配的结果,格式:grep[选项][文本] grep命令的参数及其作用 参数 作用 -b 将可执行文件当作文本文件对待 -c 公显示找到的行数 ...

  9. postgresql安装及配置

    目录 1. 安装 2. PostgrepSQL的简单配置 2.1 修改监听的ip和端口 2.2 修改数据库log相关的参数 2.3 内存参数 3. 数据库的基础操作 3.1 连接数据库控制台 3.2 ...

  10. 【分布式】CAP理论及其应用

    CAP Theorem CAP 指的就是 "consistency 一致性","availability 可用性" "partition-tolera ...