自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL:分库分表

先来一张熟悉的主从架构:如果现在有海量的数据需要存储,这个架构就不能解决了,因为现在的主库和从库存储的·数据都是一样的,主要解决的时访问的压力,是解决不了海量的数据存储的。现在就需要分库分表了。

2023-08-17 14:36:33 105

原创 MySQL:主从同步

当主数据发生变化(比如写操作),主库会把这些变化的数据写入到BINLOG中,这时从库有一个IOThread线程,专门去主库的BinLog日志中去读取数据,读取完成后会将数据写入到从库的中继日志中(Relay Log),再由从库的SQLThread线程读取中继日志,把命令再重新执行一下。一个Java用于首先要去连接数据库的中间件,如何中间件里面至少连接两个库,主库和从库,主库负责写数据,从库负责读数据,当主库写数据的时候就需要把数据同步到从库中,这就是主从同步。

2023-08-17 10:35:22 111

原创 MySQL:MVCC

MVCC(多版本并发控制,Multiversion Concurrency Control)是一种数据库并发控制的策略,指维护一个数据的多个版本,使得读写操作没有冲突。假设现在同时有四个事务,对同一张表的同一行记录进行操作:如图,纵轴为时间线,当前事务5中的两次查询查询的分别是哪个事务版本的记录呢?想确定这个问题就需要用到MVCC了,MVCC最主要的功能就是确定在多个事务并发的情况下,到底该访问哪个版本。MVCC的具体实现,主要依赖于数据库记录中的。

2023-08-16 13:33:44 91

原创 MySQL:调优

在当今数据驱动的世界中,MySQL数据库作为一种广泛使用的关系型数据库管理系统,扮演着至关重要的角色。然而,随着数据规模和工作负载的增长,我们常常面临性能瓶颈和查询效率降低的挑战。那么,如何优化MySQL数据库以提高其性能和响应能力呢?

2023-08-14 18:10:25 55

原创 Mybatis

延迟加载(Lazy Loading)是指在需要使用关联对象时才进行数据库查询,而不是在加载主对象时就立即查询所有关联对象的数据。有两张表,用户表和订单表,用户和订单是一对多的关系,左侧是用户实体类 ,右边是订单的实体类。用户的实体类有一个成员变量叫做orderList,这里面封装的都是订单,也就是当前用户的订单列表。如果我们查询用户的时候就把用户的订单也查询出来,就属于立即加载。如果查询用户的时候,先不查询订单数据,而是当需要订单的时候再查询订单,就是延迟加载。

2023-08-11 12:02:44 29

原创 关于Spring的那些事儿

在当今的软件开发领域,Spring已成为 Java 开发者们不可或缺的利器之一。它是一个功能强大且广泛应用的应用程序开发框架,以其灵活性、可扩展性和松耦合的特性而备受赞誉。然而,要真正理解 Spring 在背后所做的事情,我们需要深入探索其核心原理。

2023-08-08 17:38:12 75

原创 Redis精讲

当今互联网应用程序中,高效地处理数据是至关重要的。Redis是一种快速、开源的NoSQL数据库,可以轻松地处理各种类型的数据。在本篇技术博客中,我们将深入了解Redis的工作原理、常见用例以及如何使用Redis来提高应用程序的性能和可伸缩性。Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如与范围查询,和索引半径查询。Redis 内置了和不同级别的, 并通过和自动提供高可用性(high availability)。

2023-07-26 14:19:26 344

原创 阿里优酷二面

3)并发控制:加锁,我的理念是牺牲效率上悲观锁,因为乐观锁本身自旋的原因有可能会不公平。展开聊了聊CAS的原理,以及hotsport的源码,实现类就说了atomic那一些。本质上就素工具,就像手机让修BB机的失业了,但又促成了手机行业,我们要学会利用工具。说了哈希,B+树,全文,对B+树说了一下具体,聊了聊磁盘预读,IO次数等等。11.如果要做一个秒杀项目,并发量很高,如果要你实现你会怎么做,讲讲思路?a:是的,不光垃圾回收,JVM很多模块包括一些中间件都是阿里自己研发的。

