自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式之单例模式

定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点          如:Singleton——负责创建Singleton类自己的唯一实例,并提供一个getInstance的方法,让外部来访问这个类的唯一实例     饿汉式:private static Singleton uniqueInstance = new Singleton();  【线程安全的】    ——

2016-10-08 17:39:44 409

原创 设计模式之原型模式

原型模式介绍          原型二字表明了该模式应该有一个样板实例,用户从这个样板对象中复制出一个内部属性一致的对象,这个过程我们称之为“克隆”。被复制的实例就是我们所称为的原型。原型模式定义          用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象模式的使用场景类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等,通过原型拷

2016-10-08 17:37:46 402

原创 设计模式之建造者模式

模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示模式的使用场景:相同的方法,不同的执行顺序,产生不同的事件结果时多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用Builder模式非常合适Android源码中的模式实现在Android源码中,我们最常用的B

2016-10-08 17:34:32 325

原创 常见的面向对象设计原则

1.单一职责原则(SRP):一个类应该仅有一个引起它变化的原因。例如:两个完全不一样的功能就不应该放在一个类中。一个类中应该是一组相关性很高的函数、数据的封装。2.开放关闭原则(OCP):一个类应该对外扩展开放,对修改关闭3.里氏替换原则(LSP):子类可以替换掉它们的父类型例如:任何继承自View类的子类都可以设置给show方法,就是所说的里氏替换。通过里氏替换,就可以自定义各式

2016-10-07 17:29:11 362

原创 设计模式之观察者模式

1.观察者模式的定义定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。2.观察者的使用场景a.关联行为场景,关联行为是可拆分的,而不是“组合”关系b.事件多级触发场景c.跨系统的消息交换场景,如消息队列,事件总线的处理机制3.观察者模式结构Subject(抽象主题):被观察者(Observable),抽象主体

2016-10-07 16:34:56 413

原创 设计模式之装饰者模式

1.装饰模式介绍每个人都有着各式各样的装扮,但是不论你的穿着怎么样,但是个人的本质确实不变的,这就是装饰模式,装饰物也许各不相同,但是对象的本质是不变的。2.装饰模式的定义动态的给一个对象添加一些额外的职责,动态的扩展一个类。装饰模式比继承更为灵活。3.遵循的设计原则多用组合,少用继承。利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。然而。如果

2016-10-07 11:41:41 328

转载 单例模式与静态变量的区别

单例的特点:保证某类只存在唯一实例。该类本身完成自身的初始化。获取该唯一实例的方式非常明确,可以通过该类本身定义的静态方法getInstance()获取该类的唯一实例引用。静态变量定义某类的实例引用特点:该类的实例引用的静态变量可定义在任何文档类当中。获取该类的实例引用的静态变量,可以通过定义该静态变量的类名通过点语法进行访问该引用。

2016-10-05 00:00:23 4750

原创 java之继承与组合

1.Question:有没有听说过组合优于继承这样的说法?如果有听说过,那么你是怎么理解的?继承是一种多态工具,而不是一种代码复用工具。有些开发者喜欢用继承的方式来实现代码复用,即使在没有多态的情况下。在什么时候使用继承呢?只能在类之间有“父子”关系的情况下使用a.不要仅仅为了代码的复用而继承。当你使用组合来实现代码的复用时,是不会产生继承关系的。过度使用继承的话,如果修改了父类,会损

2016-10-03 16:07:44 383

原创 Java之方法的重写、重载、泛型

