
java
文章平均质量分 90
_Jimmy_
这个作者很懒,什么都没留下…
展开
-
一文细说Mybatis八大核心源码
MyBatis 是一个优秀的持久层框架,它内部封装了 JDBC,使得开发者只需要关注 SQL 本身,而不需要花费过多精力去处理如注册驱动、创建连接、创建 statement、手动设置参数、结果集检索等 JDBC 繁杂的过程代码。MyBatis 的核心源码涉及多个关键组件,其中最关键的有8大组件,搞明白,对 MyBatis 的实现原理绝对是通透,以下是 V 哥在上课的时候整理的笔记,分享给大家。上面的代码示例是一个简化的版本,用于解释 SqlSessionFactory 和其实现类的基本概念和工作原理。转载 2024-12-15 19:23:03 · 55 阅读 · 0 评论 -
CMS回收器、G1回收器、ZGC回收器
截止 JDK 1.8,一共有7款不同的垃圾收集器。每一款的垃圾收集器都有不同的特点,在具体使用的时候,需要根据具体的情况选用不同的垃圾收集器。没有最好的收集器,更没有万能的收集调优永远是针对特定场景、特定需求,不存在一劳永逸的收集器。转载 2024-01-21 16:35:43 · 138 阅读 · 0 评论 -
JVM性能调优
1、JVM调优目标:使用较小的内存占用来获得较高的吞吐量或者较低的延迟。 程序在上线前的测试或运行中有时会出现一些大大小小的JVM问题,比如cpu load过高、请求延迟、tps降低等,甚至出现内存泄漏(每次垃圾收集使用的时间越来越长,垃圾收集频率越来越高,每次垃圾收集清理掉的垃圾数据越来越少)、内存溢出导致系统崩溃,因此需要对JVM进行调优,使得程序在正常运行的前提下,获得更高的用户体验和运行效率。 这里有几...转载 2021-06-07 09:33:30 · 167 阅读 · 0 评论 -
深入理解java虚拟机
文章目录 走近JavaJDK、JRE与JVM之间的关系:内存溢出的问题及解决jvm可视化监控工具Java的发展java技术体系Java虚拟机Sun Classic VMExact VMHotSpot VMKVMJRockitJ9DavikMicrosoft JVMAzul VM Liquid VMTaobao VM Java虚拟机的内存管理程序计数器虚拟机栈本地方法栈Java堆方法区运行时常量池对象的创建如何在堆中给对象分配内存线程安全性问题 对象的结构对象的访问定位 垃圾回...转载 2021-05-29 23:43:48 · 2078 阅读 · 1 评论 -
java 类加载执行的过程
JVM的定义 VM(虚拟机)是用软件实现的物理机,Java的一个重要的设计理念就是编写一次,到处运行,而运行的载体,就是VM。编译器会将Java文件编译成 .class 文件,JVM会加载并执行 .class 文件。下面的图展示了JVM的整体架构。 JVM 架构图 JVM在是如何工作的 如上图所示,JVM由三个子系统构成。 类加载系统 (Class Loader Subsystem)执行时数据区域(R...转载 2021-03-14 20:44:48 · 324 阅读 · 0 评论 -
epoll和select的区别
select原理概述调用select时,会发生以下事情:1.从用户空间拷贝fd_set到内核空间;2.注册回调函数__pollwait;3.遍历所有fd,对全部指定设备做一次poll(这里的poll是一个文件操作,它有两个参数,一个是文件fd本身,一个是当设备尚未就绪时调用的回调函数__pollwait,这个函数把设备自己特有的等待队列传给内核,让内核把当前的进程挂载到其中);4.当设备就绪时,设备就会唤醒在自己特有等待队列中的【所有】节点,于是当前进程就获取到了完成的信号。poll文件操作返回.原创 2021-03-10 22:23:54 · 370 阅读 · 0 评论 -
ReentrantLock的lock-unlock流程详解
最近一段时间在研究jdk里的concurrent包,分为了线程管理,锁操作以及原子操作三个部分。线程管理平时用得还算多,但是锁操作和原子操作基本就没用过,只是以前在大学的时候跑了几个例子玩玩。当看到ReentrantLock的时候,发现用法倒是和synchronized有点类似也很简单,但是内部原理比较复杂。网上查了关于ReentrantLock的相关内容,没发现有谁把它分析得很透彻,只是有几篇讲了...转载 2021-03-10 22:00:10 · 400 阅读 · 0 评论 -
分布式锁简单入门以及三种实现方式介绍
很多小伙伴在学习Java的时候,总是感觉Java多线程在实际的业务中很少使用,以至于不会花太多的时间去学习,技术债不断累积!等到了一定程度的时候对于与Java多线程相关的东西就很难理解,今天需要探讨的东西也是一样的和Java多线程相关的!做好准备,马上开车! 学过Java多线程的应...转载 2021-02-28 15:34:15 · 124 阅读 · 0 评论 -
学会了这些技术,你离BAT大厂不远了
基础篇Java毕向东_Java基础视频教程25天基础版菜鸟教程Java SE 社区JDK 8 中文手册Java入门第一季 慕课网Java入门第二季 慕课网Java入门第三季 慕课网马士兵 Java 基础教程高淇 Java 300 集教程视频小马哥一入Java深似海Java核心技术36讲 极客时间尚硅谷 NIO 视频尚硅谷 Java8新特性视频教程Java核心技...转载 2019-11-04 23:08:58 · 278 阅读 · 0 评论 -
Java零拷贝
前言从字面意思理解就是数据不需要来回的拷贝,大大提升了系统的性能;这个词我们也经常在java nio,netty,kafka,RocketMQ等框架中听到,经常作为其提升性能的一大亮点;下面从I/O的几个概念开始,进而在分析零拷贝。I/O概念1、缓冲区缓冲区是所有I/O的基础,I/O讲的无非就是把数据移进或移出缓冲区;进程执行I/O操作,就是向操作系统...原创 2019-10-28 23:00:26 · 214 阅读 · 0 评论 -
HashSet的实现原理
HashSet实际上是一个HashMap实例,都是一个存放链表的数组。它不保证存储元素的迭代顺序;此类允许使用null元素。HashSet中不允许有重复元素,这是因为HashSet是基于HashMap实现的,HashSet中的元素都存放在HashMap的key上面,而value中的值都是统一的一个固定对象private static final Object PRESENT = new Objec...原创 2019-10-13 10:34:51 · 251 阅读 · 0 评论 -
HashMap原理深入理解
hashing(散列法或哈希法)的概念散列法(Hashing)是一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法。由于通过更短的哈希值比用原始值进行数据库搜索更快,这种方法一般用来在数据库中建立索引并进行搜索,同时还用在各种解密算法中。对比:Hashtable、HashMap、TreeMapHashtable 是早期Java类库提供...转载 2019-10-12 23:56:48 · 180 阅读 · 0 评论 -
JVM的基本结构详解
1 java虚拟机的基本结构如图:1)类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中可能还会存放运行时常量池信息,包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)。2)java堆在虚拟机启动的时候建立,它是java程序最主要的内存工作区域。几乎所有的java对象实例都存...原创 2019-09-22 14:43:50 · 332 阅读 · 0 评论 -
深入理解JVM-内存模型(jmm)和GC
深入理解JVM-内存模型(jmm)和GC1 .CPU和内存的交互了解jvm内存模型前,了解下cpu和计算机内存的交互情况。【因为Java虚拟机内存模型定义的访问操作与计算机十分相似】有篇很棒的文章,从cpu讲到内存模型:什么是java内存模型在计算机中,cpu和内存的交互最为频繁,相比内存,磁盘读写太慢,内存相当于高速的缓冲区。但是随着cpu的发展,内存的读写速度也远远赶不上cpu。因此...原创 2019-09-22 17:44:30 · 687 阅读 · 0 评论 -
jvm内存管理机制
内存管理机制:https://www.cnblogs.com/junwangz...原创 2019-09-22 18:06:13 · 170 阅读 · 0 评论 -
全面理解Java内存模型(JMM)及volatile关键字
关联文章:深入理解Java类型信息(Class对象)与反射机制深入理解Java枚举类型(enum)深入理解Java注解类型(@Annotation)深入理解Java类加载器(ClassLoader)深入理解Java并发之synchronized实现原理Java并发编程-无锁CAS与Unsafe类及其并发包Atomic深入理解Java内存模型(JMM)及vola...转载 2019-09-22 23:18:39 · 174 阅读 · 0 评论 -
Java反射用来做什么
1、概念在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法Java反射机制主要提供了以下功能: * 1.在运行时判断任意一个对象所属的类。 * 2.在运行时构造任意一个类的对象。 * 3.在运行时判断任意一个类所具有的成员变量和方法。 * 4.在运行时调用任意一个对象的方法。2、Java Reflecti...原创 2019-09-22 23:56:04 · 969 阅读 · 0 评论 -
初识JVM及jvm运行时数据区和jvm内存模型的区别
&nbs...转载 2019-09-29 23:22:42 · 213 阅读 · 0 评论 -
栈与堆栈的区别
任何软件在运行时都要在内存中开辟空间,Java虚拟机运行时也是要开辟空间的。JVM运行时在内存中开辟一片内存区域,启动时在自己的内存区域中进行更细致的划分,因为虚拟机中每一片内存处理的方式都不同,所以要单独进行管理。JVM内存的划分有五片:1.寄存器;2.本地方法区;3.方法区;4....原创 2019-10-06 09:47:56 · 722 阅读 · 0 评论 -
ArrayList与Vector比较
这张图里的内容对我们学习Java来说,非常的重要,白色的部分是需要去了解的,黄色部分是我们要去重点了解的,不但要知道怎么去用,至少还需要读一次源码。绿色部分内容已经很少用了,但在面试题中有可能会问到,我们来看一个经常出现的面试题:Arraylist与Vector的区别是什么?首先我们给出标准答案:1、Vector是线程安全的,ArrayList不是线程安全的。2、Ar...转载 2019-10-07 20:06:39 · 159 阅读 · 0 评论 -
String为什么是final的
首先需要了解Java中 final的定义 Java的关键字final的含义存在着细微的区别,但是通常它是指"这是无法改变的"。不想做出改变可能出于设计、效率和安全。 final 修饰的类是不被能继承的,所以 final 修饰的类是不能被篡改的。 jdk...原创 2019-10-07 20:46:50 · 270 阅读 · 0 评论 -
REST风格简介
一、什么是REST REST是一种软件架构风格,或者说是一种规范,其强调HTTP应当以资源为中心,并且规范了URI的风格;规范了HTTP请求动作(GET/PUT/POST/DELETE/HEAD/OPTIONS)的使用,具有对应的语义。核心概念包括:资源(Resource): 在REST中,资源可以简单的理解为URI,表示一个网络实体。比如,/u...原创 2019-10-07 23:06:09 · 1597 阅读 · 0 评论 -
深入理解ConcurrentHashMap原理分析以及线程安全性问题
在之前的文章提到ConcurrentHashMap是一个线程安全的,那么我么看一下ConcurrentHashMap如何进行操作的。ConcurrentHashMap与HashTable区别?HashTableput()源代码从代码可以看出来在所有put 的操作的时候 都需要用 synchronized 关键字进行同步。并且key 不能为空。这样相当于每次进行put 的...转载 2019-03-26 17:19:13 · 179 阅读 · 0 评论 -
Java面试题---004
开源框架解析篇Spring SpringMVC MyBatis 微服务架构篇Dubbo SpringBoot Spring ...原创 2019-09-21 23:04:12 · 185 阅读 · 0 评论 -
Java面试题---003
一、数据结构与算法基础说一下几种常见的排序算法和分别的复杂度。 用Java写一个冒泡排序算法 描述一下链式存储结构。 如何遍历一棵二叉树? 倒排一个LinkedList。 用Java写一个递归遍历目录下面的所有文件。二、Java基础接口与抽象类的区别? Java中的异常有哪几类?分别怎么使用? 常用的集合类...原创 2019-09-21 22:55:46 · 135 阅读 · 0 评论 -
Java进阶之策略模式和模板方法模式
前言在上一篇中我们学习了行为型模式的访问者模式(Visitor Pattern)和中介者模式(Mediator Pattern)。本篇则来学习下行为型模式的两个模式,策略模式(Strategy Pattern)和模板模式(Template Pattern)。策略模式简介策略模式(Strategy Pattern)属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独...原创 2019-03-27 15:57:19 · 378 阅读 · 0 评论 -
CGLIB原理及实现机制
什么是CGLIBCGLIB(Code Generator Library)是一个强大的、高性能的代码生成库。其被广泛应用于AOP框架(Spring、dynaop)中,用以提供方法拦截操作。Hibernate作为一个比较受欢迎的ORM框架,同样使用CGLIB来代理单端(多对一和一对一)关联(延迟提取集合使用的另一种机制)。为什么使用CGLIBCGLI...转载 2019-03-27 14:10:06 · 931 阅读 · 0 评论 -
java7和java8HashMap的区别
参考文章:(1)美团面试题:Hashmap的结构,1.7和1.8有哪些区别,史上最深入的分析HashMap, ConcurrentHashMap 原理及源码,一次性讲清楚!JDK1.7的时候使用的是数组+ 单链表的数据结构。JDK1.8及之后时,使用的是数组+链表+红黑树的数据结构。注:当链表的深...转载 2019-03-27 11:07:03 · 437 阅读 · 0 评论 -
map判断key不区分大小写
有时候我们会需要一个不区分KEY大小写的MAP,当然仅仅是Map<String, Object>这种类型的Map今天介绍一个apache.commons包里的类,org.apache.commons.collections.map.CaseInsensitiveMap例子: public static void main(String[] args) { Map<Stri...转载 2019-03-27 10:52:26 · 3253 阅读 · 0 评论 -
java多线程系列(四)---ReentrantLock的使用
Lock的使用前言:本系列将从零开始讲解java多线程相关的技术,内容参考于《java多线程核心技术》与《java并发编程实战》等相关资料,希望站在巨人的肩膀上,再通过我的理解能让知识更加简单易懂。目录认识cpu、核心与线程java多线程系列(一)之java多线程技能java多线程系列(二)之对象变量的并发访问java多线程系列(三)之等待通知机制java多线程系列(四)之Re...原创 2019-03-26 23:14:12 · 130 阅读 · 0 评论 -
threadlocal原理及常用应用场景
想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码分析了其实现原理和使用需要注意的地方,最后给出了两个应用场景。一.对ThreadLocal的理解&amp;nbsp; &amp;nbsp; &amp;nbsp; ...转载 2019-03-13 10:13:06 · 1369 阅读 · 1 评论 -
常用正则表达式20例
正则表达式——古老而又强大的文本处理工具。仅用一段简短的表达式语句,就能快速地实现一个复杂的业务逻辑。掌握正则表达式,让你的开发效率有一个质的飞跃。正则表达式经常被用于字段或任意字符串的校验,比如下面这段校验基本日期格式的JavaScript代码:varreg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$/;varr = fie...原创 2018-12-27 10:37:04 · 222 阅读 · 0 评论 -
深入理解Java线程池:ThreadPoolExecutor
线程池介绍在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理。如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题:如果并发的请求数量非常多,但每个线程执行的时间很短,这样就会频繁的创建和销毁线程,如此一来会大大降低系统的效率。可能出现服务器在为每个请求创建新线程和销毁线程上花费的时间和消耗的系统资源要比处理实际的用户请求的时间和资源更多。那么有...原创 2019-03-20 17:31:36 · 215 阅读 · 0 评论 -
JVM内存配置详解
前段时间在一个项目的性能测试中又发生了一次OOM(Out of swap sapce),情形和以前网店版的那次差不多,比上次更奇怪的是,此次搞了几天之后啥都没调整系统就自动好了,死活没法再重现之前的OOM了!问题虽然蹊 跷,但也趁此机会再次对JVM堆模型、GC垃圾算法等进行了一次系统梳理; 配置文件 找到jvm的配置文件路径修改配置 路径:%JAVA_HOME%/jre/lib/amd64/...原创 2019-03-13 22:13:50 · 1333 阅读 · 0 评论 -
HashMap之Hash碰撞冲突解决方案及未来改进
说明:参考网上的两篇文章做了简单的总结,以备后查(http://blogread.cn/it/article/7191?f=wb ,http://it.deepinmind.com/%E6%80%A7%E8%83%BD/2014/04/24/hashmap-performance-in-java-8.html) 1.Hash...转载 2019-03-27 16:59:34 · 342 阅读 · 0 评论 -
synchronized与Lock的区别与使用
1、线程与进程:在开始之前先把进程与线程进行区分一下,一个程序最少需要一个进程,而一个进程最少需要一个线程。关系是线程–>进程–>程序的大致组成结构。所以线程是程序执行流的最小单位,而进程是系统进行资源分配和调度的一个独立单位。以下我们所有讨论的都是建立在线程基础之上。2、Thread的几个重要方法:我们先了解一下Thread的几个重要方法。a、start()方法,调用该方...原创 2019-03-28 09:39:49 · 162 阅读 · 0 评论 -
#{}和${}
#{}:表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。${}:表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中...转载 2019-03-28 09:43:15 · 3519 阅读 · 0 评论 -
Java面试题---002
J2SE基础1. 九种基本数据类型的大小,以及他们的封装类。2. Switch能否用string做参数?3. equals与==的区别。4. Object有哪些公用方法?5. Java的四种引用,强弱软虚,用到的场景。 强:通常情况下都是,不会被回收 弱:内存紧张时会回收,可以用于缓存&nb...原创 2019-09-21 22:47:20 · 145 阅读 · 0 评论 -
词法分析(Lexer)与四则运算java实现[附源码]
动机项目研发过程中经常会需要将业务逻辑外置,需要将业务逻辑和代码分离。一般面对这样的需求有以下几种解决办法:引入一个规则引擎,比如Drools。利用java的javax.script.ScriptEngineManager调用javascript脚本。利用antlr这样的开源项目定义自己的业务领域语言。 笔者在开发过程中经常需要对字符串进行分析,比如:从一个字符串中取出第一个符合标识符...转载 2019-09-20 08:18:27 · 526 阅读 · 0 评论 -
同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别
简述同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别 POSIX同步IO、异步IO、阻塞IO、非阻塞IO,这几个词常见于各种各样的与网络相关的文章之中,往往不同上下文中它们的意思是不一样的,以致于我在很长一段时间对此感到困惑,所以想写一篇文章整理一下。POSIX(可移植操作系统接口)把同步IO操作定义为导致进程阻塞直到IO完成的操作,反之则是异步...原创 2019-09-11 07:49:02 · 214 阅读 · 0 评论