自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

走不动的木木

一只即将起飞的菜鸟程序员~ 目前博客主要写在【https://www.yuque.com/u1144192/iy7zlz】

  • 博客(39)
  • 收藏
  • 关注

原创 Redission分布式锁实战

通过springboot整合Redission实现分布式锁

2023-04-05 22:43:03 184

原创 spring事务以及事务嵌套

ACID事务是区分文件存储系统与Nosql数据库重要特性之一,其存在的意义是为了保证即使在并发情况下也能正确的执行crud操作,怎样才算是正确的呢?这时提出了事务需要保证的四个特性ACID:A:原子性(atomicity)事务中各项操作,要么全做要么全不做,任何一项操作的失败都都会导致整个事务的失败;C:一致性(consistency)事务结束后系统状态是一致的;I:隔离...

2020-05-09 19:34:18 434

原创 看懂UML类图

看懂UML类图类图基本知识类图(Class Diagram)是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。看懂类图可以帮助我们学习设计模式,在进行软件设计的时候,能够让我们在正确编写代码以前对系统有一个全面的认识。图1-表示private #表示protected ~表示default...

2020-02-26 12:18:26 299

原创 Java8新特性整理笔记

Java8新特性整理笔记Java8新特性包括:接口内允许添加默认实现的方法、Lambda表达式、函数式接口、Stream流操作等。在我看来,每一个新特性都是一件比较好的工具,但是当他们组合在一起使用的时候就发生质变,就好比一把瑞士军刀。下面我会利用四大核心函数式接口结合其他几种新特性达到优化代码的效果。如果读者完全没有接触过这些新特性可以先参考我的文章:Java lambda语法和函数式编程...

2019-12-29 15:55:28 355

原创 sql查询中char或者varchar类型字段为null和‘没有值’时引起的问题分析

在平时开发中,我们都会遇到数据库中varchar或者char类型字段为null的情况,通常情况我们都会认为数据库中'某个值或者没有值'!=null这个条件的结果是true。但是,我得告诉你,上面说的那个等式的结果是false。首先上结论:'某个值或者没有值'!=null这个条件的结果是false'某个值或者没有值'=null这个条件的结果也是false解释下上面结论中说的‘没有值’,在数...

2019-12-09 23:20:12 5838 1

原创 SpringBoot使用yml文件配置日志

今天本来只是想要学习一些SSM框架的东西,自己测试一下,带着怎么快速怎么来的于是就用SpringBoot呗,结果刚写完代码刚点击启动就莫名其妙开始报错:javax.management.InstanceNotFoundException: org.springframework.boot:type=Admin,name=SpringApplication at com.sun.jmx.inte...

2019-12-08 20:08:07 1113

原创 利用策略模式和工厂模式优化代码中过多的if-else

​ 在公司经常会遇到一些需要做一连串相似的业务逻辑判断需求,比如使用不同支付方式实现商品打折、商店根据客户的vip等级给予客户不同的优惠政策之类的业务场景。假设现在我们接到一个需求,根据客户的VIP等级,给与不同的优惠政策:// VIP1 消费1000 ~ 2000,9折优惠, 消费2000~5000,8折优惠,消费5000~10000,7折优惠, 消费10000~,6折优惠 stati...

2019-12-07 23:17:09 426

原创 设计模式——深入浅出策略模式

