渣硕自学两年转行Android,零经验春招拿美团30w年薪offer,HR说我是头一个!

前言

本人为某末流211工科硕士, 找工做时,常常在网上找资料学习、面经刷题,为回馈朋友们,写下这篇分享贴,也算是对我求学生涯的总结。前端

说来使人感慨,个人考研之路异常曲折,每次都以为本身能十拿九稳,结果每次都阴差阳错,失之交臂。第一次由于那年目标院校大幅度提高初试线,致使差一分未过线;第二次换了学校,初试分数超复试线40多分,可是复试拉胯也未能上岸,直到第三次又换了个学校才最终如愿。虽然耽误了两年时间,但如今想来那段时期也让我明白了本身到底想要什么以及怎么去争取。java

研究生期间,由于所在教研室有许多秋招的师兄师姐,因此也亲眼目击了工科专业的就业艰辛,当时你们的广泛薪资都在15w左右,而且好的研究所,企业都会要求本科学历。我清楚的知道本科普通一本的我,想要在两年后的秋招里签一个目标企业十分困难。因此个人目标很简单,就是薪资与发展前景,我并不在乎地理位置,哪里给的薪资高就去哪里,当时并无考虑过性价比,work life balance等等这些因素,总以为大不了攒点钱去个轻松点的城市过完一辈子,如今想来当时的本身的这个想法属实幼稚。 linux

命运多舛

研一时了解到计算机行业的广泛薪资都挺高的,一开始以为算法岗又不累,工资又高,因而就想着去学算法(又单纯了。。),在一个学期内断断续续学习了吴恩达的机器学习课程,当时以为这些算法跟线代,优化知识联系很紧密,也能很快接受这些知识。将算法课程看完以后,发现本身路走错了,网上铺天盖地宣传算法岗诸神黄昏,难如登天,大量科班毕业生纷纷转开发。我又审视了本身的条件,本身非科班出身,也不可能去实习,难道还能竞争得过科班大佬吗。因而我就放弃了算法岗,准备转开发。程序员

开发岗只是一个归纳,包括前端,后端,移动端,测开等等,但当时的本身一头雾水,身边也没有能够借鉴的人,只能硬着头皮往下学,当时只知道本身要学java,不知道本身要用java来作什么,学习也仅限于java se知识,对于数据库,各类框架等等一律不知。面试

到次年6个月份开始试水秋招提早批,海投简历。当时给本身定了一个年薪20w的目标,但只掌握了java se知识,对于招聘需求里要求的标准差的很远。而且因为非科班,简历上没有可写的项目,因而在网上找了些实战课程,一面试才知道都是些烂大街的了。直到10月份才签到了深圳的一家不知名公司,当时给的薪资是15*15-16。到这里我以为不能再这样海投了,消耗精力是一方面,本身也没空进行总结提升,只能是越面越烂。由于手里有了一个保底的offer,因而我就中止投递。redis

因为在秋招见识到了后端的艰难形势,而且经过浏览各类帖子了解到客户端并不像后端同样竞争惨烈,以为本身仍是要转客户端为妙,虽然也有不少人唱衰客户端但对于当时的我来讲并无太多的选择,我我的对岗位要求很少,能让我实现秋招目标就能够接受。因而从11月开始专心学习客户端。一直到1月份,把郭霖的第一行代码过了一遍,并跟着作了书里的项目,同时也在刷一些算法题直到寒假。算法

柳暗花明

寒假期间仅仅看几道常见面试题,到了年后2月底开始正式投递简历,当时给本身定的目标是年新30w,在春招期间并无像秋招时那样海投,只投了一些有名气的公司,包括腾讯、字节、美团、滴滴、顺丰、vivo、陌陌,其中滴滴的面试因为时间冲突放弃了。春招给个人感受并无秋招那么难,投递的公司基本上都过了笔试,多是跟岗位选择有关,也有多是春招竞争并无那么激烈,最后拿到了美团、顺丰、vivo的offer并选了美团。下面是部分面经,但愿能给提早批或者秋招的同窗一些借鉴。 数据库

面经总结

面经答案解析已整理成PDF,须要点击这里自取

腾讯一面 50分钟

1.MVVM与mvc、mvp架构的区别与联系编程

2.mvvm用到的设计模式小程序

3.viewmodel的实现原理

