自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 资源 (3)
  • 收藏
  • 关注

转载 Android的Activity的生命周期

Activity类中定义了七个回调方法,覆盖了活动生命周期的每一个环节1)onCreate,每个活动我们都重写了这个方法,它会在活动第一次被创建时被调用,你应该在这个方法中完成活动的初始化操作,比如说加载布局、绑定事件等2)onStart,这个方法在活动由不可见变为可见时候调用3)onResume,这个方法在活动准备好和用户进行交互的时候进行调用,此时活动一定位于返回栈的栈顶,并且处于

2016-09-29 17:26:04 256

转载 Android的活动常见的状态

1,运行状态,当一个活动位于返回栈的栈顶时,这时活动就处于运行状态,系统最不愿意回收的就是处于运行状态的活动,因为这会带来非常差的用户体验。2,暂停状态,当一个活动不再处于栈顶位置,但仍然可见,这是活动就进入了暂停状态,处于暂停状态的活动仍然是完全存活着的,系统也不愿意去回收这种活动,只有内存在极低的情况下,系统才会去考虑回收这种活动3,停止状态,当一个活动不再处于栈顶位置,并且完全不可见

2016-09-29 16:54:34 549

转载 活动Activity的栈的存储方式

Android中的活动是可以层叠的,我们每启动一个新的活动,就会覆盖在原活动之上,然后点击Back键会销毁最上面的活动,下面的一个活动会重新显示出来。Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称为返回栈,栈是一种后进先出的数据结构,在默认情况下,每当我们创建一个新的活动,它会在返回栈中入栈,并处于栈顶位置。每当我们按下Back键或调用fin

2016-09-29 16:45:16 448

转载 Android的startActivity个startActivityForResult区别

1,startActivity主要用于发起一个新的Activity2,startActivityForResult,在发起一个新的Activity的同时,希望发起的Acitivity返回一个当前Activity需要的结果。这个方法需要搭配setResult和重写Activity的onActivityResult来实现完整的结果返回

2016-09-29 16:34:47 429

转载 Android的Intent的使用场景

1)显式的Intent,startActivity(new Intent(BaseActivity.class,GoalActivity.class))这个意图很明显,我们能够清晰地看出需要启动的Activity和当前的Activity。2)隐式的Intent,它不明确制定我们想要启动哪一个活动,而是制定一系列更为抽象的Action和category等信息,然后交由系统去分析这个Int

2016-09-29 16:25:45 643

转载 Android的Adapter介绍

1)ArrayAdapter,简单易用的Adapter,通常用于将数组或List集合的多个值包装成多个列表项,数组或者List包含多少个元素,就创建多少个TextView组件,TextView显示的文本由数组或List的元素提供。2)SimpleAdapter,功能强大的Adapter,可用于将List集合的多个对象包装成多个列表项。生成的ListView将会包括4个列表项,每个列表项

2016-09-27 17:23:44 239

转载 Android中的Context、Activity和Application的区别

Activity和Application都是Context的子类,Context是上下文的意思,在实际应用中它起到了管理上下文环境中各个参数和变量的作用。虽然Application和Activity都是Context的子类,但是他们维护的生命周期是不一样的,前者维护一个Activity的生命周期,所以其对应的Context只能访问该Activity,后者维护一个Application的证明周期。

2016-09-26 20:24:40 4491

转载 Android的View组件的几大子类

View视图组件,Android的所有UI组件都是建立在View、ViewGroup基础之上的,Android采用了组合器的设计模式来设计View和ViewGroup。ViewGroup是View的子类,因此ViewGroup可以当成View使用,对于一个Android应用的图形用户界面来说,ViewGroup作为容器来盛装其他组件,而ViewGroup里除了可以包含普通的View组件外,还可以再

2016-09-24 11:13:16 1971

转载 ContentPrivider和Intent、IntentFilter

