自定义博客皮肤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)
  • 收藏
  • 关注

原创 一篇文章带你了解SQL实际执行顺序

分组结束之后,我们再执行select语句,因为聚合函数是依赖于分组的,聚合函数会单独新增一个查询出来的字段,这里用紫色表示,这里我们两个id重复了,我们就保留一个id,重复字段名需要指向来自哪张表,否则会出现唯一性问题。我们之前看到了普通的筛选条件是不影响的,但是having还支持聚合函数,这是where无法实现的。然后把再根据我们要的数据进行select,可以是普通字段查询也可以是获取聚合函数的查询结果,如果是集合函数,select的查询结果会新增一条字段。用于确定我们要查询的表的范围,涉及哪些表。

2024-02-20 09:43:49 742 1

原创 什么是单测

最重要的还是对单测有个正确的认识,然后掌握mock的技巧,写新方法的时候,尝试设计完接口后,先写下单测,慢慢的你就会有感觉了,在写单测时,你自然而然的会考虑到诸多边界值的处理,你写的代码质量也会提高,渐渐地就会感受到单测的好处。mock指的是伪造一个假的依赖服务,替换真正的服务,在上面的例子中,需要伪造yesDao和OneOneZeroProvicer,我们操控它得到我们想要的返回值,满足我们自身对trainingYes的测试需求。来验证这个方法是否被调用。...

2022-07-26 10:11:43 2369 1

原创 【关于Spring事务】

对于事务的控制,仔细研究了一下,颇有所获。先简单介绍一下Spring事务的传播行为:所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。在定义中包括了如下几个表示传播行为的常量:然后说一下Spring事务的回滚机制:Spring的AOP即声明式事务管理默认是针对回滚。Spring的事务边界是在调用业务方法之前开始的,业务方法执行完毕之后来执行(Spring默认取决于是否抛出)。如果你在方法中有处理,那么try里面的代码块就脱离了事务的管理,

2022-07-12 14:58:16 148

原创 ThreadLocal

ThreadLocal 作为 Java 面试的高频题

2022-07-04 10:30:31 401

原创 【对线面试官】一张图让你了解jvm

没有什么是一张图搞不定的

2022-01-05 18:28:27 100

原创 CASE WHEN THEN

2021-12-29 14:18:08 128

原创 如何优雅的使用git

git的三种状态现在请注意,如果你希望后面的学习更顺利,请记住下面这些关于 Git 的概念。 Git 有三种状态,你的文件可能处于其中之一: 已提交(committed)、已修改(modified) 和 已暂存(staged)。已修改表示修改了文件,但还没保存到数据库中。已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。已提交表示数据已经安全地保存在本地数据库中。这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录用户信息安装完 Git 之后,要

2021-12-28 09:30:07 411 2

原创 关于泛型第二篇

前言Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。| 泛型带来的好处在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是本身就

2021-12-22 16:06:08 85

原创 关于泛型你不得不知道的事

