自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

有心好书

关注音视频前后端,也会分享记录一些工作、财务、感情、生活方面的思考与成长

  • 博客(54)
  • 收藏
  • 关注

原创 自己动手写HTTP框架:ThreadPool+Runnable+handler篇

既然异步任务有诸多问题,那么我们可以尝试使用ThreadPoolExecutor+Runnable+Handler来对网络底层进行封装。类图具体流程:首先构造一个请求Request,然后通过这个请求RequestManager可以构造一个NetWorkExecutor,然后从DefaultThreadPool中选择一个线程来执行这个NetWorkExecutor。把结果回调到RequestCallb

2016-06-30 22:23:05 1742 3

原创 设计模式与架构的核心概念乃是抽象

最近一年来一直在学习设计模式,上周在公司内部听了一个分享,当时一位同事提出设计模式的核心是封装,我强烈不赞同,在我看来设计模式的核心乃是抽象。  君不见,各种开源框架开源项目遍地都是抽象类和接口,每每此时,你心中肯定一万个草泥马在奔腾:是不是有病呀,整这么多接口和抽象类,也不嫌累。其实不是这样的,为了扩展性,这些是必须的。  面对对象的三大原则是:封装、继承、多态。封装就不必说了,但是没有抽象,就没

2016-06-30 19:41:25 1495 2

原创 重构系列:减少成员变量个数,降低变量的作用范围

这条规则是自己在开发一个小的需求时的感悟。这个需求其实非常简单,不过要基于旧有的代码去开发,在我看了旧代码的时候,我晕了,旧代码中把很多明明只是temp的变量都提取成为了成员变量,代码读起来非常的费解,之后我尝试去掉了不必要的成员变量,整体流程清晰多了。

2016-06-29 20:57:23 1574

原创 重构系列:概论

重构的目的是使软件更容易被理解和修改。你可以在软件内部做很多修改,但必须对软件可观察的外部行为只造成很小的变化,或甚至不造成变化。与之形成鲜明对比的是性能优化。和重构一样,性能优化通常不会改变组件的行为(除了执行速度),只会改变其内部结构。但是两者出发点不同:性能优化往往使得代码很难理解,但为了得到所需的性能你不得不那么做。

2016-06-29 20:56:07 936

转载 Android源码解析——LruCache

LRU  在读LruCache源码之前,我们先来了解一下这里的Lru是什么。LRU全称为Least Recently Used,即最近最少使用,是一种缓存置换算法。我们的缓存容量是有限的,它会面临一个问题:当有新的内容需要加入我们的缓存,但我们的缓存空闲的空间不足以放进新的内容时,如何舍弃原有的部分内容从而腾出空间用来放新的内容。解决这个问题的算法有多种,比如LRU,LFU,FIFO等。  需要注意

2016-06-28 10:52:01 705

原创 SimpleNet网络框架源码分析

项目介绍  SimpleNet是何红辉开源的一个http网络请求库。该库借鉴了volley的实现思路,但为了更易于理解,裁掉了一些模块。整体适合学习http网络框架原理使用,难易度恰到好处。在此基础上再去读volley源码,会体悟更深刻一些。特点支持httpclient、httpurlconnection两种方式 支持成功的回调请求: 支持多种格式的请求:Json、String、小文件 支持多

2016-06-27 16:37:42 4148

转载 编程语言学习知识体系

占位

2016-06-25 10:22:27 2848

转载 面对对象原则:高内聚、低耦合

软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分摸块的一个准则就是高内聚低耦合。 这是软件工程中的概念,是判断设计好坏的标准,主要是面向OO的设计,主要是看类的内聚性是否高,偶合度是否低.每一个类完成特定的独立的功能,这个就是高内聚。耦合就是类之间的互相调用关系,如果耦合很强,互相牵扯调用很多,那么会牵一发而动全身,不利于维护和扩展。 类之间的设置应该要低耦合,但是每个类应该要高内聚.

2016-06-24 21:18:27 5209

原创 客户端开发知识体系

今天在家里吃饭时,思考到一个结论:其实不论是android app开发,ios app开发,还是mac 应用开发,pc应用开发,等等的一切,都属于c/s模式的c端。他们的开发其实需要的知识是一模一样的,知识是可以迁移的。如果你认为自己是一位中级的android开发工程师,我觉得你只需要2个月就可以成为一位还不错的ios工程师。以我对android的理解,android开发需要:1.界面呈现相关例如v

2016-06-24 19:52:30 1506

原创 【分享笔记】使用lint来改善你的代码

一.lint简介什么是静态代码分析静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。在软件开发过程中,静态代码分析往往先于动态测试之前进行,同时也可以作为制定动态测试用例的参考。统计证明,在整个软件开发生命周期中,30% 至 70% 的代码逻辑

2016-06-22 22:22:04 2002

原创 glide源码分析

