
java基础
口怪物口
这个作者很懒,什么都没留下…
展开
-
list,map,set,queue容器汇总介绍
1.ArrayList(非线程安全) ArrayList 是一个数组队列,实现了动态数组功能,继承了AbstractList,提供了相关的添加、删除、修改、遍历等功能,可以通过序号随机访问对应数值.对接访问时,效率较高,效率的主要开销在数组数据的预留空间开销. ArrayList包含了两个重要的对象:elementData 数组和size。一个用来储存数据,一个用来统计大小.新建一个Arra...原创 2019-03-11 14:34:14 · 865 阅读 · 0 评论 -
用@resource注入的bean和容器中的bean不是同一个bean
开发中遇到问题: 在spring默认的单例模式下,发现事件监听类中用@resource注入的bean和action层@resource注入的类不是同一个类,事件监听类是运用spring-jms包中的消息接收方法,将监听类,监听类中的监听方法,和消息转换类传入MessageListenerAdapter类, 而MessageListenerAdapter是通过反射的方法,执行了我的监听方法,原码...原创 2019-05-14 00:15:11 · 1214 阅读 · 0 评论 -
网络I/O优化
网络I/O优化的基本原则: 1.减少网络交互的次数 在网络交互两端设置缓存,发起交互的一端设置缓存,如优秀的数据库框架hibernate,mybatis都有一级缓存和二级缓存,有效的减少了数据库的访问次数,即减少了网络链接的次数,在接收端设置缓存可以减少数据的处理时长,使ESTABLISHED状态缩短,加快链接释放速度,链接状态转换如下图: 也可以通过合并的方式减少交互次数,即批量请求,比...原创 2019-04-26 19:17:50 · 916 阅读 · 0 评论 -
BIO,NIO,AIO原理详解以及代码实现,结果证明
一.BIO BIO是java1.4之前唯一的IO逻辑,在客户端通过socket向服务端传输数据,服务端监听端口,由于传统io读数据的时候,如果数据没有传达,IO会一直等待输入传入,所以当有请求过来的时候,新起一条线程对数据进行等待,处理.导致每一个链接都对应着服务器的一个线程. 可以看出,BIO是同步阻塞的 BIO实现代码如下: public class BIO { public...原创 2019-03-06 17:13:02 · 1780 阅读 · 0 评论 -
java锁相关介绍与分析
本文主要介绍两种锁:synchronized和lock,以及锁相关比较重要的知识:volatile,atomic,锁的升级 1.synchronized 三种同步形式 同步静态方法时,锁住的是类实例,因为类信息存放在方法区,是全局共享的,所以会将所有调用该方法的线程全部锁住. 同步普通方法,锁住的是对象的实例(this) 同步一个对象实例(同步代码块)时,以该对象为锁的代码块. syn...原创 2019-03-21 10:20:16 · 216 阅读 · 0 评论 -
线程池工作原理,功能介绍以及原码分析
代码中运用线程池有两个步骤:创建线程池和线程池中运行线程 1.创建线程池 创建线程池的方法以及实现原码: Executors.newSingleThreadExecutor(); public static ExecutorService newSingleThreadExecutor() { return new FinalizableDelegatedExecutor...原创 2019-03-14 12:08:04 · 204 阅读 · 0 评论 -
java虚拟机类加载以及class中字节码的执行
一.jvm类加载 class的文件结构:1.文件头(版本和class标志).2.常量池(类名,方法名称类型,属性名称类型,并均为索引)3.类信息.4.方法和属性信息 java类在遇到1.类似new指令;2.反射调用;3.子类加载;4包含main函数;的时候会在虚拟机中加载该类,加载的大体步骤为: 加载->验证->准备->解析->初始化 1.加载 加载类主要完成的工...原创 2019-03-04 20:23:06 · 898 阅读 · 0 评论 -
jvm内存相关详解
一.内存区域分配 jvm内存简单分为程序计数器,栈,堆,以及方法区 便于理解,这里通过创建实例变量对象以及调用来讲一下各个区域的分工. 先列举下程序中一个类需要加载的数据: 类的基本信息(包括代码),常量(final修饰,不可改变),局部变量,静态变量,native方法(调用底层方法的非java方法),以及方法信息 1.场景:代码中new一个新对象a. 先加载这个类,类的信息,常量,静...原创 2019-03-02 13:51:39 · 204 阅读 · 0 评论 -
java编码问题
首选需要理解unicode:为了把全世界人民所有的所有的文字符号都统一进行编码,于是制定了UNICODE标准字符集,没有什么编码规则,只是编码和字符一一对应,在java内存中,string类型的字符就是以unicode的形式存在内存中,所以,在debug的时候,string既不属于gbk,也不属于utf-8和其他的编码格式。 知道这个问题以后,很多编码问题就可以迎刃而解: 既然知道java内存...原创 2019-05-12 20:59:22 · 243 阅读 · 0 评论 -
重新整理一遍java相关,从java最基本的jdk开始
重新整理一遍java相关,从java最基本的jdk开始: java安装后有jdk和jre jre为java运行时环境,即如果你想运行Java程序,安装jre即可 jdk为程序员用的开发环境,即如果你想开发java程序,则需要安装jdk, jre包括虚拟机jvm和java自带sdk,jdk中包括虚拟机jvm,自带sdk,编译器javac,和一些调试工具,如命令行形式的jps,jstat,ji...原创 2019-02-28 19:59:07 · 152 阅读 · 0 评论 -
hashCode()和equals()的区别和联系
equals()是对象类object的基础方法,可以被重写,如果不重写,意义和==没有区别(string类默认重写了equals方法和hashCode方法). hashCode()生成的是散列值,在散列表中有用,散列表通过散列值可以快速的定位数据位置,支持散列表的集合像HashMap.HashSet等. 散列表判断相等是hashCode和equal都相等的对象才为相等下面用代码证明: pu...原创 2019-03-07 13:43:24 · 345 阅读 · 0 评论