泛型泛型在整个java体系当中占有很大的地位,尤其是在面向对象编程和设计模式这一块,更是得到了广泛的应用。所以我们很有必要去详细的深入的去了解泛型。一、背景public static void main(String[] args) { // 1.我们同学们经常使用集合一直使用的是泛型的集合,这里我们 // 使用一个非泛型的集合做一个案例 ArrayList arrayList = new ArrayList(); // 2.如果没有采用集合我们这个集合在存储元素的

2021-12-22 11:53:36 75

原创 常见linux命令总结

一,基本命令1.1 关机和重启关机shutdown -h now 立刻关机shutdown -h 5 5分钟后关机poweroff 立刻关机重启shutdown -r now 立刻重启shutdown -r 5 5分钟后重启reboot 立刻重启1.2 帮助命令–help命令shutdown --help:ifconfig --help:查看网卡信息man命令(命令说明书

2021-12-22 11:32:35 112

原创 Optional用法

关于Optional前言本次向大家介绍下java Optional类源码描述官方的描述是这样的:A container object which may or may not contain a non-null value. If a value is present, isPresent() will return true and get() will return the value.Additional methods that depend on the presence or ab

2021-12-01 19:11:56 576

原创 Java枚举转成list

Java枚举转成listpublic static List toList() { List list = Lists.newArrayList(); for (SuperviseUnitEnum superviseUnitEnum : SuperviseUnitEnum.values()) { Map<String, Object> map = new HashMap<String, Object>();

2021-11-23 18:22:18 231

原创 spring boot定时任务篇

cron表达式详解@Scheduled(cron = "0 0 9 ? * TUE") //每周二上午九点Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:(1) Seconds Minutes Hours DayofMonth Month DayofWeek Year(2)Seconds Minutes Hours DayofMonth Month DayofWeek结构corn从左到右(用空格隔开):秒 分 小时 月份中

2021-11-23 17:41:33 381

原创 零基础spring boot第十二天

简介今天的主要任务是学习一个数据库版本控制工具场景多人同时开发后端时,数据表的创建和修改会显得格外头痛,因为mybatis只能先建数据表,再用逆向工程生成类。如数据表修改后,多人未做即时沟通,那么代码就会乱,那有什么东西办法解决吗,有,那就是数据库版本控制工具-----Flyway,不只方便多人合作,更可以支持数据库的版本控制,和数据库的迁移。使用Flyway,用户可以从任意一个数据库版本迁移到最新版本,简单而且有效Flyway介绍Flyway是一个开源的数据库迁移工具。相对于配置,它更倾向于简单

2021-11-18 19:07:15 571

原创 零基础spring boot第十一天

简介今天我们主要学习日志。首先让我们一起了解下日志,日志能记录程序的运行轨迹,方便查找关键信息,也方便快速定位解决问题。尤其是项目线上问题,不允许远程调试的情况下,只能依赖日志定位问题,如果日志写的好,那就能快速找到问题所在。反之,日志没写好,反而会影响程序的运行性能和稳定性。日志的用途大致可以分为:问题追踪:辅助排查和定位线上问题,优化程序运行性能状态监控:通过日志分析,可以监控系统的运行状态安全审计:审计主要体现在安全上,可以发现非授权的操作SLF4J——Simple Logging Fac

2021-11-18 18:51:34 838

原创 零基础spring boot第十天

简介今天主要学习数据校验。在 RESTful 的接口传参时,我们不能信任任何用户输入,所以开发时要进行数据校验。例如经常要写判断字段是否为空,长度限制等,这些代码繁琐,冗长,还容易出错,这里我们使用 Hibernate-Validator 来解决数据校验问题,会使问题的解决方式优雅很多。那么什么是Hibernate-Validator呢,一开始Java规定了一套关于验证器的接口,即Bean Validation(JSR 303 和 JSR 349)。Bean Validation并不是一项技术而是一种规

2021-11-17 17:39:48 142

原创 零基础spring boot第九天

简介今天来学习一下单元测试,单元测试是先mock一些正常边界异常条件来对接口进行操作,并且期望接口返回什么内容,最后接口实现了之后再重新测试一遍。单元测试要测试任何可能的错误,单元测试不是用来证明你是对的,而是为了证明你没有错。在TDD(Test-Driven Development)开发模式中,重点强调在开发功能代码之前,先编写测试代码。单元测试不仅仅用来保证当前代码的正确性,更重要的是用来保证代码修复、改进或重构之后的正确性。当然这里没有,而是给一个单元测试的模板,要注意的是,我们不要为了单测而单测

2021-11-17 17:20:59 316

原创 零基础spring boot第八天

简介今天我们主要学习,全局统一异常处理步骤Web 应用中经常使用 try-catch 这会导致代码结构杂乱无章的感觉,也不利于调试代码,如果能将所有异常统一到一个模块将是一个很美好的事,那么利用@ControllerAdvice和@ExceptionHandler定义一个统一异常处理类,就能做到全局的异常捕获和处理@ControllerAdvice:控制器增强,使@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法应用到所有的 @RequestMapp

2021-11-17 16:39:35 207

原创 零基础spring boot第七天

简介今天给大家介绍一个代码生成神器EasyCode插件,可减少重复业务代码,提高工作效率,减少加班,该插件目前只在IDEA有。步骤安装步骤如下File --> Settings… --> 选择Plugins --> 安装Easy Code插件 --> 安装之后注意重启 idea接下来使用Easy Code插件,先创建数据表USE backend_template;CREATE table goods( id INT not null, name V

2021-11-17 15:53:22 73

原创 零基础spring boot第六天

简介今天的主要内容是:统一请求结果格式步骤在提倡前后端分离的当下,统一返回结果就显得尤其重要(感觉是基本的吧)在com.example.backend_template.utils下新增ResultData类package com.example.backend_template.utils;/** * @ClassName ResultData 封装结果集成统一的json样式 * @Description * @Author L * @Date Create by 2020/7/2

2021-11-17 11:26:04 68

原创 零基础spring boot第五天

简介今天的主要内容就是整合Swagger2(其实就是一个类似postman的测试接口的工具吧,反正用过的都说好,哈哈哈)步骤首先在pom.xml下添加如下依赖 <!-- swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId&

2021-11-17 11:04:32 626 1

原创 零基础spring boot第四天

简介今天的主要任务是整合 Spring Security步骤首先新建数据库与表Create DATABASE `backend_template`;USE backend_template;CREATE TABLE `user` ( `id` bigint(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, PRIMARY KEY

2021-11-16 14:58:11 1130 2

原创 零基础spring boot第三天

简介今天的主要任务是整合redis,所以需要我们提前在电脑下载好redis。(redis之前也有讲过,可作为数据库缓存,速度非常快)步骤这里我用的是Windows下的 redis 3.0,可以自行下载安装适合自己系统的redis首先添加依赖 <!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifac

2021-11-16 14:35:34 53

原创 零基础spring boot第二天

整合mybatis、Druid连接池、PageHelper分页第二天的内容主要是整合mybatis、Druid连接池、PageHelper分页。简单来说就是做一些配置。之前创建项目时,导入了web依赖,现在我们要导入其他的依赖来丰富我们的功能。注意是在pom文件下哦 <!-- mysql数据库驱动--> <dependency> <groupId>mysql</groupId>

2021-11-16 14:23:41 384

原创 零基础spring boot第一天

项目构建第一天课程比较简单,不再重复书写,主要就是新建一个springboot项目,以及了解不同层级对应不同的作用。附上链接:我就是链接啦

2021-11-16 10:36:11 373

原创 Nginx 配置神器

Nginx 是前后端开发工程师必须掌握的神器。该神器有很多使用场景:比如反向代理、负载均衡、动静分离、跨域等等。把 Nginx 下载下来打开 conf 文件夹的 nginx.conf 文件,Nginx 服务器的基础配置和默认的配置都存放于此。Nginx 是前后端开发工程师必须掌握的神器。该神器有很多使用场景:比如反向代理、负载均衡、动静分离、跨域等等。把 Nginx 下载下来打开 conf 文件夹的 nginx.conf 文件,Nginx 服务器的基础配置和默认的配置都存放于此。配置是让程序员

2021-11-16 09:47:31 1929 1

原创 java:找不到符号 符号: 变量 log 位置

IDEA在编译的时候报Error:(30, 17) java: 找不到符号符号: 变量 log可能是第二次遇到了,记录一下问题我见过三种解决办法这里我就不多赘述了我直接放链接给大家看吧,都2w多浏览量了。链接: 我就是链接(请点我).但有时候还是不太管用,感觉可能能解决部分人的问题吧,下面直接介绍第四种方法。第四种方法解决过程:从包下一个个的通过肉眼搜索报错里找不到的类,结果每个类都有,百度了一下,感觉都不符合自己的情况,问公司的大佬,大佬让我自己编译一下,看哪里出错(wha t fuc

2021-11-15 14:39:44 3926

原创 lambda与流式编程

什么是lambda表达式lambda表达式,是Java8的新特性,lambda表达式本质来讲,就是一个匿名函数,使用 Lambda 表达式可以使代码变的更加简洁紧凑。lambda表达式的语法基础语法:(参数列表) -> {lambda体}以下是lambda表达式的重要特征:**可选类型声明:**不需要声明参数类型,编译器可以通过上下文统一识别出参数类型”。tips:如果要省略参数的类型,则每一个参数的类型都必须省略。不能出现有些参数写类型,有些参数不写类型。//接受两个参数(数字

2021-11-15 09:46:23 321

原创 《一篇文章让你爱上Markdown|CSDN编辑器测评》

啥也别说了,一篇文章就让你了解Markdown,程序员必备好吧,直接上干货。一-标题首先最重要的就是标题这个主要是通过#来区分,一个#是一级标题,二个#是二级标题,一共支持六级标题。这里就不举例子了,ps(放出来太丑了,可以自行尝试)二-字体其次是字体加粗这里需要做的就是用两个*号包起来举个栗子我是加粗的字体鸭斜体这里需要做的就是用一个*号包起来举个栗子我又变成斜体了删除体这里要用两个~~号包起来(主要就是用于表示废弃的文字)举个栗子我是删除体三-代码块其次我感觉

2021-11-11 18:08:15 211

原创 常见的15条linux命令(建议收藏)

命令1:pwdpwd显示当前的工作路径,查看位置所在。命令2:lsls命令十分常用,ls指的是list,查看文件或者目录的命令。添加参数后常用为:ls :查看目录中全部的文件ls -l :显示文件和目录中的全部信息ls -a :列出全部文件,包含隐藏文件,其中a表示为allls -R :连同子目录中的文件全部列出,相当于是递归列出全部内容,也就是说该目录下的所有文件的都会被显示出来ls [0-9]:显示包含数字的文件名和目录名命令3:cpcp就是copy复制的意思,用于复制文件,该

2021-10-26 17:52:04 292

转载 并发---线程池

1 线程池的优势总体来说,线程池有如下的优势:(1)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。(2)提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。(3)提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。2 线程池的使用线程池的真正实现类是 ThreadPoolExecutor,其构造方法有如下4种:public ThreadPoolExecutor(int c

2021-06-05 14:45:51 100

原创 并发---AQS原理

AQS 简单介绍AQS 的全称为(AbstractQueuedSynchronizer)抽象同步队列,这个类在 java.util.concurrent.locks 包下面。AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock/Semaphore/CountDownLatch,其他的诸如 ReentrantReadWriteLock,SynchronousQueue,FutureTask(jdk1.7) 等等皆是基于

2021-06-05 12:34:52 159

原创 并发---锁的分类

锁的分类乐观锁/悲观锁乐观锁与悲观锁并不是特指某两种类型的锁,是人们定义出来的概念乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS(Compare and Swap 比较并交换)实现的。悲观锁:总是假设最坏的情况,每次去

2021-06-05 12:34:13 87 2

原创 并发---死锁

锁什么是死锁?多个进程在运行过程中因资源争夺而造成的阻塞状态。比如一个线程A,按照先获得锁a再获得锁b的顺序获得锁,同时又有一个锁B,按照先获得锁b再获得锁a的顺序获得锁。死锁产生的四个必要条件?**互斥:**某资源一次只允许一个进程访问,该资源一旦分配给某个进程,其他进程就不能再访问,直到该进程访问结束。**不可剥夺:**别人已经占有了某项资源,你不能因为自己也要就去抢过来。**循环等待:**存在一个进程链,使得每个进程都占有下一个进程所需的至少一种资源。**请求与保持:**一个进程本身占

2021-06-05 12:33:24 72

转载 并发---synchronized

1.为什么要使用synchronized在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile。2.作用synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性。Synchronized是Java中解决并发问题的

2021-06-05 12:32:55 87

转载 并发---volatile

内存模型大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里面就有了高速缓存。也就是说,当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进

2021-06-05 12:32:31 183

转载 并发---创建进程的方式

java 中创建线程有哪几种方式?1、继承Thread类创建线程Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过Thread类的start()实例方法。2、实现Runnable接口(没有返回值)实现Runnable接口也是一种常见的创建线程的方式。使用接口的方式可以让我们的程序降低耦合度。Runnable接口中仅仅定义了一个方法,就是run。3、实现Callable接口实现多线程(有返回值)与实现Runnable接口实现多线程类似,也有不

2021-06-04 20:33:43 68

转载 并发---进程与线程

线程与进程1.什么是线程线程、进程、协程进程是应用程序的启动实例。比如我们运行一个游戏,打开一个软件,就是开启了一个进程。cpu资源分配基本单位线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。cpu调度的基本单位协程是比线程更加轻量级的存在,一个线程可以有多个协程。协程不是被操作系统内核所管理,而完全是由程序所控制。操作系统不可见,不会造成上下文切换。线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源

2021-06-04 20:31:09 1243

转载 JVM---类加载和双亲委派模型

类加载和双亲委派模型1.首先看看什么时候用到了类加载[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tpiMAoBx-1622780583410)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210603161207876.png)]从上图可以看,java文件通过编译器变成了.class文件,接下来类加载器又将这些.class文件加载到JVM中。其中类装载器的作用其实就是

2021-06-04 12:23:14 90

原创 JVM---垃圾回收流程

垃圾回收流程首先新对象会存放在Eden区,如果Eden区存不下,将触发一次minor GC,将存活的对象移动到Survior区。如果Survior区不够的话,会向老年代发送请求,查询老年代的内存是否足够,Survior区要是够的话,将存活区的存活时间比较长的对象存到老年代,然后将Eden区的存活时间比较长的存到存活区,将新创建的分配搭到Eden区。若空间仍不够,触发一次full GC,重复操作。若最后空间仍不足,抛OutOfMemoryError异常。概述首先新对象会存

2021-06-04 12:21:06 178

空空如也

空空如也

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

TA关注的人

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