- 博客(96)
- 收藏
- 关注
原创 JDK1.7中HashMap并发操作形成死循环过程分析
1.7中HashMap的扩容过程是这样的:取当前table的2倍作为新table的大小 根据算出的新table的大小new出一个新的Entry数组来,名为newTable 轮询原table的每一个位置,将每个位置上连接的Entry,算出在新table上的位置,并以链表形式连接(在插入新table的时候是头插法) 原table上的所有Entry全部轮询完毕之后,意味着原table上面的所有Entry已经移到了新的table上,HashMap中的table指向newTable实例假如现在hash
2020-12-02 10:53:57
407
原创 等待超时模式模拟实现一个简易数据库连接池
DBPool.javapublic class DBPool{ /**连接池容器*/ private LinkedList<Connection> pool = new LinkedList<>(); /**初始化连接池*/ public DBPool(int cap) { if (cap > 0) { for (int i = 0; i < cap; i ++) {
2020-11-25 16:35:48
241
原创 两个线程交替执行交叉打印两个字符串
比如String a = "1234";String b = "abcd";通过两个线程实现打印结果:12ab34cdpublic class Test { private ReentrantLock lock = new ReentrantLock(); private Condition conditionA = lock.newCondition();...
2020-04-17 21:29:58
1007
原创 联合索引使用是否生效例子
假设index(a,b,c)上图中where后是否用到了索引,如果用了,是否充分用到索引,用到了哪些列?为什么?命中了索引a 命中了索引a和b 索引充分利用,包含三列的联合索引都命中了 因为最左前缀原则,三个都没有命中索引 命中一个a 命中两个,a和b,也应该关注数据量,如果数据量少的话,范围索引b可能不会被命中 命中三个,但是也要看数据量,如果数据量太少的话,like范围...
2020-03-10 23:07:13
806
原创 MySQL的一些参数,以及参数查询方法
innodb_change_buffer_max_size:设置change buffer的大小,这个参数设置为50的时候,表示change buffer的大小最多只能占用buffer pool的50%。 innodb_stats_persistent:索引统计结果的存储方式,设置为on表示统计信息会持久化;设置为off表示只存储在内存中。 innodb_file_per_table :控制表...
2020-01-16 16:54:18
116
原创 本地新建项目首次上传git步骤
工具:idea mavenmaven命令行按步骤执行相应命令1. 先执行git init2. 再执行git add .3. 再执行git commit -m "init"4. 再执行git remote add origin 项目git地址5. 最后执行git push -u origin master至此结束...
2019-12-04 10:26:42
555
原创 静态include和动态include
静态include(写法:<%@include file="user.jsp"%>)会把目标页面的其他指令也包含进来,如果两个页面的编译指令冲突,那么页面就会出错。动态include(写法:<jsp:include>)...
2019-11-13 09:51:07
107
原创 Java线程以及常用线程池相关内容总结
目录Java线程总结Java常用线程池总结ExecutorService两种提交任务方式源码分析线程池中涉及到的几个接口和类的关系图Java线程总结Java有三种实现线程的方式:1. 继承Thread,然后重写run()方法Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实体。启动线程的唯一方法就是通过Thread类的start()方法。s...
2019-11-12 16:18:30
120
原创 Unsupported major.minor version 52.0报错问题解决方案
52.0 对应的就是java1.8这应该是编译时的版本是1.8,但是运行时的版本比1.8低(没试过如果比1.8高的话会不会报错,本人是因为运行环境是java 1.6)通过java -version 看到的版本也是1.6但是我装过java 1.8啊,而且cat /etc/profile 版本也是export JAVA_HOME=/usr/local/java/jdk1...
2019-10-17 15:42:11
1092
原创 springboot打jar包,使用jsp页面作为视图
首先必须要添加的依赖:<!--增加对JSP的支持--><dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope&...
2019-10-10 16:19:21
264
原创 springboot如果返回视图如果提示Request method 'POST' not supported
因为springboot默认只支持GET和HEAD两种请求方式可以在spring配置文件添加类似如下配置试试(locations可以根据需要配置):<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="urlMap"> ...
2019-10-10 15:24:13
429
原创 springboot注册自定义servlet以及初始化
springboot注册servlet有两种方法,网上很容易就能找到,这儿就不再赘述了,可以参考下面的博文,讲的挺清楚的:https://blog.csdn.net/bobozai86/article/details/78847229但是注册完有不少同学就纳闷了,为什么项目启动的时候自定义的Servlet死活不执行初始化方法呢,只有在第一次访问的时候才会初始化,其实只要在初始化的时候加上l...
2019-09-27 15:46:34
1380
转载 springboot启动报错:java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTempla
参考了这篇博文:https://www.cnblogs.com/dbaxyx/p/10663485.html报错信息:Caused by: java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required at org.springframew...
2019-09-26 19:06:21
2862
1
原创 springboot启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava
完整报错信息:2019-09-26 18:47:15.107 ERROR [main] o.apache.catalina.core.ContainerBase - A child container failed during startjava.util.concurrent.ExecutionException: org.apache.catalina.LifecycleExcept...
2019-09-26 18:59:33
3268
原创 JDK动态代理 AND CGLIB动态代理
目录1.JDK动态代理2.CGLIB动态代理1.JDK动态代理BookFacade.javapackage testProxy.jdkProxy;public interface BookFacade { void addBook();}BookFacadeImpl.javapackage testProxy.jdkProxy;public clas...
2019-09-05 18:03:01
97
原创 几种数据源的配置方式
目录1.c3p0配置方式2.dbcp配置方式3.DriverManagerDataSource配置方式4.HikariDataSource配置方式5.多数据源整合(编程式事务)1.c3p0配置方式lib:applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><bea...
2019-09-05 17:27:22
1160
原创 mybatis两种配置方式
1.通过SQLSession注入操作lib:dao:package dao;import java.util.List;import org.apache.ibatis.session.SqlSession;import org.springframework.beans.factory.annotation.Autowired;import org.springfr...
2019-09-05 16:57:34
1831
原创 mybatis打印sql配置
mybatis-config.xml配置文件添加如下内容:<configuration> <settings> <!-- 打印查询语句 --> <setting name="logImpl" value="STDOUT_LOGGING" /> </setting...
2019-09-04 19:06:35
409
原创 Calendar使用的一个小坑
java中Calendar对象在使用的时候要注意,该对象获取到的Date对象是包含毫秒值的,使用的时候要特别注意。在获取零界点的时间戳的时候尤其要注意,否则获取到的数据可能会和自己想象中的有差别。比如,要查询数据库某一张表中createTime大于“2018-9-4 00:00:00”的数据,如果通过以下方式获取时间:Calendar calendar = Calendar.getI...
2019-09-04 18:59:41
549
原创 springboot项目启动报错的一种解决办法
报错信息如下:2019-09-04 18:03:22.693 [restartedMain] ERROR o.s.boot.SpringApplication - Application run failedjava.lang.IllegalStateException: Error processing condition on org.springframework.boot.auto...
2019-09-04 18:13:41
7963
原创 shiro框架如何设置不过滤指定url
不过滤指定url意思就是遇到指定的url直接放行,不跳转到登录页面,比如通过调某一个方法检测服务是否正常就需用用到该配置。配置方式也比较简单,shiro.xml中添加相应的配置即可比如遇到path为“/e74050c07f7d315d3ffc73df398ff9c5”的请求直接放行,可以如下配置:<!-- Shiro Filter --><bean id="sh...
2019-09-04 18:00:31
15679
转载 MySQL实战45讲(学习笔记)
本系列是学习极客时间林大神(林晓斌)的《MySQL实战45讲》系列的学习笔记。因为自己目前还不是做DBA,所以有些地方记的的不是很细致,仅供自己和其他同学作为学习参考,有兴趣的可以去学习原文(个人认为很值得学习)。原文链接:https://time.geekbang.org/column/intro/13901 | 基础架构:一条SQL查询语句是如何执行的02 | 日志系统:一条S...
2019-08-30 10:37:28
1265
转载 03 | 事务隔离:为什么你改了我还看不见?
MySQL是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如MySQL原生的MyISAM引擎就不支持事务,这也是MyISAM被InnoDB取代的重要原因之一。提到事务,肯定会想到ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性),这儿主要讲“隔离性”。隔离级别包括:读未提交、读提交、可重复度、串行...
2019-08-30 10:33:56
240
转载 01 | 基础架构:一条SQL查询语句是如何执行的
目录概括连接器查询缓存分析器执行器概括MySQL基本架构示意图:大体来说,MySQL可以分为Server层和存储引擎层两部分。Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨引擎的功能都在这一层实现,比如存储过程、触发器、视图等。存储引擎层负责数据...
2019-08-30 10:33:16
426
转载 02 | 日志系统:一条SQL更新语句是如何执行的
目录概述重要的日志模块:redo log重要的日志模块:binlog两阶段提交比如这一条语句:update T set c=c+1 where ID=2; 假设c原来的值是1。概述上一节中查询语句的执行流程,更新语句也同样会走一遍。执行语句之前先要连接数据库,这是连接器的工作。将表T上所有缓存结果都清空(这也是一般不建议使用查询缓存的原因)。接下来...
2019-08-30 10:31:58
354
转载 04 | 深入浅出索引(上)
索引的作用:提高数据查询效率,就像书的目录一样。索引模型常见的索引模型:哈希表、有序数组、搜索树。哈希表:一种以键-值(key-value)存储的数据结构。哈希思路:把值放在数组里,用一个哈希函数把key换算成一个确定的位置,然后把value放在数组的这个位置哈希冲突的处理办法:链表哈希表适用场景:哈希表的好处是新增速度会很快,只需要往后追加;缺点是,因为不是有序的,...
2019-08-30 10:31:40
264
转载 05 | 深入浅出索引(下)
覆盖索引ID的值已经在k索引树上了,因此可以直接提供查询结果,不需要回表,也就是说,在这个查询里面,索引k已经“覆盖了”我们的查询需求,称为覆盖索引。覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。最左前缀原则B+树这种索引结构,可以利用索引的“最左前缀”来定位记录。建立联合索引的时候,如何安排索引内的字段顺序?第一原则是,如...
2019-08-30 10:31:25
277
转载 06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?
数据库锁设计的初衷是处理并发问题。当出现并发访问的时候,数据库需要合理地控制资源访问规则,而锁就是来实现这些访问规则的重要数据结构。根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。全局锁顾名思义,就是对整个数据库实例加锁。加锁命令Flush tables with read lock(FTWRL)。加上锁以后,数据更新语句、数据定义语句和更新类食物的提交语...
2019-08-30 10:31:08
211
转载 07 | 行锁功过:怎么减少行锁对性能的影响?
MySQL的行锁时在引擎层有各个引擎自己实现的,但是并不是所有的引擎都支持行锁,比如MyISAM引擎就不支持行锁。不支持行锁意味着只能使用表锁。InnoDB是支持行锁的,这也是MyISAM被InnoDB替代的重要原因之一。两阶段锁在InnoDB事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放,这就是两阶段锁协议。对我们的帮助就是,如果事务中...
2019-08-30 10:30:48
200
转载 08 | 事务到底是隔离的还是不隔离的?
问题:可重复度隔离级别下,当前事务不受其他事务的影响,好像与世无争。但是有行锁的时候,一个事务要更新一行,如果刚好有另外一个事务拥有这一行的行锁,它又不会这么超然,会被锁住,进入等待状态。问题是,既然进入了等待状态,那么等到这个事务自己获取到行锁要更新数据的时候,它读到的值又是什么呢?事务启动时机:begin/start transaction 该命令并不是一个事务的起点,...
2019-08-30 10:30:25
203
转载 09 | 普通索引和唯一索引,应该怎么选择?
在前面的基础篇文章中,介绍过索引的基本概念,相信你已经了解了唯一索引和普通索引的区别。今天我们就继续谈谈,在不同业务场景下,应该选择普通索引,还是唯一索引?假设你在维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果市民系统需要按照身份证号查询姓名,就会执行类似这样的SQL语句:select name from CUser wher...
2019-08-30 10:29:57
270
转载 10 | MySQL为什么有时候会选错索引?
可能会出现一种情况,一条本来可以执行的很快的语句,却由于MySQL选错了索引,而导致执行速度变的很慢。先建一个表:CREATE TABLE `t` ( `id` INT(11) NOT NULL, `a` INT(11) DEFAULT NULL, `b` INT(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY...
2019-08-30 10:29:06
296
转载 11 | 怎么给字符串字段加索引?
用邮箱登录假设用户表是这样设计的:create table SUser(ID bigint unsigned primary key,email varchar(64),...)engine=innodb;业务中肯定会有类似这样的语句:select f1, f2 from SUser where email='xxx';如果email这个字段上没有加索引...
2019-08-30 10:24:31
232
转载 12 | 为什么我的MySQL会“抖”一下?
有时候一条本应该执行很快的SQL语句不知道怎么回事执行的很慢,并且这样的场景很难复现,这样的问题不只是岁间,而且持续时间很短。看上去,好像就是数据库“抖”了一下。你的SQL语句为什么变“慢”了当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。这儿有个过程,就是把脏页变成干净页,也就是刷脏页。可...
2019-08-30 10:24:17
229
转载 13 | 为什么表数据删掉一半,表文件大小不变?
数据库占用空间太大,把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变?一个InnoDB表包含两部分,即:表结构定义和数据。在MySQL 8.0版本以前,表结构是存在.frm为后缀的文件里。而MySQL 8.0版本,则已经允许把表结构定义放在系统数据表中了。因为表结构定义占用的空间很小,所以我们今天主要讨论的是表数据。参数innodb_file_per_table该参数控制表数据...
2019-08-30 10:23:50
179
转载 14 | count(*)这么慢,我该怎么办?
count(*)的实现方式在不同的MySQL引擎中,count(*)有不同的实现方式。MyISAM引擎把一个表的总行数存在了磁盘上,因此执行count(*)的时候会直接返回这个数,效率很高; innoDB引擎就麻烦了,它执行count(*)的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。需要注意的是,这儿讨论的是没有过滤条件的count(*),如果加了where条件的话,M...
2019-08-30 10:23:30
177
转载 15 | 答疑文章(一):日志和索引相关问题
两阶段提交示意图:这个图不是一个update语句的执行流程吗,怎么还会有commit语句?混淆了两个"commit"的概念:他说的"commit语句",是指MySQL语法中,用于提交事务的命令。一般跟begin/start transaction配对使用。 而我们图中用到的这个"commit步骤",指的是事务提交过程中的一个小步骤,也是最后一步,当这个步骤执行完成后,这个事务就提...
2019-08-30 10:23:10
261
转载 16 | “order by”是怎么工作的?
示例语句:select city,name,age from t where city='杭州' order by name limit 1000;全字段排序MySQL会给每个线程分配一块内存用于排序,称为sort_buffer。city索引示意图:通常情况这个语句的执行流程如下所示:初始化sort_buffer,确定放入name,city,age这三个字段; 从索引...
2019-08-30 10:22:53
240
转载 17 | 如何正确地显示随机消息?
首页随机展示三个单词。数据表:create table `words` ( id int(11) not null auto_increment, word varchar(64) default null, primary key (`id`))engine=innodb;delimiter;;create procedure idata...
2019-08-30 10:22:36
192
转载 18 | 为什么这些SQL语句逻辑相同,性能却差异巨大?
对一些语句使用不当的话,就会不经意间导致整个数据库的压力变大。案例一:条件字段函数操作假设一个交易系统,包含交易流水号(tradeid)、交易员id(operator)、交易时间(t_modified)等字段,简化的表结构如下:mysql> CREATE TABLE `tradelog` ( `id` int(11) NOT NULL, `tradeid` varcha...
2019-08-30 10:22:21
169
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人