自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

苏渠的博客

苏渠与java的故事

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

原创 MySQL高级篇之视图

子句创建视图时,MySQL 会通过视图检查正在更改的每个行,例如 插入,更新,删除,以使其符合视图的定义。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。为了保证数据库表的安全性,开发人员在操作 tb_user 表时,只能看到的用户的基本字段,屏蔽手机号和邮箱两个字段。查询每个学生所选修的课程(三张表联查),这个功能在很多的业务中都有使用到,为了简化操作,定义一个视图。视图可帮助用户屏蔽真实表结构变化带来的影响。

2022-10-24 09:24:48 760 1

原创 MySQL高级篇之索引的使用

本篇文章介绍了一些索引的重要使用规则已经常见的实现方式,如单列索引和联合索引,索引应该满足最左匹配原则,使用覆盖索引,使用前缀索引等,还介绍了一些索引失效的场景,以及通过SQL提示来优化MySQL数据库对索引的使用。

2022-09-08 16:35:45 559

原创 MySQL高级篇之索引分类

非聚集索引又叫二级索引、辅助索引,除聚簇索引之外的所有索引都称为非聚集索引。在 InnoDB 中,辅助索引中的叶子节点存储的数据是。InnoDB 的数据和索引存储在一个文件 t_user_innodb.ibd 中。检索到叶节点,将节点加载到内存中遍历,比较16

2022-09-08 16:25:12 368

原创 MySQL高级篇之索引结构

MySQL 的索引是在存储引擎层实现的,不同的存储引擎有不同的索引结构,主要包含以下几种 :B+Tree索引,Hash索引,空间索引,全文索引,其中B+Tree索引时MySQL默认的索引结构。

2022-09-08 16:23:15 520

原创 MySQL高级篇之存储引擎分类

什么是存储引擎:存储引擎是 MySQL 的核心,是负责 MySQL 中数据的存储和提取。。存储引擎是基于表而不是基于库的,所以存储引擎也可以被称为表引擎。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。在 MySQL5.5 之后,。在数据库中输出可以查看MySQL所有的存储引擎。

2022-09-08 15:12:18 505

原创 面试题之Java的异常

Throwable 是所有 Java 程序中错误处理的父类 ,有两种直接子类: Error 和 Exception。Error 表示由 JVM 所侦测到的无法预期的错误,由于这是属于 JVM 层次的严重错误 ,导致 JVM 无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。Exception 异常表示程序本身可以捕获并且可以处理的异常。Exception 这种异常又分为两类:运行时异常和非运行时异常...

2022-08-31 14:49:45 182

原创 面试题之Java的克隆

在Java语言中,数据类型分为值类型(基本数据类型)和引用类型,值类型包括int、double、byte、boolean、char等简单数据类型,引用类型包括类、接口、数组等复杂类型。浅克隆和深克隆的主要区别在于是否支持引用类型的成员变量的复制,若克隆对象中存在引用类型的属性,深克隆会将此属性完全拷贝一份,而浅克隆仅仅是拷贝一份此属性的引用。...

2022-08-31 08:45:52 237

原创 面试题之HashMap与HashTable的区别

本文章针对比较高频的面试题:HashTable和HashMap的区别做出了回答,在继承类方面的不同、在初始化容量上的不同、在扩容方面的不同、对key和value对null值上的不同,以及最主要的线程安全问题上的不同,希望可以帮助到小伙伴。...

2022-08-30 16:09:22 313

原创 高频面试题之G1回收器

与其他GC收集器相比,G1使用了全新的分区算法并行与并发并行性:G1在回收期间,可+以有多个GC线程同时工作,有效利用多核计算能力。此时用户线程STW并发性:G1拥有与应用程序交替执行的能力,部分工作可以和应用程序同时执行,因此,一般来说,不会在整个回收阶段发生完全阻塞应用程序的情况分代收集从分代上看,G1依然属于分代型垃圾回收器,它会区分年轻代和老年代,年轻代依然有Eden区和Survivor区。但从堆的结构上看,它不要求整个Eden区、年轻代或者老年代都是连续的,也不再坚持固定大小和固定数量。...

2022-08-26 21:10:11 435

原创 面试高频的CMS回收器