1)对于Android应用而言,他们必须是相互独立,各自运行在自己的Dalvik虚拟机示例中,如果这些Android应用之间需要实现实时的数据交换。Android系统为这种跨应用的数据交换提供了一个标准:ContentProvider。2)Intent并不是Android应用的组件,但它对于Android应用的作用非常大,它是Android应用中不同组件之间通信的载体,当Android运行时需

2016-09-22 20:05:24 292

转载 Service和BroadcastReceiver

1)Service与Activity的地位是并列的,它也代表了一个单独的Android组件,Service与Activity的区别在于:Service通常位于后台运行,他一般不需要于用户进行交互,因此Service组件没有图形用户界面。Service组件需要集成Service基类,一个Service组件被运行起来之后,它将拥有自己独立的生命周期,Service组件通常用于为其他组件提供后台服务或监

2016-09-22 19:51:31 942

转载 Acitivity和View组件介绍

1)Acitivity是Android应用中负责与用户交互的组件,就类似于.NET的窗体程序界面一样,Acitivity只能通过setContentView来指定显示的组件。Acitivity为用户提供了可视化用户界面,如果该Android应用需要多个用户界面,那么这个Android应用将会包含多个Acitivity。多个Activity组成Activity栈,当前活动的Activity位于栈顶。

2016-09-22 19:27:45 381

原创 android系统的结构

Android系统的四层结构1)操作系统(Linux内核),Linux内核提供了安全性、内存管理、进程管理、网络协议栈和驱动模型等核心系统服务,除此之外,Linux内核也是硬件和软件叠层之间的抽象层。2)中间件(函数库、Android运行时库),Android包含一套被不同组件所使用的C/C++库的集合,一般来说,Android应用开发者不能直接调用这套C/C++库集,但可以通过应用程序框

2016-09-22 18:59:41 835

转载 java虚拟机的偏向锁

偏向锁,它的目的是消除数据在无竞争的情况下的同步原语,进一步提高程序的运行性能。如果说轻量级锁是在无竞争的情况下使用CAS操作去消除同步使用的互斥量,那偏向锁就是在无竞争的情况下把整个同步都消除掉,连CAS操作都不做了。这个锁会偏向于第一个获得它的线程,如果在接下来的执行过程中,该锁没有被其他线程获取,则持有偏向锁的线程将永远不需要再进行同步。

2016-09-14 09:37:16 381

转载 java多线程的一些处理技巧

1)建议使用抛异常的方法来实现线程的停止,因为在catch块中还可以将异常向上抛,使线程停止的事件得以传播2)使用suspend和resume方法时,如果使用不当,极易造成公共的同步对象的独占,使其他线程无法访问公共同步对象3)yield方法的作用是放弃当前的CPU资源,将它让给其他的任务去占用CPU执行时间,但放弃的时间是不确定,有可能刚刚放弃,马上又获得CPU时间片。4)线程的优先

2016-09-14 09:36:43 287

转载 volatile的特点

volatile在不符合以下两种情况下需要加锁来保证原子性:1)运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值2)变量不需要与其他的状态变量共同参与不变的约束。在线程内部来看,所有操作都是有序的,如果从另一个线程中观察这个线程,所有操作都是无序的synchronized保证:原子性、有序性、可见性

2016-09-14 09:35:46 604

转载 java虚拟机内存模型的目的和线程获取变量值的方式

