java
文章平均质量分 83
GeneralAndroid
这个作者很懒,什么都没留下…
展开
-
汉诺塔问题算法
问题汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。递归算法我们这里先列举盘子的个数为1,2,3,4的时候的情况,具体的如下表格。观察上面的四个表...原创 2019-03-26 00:12:39 · 5772 阅读 · 0 评论 -
《深入理解Java虚拟机》——类文件结构
上篇文章主要讲述了类文件结构的魔数与常量池的内容,这篇文章继续阐述类文件结构的剩余内容,主要涉及:访问标志、类索引与父类索引以及接口索引集合、字段表集合、方法表集合、属性表集合。访问标志在类文件结构中常量池之后,紧接着的两个字节代表访问标志(access_flags),这个标志用于识别一些类或者接口层次的访问信息,包括:这个Class是类还是接口;是否定义为public类型;是否定原创 2017-10-29 19:57:33 · 489 阅读 · 0 评论 -
《深入理解Java虚拟机》——类文件结构之魔数常量池
相对于Java虚拟机的其他部分,这部分的内容我们只需要搞清楚下面两个方面的内容:1.无关性2.Class文件的结构与组成我们都知道Java有个特性是:一次编写,到处运行。这里体现的是平台无关性,但是对于Java虚拟机来说,不仅仅是具有平台无关性的特点,还具有语言无关性的特性。各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码(ByteCode)是构原创 2017-10-11 15:41:43 · 795 阅读 · 0 评论 -
《深入理解Java虚拟机》——垃圾收集器与内存分配策略问题
通过这篇文章你能知道的问题:1.如何判断对象是活着还是死去?2.在Java语言中,可作为GCRoots的对象有哪些?3.Java中引用的分类4.对象的自救姿势是什么?5.类在什么情况下是无用的?6.垃圾收集算法有哪些?7.年轻代,老年代,永久代?8HotSpot虚拟机是如何发生内存回收的?9.垃圾收集器有哪些以及组合方式有哪些原创 2017-09-28 16:38:57 · 773 阅读 · 1 评论 -
《深入理解Java虚拟机》——Java内存区域与内存溢出异常学习总结
序言:在Android开发方面,可以说所有的Android开发人员都知道程序计数器,堆,栈,方法区,常量池,GC回收等这些东西,作为一名老菜鸟,有一天我突然问自己,自己真的懂这些吗?真的懂吗?于是就有了《深入理解Java虚拟机》的阅读,这个系列会记录总结这本书的知识。先抛出几个问题,通过该篇文章你可以知道以下问题的答案:java虚拟机执行程序时内存是如何划分的?哪些数据区是线程私有的?原创 2017-09-21 15:47:04 · 662 阅读 · 2 评论 -
算法预备军(3)~线性表
说明:算法预备军系列内容均为个人的学习笔记,主要是指数据结构方面的,后面在继续学习的过程中会陆续分享相关内容.数据结构这块主要学习来源为,大家不喜欢摘录的,可以自行看书.线性表:零个或多个数据元素的有限序列.首先它是一个序列.也就是说,元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继.然后线性表强调是有限的.事实上原创 2017-06-14 13:56:10 · 612 阅读 · 0 评论 -
恶补Java系列之String、StringBuffer、StringBuilder
String的值是不可变的,每次对String的操作都会生成新的String对象,不仅效率低,而且耗费大量内存空间。StringBuffer类和String类一样,也用来表示字符串,但是StringBuffer的内部实现方式和String不同,在进行字符串处理时,不生成新的对象,在内存使用上要优于String。StringBuffer默认分配16字节长度的缓冲区,当字符串超过该大小时,会自原创 2016-08-09 10:45:51 · 572 阅读 · 0 评论 -
CountDownLatch的使用
package com.general;import java.util.concurrent.CountDownLatch;import java.util.concurrent.TimeUnit;/*** * * @author GeneralAndroid *CountDownLatch的一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可原创 2016-08-09 10:34:17 · 568 阅读 · 0 评论 -
Android Camera 源码浅析
Android Camera 源码浅析Android Camera源码浅析主要是分析SDK中Camera.java中的代码,如果你的此行不是这个目的,可以略过这篇文章。至于Android Camera的使用本篇文章也不会过多的阐述,分析的Camera.java为Android 4.4。Camera中的接口Camera类中总共有8个接口,分别是:(1)PreviewCallback(2)AutoFoc原创 2016-05-02 17:13:54 · 2706 阅读 · 0 评论 -
《深入理解Java虚拟机》——字节码指令简介
Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于Java虚拟机采用面向操作数栈而不是寄存器的架构,所以大多数的指令都不包含操作数,只有一个操作码。字节码指令集是一种具有鲜明特点、优劣势都很突出的指令集架构,由于限制了Java虚拟机操作码的长度为一个字节(即0原创 2017-10-29 20:37:09 · 788 阅读 · 0 评论 -
《深入理解Java虚拟机》——类加载的时机与过程
在介绍完类的文件结构与字节码指令之后,我们就需要思考一下类文件是怎么被虚拟机加载与解析的?本篇文章将围绕这两点来进行总结。虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开原创 2017-10-29 20:50:24 · 1008 阅读 · 2 评论 -
DES算法原理与Java实现
在上一篇的文章中介绍了Feistel密码的原理与Java实现,这篇将带来DES算法的原理与Java实现,对于Java实现这里只给出一份代码(还有其他方式实现,主要是处理二进制位的方式不一样)。概述DES是一个分组加密算法,它以64位为分组对数据加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。DES是一个包含16个阶段的“替换–置换”的分组加密算法,64位的分组明文序列作为...原创 2018-03-22 15:34:35 · 20109 阅读 · 8 评论 -
传统加密技术续-Hill Vigenere Vernam
在上篇文章中,讲述了一些加密解密的概念以及Caesar、单表替换密码、Playfair密码。在这篇文章中主要涉及Hill密码,Vigenere密码,Vernam密码,置换技术。Hill密码希尔密码(Hill Cipher)是运用基本矩阵论原理的替换密码,由Lester S.Hill在1929年发明。该加密算法将m个连续的明文字母替换成m个密文字母,这是由m个线性等式决定的,在等式里每个...原创 2018-02-07 22:41:45 · 1077 阅读 · 0 评论 -
传统加密技术
最近由于工作需要,转而去研究加密与解密的东西,这个密码学的东西还是比较复杂的,还需要补一下数学知识。我会持续分享这方面的内容,由于初步涉及有可能总结的东西会有错误或逻辑漏洞,如果发生请及时告知和一起讨论。需要说明的是,这些都是学习笔记与感悟,和业务方案没有任何关系,并不会涉及泄露,故才会拿出分享。在之前的加密解密的初涉文章中,我们讲到了加密算法的分类:对称加密,非对称加密,Hash算法。那么什...原创 2018-02-07 22:40:47 · 7096 阅读 · 0 评论 -
Java集合之ConcurrentHashMap源码浅析
上文中结尾处,我们说到了现在很少用Hashtable,那么在需要线程安全的场景中,我们如何保持同步呢,这就是本文的重点:ConcurrentHashMap(JDK1.7)。ConcurrentHashMap比HashMap以及Hashtable复杂多了,其内部采用了锁分段技术用以提高并发存取效率。我们看一下测试代码: 代码清单1:import java.util.HashMap;import j原创 2017-11-25 14:13:25 · 463 阅读 · 0 评论 -
Java集合之ArrayList源码解析
ArrayList是我们在开发中经常使用的一个集合,继续按照以前的风格来解析源码(JDK1.7)。 ArrayList简要概括: 1.ArrayList的底层数据结构是一个数组,确切地说是一个动态数组,每次扩容的时候,都会重新创建一个数组并赋值给成员变量elementData,其容量的扩展方式为:newCapacity = oldCapacity + (oldCapacity >> 1); 2原创 2017-11-29 11:02:19 · 537 阅读 · 0 评论 -
《深入理解Java虚拟机》——方法调用与基于栈的字节码解释执行引擎
方法调用:方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程。其实关于方法的执行,接口(父类)与实现类(子类)这些方法如何调用从Java代码层面上大家都是比较清楚的,这里我们探讨一下更深一层的运行原理。Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用原创 2017-11-04 20:48:18 · 613 阅读 · 0 评论 -
Java集合之HashMap源码解析
Java集合系列的源码解析,分析代码的版本均为:Sun JDK1.7这篇文章fuck的是HashMap,为什么先选择它呢,因为Android开发中最常用的数据集合就是HashMap和ArrayList,这里先Fuck HashMap。通过本篇文章你可以知道下面几点:1.HashMap内部采用的数据结构——>HashMap内部采用的是数组加单链表来实现的,单链表的插入为头插法。(原创 2017-11-03 15:51:50 · 679 阅读 · 0 评论 -
《深入理解Java虚拟机》——栈帧结构
这部分的内容是虚拟机字节码执行引擎方面的,大致分为3块:栈帧结构、方法调用、字节码的执行,而本篇主要是针对栈帧结构的总结。在开始栈帧结构之前我们还是先了解一下执行引擎相关的内容:物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的。虚拟机的执行引擎则是由自己实现的,因此可以自行指定指令集与执行引擎的结构体系并且能够执行那些不被硬件直接支持的指令集格式。原创 2017-11-03 16:28:25 · 1236 阅读 · 0 评论 -
Java集合之Hashtable源码解析
在进行Hashtable源码解析之前,我先扔出Hashtable与HashMap有哪些区别? 1.关于null,HashMap允许key和value都可以为null,而Hashtable则不接受key为null或value为null的键值对。 2.关于线程安全,HashMap是线程不安全的,Hashtable是线程安全的,因为Hashtable的许多操作函数都用synchronized修饰。3.原创 2017-11-09 00:10:52 · 666 阅读 · 1 评论 -
Java lambda内容的介绍
网上关于java lambda的例子很多,但是这些五花八门的例子很不常见不常用,最后导致初学者望而却步,其实我们抓住lambda的本质之后,会发现lambda还是很好理解的。毕竟,java8设计lambda的初衷是给开发者提供便利,而不是制造障碍。lambda表达式本质是匿名方法,下面是一些lambda表达式:(int x, int y) -> x + y() -> 42转载 2015-12-01 21:17:13 · 639 阅读 · 0 评论 -
恶补Java(十四)——Java枚举
原文链接:http://www.iteye.com/topic/1116193JDK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便。用法一:常量在JDK1.5 之前,我们定义常量都是: publicstaticfianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。转载 2015-11-24 21:37:41 · 642 阅读 · 0 评论 -
恶补Java(十三)之Java IO-----File类的用法
恶补Java---JavaI/O部分之File类的用法(笔记) 在java中,I/O(输入/输出)是比较乏味的事情,因为看不到明显的运行效果,但输入/输出是所有程序都必需的部分——使用输入机制,允许程序读取外部数据(包括来自磁盘、光盘等存储设备的数据)、用户输入数据;使用输出机制,允许程序记录运行状态,将程序数据输出到磁盘、光盘等存储设备中。 Java的I/O通过java.io包下的类原创 2014-12-02 21:20:51 · 3670 阅读 · 0 评论 -
JavaWeb学习笔记(四)---XML技术之XML语法
XML技术:与数据相关技术,在企业中xml技术常用来存储数据和传输数据,流行原因===XML与任何编程语言无关,XML可用于php,java,.net任何编程语言 通过标签来标记数据什么是XMLXML指可扩展标记语言,XML是一种标记语言,很类似HTML,XML的设计宗旨是存储,传输数据,而非显示数据, XML标签没有被预定义,使用约束的XML文原创 2014-04-15 22:23:48 · 1352 阅读 · 0 评论 -
JAVA中的向上转型与向下转型
先声明一下原帖地址:http://www.java3z.com/cwbwebhome/article/article8/81157.html?id=2664。一、向上转型。通俗地讲即是将子类对象转为父类对象。此处父类对象可以是接口。1,向上转型中的方法调用。看下面代码:package com.wensefu.others;public class Animal {转载 2014-03-05 19:09:12 · 2002 阅读 · 0 评论 -
恶补java(八)——泛型、异常
泛型——基本概念泛型是java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。java语言引入泛型的好处是安全简单在java SE1.5 之前,没有泛型的情况下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种原创 2014-03-05 12:53:44 · 1982 阅读 · 3 评论 -
恶补java(七)——集合框架
java集合类主要有以下几种:List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类Map结构的集合类:HashMap类,Hashtable类Set结构的集合类:HashSet类,TreeSet类Queue结构的集合Queue接口HashMap和Hashtable的区别HashMap与Hashtable都是java的原创 2014-03-03 12:58:59 · 1603 阅读 · 0 评论 -
恶补java(六)——对象数组的使用
在此记录java中的对象数组的使用,只是为了加深对java对象数组的印象还有以前不知道如何从控制台输入参数的问题。代码案例记录如下:/** * 功能:对象数组的使用 */package com.test1;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReade原创 2014-02-19 09:41:36 · 1519 阅读 · 0 评论 -
恶补java(五)
实现接口vs继承类java的继承是单继承,也就是一个类最多只能有一个父类,这种单继承的机制可保证类的纯洁性,比c++中的多继承机制简洁,但是不可否认,对子类功能的扩展有一定影响,所以我们认为:(1)实现接口可以看作是对继承的一种补充,还有一点,继承是层级式的,不太灵活。(2)实现接口可在不打破继承关系的前提下,对某个类功能扩展,非常灵活。 1、前期绑定:在程序运行之前进行绑定,由原创 2014-02-17 10:38:21 · 1516 阅读 · 0 评论 -
恶补java(四)——多态、抽象、接口
多态:所谓多态,就是指一个引用(类型)在不同情况下的多种状态,也可以这样理解:多态是指通过指向父类的指针,来调用在不同子类中实现的方法。多态注意事项:java允许父类的引用变量引用它的子类的实例(对象),这种转换时自动完成的抽象类:当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法【抽象方法】,用abstract来修饰该类【抽象类】.抽象类——深入讨论:抽原创 2014-02-15 19:59:08 · 1424 阅读 · 0 评论 -
恶补java(三)——包、继承、重载、覆盖
包——三大作用:(1)区分相同名字的类(2)当类很多时,可以很好的管理类(3)控制访问范围包——打包命令:package com.jiangjun包——命名规范:小写字母 比如com.gc.jiangjun包——常用的包一个包下,包含很多的类,java中常用的包有:java.lang.*包 自动引入 java.util.* 工具包 java.ne原创 2014-02-15 13:45:55 · 1732 阅读 · 0 评论 -
恶补java(二)——java的面向对象
类的成员方法(函数)——特别说明(1)方法的参数列表可以是多个,并且数据类型可以是任意的类型(2)方法可以没有返回值。类的构造方法介绍:构造方法是类的一种特殊的方法,它的主要作用是完成对新对象的初始化,它有几个特点:(1)方法名和类名相同(2)没有返回值(3)在创建一个类的新对象时,系统会自动的调用该类的构造方法完成对新对象的初始化。类的构造方法小结:1、构造方法名和类原创 2014-02-11 09:42:17 · 1464 阅读 · 0 评论 -
java web学习笔记(二)---程序调试
java程序员核心能力----代码Debug能力1.当代码出错了---------查看错误信息----找到错误发生位置从上向下第一行你写的程序2.根据经验猜测通过sysout或者日志技术,打印关键数据到控制台通过Eclipse自带断点调试功能,查看关键位置数据----------断点调试 Break Point F3 查看类代码F4 查看类继承关系原创 2014-04-15 22:21:26 · 1392 阅读 · 0 评论 -
java.lang.ThreadLocal<T>相关文章推荐
原文:http://freewind886.blog.163.com/blog/static/661924642010782113486/ThreadLocal更确切的名字应该是ThreadLocalVariable,线程局部变量。它与run()里的局部变量类似,每个线程访问到的都是自己的版本。而不同点在于,只需要在任务类外或者以单例模式创建一个ThreadLocal变量,然后各线程都转载 2014-12-03 12:14:43 · 1051 阅读 · 0 评论 -
恶补java(十二)-------final的用法
这两天由于想了解一下Android中的消息机制,就看了一下Looper的源码,里面有些final修饰的变量,在声明变量时没有赋值,之后就Looper的构造方法中赋值的,于是就对这部分有些疑问,就复习了一下final的用法。 final在java中并不常用,然而它却为我们提供了诸如在c语言中定义常量的功能,不仅如此,final还可以让你控制你的成员、方法或者是一个类是否可被重写或继承等功能,原创 2014-11-29 10:24:30 · 1196 阅读 · 0 评论 -
恶补java(十一)-------Stack类的使用
package com.gc.Stack;/** * java中stack的使用方法,堆栈是一种"后进先出"(LIFO)的数据结构,只能在一端进行插入(称为"压栈")或删除(称为"出栈")数据的操作. * Java中,使用java.util.Stack类的构造方法创建对象 * public class Stack extends vector * 构造方法:public Stack()创原创 2014-09-10 17:31:12 · 9995 阅读 · 0 评论 -
恶补java(十)---泛型与集合的再学习
其余的就不多说了,一切都在代码中package com.gc.generic;/** * JDK5 之前集合对象使用问题: * 1、向集合添加任何类型对象 * 2、从集合取出对象时,数据类型丢失,使用与类型相关方法,强制类型转换 * 存在安全隐患 * * ***************************** * * JDK5中的泛型:允许程序员使用泛型技术限制集合的原创 2014-05-22 22:12:50 · 2080 阅读 · 0 评论 -
Android网络编程(一)之Socket基础
Socket通常称为“”套接字。Socket字面上的中文意思为“插座”。一台服务器可能会提供很多服务,每种服务对应一个Socket,而客户的“插头”也是一个Socket。Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。Socket把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。Sock原创 2014-06-03 14:10:23 · 2165 阅读 · 0 评论 -
恶补java(九)-------线程(1)
package com.gc.thread;/** * 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序,该顺序是一个 * 执行路径,或者叫一个控制单元 * 线程:就是进程中的一个独立的控制单元,线程控制着进程的执行 * * 一个进程中至少有一个线程 *java vm 启动的时候会有一个进程java.exe *该进程中至少有一个线程,负责java程序的执行,而且这个线程原创 2014-04-11 21:43:57 · 1316 阅读 · 0 评论 -
Android开发中内存溢出 Out of memory。。。
声明:在此记录昨天开发过程中遇到的问题,具体的错误如图(1)和图(2) 图(1) 图(2)在开发一个项目的过程中遇到程序运行时错误,看了logcat打印出的信息,发现是内存溢出了。这个错误比较隐蔽,因为程序按照正常的操作流程,是不会原创 2014-03-18 09:32:03 · 2338 阅读 · 0 评论