1.方法重载:发生在编译时。方法的重载也被称为编译时多态,因为编译器可以根据参数的类型来选择使用哪个方法。public class{ public static void fun(String param1); //方法1 public static void fun(int param1); //方法2

2016-10-03 15:15:43 1881

原创 2016.9.12 cvte面试

1.项目说下你觉得你做的最好的一个项目,画一下整体架构,就是哪部分代码负责哪部分功能说下你了解的设计模式,在你的项目里用到了哪些设计模式,具体用到的地方?2.javajava学了多久?说下接口和抽象类的区别,在你项目中哪些地方用到了接口和抽象类?说下泛型,用到的集合类,说的hashMap,说一下底层的实现,如果你要往hashMap插入一个数,详细说一下插入的具体流程,如果出

2016-09-13 08:15:13 591

原创 Android进程保活

Android进程拉活包括两个层面:提升进程优先级,较低进程被杀死的概率进程被杀死后进行拉活提升优先级(具体实现代码看https://zhuanlan.zhihu.com/p/21987083?refer=bugly)          系统优先级:前台>可见>服务>后台>空进程利用Activity提升权限                   

2016-09-04 20:31:26 627

原创 Android之Context

Context概念          Context,在加载资源、启动一个新的Activity、获取系统服务、获取内部文件路径、创建View操作时等都需要Context的参与。          Context字面意思是上下文,或者叫做场景,也就是用户与操作系统操作的一个过程,比如,你再打电话,场景包括电话程序对应的界面,以及隐藏在背后的数据          Context是

2016-08-26 22:55:34 452

原创 Android之Volley的使用

1.创建一个全局的请求队列:public class MyApplication extends Application {// 创建一个全局的请求队列 public static RequestQueue queues; @Override public void onCreate() { super.onCreate(); q

2016-08-22 17:47:43 310

转载 Android异步消息处理机制 深入理解Looper、Handler、Message三者关系

转载子:http://blog.csdn.net/lmj623565791/article/details/38377229 ,本文出自【张鸿洋的博客】很多人面试肯定都被问到过,请问Android中的Looper , Handler , Message有什么关系?本篇博客目的首先为大家从源码角度介绍3者关系,然后给出一个容易记忆的结论。1、 概述Handler 、 Loop

2016-08-16 12:04:42 501 2

原创 DNS解析过程

主机向本地域名服务器的查询一般都是采用递归查询。          所谓递归查询就是:如果主机询问的本地域名服务器不知道被查询域名的ip地址 ,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文(即替该主机继续查询),而不是让该主机自己进行下一步的查询。因此递归查询的结果或者是所要查询的IP地址,或者是报错,表示无法查询所需的IP地址本地域名服务器向根域名服

2016-08-16 08:56:42 290

原创 解析XML格式的数据

在网上传输数据时最常用的格式有两种:XML和JSON。1.解析XML格式有两种解析方法:Pull和SAX需要解析的XML格式的内容如下: 1 Google Maps 1.0 21 Google 2.11.0 3 Maps 2.3 Pull解析方式: public class MainActivity extends

2016-08-14 16:54:03 3238

原创 Android——解析异步消息处理机制

Android中的异步消息处理主要由四部分组成,Message、Handler、MessageQueue、Looper.1.MessageMessage是线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。Message有what字段,除此以外,还可以使用arg1和arg2字段来携带一些整型数据,使用obj字段携带一个Object对象。2.HandlerHa

2016-08-08 15:39:01 344

原创 Android——IntentService

IntentSevice为在单一后台线程中执行任务提供了一种直接的实现方式。它可以处理一个耗时的并确保不会影响到UI的响应性。另外IntentService的执行还不受UI生命周期的影响,以确保AsyncTask能够顺利运行。但是IntentService有以下局限性:不可以直接和UI做交互,为了他能把执行的结果体现在UI上,需要把结果返回给Activity工作任务队列是顺序执

2016-08-08 11:27:47 304

原创 Android——Service

长期在后台运行,如接收推送消息,在锁屏状态下监听传感器信息     在外界执行StartService(new Intent(MainActvity.this,MyAty.class));时,会执行onCreate()和onStartCommand(Intent i,int flags,int startId){    }     public class MyService extend

2016-08-07 12:29:54 519

原创 Android——序列化

1.Serializable方式Serializable是序列化的意思,表示一个对象可以转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。序列化的方式很简单,只需要让一个类去实现Serializable接口。public class Person implements Serializable{ private String name; privat

2016-08-07 00:30:21 257

原创 一个HTTP请求的详细过程

1.一个http请求的详细过程我们来看下当我们在浏览中输入 http://www.mycompany.com:8080/mydir/index.html,背后发生的一切。首先http是一个应用层的协议,因为双方要通讯,所以事先约定一个规范。连接当我们输入这样的一个请求,首先要建立socket连接,因为socket是通过ip地址和端口建立的,所以之前还有一个DNS解析过程。把

2016-08-05 21:43:29 1046

原创 JVM——高效并发

1.Java内存模型(Java Memory Model,简称JMM)JMM规定了所有的共享变量都存储在主内存(Main Memory)中,(这里的主内存仅仅只是虚拟机内存的一部分)。每条线程都有自己的工作内存(Working Memory),线程的工作内存中保存了变量的副本,线程对于变量的所有操作(读取、赋值等)都必须在自己的工作内存中,而不能直接读写主内存中的变量值。不过,线程与线程之间也

2016-08-04 11:44:47 957

原创 四大组件的运行状态

四大组件:Activity、Service、BroadcastReceiver、ContentProvider四大组件的运行状态:Android的四大组件除了BroadcastReceiver以外,其他的三种都必须在Android-Manifest中注册,对于BroadcastReceiver来说,它既可以在Android-Mainfest中注册也可以通过代码来注册。在调用方式上,Ac

2016-08-01 23:07:29 657

原创 JAVA——垃圾收集器与内存分配策略

Garbage Collection(GC)首先,有三个问题:1.哪些内存才能需要回收?2.什么时候回收?3.如何回收?针对以上三个问题,我们对于GC展开讨论:对象已死吗?在堆中存放着Java世界几乎所有的对象实例,GC在对堆进行回收前,第一件事就是先确定哪些对象还活着,哪些对象已死去(即不可能再被任何途径使用的对象)。1.引用计数算法(Reference Coun

2016-07-30 07:43:46 424

原创 Android性能优化——内存优化

应用APP内存的使用,也是评价一个应用性能高低的一个重要指标。虽然现在智能手机的APP的内存越来越大,但是一个好的应用应当将效率发挥到极致,精益求精。不管什么应用,应该把内存效率、用户体验放在首位。1.什么是内存?答:由于Android应用的沙箱机制,每个应用所分配的内存大小是有限度的,内存过低就会触发LMK——Low Memory Killer机制。那么到底什么是内存呢?通常我们说的就是

2016-07-29 21:27:21 361

原创 Android性能优化——布局优化

1.Android UI渲染机制人眼所感觉的流畅画面,需要画面的帧数达到40帧每秒到60帧每秒,最佳的fps大概是在60fps左右,这是评价一个显卡性能高低的标准之一。fps:Frame(画面、帧) per second。就是指动画或视频的画面数,每秒的帧数越多,就画面越流畅。当fps太低时,我们肉眼就能明显感觉到屏幕的闪烁,不连贯,图像显示效果和视觉效果很差。在Android中,系统

2016-07-28 14:47:02 406

原创 Activity的缓存方法

有a、b两个activity,当a进入b之后的一段时间,可能系统就把a回收了,这时候按back键,执行的不是a的onStart()方法,而是onCreate()方法,a被重新创建了一次,这是a的临时数据和状态就很有可能就丢失了。而Activity中的onSaveInstanceState()回调方法会保存临时的数据和状态,这个方法一定会再activity回收之前调用。方法中有一个Bun

2016-07-27 17:25:59 2869 3

原创 Java四种线程池的使用

首先,来了解一下什么叫做线程池?线程池的作用是什么??线程池的组成部分??1.为什么要使用线程池?   在JAVA中,对应于一个请求创建一个线程的开销是非常大的。在实际应用中,服务器在创建线程和销毁线程上花费的时间和消耗的系统资源都相当大,甚至可能要比处理实际的用户请求的时间和资源大得多。除了创建和销毁线程的花销大以外,活动的线程也需要消耗系统资源。如果一个JVM里创建了太多的线程,可能会

2016-07-26 23:33:31 338

原创 InetAddress类和InetSocketAddress类

InetAddress类是Java对IP地址的封装,代表IP地址。InetAddress类的对象只能通过静态方法,比如根据主机名获取主机的IP地址封装对象。代码实现:1.InetAddress add = InetAddress.getByName("主机名"); //通过主机名来获取主机的IP地址 System.out.println("IP地址:"+add.getHostAddr

2016-07-26 17:14:13 760

原创 Android——《第一行代码》之Activity

private void scheduleTimeoutLocked(ToastRecord r) { mHandler.removeCallbacksAndMessages(r); Message m = Message.obtain(mHandler, MESSAGE_TIMEOUT, r); long delay = r.durat

2016-07-23 16:15:13 705

原创 Android——《第一行代码》

首先,说一下目录结构:1.src此目录是放置JAVA代码的地方。2.gen这个目录里的内容都是自动生成的,主要有一个R.java文件,你在项目中添加的任何资源都会在其中生成一个相应的资源id.这个文件永远都不要手动去修改它。3.assets这个目录用的不多,主要存放一些随程序打包的文件,在你的程序运行时,可以动态的读取到文件的内容。如果你的程序中用到了webView加载本地

2016-07-23 14:47:31 788

原创 学习笔记-volatile

volatile-与java内存有关1.内存模型相关概念若一个变量在多个CPU都存在缓存(多线程编程才会出现),那么可能就会出现缓存不一致的情况,为了解决这一问题,有以下两种方法:     CPU与其他部件的通信是通过总线来进行的,若对总线加LOCK#锁,阻塞其他CPU对其他部件(如内存)的访问(?????),从而只有一个CPU能使用这个变量的内存。若一个线程执行 i=i+1,

2016-05-28 13:45:13 275

原创 学习笔记-synchronized

1.可见性:一个线程对于共享变量的修改,能够及时被其他线程看到。那什么是共享变量呢?答:一个变量在多个线程的工作内存中存在副本,则这个变量就共享变量。工作内存?答:Java Memory Model(Java内存模型),简称JMM。JMM描述了Java程序中各种变量(共享变量)的访问规则以及JVM中将变量存储到内存和从内存中读取变量这样的底层细节。 由上图可知,线程并不

2016-05-27 12:44:22 219

空空如也

空空如也

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

TA关注的人

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