自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 动态代理模式

动态代理模式属于比较困难的一个设计模式。开发中用到的很少,因为动态代理模式的应用场景是搭建框架,对于大部分人而言能用就可以了,根本没机会写。但是动态代理模式学习掌握明白去分析可以源码很有帮助了。一:静态代理模式事物的发展是有规律的,现有静态才会有动态的需求。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的...

2020-01-19 22:50:33 160

原创 java高级特性泛型

Java语言高级1. 使用泛型的意义为什么我们需要泛型?所以泛型的好处就是:l 适用于多种数据类型执行相同的代码例如实现int类型的加法, 有时候还需要实现long类型的求和, 如果还需要double类型的求和,需要重新在重载一个输入是double类型的add方法。如果没有泛型每种类型数字都要重载一个add方法,代码量多而且没有必要,后续维护也麻烦,如果add方法里面增加一行代码?那...

2020-01-11 17:22:06 253

原创 kotlin中的lambda表达式

一:什么是lambda表达式lambda表达式:可以用来表示函数的语法糖,本质是一个匿名函数。二:匿名函数匿名内部类也就是没有名字的内部类匿名函数与普通函数基本相似,只是将普通函数的函数名去掉而已。正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写三:为什么用lambda表达式简单,减少代码量,提高代码编写阅读效率。lambda表达式只是换了一个写代码的方式上...

2019-12-29 21:29:23 197

原创 Kotlin作用域函数

kotlin中经常出现run、with、let、also、apply,开始时候容易迷糊,有什么用有什么区别?一:作用作用域函数 用于扩展方便开发者编码的内置函数,能大大提高开发者的开发效率。首页明确一点他们都是锦上添花,不用一样可以写代码,但是优秀的代码必然需要使用作用域函数提高效率。二:定义Kotlin 标准库包含几个函数,它们的唯一目的是在对象的上下文中执行代码块。当对一个对象调用这...

2019-12-24 15:23:01 229

原创 mvp为什么是必须的

1.最原始的mvc最开始做Android没有架构,那就是mvc了,activity包罗万象,逻辑在activity,ui修改在activity结果一个activity上千行代码也是正常了,于是乎出现了mvp。最原始的mvc只能写小项目,大项目根本不可维护不可扩展,多人协作开发更是灾难了。2.升级的mvp解耦,好的项目必须解耦,这样才能扩展维护。解耦就是,个人自扫门前雪,负责好自...

2019-12-22 22:38:57 150

原创 kotlin:向空指针异常说再见

1.java中的空指针java最常见,最危险的错误在java中,我们最常见的错误莫过于空指针异常。不好好的处理的话,程序很容易出现崩溃的现象。NullPointerException是java程序员的噩梦,最最高频的bug出现空指针的现象是常见的,也是最危险的。那怎么去解决呢?在java中,我们需要主动去检查这个引用对象是否为空。这就有个很大的缺点:我们会常常不经意,或者...

2019-12-21 20:56:44 529

原创 kotlin快速学习路径

使用了一段时间kotlin真的大赞,强烈推荐。kotlin必然是未来Android程序员的必备选择。一:为什么必须学kotlin1.JetBrains嫡子,Google干儿子,IDE和SDK支持度一流。未来Android开发不会kotlin是不行的2.跟Java完全兼容,无缝互调,java熟练学习kotlin不存在任何问题,学习成本非常低。不会kotlin就先写java自由调用。...

2019-12-14 23:06:57 323

原创 一张图说明白UML类图

阅读源码时候,如何快速高效率整理清楚项目中的各个类之间的关系?UML类图是必备工具,虽然开发编码中不需要用到,但是掌握uml类图是提高效率成为优秀程序员必备的技能。1 什么是UML统一建模语言(Unified Modeling Language,缩写UML)是非专利的第三代建模和规约语言。UML是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制...

2019-12-08 22:29:51 147

原创 如何成为一个优秀程序员?

如何成为一个优秀程序员?工作5年就有5年经验吗?答案否定的!!!有些人工作3年有了5年经验,因为加班多(因为他们找到了正确的方法持续努力提高)。有些工作了5年也只有3年经验,因为3年经验用了5年。自己多牛(多水)只有面试时候才知道,最近面试一次次面对灵魂的拷问,我发现工作5年自己真的没有5年经验了。哪里出问题???核心自己的信念出现了问题,过去固执的认为工作时间长...

