- 博客(32)
- 收藏
- 关注
转载 多线程---彻底搞懂线程池
多线程1 线程池的优势2 线程池的使用3 线程池的工作原理4 线程池的参数4.1 任务队列(workQueue)4.2 线程工厂(threadFactory)4.3 拒绝策略(handler)5 功能线程池5.1 定长线程池(FixedThreadPool)5.2 定时线程池(ScheduledThreadPool )5.3 可缓存线程池(CachedThreadPool)5.4 单线程化线程池(SingleThreadExecutor)6 总结1 线程池的优势总体来说,线程池有如下的优势:(1)降低
2021-07-04 00:41:12
288
原创 数据结构优缺点及底层原理
数据结构分类线性表数组队列链表散列表(Hash表)栈非线性表树二叉树红黑树B-TreeB+Tree堆图线性表零个或多个数据元素的有限序列。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。连续的内存空间和相同类型的数据:这两个限制也让数组的很多操作变得非常低效,比如要想在数组中删除、插入一个数据,为了保证连续性,就需要做大量的数据搬移工作。但是数组的随机访问效率确
2021-06-17 11:39:29
1117
原创 Java 名词解释
名词解释1.内存泄漏(Memory Leak)2.内存溢出(Out Of Memory,简称OOM)锁乐观锁CAS悲观锁AQS1.内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。2.内存溢出(Out Of Memory,简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出,有时候会自动关闭软件
2021-06-15 14:51:49
840
原创 MyBatis(9)插件体系
插件体系概述插件机制是为了对MyBatis现有体系进行扩展 而提供的入口。底层通过动态代理实现。可供代理拦截的接口有四个: Executor:执行器 StatementHandler:JDBC处理器 ParameterHandler:参数处理器 ResultSetHandler:结果集处理器 这四个接口已经涵盖从发起接口调用到SQl声明、参数处理、结果集处理的全部流程。接口中任何一个方法都可以进行拦截改变方法原有属性和行为。不过这是一个非常危险的行为,稍不注意
2021-06-12 01:43:11
227
2
原创 MyBatis(8)Configuration配置体系
Configuration配置体系Configuration概述Configuration 是整个MyBatis的配置体系集中管理中心,前面所学Executor、StatementHandler、Cache、MappedStatement...等绝大部分组件都是由它直接或间接的创建和管理。此外影响这些组件行为的属性配置也是由它进行保存和维护。如cacheEnabled、lazyLoadingEnabled ... 等。所以说它MyBatis的大管家很形象。核心作用总结总结一下Configur
2021-06-12 00:53:14
289
原创 MyBatis(7)动态SQL全流程解析
动态SQL全流程解析动态SQL是MyBatis 强大功能之一,他免除了在JAVA代码中拼装SQL字符串麻烦,同时保留了我们对SQL的自主控制,更方便进行SQL性能优化改造。动态SQL中我们使用XML 脚本元素控制SQL的拼装,这都是日常开发中要用到元素,我们一起来回顾一下(如果你对动态使用已经非常熟悉了可直接跳过本节)。 if choose (when, otherwise) trim (where, set) foreach if<if tes
2021-06-11 18:35:52
1411
原创 MyBatis(6)映射体系二
懒加载&嵌套映射前言:基于动态代理实现懒加载,在使用过程中,如果会话关闭、跨线程、序列化等情况下,是否能够继续加载?懒加载懒加载是为改善,解析对象属性时大量的嵌套子查询的并发问题。设置懒加载后,只有在使用指定属性时才会加载,从而分散SQL请求。<resultMap id="blogMap" type="blog" autoMapping="true"> <id column="id" property="id"></id>...
2021-06-11 18:00:39
172
原创 MyBatis(5)映射体系一
结果集映射体系一前言本章你将学会MetaObject的使用与原理,以及嵌套子查询原理,包括子查询当中的循环依赖映射工具MetaObject所谓映射是指结果集中的列填充至JAVA Bean属性。这就必须用到反射,而Bean的属性 多种多样的有普通属性、对象、集合、Map都有可能。为了更加方便的操作Bean的属性,MyBatis提供了MeataObject 工具类,其简化了对象属性的操作。其具体功能如下: 查找属性:勿略大小写,支持驼峰、支持子属性 如:“blog.comment.us
2021-06-11 13:55:13
254
1
原创 MyBatis(4)Jdbc处理器StatementHandler解析
MyBatis Jdbc处理器StatementHandler解析StatementHandler概要MyBatis一个基于JDBC的Dao框架,但前面我们所学的会话、执行器半点没有提到jdbc,原因是MyBatis把所有跟JDBC相关的操作全部都放到了StatementHandler中。一个SQL请求会经过会话,然后是执行器,最由StatementHandler执行jdbc最终到达数据库。其关系如下图:这里要注意这三者之间比例是1:1:n。也就是说多个SQL操作对应一个会话,和唯一的执
2021-06-11 02:15:35
277
1
原创 MyBatis(3)二级缓存源码解析
MyBatis二级缓存源码解析文本主要目的为掌握二级缓存的使用场景、熟悉其执行结构、以及执行过程源码二级缓存概述二级缓存也称作是应用级缓存,与一级缓存不同的,是它的作用范围是整个应用,而且可以跨线程使用。所以二级缓存有更高的命中率,适合缓存一些修改较少的数据。在流程上是先访问二级缓存,在访问一级缓存。二缓存需求二级缓存是一个完整的缓存解决方案,那应该包含哪些功能呢?这里我们分为核心功能和非核心功能两类:存储【核心功能】即缓存数据库存储在哪里?常用的方案如下: 内存:
2021-06-11 02:09:17
235
原创 MyBatis(2)一级缓存源码解析
MyBatis一级缓存源码解析本文将探讨一级缓存命中场景以,一级缓存源码实现MyBatis缓存概述myBatis中存在两个缓存,一级缓存和二级缓存。 一级缓存:也叫做会话级缓存,生命周期仅存在于当前会话,不可以直接关关闭。但可以通过flushCache和localCacheScope对其做相应控制。 二级缓存:也叫应用级性缓存,缓存对象存在于整个应用周期,而且可以跨线程使用。 关于二级缓存将在后续章节,详细说明。文本先聚焦一级缓存。首先来看如何才能命中一级缓存。
2021-06-11 02:06:37
315
原创 MyBatis(1)深入理解Executor执行器
MyBatis深入理解Executor执行器本文的目的是理解MyBatis整体执行流程,并且理解Executor在整个流程当中的意义。源码阅读网内部资料,转载前请联系作者。JDBC执行过程回顾MyBatis是一个Dao层映射框架,底层还是用的JDBC来访问数据库,在学习MyBatis之前有必要先回顾一下JDBC的执行过程:具体代码我就不贴了,不懂的自行百度。这里重点说一下预编译器 Statement,通过该组件来发送对应的SQL与参数。它有三种类型:分别是简单Statemen
2021-06-11 01:53:10
742
2
原创 Mybatis原理之图解
Mybatis结构与原理JDBC执行过程Executor执行器体系缓存体系一级缓存二级缓存JDBC处理器StatementHandler结构StatementHandler流程参数处理结果集处理MetaObject流程ResultMap结果集映射动态SQL脚本组成结构脚本解析流程目录Mybatis结构与原理JDBC执行过程Executor执行器体系缓存体系一级缓存二级缓存JDBC处理器StatementHandl
2021-06-11 01:20:24
292
原创 Mysql详解及原理
mysql如何应用原理B-树 & B+树myisam & innodb联合索引innodb page (默认大小为16KB)buffer pool => free链表&flush链表&lru链表redo log & log bufferinnodb内存和磁盘结构事务底层原理优化
2021-06-11 00:54:40
561
原创 RabbitMQ
RabbitMQ优劣势优:应用解耦 异步提速 削峰填谷劣:系统可用性降低 系统复杂度提高组成部分Message,Publisher,Exchange,Binding,Queue,Connection,ChannelConsumer,Virtual Host,Broker交换机Direct类型Fanout类型 广播模式, 一对多 速度快 会丢消息Topic类型工作模式直联工作队列发布订阅路由主题过期时间,死信队列,延迟队列消息事务 cha
2021-06-11 00:48:49
173
原创 Redis详解
Redis特性优缺点应用场景及案例案例场景命令集数据类型事务持久化RDBAOF回收策略哈希槽分布式锁集群redis和memcache的比较特性读写性能优异持久化数据类型丰富数据自动过期发布订阅分布式单线程,多路复用方式提高处理效率优缺点1.性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。2.丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。3.
2021-06-09 23:14:30
376
原创 JVM原理详解
JVM知识脉络jvm的结构jvm内部执行运行流程各模块的生命周期JVM结构图各模块的内容程序计数器(Program Counter Register)Java虚拟机栈(Java Virtual Machine Stack)本地方法栈(Native Method Stack)Java 堆(Java Heap)方法区(Method Area)本地(native)方法双亲委派机制类加载器子系统(class loader subsystem)执行引擎(Executionengine子系统)解释器即时(Just-In
2021-06-08 03:03:29
2436
2
原创 Java 关于强引用,软引用,弱引用和虚引用的区别与使用场景
强引用我们使用的大部分的引用都是强引用,这是使用最普遍的引用。如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。Arraylist中的clear方法 public void clear() { modCount++; // clear to let GC do its work fo
2021-06-07 20:30:04
1407
转载 ThreadLocal使用与原理
ThreadLocal使用与原理知识脉络应用场景使用原理基本使用实现原理相关知识知识脉络1.内存泄漏问题2.Hash冲突处理3.弱引用 --> 4.InheritableThreadLocal应用场景在处理多线程并发安全的方法中,最常用的方法,就是使用锁,通过锁来控制多个不同线程对临界区的访问。但是,无论是什么样的锁,乐观锁或者悲观锁,都会在并发冲突的时候对性能产生一定的影响。那有没有一种方法,可以彻底避免竞争呢?答案是肯定的,这就是ThreadLocal。从字面意思上看,Th
2021-06-07 20:13:16
191
原创 java 名词解释
1.内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
2021-06-07 19:27:48
188
转载 深入学习MySQL事务:ACID特性的实现原理
深入学习MySQL事务:ACID特性的实现原理事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段。本文将首先介绍MySQL事务相关的基础概念,然后介绍事务的ACID特性,并分析其实现原理。一、基础概念事务(Transaction)是访问和更新数据库的程序执行单元;事务中可能包含一个或多个sql语句,这些语句要么都执行,要么都不执行。作为一个关系型数据库,MySQL支持事务,本文介绍基于MySQL5.6。首先回顾一下MySQL事务的基础知识。1. 逻辑架构和存
2021-06-02 12:03:01
272
转载 Maven之pom详解
POM全称是Project Object Model,即项目对象模型。pom.xml是maven的项目描述文件,它类似与antx的project.xml文件。pom.xml文件以xml的 形式描述项目的信息,包括项目名称、版本、项目id、项目的依赖关系、编译环境、持续集成、项目团队、贡献管理、生成报表等等。总之,它包含了所有的项目 信息[html] view plai
2017-03-13 03:13:03
316
转载 session清理缓存的理解和如何清空缓存中的数据
尊重版权:http://blog.sina.com.cn/s/blog_62a151be0100nf28.htmlSession执行一些sql语句把内存中的对象的状态同步到数据库,这个过程被称为session清理.在默认情况下,Session会在下面的时间点清理缓存。1 当应用程序调用net.sf.hibernate.Transacation的commit()方
2017-03-13 02:08:20
10279
转载 详解struts2中的ActionContext数据中心
web标准的存放数据的范围有:pagecontext域,request域,session域,application域(servlet开发 context)。struts 2自己又定义了一个容器来存放数据,即:actioncontext。actioncontext是个map集合,它持有了web标准的4个域,通过它可以直接获取这四个标准容器。不仅如此,它还引用了其它struts 2
2017-03-10 14:57:20
806
原创 运用linux脚本重新发布项目
#!/bin/bash/ps aux | grep sjb_tomcat | grep -v grep | cut -c10-15 | xargs kill -9echo "kill tomcat ..."cd /usr/local/tomcat/sjb_tomcat/webapps/echo "cd webapps ..."rm -fr sjbServe
2017-03-07 23:47:17
374
原创 https环境搭建之体验过程及原理与总结
************** https环境搭建1 购买SSL证书 (有试用版的 试用期12个月) a)购买: 景安科技 http://www.zzidc.com/SSL 点击购买基础级DV(免费) 2.证书的开通 需求: 域名 与 域名的验证邮箱购买之后进去会员中心点开我的订单里可以开通证书开通证书有三步 第一步绑定域名, 第二步域名验
2017-03-07 23:38:02
331
原创 mongodb导出集合
mongoexport -d jtomtoperp -c orderList -o order.txt 导出集合到当前文件夹命令。
2017-03-07 23:30:37
1703
原创 hadoop环境配置
1.增加用户与用户组 groupadd hadoop //添加一个组 useradd hadoop -g hadoop //添加用户2.设置用户密码 如果是超级用户,可以用下列形式指定任何用户的口令: # passwd sam New password:******* Re-enter new password:*****
2017-03-07 22:21:57
194
原创 SpringMVC 入门
首先要引入相关的包1、model[java] view plain copy package com.tan.model; public class User { private int id; private String name; private St...
2017-03-02 15:47:19
89
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人