自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

技术积累,技术分享

学习就像逆水行舟,不进则退

  • 博客(239)
  • 资源 (1)
  • 问答 (4)
  • 收藏
  • 关注

原创 执行了git commit后,后悔了怎么办?

当我们执行完上述命令之后,我们的文件就从未被git管理添加到git的暂存区(git add),然后又提交到了git的本地仓库(git commit)。ps:如果我们仅仅是commit的消息内容填错了才后悔的,那么我们也可以直接修改commit的内容,使用如下命令。这样就成功撤销了commit,如果想要连着add也撤销的话,那如果我们后悔了,想要撤销这次的commit怎么办?当我们修改了本地代码,然后使用git就会有如下操作。然后会进入vim,更改message即可。(删除暂存区(工作空间)的改动代码)。

2023-02-28 23:05:38 545 1

原创 刚工作不知道B端、C端什么意思?

B端、C端通常用于描述软件产品的面向客户。

2023-02-26 11:59:23 2041

原创 MapStruct使用指北

MapStruct 是一个注释处理器,它被插入到 Java 编译器中,可以在命令行构建(Maven、Gradle 等)中使用,也可以在 IDE 中使用。MapStruct 使用合理的默认值,但在配置或实现特殊行为时会避开您的方式。与其他映射框架相比,MapStruct 在编译时生成 bean 映射,这确保了高性能,允许快速的开发人员反馈和彻底的错误检查。MapStruct的原理是生成和我们自己写的代码一样的代码,这意味着这些值是通过简单的。生成的映射代码使用简单的方法调用,因此速度快、类型安全且易于理解。

2023-02-14 23:44:03 648

原创 常见的函数式接口介绍

了解常见的函数式接口

2022-06-17 21:19:23 1317

原创 JVM超全面试题

双亲委派机制说一下工作流程双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子类加载器才会尝试自己去完成加载优势使用双亲委派机制来组织类加载器之间的关系,一个显而易见的好处就是Java中的类随着它的类加载器一起具备了一种带有优先级的层次关系。例如类java.

2022-05-20 16:52:49 979

原创 Spring中的事件监听

案例分析引入事件监听首先我们假定一个场景,我们此时有一个登录的功能,根据用户名和密码进行登录。然后此时想要添加一个新的功能,如果一个用户登录成功就给这个用户发送短信提醒该用户(正常情况是异地登录才会发送短信提醒,这里为了简化需求,只要登录就发送短信提醒用户)我们先来看一种实现方式:// 注意这里是伪代码public void login(String username, String password) { if(根据username查看数据库当中是否有这个用户) { 获取这个用户的数据库中的

2022-05-16 20:21:38 3857 6

原创 二叉堆实现的优先队列

什么是优先队列?优先队列这个数据结构的特点就是在我们执行插入或者删除元素的操作时候,优先队列自己会来维护队列中元素的顺序,不用我们自己去重新对队列中的数据进行排序,所以优先队列中就有了两个主要的 API,分别是 insert 插入一个元素和 delMax 删除最大元素(如果底层用最小堆,那么就是 delMin)优先队列底层的实现原理就是对二叉堆这个数据结构的使用,因为优先队列底层使用的是二叉堆,所以我们可以用O(1)的时间复杂度去获取优先队列中的最大值(这里我们以最大堆来说,所以获取的是最大值)好,到

2022-05-15 19:21:28 925

原创 备战秋招2020/5/1

个人觉得JVM内存模型还是要好好背背的,所以这点东西背了好多天(因为每天可能就背一个小时左右)1、说一下JVM内存模型JVM内存模型包括:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区程序计数器程序计数器是一块比较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。.

2022-05-01 10:07:15 164

原创 多态之“重写”和“重载”在Java虚拟机之中如何实现?