2019-12-07 22:22:39 179

原创 Android多线程(二)Handler源码分析

在Android开发的多线程应用场景中,Handler机制十分常用将工作线程中需更新UI的操作信息 传递到UI主线程,从而实现 工作线程对UI的更新处理,最终实现异步消息的处理下面是网上找到Handler流程图一:基础知识二:主要流程Handler,loop轮询检测发送消息到MessageQueue入列,Handler回调方法处理消息,重写handMe...

2019-11-09 23:05:54 99

原创 java回调

一:背景 why-为什么需要回调关于什么是回调网上很多,但是很少有从为什么需要回调开始,所以下面从基本调用开始到最后为什么使用回调 1. 同步调用 A类中a()去调用B类的b()。 一个最大的问题,阻塞,在a()方法执行了2行代码在去调用b()方法,但是b()执行了耗时的操作,那么a()只能等到b()执行完,在能去执行或许的代码,产生了整个流程的阻塞。 所以这个只适合非耗时操作,也是

2019-11-08 22:15:06 86

原创 Android多线程(一)多线程基础

多线程一直计划系统复习下,拖延了很久,网站找资料学习整理,先完成1.0版本,后续逐步完善修改开始第一步才会有后续进展1:线程线程 (轻量级进程,自己不独立拥有自己,和别的进程共享进程所拥有的资源),提高并发性能。基本定义:一个基本的CPU执行单元 & 程序执行流的最小单元拥有类似于进程的就绪、阻塞、运行3种基本状态,具体如下图:1.1:守护线程定义:守护...

2019-11-08 22:13:40 71

原创 简单选择排序

简单选择排序是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止,简单选择排序是不稳定排序。  在算法实现时,每一趟确定最小元素的时候会通过不断地比较交换来使得首位置为当前最小,交换是个比较耗时的操作。其实我们很容易发现,在还未完全确定当前最小元素之前,这些交换都是无意义的。我们可以通过设置一个变量min,每一次比较仅存储较小...

2019-10-30 18:40:52 141

原创 Java实现冒泡排序

