自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 资源 (1)
  • 收藏
  • 关注

原创 MySQL优化

MySQL优化总结:1.查询缓存:相同的查询被执行了多次的时候,查询结果会被放到一个HASH映射缓存中,后续的相同(完全一样,包括空格大小写)的查询就不用操作表而直接访问缓存结果。查询缓存是第一步,在sql语法解析之前,因此可以大大升级性能。查询缓存默认是开启的。如下两种情况会导致不走查询缓存:a. select语句中使用SQL_NO_CACHE强制不走缓存,如:select SQL_NO_CACHE * from table_name where xxxx = yyyyb. 查询中有不确定

2020-06-15 22:18:39 572

原创 MySQL的并发控制MVCC

看下如下2个demo,关闭了自动事务,select和update语句会自动给users表加上S锁(共享锁)和X锁(排它锁)。S锁和X锁是互斥的,按理说先执行的事务未commit或者rollback之前,另一个事务是无法对users表加互斥锁进行操作的,但是这里两个demo却可以正常执行。demo1:transaction1: set session autocommit=off; update users set lastUpdate=now() where id =1;//加x

2020-06-14 15:52:30 307

原创 MySQL的事务和锁学习

一 数据库事务概念1.数据库事务数据库操作的最小单元,是一组不可分割的逻辑操作单元。要么一起成功持久化,要么失败回滚。2.事务的ACID特性原子性(Atomic)最小单元,不可分割了。一致性(Consistency)事务操作的数据及状态是一致的,写入的结果必须要符合预期规则,与会因为系统意外等原因导致状态不一致。隔离性(Isolation)不同事务操作数据之间不可见。持久性(Durability)事务一旦提交,数据更改就会永久保存。3 事务并发带来的问题脏读事务A读到了事务B未提

2020-06-13 22:56:22 227

原创 MySQL执行计划学习

1.explain 的作用工作中需要要写出好的sql或者想要提升sql的查询性能,我们通常的做法是加索引。那么加了索引后,我们如何知道加的索引生效了呢?真正执行每条sql时走的是哪个索引呢?(表字段建了多个索引,单sql执行时只会走一个索引) 索引效率如何呢?这就需要我们查询sql的执行计划,通过执行执行分析性能。不同数据生产厂商提供了不同的执行执行查询语句,如mysql,postgresql的explain ,oracle的explain for。这里学习下mysql的执行计划。2.explain查询

2020-06-13 16:32:58 355

原创 MySQL存储引擎

为了提高数据库查询性能,我们会给表字段加索引,索引又是又是由存储引擎实现的,所以学习下MySQL中的常用的存储引擎是很有必要的。MySQL中常用的存储引擎由MyISAM和InnoDB两种存储引擎。1.MyISAM存储引擎1.1 MySQL5.5之前默认的存储引擎。具有一下特点:a.b.c.1.2 MySQL中B+Tree索引的体现形式如下图,索引和数据行数据分开存储在一个.MYI和一个.MYD的文中。无论是主键上建立的索引,还是主键外的辅助索引,索引过程均为下图:在.MYI文件中根据索引找到地

2020-06-09 15:20:48 120

原创 MySQL索引学习

1.索引是什么?**索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构。**索引是由存储引擎实现的,而MySQL的存储引擎是表级的,同一个数据库的不同表可以使用不同的引擎。索引并非越多越好,正确的创建合适的索引是提升数据库查询性能的关键。索引是表索引字段和记录行的物理地址构成。索引和表是分开存储的。索引不宜过多(一般一张表最好不要超过5个索引),一张两千万数据的普通表,几个索引的体积就可以1GB.2.为什么要使用索引?1.索引是极大的减少存储引擎需要扫描的数据量。2.可以把随机IO变

2020-06-08 23:19:18 212

原创 Mybatis源码分析上

1. Mybatis是什么?官方给的定义:MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。mybatis作为一款java开发人员最常用的orm框架,重要性不言而喻。除了会使用mybatis进行基本的CRUD

2020-06-02 21:37:35 130

原创 HashMap学习