4.viewmodel怎么更新数据的

5.安卓的线程通讯

6.looper阻塞为何不会形成ANR

7.广播里怎么执行耗时操做

8.阻塞多久会出现ANR

9.开发遇到的一些异常,怎么处理

10.线程安全的队列有哪些

11.concurrenthashmap详解

12.fragment的生命周期

13.安卓里解决多线程冲突的方法

14.volatile详解、synchronized详解,二者区别

15.activity生命周期

16.onStart与onResume解释

17.安卓中进程间通讯方式

18.内核态与用户态

19.redis原理

20.redis怎么保证原子性

21.TCP传输中header里的字段

22.http状态码

23.Java GC机制

24.进程、线程、协程的联系与区别

25.死锁的必要条件

26.银行家算法

27.TCP拥塞控制

28.四次挥手详解

29.TCP与UDP区别

30.TCP怎么保证可靠传输

31.DNS解析过程

32.TCP报文里的字段 

33.算法题:计算二叉树的高度(递归与非递归两种方式)

腾讯二面,35分钟

1.mvvm,mvp,mvc

2.详细介绍项目

3.网络传输层的协议

4.TCP报头

5.TCP三次握手,为何三次

6.linux内存管理机制

7.虚拟内存与物理内存

8.经常使用数据结构

9.堆排序原理

vivo一面 45分钟

1.面向对象三大特性,多态怎么实现

2.静态方法与变量是否能够继承,缘由

3.Java代理是否用过,怎么实现

4.Java异常详解

5.项目中遇到的异常

6.线程安全的队列

7.类加载的过程

8.类加载器,双亲委派模型

9.对象生命周期

10.判断对象是否能够回收的方法

11.有哪些GC roots

12.Java引用类型

13.抽象类与接口区别,各自优缺点

14.Java线程间通讯, volatile详解、synchronized详解

15.线程的状态

16.进程、线程、协程

17.死锁怎么形成的

18.线程池详解

19.线程池怎么作到线程复用

20.thread local详解

21.Java泛型,泛型擦除机制

22.TCP与UDP区别,优缺点

23.TCP可靠传输机制

24.介绍http协议

25.https请求流程

26.b树、b+树、红黑树

27.红黑树怎么增长、删除节点

28.输入一个URL到网页显示的过程

29.localhost 与127.0.0.1的区别

30.MVVM、MVC、MVP的区别与联系,各自优缺点

31.activity的生命周期

32.安卓中的数据存储,sharedpreference详解

字节一面 1小时

1.进程、线程、协程

2.进程间能共享内存吗

3.安卓中挂起函数怎么实现的

4.安卓中实现多线程的方法

5.线程池详解

6.线程池设计模式,怎么本身设计一个线程池

7.handler详解,是否会内存泄漏,泄露的原理

8.匿名内部类,原理是什么

9.Java GC算法

10.Java引用类型,弱引用的做用,引用队列。

11.安卓图片缓存,加载

12.安卓中的布局,布局优化方法,经常使用标签

13.安卓四大组件

14.activity四大启动模式

15.onnewintent方法

16.本地广播

17.jetpack组件

18.viewmodel设计模式,mvc,mvp,mvvm介绍

19.retrofit的具体实现,其中接口的做用,注解的做用

20.hashtable,hashmap与 concurrenthashmap详解

21.哈希冲突解决方法,

22.算法题:随机生成不重复的100个数0-99

字节二面,50分钟

1.https详细介绍

2.get与post区别

3.请求状态码

4.cookie与session

5.Java内部类

6.泛型擦除机制

7.Java内存回收

8.GC roots

9.Java加锁方式

10.线程安全的单例模式(双重检测),为何要两次判断,volatile做用

11.安卓的事件分发机制

12.算法题的最大宽度,写出最优解

字节三面,50分钟

5道代码题

1.写一个泛型方法,实现删除数组中的元素功能

2.写一个单例模式

3.返回二叉树的第k大数

另外两个记不得了,代码写的不好,因此三面卒。。。

顺丰一面,30分钟

1.面向对象三大特性与面向过程区别

2.怎么判断对象相等,equals详解

3.抽象类与接口区别

4.Java跨平台的缘由

5.JVM,GC算法

6.安卓view绘制流程

7.view怎么确认位置与大小,测量模式