CMS收集器的关注点是尽可能缩短垃圾收集时用户线程的停顿时间。停顿时间越短(低延迟)就越适合与用户交互的程序,良好的响应速度能提升用户体验。CMS的垃圾收集算法采用标记-清除算法,并且也会STW,在G1出现之前,CMS使用还是非常广泛的。一直到今天,仍然有很多系统使用CMS GC...

2022-08-26 11:33:36 375 2

原创 Java集合之Map

Map与Collection并列存在,都是属于java.util包下的平级关系。key-valueentry)Map中的key和value可以是任何引用类型的数据Map中的key用Set来存放,不允许重复,即同一个Map对象所对应的类,须重写hashCode()和equals()方法常用String类作为Map的"键"key和value 之间存在单向一对一关系,即通过指定的 key 总能找到唯一的、确定的 value。

2022-08-24 20:39:14 479 5

原创 Java集合之Set

Set接口是Collection的子接口,set接口没有提供额外的方法Set集合是一个无序不可重复的集合,如果试把两个相同的元素加入同一个Set集合中,则添加操作失败。Set判断两个对象是否相同不是使用==运算符,而是根据equals()方法没有索引,不能使用普通的for循环遍历HashSet是Set 接口的典型实现,大多数时候使用Set集合时都使用这个实现类。HashSet按Hash算法来存储集合中的元素,因此具有很好的存取、查找、删除性能。

2022-08-24 20:37:23 612

原创 Java集合之List

鉴于Java中数组用来存储数据的局限性,我们通常使用List替代数组List集合类中元素有序(存储和取出元素顺序相同)、且可重复,集合中的每个元素都有其对应的顺序索引,可以使用普通的for循环遍历List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素ArrayList、LinkedList和Vector(线程安全的)。

2022-08-24 20:26:24 539

原创 Java集合之Collection接口和Iterator接口

Iterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素。GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。Collection接口继承了java.lang.Iterable接口,该接口有一个**iterator()**方法,那么所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象。

2022-08-24 20:13:00 477

原创 Java集合之概述篇

一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。集合的使用场景Java 集合可分为Collection和Map两种体系Collection接口:单列数据,定义了存取一组对象的方法的集合List:元素有序、可重复的集合Set:元素无序、不可重复的集合Map接口:双列数据,保存具有映射关系“key-value对”的集合。

2022-08-24 20:09:08 102

原创 一篇文章彻底理解Java中的值传递

Java 程序设计语言对对象采用的值传递一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。一个方法可以改变一个对象参数的状态。一个方法不能让对象参数引用一个新的对象。

2022-08-24 17:10:17 262

原创 SpringBoot高频面试题

本文章整理了关于SpringBoot的高频面试题,包括什么是SpringBoot(对SpringBoot的理解)、SpringBoot的优点、SpringBoot 的核心注解是哪个?它主要由哪几个注解组成的、如何理解 Spring Boot 配置加载顺序、Spring Boot 的核心配置文件有哪几个?它们的区别是什么、Spring Boot 中的 starter 到底是什么、 spring-boot-starter-parent 有什么用、Spring Boot 打成的 jar 和普通的 jar 的区别

2022-08-23 16:04:21 528

原创 MyBatis的高频面试题

本文章总结了一些关系MyBatis持久层框架的高频面试题,包括MyBatis是什么、ORM是什么、 MyBatis与Hibernate做比较、#{}和${}的区别是什么、Mybatis是如何进行分页的?分页插件的原理是什么 、MyBatis实现一对一有几种方式?具体怎么操作的、Mybatis的一级、二级缓存。

2022-08-23 14:55:04 593

原创 SpringMVC的高频面试题

本文章整理了一些关于SpringMVC的高频面试题,包括SpringMVC的优点、 SpringMVC的执行流程、SpringMVC怎么样设定重定向和转发的、SpringMVC常用的注解有哪些、SpringMVC的控制器是不是单例模式、SpringMVC和struts2的区别有哪些、怎么样把某个请求映射到特定的方法上面、怎么样在方法里面得到Request或者Session、SpringMVC怎么和 AJAX 相互调用的等,适合对SpringMVC已经有一定了解的人,希望可以帮助到大家

2022-08-23 10:32:55 593 1

原创 面试题之MyBatis缓存