Java虚拟机规范试图定义一种Java内存模型(JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台上都能达到一致的内存访问效果。Java内存模型规定了所有的变量都存储在主内存中,每条线程都还有自己的工作内存,线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读取主内存中的变量。不同的线程之间也无法直接

2016-09-14 09:35:09 544

转载 java虚拟机的指令重排和CPU的指令重排

为了使得处理器内部的运算单元能尽量被充分利用,处理器可能会对输入的代码进行乱序执行优化,处理器会在计算之后将乱序执行的结果重组,保证该结果与顺序执行的结果是一致的,但并不保证程序中的各个语句计算的先后顺序与输入代码中的顺序一致。与处理器的乱序执行优化类似,java虚拟机的即使编译器也有类似的指令重排优化

2016-09-14 09:33:11 2655

转载 互斥同步的特点

互斥同步最主要的问题就是进行线程阻塞和唤醒所带来的性能问题。因此这种同步称为阻塞同步,从处理问题的方式来说,互斥同步属于一种悲观的并发策略,总是认为只要不去做正确的同步措施,那就肯定会出现问题,无论共享数据是否真的会出现竞争,它都要进行加锁、用户态核心态转换、维护锁计数器和检查是否有被阻塞的线程需要唤醒等操作。创建和销毁线程都需要主线程进入内核态才能进行 操作,而一般情况下应用运行的线程级别是

2016-09-14 09:31:42 497

转载 java虚拟机内部的自旋锁

自旋锁不能够代替阻塞,且先不说对处理器数量的要求,自选等待本身虽然避免了线程切换的开销,但它是要占用处理器的时间,因此,如果锁被占用的时间很短,自旋等待的效果就会非常好,反之,如果锁被占用的时间很长,那么自旋的线程只会白白消耗处理器的资源,而不会做任何有用的工作,反而会带来性能上的浪费,因此自旋等待的时间必须要有一定的限度,如果自旋超过了限定的次数仍然没有成功获得锁,就应当使用传统的方式去挂起线程

2016-09-14 09:30:32 258

转载 java虚拟机对锁的优化之锁粗化和锁消除

锁消除是指虚拟机即时编译器在运行时,对一些代码上要求同步,但是被检测到不可能存在共享数据竞争的锁进行消除。锁消除主要判定依据来源于逃逸分析的数据支持锁粗化,如果虚拟机探测到有这样一串零碎的操作都对同一个对象加锁,将会把加锁同步的范围扩展到整个操作序列的外部,这样就只需要加锁一次就够了

2016-09-14 09:29:50 2108

转载 轻量级锁的用途

轻量级锁不是用来代替重量级锁的,它的本意是在没有多线程竞争的前提下,减少传统的重量级锁使用操作系统互斥量产生的性能损耗。轻量级锁能够提升程序同步性能的依据是“对于绝大部分的锁,在整个同步周期内都是不存在竞争的”,这是一个经验数据,如果没有竞争,轻量级锁使用CAS操作避免了使用互斥量的开销,但如果存在锁竞争,除了互斥量的开销外,还额外发生了CAS操作,因此在有竞争的情况下,轻量级锁会比传统的重量级锁

2016-09-14 09:27:22 564

转载 java虚拟机对代码的处理方式

java虚拟机最初是通过解释器进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为热点代码,为了提高热点代码的效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(JIT)。即时编译器编译性能的好坏、代码优化程度的高低是衡量一款商用虚拟机优秀的关键指标,是虚拟机最核心最能体现虚拟机技术水平的部分

2016-09-14 09:26:24 245

转载 解释器和编译器的区别

解释器和编译器两者各有优势:当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行。在程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码之后,可以获得更高的执行效率。当程序运行环境内存资源限制较大,可以使用解释器节约内存,反之可以使用编译执行来提升效率。同时,解释器还可以作为编译器激进优化时的一个逃生门,让编译器根据概率选择一些大多数时候都能够

2016-09-14 09:25:33 5618 3

转载 java虚拟机判断代码是否是热点代码方式

判断一段代码是否是热点代码方式有两种:1)基于采样的热点探测2)基于计数器的热点探测,采用这种方法的虚拟机会为每个方法建立计数器,统计方法的执行次数,如果执行次数超过一定的阈值就认为它是热点方法。方法调用计数器统计的并不是方法被调用的绝对次数,而是一个相对的执行频率,即一段时间内方法被调用的次数,当超过一定的时间限度,如果方法的调用次数仍然不足以让它提交给即时编译器编译,那这个方法的调用计