这里我们解释关心不是重写和重载的语法实现,而是虚拟机如何正确定位到目标方法静态分派java虚拟机实现重载就是通过静态分派实现的。什么是静态分派呢?所有依赖静态类型来决定方法执行版本的分派动作就是静态分派。静态分派的最典型应用表先就是方法重载。静态分派发生在编译阶段,因此确定静态分派的动作实际上不是由虚拟机来执行的,所以在有的资料中也把这类方法的调用叫做解析。分派的意思你可以理解为是确定调用方法版本的一个过程...

2022-04-21 08:42:18 173

原创 HashMap源码分析

以下源码分析基于JDK8的实现希望你在阅读时,并不是第一次了解HashMap的源码哈希表在分析HashMap之前我们需要先了解什么是Hash表。Hash表也称为散列表,也有直接译作哈希表,Hash表是⼀种根据关键字值(key - value)⽽直接进⾏访问的数据结构。也就是说它通过把关键码值映射到表中的⼀个位置来访问记录,以此来加快查找的速度。在链表、数组等数据结构中,查找某个关键字,通常要遍历整个数据结构,也就是O(N)的时间级(很好理解,因为我们不知道查找的元素在什么位置,所以需要从头开始查.

2022-04-19 20:11:37 586

原创 备战秋招2022/4/17

1、什么时候会触发类的初始化关于在什么情况下需要开始类加载过程的第一个阶段“加载”,《Java虚拟机规范》中并没有进行强制约束,这带你可以交给虚拟机的具体实现来自由把我。但是对于初始化阶段,《Java虚拟机规范》则是严格规定了有且只有六种情况必须立即对类进行“初始化”(而加载、验证、准备阶段自然需要在此之前开始):遇到new、getstatic、putstatic或invokestatic这四条字节码指令时,如果类型没有进行过初始化,则需要触发其初始化阶段,能生成这四条指令的典型场景有:使用new

2022-04-17 10:52:53 892 2

原创 JDK8中HashMap索引计算的巧妙设计

HashMap中是如何计算索引的呢?其实大体上可以分类两步:计算hash值根据hash值计算元素的下标对应的源码:1、计算hash值:// 最终返回的h就是hash值(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)2、根据hash值计算元素的下标// n表示数组的长度,i就是最终计算出来的元素应该存放的下标p = tab[i = (n - 1) & hash]添加的元素应该存放的数组中的下标,是

2022-04-16 11:03:38 1270 2

原创 备战秋招2020/4/10

1、谈谈类加载的过程类加载的过程分为五个阶段进行,分别是加载、验证、准备、解析和初始化这几个动作。1、加载在加载阶段,Java虚拟机会完成三件事情通过一个类的全限定类名来获取定义此类的二进制字节流将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口衍生问题:数组和类的加载是有区别的类加载阶段的顺序问题2、连接连接之验证验证是连接阶段的第一步,这一阶段的目的是确保C

2022-04-10 19:40:27 361

原创 备战秋招2022/4/2

不用一字不拉背下来 ,不看笔记能用自己的语言叙述出来即可1、JDBC、Tomcat为什么要破坏双亲委派模型?JDBC为什么要破坏双亲委派模型问题背景:在JDBC 4.0之后实际上我们不需要再调用Class.forName来加载驱动程序了,我们只需要把驱动的jar包放到工程的类加载路径里,那么驱动就会被自动加载。这个自动加载采用的技术叫做SPI,数据库驱动厂商也都做了更新。可以看一下jar包里面的META-INF/services目录,里面有一个java.sql.Driver的文件,文件里面包含.

2022-04-02 19:14:56 1471

原创 备战秋招2022/3/28

过分高估自己了,每日5题,完成不了,时间不够,因为对每一个知识点深入查缺补漏,然后记住需要的时间很多1、详细说说类加载器启动类加载器(Bootstrap Class Loader):启动类加载器负责加载存放在<JAVA HOME>\lib目录,或者被Xbootclasspath参数所指定的路径中存放的,而且是java虚拟机能够识别的(按照文件名识别,如rt.jar、tools.jar,名字不符合的类库即使放在lib目录也不会被加载)类库加载到虚拟机的内存中。启动类加载器无法被Java程.

2022-03-28 16:45:02 1312

原创 JMM是什么?

以下内容参考数据《深入理解Java虚拟机》第三版介绍java内存模型的作用Java内存模型是来**屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。**的一种规范(以独立的以JSR形式进行维护,JSR就是Java规范提案)。介绍java内存模型的目的java内存模型的主要目的是定义程序中各种变量的访问规则,及关注在虚拟机中把变量值存储到内存和从内存取出变量值这样的底层细节介绍java内存模型的规定java内存模型规定了所有的变量都应该存放在主存.

2022-03-26 10:45:14 647

原创 备战秋招,明日5题

备战秋招,涉及知识点jvm、juc、mysql、redis。每天五道题,一个知识点一道,进行复习即背诵。提前一天准备出明天要复习的知识点即背诵的八股1、双亲委派机制说一下Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象,而且,加载某个类的class文件时,Java虚拟机采用的是双亲委派机制,即把请求交由父加载器处理,它是一种任务委派模式工作流程双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求,他首先不.

2022-03-19 20:20:53 913

原创 jdk8虚拟机参数列表 链接地址

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

2022-03-16 13:58:19 999

原创 比较器java.util.Comparator

自然排序:java.lang.Comparable定制排序:java.util.Comparator我们可能在写程序的时候会有对对象排序的一个需求,可能是根据某个对象的某个属性进行比较排序。举例:比如有10个手机商品对象,我们要把这个对象按照价格进行一个从小到大的排序。对象类public class Phone{ // 商品编号 private int ph_no; // 为了方便举例,使用int类型表示价格。 // 注意真实开发中价格应该使用 // java.math.Big.

2022-03-15 19:02:52 1633

原创 磁盘基本知识介绍

数据库的数据存储在文件系统中。文件系统是操作系统用来明确存储设备或分区上的文件 的方法和数据结构(存储设备常见的是磁盘,也有基于NAND Flash的固态硬盘)磁盘上数据必须用一个三维地址唯一标示:柱面号、盘面号、块号(磁道上的盘块)。硬盘只是磁盘的一种,或说是经典代表,以下通过硬盘模型图讲解磁盘中的各个概念。硬盘整体模型图硬盘模型图磁盘重点概念盘片(platter):硬盘中承载数据存储的介质硬盘一般由多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。受到硬盘整体体积

2022-01-30 13:32:20 4648

原创 mysql配置文件的使用

配置文件格式与在命令行中指定启动选项不同的是,配置文件中的启动选项被划分为若干个组,每个组有一个组名,用中括号[]扩起来,想这样[server](具体的启动选项...)[mysqld](具体的启动选项...)[mysqld_safe](具体的启动选项...)[client](具体的启动选项...)[mysql](具体的启动选项...)[mysqladmin](具体的启动选项...)像这个配置文件就定义了许多个组,组名分别时server、mysqld、mysqld_sa

2022-01-27 10:58:02 1805

原创 .frm在MySQL8中不存在了,那去哪里了呢?

MySQL8.0中不再单独提供b.frm,而是合并在b.ibd文件中。如何证明这件事呢?我么可以通过解析Mysql8的ibd文件,来证明这个事情。Oracle官方将frm文件的信息以及更多信息移动到叫做序列化字典(Serialized Dictionary Information,SDI),SDI倍写在ibd文件内部。为了从IBD文件中提取SDI信息,Oracle提供了一个应用程序ibd2sdi这个工具不需要下载,MySQL8自带了这个工具,只要我们配置好了环境变量就可以到处使用查看表结构到存储

2022-01-26 12:32:50 4342

原创 HashSet底层结构和源码分析

HashSet底层是HashMap添加一个元素时,先得到hash值,然后转换成索引值如果没有直接加入如果有调用equals比较,如果相同,就放弃添加,如果不相同,则添加到最后在java8中,如果一条链表的元素个数到达TREEIFY_THRESHOLD(默认是8),并且table的大小大于等于MIN_TREEIFY_CAPACITY(默认是64),就会进行树化(红黑树)...

2022-01-09 20:00:33 5253

原创 ArrayList底层结构和源码分析

ArrayList底层是数组实现的,可以进行动态扩容,扩容大小为原来的1.5倍,虽然可以通过动态扩容,但是数组非常大时会特别浪费空间,因此建议初始化时预估数组大小。ArrayList允许插入重复值和空值。ArrayList实现了RandomAccess接口,支持快速随机访问,就是可以通过索引快速查到某个元素,因此遍历时使用for循环的方式效率更高。ArrayList是线程不安全的,可以通过Collections.synchronizedList将其转变为线程安全的集合,不过一般不会使用,Vector和Cop

2021-12-31 22:48:44 774

转载 AMQP是什么?

本文仅是转载用于自己学习,不作其他用途原博文地址:https://blog.csdn.net/weixin_37641832/article/details/83270778?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.p.

2021-12-10 07:57:45 1538

原创 Ribbon浅析

引言Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。因为微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbo

2021-12-07 08:13:30 223

原创 java VisualVM中没有VisualGC

点击工具>插件点击可用插件>检查最新版本如果出现如下问题我们需要点击设置>编辑填写一个新的URL在如下网址寻找自己对应的jdk版本的urlhttps://visualvm.github.io/pluginscenters.html找到自己jdk对应的url后设置上,然后点击可用插件,选择VisualGC然后点击安装然后大功告成...

2021-12-05 13:43:53 649

原创 Eureka自我保护机制

介绍保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。这符合CAP理论中的AP(高可用性、分区容错性)网络分区见博客:https://www.cnblogs.com/sunlong88/p/13180586.html故障现象当eureka的web界面出现了如下提示,则说明eureka进入了自我保护模式自我保护模式的激活条件Re

2021-12-01 08:32:47 580

原创 JavaWeb、springMVC、springboot文件上传

众所周知,如果我们的表单提交中包含一个文件时,这时候我们的表单的enctype属性的值就必须为multipart/form-data。这里使用w3cschool中的资料进行解释,这里放一个传送门https://www.w3school.com.cn/tags/att_form_enctype.asp并且值得注意的是如果我们要提交文件,那么提交方式必须为post。这里我认为必须使用post的原因是因为,post请求可以提交的数据远大于get,而文件的大小远超于get能够容纳的大小限制。这句话我没有找到

2021-06-07 09:13:56 202 1

原创 springboot自动原理浅析

在梳理自动配置原理之前我们要怀着这样两个疑问,才能更好的理解自动配置流程原理 为什么我们不用配置包扫描,但是我们的组件依旧可以被注册?为什么我们一启动springboot项目,它会帮我们自动生成那么多组件? 1、Spr...

2021-04-21 20:29:00 22

原创 springboot自动装配原理浅析

1、SpringBoot主程序启动类@SpringBootApplicationpublic class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); }}被@SpringBootApplication修饰的就是springboot主程序启动类,每次我们直接直接启动这个启动类,SpringBo

