一个师妹问:哥,我今年应届毕业,刚开始写代码,不知道有没有一些新手需要注意的地方。
给了师妹一些建议之后,感觉这是个好问题!不光是新手程序员,很多小技巧小秘密恐怕老手也未必掌握了。
1.重视架构能力的培养
对于新手程序员而言,最好的培养方式是:写代码前先画好类结构图和代码时序图,这样会让编码能力迅速进步。
用什么工具画?Start uml就挺不错的。
2.debug的能力远比编码能力更重要
把功能实现只是程序员的第一步,甚至是最基础的一步,更多时候,你需要解决各种稀奇古怪的问题。
这个能力不提升,不仅影响工作效率,更无法成为资深工程师,关于如何培养debug能力,旧文也写过一篇:这才是厉害程序员的标配!
3.定期重构代码
这真的是好习惯,程序员要学会把自己的代码当作「工艺品」而不是「交付物」。
既然是工艺品,那自然要精益求精,有时间就要反复打磨。在不耽误上线周期的前提下,不断做局部重构。
推荐一本书《重构,改善既有代码的设计》,浅显易懂却又发人深省,边读边实践,相信你的代码会越来越优美。
4.写文档的能力非常重要
看看Spring,hibernate,Struts等最流行的开源软件的文档就知道,他们的文档写的多么的易懂。
沟通纪要、会议纪要、周报、工作总结、需求文档、总体设计文档、详细设计文档、单元测试文档、测试用例文档、需求变更文档、产品说明书、项目总结文档等等,这些无一不需要实践训练
5.形成自己的变量命名规则
命名规则千千万,但你得选一个固定的套路。不然不仅浪费时间,还影响代码的可读性。而一个好的命名甚至能替代一部分注释的功能。
6.做好封装
始终牢记高内聚、低耦合:一个好的内聚模块应当恰好做一件事,同时尽量减少类和模块之间的耦合关系。
7.把感觉不靠谱的需求放到最后做
原因很简单:可能到时候需求就变了,尤其在小公司打拼的朋友们,这条千万切记,这是提升效率的金手指了!
别问为什么知道这么多!说出来都是泪…
8.认真对待代码中的warning
它们虽然不致命,但却是精益求精的好机会,很多warning的含义是:你的代码勉强能运行,但有很多优化的地方,比如运行速度、资源开销等等。
9.单元测试很重要
它至少有这几个好处:方便后期重构、优化代码设计、文档记录(单元测试本身即是文档)、具备回归性(随时随地测试)。
10.学会阅读开源代码
最好能运行起来玩一玩,这会让你的编码能力高速质变,洋哥编码能力提升最快的时候,就是疯狂阅读Google chrome源码之际。
11.学会看性能指标、学会性能调优
这是区隔程序员的最好方式之一,学会用数据驱动你的代码,用指标驱动优化方向。
12.千万记得要做数据备份 不然运气不好,死的贼惨,轻则影响涨薪晋升,重则卷铺盖滚蛋。
13.不要怀疑基础常识
比如编译不过怀疑是编译器的问题、用户有bug怀疑是用户操作系统的问题。这种怀疑无非是拖慢了解决问题的速度,毫无其他帮助。
14.不要盲目使用新技术
要先理解透,且了解其他人的使用情况,吃螃蟹这件事不总是好事,也可能会被螃蟹腿卡脖子
15.不要低估了一个好的版本控制系统的威力
记住一点就够了:git是最好的,简单可依赖还免费
我自己也整理GitHub项目文档,需要的读者可以去我的**GitHub**
16.常学习
IT行业日新月异,不要做过时的程序员,要养成阅读技术书籍的习惯,当然非技术的也可以看看,这份硬核书单可以看看:2020最硬核书单。
除了看书,经常逛逛Github,看看那些优秀的开源工程,时不时关注下自己用的技术栈新技术发展,这些都是学习的方法。
17.用好Google,能力大增
超级程序员=「程序员」+「用好google」。
18.编码的时候只思考同一个思维层次的逻辑
在这层完成之后再思考下一层,层层拆解方能完美解决问题,一旦越层可能把自己都搞晕了。
这也是形成好思维的基本方法论,另外思维本质上是相通的,你能锻炼出一个好的编码思维、架构思维,大概率你也能锻炼出好的管理思维、商业思维。
关于思维也推荐一本书:《麦肯锡教会我的七个思维习惯》。
19.要懂算法,要懂数据结构
编码时要学会使用合适的数据结构和算法,无论是解决实际问题还是优化效率,这点都非常重要。
20.交代码之前反复自测
这真是基本功,在很多公司一般都会通过bug提交数和严重性来判断是否严格自测,甚至能影响绩效。
21.如果经常delay,可能是任务还没有拆得足够细
学会拆解-执行-复盘,并且学会掌控拆解颗粒度,对颗粒度的把握和拿捏很重要。
22.遇到代码问题解决后做个小笔记
好记性不如烂笔头,把历史经验沉淀下来,并建立高效索引方式,会让你越工作效率越高。
23.千万别直接拷贝网上的代码
当然,少不了需要借鉴其他人代码的时候,但一定记住:要先理解然后自己写出来。
24.尽量主动推进项目进度
这是你迅速脱颖而出的好方法。
25.主动改Bug
不管是不是自己的Bug,都要主动改,当然如果是别人的,改完后要尽可能让老板知道。
这一条还是防止职场甩锅的好办法,别问为什么知道!
26.多看官方文档
它们真代表权威和完美细节,看完很多问题自然就不存在了。
27.多学英语
无论是Google还是stackoverflow,又或者各种官方文档,流利的英文阅读,和习惯性英文搜索,能帮你超越90%的程序员。
28.积极防止颈椎病
这东西真的是程序员的职业病,千万小心了!编码1小时,必须站起来走几步,动动脖子,不然过不了多久你就需要一本书:《颈椎病康复指南》
我再分享一下我6年来具体的学习路线及笔记文档和希望能帮助到有心提升技术的朋友!
目前Android APP开发主流语言就是Java语言,Java语言最大的特性就是提高了软件的交互可能性,可以说安卓手机几乎所有应用程序都是利用Java语言来进行编写的。
知识要点:
1、Java序列化、泛型、反射
2、虚拟机底层原理
3、Android内存原理
4、Java高并发原理详解
5、编译时技术掌握与实战
6、JDK高级动态代理
7、高级数据结构与算法
8、Java IO操作
在Android中,Framework泛指系统架构层。Framework的中文意思是“框架”,在软件开发中通常指开发框架,在一个系统中处于内核层之上,为顶层应用提供接口,被设计用来帮助开发者快速开发顶层应用,而不必关心系统内核运行机制,通常Framework都会隐藏main函数等应用程序必须的组件,开发人员只需把精力放在功能代码的实现上。说简单点,Framework具体的工作也就是为android应用开发的开发人员提供了一系列的服务和API的接口。
UI其实并不是单纯指用户看到的效果。因为在Android开发中,每个控件背后都有一套深层次的体系在支撑,自然而然,会UI不单纯指的是会自定义控件,我们还应该知道自定义控件背后的执行流程,包括从Activity的创建,XML的解析,到每个控件的测量、布局、绘制。当然在中间还夹杂着比如动画、事件分发机制、嵌套滑动机制等知识点。还有谷歌提供的一些UI框架也使我们要掌握的对象,比如Jetpack组件库、Material Design等。
知识要点:
1、FrameWork源码解析
2、Android常用组件深入解析
3、UI的深度剖析与自定义
4、Jetpack全家桶
5、Android R
6、RXJava响应式编程框架设计
性能优化是针对整个app开发而言的。一个好的项目被开发出来,不单是产品要好,开发者也需要知道,为什么我开发的这个app能够在绝大多数的手机运行,为什么用户在使用的时候绝大部分的手机不会出现bug。我们的apk文件可以优化到很小的,比如你做一个项目,打包之后可能是10m,但是经过优化之后可能就只有8m,甚至更小。另外,我们做的项目安全性如何?我们凭什么断定我们做出来的app安全性好。这都是性能优化中会涉及的。
1、设计思想与代码质量优化
一个app的性能好不好我们需要从两个层面努力。第一个层面:从写代码的时候就需要注意,让自己的代码是高性能高可用的代码,这个过程是书写高性能代码;第二个层面:对已经成型的代码通过工具检查代码的问题,通过检查到的问题来指导我们进行代码的删改,这个过程被称为调优。
如何写出高性能的代码呢?那就需要我们具备深厚的代码功底,这就是代码的基础,如:数据结构达到可以根据应用场景写出符合当前场景的特殊结构,比如google针对Android平台特征研发了sparseArray替代HashMap。另外,对常用的算法有自己独到的见解,leetcode上有刷个上百道题,这样差不多可以达到精通最常用的排序查找动态规划等算法的能力。再者,高效的算法以及节省内存的数据结构如果配合优秀的符合应用场景的设计模式,那么,这些就为高性能的代码提供了实现依据。
另外一个就是对写好的代码进行调优,那么调优的方向就是使用Profiler工具进行测试和检查,看哪里有性能消耗大的操作,然后分析对于代码的问题。调优的方向就变成了如何对内存调优,对耗电调优,对网络流量调优,当然,还有对启动速度,页面切换效果与速度,开机白屏体验,闪屏方面的原因等进行分析和调优。最后再加上一个屏幕适配相机适配。
2、程序性能优化
启动速度与执行效率优
化布局检测与优化
内存优化
耗电优化
网络传输与数据储存优化
APK大小优化
3、开发效率优化
分布式版本控制系统Git
自动化构建系统Gradle
4、项目实战
启动速度流畅度抖音在APK包大小资源优化的实践优酷响应式布局技术全解析网络优化手机淘宝双十一性能优化项目揭秘高德APP全链路源码依赖分析彻底干掉OOM的实战经验分享微信Android终端内存优化实践
[图片上传失败…(image-70c453-1615361024809)]
Android框架体系架构(高级UI+FrameWork源码) 这块知识是现今使用者最多的,我们称之Android2013~2016年的技术。
Android开发者也往往因为网上Copy代码习惯了而导致对这块经常“使用”的代码熟悉而又陌生:熟悉的是几乎天天在和它们打交道, 天天在复制这些代码 ;陌生的是虽然天天和这些代码打交道,但是并没有深入研究过这些代码的原理,代码深处的内涵。
本篇知识要点:
1、架构师必备的代码设计准则
2、组件化架构设计
3、插件化架构设计
4、热修复设计
5、开源框架源码解析与实现
高级音视频(音视频系列)
从未来的大趋势来看,随着5G时代的到来,音视频慢慢变成人们日常生活中的必需品。除了在线教育、音视频会议、即时通讯这些必须使用音视频技术的产品外,其它的产品也需要加入音频、视频元素。
正是因为这样一个大的趋势,现在除了各大厂之外,其它一些小厂也开始寻找音视频人才。
一名稍好点的音视频人才现在可能会有3-4家公司抢着要、挣着要。对音视频人才的需求从小众变成了大众,这更多的是大家对未来市场预期的结果。
音视频人才为什么难得?
音视频知识庞杂,通俗易懂的资料非常少;
网上博客,视频充斥着大量的错误信息,使得很多初学者掉到坑里就爬不出来了。
举个例子,按照传统的音视频学习方法:首先接触大量的音视频开源库,如FFmpeg、MediaCodec,往往这些API就已经把脑袋弄大了。停留在使用API,不能让你适应不断变化的需求。最开始的方向错了,不管如何努力,都学不好音视频。
本篇知识要点:
1、基础语法
2、H264视频编码
3、H265编码原理
4、H265编码应用
5、MediaCode
因简书的推荐机制,无法在其内展示资料PDF全部的内容和核心知识点,需要Android大厂精选面试题PDF、和具体大纲的朋友可以在**【加入此处后打包获取全部】**。谢谢大家的理解!