图片加载框架,相对于UniversalImageLoader,Picasso,它还支持video,Gif,SVG格式,支持缩略图请求,旨在打造更好的列表图片滑动体验。Glide有生命周期的概念(主要是对请求进行pause,resume,clear),而且其生命周期与Activity/Fragment的生命周期绑定,支持Volley,OkHttp,并提供了相应的integration libraries,内存方面也更加

2016-06-21 20:07:55 5050 1

原创 Picasso源码分析

Picasso是Square公司开源的一个Android平台上的图片加载框架,也是大名鼎鼎的JakeWharton的代表作品之一.

2016-06-21 20:07:26 1055

原创 universal imageloader源码分析

项目介绍  android中最让人头疼的莫过于从网络上获取图片、显示、回收,任何一个环节有问题都可能直接OOM。尤其是在列表页,会加载大量网络上的图片,每当快速滑动列表的时候,就会很卡,甚至会因为内存溢出而崩溃。   这个时候就轮到imageloader上场表演了。Imageloader的目的是为了实现异步的网络图片加载、缓存及显示,支持多线程异步加载。   Imageloader的工作原理是这

2016-06-21 20:06:52 861

原创 自己动手封装图片三级缓存网络请求框架(类似imageloader)

图片三级缓存原理   三级缓存指内存-文件-网络 三层cache机制,其中内存缓存包括强引用缓存和软引用缓存(SoftReference),其实网络不算cache,这里姑且也把它划到缓存的层次结构中。当根据url向网络拉取图片的时候,先从内存中找,如果内存中没有,再从缓存文件中查找,如果缓存文件中也没有,再从网络上通过http请求拉取图片。在键值对(key-value)中,这个图片缓存的key是图片

2016-06-21 20:06:08 1655

原创 volley源码分析

项目介绍  在android开发早期,不像现在这样有各种第三方的网路框架,而网络请求又是app必须的功能,所以不同的公司都会采用自己封装框架的方式,其实主要目的就是可以实现http请求,然后得到想要的结果(json等等),然后还会加入一些扩展的功能:如支持上传下载进度回调、支持对错误的统一处理、支持对数据做内存缓存和文件缓存以及缓存的刷新机制等等。   后来,慢慢的有的知名公司就会选择把自家公司的

2016-06-21 20:05:18 757

原创 自己动手写HTTP框架:异步任务篇

需求2011年的某一天,你的公司初进移动开发领域,上司要求你实现一套http网络请求框架,要求易扩展。2011年!!!volley、imageloader、fresco、glide…..都是啥?????需求分析支持http协议get、post、put、delete异步请求请求错误统一处理支持多文件上传预处理服务器返回的数据上传/下载 进度更新取消请求可扩展需求:timeout

2016-06-21 20:04:25 1554

原创 【分享笔记】android6.0特性

Android 6.0中权限分为两种,普通权限和危险权限普通权限(Normal Permissions)如果你的应用manifest中只申明了普通权限(也就是说,这些权限对于用户隐私和设备操作不会造成太多危险,比如手机震动、访问网络等),系统会自动授予这些权限。 普通权限的覆盖区域是在你的app需要访问沙盒以外的数据和资源的时候,但是对用户隐私和其他app的操作只有很少的影响,比如开启手电筒的权限

2016-06-17 14:49:46 911

原创 PHP入门

今天下班没事做,就找一位做PHP开发的小伙伴聊了一会,他给我讲了一下公司的PHP项目,虽然自己之前一点PHP都没有看过,但是总体感觉还是能够听懂,主要得益于大学做过java web的相关项目,也自学过html,JavaScript等相关内容,所以理解起来并不是很吃力。他给我推荐了一个学习php语法的网站,然后给我推荐了一个集成开发环境。目前公司岗位分的很细,PHP平时主要是做一些业务逻辑的处理,不少

2016-06-13 20:35:17 792

原创 下一个五年你会在哪里,做着怎样的事

这一路你可曾被自己感动过

2016-06-13 14:13:47 1915 6

原创 几种工厂模式对比

简单工厂模式: 简单工厂模式:定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态方法,因此简单工厂模式又被成为静态工厂方法模式,它属于类创建类模式。简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。简单工厂模式的缺点是: 1. 工厂类过于庞大,包含了

2016-06-13 12:03:21 2047 1

原创 《架构漫谈》笔记

《架构漫谈》笔记什么是架构根据要解决的问题,对目标系统的边界进行界定。 并对目标系统按某个原则的进行切分。切分的原则,要便于不同的角色,对切分出来的部分,并行或串行开展工作,一般并行才能减少时间。 并对这些切分出来的部分,设立沟通机制。 根据3,使得这些部分之间能够进行有机的联系,合并组装成为一个整体,完成目标系统的所有工作。同样这个思考可以展开到其他的行业,比如企业的架构,国家的架构,组织架

2016-06-13 10:41:25 3618

原创 充血模型和贫血模型

占位

2016-06-13 10:36:37 4997

转载 架构师的基本素质