原理:每次比较两个相邻的元素,将较大的元素交换至右端。思路:每次冒泡排序操作都会将相邻的两个元素进行比较,看是否满足大小关系要求,如果不满足,就交换这两个相邻元素的次序,一次冒泡至少让一个元素移动到它应该排列的位置,重复N次,就完成了冒泡排序。冒泡排序总的平均时间复杂度为:O(n2)。数组长度n,我们的数据是反序的则需要进行n-1趟排序。每趟排序要进行n-i次比较(1≤i≤n-1...

2019-10-29 18:24:34 121

原创 java 封装,继承、多态

封装封装,封装的目的就是“互不影响”,隐藏细节,对使用者而言是个黑盒子,安全可复用,不需要关注细节,直接调用方法访问。只隐藏对象的属性和实现细节,仅对外提供公共访问方式好处:将变化隔离、便于使用、提高复用性、提高安全性原则:将不需要对外提供的内容隐藏起来;把属性隐藏,提供公共方法对其访问-------------------------------...

2019-10-28 18:42:30 86

原创 1024程序员节

1024程序员节是中国广大程序员的共同节日。1024是2的十次方,二进制计数的基本计量单位之一。程序员就像是一个个1024,以最低调、踏实、核心的功能模块搭建起这个科技世界。1G=1024M,而1G与1级谐音,也有一级棒的意思。...

2019-10-24 17:58:56 147

原创 新开始

很久没写技术博客,简书公众号写了很多关于投资认知思考的博客,但是技术相关多是一些零碎的笔记。输出倒逼输入,最近大量看技术相关书籍,写代码是关键,输出新知识更是关键。找到很久没用的csdn开始写博客了。正确多更新,写出来才可以更好理解。个人计划很久一直没走出第一步,因为没想好写什么,今天先走出第一步了,不然估计很久不会行动了...

2019-10-23 11:09:09 114

原创 Android与Gradle

Android Studio 的项目默认生产了大量文件。如果不了解gradle会经常遇到各种莫名其妙的问题。 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置。在语法上是基于Groovy语言的(Groovy 是一种基于JVM的敏捷开发语言,可以简单的理解为强类型语言java的弱类型版...

2019-01-08 16:14:08 182

原创 深入理解 Java 虚拟机-内存

1.内存区域分析 线程私有内存区:跟随线程的产生和消亡 程序计数器:一块较小的内存空间,它是当前线程所执行的字节码的行号指示器。每条线程都有一个独立的的程序计数器,各线程间的计数器互不影响,因此该区域是线程私有的。 本地方法栈:保存栈引用指向java堆Java 堆 Java Heap 是 Java 虚拟机所管理的内存中最大的一块,它是所有线程共享的一块内存区域。**几乎所有的对象实例和数

2017-12-04 17:46:51 208

原创 深入理解 Java 虚拟机-jvm

什么是 JVMJVM (Java Virtual Machine)是 Java 的核心和基础,在 Java 编译器和 os 平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利用软件方法来实现的抽象的计算机,可以在上面执行 Java 的字节码程序。Java 编译器只需面向 JVM,生成 JVM 能理解的代码或字节码文件。Java 源文件经编译器,编译成字节码程序,通过 JVM

2017-12-04 14:31:31 231

原创 android如何丧心病狂的压缩

1.可以直接拷贝用的代码 private void encode(String path) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); //输出流baos BitmapFactory.Options options = new BitmapFactory.

2017-11-22 17:51:16 388

原创 handler

public Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case 1: //ui主界面做处理 break; def

2017-11-22 11:07:08 216

原创 Dalvik ART的理解

一:概述 Dalvik是Google公司自己设计用于Android平台的虚拟机。但是性能一直备受指责。 Android L谷歌退出了ART,简单来说ART是Dalvik 的升级版本,通过空间换时间提高了运行效率和用户体验。 二:Dalvik Dalvik 采用寄存器比基于栈的jvm更加优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程

2017-11-13 14:43:56 408

原创 java接口和继承

一:why为什么需要最重要是设计理念的区别: 继承体现的是 is a 的关系,父类中一般定义的是整个继承机构的共性功能;(只有一些子类都需要的功能才有必要放入父类简化代码) 实现体现的是 like a 的关系,接口中一般定义的是整个继承结构的扩展功能;(例如回调,内名内部类只是需要实现一个回调最后执行的方法就可以,如果去继承了一个父类,太浪费了) 接口是一个强制契约,要么不去实现,要么去实现接

2017-09-24 18:03:57 228

原创 java回调

一:背景 why-为什么需要回调关于什么是回调网上很多,但是很少有从为什么需要回调开始,所以下面从基本调用开始到最后为什么使用回调 1. 同步调用 A类中a()去调用B类的b()。 一个最大的问题,阻塞,在a()方法执行了2行代码在去调用b()方法,但是b()执行了耗时的操作,那么a()只能等到b()执行完,在能去执行或许的代码,产生了整个流程的阻塞。 所以这个只适合非耗时操作,也是项

2017-09-23 22:13:01 218

原创 adnroid BroadcastReceiver 分析

BroadcastReceiver  四大组件之一,使用频率不是很高,一直采用广播发送/接收的形式,也就是我们今天要讲的Broadcast和BroadcastReceiver,这种方式本质上属于消息订阅/发布的事件驱动流形式。

2017-09-14 15:50:59 193

原创 观察者模式

观察者模式 观察者模式:这个名字比较误导人,Observer(观察者)不是主动的去关注Observable(被观察者),而是很被动的告诉,Observable(被观察者)我需要关注你了,你有什么变化都要通知我,通知我后我做别的操作。很被动的一个角色。 所以Observer也被成为Publish-Subscribe(发布-订阅)模式,这样更加的具体描述了两者的关系。Observer(观察者)去订

2017-09-07 14:32:24 315

原创 android中多线进程开发

进程:进程是操作系统最核心的概念,它是对正在运行的程序的抽象。线程是进程中的一个实例,是系统实施调度的独立单位。 进程是系统分配资源和调度的基本单位,所以进程都有独立的资源和内存空间,别的进程部分随意访问。android中每个app分配内存有限,如果到达上线很容易oom,使用多进程可以有效分担主进程的压力,主进程进行ui相关操作,网络请求数据保存很多可以开启一个server在一个新

2017-09-06 12:09:28 233

原创 多线程相关知识

关于线程进程的理解一个例子:进程:计算机核心cpu,如同一个工厂,时刻工作。但是工厂资源有限,一次只能运行一个车间(进程)。一个cup一次只能运行一个任务。线程:一个车间里面包含很多员工,(线程)车间的空间对全部工人开发(每个线程都可以使用这些共享内存)。但是空间有限,例如一个人在厕所,只能等待,为了不让别人打扰就需要上锁。自己结束后其他人在运行(一些内存资源读写时候必须一个线程结束后

2017-09-04 15:29:17 182

原创 解释器模式

解释器模式描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发的编译器中。它描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。定义:给定一个语言,定义它的语法,并定义一个解释器,这个解释器用于解析语言。就是相当于自定义一个格式的文件,然后去解析它。不用理解的那么复杂!android中的应用四大组件需要在Android

2017-08-21 16:54:52 219

原创 android国际化

最近做一些土耳其项目的国际化 string放入对应的反应文件后,发现一些特殊的字符无法正常识别,找一下解决方案。android 显示特殊符号的处理http://hsx9566.iteye.com/blog/1305052

2017-07-04 19:51:47 257

原创 Android图片加载-TakePhoto

TakePhotohttps://github.com/crazycodeboy/TakePhoto种的一个问题自定义UI自定义状态栏 修改颜色后,如果选择图片就会还原原始的颜色,后发现图片选择框架使用的MultipleImageSelecthttps://github.com/darsh2/MultipleImageSelect找到最原版的修改方案

2017-06-20 16:00:55 1298 1

原创 装饰模式

12.2 装饰模式概述 装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为,在现实生活中,这种情况也到处存在,例如一张照片,我们可以不改变照片本身,给它增加一个相框,使得它具有防潮的功能,而且用户可以根据需要给它增加不同类型的相框,甚至可以在一个小相框的外面再套一个大相框。 装饰模式是一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责

2017-06-02 14:35:38 219

原创 组合模式

组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。组合模式使用面向对象的思想来实现树形结构的构建与处理,描述了如何将容器对象和叶子对象进行递归组合,实现简单,灵活性好。

2017-06-01 14:02:13 192

原创 桥接模式

定义: 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。例子: 两种常见文具的区别,它们是毛笔和蜡笔。大中小3种型号的画笔,能够绘制12种不同的颜色,如果使用蜡笔,需要准备3×12 = 36支,但如果使用毛笔的话,只需要提供3种型号的毛笔,

2017-06-01 13:42:36 246

原创 适配器模式

适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

2017-05-31 13:18:20 242

原创 对象的克隆-原型模式

原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。原型模式作为一种快速创建大量相同或相似对象的方式,在软件开发中应用较为广泛,很多软件提供的复制(Ctrl + C)和粘贴(Ctrl + V)操作就是原型模式的典型应用,下面对该模式的使用效果和适用情况进行简单的总结。

2017-05-31 13:05:35 331

原创 面向对象设计原则

面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中总结出的指导性原则. 设计模式都是7大设计模式的具体实现,如下图 单一职责原则一个类只负责一个功能领域中的相应职责-高内聚开闭原则软件实体应对扩展开放,而对修改关闭里氏代换原则核心增加扩展性.多态. 所有引用基类对象的地方能够透明地使用其子类的对象(父类可以转化成子类) 在软件中将一个基类对象替换成

2017-05-26 13:41:28 205

原创 为什么设计模式重要

设计模式来源来源建筑行业,人们对舒适住宅和城市环境存在一些共同的认同规律,所谓的共同模式了设计模式是什么每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的成功的解决方案,无须再重复相同的工作。这个定义可以简单地用一句话表示: 模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。【A pattern i

2017-05-25 14:32:01 356

原创 责任链模式

模式的定义一个请求沿着一条“链”传递,直到该“链”上的某个处理者处理它为止。简单实现的介绍责任链模式最原始的裸体结构:分支语句:public class SimpleResponsibility { public static void main(String[] args) { int request = (int) (Math.random() * 3);

2017-05-23 13:34:49 292

空空如也

空空如也

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

TA关注的人

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