2016-09-14 09:25:01 3625

转载 HotSpot的JIT的两种编译器

HotSpot的JIT的两种编译器;1)Client Compiler:它是一个简单快速的三段式编译器,主要的关注点在于局部性的优化,而放弃了许多耗时较长的全局优化手段。2)Server Compiler:它是专门面向服务器端的典型应用并为服务端的性能配置特别调整过的编译器,它会执行·所有经典的优化动作,如无用代码消除、循环展开、循环表达式外提、消除公共子表达式、常量传播、基本快重排序等,

2016-09-14 09:24:12 834

转载 java虚拟机的方法解析发生的阶段

只有使用了invokespecial指令调用的私有方法、实例构造器、父类方法以及使用invokestatic指令进行调用的静态方法才是在编译器进行解析的,除了上述四种方法之外,其他的Java方法调用都需要在运行时进行方法接收者的多态选择(final的也是可以在编译期进行解析的)

2016-09-14 09:23:32 245

转载 javac编译器的过程

javac编译器的过程:1)解析与填充符号表过程    1,词法、语法分析    2,填充符号表2)插入式注解处理器的注解处理过程3)语义分析与字节码生成过程

2016-09-14 09:22:11 318

转载 java的内联优化

java对象的方法默认就是虚方法,因此Java间接鼓励了程序员使用大量的虚方法来完成程序逻辑。为了解决虚方法的内联问题,虚拟机团队引入了一种名为类型继承关系分析技术,这是一种基于整个应用程序的类型分析技术,它用于确定在目前已加载的类中,某个接口是否有多于一种的实现,某个类是否存在子类、子类是否为抽象类的信息。编译器在进行内联时,如果是非虚方法,那么直接进行内联就可以,这个时候 的内联是有保

2016-09-14 09:16:33 5212

转载 java虚拟机的逃逸分析

逃逸分析作为其他优化手段提供依据的分析技术,其基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,它可能被外部方法所引用,例如作为调用参数传递到其他方法中,称为方法逃逸。甚至还有可能被外部线程访问到,比如赋值给类变量或可以在其他线程中访问的实例变量,称为线程逃逸。如果能证明一个对象不会逃逸到方法或线程之外,也就是别的方法或者线程无法通过任何途径访问到这个对象,则可能为这个变量进行一些高

2016-09-14 09:14:40 1127

转载 java的泛型的特点

java中的泛型只是在程序源码中存在,在编译后的字节码文件中,就已经替换为原来的原生类型(Raw Type,也成为裸类型),并且在相应的地方插入了强制转换代码,因此对于运行期的Java语言来讲,所有的泛型容器都是一样的,泛型技术实际上是Java的一颗语法糖,Java语言的泛型实际方法称为类型擦除,基于这种方法实现的泛型称为伪泛型。

2016-09-14 09:12:42 1666

转载 java的即时编译器特点

java的即时编译器1)因为即时编译器运行占用的是用户程序的运行时间,具有很大的时间压力,它能提供的优化手段也严重受制于编译成本,如果编译速度不能达到要求,那用户将在启动程序或程序的某部分察觉到重大延迟,这点使得即时编译器不敢随便引入大规模的优化技术,而编译的时间成本在静态编译器中并不需要关注。2)Java语言是动态的类型安全语言,这就意味着需要由虚拟机来确保程序不会违反语言语义或访问非结

2016-09-14 09:11:27 979

原创 mysql常用参数的含义

1)back_log 指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中,也就是说,当MySQL的连接数达到max_connections时,新的请求将会被存放在堆栈中,以等待某一联接释放资源,堆栈的数量就是back_log,如果等待数量超过了back_log,将不被授予连接资源。2)wait_timeout,当MySQL连接闲置超过一定时间后将会被强行关闭,MySQL

2016-09-14 09:10:17 708

转载 java虚拟机对于静态字段的处理

