Java
文章平均质量分 85
Tezuka1001
这个作者很懒,什么都没留下…
展开
-
关于序列化的一点思考
最近对序列化进行了一下深入的思考,以前一直没怎么在意这个点,发现还是有一些收获,写篇简单的笔记记录一下。这里有篇文章讲的不错、1、什么是序列化在程序中怎么获取对象某个字段的值:对象在JVM中的存储布局可以分为对象头,实例数据,字节对齐三部分,我们知道Java万物皆引用,所以可以通过这个引用去jvm里找到对象的实际位置,然后再计算出字段偏移量,根据字段的大小,读取对应大小的字节,就可以取到...原创 2020-03-24 18:45:32 · 482 阅读 · 1 评论 -
Java常用容器总结
在工作中经常会碰到需要各种容器的场景,Java为我们提供了很多的容器,本文将对常用的一些容器做一个总结。从Java的集合继承关系图中我们可以看到Java的容器一共分为List,Queue,Stack,Set,Map这五种,其中List,Stack,Queue其实在逻辑结构上几乎没有区别,Stack比较特殊,因为在实际开发中几乎不会被用到,不对Stack做相关总结。一、List非线程安全的L...原创 2019-11-09 17:47:38 · 375 阅读 · 0 评论 -
CountDownLatch和CyclicBarrier
1. 定义CountDownLatch提供了一个栅栏,在这个栅栏这里有n个线程等待另外m个线程完成任务的一个组件。CyclicBarrier提供了一个屏障,保证n个线程全部到达这个屏障之后,再继续执行后续的代码。2. 对比二者语义有所不同,CountDownLatch提供的n个线程等待m个线程的组件,而CyclicBarrier提供的是一个对n个线程进行步调调整的组件。CountDow...原创 2019-08-02 00:08:22 · 612 阅读 · 0 评论 -
Future,FutureTask,CompletableFuture
Java中线程的实现方式一般有实现Runable接口,实现Callable接口,继承Thread类三种。而Runable和Thread的run方法都是void,也就是没有返回值,所以这种情况下获取线程的返回值就要使用线程间通信的手段,一般比较麻烦,基于Future有两种方式可以获取线程的返回值,比较方便。使用Future+Callable的形式,用Future接受Callable任务的返回值...原创 2019-07-25 23:36:04 · 1236 阅读 · 0 评论 -
ReentrantReadWriteLock源码(jdk1.8)
ReentrantReadWriteLock是一个可重入读写分离锁,可以认为是在ReentrantLock上的扩展,但是二者没有继承关系,相比于ReentrantLock将读和写分离,读读不互斥,可以提高并发环境下的效率,同样也是基于AQS实现,源码比ReentrantLock要复杂一些,最好能了解AQS源码。ReentrantReadWriteLock内部有Sync,NoNofairSync,...原创 2019-04-07 20:41:09 · 1033 阅读 · 0 评论 -
ReentrantLock源码(jdk1.8)
ReentrantLock比较常用的一个锁,基于AQS实现,支持可重入性,公平锁和非公平锁两种模式。ReentrantLock的可重入性是通过对同步状态值state进行累加实现;ReentrantLock有三个内部类,分别是Sync,NonfairSync,FairSync他们的继承关系如下图所示,ReentrantLock持有一个Sync类型的引用,根据多态的思想,在公平锁和非公平锁模式下,分...原创 2019-04-06 20:36:14 · 324 阅读 · 0 评论 -
AQS源码(jdk1.8)
AQS(AbustactQueuedSynchronizer)队列同步器是Java同步的基础组件,ReentrantLock,ReentrantReadWriteLock,CountDownLatch,CyclicBarrier,Semaphore等都是基于AQS来实现的,了解AQS的源码对于多线程编程还是有一些帮助,也可以实现自定义的同步组件。AQS使用了模板方法设计模式,提供了独占锁/共享锁...原创 2019-04-04 19:12:21 · 726 阅读 · 0 评论 -
LinkedHashMap源码(jdk1.8)
LinkedHashMap继承自HashMap,建议先学习HashMap源码,然后再学习LinkedHashMap源码,HashMap源码,这样会快很多。LinkedHashMap继承了HashMap,所以大体上是仍然是HashMap的结构,但是在内部实现增加两个指针来构成一个双向链表来维持顺序,同时提供了两种可选择的顺序。LinkedHashMap与HashMap的面向对象设计思想很值得学习,...原创 2019-03-25 12:03:06 · 228 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记之高效并发
并发处理的广泛应用是使得Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类“压榨”计算机运算能力的最有力武器。Java内存模型Java的内存模型主要是分为主内存和工作内存,此处的划分和内存管理部分的不是一个层面的。Java的内存间交互采用lock,unlock,read,load,use,assign,store,write这八个指令完成。lock:作用于主内存变...原创 2019-03-17 19:19:12 · 236 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记之程序编译与代码优化
从计算机程序出现的第一天起,对效率的追求就是程序天生的坚定信仰,这个过程犹如一场没有终点、永不停歇的F1方程式竞赛,程序员是车手,技术平台则是在赛道上飞驰的赛车。Java代码的三种编译过程将*.java文件转变为 *.class文件,如Javac将*.class文件转变为转变为机器码,如HotSpot的C1,C2编译器直接把*.java文件编译为本地机器代码,如GCJ编译器Jav...原创 2019-03-16 17:08:36 · 414 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记之虚拟机执行子系统
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。Class文件结构(Class文件结构比较复杂,具体的表结构需要的时候自行查阅即可)Class文件结构采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构只有两种数据类型:无符号数和表。无符号数属于基本数据类型,比如u1,u2,u4,u8分别代表占一个字节,两个字节,四个字节,八个字节的无符号数,...原创 2019-03-15 17:46:17 · 245 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记之自动内存管理机制
Java和C++之间有一堵由动态内存分配和垃圾收集技术所围成的“高墙”,强外面的人想进去,强里面的人却想出来。Java内存分区由图中可以看到,JVM内存主要分为方法区,虚拟机栈,本地方法栈,堆,程序计数器。程序计数器(PC):是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器;是线程私有的;如果执行native方法,则pc的值为空,这块内存不存在内存溢出。Java虚拟...原创 2019-03-15 12:46:36 · 280 阅读 · 0 评论 -
HashMap源码(JDK1.8)
HashMap继承了AbstractMap<K,V>类,实现了Map<K,V>,Cloneable,Serializable接口,底层由数组+链表和红黑树(jdk8之前没有红黑树)来实现。源码需要关注的主要是构造函数,hash函数,put/get函数,resize函数,remove函数,clear函数等,以及内部字段。基本字段transient Node<K,...原创 2019-03-14 21:19:17 · 267 阅读 · 0 评论 -
JDBC基础
JDBC的概念 JDBC(Java DataBase Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成,所以JDBC本质就是一些操作数据库的jar包。JDBC的作用 JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,JDBC是Ja...原创 2018-05-31 16:22:44 · 268 阅读 · 0 评论 -
Javaweb三大组件之Servlet
Javaweb开发中有很重要的三个组件分别是:Servlet,Filter,Listener。这些组件在Javaweb的开发中起着不同且至关重要的作用,而我们常用的web框架基本都是基于这些基础组件进行封装之后的用法,所以对于这些原生的方式进行Javaweb开发也要需要了解的,这样对框架的认识也能更加深入,理解为什么要那么做。1.Serlvet的广义概念Servlet是运行在服务器容器中的...原创 2018-05-24 11:16:06 · 1218 阅读 · 0 评论 -
Javaweb三大组件之Filter
1.Filter的广义概念Javaweb开发中第二个很重要的组件是Filter,它和Serlver非常相似,所以学习完Servlet之后学习Filter就会很快。Filter在Javaweb开发中担当的角色是一个过滤器,顾名思义就是对客户端的请求进行过滤,然后才发送给Servlet进行处理,差不多就是下图的所示样子。2.Filter的作用过滤器实际上主要担当一些切面的工作,比如登录...原创 2018-05-24 11:15:56 · 299 阅读 · 0 评论 -
Javaweb三大组件之Listener
1. Listener的广义概念顾名思义,Listener就是监听器,监听主要是对ServletContext,HttpSession,ServletRequest这三大域对象的创建和销毁事件监听,还有就是对域对象属性的操作监听,当监听这些事件发生是就会进行一些适当的操作。对于域独享属性操作的监听一般用的很少,主要介绍这三大域对象的监听器。2. Javaweb四大域对象域对象 ...原创 2018-05-24 11:15:43 · 414 阅读 · 0 评论 -
Java学习路线
JavaWeb开发学习资料开发环境:IDE: Intellij idea, Eclipse, Dreamweaver数据库: MySQLServler容器: Tomcat后端:1. Java基础熟悉Java语法,String,数组,集合框架,面向对象的封装、继承、多态、接口。推荐书籍:《Java学习笔记》,《Head First Java》,《Core Java》...原创 2017-12-04 14:44:33 · 3407 阅读 · 0 评论