
java
文章平均质量分 75
EBABEFAC
兴趣、初心、热情,坚持;怠惰是原罪;
20230530,还是得有一个地方分享下东西,不然自己容易怠惰
展开
-
netty入门篇
先说好,这里所说的入门篇,并不是教你们如何入门,而是在我研读部分源码后,写了一个基本的demo,实现了客户端和服务端的交互,在放出我写的源码之前,写简单介绍下netty中的一些核心概念和核心类。NIO模型NIO是相对于BIO的一个概念,BIO是阻塞IO,不管进行accept、connect、read、write操作都可能导致阻塞。NIO就是大家常说的非阻塞模型,但是我感觉还是采用多路复用的思想...原创 2019-12-07 21:51:18 · 474 阅读 · 0 评论 -
用代码和图告诉你VisualVM中的线程的几种状态
VisualVM是压测过程中经常用到的一个工具,但是在分析过程中对其中的几种状态了解的不太清楚,通过查阅资源和代码中测试,基本搞懂了这些状态的区别。状态说明:Running处于这种状态的线程对于操作系统而言,要么是正在占用CPU时间片运行的线程,要么是已经就绪的线程,只要有CPU时间片分配到,就可以直接运行,对应Java中Runnable状态。Sleeping处于睡眠状态的线程...原创 2019-11-30 17:15:46 · 2747 阅读 · 0 评论 -
ConcurrentHashMap思维导图(1.8版本)
思维导图核心操作put主要步骤:1、判断key或者value是否为null,是的话抛出异常;2、计算key的hashcode;3、判断容器table是否为null,或者长度为0,是的话进行初始化工作;4、定位key所在的位置,如果此位置没有元素的话,通过cas方式插入元素,直到成功;5、如果有元素的话,判断此时是否在扩容,如果是的话,帮助一起扩容(多个线程一起搞,这个过程挺复杂的...原创 2019-11-24 12:19:07 · 525 阅读 · 0 评论 -
谈谈HashMap结构那些事~(1.8版本)
1.8版本之前的HashMap结构也没仔细看过,趁着有时间把1.8版本HashMap结构梳理了一遍。下面就是几个总结。HashMap底层就是借助于数组+链表+红黑树实现的。其中红黑树是1.8中引入的,引入的目的就是防止数组中单个节点的链表过长,导致查询速度慢,通过借助于红黑树(自平衡二叉树)良好的查询速度,提升查询性能。/** * The table, initialized on...原创 2019-11-20 23:56:00 · 259 阅读 · 0 评论 -
DBCP2的核心参数配置
1、核心的包<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>${commons.pool.version}</version></depende...原创 2019-11-11 18:24:02 · 1853 阅读 · 0 评论 -
mybatis中的主要设计模式应用
mybatis中包含很多中设计模式,主要包括:建造者模式、工厂模式、单例模式、模板方法模式、组合模式、代理模式、适配器模式、装饰器模式、迭代器模式。Builder模式对象的构建过程过于复杂,可以使用建造者模式,将对象的创建过程和表示过程相分离。MapperAnnotationBuilderMapper的注解构建者。当在配置文件中直接定义下面的语句时,就需要通过这个构建器进行注解解...原创 2019-11-06 00:51:14 · 244 阅读 · 0 评论 -
常用排序算法
基本概念介绍稳定排序对于待排序的数据,如果有元素a和b相等,如果排序前a在b的前面,在排序后a还是在b的前面,则称之为稳定排序。非稳定排序对于待排序的数据,如果有元素a和b相等,如果排序前a在b的前面,在排序后a可能出现在b的后面,则称之为非稳定排序。内排序待排文件的数据都是在内存储器中进行的。外排序如果数据很大,内存无法直接加载完成的数据,排序过程需要借助于内外存数据的交换来完...原创 2019-10-27 21:37:08 · 184 阅读 · 0 评论 -
spring的初始化过程
spring是什么?为什么需要spring?spring是一个容器框架,bean的创建和管理都交给spring来管理。spring中几个核心概念。IOC(Inversion of Control):控制反转传统的代码中对象之间的耦合性太强,通过将对象交于spring容器管理,由容器来控制程序之前的依赖关系。其还有一个名字:DI(依赖注入),即如果对象之间存在依赖关系,又spring容器...原创 2019-10-25 18:49:43 · 461 阅读 · 0 评论 -
二十三种设计模式-访问者模式
访问者模式(Visitor)在现实世界中,访问者又叫做拜访者。客人到主人家做客,客人就是一个拜访者。对主人来说,你来与不来,我都在那里。什么是访问者模式访问者是一种行为型模式,主要是对象自身的结构和对象的具体行为相分离,通过一个对象维护对象自身的结构(这个结构不能是易变的,否则这种模式就没太大的意义了),通过另一个对象(就是我们说的访问者)维护施加在对象结构上的行为。通过将对象的结构和行为...原创 2019-10-18 11:42:58 · 296 阅读 · 0 评论 -
SynchronousQueue数据结构基本介绍
SynchronousQueue特点是阻塞队列BlockingQueue的一种实现,也就是方法具有BlokingQueue的基本性质;和ArrayBlockingQueue区别在于,ArrayBlockingQueue内部会有一个数组用于存放元素,相当于一个缓存区;而对于SynchronousQueue,内部没有这样的数据结构用于存放数据。对于具体的一个线程A,想要插入数据,必...原创 2019-10-17 18:47:17 · 429 阅读 · 0 评论 -
二十三种设计模式-桥梁模式
主要的作用将抽象与实现解耦,可以让抽象和实现独立的变化。关键角色(1)Abstraction:抽象角色,这个角色提供的接口是面向调用方的,其中会保持一个对实现化对象的引用,其中的真正实现就是由Implementor的实现类来提供的,Implementor就相当于一个桥梁,将抽象角色和具体的实现关联了起来,使用组合的方式,而不是继承的方式。(2)RefinedAbstraction:修正...原创 2019-10-14 23:54:32 · 222 阅读 · 0 评论 -
tomcat容器架构及请求和相应过程
基本容器结构如下:请求和响应架构:核心类介绍:1、 tomcat的启动入口:Bootstrap这个类是tomcat启动的入口类,看看main函数:public static void main(String args[]) { synchronized (daemonLock) { if (daemon == null) { ...原创 2019-10-12 21:39:16 · 323 阅读 · 0 评论 -
二十三种设计模式-原型模式
原型模式原型模式属于对象的创建模式。通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。这就是原型模式的用意。这种形式涉及到三个角色:客户(Client)角色:客户类提出创建对象的请求。抽象原型(Prototype)角色:这是一个抽象角色,通常由一个Java接口或Java抽象类实现。此角色给出所有的具体原型类所需的接口。具体原...原创 2019-09-14 15:45:22 · 141 阅读 · 0 评论 -
ThreadPoolExecutor线程池实现原理
ThreadPoolExecutor线程池实现原理线程池在工作中用到很多,也清楚其中的一些参数的配置,但是呢,总是对怎么标识空闲线程、活动线程不太清楚。空闲线程具体是怎么回收的?我之前一直在想一个线程的run方法执行完之后这个线程不就会被销毁了吗?怎么实现重复利用的呢?带着这些疑问,看了看底层的源码。先来看看ThreadPollExecutor的继承结构Executor接口中就一个ex...原创 2019-10-02 11:55:52 · 158 阅读 · 0 评论 -
二十三种设计模式-适配器模式
解决的问题拿例子来说吧。1、我要把我电脑中的各种重要的小电影拷贝的一个U盘上去,免得电脑的固态硬盘坏了导致资源丢失了,但是呢,我的mac的接口是type-C的,而U盘用的是USB接口,导致U盘无法插入mac中去。这时候我就在网上买了一个转接口,其中一头是type-C接口,一头支持USB接口插入,这样就可以将U盘和mac联系起来了。其中有三个重要的对象:目标对象(可以接入mac中的U盘)、源对象...原创 2019-10-01 16:39:35 · 260 阅读 · 0 评论 -
ReentrantLock原理介绍和源码解析
ReentrantLock原理介绍和源码解析AQS讲解ReentrantLock之前还是得先说AQS,AQS全称AbstractQueuedSynchronizer。正如源码的文档所说,这是依赖于FIFO队列提供的一种实现阻塞队列和相关联同步器(信号量、事件等等)的一种框架。像我们平常用的ReentrantLock、Semaphore、CountDownLatch、ThreadPoolExec...原创 2019-09-29 19:41:58 · 180 阅读 · 0 评论 -
mybatis:mybatis-config.xml解析
Mybatis配置文件解析基本元素:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"&g...原创 2019-09-17 21:03:58 · 173 阅读 · 0 评论 -
spring aop的实现代码
跟踪spring aop的实现aop核心概念介绍什么是切面编程在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面编程。Aspect(切面)什么是切面呢?切面这个词感觉还是挺抽象的,咱们可能知道点构成线,线构成面的数据话术。但是在编程语言中如何体现这个面呢?我的理解是“在程序中切面是由切入点和在切入点的表现的行为构成”。给个在spring中定义切面的例子如下...原创 2019-09-14 19:45:39 · 1173 阅读 · 0 评论 -
BlockingQueue之ArrayBlockingQueue实现原理
BlockingQueue之ArrayBlockingQueueArrayBlockingQueue是一个基于数组实现的有界限的阻塞队列,队列中的元素也是先进先出。在说ArrayBlockingQueue之前,先来看看其接口BlockingQueue,接口中提供了一些比较有意思的方法,当我们调用其中的方法时,会表现出一下四种行为之一:直接抛出一个异常(Throws Exception)返...原创 2019-10-02 17:25:26 · 570 阅读 · 0 评论 -
java虚拟机:详解jvm的内存布局和内存溢出异常
运行时数据区域主要包括如下几部分:堆(Heap)在这个多线程的架构体系中,咱们知道有的区域是线程私有的,而有的区域是线程共享的。对于堆区,就是线程共享的,不管是堆还是栈,底层都是一个物理机的主存而已,在此基础上,JVM进行了逻辑分块,有了堆、栈的概念,比如JVM认为物理地址0x0000~0x2321为堆区,他就是堆区了。堆是用来干什么的呢?java是面向对象的语言,所以用new创建一个对象...原创 2019-10-03 21:35:24 · 205 阅读 · 0 评论 -
java虚拟机:一篇让你了解垃圾收集策略和垃圾收集核心知识
什么是垃圾收集?在我们所看到的很多讲解JVM书籍知识的文章中,总会看到如下一句话:java和C++之间有一堵由内存动态分配和垃圾收集技术围成的“高墙”,墙外的人想进来,墙里的人想出去。感觉这句话挺有意思的,使用C++的程序员在管理内存方便有着至高无上的权利,内存的分配和释放都是由程序员直接控制的,如果分配了内存,但是忘记释放了,就会很容易出现内存溢出的问题,C++程序员饱受其折磨。而使用Jav...原创 2019-10-04 13:00:28 · 168 阅读 · 0 评论 -
Java内存模型:深入理解java内存模型和先行发生原则
在讲解java的内存模型之前,咱们先看看物理机上的内存模型。硬件的缓存结构正如上面所看到的,每一个处理器都会有自己独自的缓存,而且可能会有一层缓存时多个处理器是共享的,最底层一层的缓存连接着主存,相当于是主存的部分缓存数据。Java的内存模型上面的图虽然画的简陋了点,但也基本表明线程、工作内存、主内存的交互情况。Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变...原创 2019-10-04 23:29:37 · 184 阅读 · 0 评论 -
CountDownLatch详解
简介通过这个类可以控制线程的执行顺序,比如有三个线程A、B、C,我需要在A、B两个线程执行完某个步骤之后再执行线程C的某些步骤,则可以通过CountDownLatch这个类进行控制,实现原理也是通过AQS来实现的。大家可以看看CountDownLatch这个类的源码,在源码的注释中给了一个很好的例子,后面我也会给出我本地测试的一个例子。实现原理核心的内部类Sync继承了Abstra...原创 2019-10-08 00:02:51 · 211 阅读 · 0 评论 -
理解Semaphore的实现原理
简介相当于是一个计数信号量,用于控制共享资源的访问,比如实例化时可以用N表示访问共享资源的计数器。每访问一次,都会将访问的剩余次数进行减一。也是通过AQS来实现此功能的。实现原理(1)借助于AQS来实现,实例化时传入一个许可证的次数,将此值设置为state。public Semaphore(int permits) { sync = new NonfairSync(perm...原创 2019-10-08 20:50:12 · 632 阅读 · 0 评论 -
CyclicBarrier实现原理
引言在写一个知识点之前,总是想说点废话。进程、线程之类的是操作系统级别上的概念,在此概念基础上使我们能够充分压榨CPU的处理能力,实现了并发和并行。但是呢,一涉及多线程的问题,总是有点不可控的感觉,对于线程的调度,很大程度上受操作系统调度算法的控制,而操作系统也开发了一些核心的api,可以让我们在用户的应用层面控制线程。像CyclicBarrier就让我们在一定程度上,控制了多个线程的逻辑流,...原创 2019-10-08 23:31:48 · 294 阅读 · 0 评论 -
深入理解Java注解类型(@Annotation)
转载自:http://blog.youkuaiyun.com/javazejian/article/details/71860633Java注解是在JDK5时引入的新特性,鉴于目前大部分框架(如spring)都使用了注解简化代码并提高编码的效率,因此掌握并深入理解注解对于一个Java工程师是来说是很有必要的事。本篇我们将通过以下几个角度来分析注解的相关知识点理解Java注解实际上Java注解与普通修饰符(pu转载 2017-06-08 11:53:08 · 354 阅读 · 0 评论 -
算法-最短路径(动态规划法)
问题描述猛兽侠中精灵鼠在利剑飞船的追逐下逃到一个n*n的建筑群中,精灵鼠从(0,0)的位置进入建筑群,建筑群的出口位置为(n-1,n-1),建筑群的每个位置都有阻碍,每个位置上都会相当于给了精灵鼠一个固定值减速,因为精灵鼠正在逃命所以不能回头只能向前或者向下逃跑,现在问精灵鼠最少在减速多少的情况下逃出迷宫?输入描述第一行迷宫的大小: n >=2 & n <= 10000;...原创 2019-09-10 22:28:42 · 3178 阅读 · 0 评论 -
算法-最高得分(动态规划)
题目描述小明同学在参加一场考试,考试时间2个小时。试卷上一共有n道题目,小明要在规定时间内,完成一定数量的题目。 考试中不限制试题作答顺序,对于 i 第道题目,小明有三种不同的策略可以选择: (1)直接跳过这道题目,不花费时间,本题得0分。(2)只做一部分题目,花费pi分钟的时间,本题可以得到ai分。 (3)做完整个题目,花费qi分钟的时间,本题可以得到bi分。小明想知道,他最多能得到...原创 2019-09-04 00:23:34 · 2409 阅读 · 0 评论 -
java线程知识
线程核心:锁对于共享资源,在多线程的环境中,是会存在竞争情况的,由于竞争的存在,导致在使用共享资源的情况,会出现意想不到的情况。如果共享资源仅仅是可读的,不管多少线程来操作,也不会出现线程安全的情况。但如果在使用共享资源的时候,会改变共享资源的状态,那么基本会出现线程安全的问题。锁是什么呢?既然资源存在竞争,那么当一个线程在占用了资源后,想办法告知其他想使用其资源的线程当前资源正在占用中,让其...原创 2019-09-02 22:32:22 · 117 阅读 · 0 评论 -
算法-在规定的步骤内有多少种方式走出边界
问题描述有一只地鼠不小心跑进了一个m*n的矩形田地里,假设地鼠在这块田地的初始位置为(x,y),并且每次只能向相邻的上下左右四个方向移动一步,那么在最多移动K次的情况下,有多少条路径可以逃出这片田地(一旦出去田地的边界就不能再往回走)?输入描述:输入数据包括五个参数:m,n,x,y,K其中m和n的范围均为是[1,10],K的范围是[0,10]。0<=x<m,0<=y&l...原创 2019-08-13 23:28:31 · 335 阅读 · 0 评论 -
算法题-跳格子有多少种走法
问题描述:假设你正在玩跳格子(所有格子排成一个纵列)游戏。需要 跳完n 个格子你才能抵达终点。每次你可以跳 1 或 2 个格子。你有多少种不同的方法可以到达终点呢?注意:给定 n 是一个正整数。算法思路:这是一道很经典的问题,题不难,但是是理解“递推”和“递归”两种思想的很好的一道算法题。递归是自上到下递归,但求解还是先求子问题递推是先求小问题,次大问题可以通过子问题获得解答解法...原创 2019-08-08 23:18:30 · 6756 阅读 · 0 评论 -
Java RMI架构(远程方法调用)
RMI(即Remote Method Invoke 远程方法调用)。在Java中,只要一个类extends了java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定的服务。JavaDoc描述:Remote 接口用于标识其方法可以从非本地虚拟机上调用的接口。任何远程对象都必须直接或间接实现此接口。只有在“远程接口”(扩展 java.rmi.Remote 的接口)中指原创 2017-08-11 18:28:00 · 465 阅读 · 0 评论 -
BPM之工作流
目前公司在进行网站重构,需要将工作流系统整合到新开发的系统中,在项目的开始阶段,宏天的BPMX3和普元的BPS业务流程管理系统在评估计划中,因此我对这两个系统有了一个浅显的研究,在这里做一个小小的总结。首先,给出一些常用语的解释:SOA(面向服务的架构) 面向服务架构是一个组件,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。SOA是一种粗粒度、松耦合服务架构,原创 2017-07-26 14:17:41 · 16107 阅读 · 1 评论 -
郁闷的问题:No compiler is provided is this environment. Perhaps you are running in a JRE rather than JDK
截图如下: 出错的时候的使用场景: 我在eclipse时创建了一个maven项目,然后在dos界面直接运行 mvn clean install 或 mvn compile(注:其实运行两个命令,其中的一些步骤是需要编译项目的java文件的,找不到编译器,所以报错了)这些命令。结果:提示上面的错。字面原因解释:大概是当我们在编译一些java文件时,但是找不到对应的编译器。当我们在下载JDK时,其实同原创 2017-07-13 13:35:10 · 13459 阅读 · 1 评论 -
Java反射机制
一、 何为反射机制 简单来说,反射机制指的是程序在运行过程中能够获取自身的信息。反射机制在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个属性和方法(包括私有的,是不是好可怕,没有隐私了。。);这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。 二、 反射机制主要的功能 在运行时判断一个对象所属的类; 在运行原创 2017-06-02 20:16:07 · 385 阅读 · 0 评论 -
JAVA动态代理
JAVA动态代理 因为现在在在学java的一些框架技术,比如ssh,mybatis等,总是提到动态代理,而且用到的还蛮多的,因此将jdk动态代理好好研究一下。代理模式 代理模式是java中一种常见的设计模式,他的特征是代理类和委托类实现相同的接口。代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。java动态代理的出现,使我们不需要手动写代理类,只需要提供一原创 2017-05-27 16:49:13 · 352 阅读 · 0 评论 -
Java正则表达式入门
什么是正则表达式? 正则表达式(regular expressions)是一种描述字符串集的方法,它是以字符串集中各字符串的共有特征为依据的。正则表达式可以用于搜索、编辑或者是操作文本和数据。它超出了 Java 程序设计语言的标准语法,因此有必要去学习特定的语法来构建正则表达式。正则表达式的变化是复杂的,一旦你理解了它们是如何被构造的话,你就能解析或者构建任意的正则表达式了。原创 2017-06-02 15:04:12 · 301 阅读 · 0 评论 -
Java 类Scanner的学习
Scanner类相当于一个简单的文本扫描器,主要用来处理一些简单的文本,能本将文本类型的字段根据正则表达式解析为java中的基本数据类型和字符串类型。 官方英文解释: A simple text scanner which can parse primitive types and strings using regular expressions.原创 2017-06-01 15:09:59 · 389 阅读 · 0 评论 -
Java常见经典问答题
1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。2.JDK和JRE的区别是什么?原创 2017-06-05 12:50:37 · 7029 阅读 · 0 评论 -
算法-最少移动次数
问题描述农场有n只鸡鸭排为一个队伍,鸡用“C”表示,鸭用“D”表示。当鸡鸭挨着时会产生矛盾。需要对所排的队伍进行调整,使鸡鸭各在一边。每次调整只能让相邻的鸡和鸭交换位置,现在需要尽快完成队伍调整,你需要计算出最少需要调整多少次可以让上述情况最少。例如:CCDCC->CCCDC->CCCCD这样就能使之前的两处鸡鸭相邻变为一处鸡鸭相邻,需要调整队形两次。输入描述输入一个长度为N,且...原创 2019-08-19 22:53:55 · 2790 阅读 · 1 评论