Mybatis中有一级缓存和二级缓存。一级缓存又被称为本地缓存,是Session会话级别的,一级缓存是MyBatis内部实现的一个特性,用户不能配置,默认情况下一级缓存是开启的,而且是不能关闭的。二级缓存是Application应用级别的缓存,它的是生命周期很长,跟Application的声明周期一样,也就是说它的作用范围是整个Application应用。 ...

2022-08-18 15:45:56 2859 1

原创 Spring面试题之BeanFactory和FactoryBean的区别

BeanFactory 和 FactoryBean的区别相同点:都是用来创建bean对象的不同点:使用BeanFactory创建对象的时候,必须遵循严格的生命周期流程,太复杂了。通过实现FactoryBean接口,可以简单的自定义某个对象的创建,并在**创建完成后,将其交给spring管理...

2022-08-17 21:43:01 908 1

原创 Spring面试题之循环依赖与三级缓存

Spring中的循坏依赖问题与三级缓存机制是非常重要的知识,也是面试中最频繁问到的问题之一。解决循坏依赖的核心在于将实例化和初始化分开操作,即提前暴露某个不完整对象的引用,在后期再进行赋值操作。这也是三级缓存存在的意义,同时三级缓存也是为了解决spring中aop的实现(代理)。这篇文章是我自己对spring循坏依赖与三级缓存的理解,希望能帮助大家,如果有错误也希望大家指正......

2022-08-17 21:00:29 2138

原创 快速排序算法

本篇文章详细介绍了单边循环快排和双边循环快排的代码实现与原理,加上我自己理解的图片,希望能帮助到大家什么是快速排序(Quick Sort):通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。.........

2022-08-13 12:31:52 514

原创 插入排序算法

插入排序保姆级教程,一篇文章带你彻底理解插入排序。什么是插入排序(Insert Sort):将数组分为两个区域,已排序的区域和未排序的区域,默认数组第一个元素为已排序的。每一轮从未排序的区域取出第一个元素,与未排序区域的元素从后往前比较,直到找到比自己小或插入到数组索引为0的位置。插入排序与选择排序比较。............

2022-08-12 10:14:27 623 2

原创 选择排序算法

选择排序保姆级教程,一篇文章带你彻底理解选择排序选择排序(SelectionSort)是将数组分为两个子集:已排序的和未排序的,每一轮从未排序的子集中选出最小的元素,放入已排序的子集的末尾。重复以上步骤,直到整个数组有序。优化思路:原来是每一轮找出该数组中的最小元素,可以优化为每一轮找出该数组中的最小元素和最大元素,分别放到数组的两端,这样就能将遍历的趟数减少一半。如果按照优化前的代码要进行14次排序,进行优化后只需要进行7次排序。......

2022-08-12 10:09:26 480

原创 冒泡排序算法

冒泡排序保姆级教程,一篇文章带你彻底理解冒泡排序。什么是冒泡排序? 冒泡排序(Bubble Sort)是一种**最基础的交换排序。由于每一个元素都像气泡一样,根据自身大小一点一点向数组的一侧移动,所以叫做冒泡排序。以升序为例,依次比较数组中相邻两个元素的大小,若arr[ i ] > a[ i+1 ],则交换两个元素,两两都比较一遍成为一轮冒泡,结果是让最大的元素排到数组最后。重复以上的步骤,直到整个数组有序。......

2022-08-12 10:05:23 488

原创 MySQL的事务

事务(Transaction)的概念:事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的**。而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事物开始以前的状态;如果单元中的所有SQL语句均执行成功,则事物被顺利执行。本文章详细介绍了事务的ACID四个特性与事务的四种隔离级别。...

2022-08-09 21:49:37 822

原创 彻底理解观察者模式

定义:观察者模式(observer)又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。...

2022-08-08 16:40:48 207

原创 彻底理解策略模式

策略模式(strategy)的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。...

2022-08-08 16:38:52 169

原创 彻底理解装饰模式

通常可以使用继承来实现功能的扩展,如果这些需要扩展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的。,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。装饰者与被装饰者拥有,继承的目的是继承类型,而不是行为。。这样可以将被装饰者的子类实例对象传入装饰者子类的实例对象中,。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(OCP)。......

2022-08-08 11:28:11 244

原创 彻底理解适配器模式

