![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础
夜_孤城
程序猿的自我救赎。。。
展开
-
java多线程之CAS
CAS操作 在java中可以通过锁和CAS操作来实现操作的原子性。cas即compare and set的缩写。JVM中的CAS操作利用了处理器提供的CMPXCHG指令实现。自旋CAS实现的基本思路就是循环进行CAS操作直到成功为止。下面的代码展示的是如何通过CAS算法来实现线程同步:package chapter02;import java.util.ArrayList;import java原创 2016-03-01 11:59:31 · 1305 阅读 · 0 评论 -
Tomcat源码分析之一_Tomcat架构理解
废话少说,拉代码,导入eclipse开干,具体步骤可以参考http://hi.baidu.com/hateeyes/blog/item/7f44942a20ad8f9d023bf66d.html下面谈谈我对Tomcat架构的理解总体架构:面向组件架构基于JMX事件侦听1)面向组件架构tomcat代码看似很庞大,但从结构上看却很清晰和简单,它主要由一堆组件组成转载 2017-06-07 10:59:10 · 406 阅读 · 0 评论 -
Tomcat源码分析之二_ 一次完整请求
前几天分析了一下Tomcat的架构和启动过程,今天开始研究它的运转机制。Tomcat最本质就是个能运行JSP/Servlet的Web服务器 , 因此最典型的应用就是用户通过浏览器访问服务器,Tomcat接收到请求后转发给Servlet,由Servlet处理完后,把结果返回给客户端。今天就专门解析一下这么一个完整的请求的内部机理。通过DEBUG,一路跟下来,发现Tomcat处理请求的核心转载 2017-06-07 15:10:20 · 412 阅读 · 0 评论 -
Tomcat源码分析之三_ 可携带状态的线程池
最近想实现一个可携带状态的线程池,具体需求就是池中的线程被用来处理某种信息,而此信息可视为线程所依赖的外部状态。如果用简单的线程池来实现,线程初始化时就得赋予某些信息,使得线程无法被再次利用。在看老版Tomcat的源码时,找到了答案,其实现思路主要是利用了线程的等待和唤起,HttpProcessor的实现正好基于此思路,时序图如下所示:初始化HttpProcessor线程时,没法赋转载 2017-06-07 15:13:08 · 341 阅读 · 0 评论 -
Tomcat源码分析之四_Request和Response处理的全过程
从Tomcat源码分析(二)可知,用户的一个请求会经过n个环节的处理,最后到达开发人员写的Servlet,传给Servlet也就是HttpServletRequest和HttpServletResponse,因此可以认为这一路走下来无非就是把最原始的Socket包装成Servlet里用到的HttpServletRequest和HttpServletResponse,只不过每个环节完成的包装功能和部转载 2017-06-07 15:18:23 · 759 阅读 · 0 评论 -
java容器之四_stack
Stack是一个后进先出(last in first out,LIFO)的堆栈,在Vector类的基础上扩展5个方法而来Deque(双端队列)比起Stack具有更好的完整性和一致性,应该被优先使用[plain] view plain copyE push(E item) 把项压入堆栈顶部。 E pop转载 2017-06-20 11:16:46 · 445 阅读 · 0 评论 -
java容器之五_HashMap
Hashmap是一种非常常用的、应用广泛的数据类型,最近研究到相关的内容,就正好复习一下。网上关于hashmap的文章很多,但到底是自己学习的总结,就发出来跟大家一起分享,一起讨论。 1、hashmap的数据结构 要知道hashmap是什么,首先要搞清楚它的数据结构,在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构转载 2017-06-20 14:15:49 · 255 阅读 · 0 评论 -
java容器之六_Java集合框架源码剖析:LinkedHashSet 和 LinkedHashMap
Java集合框架源码剖析:LinkedHashSet 和 LinkedHashMapJava LinkedHashMap和HashMap有什么区别和联系?为什么LinkedHashMap会有着更快的迭代速度?LinkedHashSet跟LinkedHashMap有着怎样的内在联系?本文从数据结构和算法层面,结合生动图解为读者一一解答。本文github地址总体介绍如果你已看过前面转载 2017-06-20 17:32:52 · 437 阅读 · 0 评论 -
java容器之七_TreeMap与红黑二叉树
TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致还是叫做TreeMap比较好。通过这篇博文你可以获得如下知识点: 1、红黑树的基本概念。 2、红黑树增加节点、删除节点的实现过程。 3、红黑转载 2017-06-21 11:34:21 · 2891 阅读 · 0 评论 -
java容器之八_hashTable与hashMap
HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题。HashMap的工作原理、ArrayList与Vector的比较以及这个问题是有关Java 集合框架的最经典的问题。Hashtable是个过时的集合类,存在于Java API中很久了。在Java 4中被重写了,实现了Map接口,所以自此以后也成了Java转载 2017-06-21 13:31:08 · 401 阅读 · 1 评论 -
java容器之九_ConcurrentHashMap
ConcurrentHashMap融合了hashtable和hashmap二者的优势。hashtable是做了同步的,hashmap未考虑同步。所以hashmap在单线程情况下效率较高。hashtable在的多线程情况下,同步操作能保证程序执行的正确性。但是hashtable每次同步执行的时候都要锁住整个结构。看下图:图左侧清晰的标注出来,lock每次都要锁住整个结转载 2017-06-21 14:22:30 · 339 阅读 · 0 评论 -
java容器之一_概述
1 数组数组( Array )是一种数据结构,用来存储同一类型值的集合,该类型的值可以是基本类型也可以是对象类型,通过一个整型下标可以访问数据的每一个值,(ps:通过反射模式也可以访问数组元素,即可以是 Array.get()操作,具体方法请查看相关API)数组的基本使用方法就不需要具体介绍了,主要是特点介绍和一般容器类的对比。不同的书本或博客可能对比的方面具体不同转载 2017-06-14 11:31:01 · 453 阅读 · 0 评论 -
java容器之二_类图
容器框架概述在JDK8中rt.jar文件中,Java.util.*;包中的容器主要包括List、Set、Queue和Map四个大类,其中List、Set、Queue是和Collection接口相关的容器,而Map是单独列出来的容器。使用astah community版绘制了容器框架的类图。Collection的List、Set、Queue类图如下:Map容器的类转载 2017-06-14 16:15:31 · 1396 阅读 · 0 评论 -
java容器之三_Vector和ArrayList的区别
今天研究了一下Vector和ArrayList的源码,又加深了对这两个类的理解。List接口下一共实现了三个类:ArrayList,Vector,LinkedList。LinkedList就不多说了,它一般主要用在保持数据的插入顺序的时候。ArrayList和Vector都是用数组实现的,主要有这么三个区别:1、Vector是多线程安全的,而ArrayList不是,这个可以从源码中转载 2017-06-15 17:50:27 · 346 阅读 · 0 评论 -
java多线程之一_深入分析synchronized的实现原理
记得刚刚开始学习Java的时候,一遇到多线程情况就是synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着我们学习的进行我们知道synchronized是一个重量级锁,相对于Lock,它会显得那么笨重,以至于我们认为它不是那么的高效而慢慢摒弃它。 诚然,随着Javs转载 2017-06-28 11:27:08 · 501 阅读 · 0 评论 -
JDK目录结构和文件作用介绍
要想深入了解Java必须对JDK的组成, 本文对JDK6里的目录做了基本的介绍,主要还是讲解了下JDK里的各种可执行程序或工具的用途Java(TM) 有两个平台 JRE 运行平台,包括Java虚拟机,运行类库,java应用程序装载器。JRE不是开发环境,所以不包括编译器,调试器,有需要这些请安装JDK(TM) //说明 :环境为Windows XP SP3 下 的JDK为转载 2017-04-19 14:16:46 · 1773 阅读 · 0 评论 -
乱码问题之文件,文本文件以及编码
在前面的字符集编码系列中,已经探讨了几大主要的字符集编码。在此基础之上,这里将进一步探讨编码的应用及乱码的根源,我们先从基本的文件说起。文件文件(内容)就是字节序列。文本文件也是文件,所以它也是字节序列。文件名与文件内容通常说到文件时,指的是文件内容,但文件还有文件名,文件名与文件内容是分开存储的。你可以在硬盘上新建一个文件,它的大小为0.如下:但它是有文件名的转载 2017-04-19 10:43:37 · 3993 阅读 · 1 评论 -
Integer和int的比较
package com.test;/** * * @author 刘玲 * */public class TestInteger { /** * @param args */ public static void main(String[] args) { int i = 128; Integer i2 = 128转载 2016-11-06 22:26:19 · 316 阅读 · 0 评论 -
java的位操作
public class Test { public static void main(String[] args) { // 1、左移( << ) // 0000 0000 0000 0000 0000 0000 0000 0101 然后左移2位后,低位补0:// // 0000 0000 0000 0000 0000 0000 0001 0100 换算成10进制为20 Sys转载 2016-11-09 09:14:05 · 294 阅读 · 0 评论 -
java intern解析
引言在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。8种基本类型的常量池都是系统协调的,String类型的常量池比较特殊。它的主要使用方法有两种:直接使用双引号声明出来的String对象会直接存储在常量池中。如果不是用双引号声明的St转载 2016-11-30 18:10:38 · 903 阅读 · 1 评论 -
JMX超详细解读
JMX超详细解读一、JMX的定义 JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。这是官方文档上的定义,我看过很多次也无法很好的理解。我个人的理解是JMX让程序有被管理的功能,例如你开发一个WEB网站,它是在24小时不间断转载 2016-12-01 14:18:12 · 4702 阅读 · 0 评论 -
JNDI总结
原理: 在DataSource中事先建立多个数据库连接,保存在数据库连接池中。当程序访问数据库时,只用从连接池中取空闲状态的数据库连接即可,访问结束,销毁资源,数据库连接重新回到连接池,这与每次去直接访问数据库相比,会节省大量时间和资源。 JNDI( Java Naming and Directory Interface ),是Java平台的一个标准扩展,提转载 2016-12-01 15:48:30 · 265 阅读 · 0 评论 -
java字符类型高低代理
Java语言内部的字符信息使用UTF-16编码,因为char类型是16-bit,可以有65536种取值,每个编号代表一个字符。但是,Unicode包含的字符已经远远超过65536个。编码大于65536的,还想用16-bit,怎么办呢?於是,Unicode 標準制定組想出的辦法就是,從這65536個編號裏,拿出2048個,規定它們是「Surrogates」,讓它們兩個為一組,來代表編號大於655转载 2016-11-22 18:07:38 · 527 阅读 · 0 评论 -
java学习计划
Java 学习计划第一部分在搭建SSM的过程中,可能会经常接触到一个叫maven的工具。这个工具也是你以后工作当中几乎是必须要使用的工具,所以你在搭建SSM的过程中,也可以顺便了解一下maven的知识。在你目前这个阶段,你只需要在网络上了解一下maven基本的使用方法即可,一些高端的用法随着你工作经验的增加,会逐渐接触到的。 第二部分:对于参加工作一年以内转载 2017-03-09 18:06:28 · 312 阅读 · 0 评论 -
字符集与编码一之charset and encoding
许多时候,字符集与编码这两个概念常被混为一谈,但两者是有差别的,作为深入理解的第一步,首先要明确:字符集与字符集编码是两个不同层面的概念charset是character set的简写,即字符集。encoding是charset encoding的简写,即字符集编码,简称编码。与接口及接口实现的对比可以把这两者与接口及接口实现做个对比:转载 2017-04-18 14:24:34 · 584 阅读 · 0 评论 -
字符集与编码二之编号 vs 编码
在深入研究字符集编码,简称编码之前,我们先引入一个概念:编号(code),引入它是为了更好地与编码(encode)相区分。如果你对Unicode有深入了解,你也许已经意识到了Unicode中码点(code point)扮演的正是编号的角色。类似的还有GB系列中所谓的区位码。其实叫什么并不重要,爱咋咋地,我并不关心。但乱叫容易叫混了,比如把码点也叫成Unicode编码,这里先把这些归转载 2017-04-18 14:43:36 · 668 阅读 · 1 评论 -
字符集与编码三之定长与变长
☯,首先,这并不是图片,这是一个unicode字符,Yin Yang,即阴阳符,码点为U+262F。如果你的浏览器无法显示,可以查看这个链接http://www.fileformat.info/info/unicode/char/262f/index.htm。这与我们要讨论的主题有何关系呢?下面我会谈到。连续式表示带来的分隔难题计算机的底层表示在计算机的最底层,一切都成了0转载 2017-04-18 14:46:14 · 2998 阅读 · 0 评论 -
字符集与编码四之Unicode
前面谈到不少的Unicode,但一直没有系统地谈及Unicode的方方面面,所以本篇文章专门谈谈Unicode,当然了,Unicode是一个庞大的主题,这里也是拣些重要的方面谈谈而已,免不了挂一漏万。什么是Unicode?按Unicode官方的说法,Unicode是Unicode Standard(Unicode标准)的简写,所以Unicode即是指Unicode标准。按wik转载 2017-04-18 15:23:45 · 703 阅读 · 0 评论 -
字符集与编码五之代码单元及length方法
在前一篇章中已经谈了不少Unicode中的重要概念,但仍还有一些概念没有提及,一则不想一下说太多,二则有些概念也无法三言两语就说清楚,本文在此准备谈一下代码单元及由此引发的一些话题。什么是代码单元?UTF-8,UTF-16和UTF-32中的8,16和32究竟指什么?代码单元指一种转换格式(UTF)中最小的一个分隔,称为一个代码单元(Code Unit),因此,一种转换格式只会包含整转载 2017-04-18 15:42:44 · 788 阅读 · 0 评论 -
字符集与编码七之BOM
在前一篇的最后,留下了一个问题,即string.getBytes(“UTF-16”)会在开头多出两个字节”FEFF”来,Unicode中称之为BOM,接下来就让我们一起来了解有关BOM的知识,在此之前我们需要说说有关端法的知识。什么是端法(endian)?在具体介绍它之前,让我们先看看鸡蛋的两种摆法:大家看出区别来了吗?上面的一排都是尖的一端(或者说小端)向着左,较圆的一端转载 2017-04-19 09:48:40 · 1342 阅读 · 0 评论 -
字符集与编码八之ASCII和ISO-8859-1
在前面其实也谈到了ASCII了,但并没有很具体,作为一个完整系列的一部分,还是有必要谈一下,也作为后面讨论的一些基础。ASCII它的全称是American Standard Code for Information Interchange(美国信息交换标准代码),是一个7位字符编码方案。下面是它的一张简图(来自http://www.asciitable.com/index/asci转载 2017-04-19 10:07:42 · 3436 阅读 · 0 评论 -
URL中的保留和不安全字符
书写URL时要使用US-ASCII字符集可以显示的字符。http://www.google.com如果需要在URL中使用不属于此字符集的字符,就要使用特殊的符号对该字符进行编码。如:最常使用的空格用%20来表示,例如:http://www.google.com/new%20123.html除了那些无法显示的字符外,还需要在URL中对那些保留(reserved)字符和转载 2018-01-16 17:24:13 · 3718 阅读 · 0 评论