周星驰有个片子《喜剧之王》,剧中的尹天仇整天揣着本《演员的自我修养》,一个好演员不仅需要天赋,也需要一定的理论指导,无师自通的人毕竟是少数。架构师的成长过程也是这样。从普通程序员到高级程序员,再到架构师,是一个经验积累和思想升华的过程。经验积累是一个方面,素质培养是另一个方面,两者相辅相成,所以我觉得有必要把架构师的所要具备的素质罗列一下,作为程序员努力的方向。1、沟通能力为了提高效率,架构师必须赢

2016-06-12 20:22:57 1572

转载 反射实现AOP动态代理模式(SpringAOP的实现原理)

AOP

2016-06-12 14:44:51 1201

原创 动态代理

引入:静态代理和动态代理静态代理:不隐藏创建代理类的过程。由程序员创建或特定工具自动生成源代码在对其编译。在程序运行前代理类的.class文件就已经存在动态代理:隐藏创建代理类的过程。在程序运行时运用反射机制动态创建而成所以他们两个的区别就是在程序运行之前,.class文件是否已经存在。我们上面使用继承和组合实现的代理都是静态代理。对于静态代理而言,我们每一个代理类只能为一个借口服务,这样子一

2016-06-12 14:44:22 773

原创 设计模式系列:总结

区分及如何使用 占位

2016-06-10 15:47:56 715

原创 设计模式系列:设计原则一句话总结

1.单一职责原则 一句话总结:一个方法、接口或类尽量只做一件事情。这样会有一个非常大的优点:便于类和方法的重用(因为粒度越小的反而越利于复用)。但是因为单一职责原则提出了一个编写程序的标准,用”职责“或”变化原因“来衡量接口或类设计是否优良,而”职责“和”变化原因“都是不可度量的,因项目、环境而异,因此多数工业代码的类都是违反单一职责原则的。所以:接口、方法一定要做到单一职责原则,类的设计尽量做

2016-06-10 15:45:13 912

转载 对面向接口编程的理解

什么是面向接口编程

2016-06-10 11:59:20 2384

原创 对依赖注入的理解

依赖注入的理解

2016-06-10 11:58:49 1902

原创 对控制反转的理解

控制反转

2016-06-10 11:58:21 1414

原创 设计模式系列:合成复用原则

合成复用原则

2016-06-10 11:42:14 729

原创 设计模式系列:迪米特法则

迪米特法则

2016-06-10 11:41:34 796

原创 设计模式系列:接口隔离原则

问题由来问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。 解决方案:将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。定义在讲解接口隔离原则之前,先明确一下我们的主角——接口。接口分为两种:实例接口。在java中声明一个类,然后用new关键字产生一个示

2016-06-10 11:41:02 1063

原创 设计模式系列:依赖倒置原则

依赖倒置原则

2016-06-10 11:40:33 871

原创 设计模式系列:里氏替换原则

里氏替换原则

2016-06-10 11:39:52 1151

原创 设计模式系列:开闭原则

只有依赖于抽象。实现开放封闭的核心思想就是对抽象编程,而不对具体编程,因为抽象相对稳定。让类依赖于固定的抽象,所以对修改就是封闭的;而通过面向对象的继承和对多态机制,可以实现对抽象体的继承,通过覆写其方法来改变固有行为,实现新的扩展方法,所以对于扩展就是开放的。这是实施开放封闭原则的基本思路,同时这种机制是建立在两个基本的设计原则的基础上,这就是Liskov替换原则和合成/聚合复用原则。

2016-06-10 11:39:16 1905

原创 设计模式系列:单一职责原则

问题由来  问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。  解决方案:遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生故障风险;同理,当修改T2时,也不会使职责P1发生故障风险。  但是即便是经验丰富的程序员写出的程序

2016-06-10 11:38:33 1976

原创 2016年技术源码&书籍阅读总结

时间书名总结 android编程入门指南  android群英传  android开发艺术探索  深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)  程序员的自我修养-链接,装载与库  设计模式之禅  设计模式的艺术——软件开发人员内

2016-06-09 10:35:21 2450 3

原创 技术之路如何成长而不迷茫

1.投入时间,投入时间,投入时间把你可以压榨的时间都投入到你的目标上,你的周末时间,你的下班时间。2.立即去做,立即去做,立即去做,并且不要停止3.实践再实践4.趋势眼光5.跟随跟随一位前辈,多向前辈问。 大部分人,都是浑浑噩噩的。环境把他们塑造成什么样子,他们就变成什么样子。就算发现理想和现实相差甚远,也只是发发牢骚,依旧为衣食奔波。只有很少数真正优秀,真正勇敢的人,才会执著于自己的天性,坚持

2016-06-08 19:59:04 1891

原创 zaker splash页面实现

一.效果二.代码PullDoorView/** * Created by niehongtao on 16/6/8. * zaker自定义效果页面 */public class PullDoorView extends RelativeLayout { private Scroller mScroller; private int mScreenWidth = 0; p

2016-06-08 17:21:28 870

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除