8.经常使用的viewgroup,与view区别,在事件处理过程当中有什么区别

9.安卓事件传递机制

10.listview详解,缓存机制与recyclerview区别

顺丰二面,15分钟

1.项目详细介绍

2.安卓中的listview与recyclerview

3.安卓中的网络请求方式

4.项目中的设计模式

陌陌一面,40分钟

1.项目介绍,难点

2.看代码说运行结果

3.栈帧的概念

4.锁的概念,加锁缘由

5.进程、线程、协程

6.activity四大启动模式

7.事件分发机制

8.mvc,mvp,mvvm架构

9.用过的设计模式

10.线程安全的数据结构

11.app编译过程

12.http协议介绍

13.https求解过程

14.TCP三次握手,可靠传输机制

15.快排的事件,空间复杂度

陌陌二面 ,30分钟

1.Java字符串详细介绍

2.JVM内存详细介绍,对象,变量等存储位置

3.OOM,怎么解决

4.进程、线程、协程

5.建立线程的方式

6.线程池详解

7.线程生命周期,状态

8.循环引用,怎么避免

9.内存泄漏,怎么排查

10.mvc,mvp,mvvm架构,怎么选用合适的架构方式

11.安卓的网络请求

12.安卓中的数据存储方式

13.fragment与activity间的通讯

14.activity启动方式对fragment的影响

15.域名劫持

16.http header介绍

17.get与post区别

18.跨进程通讯方式

美团一面,1小时

1.安卓项目介绍

2.mvc,mvp,mvvm架构

3.jetpack组件

4.lifecycle介绍

5.viewmodel实现原理

6.retrofit介绍

7.retrofit怎么实现多线程

8.线程池详解

9.多线程会遇到什么问题

10.死锁的条件,手写一个死锁代码并运行出来

11.怎么避免死锁问题

12.可重入锁

13.安卓怎么进行ui操做

14.安卓点击事件的处理

15.下拉刷新原理

16.安卓存储方式

17.contentprovider介绍,能实现耗时操做吗

18.service介绍,生命周期与 contentprovider区别

19.https请求过程

20.算法题:返回第k大的数,先说下你能想到的方法,再选一个最优方法。

美团二面,50分钟

1.Java入口函数

2.方法签名

3.方法修饰符

4.static关键字详解,说下本身知道的关键字

5.Java基本类型

6.字符串详解

7.字符串的经常使用操做

8.Java io

9.Java异常介绍,是否全部异常都须要捕获

10.对Java抽象的理解

11.接口与抽象类区别

12.类编译过程

13.介绍对安卓中intent的理解

14.自定义view过程

15.介绍service

16.service与activity通讯

17.输入URL到返回页面的完整过程

18.怎么加速http链接

19.虚拟内存

20.线程并发会遇到哪些问题,怎么解决

21.详细介绍本身的项目能够有哪些改进的地方

22.算法题:二分法查找目标数

捉襟愚见

关于求职的感想: 1.早作准备很重要,提早实习是一个很好的选择。 2.要多跟人交流,学习,因为我本身前期学习时不多跟人沟通,走了许多弯路。 3.经验贴最好不要看太多,选择一个适合本身的坚持下去。对于校招生来讲,转行没想象中那么难,我给本身天天分配的计算机学习时间大概在2-3小时左右,其它时间仍是要作本身的课题,因此我能作到的,相信大家也能够,并且确定能比我作得更好。

回顾整个研究生期间,本身求职目标经历算法岗->后端开发->安卓开发的转变,从这一方面看,我老是在逃避遇到的困难,想着走捷径跨过去,也但愿本身之后能改正这个缺点。但无论怎么样,我算是实现了预约的目标,虽然拿的是白菜价offer,可是我已经比较知足了,人的欲望是无止境的,我深知本身的水平,接下来就是好好工做,思考之后的路怎么走。

最后推荐一些我以为不错的学习资料给你们,若是能帮助到大家就更好不过了。

  • 架构师筑基必备技能

目前Android APP开发主流语言就是Java语言,Java语言最大的特性就是提升了软件的交互可能性,能够说安卓手机几乎全部应用程序都是利用Java语言来进行编写的。

知识要点: 一、深刻理解Java泛型 二、注解深刻浅出 三、并发编程 四、数据传输与序列化 五、Java虚拟机原理 六、高效IO