部分内容参考自:https://blog.csdn.net/weixin_35586546/article/details/811537931. HashMap结构:HashMap 数据结构为 数组+链表,其中:链表的节点存储的是一个 Entry 对象,每个Entry 对象存储四个属性(hash,key,value,next)1.整体是一个数组;2.数组每个位置是一个链表;3.链表每个节点中的Value即我们存储的Object;2.HashMap类:HashMap容器继承自AbstractM

2020-05-19 23:09:17 166

原创 二叉树基本概念学习

二叉树:二叉树是每个结点最多有两个子树的树结构。它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。二叉树分类:1、满二叉树定义:高度为h,并且由2h-1个结点组成的二叉树,称为满二叉树。(叶子节点高度一致)2.完全二叉树定义:一棵二叉树中,只有最下面两层结点的度可以小于2,并且最下层的叶结点集中在靠左的若干位置上,这样的二叉树称为完全二叉树。特点:叶子结点只能出现在最下层和次下层,且最下层的叶子结点集中在树的左部。显然,一棵满二叉树必定是一棵完全二叉树,而

2020-05-13 21:03:39 493

原创 多线程之AQS学习

多线程并发访问共享资源时,为了保证数据的安全性,我们采用加锁的手段保证多线程访问共享资源的安全(这里不讨论无锁手段)。锁可以大致分为两种----Synchronized锁和基于Lock,AQS的实现锁。AQS是一个抽象队列同步器(Abstract Queued Synchronizer),用来控制多线程对共享资源的同步操作。常见的锁如:ReentrantLock, ReentrantReadWri...

2020-05-12 17:23:21 238

原创 java8时间类API学习

java8引入了全新的时间类API,相比与之前的Date类操作上简化了许多,学习记录下。package com.example.java8.date;import org.junit.Test;import java.time.*;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUni...

2020-05-06 22:34:34 190

原创 利用CAS机制写一个简单的tryLock锁

小试牛刀学习了Atomic类的CAS机制后,小试牛刀来写一个简单的tryLock锁,巩固下学习内容。代码如下:package com.example.multithread.atomicmethod;import java.util.concurrent.atomic.AtomicInteger;import java.util.stream.IntStream;public cla...

2020-05-05 13:46:49 224

原创 原子类学习

