Java
Coding Diary
从事金融风险控制相关的J2EE软件开发工作
展开
-
JVM参数及调优
调优基本概念在调整JVM性能时,通常有三个组件需要考虑:堆大小调整垃圾收集器调整JIT编译器大多数调优选项都与调整堆大小和选择合适的垃圾收集器有关,JIT编译器对性能也有很大影响,但很少需要对其进行调优,尤其是针对较新版本的JVM。通常,在进行Java程序调优的时候,会重点关注两个主要指标:响应性:应用程序对请求进行响应的速度,对于专注响应性的应用程序,长时间的暂停是不可接受的...原创 2019-11-07 22:03:52 · 469 阅读 · 0 评论 -
JDK内置工具命令
javapJava反编译工具,主要用于根据Java字节码文件反汇编为Java源代码文件用法:javap 用法描述javap -help --help -?输出此用法消息javap -version版本消息javap -v -verbose输出附加信息javap -l输出行号和本地变量表javap -public仅显示公共类和成员j...原创 2019-11-04 20:11:10 · 166 阅读 · 0 评论 -
Java垃圾回收机制
Java 内存运行时区域中的程序计数器、虚拟机栈、本地方法栈随线程而生灭,栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由 JIT 编译器进行一些优化),因此这几个区域的内存分配和回收都具备确定性,不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。而 Java 堆不一样,一个接...原创 2019-10-22 20:25:23 · 422 阅读 · 0 评论 -
JVM类加载机制
Java的程序要运行需要将编译好的class文件加载到JVM运行时数据区。在了解类的加载机制之前,我们需要了解一下类的生命周期。Java类从被加载到JVM内存开始,到卸载出内存为止,它的整个生命周期包括了:加载(Loading),验证(Verification),准备(Preparation),解析(Resolution),初始化(Initialization),使用(Using)和卸载(Un...原创 2019-10-15 20:23:19 · 304 阅读 · 0 评论 -
Java网络编程 -- 网络协议
OSI网络七层协议为使不同计算机厂家的计算机能够互相通信,以便在更大的范围内建立计算机网络,有必要建立一个国际范围的网络体系结构标准。OSI网络七层协议就是在这个基础上制定出来的,其从最底层开始依次是物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。各层主要功能物理层:使原始的数据比特流能在物理介质上传输数据链路层:通过校验,确认和反馈重发等手段,形成稳定的数据链路网络层:进...原创 2019-08-14 20:12:19 · 151 阅读 · 0 评论 -
自定义FutureTask实现
FutureTaskFutureTask是Future的实现,用来异步任务的获取结果,可以启动和取消异步任务,查询异步任务是否计算结束以及获取最终的异步任务的结果。通过get()方法来获取异步任务的结果,但是会阻塞当前线程直至异步任务执行结束。一旦任务执行结束,任务不能重新启动或取消,除非调用runAndReset()方法。代码示例:public class ThreadTest { ...原创 2019-08-11 21:02:53 · 270 阅读 · 0 评论 -
Java网络编程 -- BIO 阻塞式网络编程
阻塞IO的含义阻塞(blocking)IO :阻塞是指结果返回之前,线程会被挂起,函数只有在得到结果之后(或超时)才会返回非阻塞(non-blocking)IO :非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回同步(synchronous)IO :应用阻塞在发送或接受数据的状态,直至数据成功传输(或返回失败),简单来说就是必须一件一件事做,等前一件做...原创 2019-08-22 20:15:56 · 251 阅读 · 0 评论 -
Java网络编程 -- NIO非阻塞网络编程
从Java1.4开始,为了替代Java IO和网络相关的API,提高程序的运行速度,Java提供了新的IO操作非阻塞的API即Java NIO。NIO中有三大核心组件:Buffer(缓冲区),Channel(通道),Selector(选择器)。NIO基于Channel(通道)和Buffer(缓冲区))进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中,而Selector(选择器)主要...原创 2019-08-26 21:53:25 · 188 阅读 · 0 评论 -
Java网络编程 -- AIO异步网络编程
AIO中的A即Asynchronous,AIO即异步IO。它是异步非阻塞的,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,一般我们的业务处理逻辑会变成一个回调函数,等待IO操作完成后,由系统自动触发。在进行读写操作时,只需直接调用API的read/write方法即可。这两种方法均为异步的,对于读操作而言,当有流可读取时,操作系统会将可读的流传入read方法的缓冲区,并通...原创 2019-08-28 21:18:44 · 332 阅读 · 0 评论 -
Reactor模式
什么是Reactor模式Reactor模式是一种设计模式,它是基于事件驱动的,可以并发的处理多个服务请求,当请求抵达后,依据多路复用策略,同步的派发这些请求至相关的请求处理程序。Reactor模式角色构成在早先的论文An Object Behavioral Pattern forDemultiplexing and Dispatching Handles for Synchronous E...原创 2019-09-08 09:59:56 · 1698 阅读 · 0 评论 -
Java网络编程 -- Netty入门
Netty简介Netty是一个高性能,高可扩展性的异步事件驱动的网络应用程序框架,它极大的简化了TCP和UDP客户端和服务器端网络开发。它是一个NIO框架,对Java NIO进行了良好的封装。作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。Netty的特性统一的API,适用于不...原创 2019-09-10 21:45:49 · 386 阅读 · 0 评论 -
Java网络编程--Netty中的责任链
Netty中的责任链设计模式 - 责任链模式责任链模式(Chain of Responsibility Pattern)是一种是行为型设计模式,它为请求创建了一个处理对象的链。其链中每一个节点都看作是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象。当一个请求从链式的首端发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止。责任链模式主要解决了发起请求...原创 2019-09-26 20:55:59 · 333 阅读 · 0 评论 -
Java网络编程--Netty中的ByteBuf
由于JDK中提供的ByteBuffer无法动态扩容,并且API使用复杂等原因,Netty中提供了ByteBuf。Bytebuf的API操作更加便捷,可以动态扩容,提供了多种ByteBuf的实现,以及高效的零拷贝机制。ByteBuf的操作ByteBuf有三个重要的属性:capacity容量,readerIndex读取位置,writerIndex写入位置提供了readerIndex和weite...原创 2019-10-06 20:52:01 · 941 阅读 · 0 评论 -
Netty中粘包和拆包的解决方案
粘包和拆包是TCP网络编程中不可避免的,无论是服务端还是客户端,当我们读取或者发送消息的时候,都需要考虑TCP底层的粘包/拆包机制。TCP粘包和拆包TCP是个“流”协议,所谓流,就是没有界限的一串数据。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发...原创 2019-10-10 21:27:50 · 649 阅读 · 0 评论 -
JDK容器类List,Set,Queue源码解读
List,Set,Queue都是继承Collection接口的单列集合接口。List常用的实现主要有ArrayList,LinkedList,List中的数据是有序可重复的。Set常用的实现主要是HashSet,Set中的数据是无序不可重复的。Queue常用的实现主要有ArrayBlockingQueue,LinkedBlockingQueue,Queue是一个保持先进先出的顺序队列,不允许随机访...原创 2019-08-05 20:22:04 · 83 阅读 · 0 评论 -
深入理解Java中的锁(二)
locks包结构层次[外链图片转存失败(img-tUF9Pwex-1564060844952)(https://gitee.com/mo-se-de-feng/notes/raw/master/images/1.3.1 locks包类层次结构.PNG)]Lock 接口方法签名描述void lock();获取锁(不死不休)boolean tryLock();获取锁...原创 2019-07-25 21:21:29 · 124 阅读 · 0 评论 -
Java Arrays.asList 实例
// list长度为3List list = Arrays.asList("a","b","c");// list长度为1, 因为考虑1.4语法String[] arr = {"a","b","c"};List list = Arrays.asList(arr);// 同时符合1.4和1.5的语法,此时会优先考虑1.4的语法// 原因是有了新功能要保证以前的代码不出错,向后兼容 //将ar原创 2017-02-20 20:28:24 · 447 阅读 · 0 评论 -
Java 内省简介
什么是内省内省是java语言对Bean类属性、事件的一种处理方式简单地理解就是通过反射读写JavaBean的属性访问JavaBean属性的两种方式:直接调用bean的setXXX或getXXX方法。通过内省技术访问(java.beans包提供了内省的API),内省技术访问也提供了两种方式。 – 通过PropertyDescriptor类操作Bean的属性 – 通过Introspector类原创 2017-02-20 20:40:28 · 322 阅读 · 0 评论 -
用户注册(一)------MD5加密
用户注册时为了数据的安全,通常需要对密码进行加密然后再存入数据库,登陆时也需要对用户输入密码进行加密之后再与数据库中的数据进行比对。以下是通过MD5对密码进行加密的一个方法:/** * 获得MD5加密的结果 * @param data 需要加密的数据 * @return */ public static String getMD5Value(Stri原创 2017-03-29 21:42:50 · 552 阅读 · 0 评论 -
用户注册(三)-----邮件激活
用户注册时,为了确保用户的有效性以及系统的安全性,通常需要用户填写邮箱,用户在登陆之前需要先到邮箱进行账号的激活操作。本地演示时需要准备邮件服务器,可以使eyoumailserversetup.exe,下载安装后软件如下:安装之后可以右键新建账号进行测试。准备邮件发送的util。 mail.properties:mail_host = 127.0.0.1admin_username = ad原创 2017-03-29 22:20:11 · 999 阅读 · 1 评论 -
Java String 相关的面试题
String s = “abc” 和 String s = new String(“abc”) 的区别 String s = new String(“abc”) 创建了几个对象 2个 String s = “a” + “b” + “c” + “d” 创建了几个对象 String s1 = “a” String s2 = “b” String s3 = s1 + s2; s3==”ab”?原创 2017-02-20 20:06:09 · 256 阅读 · 0 评论 -
Java中实现线程的方式
Java中实现线程的方式Java中实现多线程的方式的方式中最核心的就是 run()方法,不管何种方式其最终都是通过run()来运行。Java刚发布时也就是JDK 1.0版本提供了两种实现方式,一个是继承Thread类,一个是实现Runnable接口。两种方式都是去重写run()方法,在run()方法中去实现具体的业务代码。但这两种方式有一个共同的弊端,就是由于run()方法是没有返回值的,所...原创 2019-07-12 20:38:49 · 409 阅读 · 0 评论 -
线程终止
线程终止不正确的线程终止 - stopstop: 终止线程, 并且清楚监视器锁的信息, 但是可能导致线程安全问题, JDK不建议使用正确的线程终止 - interrupt如果目标线程在调用Object class的wait方法, join方法或sleep方法时被阻塞, 那么interrupt会生效, 该线程的中断状态将被清除,抛出InterruptedException如果目标线程是被I...原创 2019-07-09 22:39:17 · 408 阅读 · 0 评论 -
CPU缓存和内存屏障
CPU性能优化手段 - 缓存为了提高程序的运行性能, 现代CPU在很多方面对程序进行了优化例如: CPU高速缓存, 尽可能的避免处理器访问主内存的时间开销, 处理器大多会利用缓存以提高性能多级缓存L1 Cache (一级缓存)是CPU第一层高速缓存, 分为数据缓存和指令缓存, 一般服务器CPU的L1缓存的容量通常在32-4096kbL2 Cache (二级缓存) 由于L1高速缓存的容量...原创 2019-07-15 21:38:59 · 204 阅读 · 0 评论 -
Java程序运行原理分析
class文件内容class文件包含Java程序执行的字节码数据严格按照格式紧凑排列在class文件的二进制流,中间无分割符文件开头有一个0xcafebabe(16进制)特殊的标志JVM运行时数据区线程独占: 每个线程都会有它独立的空间,随线程的生命周而创建和销毁线程共享: 所有线程都能访问这块内存数据,随虚拟机或GC而创建和销毁方法区方法区是各个线程共享的内存区域用于...原创 2019-07-16 21:28:43 · 172 阅读 · 0 评论 -
深入理解Java中的锁(一)
Java中锁的概念自旋锁 : 是指当一个线程在获取锁的时候,如果锁已经被其他线程获取,那么该线程将循环等待,然后不断判断锁是否能够被成功获取,直到获取到锁才会退出循环。乐观锁 : 假定没有冲突,在修改数据时如果发现数据和之前获取的不一致,则读最新数据,修改后重试修改悲观锁 :假定会发生并发冲突,同步所有对数据的相关操作,从读数据就开始上锁独享锁(写) : 给资源加上写锁,拥有该锁的线程可以...原创 2019-07-23 22:56:31 · 493 阅读 · 0 评论 -
深入理解Java中的锁(三)
ReadWriteLock接口读写锁维护一对关联锁,一个只用于读操作,一个只用于写操作。读锁可以由多个线程同时持有,又称共享锁。写锁同一时间只能由一个线程持有,又称互斥锁。同一时间,两把锁不能被不同线程持有。读写锁适合读取操作多于写入操作的场景,改进互斥锁的性能,比如集合的并发安全性改造,缓存组件等。ReentrantReadWriteLock实现原理分析ReentrantReadWrit...原创 2019-07-28 22:23:52 · 220 阅读 · 0 评论 -
线程安全之原子操作
原子操作原子性就是指该操作是不可再分的。不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。原子操作可以是一个步骤,也可以是多个步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分(不可中断性)。将操作视作一个整体,资源在该次操作中保持一致,这是原子性的核心特征。首先我们来看一个非原子操作的示例:public class Counter { vol...原创 2019-07-17 20:01:14 · 333 阅读 · 0 评论 -
JDK容器类Map源码解读
java.util.Map接口是JDK1.2开始提供的一个基于键值对的散列表接口,其设计的初衷是为了替换JDK1.0中的java.util.Dictionary抽象类。Dictionary是JDK最初的键值对类,它不可以存储null作为key和value,目前这个类早已不被使用了。目前都是在使用Map接口,它是可以存储null值作为key和value,但Map的key是不可以重复的。其常用的实现类...原创 2019-07-29 20:49:29 · 110 阅读 · 0 评论 -
Java 在使用迭代器迭代集合的过程中的注意事项
List list = new ArrayList();list.add("wangwu");list.add("zhangsan");list.add("lisi");// 从集合中删掉Iterator iter = list.iterator(); while(iter.hasNext()) { String name = (String) iter.next()原创 2017-02-20 20:19:00 · 1376 阅读 · 0 评论