最后
我一直以来都有整理练习大厂面试题的习惯,有随时跳出舒服圈的准备,也许求职者已经很满意现在的工作,薪酬,觉得习惯而且安逸。
不过如果公司突然倒闭,或者部门被裁减,还能找到这样或者更好的工作吗?
我建议各位,多刷刷面试题,知道最新的技术,每三个月可以去面试一两家公司,因为你已经有不错的工作了,所以可以带着轻松的心态去面试,同时也可以增加面试的经验。
我可以将最近整理的一线互联网公司面试真题+解析分享给大家,大概花了三个月的时间整理2246页,帮助大家学习进步。
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!以下是部分内容截图:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
对于目前在做的只有自己已知的问题,不要隐瞒,尽量暴露出来,这样便于自己和他人更好的发现解决。
作为Android程序员,如何把握好技术的宽度和深度
对于Android来说,有太多的诱惑,比如React Native,小程序,热更新,插件化。
我理解的应该是先从宽度上拓展,然后在尽心深度研究。
什么时候需要横向拓展
-
初学者
-
工作业务量繁多,比如浏览器开发(普通App开发技术,HTML+Javascript等技术)
-
自身兴趣
什么时候需要纵向深入
-
中级和高级开发
-
追求更深入的细节和思想
-
工作内容需要
横向发展有哪些
-
ReactNative等技术
-
简单的后台开发 Java/PHP/Python/Ruby
-
IOS等应用开发
-
总而言之就是会的多
纵向发展有哪些
-
系统源码
-
各种技术的实现机制
-
操作系统相关知识等
-
总而言之就是学得精,知其然深知其所以然。
我个人比较倾向于多花点时间做深入研究,在这个过程中会慢慢形成一种透彻理解技术的能力,有了这种能力之后就能触类旁通,学习其他技术也会更加轻松。
另外,工作需要时影响你朝着哪个维度发展的重要因素。所以选择一个公司要谨慎。
-
通常大公司,优秀的团队会有利于你进行纵向深入
-
小公司,创业公司更多的会影响你进行横向发展。
如何从日常的工作中获取最大的收益
日常的工作中,我们都是在做公司的项目。我们想要做到最大化收益需要做到
-
不要将自己的要求仅仅停留在功能实现(比如完成一个界面不代表你的收益做到最大,只是代表任务完成)
-
要理解你所使用的技术的原理和本质。不要停留在API使用,否则无法增强你的竞争力。比如我们对于加载Bitmap都会用到LRUCache,我们则需要至少理解LRUCache的原理,如果可以的话,了解它的内部实现机制。
-
项目中有好的地方,要去思考好在何处。思考这种技术的通用场景。
-
在项目中思考更好的解决方法。做好两种方案的优缺点对比。比如你听了《Android Performance Pattern》中关于ArrayMap的讲解,也考虑到HashMap的空间占用问题,不要急于去替换。要做到对比(既要了解HashMap也要了解ArrayMap)同时结合业务场景来选择最适用的。
-
如果在项目中遇到了问题,建议先解决,然后空余时间研究这个技术的原理和细节。后续的研究务必要做。
-
善于做总结,将自己的经验和教训写成博客分享给他人。
日常的工作给我们提供了许许多多好的实践和不好的问题,是一块弥之珍贵的技术提升的源泉。
Android那么多库,我该选择哪些,怎么学,学到什么程度
库的存在是为了封装细节,简化调用者实现或者辅助我们更容易发现问题。比如ButterKnife利用注解简化了对于view的查找和类型转换等功能。
关于如何选择那些库
-
确定这个库是否是必需的
-
这个库能否带来开发效率的提升,降低代码的维护成本
-
这个库的学习成本如何 比如rxjava其实学习成本会相对高一些。
-
这个库的质量如何,不要仅仅看star,更要看issue的处理情况
Flipboard常用的库(部分)
-
LeakCanary A memory leak detection library for Android and Java.
-
Stetho Stetho is a debug bridge for Android applications, enabling the powerful Chrome Developer Tools and much more.
-
ButterKnife Bind Android views and callbacks to fields and methods.
-
Baber A custom view styling library
-
GoldenGate An Android annotation processor for generating type safe javascript bindings
-
MaterialEditText EditText in Material Design
-
。。。
关于库,首先我们需要掌握其使用方法,同样也需要理解其运行机制。
对于初学者,大学生的建议有哪些
-
越来越多的关于互联网寒冬的消息传出
-
听见越来越多的人抱怨Android找工作越来越难,已经趋近饱和。
-
Android开发的红利期正在逐渐消逝,尤其是对于初级和中级开发人员
-
关于现在加入Android开发队伍,我并不反对。
-
仍然可以赶上红利期的有容器,机器学习和人工智能。
-
但是无论选择哪一种技术,即便是Android,请具备好的基础和较强的编程能力和足够的爱好。不要仅仅追求物质。
一直想学,却很难坚持下去
-
有意愿是很好的。
-
如果很难坚持下去,可能的原因有没有学进去,或者自制力比较差
-
关于没有学进去,可以参考上面提到的学习方法
-
如果是自制力的话,可以通过自我监督和他人监督的方式来改善。
不知道去哪里学安卓,可以边学边工作么
-
学习Android的途径有很多,可以是自学(视频网站,看书,博客)
-
边学边工作通常是可以的,不过具体实施起来还要结合自身的情况,比如时间是否充裕,学习者的决心和自学能力。
春招做准备,数据结构和算法不懂怎么办
无论是春招还是秋招,对基础知识的掌握程度都是很重要的衡量标准,毕竟毕业生的实战经验比较少一些。
数据结构和算法应该是必不可少的一部分。建议还是要多多做一些准备工作。
呈现出最好的状态来面试春招。
自己有一个什么样的个人项目才有竞争力
如果这个项目是App
-
首先有足够的用户量,比如月活达到上万的数量级
-
界面和交互处理良好,符合Android UI/UE规范
-
运行流畅和稳定,不存在低级的错误(比如卡顿等问题)
-
App能明显解决用户的痛点
如果这个项目是一个开源项目
-
有足够的star(然而这个已经被玩坏了)
-
issue的处理情况
-
contributor的数量
-
设计的思想是否优秀
-
代码是否居然自解释性
-
学习成本和维护成本尽量少
我该如何选择网络中鱼龙混杂的学习资料 pass
-
使用Google和StackOverflow,Medium
-
如果是博客文章,在自己能力可以理解前提下,尽量选择英文
-
最简单判断一个文章的优劣可以先到文章的底部看评论(Good,Execellent,Awesome)以及Google+,Facebook,Twitter分享数量
-
尽量选择内容整洁(说明态度认真)的文章
学习效果差的问题 pass
-
长期看慕课和论坛,感觉效果很差
-
感觉通过视频学习,进步很大,但是即使学习完了,感觉还是菜鸟
-
视频也看了,书也读了,但是写起来还是很吃力,下一步如何熟练和进阶
产生这些结果的原因:
-
通常的视频网站传授给大家都往往是立竿见影的技能。
-
学习中缺乏思考,无法做到触类旁通。只知道照葫芦画瓢
-
基础薄弱,概念没有搞清。导致做上层的东西举步维艰。
-
没有比较良好的辅助工具或者无法找到优秀的辅助内容。
如何提高安卓程序员的核心竞争力,项目理解能力还是技术能力,哪个更重要
-
什么是核心竞争力。表现在学习技术的能力,对待问题的态度,解决问题的技术方案。别的行业其实也是这样的。
-
具体如何提高核心竞争力,我上面有提到,参考程序员需要具备其他那些能力。
-
这两个能力是相辅相成的,很难做出孰重孰轻的决断。
大龄Android程序员的烦恼
经常收到一些安卓程序员的邮件,其中有很多问题是,做了Android很多年了,为以后的职业选择惆怅。比如互联网寒冬,华为清退34岁以上员工等等。
的确,由于Android相关的工程师需求不如之前那么好,加之年龄越大,拼劲可能不如刚刚毕业的年轻人。这种烦恼是可以理解的。
走出烦恼的一些方法
-
不断学习,夯实基础,拓展技术面。为什么总是提到这个,因为其实存在很多程序员,逻辑思维不强,还不爱学习。不断学习对于程序员来说至关重要。
-
提高自己的竞争力,不要成为仅仅面向API编程的程序员。要勤于思考,追求更高。求其上者得其中,求其中者得其下。你必须和5年前,甚至是10年前的你有改变,不能仅仅是一项技能重复了5年,10年。
-
建立个人品牌:写博客,写书,开源项目,写独立App等。注意这其中任何一个都是一个长期坚持才能完成的事情。
-
其实现代人的烦恼,不论是否是程序员,很多都是关于物质生活的恐惧。买车买房,家庭支出等等问题。以及对于自己的能力无法满足物质支出的恐惧和担心。在自己无法改变的情况下,适当调整心态。
最后
为了方便有学习需要的朋友,我把资料都整理成了视频教程(实际上比预期多花了不少精力)
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
- 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!
- 我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,没有人能随随便便成功。
加油,共勉。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,没有人能随随便便成功。
加油,共勉。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!