看一个volatile的例子,代码如下,三个线程对同一个变量做累加。package com.example.multithread.atomicmethod;import java.util.concurrent.atomic.AtomicInteger;import java.util.stream.IntStream;public class AtomicTest { p...

2020-05-04 22:19:57 149

原创 观察者模式

观察者模式:观察者订阅事件源,当事件源状态发生改变时,自动通知订阅的观察者,并触发观察者预定动作。事件源:package com.example.multithread.pattern;import java.util.ArrayList;import java.util.List;/** * 事件源 */public class Subject { int sta...

2020-05-03 21:05:14 113

原创 happens-before 关系

happens-before定义:如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须存在happens-before关系。这里提到的两个操作既可以是在一个线程之内,也可以是在不同线程之间。happens-before规则如下:1.程序顺序规则:一个线程中的每个操作,happens-before于该线程中的任意后续操作。2.监视器锁规则:对一个锁的解锁,happens-bef...

2020-05-03 18:49:03 243

原创 多线程之volatile

代码一:如下代码开启2个线程,一个只读,一个只写。可以看到写线程虽然改变了共享变量,但是只读线程似乎根本不care变化,输出的变量一直是0。package com.example.multithread.volatiletest;import java.util.stream.IntStream;public class VolatileReadOnly {// priva...

2020-05-03 16:36:26 171

原创 创建线程安全的单例对象

方法一:饿汉式:package com.example.multithread.singleton;import java.util.stream.IntStream;/** * 饿汉式:1.优点:类加载时就自动创建对象,禁止用户创建对象,天然线程安全, * 2.缺点:类加载时jvm会创建静态对象实例,不管后续是否使用到该实例,造成内存浪费。 */public cl...

2020-05-01 17:30:08 308

原创 spring学习之源码跟踪BeanFactory的创建过程

一、搭建一个简单的spring工程代码如下:pojo类public class Fruit { private String name; private String sugar; private String color; //省去getter、setter、构造函数spring入口配置文件类applicationContext.xml<?xm...

2019-12-21 23:03:02 153

原创 spring学习之beanFactory工厂初步认识

一、beanFactoryspring是面向bean编程,即BOP(Bean Oriented Programming),所有的操作都是围绕着bean进行的。spring的另外一个核心就是IOC,即spring帮助我们创建bean。spring创建bean是通过beanFactory创建的。所以我们有必要了解beanFactory顶层接口类关系。如下图是使用IDEA生产的beanFactory顶...

2019-12-15 20:22:40 260

原创 spring学习一之IDEA源码导入

本次学习导入IDEA的spring源码为spring5.0.x,步骤如下:一、gradle安装。spring源码构建工具使用的是gradle,这个一个类似于maven一样的代码工程构建工具。spring源码工程构建需要使用到gradle,过程就是下载安装、配置环境变量,和安装jdk类似,具体过程略,百度很多。二、源码构建2.1下载源码去spring官网spring.io下载,路径如下:...

2019-12-15 13:25:37 207

原创 装饰器模式学习

一、装饰器模式:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。通常情况下,扩展一个类的功能会使用继承方式来实现。但继承具有静态特征,耦合度高,并且随着扩展功能的增多,子类会很膨胀。如果使用组合关系来创建一个包装对象(即装饰对象)来包裹真实对象,并在保持真实对象的类结构不变的前提下,为其提供额外的功能,这就是装饰模式的目标。二、实践2.1 定义一个接口...

2019-12-10 21:59:15 87

原创 模板方法学习

一、模板方法:定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。二、实践饭店里面,客人点餐后,后厨烧菜。后厨做菜的整个过程可以认为都是在重复烧菜前准备、烧菜、烧菜后处理这三个步骤,因此我们可以顶一个烧菜的模板,具体的细节延迟到每一道菜做的过程中去实现。2.1 定义烧菜的模板//定义模板,烧菜步骤:烧菜前准备工作、烧菜、...

2019-12-10 20:41:01 149

原创 委派模式学习

一、委派模式:主要角色有三种: 抽象任务角色, 委派者角色, 具体任务角色.实现层面上, 定义一个抽象接口, 它有若干实现类, 他们真正执行业务方法, 这些子类是具体任务角色; 定义委派者角色也实现该接口, 但它负责在各个具体角色实例之间做出决策, 由它判断并调用具体实现的方法.委派模式对外隐藏了具体实现, 仅将委派者角色暴露给外部, 如Spring的DispatcherServlet.二...

2019-12-09 22:10:29 156

原创 策略模式学习

一、策略模式(Strategy):定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。二、使用场景:1、一个系统有许多类,而区分它们的只是他们直接的行为。2、在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。三、实践3.1 定义策略接口public interface CalculateStrategy { int doCalculate(i...

2019-12-09 21:28:27 81

原创 mybatis学习五之源码分析学习1

一、准备工作,环境搭建1.1 mybatis 配置<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-confi...

2019-11-23 23:01:47 81

原创 mybatis学习四之一级缓存、二级缓存

一级、二级缓存介绍:1、一级缓存1.1 mybatis的一级缓存基于SqlSession级别,默认是开启且无法关闭(但是我们可以手动设置不使用缓存,useCahe,flushCahe参数)。在同一个sqlSession中执行多次一样的查询,可以发现第后续多次查询并没有去查询数据库,而是直接命中了第一次的缓存。一级缓存可以减少数据库压力,但可能会查询到脏数据(第一次查询后数据被修改了)。但是...

2019-11-23 14:36:03 101

原创 mybatis学习三之拦截器学习

代码地址:https://github.com/Gronckler/WorkProject.git这里引用一个项目中的实际案例:用户敏感数据加密后入库,查询出来后自动解密,即数据在库中是以密文方式存在。项目工程仍然沿用前期工程(手动管理数据源方式)。思路:加密入库:自定义注解标注实体类有敏感信息的字段,通过拦截器反射获取到敏感字段后进行加密处理并添加一个特殊前缀,再入库。查询解密:遍历查询...

2019-11-17 15:57:29 167

原创 springboot学习二之之定义typeHandler

项目工程沿用上一次springboot学习一的工程。添加新的测试方法。Controller @PostMapping("/add") public String addUser(@RequestBody User user){ String msg = testService.addUser(user); return msg; }Servi...

2019-11-17 13:47:23 2469

原创 mybatis学习一之springboot整合mybatis及自动与手动管理数据源

一、使用IDEA新建一个springboot项目工程architecture,过程略,建成后结构如下图。本项目依赖坐标如下<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <arti...

2019-11-16 23:04:45 591

原创 mybatis generator学习

1、新建一个module工程generator,专门用于生成mapper.xml,过程略。(不建议和项目工程放在一样,防止新生成文件覆盖老文件)2.引入相关依赖<dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId&...

2019-11-12 23:10:07 113

原创 设计模式之原型模式学习

本文参考自:https://www.cnblogs.com/betterboyz/p/9356190.html原型模式的定义与特点原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。例如,Windows 操作系统的安装通常较...

2019-10-19 20:06:32 85

原创 设计模式之单例模式

文中内容参考摘录自:http://c.biancheng.net/view/1338.html ,仅作学习笔记记录。一、单例模式的定义与特点单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。在计算机系统中...

2019-10-19 17:44:39 89

原创 mongodb初步学习

一、安装过程略,网上很多安装教程二、基本命令认识这里的**[collection]**为用户自己的创建的[collection]的名字use foobar #创建一个库(创建库后要写入数据,否则该库只会存在于内存中,退出后就会消失)db.createCollection(“person”) #创建一个person collectionshow dbs ...

2019-10-19 13:29:55 89

原创 maven父工程报错pom.xml不存在

今天在使用IDEA构建maven工程时报了一个父工程的pom.xml不存在的错误。[ERROR] Some problems were encountered while processing the POMs:Child module G:\springcloud\parent\department of G:\springcloud\parent\pom.xml does not exi...

2019-10-16 20:58:16 1149

原创 使用IDEA创建一个简单的maven聚合工程

idea中创建maven聚合工程和eclipse中有所不同,今天花时间学习了一下如何使用idea创建一个maven工程,这里记录一下。1、创建父工程parent1.1选择File -> New -> Project1.2 选择maven工程,注意这里骨架不选,下一步。1.3 输入父工程GAV信息1.4 Finish,完成父工程创建。父工程创建后信息如下,这里的sr...

2019-10-15 20:01:02 390

原创 swagger入门学习

初次学习swagger,文章内容参考自:didispace.com/spring-boot-learning-21-2-2/1、swagger介绍swagger可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档。它既可以减少我们创建文档的工作量,同时说明内容又整合入实现代码中,让维护文档和修改代码整合为一体,可以让我们在修改代码逻辑的...

2019-10-07 23:14:32 239

原创 linux命令

1、清空文件内容 可以用于调试时清空日志大文件 cat /dev/null > 1.txt echo "" > 1.txt2、grep 常见用法grep -c 'xxx' 统计 xxx出现的次数(这里的c是小写的c,count的意思)grep -i 'xxXX' 不区分大小写的正则匹配查找grep --color=auto 'xx' 搜索的关键字显示...

2019-10-07 16:29:53 97

原创 jvm 基础知识学习

本文转载借鉴自:https://blog.csdn.net/qq_41701956/article/details/816649211. Java 内存区域与内存溢出异常1.1 运行时数据区域根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。1.1.1 程序计数器内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下...

2019-10-04 14:25:01 200

原创 GC日志学习

1、vm参数设置调整vm的参数,记录gc日志,服务器端可以在catatlina.sh或者catalina.bat(windows)中的JAVA_OPTS中追加如下参数-Xms512m -Xmx1028m -XX:MaxNewSize=512m -XX:MaxPermSize=1028m -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -verbose...

2019-10-04 11:41:56 103

原创 JAVA8重要新特性学习

1、Lambda表达式Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。(非匿名函数在创建时就已经占用内存,而匿名函数只有在代码调用时才会创建占用内存,使用完后会立即释放内存)@SpringBootApplicationpublic class Java8Application { p...

2019-10-03 11:12:38 110

tomcat-redis集群,session共享

tomcat-redis集群时session共享jar工具类,支持tomcat8

2018-07-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除