适配器模式(Adapter Design Pattern)。这个模式就是用来做适配的,将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。(例如,现在有些手机只有一个Type-C接口,不能直接插入圆孔的有线耳机,这个时候就需要一个转接头将手机和耳机相连接,而适配器就相当于转接头)。适配器模式的分类:类适配器:类适配器使用继承关系来实现;对象适配器:对象适配器使用组合关系来实现;接口适配器:接口适配器适用于不需要实现接口中所有方法的情况...

2022-08-08 11:23:11 163

原创 彻底理解代理模式

代理模式的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。本文章详细介绍了动态代理模式中的JDK动态代理和CGLIB动态代理,并对三种代理模式进行了比较......

2022-08-08 11:19:49 1259

原创 彻底理解建造者模式

事实上,在平时编写代码时,我们通常都会忽略对象的复杂性,优先考虑使用工厂模式创建对象,而不是建造者模式。因为工厂模式和建造者模式的作用都是创建一个产品对象,相对于建造者模式来说,工厂模式没有抽象建造者和指挥者,所以结构更加简洁直接,因此更常使用。(Director):调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。这样做可以使产品表示与创建之间的联系更加紧密,结构更加紧凑,同时使得建造者模式更加简洁。,由它负责该产品的组装创建,...

2022-08-04 21:33:28 203

原创 彻底理解工厂设计模式

在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。如果我们使用工厂来生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的;。...

2022-08-04 19:46:36 1167

原创 彻底理解单例设计模式

单例模式(Singleton Pattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象本文章详细讲解了实现单例模式的方式:饿汉式和懒汉式以及它们各自的实现,着重讲解了通过反射和序列化反序列化破坏单例模式的原理,讲解了为什么通过枚举创建单例是安全的......

2022-08-04 12:21:51 1413

原创 JUC并发编程(超详细)

彻底理解JUC并发编程,详细罗列了于JUC挂钩的核心知识,直击面试。随着对Java的深入学习,越发觉得JVM和JUC这些底层原理的重要性,在看完黑马程序员的JVM后,也对JUC产生了浓厚的兴趣。在学习JUC的过程中,通过老师的视频做笔记,在遇到一些不懂的或者想更深入了解的知识时,自己也去搜索了很多资料,再把老师的笔记整理一下。下面是我做的JUC的笔记目录,欢迎大家一起讨论学习。...............

2022-08-03 09:02:00 1983 1

原创 JUC-18. 常用的辅助类

本文章介绍了在并发情境下,常用的三个辅助类:CountDownLatch(内存栅栏),CyclicBarrier(循环屏障),Semaphore(信号量),并通过三个案例,详细讲接三个辅助类的用法与特点

2022-08-03 08:52:43 622

原创 JUC-17. ReadWriteLock

ReadWriteLock也是一个接口,提供了readLock和writeLock两种锁的操作机制读写锁与排他锁(独占锁)不同的是,读写锁在同一时刻可以允许多个读线程方法,但是在写线程访问时,所有的读线程和其它写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排它锁有了很大的提升。读锁:readLock是共享锁,写锁:writeLock是独占锁。读写互斥,读读共享,写写互斥。好处:读写分离锁可以有效地帮助减少锁竞争, 提升系统性能。.........

2022-08-03 08:49:27 580

原创 JUC-16. CAS

CAS的全称为(比较并交换),它是一条CPU并发原语,比较工作内存值(预期值)和主物理内存的共享值是否相同,相同则执行规定操作,否则继续比较直到主内存和工作内存的值一致为止。这个过程是原子的AtomicInteger类主要利用CASvolatile和native方法来保证原子操作,从而避免synchronized的高开销,执行效率大为提升。CAS并发原语体现在Java语言中,就是sun.misc包下的UnSafe类中的各个方法。调用UnSafe类中的CAS方法,JVM会帮我实现 CAS汇编指令。......

2022-08-03 08:44:59 779

原创 JUC-15. 原子类(Atomic)

Atomic翻译成中文是原子的意思。在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的。在我们这里 Atomic是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。所以,所谓原子类说简单点就是具有原子/原子操作特征的类。本章通过AtomicInteger、AtomicIntegerArray、AtomicReference等案例讲解原子类的使用方式.........

2022-08-03 08:42:19 789

空空如也

空空如也

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

TA关注的人

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