自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lemonGuo的大脑皮层、小脑、海马体、杏仁核.....

吾生也有涯,而知也无涯 。以有涯随无涯,殆已!

  • 博客(119)
  • 资源 (3)
  • 收藏
  • 关注

原创 JVM高级特性与实践(十二):高效并发时的内外存交互、三大特征(原子、可见、有序性) 与 volatile型变量特殊规则

Amdahl 定律:该定律通过系统中并行化与串行化的比重来描述多处理器系统能获得的运算加速能力。 摩尔定律:该定律用于描述处理器晶体管数量与运行效率间的发展关系。 并发处理的刚反应用时使得 Amdahl 定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类“压榨”计算机运算能力的最有力武器。多任务处理几乎是现代计算机操作系统的一项必备功能,由于计算机的运算速度与它的存储和通

2017-07-24 17:10:23 1980

原创 JVM高级特性与实践(十一):方法调用 与 字节码解释执行引擎(实例解析)

方法调用不等于方法执行,它唯一的任务就是确定被调用方法的版本,即具体调用哪一个方法,暂时不涉及方法内部的运行过程。在程序运行时,进行方法调用是最普遍、最频繁的操作,在讲解Class文件编译过程时,已经表明此过程不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(相当于“直接引用”)。此特性给Java带来了更强大的动态扩展能力

2017-07-24 09:09:35 1795 1

原创 JVM高级特性与实践(十):虚拟机字节码执行引擎(栈帧结构)

执行引擎是虚拟机最核心的组成部分之一。在讲解执行殷勤之前,再来思考一下“虚拟机”的概念,它是一个相对于“物理机”的概念,两者都有代码执行能力,区别是物理机的执行引擎时直接建立在处理器、硬件、指令集和操作系统上,而虚拟机则是由自己实现,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。本篇博文将从主要概念模型的角度讲解虚拟机的方法调用和字节码执行:栈帧概念及

2017-07-22 15:51:22 1938

原创 JVM高级特性与实践(九):类加载器 与 双亲委派模式(自定义类加载器源码探究ClassLoader)

虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码块被称为“类加载器”。类加载器可以说是Java语言的一项创新,也是Java语言流行的重要原因之一,它最初是为了满足 Java Applet 的需求而开发出来的,但类加载器却在类层次划分、OSGi、热部署、代码加密等领域大

2017-07-21 17:44:38 5575 2

原创 JVM高级特性与实践(八):虚拟机的类加载机制

虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。与那些在编译时需要进行连接工作的语言不同,在Java语言里,类型的加载、连接和初始化过程都是在程序运行期间完成的,此策略虽会令类加载时稍增加性能开销,但为Java程序提供高度的灵活性,Java里天生可以动态扩展的语言特性就是依赖运行期动态加载

2017-07-20 17:36:32 2052

原创 JVM高级特性与实践(七):九大类字节码指令集(实例探究 )

Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)已经跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)构成。由于Java虚拟机采用面向操作数栈而并非寄存器的架构,所以大多数的指令都不包含操作数,只有一个操作码。此篇博文将介绍九大类字节码指令集,并给出代码测试,对比字节码序列来加深指令学习,大致知识点如下:字节码概念、字节码所支持的数据类型

2017-07-19 14:21:35 2649

原创 JVM高级特性与实践(六):Class类文件的结构(访问标志,索引、字段表、方法表、属性表集合)

代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编译发展的一大步。上篇博文中学习讲解了Class类文件结构的有关知识点,关于数据项方面介绍了常量池,此篇文章将介绍完余下的数据项部分,大致知识点如下:访问标志、类索引、父类索引与接口索引集合、字段表集合、属性表集合、各数据项的定义、作用、结构组成及实例讲解

2017-07-18 17:50:36 2800 1

原创 JVM高级特性与实践(五):实例探究Class类文件 及 常量池

