之前一直不是很懂,计算机专业的学生去应聘软件开发,为什么必考“数据结构”和算法。我当然知道这门课程很重要,但是作为一名搞开发的程序员,在实际工作中,其实很少会接触到数据结构和算法,这些东西大部分已经被封装成了各种API,功能完善,我们只需要调用就可以了。那到底为什么还这么重视数据结构呢?难道是因为这门课比较适合检验我们的学习成果?最气人的是,有人说这是程序员的基本素养,说的没错,但废话一句,程序员需要的素养多了去了,怎么偏偏这么宠爱它呢?
关键时刻,大脑为什么会一片空白?
从小到大,你肯定经历过不少次重要考试、当众演讲或者面试。绝大多数人第一次站到讲台上,面对台下无数双眼睛,就会心跳加速,手心出汗,一心想要不紧张却偏偏紧张的要死。一到临场,词儿还没说到一半,下面的却怎么都想不起来了,就开始“自由发挥”了。
按照我们以前的理解,会认为自己是太紧张了,下次一定要放松。不过这种解释也就拿来安慰小学生,完全是没用的废话,只不过是把“大脑一片空白”这个现象抽象为“紧张”这个概念。就像当年科学家在发现氧气之前,将物体可以在空气中燃烧的原因,归结为空气中有“燃素”这样一种化学物质,可谁又能解释燃素是什么东西?
框架搭建必备 —— 反射与注解
反射
作用
我们知道Java代码会被编译成字节码文件,当一个类编译完成后,在生成的.class文件中会产生一个Class对象,该对象用于表示这个类的信息,比如类的属性,字段,构造方法等等。 既然Class中包含了这么多有用的信息,那么我们就可以使用反射的技术,获得这些编译之后的Class对象当中的内容。反射的最大作用就是开发各种通用框架。比如在Android的数据库框架中,就是使用了反射和注解两个技术配合完成工作。
《自控力》
两个自我导致的问题
人时常处在自我矛盾的状态当中,想做但不想去做,不想做还非得强迫自己去做。可见大脑并不同于我们经常拿来作类比的计算机,CPU是计算机的中央控制中心,但人脑没有这个机制,所以人的大脑一定是功能模块之间在发生了某种冲突,才会出现各种的矛盾。除了人类,其它生物就没有这种问题,它们不会纠结,所做的一切都遵从动物本能。为什么会这样?我相信任何问题出现的原因都可以追溯到物理层面,就像苹果之所以会掉下来是因为地心引力,大脑也一样,目前神经科学家已经找到了根源:就是人类不断进化的前额皮质。
搭建一个简单的Http请求框架
目前Android常用的网络请求框架有很多,比如Volley和Rettofit,功能强大且调用方便,学习这些框架的使用还算简单。不过只会调用这些API,其实跟学习Android系统框架层自带的API是一样的,无非是多用几次就熟悉了。API会的再多,对自己的开发水平的提高作用甚少。这就跟学英语类似,多学会几个API,就跟多学几个单词一样,单词是学不完的,而且学而不用,很快就会忘掉。
重点还是培养自己的思维方式,学习利用各种设计模式和编程原则,如何搭建一个框架,如何封装,如何解耦合,如何给用户留下方便易用的API来供调用。
这两天跟着stay的一个项目学习,尝试着搭建一个网络请求框架出来,项目名称我定为SimpleHttp。这篇文章对开发思路和过程做一个简单的整理,源码也跟随进度上传到Github,每次更新对应着不同的tag,tag名称为版本号,方便下载查看。
设计方式:在对一个框架的架构进行设计时,我的理解是应该遵循自顶向下的原则,要事先设计好有那些功能模块、要预留哪些API供开发者调用、要有哪些类、哪些方法,并设计出UML类图作为指导。
不过作为经验不足的程序员来说,架构的设计难度还是挺大的,也不知道应该从何做起。所以这个项目使用的方法是:先实现最基本的功能,然后再一步步进行封装、功能的扩展以及优化。
Android APP启动过程分析(2) —— Measure、Layout、Draw
上一篇文章从ActivityTHread.main()讲到了ViewRootImpl.performTraversals(),这篇则进入performTraversals()的执行流程,也就是大家所熟知的Measure、Layout、Draw三大流程。
关于三大流程讲解的相关文章太多太多了,之所以自己想写一篇,是因为看别人的文章总是磕磕绊绊,他们的讲解方法、重点各不相同,所以总是需要自己参考多篇文章,再加以自己的梳理才能有个相对完整的理解,这就是我也想写一篇的原因,写一篇一气呵成、脉络清晰的讲解出来。
可是后来在查找相关博客时,发现了一篇,无论是在讲解思路、讲解形式、讲解重点上,都是我心中想要完成的文章。文章写的非常细致,讲解特别到位,很适合没有接触过这三大流程的同学学习,相信看完自己会在心中有个整体脉络,一定可以看懂的。个人认为,比《Android开发艺术探索》这本书要讲的更容易理解,至少对于初学者来说是的,我是看了这篇文章,再去看书,才明白书中讲的是是什么意思。
我看过之后,已经没有想要书写的欲望了,所以就把这篇文章的链接放在这,大家如果没有看过这篇文章,而又想学习这三大流程,可以一看。当你看完这篇文章,可以再看看我在下面的总结。
Android View的绘制流程
Android APP启动过程分析(1) —— Activity、Window、DecorView
前言:本篇文章通过对APP启动过程(从点击图标—>Activity可见)的分析,来搞懂这一过程遇到的几个重要的知识点,以解心中的疑惑,同时通过对整个过程的分析,让孤立的知识点串联起来,有个更好的理解和掌握。
Android事件分发机制
先放张流程图,本文的所有内容都基于这张图,如下:
讲解Android事件分发的文章很多了,这里我是在理解之后,做的一个总结。按照事件传递的流程,把每一步的事件处理和返回结果做个梳理,这里的总结只包含了ACTION_DOWN事件。
设计模式 —— 相见恨晚
最近在学习《设计模式》,学校里没有开过这门课,也没听老师怎么提起过,并不了解它是作什么用的,想着以后用到了再学。因为马上要找工作了,想着准备准备,否则到时面试官让你写个设计模式,你说没学过,岂不很尴尬。但看过之后,我只能说相见恨晚。
我曾一度怀疑自己不适合编程,因为如果要我实现稍复杂的业务功能,根本不知道该怎么写或者布局哪些类和方法,看别人的代码脑子也会乱掉。现在明白了,很大程度上是因为我对“设计模式”太无知,不知道编程原来都是有“套路”的。不掌握这些套路,在程序员这条路上会走的很艰难。
因为自己本身搞的是Android开发,最终目的是可以将设计模式与Android各方面(开发、系统源码解读)结合起来,不过由于目前经验有限,所以这些工作还得一步步来,遇到的时候就做一个总结。
这篇文章主要介绍常见的几大模式,日后会逐渐更新添加,然后对每一个模式的要点做一个梳理,并根据模式思想,写一个代码示例。这里不会对每一个模式进行详细介绍,因为这些内容看书是最系统、最易理解和掌握的。我的博文可以作为刚入门的读者的一个辅助,重点是理清思路,能够用代码表示出来,有不正确的地方,还望批评指正。
Android源码中的设计模式 —— RecyclerView
在刚开始使用ListView或者RecyclerView的时候,就一直懵懵懂懂的,感觉它的使用与其它控件相比,稍显复杂。尤其在使用Adapter的时候,就一直困惑Adapter是干嘛的?为什么叫Adapter呢?虽然会使用了,但困惑仍然在,心里很不爽。直到随着使用次数的增加,再加上多次的思考,以及后来开始结合设计模式(真的是相见恨晚),才慢慢有了点感觉。这篇文章,就结合设计模式、源码、我的思考以及其它参考,来一解心中的疑惑。