自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 收藏
  • 关注

原创 【MySQL】 - 索引原理与使用

前言在学习mysql的过程中, 相信大多数同学在建表查询表的时候, 是不了解mysql是如何通过我们给定的条件来找到这些数据的, 其中索引就是快速查找到数据的一个重要特性, 接着我们来介绍目录为什么会有索引呢?索引是什么?索引的优势与劣势索引的分类组合索引最左前缀原则索引的创建原则索引的数据结构聚簇索引与非聚簇索引为什么会有索引呢?索引是什么? mysql存储数据是按页存储的, 也就是一页一页的存储数据 , 如果这时候有1万条数据(假如分10页.....

2022-07-24 09:35:56 342 1

原创 你了解MySQL的架构与引擎吗?

可能很多同学学习过MySQL数据库, 并能灵活的处理表与表的关系 , 但对于MySQL底层是如何实现处理它们的就不是很了解了, 接着我们来介绍, 先看下图以上就是mysql的整体架构, 接着我们来介绍它们连接层 主要负责与客户端的连接(JDBC等), 授权认证 ,相关的安全方案等服务层 从上图可以看到, 服务层中包括SQL接口, 解析器, 查询优化器, 缓存等, 服务层主要处理SQl接口等, 所有跨引擎的功能也在此层实现 , 如存储过程,函数等 ,服务层会对我们......

2022-07-13 20:33:04 521

原创 ThreadLocal线程变量

目录ThreadLocal是什么?ThreadLocal实现原理分析ThreadLocal内存泄漏问题ThreadLocal是什么? ThreadLocal 使得我们可以创建线程私有的变量, 这个变量相对于其他线程来说是不可见的,ThreadLocal为变量在每个线程中都创建了一个副本 , 每个线程可以访问自己私有的线程变量,代码示例如下 :public class ThreadLocalDemo { //创建一个ThreadLocal对象,用来......

2022-06-26 09:37:37 658

原创 如何构造一个线程池 ?

前言 在没接触线程池之前, 我们都是在哪用到线程就在哪创建, 这样做看似方便, 但如果在高并发的前提下, 频繁的创建消耗可是一笔不小的开销, 严重则会影响到性能, 所以在此我们提出了线程池的概念 , 让线程执行完任务后并不立即销毁, 而是等待其他任务线程池概述 jdk5 之前, 想使用线程池必须自己去实现, jdk5 之后, java内置了线程池实现Executors (SingleThreadExecutor等)来创建不同类型的线程池 , 但实际开发中我们一般不使用它......

2022-06-05 09:01:07 932 11

原创 java中都有哪些锁?

相信大家在学习java的过程中, 一定听到过很多, 关于java中的锁 , 但这些锁并不完全都是指一把真正的锁, java中的锁有的是指锁的实现, 而有的指的是锁的特性, 下面来介绍目录乐观锁与悲观锁死锁可重入锁读写锁分段锁自旋锁共享锁与独占锁AQS公平锁与非公平锁偏向锁, 轻量级锁与重量级锁java对象头SynchronizedReetrantLock乐观锁与悲观锁乐观锁与悲观锁其实指的是看待并发问题的角度,并不是锁实现......

2022-06-03 08:48:31 3480 8

原创 JUC常用类 - ConcurrentHashMap并发HashMap

在jdk5之后Java 5.0 在 java.utilconcurrent 包中提供了多种并发容器类来改进同步容器的性能 , 下面我们来介绍这些类ConcurrentHashMap 我们说, hashMap是线程不安全的, 如果同时有多个线程对它进行操作就有可能会出现问题 , 所以在此之上出现了ConcurrentHashMap , 它是线程安全的 , 它保证的线程安全介于hashMap和Hashtable之间 . 其内部采用的是锁分段机制 ( jdk8启用了分段锁的方式, 使用CA...

2022-05-28 10:58:44 611 3

原创 并发编程核心问题 - 可见性,有序性, 原子性

目录可见性问题有序性问题volatile 关键字原子性问题i ++是安全的吗?如何保证原子性?CAS(Compare-And-Swap)ABA问题可见性问题 在如今的多核CPU中 , 由于CPU与内存存在速度差异, 所以每个核都有自己的缓存, 缓存是私有的, 这就导致CPU缓存与内存中的数据可能会出现不一致的情况 CPU在自己的缓冲区拿到数据进行写操作之后, 并不会立刻将这个数据更新回内存中, 如果此时来了另一个线程, 它此时应该读入的是上...

2022-05-27 13:50:30 272 7

原创 java - 并发概述

什么是并发 ?在单核CPU下, 线程是串行执行的 ,由于cpu特别快, 给人的感觉像是同时执行的(操作系统中有一个组件叫任务调度器 , 它会将CPU的时间片分给不同的线程, CPU在这些线程中不断切换), 微观上是串行的 , 宏观上看起来是并行的 , 一般我们将线程轮流使用CPU的做法叫做并发在多核CPU下, 线程是可以并行的, 现在的计算机几乎都是多核的, 每个核都会调度线程,如下图并行和并发 大家排队在一个咖啡机上接咖啡,交替执行,是并发;两台咖啡机上面接咖啡,是并...

2022-05-26 15:23:47 1306 1

原创 Java - 对象克隆

目录对象克隆浅克隆深克隆多层克隆对象克隆在讨论对象克隆之前, 可能会有人说 , 不能直接new一个吗?为什么要克隆首先关于这个问题, 直接new一个对象, 这个对象里面包含的成员变量是null的 , 那问题又来了, 我不能去一个个set对象的值吗? 当然可以, 但这样麻烦, 对象克隆采用的是native方法,效率更高那么该怎样去克隆呢? 克隆又分为浅克隆和深克隆首先这样的方式不叫克隆 (这种只能叫做引用复制):Object obj1 = new Object()

2022-05-23 13:14:06 967 6

原创 Java - 动态代理

目录代理模式静态代理动态代理jdk代理Cglib代理代理模式在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象 , 例如买菜你会去菜市场, 而不是去菜地那么为什么要使用代理模式呢 ?1. 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用; 2. 代理对象可以扩展目标对象的功能; 3. 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度; SpringAOP的..

2022-05-22 10:02:26 200 8

原创 JAVA设计模式 - 单例与工厂模式

前言 设计模式是在前人总结下 , 得出的经验, 设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解, 接着我们来看设计模式中的两种比较重要的模式 --- 单例模式与工厂模式设计模式类型 目前共有 23 中设计模式 , 根据不同功能可以分为三种类型 : 创建型模式, 结构性模式, 行为型模式 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。提供了单例、原型、工厂方法、抽象工...

2022-05-19 15:35:16 1769 1

原创 面向对象设计原则

在面向对象程序开发的过程中 , 通过前人的各种总结, 产生了许多的设计原则, 遵从这些设计原则 , 可以有效的减少错误, 提升软件的结构水平总共有7大原则, 先简短介绍, 如下图单一职责 对于单一职责原则,可以理解为一个类只负责一个功能领域中的相应职责, 即一个类不要负责太多“杂乱”的工作。在软件系统中,如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时设计或遭受到意想不到的破坏。以...

2022-05-18 19:57:23 175 2

原创 Spring中关于Bean需要了解的几点

目录BeanFactory 和 ApplicationContextSpringBean的生命周期Spring 中的 Bean 是线程安全的吗 ?Bean循环依赖 我们把由Spring创建的对象称为一个Bean , 关于Spring中 Bean存在很多的知识面, 例如生命周期, 循环依赖 , 接着我们来一一论述BeanFactory 和 ApplicationContext先来说BeanFactory , 顾名思义, 从名字上能看出, bean工厂, 是偏底...

2022-05-16 14:16:57 420 7

原创 Servlet的过滤器和Spring拦截器区别

​再一个就是使用范围上最后就是触发时机的不同了虽然这两者具有一定程度上的相同功能, 但触发的时机完全不同, 如下图 可以看到 , 过滤器是在在进入 Servlet 之前触发的 , 而 拦截器则是在进入Servlet之后 未进入控制层之前 . 回想SpringMVC , 我们的所有请求都会先到达一个叫做请求分发Servlet (DispatcherServlet), 而后它会通过映射处理器来检查我们也没有配置拦截器 , 如果有拦截器就执行拦截器, 那么拦截器

2022-05-12 20:08:26 862 3

原创 java里的四种引用

前言 各位读者朋友们, 你们好, 这节我们对 java 中的引用再做一个概述, JDK1.2 版之后,Java 对引用的概念进行了扩充, 将引用分为了 4 种类型, 强引用, 软引用, 弱引用, 虚引用接着我们来一一论述目录强引用(Strong Reference)软引用(Soft Reference)弱引用(Weak Reference)虚引用(Phantom Reference)强引用(Strong Reference) 强引用也是最常见的引用...

2022-05-11 19:30:23 221 10

原创 对象的 finalize() 机制

finalize()方法机制 Java 语言提供了对象终止(finalization)机制来允许开发人员提供对象被销毁之前的自定义处理逻辑。 当GC去回收垃圾时, 总会在即将回收之前调用这个对象的 finalize()方法 , 一个对象finalize()方法只会被调用一次 finalize()方法可以被重写,通常在这个方法中进行一些资源释放和清理的工作,比如关闭文件、套接字和数据库连接等。 我们一般最好不要主动去调用对象的finalize(...

2022-05-09 19:05:09 624 1

原创 【JVM】--- 垃圾回收

垃圾回收目录垃圾回收概述内存溢出和内存泄漏垃圾回收算法标记阶段STW(Stop-the-World)回收阶段标记 - 清除算法复制算法标记 - 压缩算法三种算法的比较垃圾回收概述 垃圾回收是java的招牌能力 ,极大的提高了开发效率, java是自动化的垃圾回收, 其他语言有的则需要程序员手动回收 , 那么什么是垃圾呢? 垃圾是指在运行程序中没有任何引用指向的对象,这个对象就是需要被回收的垃圾。如果不及时对内存中的垃圾进行清理

2022-05-08 17:35:03 510 10

原创 【JVM】--- 执行引擎

前言 ladies and gentleman , 你们好😊 ,我是羡羡 , 在前面我们介绍了运行时数据区中的各个组成部分 , 这节我们来看 jvm 的另一核心 --- 执行引擎执行引擎 jvm的主要任务是负责装载字节码到其内部 , 字节码并不等价于机器码 , 并不能直接运行在操作系统之上 , 所以想要让一个java程序运行起来 , 执行引擎的任务就是将字节码指令解释/编译为对应平台上的本地机器指令才可以 这里需要区分 1.前端编译:从...

2022-05-06 15:26:26 239 1

原创 【JVM】--- 运行时数据区

前言 ladies and gentleman , 你们好😊 ,我是羡羡 , 在上次我们提到了 jvm 概述, 已经它如何进行类加载, 在类加载之后, 数据会到达运行时数据区 , 那么运行时数据区是怎样的呢 ? 接着来一一概述1. 运行时数据区的组成 运行时数据区由5个部分组成 : 分别是: 程序计数器 , 虚拟机栈 , 本地方法栈 , java堆和方法区构成 , 如下图所示 可以注意到 , 图中方法区和堆 用了红色标注 , 其他三个是灰色 , 这是因为...

2022-05-04 15:14:57 446 10

原创 【JVM】--- 类加载

​👑1. jvm 的组成👓2. 类加载🎃3. 类加载器🥼4. 双亲委派机制☂️5. 类的主动/被动使用 1. jvm 的组成 jvm组成可分为这四个部分那么一个程序在 jvm 中的运行过程是怎样的呢? java代码首先被编译成字节码文件(Class文件), 通过不同操作系统上的 jvm 来加载解释 , 这个过程首先需要类加载器加载class文件 , 然后进行字节码校验 , 校验结束通过后通过jvm解释器翻译成机器码交给操作系统执行

2022-04-26 08:49:12 694 1

原创 java - 泛型

目录什么是泛型?泛型类,接口派生子类泛型通配符类型擦除什么是泛型? 早期的Object类型可以接收任意的对象类型,但是在实际的使用中, 会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决这个安全问题 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。就是说 , 我们可以将类型向参数一样传递过去//一个泛型类//T可以为任意字符,如A,a,B等都可以public class Dem...

2022-04-16 23:13:37 606 1

原创 Lambda 表达式 与 Stream流

Lambda Lambda 表达式是一个匿名函数,我们可以把 lambda 表达式理解为一段可以传递的代码(将代码段像数据一样传递)。使用它可以写出更简洁, 更灵活的代码。作为一种更紧凑的代码风格,使 java 语言的表达式能力得到的提升。 我们可以知道, Lambda表达式是为简化语法而存在的ArrayList<String> list = new ArrayList<>();list.add("a");list.add("b");...

2022-04-13 12:59:41 1857 2

原创 关于Redis的那些事

Redis💍 我们知道 , redis 是一款优秀的非关系型数据库 , 使用 C 语言编写的,支持网络交互的, 内存中的Key-Value 数据结构存储系统,它可以用作数据库、缓存和消息中间件。 🎩接着我们来看 , 关于Redis需要了解的几个问题目录💍关系型数据库与非关系型数据库💄主从复制🎩哨兵机制💍缓存问题👑缓存穿透👑缓存击穿👑缓存雪崩👑总结关系型数据库与非关系型数据库 关系型数据库 ...

2022-04-12 16:00:02 221 1

原创 Spring终章 - Spring boot

1. 什么是Spring boot ? 我们知道, spring虽然是轻量级的框架 , 但配置却是重量级的 , 我们需要编写大量的xml文件,并且还需要导入大量的 jar 坐标 , 一旦选错版本 , 就会导致很多因版本不兼容的问题 . 所以在这种不方便的情况之下 , spring boot 便诞生了 , 它又对spring进行了封装 , 使得我们不用考虑这些繁琐的配置 , 全身心投入到业务中 Spring Boot以约定大于配置的核心思想,从而使开发人员不再需要定义样...

2022-04-09 12:05:38 747

原创 SpringMVC - 拦截器

在SpringMVC中 我们说到了拦截器 , 它会在映射处理器(HandleMapping)执行时检查我们访问的地址是否配置拦截器 , 在拦截器中实现一些功能 SpringMVC 定义了拦截器接口 HandlerInterceptor该接口中定义了三个方法,这三个方法的调用时在 SpringMVC 框架内部完成的, 调用这个三个方法的时候,其参数的值也是从框架内部传递进来的。首先我们来看第一个方法 :boolean preHandle() ...

2022-04-08 12:46:38 228

原创 认识SpringMVC

SpringMVC是 Spring中的一个模块 , 是对 Servlet 进行了封装

2022-04-06 23:20:40 982

原创 笑着学Spring - (3) - Spring事务管理

前言 ladies and gentleman,你们好😊 ,我是羡羡 ,这里是笑着学 Spring 第三期 , 关于Spring事务管理的讲解, 老样子, 记得笑着学,不然学不会😎目录👑什么是事务?👑Spring事务配置👑Spring事务传播行为👓1. PROPAGATION_REQUIRED👓2. PROPAGATION_SUPPORTS👓3. PROPAGATION_REQUIRES_NEW👑声明式事务失效什么是事务?事务...

2022-04-05 17:14:27 2448 5

原创 笑着学spring - (2) - SpringJDBC 与 AOP介绍

前言这节我们来介绍 Spring JDBC 与 AOPSpring JDBC Spring 是个一站式框架:Spring 自身也提供了控制层的 SpringMVC和持久层的 Spring JdbcTemplate。首先我们需要在maven导入Spring JDBC的 jar 依赖<!-- spring-jdbc --><dependency> <groupId>org.springframework</grou...

2022-04-04 19:41:13 1239 2

原创 笑着学Spring - (1)

前言 Spring是什么? Spring 是于 2003 年兴起的一个轻量级的,非侵入式的,IOC 和 AOP 的 Java 一站式开发框架,它是为了简化企业级应用开发而生的。这里我们简单介绍一下这几个词轻量级Spring 框架使用的 jar 都比较小,一般在 1M 以下或者几百 kb。Spring核心功能的所需的 jar 总共在 3M 左右。 Spring 框架运行占用的资源少,运行效率高。非侵入式编写一些业务类的时候...

2022-04-03 18:07:56 473 2

原创 mybatis - 动态sql

动态 SQL(Dynamic SQL)mybatis最强大的功能之一便是它的动态sql能力 借用官方文档的一段话 : 如果您以前有使用JDBC或者类似框架的 经历,您就会明白把SQL语句条件连接在一起是多么的痛苦,要确保不能忘记空格或者不要在 columns列后面省略一个逗号等。动态语句能够完全解决掉这些痛苦。那么如果没有这种功能到底有多痛苦呢 ? 我们来举例说明 这是一张表 , 试想如果我们通过 name和 age来查询表信息时 , sql语句中肯定会存在...

2022-03-31 20:44:23 370

原创 mybatis - 懒加载(嵌套查询)

懒加载 ,也称为嵌套查询 需要查询关联信息时,使用 Mybatis 懒加载特性可有效的减少数据库压力, 首次查询只查询主表信息,关联表的信息在用户获取时再加载。 Mybatis 一对一关联的 association 和一对多的 collection 可以实现懒加载。懒加载时要使用resultMap,不能使用 resultType。这里我们以员工表和部门表为例通过deptId 与 部门表 id 关联我们这里首先需要开启一个设置<sett...

2022-03-30 16:47:16 1977

原创 mybatis - resultMap的定义与使用

resultMap 我们知道 ,mybatis框架存在pojo对象映射 , 直接将查询到的结果封装到对象中给我们返回, 但如果我们实际返回的对象需要去关联其他的对象(也就是说,其他类的对象作为我们这个类的成员变量),那么这时候使用resultType肯定是不行的 这里我们则需要去定义 resultMap来完成我们的需求定义resultMap的过程就是描述如何从数据库结果集中去加载对象定义 :...

2022-03-29 23:58:34 2710

原创 初识mybatis框架

什么是mybatis ? MyBatis 是一款一流的支持自定义 SQL、存储过程和高级映射的持久化框架。MyBatis 几乎消除了所有的 JDBC 代码,也基本不需要手工去设置参数和获取检索结果。MyBatis 能够使用简单的XML 格式或者注解进行来配置,能够映射基本数据元素、Map 接口和 POJOs(普通 java 对象)到 数据库中的记录。简单理解的话 , 就是与专门与数据库交互的框架mybatis架构 :1. 核心配置文件MyBatis 的配置文件包含了对 ...

2022-03-28 18:27:12 1043

原创 搭建框架第一步 : 配置maven

maven 概述 :Maven 是 Apache 软件基金会的一个开源项目,是一个优秀的项目构建工具,它用来帮助开发者管理项目中的 jar,以及 jar 之间的依赖关系、完成项目的编译、 测试、打包和发布等工作。在java-ee的学习过程中, 我们需要导入很多jar包 , 极不方便 , 有些jar包还存在相互依赖的关系 , 我们一直通过手动导入则会出现很多问题 , 学习了maven之后,我们就可以交给maven来管理它们Pom(Project Object Model 项目对象模型..

2022-03-27 22:00:00 839

原创 jQuery封装Ajax,java对象转json

Ajax 全称为:“Asynchronous JavaScript and XML”(异步JavaScript 和 XML)为什么要采用异步的方式来给后端发送请求呢?介绍异步之前, 我们先来了解同步的方式这里我们做一个示例 :<!-- 建立一个表单来给后端提交数据--><form action="ServletDemo" method="post"> 账号 : <input type="text" name="ac...

2022-03-27 14:01:25 1967

原创 java如何连接数据库? --- JDBC技术

JDBC(全程Java DataBase Connectivity)sql注入,我们知道, 数据库的类型有多种 , 那么java在连接各种各样的数据库时, 直接实现好连接方式并不是最优选择, 所以java向外提供了接口 , 只需要定义好规范, 由数据库开发商来实现如何连接即可搭建JDBC :

2022-03-25 21:59:58 2133

原创 MySQL- 一篇让你彻底了解多表的关联查询

前言在数据库的设计中, 我们通常都是会有很多张表 , 通过表与表之间的关系建立我们想要的数据关系, 所以在多张表的前提下, 多表的关联查询就尤为重要数据库设计范式目前数据库设计有五种范式 , 一般我们数据库只需要满足前三项即可第一范式 : 确保每列保持原子性什么是原子性? 意思就是不可再分的,例如下联系方式有 QQ,微信 , 电话等等 , 显然此列不满足原子性, 如果是单独的QQ或者电话等,则只有一个, 满足第一范式第二范式 : 要有主键,要求其他字段都依赖于主键为什么主

2022-03-23 11:29:45 2651

原创 mysql - 子查询

出现在其他语句中的select语句,称为子查询或内查询;外部的查询语句,称为主查询或 外查询.-- 子查询-- 查询的条件来自于另一查询的结果SELECT * FROM t_user WHERE number=(SELECT number FROM t_user WHERE NAME='张三')当然子查询也有类型,分为以下几种 :标量子查询(结果集只有一行一列) 列子查询(结果集只有一列多行) 行子查询(结果集有一行多列)(较少) 表子查询(结果集...

2022-03-22 15:38:16 2410

原创 mysql条件查询中有哪些常用的操作?

顾名思义, 条件查询就是使用where字句 , 将满足条件的数据筛选出来语法:select <结果> from <表名> where <条件>这里我们以t_user表为例-- 查询性别为男的信息SELECT * FROM t_user WHERE sex='男'-- 查询性别不为男的信息SELECT * FROM t_user WHERE NOT sex='男'-- 查询性别为男并且年龄为20的信息SELECT * FROM t_user

2022-03-21 20:55:07 813

原创 mysql查询常用函数介绍

目录​单行函数1. 字符函数2.逻辑处理3.数学函数4.日期函数分组函数单行函数 : 对每一行操作 分组函数 : 分组操作这里我们以t_user表为例:单行函数1. 字符函数length():获取参数值的字节个数 char_length()获取参数值的字符个数 concat(str1,str2,.....):拼接字符串 upper()/lower():将字符串变成大写/小写 substring(str,pos,...

2022-03-20 23:42:03 3370

空空如也

空空如也

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

TA关注的人

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