2023-04-21 18:29:24 299 1

原创 MYSQL:锁机制

MySQL 中的锁机制可以分为行锁和表锁。行锁是针对数据表中某一行记录进行加锁,而表锁则是对整个数据表进行加锁。它们的底层实现原理如下MySQL 中的行锁是通过在索引上加锁来实现的。在执行 SQL 语句时,MySQL 会根据 SQL 语句中的条件在索引上定位到对应的行,然后对这行记录加锁。如果该行记录已经被其他事务加锁,那么当前事务就需要等待,直到该行记录被释放锁为止。MySQL 中的行锁有两种类型:共享锁和排他锁。共享锁允许多个事务同时加锁同一行记录,但是不允许任何事务对该行记录进行修改操作。

2023-04-21 13:37:15 200

原创 设计模式精讲:单例模式

一个类的静态内部类,在外面的类被加载的时候,它里面的静态的类是不会被加载的,只有当我们调用getInstance方法的时候才会被加载。实际上要加载一个类我们也可以这么来写:Class.forName("类的名字"),只把class放到内存里而不进行实例化,如果我们用这种方式把Mgr01加到内存之后,这个static的INSTANCE是实例化的,因为他是一个静态变量,load到内存就会初始化。这两种方法的缺点就是,实例在类加载时就被创建了,如果应用程序不需要使用该实例,那么就会浪费一定的内存空间。

2023-04-18 13:33:21 96

原创 番外:关于Object o=new Object();夺命七连问,没有深厚的JVM功力,你答不出这道题

今天的话题我们围绕一行短短的代码说起。

2023-04-17 20:51:28 322 1

原创 Java线程池

在Java中,线程池是一种基于池化思想管理线程的工具。线程池是通过java.util.concurrent包中的Executor框架来实现的。Executor框架提供了一个Executor接口和一个ThreadPoolExecutor类,可以用来创建和管理线程池。通过使用线程池,我们可以将任务提交给线程池,线程池会从池中选择一个可用的线程来执行任务。当线程执行完任务后,它将返回到池中,等待下一个任务的到来。线程池可以避免我们频繁的创建线程和销毁现场,带来不必要的性能损耗。@Override。

2023-04-13 22:30:40 48 1

原创 JAVASE常见面试题总结

Java面向对象编程的特性包括:封装(Encapsulation):将数据和操作数据的方法封装在一起,以避免外部的直接访问和修改,从而确保数据的安全性和一致性。继承(Inheritance):通过继承机制,一个类可以从另一个类中继承属性和方法,从而减少代码的重复性,并且提高代码的可重用性和可维护性。多态(Polymorphism):通过多态机制,一个对象可以具有多种形态,即同一个方法可以根据不同的对象调用出现不同的行为,从而提高代码的灵活性和可扩展性。

2023-04-13 14:51:16 83 2

原创 JVM:垃圾回收

不管我们写什么语言,我们都需要向内存当中分配数据,在C语言当中,我们使用malloc方法来给变量分配内存。在C++中我们new一个对象来分配内存。然而,所有语言都会面临一个问题:当我分配了一块内存空间之后,我们需要把它回收掉。在C/C++中我们一般称之为手工回收。也就是需要开发人员自己回收内存。手工回收在调试程序的时候有巨大的困难。比如假设我们忘记了回收内存,别的变量就无法再占有这块内存,这就造成了内存泄漏。再比如我们判断失误多回收了一次,及会造成不可预估的损失。

2023-04-11 18:35:18 707 1

原创 JVM:类加载机制