假如接到一个需求,需要设计两种鸭子:红头鸭和绿头鸭;他们只是表现的不一样,都会游泳和gaga叫,学过面向对象的同学都知道我们可以设计一个父类,让这个父类Duck具有游泳和gaga叫的行为,再加上一个display的抽象行为让子类重写。这个时候而两种鸭子都继承Duck,这样便会减少代码量,也就减少了工作量。这种设计方式如下:public abstract class Duck { publ...

2019-11-24 15:43:27 147

原创 Java线程池结合ThreadLocal的用法实例

今天由于老大让我向数据库中添加百万条数据用来做测试,考虑到单线程插入数据可能要花很久的时间,于是想到了用线程池来进行插入操作,但是里面有个一个唯一性约束字段,然后在这个过程中遇到了好几个问题:一开始使用线程池的时候由于唯一性约束字段的存在,需要将一个公有变量变成私有变量(每个线程在执行过程中变量需要不被外界修改),但是线程池中的线程是通过实现Runnable接口方式创建的,那么类中的私有变量其...

2019-11-07 00:46:26 905

原创 一个诡异的sql索引失效现象

这两天在公司优化一个sql的时候碰到了一个诡异的事——一个表中的一个唯一性索引在更换了最左边的字段后,根据最左边字段为where后面的查询条件时,查看执行计划发现有些时候有用到索引,而有些时候则没有用到索引。现象具体说明出现问题的表结构以及其字符集如下:alter table sodr_po_header add UNIQUE KEY sodr_po_header_u1(po_num...

2019-11-06 10:54:36 260

原创 sql性能优化-mysql

Mysql分层、存储引擎[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tGrQHjXV-1572965858526)(MySql分层.png)]常用引擎对比:InnoDB:事务优先(适合高并发操作,使用行锁)MyISAM:性能优先(使用表锁)可以使用show engines;查看当前使用数据库支持哪些引擎;使用show VARIABLES LIKE '%...

2019-11-06 09:28:44 152

原创 sql中count(1)、count(*)和count(字段名)的区别

测试实例count(1)测试,sql语句如下:select count(1) from ums_member;结果如下:count(*)测试,sql语句如下:select count(*) from ums_member;结果如下:count(主键)测试,sql语句如下:select count(id) from ums_member; --id为主键字段...

2019-11-06 09:28:27 11372 1

原创 sql中的select 1

前两天在公司项目中看到有人在一个子查询中写了select 1,然后就很好奇这个写法的作用,通过网上各位大佬的介绍,得知select 1在作为子查询中的判断子查询结果是否存在条件时效率较高(大量数据情况下)。用法示例teacher表:teachercard表:使用的sql语句如下:select * from teachercard tc where exists (select 1 ...

2019-11-06 09:28:00 8978

原创 spring组件学习

本文主要记录学习到的spring组件以及spring组件设置。给spring容器中注册组件通过使用注解方式向spring容器中添加组件是十分简单的,大体有如下方式:在config类中通过添加@Bean来添加注解通过扫描添加组件使用@Import添加一个外部组件使用@ImportSelector添加一个组件使用ImportBeanDefinitionRegistrar添加一个组件使...

2019-11-05 22:34:23 326

原创 spring中使用自定义注解

使用spring时,aop可以大幅度减少我们的工作量,这里主要介绍一些spring中aop如何切注解。自定义注解:@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface MyAnnotation { String value();}编写切面类,切点在自定义注解上...

2019-11-05 22:33:12 289

原创 spring5源码编译(亲测)

这一阵子在读spring源码,但是网上的文章,构建spring源码大都有问题,导致我构建源码的时候出现了很多问题,所以我自己重新构建了一下。纠结了一会儿要不要写这篇文章,还是决定写下来,当作笔记用,同时给广大网友提供一个编译spring源码的方法。本机环境win10 + jdk1.8.0_151 + IntelliJ IDEA 2019.1.3spring使用的是5.0版本(下面介绍的方法在...

2019-11-05 22:32:18 1531

原创 RestFul风格API

RestFul是什么?REST是REpresentational State Transfer的缩写(表述性状态转移),REST是一种体系结构。简单的说,REST就是将资源的状态以合适客户端或服务端的形式从服务端转移到客户端(或者反过来)。在REST中,资源通过 URL 进行识别和定位,然后通过不同的 action(既HTTP方法,GET等) 来定义REST应该完成的功能。在实际的web开...

2019-11-05 22:22:35 233

原创 MyBatis中的一对一,一对多,多对多关联映射查询

MyBatis中的一对一,一对多,多对多关联映射查询一对多(嵌套结果)将结果嵌套,在collection标签中加入对应的行表列映射:<resultMap id="BaseResultMap" type="com.luolin.springssm.model.Student"> <!-- id 表示主键, column 表示数据库中表的column名称,jdbcTy...

2019-11-05 22:11:33 1042

原创 Java自定义注解以及通过反射获取注解信息

随着spring的流行,java注解的使用成为了java工程师必不可少的技能。注解基本知识元注解:@Retention、 @Target、 @Document、 @Inherited;Annotation型定义为@interface, 所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是接口。参数成员只能用publi...

2019-11-05 22:10:22 832

原创 Java异常详解

throw new Exception()既代表 java 运行进入了一个新的分支,不再执行new Exception()后面的语句了,之后再来执行finally中的内容。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BMawiyPr-1572962936244)(ExceptionStruct.png)]java将所有的错误封装为一个对象,其根本父类为 ...

2019-11-05 22:09:23 423

原创 Java面向对象详解

什么是面向对象?这大概是java中最重要的一部分了,写这篇文章主要是自己之前java基础不怎么样,然后今天看了一些关于面向对象和多态的文章,做下笔记。面向对象java中什么是对象java中万物皆对象,既所有的一切都可以是对象,动物可以是对象,人可以是对象,头也可以是对象… 总之,就是我们可以看到的事物基本上都可以是对象。什么是面向对象面向对象并不仅仅是这几个字而已,这是一种编程思想,它...

2019-11-05 22:08:39 226

原创 java枚举详解

JDK1.5之前的枚举在JDK1.5之前是没有enum这个关键字的,那么那个时代是怎么实现枚举的呢?主要是通过私有化构造器,然后在类里面创建静态final的对象,在类的外面通过 ** 类名.对象名 ** 来使用枚举的,如下:class Season{ String name; String description; private Season(String na...

2019-11-05 22:07:39 105

原创 Java传参机制详解

Java传参机制首先看下java中的参数传递机制:基本数据类型传值(未传递地址)方式:class Main{ public static void main(String[] args) { Main main = new Main(); int a = 20; System.out.println("test之前的a:" + a); main.test(...

2019-11-03 23:55:31 637

原创 java可变参数列表详解

java可变参数列表从java5开始,java支持一种参数写法:Java类型后面三个点(如String…),叫可变长度参数列表。向其中传入参数时,它支持传入数组,个数不一定的同类型(…前面的类型)参数。第一次看到别人的代码里写了它的时候是有点懵的,但是用过两次之后就发现这个东西其实很简单。public void printNames(String...names){ for(Strin...

2019-11-03 23:53:53 251

原创 java泛型详解

概述泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。什么是泛型?为什么要使用泛型?Java泛型(generics)是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter)。泛型就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的...

2019-11-03 23:08:11 114

原创 java反射机制详解

在说反射之前,必须说一句,所谓java框架(比如大名鼎鼎的Spring)大多数都是动态代理+注解完成的,而动态代理(动态代理模式以及静态代理模式差异和使用可以在我的另一篇文章中看到)必须使用反射完成。反射可以获取本类、父类以及实现的接口中的所有方法以及所有属性。获取运行时类的实例获取运行时类得实例主要有四种方式:@Testpublic void test4() throws ClassN...

2019-11-03 23:04:25 165

原创 设计模式之代理模式(静态代理和动态代理)

代理模式java中代理模式分为静态代理和动态代理,其中动态代理就是通过反射完成的。代理模式的主要思想就是有些类不好直接做某些操作,于是就通过代理类来完成。静态代理是每一个类如果想要使用代理模式,必须有一个代理类;动态代理则是有了明显的进步:所有的类使用一个代理类。静态代理实现代码如下:/** * 公共实现的接口,(主题) */interface ClothFactory{ ...

2019-11-03 23:01:31 349

原创 java Stream的基本语法详解(包括并发流的使用语法)

java Stream是什么首先,我们来看下java怎么描述Stream的:A sequence of elements supporting sequential and parallel aggregate operations.其实学习stream之前我以为stream式很难的,但是学完之后,发现其实还好,并不难,主要在于是否熟练。Stream是java8的新特性,它与 jav...

2019-11-03 22:55:07 995

原创 Java多线程编程

概念梳理并行多个线程在同一时间在CPU上运行。并发表示一会做这个事情,一会做另一个事情,存在着调度。单核 CPU 不可能存在并行(微观上)。临界区临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待。阻塞与非阻塞阻塞和非阻塞通常用来形容多线程间的相互影响。比如一个线程占用了临界...

2019-10-23 20:50:21 2194

原创 Java lambda语法和函数式编程

lambda初识lambda表达式一个简单的方法,比较两个Integer:public void Test1() { Comparator<Integer> com = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return In...

2019-10-23 20:47:31 237

原创 git学习笔记

前言关于git的一些介绍以及大部分用法,可以参考官方文档,本文只记录一些常用操作和一些比较难的操作。git fetch和git pull对比先用一张图来理一下git fetch和git pull的概念:git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。git fetch origin查找 “origin” 是哪一个服务器,从中抓取本地没有的...

2019-10-23 20:43:00 105

原创 Java枚举

JDK1.5之前的枚举在JDK1.5之前是没有enum这个关键字的,那么那个时代是怎么实现枚举的呢?主要是通过私有化构造器,然后在类里面创建静态final的对象,在类的外面通过 ** 类名.对象名 ** 来使用枚举的,如下:class Season{ String name; String description; private Season(String na...

2019-10-23 20:31:20 176 1

原创 sql中的联表查询

sql中的join(本文仅介绍left join、right join、join on,图片是网上找的,原作者如果不允许使用请联系我)如下:测试数据:左连接,left join左连接使用示例:select * from teacher t left join course c on t.tid = c.tid;结果:通过上面的结果可以看出,左连接会将其左边的表作为主表(记为A)...

2019-10-23 20:09:10 836

原创 关于ArrayList的天坑

ArrayList里究竟存储的是什么?ArrayList中的每一个元素存储的实际上是对象引用(之前在公司写代码的时候,做过类似下面的事),假如按照下面的方式使用ArrayList,则最后list中存储的元素都相同且都是最后一个元素,原因是list中所有的元素都指向同一块内存。@Testpublic void test1(){ List<Person> list = new...

2019-10-23 00:02:06 187

原创 Java Map以及HashMap、TreeMap、HashTable

MapMap接口主要HashMap、LinkedHashMap、TreeMap、Hashtable、Properties实现类Map的遍历方式方式一,这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用:Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (Map.Ent...

2019-10-22 23:48:07 269

原创 Java中Set的使用

Set接口HashSet、LinkedHashSet、TreeSetHashSet是Set接口的典型实现,大多数时候Set集合都使用这个实现类。HashSet是按Hash算法来存储集合中的元素,因此具有很好的存取、查找、删除性能。底层就是HashMap;HashSet具有以下特点:不能保证元素的排列顺序;HashSet不是线程安全的;集合元素可以是null;HashSet集合判断两个元...

2019-10-22 23:43:37 355

原创 Java List踩坑记录

关于集合,先看下面这张框架图,可以清晰的看到,整个集合主要包含两大块: Collection和Map,其中Collection接口是一个单列集合,用来存储一个一个的对象,Map接口是一个双列集合,用来存储一对(key - value)一对的数据。接下集合部分主要就分析这两个部分(不会详细讲集合中公有的方法,主要介绍几个实现类的区别和接口的区别)。CollectionThe root in...

2019-10-22 23:37:17 471

原创 git常见命令和用法

前言关于git的一些介绍以及大部分用法,可以参考官方文档,本文只记录一些常用操作和一些比较难的操作。git fetch和git pull对比先用一张图来理一下git fetch和git pull的概念:git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。git fetch origin查找 “origin” 是哪一个服务器,从中抓取本地没有...

2019-10-22 23:30:59 155

原创 Java重载和重写

重载(Overload)重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。注意:在一个类里面,只有方法名字相同,而参数不同才算是重载,与返回类型无关。既无法以返回值类型作为重载函数的区分标准。public class NameConflict { public void show(){} public int show(...

2019-10-22 18:58:40 608 3

空空如也

空空如也

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

TA关注的人

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