先交待自身基础:
- 15届渣渣本科毕业生;
- 电气自动化专业,大一大二和电子专业的课程一样,对硬件比较熟悉;
- 大学对单片机比较有兴趣,用汇编完成过小项目,学过一点C;
- 除了前面提到的,都没其他编程经验;
- 英语程度是四级裸考过了,六级没过。
我的学习过程
15年6月中旬正式进入公司,工作两个月后发现自己是真心不喜欢本专业的工作,最后下定决心自学当个码农(内心斗争过程略)。因为大学做过单片机的项目,知道自己喜欢做这方面的工作。遂开始各种搜索转行攻略,最后锁定android应用层开发。毕竟做出来的东西能看见,还是很振奋人心的。
先开始学习Java基础
看推荐买了李刚的《疯狂Java讲义》, 为了生存无法脱岗学习,还好每天下班准时,有几个小时让我看书,于是跟着书上的内容一步步在电脑上敲。开始还不错,后面发现这书写得好臃肿,都不知道哪里才是首要抓的重点,代码也好多植入广告。遂找了网上推荐的30天Java教程的视频。两倍播放速度看了一半,觉得看视频接受知识太被动。还是硬着头皮看回书,不懂的内容就Google其他大大们写的博客,或者直接看那一节的视频。每天5个小时左右,一个月过了一次Java基础。实操不足。
第二阶段,直接开始android的学习
知乎很多地方都推荐郭霖的《第一行代码》, 买了一本开始照着做。每个例子都自己动手实践了一遍。不能不说这本书真的很棒。很多实用的技巧,讲解也深入浅出。由于这个阶段自己事情比较多,估算也是一个月看完了。看完这本书后发现内容还是太少了,不过告诉了我android应用开发的大体知识结构。提到的知识点也去搜索一遍,补全一些没有提到的知识。期间在上班的空余时间用手机刷了一本《SQL必知必会》。
后面自己电脑再下载了一个MySQL,跟着《MySQL必知必会》外加《w3school》(这个是教程网站)的教程实操了一遍,算是会了对数据库的基本操作。另外郭大大书里说的Git版本控制工具的内容比较散,自己又跑网上找了本《Pro Git》来学 ,还买了本《GitHub入门与实践》。
第三阶段,深入学习编程基础
看了知乎上面萧丼陌大大给出的编程入门指南后,开始对编程基础的恶补。还有网上各个大大给的一些推荐,最后买了《算法》第四版和《Head First设计模式》(还有好多书,因为自己都没完整刷过这里就不列出来了),开始了苦逼的算法学习。后面变成上夜班还是一个人值班,没什么事做就每天上班的时候看《算法》。实际这书更多的说数据结构,还好大学的课程涉及到相关一点知识。
这里面不理解的都会重复的看,可惜后面家里有些急事。算法看到了图那一章就暂停了。事后回来转战看了《Head First设计模式》,也是一点点慢慢看完,因为缺少实践,也就只懂基本概念。期间也刷了《图解HTTP》这部科普书,算是对HTTP有些概念了。还有因为平日遇到不会的知识都会搜索一下,这过程也看了很多杂七杂八的知识。
第四阶段,学习知识巩固
其实期间自己遇到很多事情,学习阶段期间已经不太明显。各种理由后,答主决定辞职脱产学习,此时是15年最后一个月了。最后安定在广州后继续学习,学了一轮其他知识后,结合网上一些面试总结和分享的经验又回去看了一遍Java基础。接着就回到android的学习上了,跟着谷歌的官方教程慢慢看,网上有大大们翻译的中文版。
其中略过TV等相关的内容,然后觉得得实操了。偶然发现Github上有知乎日报的API分析就开始了山寨。目前阶段,实现了部分日报的功能后,发现自己的代码设计有待加强,去看了不少代码规范还有什么MVC等模式也重看了《Head Firest设计模式》和《算法》第四版。开始重写一遍山寨的知乎日报。
求职阶段
胆子不够大,简历说实话。2月末开始投,到第一份offer为止,在某勾投了27份简历,19份被查看了,最后就3家有机会面试。忽略第一家奇葩公司外,剩下两家都能拿到offer。薪酬就是普通院校应届生的水平。(都说初级岗位竞争大……)
求职过程,说起来都是泪,简历基本石沉大海。为了撑下简历,用Design支持库的控件和常用的第三方库写了一个新的Demo。上面耗时一个星期,期间没有面试。然后刷了任玉刚的《Android开发艺术探索》。 当一个星期后我看完了,还是没有面试机会。说实话自己多少有些迷茫了,也不知道往哪个方向提升,于是去复习下基础吧。
过了一遍之前看的书,重新复习了排序和查找的算法。期间又过了一个星期,也还是没有面试通知。接着看《Java编程思想》,看了一半。好不容易终于有一个面试机会了,结果是一家奇葩公司,没有自己的定位,自己的产品内存泄露就算了,还有崩溃的bug。(毕竟第一个面试,答主还是很紧张的,就下载了产品使用了一下,顺便试试之前发现一个容易出现的问题,有些软件没注意编码的问题,开发只考虑中文的系统环境,你系统换成英文有些界面就会崩溃的了)面试期间跟面试官说了一下,面试官只是一笑而过。
期间也没有一个像样的技术问题。后面跟老板谈薪水,才明白就想找个廉价劳动力而已。答主知道市场不好,但还是不傻。这里写下来是提醒一下各位转码农的朋友,不要急着找工作,就忽略了公司的情况啊。
有时感觉转行也是要看点运气的,在走出第一家奇葩公司后,就收到第二家和第三家公司的面试邀请。刚好同一天,一个上午一个下午。
面试阶段
上午的公司直接是技术面,问的东西都是基础的东西。面试官看了下两个demo后开始从网络请求要怎么处理的这样问了起来……简历写的技能点全部被问了一遍。(这里建议简历上的技能点就不要乱吹了)现在写下自己能想起的问题,记忆有些模糊,大家参考下就好了:
1、快排怎么实现的?时间复杂度是多少?哪种排序可能比快排快?
2、(追问了)希尔排序是怎样的?
3、二分查找时间复杂度是多少?最坏情况时间复杂度尼?除了二分查找还有哪些查找?
4、说一下你了解到的Java库有哪些类是线性安全的,哪些不是?
5、(答主提到了StringBuffer和StringBuilder)要是在多线程操作下会怎样?
6、说一下你Android开发期间用到的容器类,有什么区别?
7、(答主提到了ArrayList、LinkedList、HashSet、HashMap)ArrayList和LinkedList的区别是?要是我想用set但需要有序的遍历要怎么做?HashMap大概怎么实现的?(追问了)为什么在多插入的情况下选择LinkedList?二分查找不能用在哪儿?(答主当时这里蒙了……)后来面试官说,假如用在LinkedList上会怎样?
8、要是我要对一些自定义的类排序要怎么做?
9、四大组件分别有什么用?service是运行在哪个线程?(追问)service要运行到后台线程要怎么做?
10、说下Activity的生命周期是怎样的?(追问)onNewIntent()方法什么时候调用?
11、说下Android的动画有哪些,区别是什么?
12、说下view的绘制流程和事件处理机制?(追问)MeasureSpec有哪几种,分别对应是什么?
13、bitmap的优化要怎么做?内存泄露是什么?有哪些情况会发生、如何避免?
14、(答主提到了弱引用)弱引用是什么?还有那些引用?
15、你一般怎么处理Android的多线程,怎么保证线性安全?
总结
还有一些我记不得了……(我在回答的时候不仅单纯的回答问题,有些带了这样做是为什么,或者额外补充一些知识点。算是以前面试总结的一点经验,尽量给面试官你好像会很多的样子……但吹牛要把握好度哦)下午的公司,就没问得那么细了,首先笔试,都是一些网上看到的面试题。然后面试官结合笔试题目问了些常见的问题。(虽然看着他电脑打开着AndroidStudio,但感觉技术功底不是很厚……)最后答主还是愿意去办公环境没这么好的第一家,毕竟有大牛在。
知识总结
每个程序员朋友都有自己的架构师梦,可往往梦想是美好的,现实又是残酷至极的。不努力不奋斗,可能就会在基层一辈子止步不前。也许有很多朋友还会说,程序员也是干的年轻饭,年纪大了也就爬不上了,脑子跟身体都跟不上了。那既如此,又为何不趁着自己还年轻,好好把握机会,努力一把,美好的未来才有机会和你招手!当然咯,这也仅仅代表我个人的观点,毕竟一百个人有一百个不同的脑子,就会有成千上万种不同的想法。
不过,只一句,如果你还在做这一行,还是一名程序猿(媛),想走上坡路的你,也许我这到手的学习进阶笔记 可能会对你有所帮助。
-
自行下载直达领取链接:【点击我,即可获得!】
《Android高级架构师面试指导+2020大厂面试真题》
更多学习视频
由于简书限制网盘链接,在我主页扫描我的二维码,我免费分享给你
- 以上进阶BATJ大厂学习资料可以免费分享给大家,需要完整版的朋友,【点这里可以看到全部内容】。