架构师筑基必备技能

  • 设计思想解读开源框架

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

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

知识要点: 一、热修复设计 二、插件化框架设计 三、组件化框架设计 四、图片加载框架 五、网络访问框架设计 六、RXJava响应式编程框架设计

设计思想解读开源框架

  • 360°全方位性能调优

在不一样层次的开发工程师手里,由于技术水平的良莠不齐,即便不少手机在跑分软件性能很是高,打开应用依然存在卡顿现象。

另外,随着产品内容迭代,功能愈来愈复杂,UI页面也愈来愈丰富,也成为流畅运行的一种阻碍。综上所述,对APP进行性能优化已成为开发者该有的一种综合素质,也是开发者可以完成高质量应用程序做品的保证。

一、设计思想与代码质量优化

二、程序性能优化

  • 启动速度与执行效率优化
  • 布局检测与优化
  • 内存优化
  • 耗电优化
  • 网络传输与数据储存优化
  • APK大小优化

三、开发效率优化

  • 分布式版本控制系统Git
  • 自动化构建系统Gradle

四、项目实战

  • 启动速度
  • 流畅度
  • 抖音在APK包大小资源优化的实践
  • 优酷响应式布局技术全解析
  • 网络优化
  • 手机淘宝双十一性能优化项目揭秘
  • 高德APP全链路源码依赖分析
  • 完全干掉OOM的实战经验分享
  • 微信Android终端内存优化实践

360°全方位性能调优

  • Android框架体系架构

Android框架体系架构(高级UI+FrameWork源码) 这块知识是现今使用者最多的,咱们称之Android2013~2016年的技术。

Android开发者也每每由于网上Copy代码习惯了而致使对这块常常“使用”的代码熟悉而又陌生:熟悉的是几乎每天在和它们打交道, 每天在复制这些代码 ;陌生的是虽然每天和这些代码打交道,可是并无深刻研究过这些代码的原理,代码深处的内涵。

本篇知识要点: 一、高级UI晋升 二、Android内核组件 三、大型项目必备IPC 四、数据持久与序列化 五、Framework内核解析

Android框架体系架构

  • NDK模块开发(音视频系列)

NDK(Native Development Kit缩写)一种基于原生程序接口的软件开发工具包,可让您在 Android 应用中利用 C 和 C++ 代码的工具。经过此工具开发的程序直接在本地运行,而不是虚拟机。

在Android中,NDK是一系列工具的集合,主要用于扩展Android SDK。NDK提供了一系列的工具能够帮助开发者快速的开发C或C++的动态库,并能自动将so和Java应用一块儿打包成apk。

本篇知识要点: 一、NDK开发之C/C++入门 二、JNI模块开发 三、Linux编程 四、底层图片处理 五、音视频开发 六、机器学习

NDK模块开发

  • Flutter学习进阶

2019 年无疑是 Flutter 技术如火如荼发展的一年。

每个移动开发者都在为 Flutter 带来的“快速开发、富有表现力和灵活的 UI、原生性能”的特点和理念而痴狂,从超级 App 到独立应用,从纯 Flutter 到混合栈,开发者们在不一样的场景下乐此不疲的探索和应用着 Flutter 技术,也在面临着各类各样不一样的挑战。

本篇知识要点: 一、Flutter跨平台开发概述 二、Windows中Flutter开发环境搭建 三、编写你的第一个Flutter APP 四、Flutter Dart语言系统入门 ......

Flutter学习

  • 微信小程序开发

微信小程序做为如今比较火的编程开发应用场景之一,深受市场的青睐,这让很多开发者眼馋不已。可是对于初学者来讲,就彻底摸不着头脑了,不知道微信小程序开发制做须要学习那些知识,有须要的朋友能够参考本篇。

本篇知识要点: 一、小程序概述及入门 二、小程序UI开发 三、API操做 四、购物商场项目实战

微信小程序开发

  • Android相关源码解读 只要是程序员,无论是Java仍是Android,若是不去阅读源码,只看API文档,那就只是停留于皮毛,这对咱们知识体系的创建和完备以及实战技术的提高都是不利的。

Android相关源码解读 Android相关源码解读部份内容

因为篇幅缘由,以上完整学习笔记pdf若有须要,能够点赞+评论支持下小弟,点击这里免费自取

相关文章
相关标签/搜索