- 博客(77)
- 收藏
- 关注
原创 Android studio 启动模拟器出现 VT-x is disabled in BIOS 以及 /dev/kvm is not found
Android studio 启动模拟器出现 VT-x is disabled in BIOS 以及 /dev/kvm is not found- 问题- 解决方案- Refer一、问题1、VT-x is disabled in BIOS 2、/dev/kvm is not found二、解决方案VT-x is disabled in BIOS解决方案如下:1、 安装Intel x86 Emula
2017-06-30 11:40:46
10427
原创 Android Studio Gradle配置相关问题
Android Studio-Gradle配置相关问题Gradle配置相关问题解决方案ps一、Gradle配置相关问题1、 AndroidStudio 打开项目在 Building gradle project info 一直卡住 2、 Android Studio 出现 Failed to open zip file 的问题 3、 Android studio 启动后卡在 refres
2017-06-30 11:05:41
427
原创 PANIC: HOME is defined but could not find Nexus_5_API_22_64-x86.ini file in $HOME/.android/avd
Mac下Android开发模拟器启动不了BUG解决方案一、bugPANIC: HOME is defined but could not find Nexus_5_API_22_64-x86.ini file in $HOME/.android/avd(Note: avd is searched in the order of \$ANDROID_AVD_HOME,\$ANDROID_SDK
2017-06-28 12:17:57
1720
原创 浅谈GC垃圾回收器
浅谈GC垃圾回收器java中四种类型的垃圾回收器Java 8 的新特性与Java垃圾回收有关的JVM关键配置使用JVM GC参数的例子Java垃圾回收器的性能评估工具小结Refer 一、Java有四种类型的垃圾回收器:1、串行垃圾回收器(Serial Garbage Collector)2、并行垃圾回收器(Parallel Garbage Collector)3、并发标记扫描垃圾回
2017-06-24 17:22:32
585
原创 关于GC常用算法的研究
关于GC常用算法的研究GC策略解决了哪些问题?GC策略采用的何种算法?对象分类对象对应的内存区域JAVA堆的对象回收(夭折对象和老不死对象)方法区的对象回收(不灭对象)回收的时机增量式GC详解函数finalizeGC程序交互Java编程建议 一、GC策略解决了哪些问题?既然是要进行自动GC,那必然会有相应的策略,而这些策略解决了哪些问题呢,粗略的来说,主要有以下几点。1、哪
2017-06-22 15:51:59
475
原创 Java内存区域与内存溢出
内存区域内存溢出内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。下面详细阐述各数据区所存储的数据类型。 程序计数器(Program Counter Register)一块较小的内存空间,它是当前线程所执行的字节码的行
2017-06-22 11:19:36
258
原创 全面解读Java NIO工作原理
输入/输出:概念性描述 本文简介: JDK 1.4 中引入的新输入输出 (NIO) 库在标准 Java 代码中提供了高速的、面向块的 I/O。本实用教程从高级概念到底层的编程细节,非常详细地介绍了 NIO 库。您将学到诸如缓冲区和通道这样的关键 I/O 元素的知识,并考察更新后的库中的标准 I/O 是如何工作的。您还将了解只能通过 NIO 来完成的工作,如异步 I/O 和直接缓冲区。 输
2017-06-20 20:34:57
1453
原创 关于CAS的研究
引言什么是CAS一、引言 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁。锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制,但
2017-06-20 11:50:24
458
原创 简述DCL失效原因,解决方法
这是一道面试题DCL单例模式 针对延迟加载法的同步实现所产生的性能低的问题,我们可以采用DCL,即双重检查加锁(Double Check Lock)的方法来避免每次调用getInstance()方法时都同步。实现方式如下:public class LazySingleton { private int someField; private static LazySingleton
2017-06-20 10:06:38
1944
1
原创 AQS原理浅析
这是一道面试题:简述AQS原理 AQS核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。 CLH(Craig,Landin,and Hagersten)队列是一个虚拟的双
2017-06-19 17:33:19
10219
原创 JUC(Lock)和Monitor Object(Synchronized)机制区别是什么
这是一道面试题synchronized和lock的用法区别synchronized和lock性能区别Refer一、synchronized和lock的用法区别 synchronized:在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。 lock:需要显示指定起始位置和终止位置。一般使用ReentrantLoc
2017-06-18 17:41:01
2722
原创 关于happens-before规则的研究
简介JMM是什么?线程间的操作可见性happens-before规则总结Refer简介### Java使用新的JSR-133内存模型,JSR-133使用happens-before的概念来阐述操作之间的内存可见性。在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须要存在happens-before关系。这里提到的两个操作既可以是在一个线程之内,也可以是在不
2017-06-16 11:09:33
526
原创 关于synchronized的Monitor Object机制的研究
这是一道面试题Synchronized 介绍monitor Object 设计模式Monitor(java多线程同步机制)Refersynchronized介绍 synchronized关键字通过修饰一个方法或声明一个代码块,从而产生一个同步对象锁以及对应的同步代码块。 每当有线程要对该同步代码块进行访问时,线程就会首先尝试去获取该对象锁,并在成功获取到对象锁后,对该同步代码
2017-06-15 10:04:35
9709
转载 设计模式之解释器模式(Interpreter)
解释器模式(Interpreter) 解释器模式是我们暂时的最后一讲,一般主要应用在OOP开发中的编译器的开发中,所以适用面比较窄。Context类是一个上下文环境类,Plus和Minus分别是用来计算的实现,代码如下: public interface Expression { public int interpret(Context context);
2017-06-15 09:25:47
1910
转载 设计模式之中介者模式(Mediator)
中介者模式(Mediator) 中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。如果使用中介者模式,只需关心和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行,这有点像spring容器的作用。先看看图: User类统一接口,User1和User2分别是不同的对象,二者
2017-06-15 09:19:15
319
转载 设计模式之访问者模式(Visitor)
访问者模式(Visitor) 访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。访问者模式适用于数据结构相对稳定算法又易变化的系统。因为访问者模式使得算法操作增加变得容易。若系统数据结构对象易于变化,经常有新的数据对象增加进来,则不适合使用访问者模式。访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者。访问者模式将有关行为集中到一个访问者对象中,其改变
2017-06-14 20:33:17
203
转载 设计模式之状态模式(State)
状态模式(State) 核心思想就是:当对象的状态改变时,同时改变其行为,很好理解!就拿QQ来说,有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态,所以,状态模式就两点:1、可以通过改变状态来获得不同的行为。2、你的好友能同时看到你的变化。看图: State类是个状态类,Context类可以实现切换,我们来看看代码:/** * 状态类的核心类 */
2017-06-14 20:23:37
276
转载 设计模式之备忘录模式(Memento)
备忘录模式(Memento) 主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些,通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是用来存储A的一些内部状态,类C呢,就是一个用来存储备忘录的,且只能存储,不能修改等操作。做个图来分析一下: Original类是原始类,里面有需要保存的属性value及创建一个备忘录类,用来保
2017-06-14 20:16:32
263
转载 设计模式之命令模式(Command)
命令模式(Command) 命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行。这个过程好在,三者相互解耦,任何一方都不用去依赖其他人,只需要做好自己的事儿就行,司令员要的是结果,不会去关注到底士兵是怎么实现的。我们看看关系图: Invoker是调用者(司令员),Receiver是被调用者(士
2017-06-14 19:59:54
235
转载 设计模式之责任链模式(Chain of Responsibility)
责任链模式(Chain of Responsibility) 接下来我们将要谈谈责任链模式,有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整。先看看关系图: Abstracthandler类提供了get和set方
2017-06-14 19:55:31
365
转载 设计模式之迭代子模式(Iterator)
迭代子模式(Iterator) 顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。我们看下关系图: 这个思路和我们常用的一模一样,MyCollection中定义了集合的一些操作,MyIterator中定义了一系列迭代操作,且持
2017-06-14 19:44:11
426
转载 设计模式之观察者模式(Observer)
观察者模式(Observer) 这个模式是类和类之间的关系,不涉及到继承,学的时候应该记得归纳,记得本文最开始的那个图。观察者模式很好理解,类似于邮件订阅和RSS订阅,当我们浏览一些博客或wiki时,经常会看到RSS图标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关
2017-06-14 19:35:47
280
转载 设计模式之模板方法模式(Template Method)
模板方法模式(Template Method) 解释一下模板方法模式,就是指:一个抽象类中,有一个主方法,再定义1…n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用。先看个关系图: 就是在AbstractCalculator类中定义一个主方法calculate,calculate()调用spilt()等,Plus和Minu
2017-06-14 19:20:29
200
转载 设计模式之策略模式(strategy)
策略模式(strategy) 策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数。关系图如下: 图中ICalculator提供计算的方法, AbstractCalculator是辅助类,提供辅助方法,接下
2017-06-14 19:08:16
314
转载 设计模式之享元模式(Flyweight)
享元模式(Flyweight) 享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。 FlyWeightFactory负责创建和管理享元单元,当一个客户端请求时,工厂需要检查当前对象池中是否有符合条件的对象,如果有,就返回已经存在的对象,如果没有,则创建一个新对象,FlyWeight是超类。一提到共享池,我们很容易联想到Java里面的J
2017-06-14 11:44:00
235
转载 设计模式之组合模式(Composite)
组合模式(Composite) 组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便。看看关系图: 直接来看代码: public class TreeNode { private String name; private TreeNode parent; private Vector<TreeNode> childr
2017-06-14 11:25:52
250
转载 设计模式之桥接模式(Bridge)
桥接模式(Bridge) 桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。我们
2017-06-14 11:12:37
227
转载 设计模式之外观模式(Facade)
外观模式(Facade) 外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口。看下类图:(我们以一个计算机的启动过程为例)我们先看下实现类: public class CPU { public void startup()
2017-06-14 10:40:28
280
转载 设计模式之代理模式(Proxy)
代理模式(Proxy) 其实每个模式名称就表明了该模式的作用,代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思。再如我们有的时候打官司,我们需要请律师,因为律师在法律方面有专长,可以替我们进行操作,表达我们的想法。先来看看关系图: 根据上文的阐述,代理模
2017-06-14 10:24:52
234
转载 设计模式之装饰模式(Decorator)
装饰模式(Decorator) 顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。关系图如下: Source类是被装饰类,Decorator类是一个装饰类,可以为Source类动态的添加一些功能,代码如下: public interface Sourceable { public v
2017-06-14 10:14:57
232
转载 设计模式之适配器模式(Adapter)
适配器模式(Adapter)类的适配器模式对象的适配器模式接口的适配器模式 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。首先,我们来看看类的适配器模式,先看类图: 核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口是Targetable,通过A
2017-06-14 09:52:48
208
转载 设计模式之原型模式(Prototype)
原型模式(Prototype) 原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。本小结会通过对象的复制,进行讲解。在Java中,复制对象是通过clone()实现的,先创建一个原型类: public class Prototype implements Cloneable {
2017-06-13 19:58:44
309
转载 设计模式之建造者模式(Builder)
建造者模式(Builder) 工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的。还和前面一样,一个Sender接口,两个实现类MailSender和SmsSender。最后,建造者类如下: public class Builder {
2017-06-13 19:33:50
179
转载 设计模式之单例模式(Singleton)
单例模式(Singleton) 单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱
2017-06-13 16:25:56
246
转载 设计模式之抽象工厂模式(Abstract Factory)
设计模式之抽象工厂模式(Abstract Factory) 工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。因为抽象工厂不太好理解,我们先看看图,然后就和代码,就比较容易理
2017-06-13 15:37:02
283
转载 设计模式之工厂方法模式(Factory Method)
工厂方法模式(Factory Method) 普通工厂模式多个工厂模式静态工厂模式总结Refer 工厂方法模式分为三种: 1、普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图: 举例如下:(我们举一个发送邮件和短信的例子)首先,创建二者的共同接口: public interface Sender {
2017-06-13 14:44:24
266
转载 设计模式分类与六大原则
设计模式分类设计模式六大原则Refer一、设计模式的分类 总体来说设计模式分为三大类:1、创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。2、结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。3、行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问
2017-06-13 11:50:48
642
原创 GridView嵌套在ViewPager中,ViewPager嵌套在ScrollView中,GridView显示不全问题
题引 ViewPager中的page是GridView,ViewPager嵌套在ScrollView中,ViewPager设置高度为MATCH_PARENT或者WRAP_CONTENT都显示不全。解决方案方法1 网上提出的解决方法是设置ViewPager的高度为固定值。 确实这样可以显示,但是这个固定值不好控制,不像一些广告banner可以设置固定的值,这里的item是GridV
2017-06-13 11:06:29
2048
2
原创 关于HTTP协议的研究
引言HTTP协议详解之URL篇HTTP协议详解之请求篇HTTP协议详解之响应篇HTTP协议详解之消息报头篇HTTP之状态码HTTP请求方法HTTP工作原理利用telnet观察http协议的通讯过程HTTP协议相关技术补充Refer一、引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,
2017-06-11 16:33:06
823
原创 修改ViewPagerIndicator的样式
Indicator的样式修改在values/styles中添加<style>创建<style>中使用到的drawable资源文件在Manifest中使用我们自定义的样式附用到的点九图片Refer第1步:在values/styles中添加<style><style name="StyledIndicators" parent="@android:style/Theme.Light">
2017-06-10 17:16:11
1565
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人