除了启动类加载器、扩展类加载器和应用程序类加载器之外,Java 类加载器还支持自定义类加载器,也就是说,开发人员可以通过继承 java.lang.ClassLoader 类来实现自己的类加载器。自定义类加载器通常用于加载一些特殊的类,比如从网络或者数据库中加载类,或者实现一些特殊的类加载策略等。

2023-04-10 17:45:53 76

原创 JVM:锁的本质

当涉及到多线程编程时,锁是一个非常重要的概念。锁是一种同步机制,用于控制对共享资源的访问。在并发编程中,如果多个线程同时尝试访问同一个共享资源,可能会导致数据竞争和不一致的结果。锁的作用是确保同一时间只有一个线程可以访问共享资源,从而避免数据竞争和不一致的结果。但是,锁的本质是什么?为什么锁是如此重要?在本文中,我们将探讨锁的本质,并深入了解锁的工作原理。

2023-04-10 12:42:12 295 1

原创 数据库(4):MySQL索引

MySQL索引是一种数据结构,它可以提高数据库查询的速度和效率。通过使用索引,MySQL可以更快地查找和检索数据,从而减少查询所需的时间和资源。MySQL支持多种类型的索引,包括B-tree索引、哈希索引和全文索引。其中,B-tree索引是最常用的一种索引类型,它可以在大多数情况下提供快速的查询性能。可以将索引理解为数据库中的目录。就像书籍的目录可以帮助读者快速找到所需的内容一样,索引可以帮助数据库快速定位和检索数据。索引存储了数据表中某些列的值和这些值所在的行的位置,通过索引可以直接定位到所需的数

2023-04-01 13:51:28 102

原创 阿里一面面经

使用jwt认证和传统cookie认证的区别?如何通过关键字查询文章信息?concurrenthashmap的锁机制。MySQLb+树索引为什么适合范围查询。arraylist线程安全吗?spring的aop怎么实现的。bean创建对象的具体过程?联合索引,最左匹配原则?为什么使用最左匹配原则?mysql如何实现原子性。jwt生成令牌的过程?mysql锁机制有哪些。可以打破双亲委派模型吗。项目:登陆注册的细节。常用的设计模式有哪些。

2023-03-30 10:50:53 57

原创 HTTP与HTTPS

因为GET请求的请求参数可以在URL中看到,可以方便地将请求的URL保存下来,方便下次使用。HTTPS是在HTTP的基础上加入了SSL/TLS协议,通过使用加密算法对数据进行加密和解密,从而保证了数据的安全性和完整性。HTTPS(超文本传输安全协议)是一种安全的HTTP协议,它是在HTTP的基础上加入了SSL/TLS协议,通过使用加密算法对数据进行加密和解密,从而保证了数据的安全性和完整性。因此,GET请求的请求参数可以在URL中看到,而POST请求的请求参数则不会在URL中显示。

2023-03-29 17:43:32 70

原创 博客平台面试

目录Spring为什么选择springboot为什么不用springcloudMybatisPlus分页查询你是如何实现文章的分页查询的MyBatis的分页查询是如何实现的Mybatis Plus 的分页查询是如何实现的?为什么使用mybatisplus而不是mybatisVO封装VO封装应该注意什么SpringSecurity如何实现登陆注册功能的为什么使用SpringSecuritySpringSecurity是如何基于JWT保证安全

2023-03-29 14:39:09 385

原创 MySQL:事务

事务是指在数据库中执行的一系列操作,这些操作作为一个整体被视为一个单独的工作单元,要么全部执行成功,要么全部执行失败。事务通常用于保证数据库中数据的完整性和一致性,可以将多个操作组合成一个事务来执行,从而避免了在多个操作之间出现数据不一致的情况。

2023-03-28 22:47:56 181

原创 数据库(2):MySQL基本操作