2021-04-21 20:28:58 143

原创 图的入门实现——邻接矩阵实现

要求: 代码实现如下图结构使用临界矩阵效果如下:思路分析存储顶点String 使用 ArrayList保存矩阵 int[][] edges代码实现:public class Graph { public static void main(String[] args) { // 测试图是否创建 int n = 5; String[] vertexValue= {"A","B","C","D","E"}; // 创建图

2021-04-15 19:26:59 236

原创 图的基本介绍和表示方式

图的基本介绍1、为什么要有图这个数据结构?我们还学习过线性表(数组、队列、链表和栈)和树,但是我们可以发现,线性表局限于一个直接前驱(就是只能有唯一一个前面的结点)和一个直接后继的(唯一一个后面的结点)关系。树也只能有一个直接前驱也就是父节点。但是当我们如果想要表示多对多的关系时,前面所学习的数据结构就不能满足我们的需求了,这时候我们就需要图这个数据结构2、图的举例说明图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:3、图的常用概念

2021-04-15 09:17:49 1569

原创 多叉树介绍

二叉树的问题分析二叉树的操作效率很高,但是依旧存在着问题,因为二叉树是需要加载到内存中的,当二叉树的节点少,不会出现什么问题,但是如果二叉树的节点很多(比如1亿), 就存在如下问题:问题1:如果我们二叉树的结点中存放的数据是从文件中获取到的,那么在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),构建二叉树时,速度有影响问题2:节点海量,也会造成二叉树的高度很大,会降低操作速度.由此我们引入了多叉树多叉树介绍在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每个节点

2021-04-13 18:03:54 3837

原创 平衡二叉树

引举例给你一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST)创建出来的二叉排序树如下分析存在的问题左子树全部为空,从形式上看,更像一个单链表.插入速度没有影响查询速度明显降低(因为需要依次比较), 不能发挥BST的优势,因为每次还需要比较左子树,其查询速度比单链表还慢由此我们才引入了平衡二叉树平衡二叉树基本介绍平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树, 可以保证查询效率较高。具有以下特

