
java
梧桐和风
学如逆水行舟,不进则退。要知道,比你聪明的人比你还努力。
展开
-
Thread的join()方法解析
一般用join方法实现主线程等待其他异步线程完成,今天就看看它到底是咋实现的。先看下示例 // 子线程 static class SleepThread implements Runnable { @Override public void run() { try { System.out.println("子线程开始"); Thread.sleep(1000);原创 2021-06-08 12:45:40 · 431 阅读 · 0 评论 -
java I/O体系总结(五)netty架构浅析
java I/O体系总结(五)netty架构浅析简介netty是使用java编写的高性能IO框架,旨在为高并发场景提供支持。netty可提供多种IO模型的支持,如OIO,NIO等。一般来说,非阻塞IO更适合于大规模高并发场景,我们使用netty主要也因为其封装了原生NIO,规避了其中复杂易出错的细节,更加易用、通用。从示例讲起netty既然是以java NIO为基础构建的(当然...原创 2018-09-17 17:41:19 · 286 阅读 · 0 评论 -
java I/O体系总结
java I/O体系总结I/O流的理解先看看流的概念 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。通俗的说,有两个文件A和B,想要把A的内容拷贝到B中,可以假设两文件间有一个通道,把A的数据按字节或是字符的形式传送给B。这个通道就是java...原创 2018-09-10 16:57:20 · 579 阅读 · 2 评论 -
使用注解方式构建dubbo服务
使用注解方式构建dubbo服务前言Dubbo是阿里巴巴开源的一个高性能优秀的服务框架,通过使用RPC实现服务调用。在业界尤其国内使用广泛。下面就从头开始构建dubbo的简单demo,配置使用注释方式完成,以zookeeper为注册中心。构建项目以 IntelliJ IDEA 为例,创建一个多模块的项目,项目结构如下图所示。其中,dubbo-demo是父项目,其下有3...原创 2018-09-07 17:12:58 · 20537 阅读 · 5 评论 -
java I/O体系总结(三) java NIO
java 新IO IO NIO 特点 面向流 面向缓冲 是否阻塞 阻塞IO 非阻塞IO 无 选择器java 新IO主要部分:Buffer(缓冲区)、Channel(通道)、Selectors(选择器)Java NIO的非阻塞模式,如使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数...原创 2018-09-13 21:23:05 · 450 阅读 · 0 评论 -
java I/O体系总结(二) java IO补充
java I/O 体系总结二前言继续说java的I/O体系,主要补充下上文没有提到的知识点或类。java有关io的类在java.io包中。主要有以下几个部分。java i/o流部分(也是IO的主体部分)io辅助类,如File、RandomAccessFile或FileDescriptor,Closeable及Flushable等。io异常类io流分类根据数据...原创 2018-09-14 12:00:45 · 332 阅读 · 0 评论 -
java I/O体系总结(四) 使用socket构建HTTP服务器
java I/O体系总结(四) 使用socket构建HTTP服务器前言在 java I/O体系总结(三)中,已使用阻塞和非阻塞的方式分别构建了一个简单的服务器。HTTP作为Web浏览器和Web服务器之间通信的标准协议,在网络编程中有也重要位置。下面就深入HTTP协议,尝试使用NIO构建简单的HTTP服务器。HTTP协议我们都知道,HTTP协议是应用层协议,全称超文本传输协议...原创 2018-09-14 18:04:54 · 310 阅读 · 0 评论 -
zookeeper 原理简介随笔
zookeeper 原理简介随笔两部分: 文件系统和通知机制。文件系统,全量数据存于内存。zk主要有2种节点类型,临时节点和持久节点。又细分为普通临时节点顺序临时节点普通持久节点顺序持久节点临时节点的生命周期和客户端一致。如果客户端会话失效,则节点会被自动销毁。临时节点没有子节点顺序节点中,只会为其直接子节点维持顺序二阶段提交协议分为事务询问和执行事务两个部分。...原创 2019-02-27 20:48:05 · 267 阅读 · 0 评论 -
BIO、NIO以及AIO特点及比较
BIO、NIO以及AIO特点及比较BIO传统阻塞式IO的瓶颈在于每个连接都要创建线程,当连接过多时不能处理大量连接。讨论为什么传统IO会阻塞?首先说明一下socketsocket是支持TCP/IP网络通信的基础,是网络通信端点的抽象表示。可以使用5元组表示socket。为 协议,源ip,源port,目标ip,目标port。协议可选TCP或UDP,是TCP/IP协议的封装和应用。soc...原创 2019-02-20 21:52:16 · 1054 阅读 · 0 评论 -
java基础体系整理(三)Spring框架相关
前言本文spring框架相关知识包括Spring、Spring MVC,Spring Boot 以及Mybatis,Hibernate等常见与Spring集成相关的框架。常见问题对Spring IOC、AOP的理解AOP的实现方式都有哪些?AOP中切面、切点是指什么?Spring MVC请求流程,拦截器在哪里执行的? 监听器是指什么?Mybatis中怎样在一次插入中返回该行主键(如...原创 2019-04-06 20:55:20 · 436 阅读 · 0 评论 -
java知识体系整理(二)JVM、GC回收及调优
本部分涉及JVM内存结构及GC算法,java调优等知识。JVMJVM内存结构划分(堆、栈、方法区、程序计数器等)标记清除、标记整理及复制算法。常用GC参数常见垃圾回收器及优缺点程序CPU 100%怎样排查?常见的JVM工具有哪些JVM优化栈上分配 当开启逃逸分析后,JVM会把确定不会溢出的对象放到栈上分配,是JVM的一项优化技术,基本思想是对线程私有的对象将他们打散分...原创 2019-04-01 21:44:54 · 460 阅读 · 0 评论 -
spring初始化接口InitializingBean
spring初始化接口InitializingBeanInitializingBean接口用于初始化bean。此接口只有一个方法afterPropertiesSet, 继承此接口的bean,在bean的属性初始化会执行这个方法。下面看一下此接口定义/** * 当需要在BeanFactory设置完bean的所有属性后,还需做一些初始化的操作,可让该bean实现此接口 */pu...原创 2018-09-08 10:21:21 · 2125 阅读 · 0 评论 -
AbstractQueuedSynchronizer整体解析
AbstractQueuedSynchronizer整体解析前言在此之前,我们深入源码分析过ReentrantLock系列,在那里就探讨过AbstractQueuedSynchronizer(下称AQS)类,称其是同步组件乃至整个并发包的基础类。这篇文章就深入AQS,从AQS的角度了解同步器以及ReentrantLock、ReentrantReadWriteLock等的实现机制,实现自定义的同步组件原创 2017-12-10 23:11:57 · 473 阅读 · 2 评论 -
JVM内存调优基础参数
java内存调优基础参数java内存调优基础参数java堆-Xms 指定JVM初始堆内存大小-Xmx 指定JVM最大堆内存大小-XXHeapDumpOnOutOfMemoryError 开启内存溢出自动生成快照-XXHeapDumpPath方法区-XXPermSize方法区初始大小-XXMaxPermSize 方法区最大值虚拟机栈和本地方法栈虚拟机栈-Xss 设置虚拟机栈大小本原创 2016-11-14 20:53:40 · 1810 阅读 · 0 评论 -
java学习笔记-String源码分析(2)
本文主要深入分析了java String类相应方法的源码及用法。原创 2016-11-19 15:12:28 · 1706 阅读 · 0 评论 -
java的内存模型与volatile关键字详解
由于各种硬件及操作系统的内存访问差异,java虚拟机使用java内存模型(java Memory Model,JMM)来规范java对内存的访问。这套模型在jdk 1.2中开始建立,经jdk 1.5的修订,现已逐步完善起来。什么是java内存模型什么是java内存模型,为什么会有这个模型?关于这个问题,就不得不从并发的问题讲起。在多核系统中,处理器一般设置缓存来加速数据的读取,缓存大大提升了程序性能原创 2017-02-05 10:19:48 · 2467 阅读 · 0 评论 -
java8 HashMap解析
java8 HashMap解析HashMap是java中常用且相对重要的类之一。了解此类的数据结构及储存原理对我们写程序有莫大帮助。java8中又对此类底层实现进行了优化,比如引入了红黑树的结构以解决哈希碰撞。今天我们就从底层解析一下HashMap,希望对大家有所帮助。HashMap的数据结构1. HashMap整体结构Map是java中的储存键(key)、值(value)对数据结构。而HashMa原创 2017-02-09 08:33:23 · 1001 阅读 · 0 评论 -
java设计模式(3)观察者模式
观察者模式是行为型模式的一种,该模式的主要有2种角色:观察者和被观察者。可以把被观察者当做一个“主题”,一旦这个主题有更新,订阅该主题的观察者就能收到消息。因此,观察者模式又被称为“发布-订阅”模式。举个更通俗的例子,某类报纸比如《人民日报》和它的订阅者们。一旦有了新一期的《人民日报》,报社就会主动把报纸送到订阅者手上。原创 2017-03-11 12:15:58 · 297 阅读 · 0 评论 -
java 集合与数组的互转
在实际工作中,我们经常需要Collection类型与数组的互相转换,javaAPI也提供了相应的方法帮我们完成操作。原创 2017-03-11 14:42:49 · 7149 阅读 · 0 评论 -
Latke源码解析(二)IOC部分
上篇 Latke源码解析(一)Servlet部分讲解了latke有关web 请求的servlet部分,这次深入了解一下它的Ioc部分内容。前言这部分有关Ioc和bean大量使用了javax.enterprise.context.spi 、JSR-330标准的jar包javax.inject以及操作java字节码的类库javassist。可参看文末参考文章。原创 2017-05-01 14:29:08 · 1071 阅读 · 0 评论 -
java获取方法参数名的若干实践
文章首发于我的个人博客网站梧桐和风的博客,欢迎关注。前言我们知道java可以通过反射得到方法名、参数类型等信息。但我们似乎不能直接得到方法的参数名。而在一些场景中,比如构建自己的MVC框架时,我们也想像Spring MVC一样,根据参数名获取用户传来的数据。下面就来总结一下,都有哪些方法可以获得方法的参数名。原创 2017-05-15 13:40:23 · 12815 阅读 · 4 评论 -
jav学习笔记-String源码分析
java中用String类表示字符串,是lang包里面使用频率很高的一个类,今天我们就来深入源码解析。事例和特性均基于java8版本。原创 2016-11-11 00:27:27 · 2964 阅读 · 0 评论 -
Wait/Notify通知机制解析
Wait/Notify通知机制解析前言我们知道,java的wait/notify的通知机制可以用来实现线程间通信。wait表示线程的等待,调用该方法会导致线程阻塞,直至另一线程调用notify或notifyAll方法才可另其继续执行。经典的生产者、消费者模式即是使用wait/notify机制得以完成。在这篇文章中,我们将深入解析这一机制,了解其背后的原理。原创 2017-12-09 22:49:04 · 10415 阅读 · 7 评论 -
java学习笔记-String相关知识点
关于java String的一些零碎知识点原创 2016-10-14 13:27:43 · 763 阅读 · 0 评论