MySQL是一种开源的关系型数据库管理系统,是目前最流行的关系型数据库之一。它支持多种操作系统,包括Linux、Windows、Mac OS等,同时也支持多种编程语言,如Java、Python、PHP等。MySQL具有以下特点:1.MySQL数据库是用C和C++语言编写的,以保证源码的可移植性2.支持多个操作系统例如:Windows、Linux、Mac OS等等3.支持多线程,可以充分的利用CPU资源4.为多种编程语言提供API,包括C语言,Java, PHP、Python、go语言等。

2023-03-28 22:12:03 108

原创 数据库(1)

当我们需要从关系型数据库中检索、插入、更新或删除数据时,SQL(Structured Query Language)就是我们的得力工具。SQL 是一种被广泛使用的编程语言,用于管理和操作关系型数据库。它可以让我们轻松地执行各种数据库操作,从而使我们的工作更加高效和便捷。在本篇博客中,我们将深入了解 SQL 的基本概念和语法,以及它在实际应用中的一些高级特性。

2023-03-28 12:16:42 68

原创 TCP/IP协议

当我们在浏览器中输入一个网址,点击回车后,网页就会在我们的屏幕上展现出来。但是,这背后发生了什么呢?为了让我们能够访问互联网上的资源,计算机之间需要进行通信。而这种通信是通过一系列的协议来实现的。其中,TCP/IP协议是互联网最基础的协议之一,它负责将数据从一个计算机传输到另一个计算机。本文将详细介绍TCP/IP协议的工作原理和实现方式,以及它在互联网中的应用。

2023-03-27 19:47:35 264 1

原创 HashMap的底层原理

在Java编程中,我们经常需要在一个数据集合中查找特定的元素。如果数据集合很小,这个过程可能很简单,我们可以使用传统的查找方法,例如线性查找或二分查找。但是,如果数据集合很大,这些传统的查找方法可能变得非常耗时,效率很低。那么有没有一种更快速、更高效的方法来查找元素呢?答案是肯定的,这就是HashMap这个数据结构。在本文中,我们将深入探讨HashMap的底层原理,了解它是如何工作的,以及为什么它是如此强大和高效的。

2023-03-25 12:21:45 1234 4

原创 JVM(1):初步了解

任何语言,只要能编译成class,符合class文件的规范,都可以在JVM上运行,不管你是谁,只要你编译成class,你就是我的菜。我们需要避免一个误区:JVM并不是只用于执行java的虚拟机,很多编程语言都可以通过JVM来实现跨平台执行,比如:Java,Scala,groovy等等,据统计,一共有一百多种编程语言是可以直接跑在JVM虚拟机上的。JVM是一种规范,是一个被虚拟出来的计算机,可以想象成它是一个单独的机器,他有自己的CPU,有自己的指令集,有自己的汇编语言,相当于有自己的操作系统。

2023-03-24 13:42:48 176 1

原创 哆啦A梦带你了解贪心算法

以此类推,每拿起一个袋子都和自己手里的比较一下,如果比自己手里的其中一个数量多就替换掉,如果没有手里的多就继续往后看,每次都选择当前条件下最多的两个袋子,当哆啦A梦把所有的袋子都看过一遍之后,他手上拿的一定是最多的两袋铜锣烧,这便是贪心算法的核心思想:即。哆啦A梦拿起第四个袋子,发现有17个,比之前的袋子里都要多,由于所以哆啦A梦只需要拿到最多的两个袋子就可以了,所以他放弃了有12个铜锣烧的第三个袋子,拿起了第四个袋子,这样他可以吃到15+17=32个铜锣烧。最后,程序会输出找零的方案。

2023-03-22 15:35:25 125 2

原创 浅谈对死锁的理解

本文的目的是深入浅出地介绍死锁问题,包括死锁的定义、特点、原因和解决方法。我们将通过实例代码和图表来说明死锁问题,并提供一些实用的解决方案,以帮助读者更好地理解和解决死锁问题。

2023-03-20 18:46:28 627 10

空空如也

空空如也

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

TA关注的人

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