代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编译发展的一大步。在上计算机启蒙课时,老师曾跟我们讲过:“计算机只认识0 和 1,所以我们写的程序需要经编译器翻译成由0 和 1构成的二进制格式才能由计算机执行”。随着计算机发展至今,它仍然只能识别 0 和 1,但由于虚拟机以及大量建立在虚拟机之上的程序语言如雨后春笋般出现并蓬勃发展,将我们编写的程序编译成二进制本地机器码(Nat

2017-07-17 15:01:48 2298

原创 JVM高级特性与实践(四):内存分配 与 回收策略

Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:分配内存给对象、回收分配给对象的内存。关于第二点的回收内存,在之前的博文中已经讲解过虚拟机中的垃圾收集体系以及运作原理,而此篇文章就来探讨学习有关分配内存给对象,相关知识点如下:对象内存分配、回收解析Minor GC 与 Full GC概念五大策略解析策略应用到代码实践原理解析JVM高级特性与实践(一):Java

2017-07-15 12:45:59 3484 5

原创 JVM高级特性与实践(三):垃圾收集算法 与 垃圾收集器实现

内存回收与垃圾收集器在很多时候都是影响系统性能、并发能力的主要因素之一此篇博文将详细探讨垃圾收集算法和七大垃圾收集器实现,大致知识点如下:4种垃圾收集算法概念的学习各个算法之间的优缺点、原理运作过程Java堆内存结构7种垃圾收集器特征的学习各个垃圾收集器的原理、运作过程、使用场景、优缺点 JVM高级特性与实践(一):Java内存区域 与 内存溢出异常 JVM高级特性与实践(二):对象

2017-07-14 12:33:38 3326 1

原创 JVM高级特性与实践(二):对象存活判定算法(引用) 与 回收

关于垃圾回收器GC(Garbage Collection),多数人意味它是Java语言的伴生产物。事实上,GC的历史远比Java悠远,于1960年诞生在MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当Lisp尚在胚胎时期,开发人员就在思考GC需要完成的3件事情:哪些内存需要回收?什么时候回收?如何回收?目前GC早已解决了以上问题,内存的动态分配与内存回收机制已经相当成熟,

2017-07-12 13:21:05 3030 1

原创 JVM高级特性与实践(一):Java内存区域 与 内存溢出异常

套用《围城》中的一句话,“墙外面的人想进去,墙里面的人想出来”,用此来形容Java与C++之间这堵内存动态分配和垃圾收集技术所围成的“围墙”就再合适不过了。对于从事C、C++的开发人员而言,在内存管理领域,他们具有绝对的“权利”——拥有每个对象的控制权,并担负着每个对象生命周期的维护责任。而对于Java开发人员而言,在虚拟机自动内存管理机制的帮助下,无需为每一个创建new操作去配对 delete/f

2017-07-11 21:48:55 5535 5

原创 优雅设计封装基于Okhttp3的网络框架(三):多线程下载功能核心实现 及 线程池、队列机制、终止线程解析

通过前两篇博文的学习,已经带领大家学习了HTTP协议与Okhttp相关内容的学习,并且在上篇博文已经完成了初始编码工作:定义好了网络请求接口DownloadCallback 和网络请求类HttpManager,可以完成同步、异步请求操作,而接下来将编码实现多线程下载功能的核心代码,通过多个线程之间的管理和调度来处理下载任务,最后再引入队列机制来完善功能。此篇文章将学习:多线程核心功能编写,线程池原理,队列机制

2017-07-11 12:39:36 3607

原创 优雅设计封装基于Okhttp3的网络框架(二):多线程下载功能原理设计 及 简单实现

通过上篇博客的学习,相信大家已经对Http协议及OKhttp3框架使用有一定的理解,切身感受到OKhttp3请求网络方法简单易懂,是否意味着可以直接通过它去解决开发中的相关网络需求?并非如此,它的使用方式确实简单,但是在实现某一模块或功能时,不仅要考虑OKhttp3框架使用,还涉及到其余网络编程相关知识的混合,例如线程的调度和管理、本地缓存操作处理。当多个模块融合在一起时,会发现实现基本功能不仅仅是

2017-07-09 13:24:11 2108

原创 优雅设计封装基于Okhttp3的网络框架(一):Http网络协议与Okhttp3解析

如今Android开发中Okhttp已成为主流网络框架,内置丰富、全面、强大的网络请求功能,也为开发者提供了api,但是在项目开发中的大量使用,会出现api的重复调用、代码冗杂等现象。应当封装一个适用于项目的网络框架,便于使用。此系列文章旨于:基于okhttp3原始框架来设计封装一个满足业务需求、扩展性强、耦合度低的网络框架。具体框架功能为:扩展其对数据库的支持对多文件上传、多线程文件下载的支持数据解析

2017-07-04 16:36:11 4459

原创 以 Okhttp3源码 为例 ------ 图解 缓存机制 的原理和实现(下)

之前写的一篇是介绍缓存机制的流程和原理,并讲解了HTTP协议中缓存相关的字段,彻底了解了缓存机制原理后实践了Okhttp3框架的缓存实现,即第一篇的内容已经打下了基础,此篇就从源码的角度来解析Okhttp3框架的缓存机制的实现。(未看过第一篇,建议先了解缓存机制原理及HTTP协议中的重要字段,链接如下:) http://blog.csdn.net/itermeng/article/detai

2017-07-04 09:17:29 2727 3

原创 Android收发UDP报文详解 及 优雅解决接收不到问题

前段时间项目组接了一个研究所项目,移动端这边需要做一个UDP接收报文的程序APP,其中还涉及到多页面之间收发报文、动态修改地址、端口号等等。原本编写这个收发程序并不难,步骤也比较固定,在网上找了相关例子进行二次开发,可是发现UDP报文接收不到,这其中还是隐藏着某些坑,仅以此篇文章来总结其奥妙精髓。

2017-06-27 08:45:57 20633 11

原创 你仍未知道那些有关 Activity典型、异常情况下的生命周期解析

平常在移动开发过程中,说起Activity的生命周期,开发人员不会陌生,但是此处概念切勿混淆,其生命周期分为典型情况下的生命周期与异常情况下的生命周期。第一种代表在用户交互情况下,Activity所经历的生命周期变化;第二种是指Activity被系统回收或者当前设备的Configration发生改变从而导致Activity被销毁重建。

2017-06-26 09:29:26 1584

原创 18. 优雅解决The android gradle plugin version 3.0.0-alpha1 is too old, update to the latest version

问题:今日打开编译器准备码一番的时候,编译器就报以下错误。开发者应该知道,android studio的编译依赖于gradle,若你没有设置离线模式的话,它会去连网检测版本更新,有时会提示让你更新gradle版本,今天倒好直接编译失败,以下是报错内容和本机的plugin、gradle版本:报错如下Error:(1, 0) The android gradle plugin version 3.0.0

2017-06-25 16:37:55 23962 4

原创 某科学的超 Java网络编程:Socket通信原理及实例学习

首先来思考几个问题:如何把互联网上的网页抓下来?如何与互联网上的网络资源通信?如何在两个Java程序之间建立网络?面向连接与非面向连接的通信方式有什么区别?接下来以此篇文章来学习:理解计算机网络编程的概念,掌握如何使用Java在一台或多台计算机之间进行基于TCP/IP协议的网络通讯。通过理解TCP/IP协议的通讯模型,以JDK提供的java.net包为工具,掌握各种基

2017-06-20 10:19:57 4425 3

原创 17. error: cannot connect to daemon(adb.exe start-server' failed启动失败,端口占用)

error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 (10048)[关于error: cannot connect to daemon]'C:\Users\Administrator\AppData\Local\Androi

2017-06-18 20:39:47 6428 1

原创 Java1.8集合源码:ArrayList 详细解析

List接口的可变数组的实现。实现了所有可选列表操作,并允许包括null在内的所有元素。非线程安全。在多线程情况下操作时,一定要加上synchronized,才能保证多个线程同时对ArrayList进行访问时数据的安全性。底层使用的数据结构是数组。适合查改,弱于增删。实现了Serializable接口,因此它支持序列化,能够通过序列化传

2017-05-27 08:04:39 1361

原创 Java学习笔记:反射与代理机制(静态、动态)

反射与代理机制是Java中比较高级的一种特性,它完全是站在Java虚拟机的角度去看待各种类的运行,特别是在Java EE中运用广泛。在学习之前,首先思考几个问题:- 给定一个类的名字(字符串形式),怎么创建该类的对象?- 什么是反射机制?- Java静态代理和动态代理的异同有哪些?接下来此篇博文来一一探索并解决以上问题,借此学习反射与代理机制~

2017-05-26 08:04:00 1156 1

原创 Java学习笔记:接口和抽象类 之间的探讨

**接口为我们提供了一种将解口与实现分离的更加结构化的方法。**抽象类则是普通的类和接口之间的一种中庸之道。尽管在构建具有某些未实现方法的类时,第一想法是创建接口,但是抽象类仍旧是用于此目的的一种重要而必须的工具。这两个重要的概念,看似相近却又大有不同,以下几个问题值得我们思考:- 接口与抽象类有什么相同之处?- 接口与抽象类又有什么区别?- 两者各自的优点?- 两者使用的情景如何?程序员又该如何选择其使用

2017-05-22 08:30:49 1073

原创 Effective Android:app优化------ ANR、OOM、Bitmap、UI卡顿

平常开发过程会遇到一些很令人头痛的异常,例如常见的ANR、OOM、UI卡顿,这些异常不同于其它bug,它可能隐藏在代码的各个细节处,一个两个不足以引起祸端,最后一点点堆积爆发反而不好处理。此篇文章总结这些异常出现的原因及解决方法,不过需要注意的是平常良好的代码习惯可以很好的避免这些异常。

2017-05-16 09:39:19 2610

原创 Android:你所忽略 WebView 带来的那些安全漏洞(总结)

WebView是一个基于webkit引擎、展现web页面的控件。它功能强大,除了具有一般View的属性和设置外,还可以对url请求、页面加载、渲染、页面交互进行强大的处理。但是在使用的同时也埋下了一些安全隐患和内存泄漏,接下来以此篇文章作简单总结:

2017-05-08 08:29:57 3664

原创 16. 导入开源库 java.lang.NoClassDefFoundError: rx.plugins.RxJavaPlugins

问题:在自己项目中新导入一个开源库的Library,编译也成功运行在手机上开始出现异常,不过当时手机版本高于或等于21时却正常。报错信息:java.lang.NoClassDefFoundError: rx.plugins.RxJavaPlugins其实后面还有一些有关RXjava使用文件的提示显示,但是之前使用Rxjava都是正常的,而导入一个library后开始出错,错误肯定不在Rxjava上,

2017-05-04 22:19:45 2828 3

原创 Android : hellocharts-android-master图表框架集成 及 新手花式教学(干货满满)------柱状图

开发中设计到一个用图表的形式来展现学生成绩的需求,于是果断在github上找相关的开源库,最后锁定了hellocharts-android-master 和 MPAndroidChart-master两者,在进行一番比较后,虽然后者star更多(出现较早),但是前者不仅是UI还是功能上更胜一筹,决定使用前者,完成项目需求开发。一. 简介及集成1.简介该开源库可完成线形图、柱状图

2017-04-14 09:56:22 12436 7

原创 Android:实际运用Zxing集成二维码扫描 及 自定义扫码界面(demo源码)

二维码扫描,各大主流App必不可少的功能,而且google已将轮子替我们造好,直接拿来使用即可。以下是教学如何将Zxing开源库集成到自己项目中,并且自定义扫码界面,后期可根据自己的业务需求进行修改,最后补充了一点由此延伸的学习技能点。一. 集成Zing开源库到应用中如上图所示,我使用的集成方法是拷入jar包,然后拷贝相关类即可,具体的资源都已经在Demo中做好了,具体内容都可以直接参考Demo。(

2017-04-11 10:23:39 16553 1

原创 15. Failed to resolve: junit:junit:4.12,Failed to resolve: javax.inject:javax.inject:1......

问题:在帮别人配置AS时,用的gradle编译是最新版本3.3,在离线(Office Mode)的状态下新建一个项目时出现以下错误:Error: Failed to resolve: junit:junit:4.12Failed to resolve: javax.inject:javax.inject:1Failed to resolve: javax.annotation:javax.ann

2017-04-06 18:31:59 6609 4

原创 Android:图解四种启动模式 及 实际应用场景讲解

在一个项目中会包含着多个Activity,系统中使用任务栈来存储创建的Activity实例,任务栈是一种“后进先出”的栈结构。举个栗子,若我们多次启动同一个Activity,系统会创建多个实例依次放入任务栈中,当按back键返回时,每按一次,一个Activity出栈,直到栈空为止,当栈中无任何Activity,系统就会回收此任务栈。

2017-03-13 10:36:21 4028 2

原创 以 Okhttp3源码 为例 ------ 图解 缓存机制 的原理和实现(上)

缓存机制一直以来是一个不可忽视的重要模块,广泛地被运用到 网页端和移动端。对于服务器而言,客户端的缓存很大程度上缓解了它的压力,更是为用户带来了产品快速响应的体验,拥有很多好处。既然是网络请求,必然与HTTP协议联系紧密,不论你是否有这之类的经验,此篇将会从基础开始总结,共同学习缓存机制。

2017-02-06 16:29:22 4377

原创 Android : Builder模式 详解及学习使用

在此声明:以下内容由书籍 《Android高级进阶》学习而来。Builder模式是一种设计模式,最初被介绍于《设计模式:可复用面向对象软件的基础》,目前在Java及Android中用处更是十分广泛,因此基本的了解与学习应当掌握。一. Builder模式介绍首先从它的定义开始介绍:Builder模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。一般而言,Builder模式

2017-01-27 13:46:14 3162

原创 14. Error:Execution failed for task ':app:transformClassesWithDexForDebug'.

问题:在使用Android Studio 编译自己的程序时,出现以下错误:Error:Execution failed for task ':app:transformClassesWithDexForDebug'.Error:Execution failed for task ':app:transformClassesWithDexWithDex'.> com.android.build.a

2017-01-16 14:14:25 1416

原创 13. 编译出错 Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.

问题:在使用Android Studio 编译自己的程序时,出现以下错误:Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.> com.android.build.api.transform.TransformException: java.util.zip.ZipException: dup

2017-01-16 14:03:05 2536

原创 SQL SERVER 基础篇(一):知识点、SQL语句学习及详细总结

SQL SERVER 基础篇,详细总结学习sql语句和知识点,适合入门

2016-12-09 07:48:34 59826 10

原创 Android依赖注入框架:ButterKnife 8.4.0新版本导入及使用详解

一直在使用 Butter Knife的同志们应该知道此库不断更新,现在导入主要是运用 android-apt,而且使用方法有了细微变化,下面来依次介绍。官方文档在此: https://github.com/JakeWharton/butterknife导入到项目中1. 在项目中的 build.gradle 中包含“android-apt”插入buildscript { repo

2016-11-01 15:34:03 1245

原创 12. javax.net.ssl.SSLException: hostname in certificate didn't match证书不匹配的主机名

解决方法来自于: http://blog.csdn.net/trbbadboy/article/details/11562511问题:在使用org.apache.http库请求网络时,出现javax.net.ssl.sslexception:证书不匹配的主机名 的问题【自己写的程序:】 【程序报的错:】javax.net.ssl.SSLException: hostn

2016-10-27 12:44:02 10118

原创 11. 使用Android-async-http第三方库时import org.apache.http 导入无效

此解决方法采取于知乎 https://www.zhihu.com/question/35597452/answer/63619567问题:在AS上重写编译一个github上download下来的项目,结果出现以上问题,因为项目中使用了第三方库 Android-async-http 可是在import org.org.apache 显示导入无效。 原因:Android M 起默认移除了Apa

2016-10-25 15:56:50 2368

原创 Android 学习笔记:View的事件分发机制 解析及实例讲解

想必大家对编写自定义控件的流程不陌生,独自编写过许多继承View、ViewGroup之类的自定义控件。在编写的过程中肯定要考虑到View的事件分发机制,不可避免的重要部分,各位有考虑过以下问题:1. 事件的传递机制? 2. 事件的分发过程涉及到的方法? 3. 接收事件的方法的优先级?接下来的内容依次来解析: (以下融合个人理解和任玉刚老师的《Android开发艺术探索》书中内容)点击事件的传递

2016-10-21 14:09:59 1248

网络调试助手NetAsssist

网络调试助手NetAsssist,可以用来测试TCP、UDP收发报文。

2017-06-25

Zxing二维码扫描Demo完整源码下载

集成Zxing二维码扫描,可从相册选择图片扫描、开启闪光灯、生成二维码图片功能

2017-04-10

Zxing二维码使用Demo

Zxing二维码使用Demo

2017-04-08

空空如也

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

TA关注的人

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