2021-04-05 16:14:45 215

原创 Ajax工作模式探讨

Ajax工作模式探讨-异步举例示范ajax的异步首先先写一个button按钮<button id="asyncBtn">发送ajax请求</button>然后编写ajax当点击按钮时,发送ajax请求<script type="text/javascript"> $(function () { $("#asyncBtn").click(function () { console.log("ajax函数之后");

2021-04-03 17:23:07 81

原创 RBAC权限控制模型

简介1、为什么要进行权限控制如果没有权限控制,系统的功能完全不设防,全部暴露在所有用户面前。用户登录后可以使用系统中的所有功能。这在实际运行中是不能接收的。所以权限控制系统的目标就是管理用户的行为,保护系统的功能2、什么是权限控制权限控制就是对权限进行限制权限=权力+限制3、如何进行权限控制定义资源资源就是系统中需要保护起来的功能。具体形式很多:URL地址、handler方法、service方法、页面元素等等,都可以定义为资源使用权限控制系统保护起来创建权限一个功能负载的项目会包含很多

2021-04-03 15:58:17 341

原创 二叉排序树

引我们前面所了解的数据结构有数组链表。当数组未排序的时候,查找速度会很慢,但是把数据直接添加到数组尾部的时候很快;当数组排序的时候,可以使用二分查找,这样查找速度也很快,到那时缺点就是需要当数组排序的时候;而链表不管是否有序,查找起来都很慢,添加数据的速度比数组要快,因为数组添加数据的时候需要数据整体移动。由此我们引入树的结构,树的结构能够提高存储和查询的效率,其中我们要介绍的一种树叫做二叉排序树。二叉排序树二叉排序树介绍二叉排序树BST: (Binary Sort(Search) Tree),

2021-04-02 14:52:26 354

原创 jQuery的Pagination分页插件

插件简介此jQuery插件为Ajax分页插件,一次性加载,故分页切换时无刷新与延迟,如果数据量较大不建议用此方法,因为加载会比较慢。举例示范第一步准备对应的js和css我们需要准备三样东西分别是jquery的js文件pagination的js文件pagination的css文件第二步编写js代码用于分页的具体设置我们线举例示范我们如何使用Paginatgion分页插件。使用方法十分简单,通过获取到我们分页导航栏的dom元素,然后打点调用pagination方法即可。分页导航栏如下

2021-03-29 19:56:35 1550

原创 尚硅谷众筹网实现分页功能

目标将数据库中的 Admin 数据在页面上以分页形式显示。思路代码1、引入PageHelper确认是否加入依赖<!-- MyBatis 分页插件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> </d

2021-03-29 16:02:32 139

java基础练习之石头迷阵小游戏的源码

java基础练习之石头迷阵小游戏的源码

2020-12-22

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

TA关注的人

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