对于静态字段,只有直接定义这个字段的类才会被初始化,因此通过其子类引用父类中定义的静态字段,只会触发父类的初始化而不会触发子类的初始化。

2016-09-07 19:04:13 341

转载 java虚拟机对于重载方式的处理

java中,重载一个方法,除了要与原方法具有相同的简单名称外,还要求必须拥有一个与原方法不同的特征签名,特征签名就是一个方法中各个参数在常量池中字段符号(数据类型)引用的集合,所以返回值不会作为特征信息包含在特征签名里面,因此java语言里面无法仅仅靠返回值的不同来对一个方法进行重载。

2016-09-07 19:03:33 318

转载 java的class文件的组成

class文件的组成:1)魔数,确定当前文件是一个能被虚拟机接受的Class文件2)Class文件的版本号3)次版本号4)主版本号5)常量池入口,常量池中主要存放两大类常量,字面量和符号引用。字面量比较接近于Java语言层面的常量概念,如文本字符串,声明为final的常量值等,而符号引用是属于编译原理方面的概念,包括三类常量:类和接口的全限定名、字段的名称和描述符、方法的名称和

2016-09-07 19:03:02 744

转载 java虚拟机对byte、char和short的处理方式

java字节码中的大部分指令都没有支持整数类型byte、char和short,甚至没有任何指令支持boolean类型,编译器会在编译期或者运行期将byte和short类型的数据带符号扩展为相应的int类型的数据,将boolean和char类型数据零位扩展为相应的int类型数据,与之类型,在处理boolean、byte、short和char类型的数组时,也会转换为使用对应的int类型的字节码指令来处

2016-09-07 19:02:28 443

转载 java虚拟机浮点值窄化转换为整数类型T(int或long类型之一),遵循的转换规则

浮点值窄化转换为整数类型T(int或long类型之一),遵循的转换规则:1)如果浮点值为NaN(Not a Number的缩写,NaN 表示为指数为 emax + 1 = 128,指数域全为 1,且尾数域不等于零的浮点数。IEEE 标准没有要求具体的尾数域,所以 NaN 实际上不是一个,而是一族),那么转换结果就是int或者long类型的0。2)如果浮点值不是无穷大的话,浮点值使用向零舍入

2016-09-07 19:01:49 1271

转载 java虚拟机类加载的过程

类被加载到虚拟机内存,到卸载出内存位置,它的生命周期包括:1)加载2)验证3)准备4)解析,其中2、3、4统称为连接5)初始化6)使用7)卸载这些阶段通常是互相交叉地混合式进行的,通常会在一个阶段执行的过程中调用、激活另外一个阶段。

2016-09-07 19:01:16 177

转载 java虚拟机类加载器

虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述类的二进制字节流”这个动作放到java虚拟机的外部去实现,以便让应用程序自己决定如何去获取所需要的类,实现这个动作的代码模块成为类加载器

2016-09-07 19:00:43 164

转载 java虚拟机中类加载的过程

类加载的过程1)加载阶段虚拟机完成的事情1,通过一个类的全限定名来获取定义此类的二进制字节流。2,将这个字节流所代表的静态存储结构转换为方法区的运行时数据结构3,在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据 访问的入口。2)验证的目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。

2016-09-07 19:00:07 349

大数据和云计算的读书笔记

主要记录了我阅读架构大数据-大数据技术及算法分析时觉得是重点的知识,涉及以下内容:大数据、云计算、Hadoop、Spark、推荐算法等 ps:请用XMind软件打开

2017-03-09

大数据学习笔记

需要下载XWind工具才能打开

2017-01-19

自己写的笔记本的App源代码

这个代码,是借助ListView+自定义的ArrayAdapter实现的笔记本,笔记本中实现了批量删除的操作,批量删除的主要是根据ArrayAdapter布局之中的CheckBox实现的。

2016-06-28

空空如也

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

TA关注的人

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