ArrayList、LinkedList和HashMap的源码是一起看的,横向对比吧,感觉对这三种数据结构的理解加深了很多。>>数组、链表和哈希表结构数据结构中有数组和链表来实现对数据的存储,这两者有不同的应用场景,数组的特点是:寻址容易,插入和删除困难;链表的特点是:寻址困难,插入和删除容易;哈希表的实现结合了这两点,哈希表的实现方式有多种,在HashMap中使用的是链地址法,也就是拉链法。看下面这张流传很广的图,拉链法实际上是一...
Future与FutureTask都是用于获取线程执行的返回结果。下面我们就对两者之间的关系与使用进行一个大致的介绍与分析一、Future与FutureTask介绍:Future位于java.util.concurrent包下,它是一个接口publicinterface Future<V> {boolean cancel(boolean mayInterruptIfRunning);boolean isCancelled();boolean isDone();V get() throws InterruptedException, ExecutionException;V get(long timeout, TimeUnit unit)throws Interrupt...
PDF文档已上传Github Github:https://github.com/zwjlpeng/Angrily_Learn_Java_8为了支持函数式编程,Java 8引入了Lambda表达式,那么在Java 8中到底是如何实现Lambda表达式的呢? Lambda表达式经过编译之后,到底会生成什么东西呢? 在没有深入分析前,让我们先想一想,Java 8中每一个Lambda表达式必须有一个函数式接口与之对应,函数式接口与普通接口的区别,可以参考前面的内容,那么你或许在想Lambda表达式是不是转化成与之对应的...
看了一堆文章,终于把JAVA CAS的原理深入分析清楚了。感谢GOOGLE强大的搜索,借此挖苦下百度,依靠百度什么都学习不到! 参考文档:http://www.blogjava.net/xylz/archive/2010/07/04/325206.htmlhttp://blog.hesey.net/2011/09/resolve-aba-by-atomicstampedreference.htmlhttp://www.searchsoa.com.cn/showcontent_69238.htmhttp://ifeve.com/atomic-operation/http://www.infoq.com/cn/articles/java-memory-model-5 java.util....
Java安全之RMI协议分析0x00 前言在前面其实有讲到过RMI,但是只是简单描述了一下RMI反序列化漏洞的利用。但是RMI底层的实现以及原理等方面并没有去涉及到,以及RMI的各种攻击方式。在其他师傅们的文章中发现RMI的攻击方式很多。 所以在此去对RMI的底层做一个分析,后面再去对各种攻击方式去做一个了解。0x01 底层协议概述RPCRPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了...
数组的定义数组是相同类型数据的有序集合数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们数组声明创建首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:dataType[] arrayRefVar; //首选方法 或 dataType arrayRefVar[]; //效果相同,但不是首选方法 Java语言使用new操作符来创建数组,语法如下:dataType...
原文地址:http://www.cnblogs.com/devinzhang/archive/2012/01/25/2329463.html文中s2后面的注释是错误的,应该是”创建一个对象(堆中)“原文:http://www.cnblogs.com/fubaizhaizhuren/p/4977062.html
学编程吧学java教程之java内存分析发布了,欢迎大家通过xuebiancheng8.com来访问java的内存模型是java中非常重要的知识,也是面试的时候重点。java虚拟机的内存模型中和我们打交道多的分为这么几个区域堆区,栈区,方法区。其中方法区又分为常量池,静态区和方法区。这几部分分别是干嘛的呢,堆区是用来存放new出来的对象的,堆区是应用程序共享的区域。栈区又叫方法栈,程序在运行的时候,代码要在方法栈中运行,运行的代码需要放...
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式: jstack [-l][F] pid 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运...
BIO编程最原始BIO网络编程的基本模型是C/S模型,即两个进程间的通信。服务端提供IP和监听端口,客户端通过连接操作想服务端监听的地址发起连接请求,通过三次握手连接,如果连接成功建立,双方就可以通过套接字进行通信。传统的同步阻塞模型开发中,ServerSocket负责绑定IP地址,启动监听端口;Socket负责发起连接操作。连接成功后,双方通过输入和输出流进行同步阻塞式通信。最原始BIO通信模型图:存在的问题:同一时间,服务器只...
源class反编译后代码如下:publicboolean isExpiring(){if ((this.timestamp == null) || (this.timestamp.length() <= 0)) {returntrue;}boolean isExpiring = false;try {SimpleDateFormat df = new SimpleDateFormat(SSOAuthConfig.getAuthDataDateFormart());Date date1 = df.parse(this.timestamp);long time1 = date1.getTime();long time2 = System.currentTimeMillis();long diffMilSecs = time2 - time1;Log.i(TAG, "diff...
本篇博文基于java8,主要探讨java中的String源码。 首先,将一个类分为几个部分,分别是类定义(继承,实现接口等),全局变量,方法,内部类等等,再分别对这几个部分进行说明,这样到最后类的全貌也就比较直观了。 一:实现接口。publicfinalclass Stringimplements java.io.Serializable, Comparable<String>, CharSequence { java.io.Serializable 这个序列化接口没有任何方法和域,仅用于标识序列化的语意。Com...
前言:ArrayList作为我们常用的一个集合数据类型,我们在代码中经常用它来装载数据,可谓是和HashMap一样常用的集合类型了。我们经常用它,那么就有必须知道它的内部工作原理,比如它是如何添加进去数据的,它内部的数据结构是怎样的,当我们做一个remove操作,它又做了哪些工作。了解这些内部工作的原理能够帮助我们更好的理解Arraylist,什么时候使用它和不使用它,如何提升它的效率,等等。那么本篇博文就来聚焦Arraylist,走进...
Channel的注册是在SelectableChannel中定义的:1publicabstract SelectionKey register(Selector sel, int ops, Object att) 2throws ClosedChannelException; 34publicfinal SelectionKey register(Selector sel, int ops) 5throws ClosedChannelException { 6return register(sel, ops, null); 7 }而其具体实现是在AbstractSelectableChannel中: 1publicfinal SelectionKey register(Selector sel, int ops,2 ...
keySet():将Map中所有的键存入到Set集合中。因为set具备迭代器,所以可以以迭代方式取出所有的键,再根据get方法获取每一个键对应的值,其仅能通过get()取key。entrySet(): 返回此映射中包含的映射关系的 Set 视图,格式为Set<Map.Entry<K,V>>, Map.Entry表示映射关系,迭代后可以e.getKey()、e.getValue()取key和value,返回的是Entry接口 。 keySet()方式Set<String> keySet = map.keySet();//先获取map集合的所有键的Set集合...