自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 redis的几种集群方式

https://www.zhihu.com/people/pan-zhi-74-31Redis集群介绍Redis集群一般有四种方式,分别为:主从复制、哨兵模式、Cluster以及各大厂的集群方案。在3.0版本之前只支持单实例模式,3.0之后支持了集群方式。在3.0之前各大厂为了解决单实例Redis的存储瓶颈问题各自推出了自己的集群方案,其核心思想就是数据分片,主要有客户端分片、代理分片、服务端分片。这里咱们只介绍前三种方式:主从、哨兵、Cluster。1、主从复制Redis单节点的数据是存储在一台服务器上

2023-05-17 14:30:48 774

原创 比较两个对象所有相同属性的属性值

【代码】比较两个对象所有相同属性的属性值。

2023-04-03 14:13:43 212

原创 JAVA里List集合中的对象根据对象的某个属性值降序或者升序排序

public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List<person> list = new ArrayList<>(); person person1 = new person(sdf.parse("2018-01-15

2021-10-14 16:31:00 977

转载 有意思的降维打击

心血来潮查了一下降维打击是什么意思 是否与我原本的理解有多少差别 看到了个很不意思的答案 记录一下1你喜欢上了同村的小红。你的喜欢很合理,试问谁不喜欢一个软香温玉,长相甜美的女孩呢?可惜你还没能给她示爱,你们村就被经过的战乱踏平了。你与小红流亡在这乱世中,彼此分离。时代的一粒灰,落在个人的头上,就是一座山。你怪人类面对时局的渺小,但这不是降维打击。这是世道。2流亡大半年,你进了京城。你又见到了小红,舞急红腰软,歌迟翠黛低。她是达官贵人的舞女。你是落魄.

2021-08-16 17:22:59 241

转载 HTTP以及WebSocket如何实现长连接短连接

1. HTTP协议与TCP/IP协议的关系**HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。 IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。TCP协议是可靠的、面向连接的。2. 如何理解HTTP协议是无状态的HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务

2021-08-03 15:46:26 1608

原创 java高效获取多线程执行结果

java高效获取多线程执行结果java创建带有返回值的任务。需要实现Callable接口。实现call()方法。如果不希望有返回结果的可以通过实现Runnable接口覆盖run()方法。那如何多线程下高效的获取任务执行的结果呢。1.下面是常规获取多线程任务返回值结果的方法。import java.util.ArrayList;import java.util.List;import java.util.concurrent.Callable;import java.util.concurre

2021-05-19 18:59:54 435

转载 Mybatis中getMapper方法的作用及流程

Mabtis作为一款优秀的持久层框架,不仅提高了我们的开发效率,同时也具备方便快捷的特点。通常我们配置MyBatis的时候都会配置一系列Mappers接口类到MyBatis中,但是如果我们不配置这些Mapper也是可以执行Mapper.xml文件中的SQL语句的,之所以要配置是因为直接使用接口会比不使用接口调用更方便,下面我们先看看不使用接口如何执行SQL。 Mapper.xml 如下:<?xml version="1.0" encoding="UTF-8" ?><!...

2021-03-17 18:18:02 9256 3

原创 Spring框架 Aop 及 Ioc详解

Aop 概念及原理什么是AOP面向切面编程(方面),利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。通俗描述:不通过修改源代码方式,在主干功能里面添加新功能使用登录例子说明 AOPAOP底层原理Aop底层使用动态代理有两种情况实现动态代理第一种 有接口情况,使用JDK动态代理创建接口实现类代理对象增强类的方法第二种 没有接口情况,使用CGLIB动态代理创建子类的代理对

2020-12-09 10:53:54 166

原创 Docker 概述及详细安装使用

Docker 概述及安装安装Docker帮助文档# 1.卸载旧的版本yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \

2020-11-23 18:30:29 2337 1

原创 如何用CMD查看电脑详细配置

快捷键:Windows+r 输入cmd 进入 编辑器亲测的。这里记录一下!CMD下输入命令:devmgmt.msc(设备管理器)可以打开设备管理器,查看电脑的硬件配置。dxdiag也可以查看部分硬件配置。如果是系统配置的话则输入msconfig。以下为部分查看配置的命令:winver---------检查windows版本wmimgmt.msc----打开windows管理体系结构(wmi)wupdmgr--------windows更新程序write----------写字板win

2020-11-10 10:14:42 8327

原创 Spring Boot整合流程

一、Spring Boot 入门1、Spring Boot 简介简化Spring应用开发的一个框架;整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案;2、微服务2014,martin fowler微服务:架构风格(服务微化)一个应用应该是一组小型服务;可以通过HTTP的方式进行互通;单体应用:ALL IN ONE微服务:每一个功能元素最终都是一个可独立替换和独立升级的软件单元;详细参照微服务文档3、环境准备http://www.gulixueyuan.com/

2020-10-19 09:37:54 1092

原创 Java中continue、break、return跳出多重循环

continue:跳过一次循环,进入下一次循环break:结束整个循环,只会结束一层循环,比如说有两层for,那么break内层循环只会结束内层循环,继续执行外层循环break结束多层循环:设置标志位置结束整个代码块public class Main { public static void main(String[] args) { testbreak: for(int i=0;i<10;++i) for(int j=0;j&.

2020-10-14 16:00:38 3036

原创 SSM框架整合流程

1. 搭建整合环境整合说明:SSM整合可以使用多种方式,咱们会选择XML + 注解的方式整合的思路2.1. 先搭建整合的环境2.2. 先把Spring的配置搭建完成2.3. 再使用Spring整合SpringMVC框架2.4. 最后使用Spring整合MyBatis框架创建数据库和表结构create database ssm; use ssm; create table account( id int primary key auto_increment, name va

2020-09-15 17:45:38 171

原创 Spring笔记

Spring–概述spring的优势方便解耦,简化开发通过Spring提供的IoC容器,可以将对象间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。AOP编程的支持通过Spring的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付声明式事务的支持可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务的管理,提高开发效率和质量

2020-09-05 18:20:14 228

原创 Mybaits学习笔记

Mybatis第一天1、什么是框架?​ 它是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题。​ 使用框架的好处:​ 框架封装了很多的细节,使开发者可以使用极简的方式实现功能。大大提高开发效率。MyBatis框架概述 mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。​ mybatis通过xml或注解的方式将要执行的各种statement配置起

2020-09-05 17:33:55 440 2

原创 JVM 类加载、堆、栈等

[email protected].类加载子系统1.类加载子系统作用类加载子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识;ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定加载的类信息存放于一块成为方法区的内存空间。除了类信息之外,方法区还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)1.1类加载器ClassLoader角色

2020-08-27 11:01:11 725

原创 JVM_08 执行引擎(Execution Engine)

执行引擎概述执行引擎是Java虚拟机的核心组成部分之一虚拟机是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM锁识别的字节码

2020-08-27 10:50:03 243

原创 JVM_07 运行时数据区4-对象的实例化内存布局与访问定位+直接内存

1.对象的实例化[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TIfLaKs0-1598496508127)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1597995919901.png)]1.2 创建对象的步骤六种创建对象的方式[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5pzaDkwn-1598496508130)(C:\Users\Admin

2020-08-27 10:48:46 141

原创 JVM_06 运行时数据区3-方法区

1. 堆、栈、方法区的交互关系运行时数据区结构图堆、栈、方法区的交互关系2. 方法区的理解《Java虚拟机规范》中明确说明:‘尽管所有的方法区在逻辑上属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。’但对于HotSpotJVM而言,方法区还有一个别名叫做Non-heap(非堆),目的就是要和堆分开。  所以,方法区可以看作是一块独立于Java堆的内存空间。方法区(Method Area)与Java堆一样,是各个线程共享的内存区域方法区在JVM启动时就会被创建,并且

2020-08-20 18:28:48 131

原创 JVM_05 运行时数据区2-堆

1.核心概述一个进程对应一个jvm实例,一个运行时数据区,又包含多个线程,这些线程共享了方法区和堆,每个线程包含了程序计数器、本地方法栈和虚拟机栈。一个jvm实例只存在一个堆内存,堆也是java内存管理的核心区域Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间(堆内存的大小是可以调节的)《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的所有的线程共享java堆,在这里还可以划分线程私有的缓冲区(TLAB:Thr

2020-08-20 18:27:54 133

原创 JVM_03.程序计数器+虚拟机栈+本地方法栈详解

内存与线程01 内存内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了JAVA在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的jvm对于内存的划分方式和管理机制存在着部分差异(对于Hotspot主要指方法区)(图源阿里)JDK8的元数据区+JIT编译产物 就是JDK8以前的方法区02 分区介绍java虚拟机定了了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁

2020-08-18 11:47:20 750

原创 JVM_08 执行引擎(Execution Engine)

执行引擎概述执行引擎是Java虚拟机的核心组成部分之一虚拟机是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM锁识别的字节码

2020-08-18 11:46:47 149

原创 JVM_12 垃圾回收3-垃圾回收器

GC的分类与性能指标垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。按线程数分,可以分为串行垃圾回收器和并行垃圾回收器串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。➢在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场 合,串行回收器的性能表现可以

2020-08-18 11:46:17 254

原创 JVM_11 垃圾回收相关概念

System.gc()的理解在默认情况下,通过System.gc ()或者Runtime . getRuntime() .gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(无法保证马上触发GC)。JVM实现者可以通过system.gc()调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻烦了。在一些特殊情况下,如我们正在编写一个

2020-08-18 11:45:36 113

原创 JVM_10 垃圾回收1-概述+相关算法

1.概述什么是垃圾Java = (C++)–什么是垃圾( Garbage) 呢? ➢垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。 ➢外文: An object is considered garbage when it can no longer be reached from any pointer in the runningprogram.如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空 间会一直保留到应用程序结束,被保留的空间无法被其他对象使

2020-08-18 11:45:06 419

原创 JVM_02.类加载子系统作用

1.类加载子系统作用类加载子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识;ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定加载的类信息存放于一块成为方法区的内存空间。除了类信息之外,方法区还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)1.1类加载器ClassLoader角色1.2加载通过一个类的全限定明获取定义此类的

2020-08-17 18:18:58 340

转载 创建对象的4种方式和RTTI和反射的区别

1. 使用new 关键字使用 new 关键字创建对象,实际上是做了两个工作,一是在内存中开辟空间,二是初始化对象。但是new 关键字只能创建非抽象对象。如 User user=new User();执行这条语句,jvm做了什么?1. 首先在方法区的常量池中查看是否有new 后面参数(也就是类名)的符号引用,并检查是否有类的加载信息也就是是否被加载解析和初始化过。如果已经加载过了就不在加载,否则执行类的加载全过程2. 加载完类后,大致做了如下三件事: a、给实例分配内存 b、调用构造

2020-08-16 22:23:50 260

原创 Java集合类概述以及深入理解迭代器

集合概述集合与数组存储数据概述:集合、数组都是对多个数据进行存储操作的结构,简称Java容器。说明:此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(.txt,.jpg,.avi,数据库中)数组存储的特点:一旦初始化以后,其长度就确定了。数组一旦定义好,其元素的类型也就确定了。我们也就只能操作指定类型的数据了。 比如:String[] arr;int[] arr1;Object[] arr2;数组存储的弊端: > 一旦初始化以后,其长度就

2020-08-16 02:48:12 226

转载 快速排序算法实现

高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的数放在6的左边,类似下面这种排列:3 1 2 5 4 6 9 7 10 8在初始状态下,

2020-08-16 02:12:10 66

原创 StringBuffer为什么是可变类

StringBuffer是可变的还是不可变的?前言:我们知道String类的修饰符是final,其char[] value也是由final修饰的,每次给String变量赋一个新值,都会创建一个新的String对象,很多有涉及到字符串本身的改变都是伴有(new String)的字样,所以我们说String类是不可变类。但StringBuffer类也是由final修饰的呀,为什么它就是可变类了呢?复制代码public final class StringBuffer extends Abstrac

2020-08-16 02:11:17 1907

原创 为什么StringBuilder是线程不安全的?StringBuffer是线程安全的?

面试中经常问到的一个问题:StringBuilder和StringBuffer的区别是什么?我们非常自信的说出:StringBuilder是线程不安全的,StirngBuffer是线程安全的面试官:StringBuilder不安全的点在哪儿?这时候估计就哑巴了。。。分析StringBuffer和StringBuilder的实现内部是和String内部一样的,都是通过 char[]数组的方式;不同的是String的char[]数组是通过final关键字修饰的是不可变的,而StringBuffer和S

2020-08-16 00:55:15 2288

转载 String创建了几个对象

我们首先来看一段代码:Java代码String str=new String(“abc”);紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢?相信大家对这道题并不陌生,答案也是众所周知的,2个。接下来我们就从这道题展开,一起回顾一下与创建String对象相关的一些JAVA知识。我们可以把上面这行代码分成String str、=、"abc"和new String()四部分来看待。String str只是定义了一个名为str的String类型的变量,因此它并没有创建对象

2020-08-15 23:21:35 2267 2

原创 String对象不可变的原理及好处

ps:主要是其内部使用了private final修饰成员,如果想修改,需要使用到反射技术string方法的修改效果是通过新建StringBuilder来实现的,更老的版本使用StringBuffer,后者是线程安全版本,但效率较低什么是不可变对象?众所周知, 在Java中, String类是不可变的。那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,

2020-08-15 22:36:14 683

转载 数组下标越界异常是如何产生的

首先,ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。 对于ArrayList而言,它实现List接口、底层使用数组保存所有元素。其操作基本上是对数组的操作。 1、程序中报错的 at java.util.ArrayList.elementData(ArrayList.java:400) 和 at java.util.ArrayList.add(ArrayList.java:441),它们同属Add()方法。 添加...

2020-08-14 11:16:48 2458

原创 数据结构之深度优先和广度优先遍历

文章目录图为什么要有图图的常用概念图的表示方式邻接矩阵邻接表图的深度优先遍历深度优先遍历基本思想深度优先遍历算法步骤深度优先算法的代码实现图的广度优先遍历广度优先遍历基本思想广度优先遍历算法步骤广度优先算法的代码实现图结构完整代码图为什么要有图1)前面我们学了线性表和树2)线性表局限于一个直接前驱和一个直接后继的关系3)树也只能有一个直接前驱也就是父节点4)当我们需要表示多对多的关系时,这里我们就用到了图。图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。结点也可

2020-08-14 11:12:26 3757

原创 数据结构常见树结构详细整理

文章目录树结构为什么需要树这种数据结构二叉树二叉树二叉树遍历的说明二叉树遍历查找的说明树结构为什么需要树这种数据结构二叉树二叉树二叉树遍历的说明二叉树遍历查找的说明二叉树删除二叉树的遍历,查找以及删除 代码顺序存储二叉树赫夫曼树**赫夫曼树几个重要概念和举例说明**赫夫曼编码赫夫曼树的具体实现代码二叉排序树**二叉排序树介绍****二叉排序树创建和遍历****二叉排序树的删除**平衡二叉树(AVL树)基本介绍应用案例-单旋转(左旋转 )应用案例-单旋转(右旋转)双旋转多路查找树二叉树与B树**多叉树**B

2020-08-14 10:50:45 1847

原创 二分插值斐波那契查找算法和哈希表

查找算法介绍在java中,我们常用的查找有四种:*1) 顺序(线性)查找2) 二分查找/折半查找3) 插值查找4) 斐波那契查找1) 顺序(线性)查找​ 有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称【顺序查找】 要求: 如果找到了,就提示找到,并给出下标值。2) 二分查找/折半查找二分查找的思路分析首先确定该数组的中间的下标mid = (left + right) / 2然后让需要查找的数 findVal 和 arr[

2020-08-14 10:37:14 401

原创 数据结构常见八大排序算法java实现详细整理

排序的分类:内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。在这里插入图片描述冒泡排序冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐 向上冒。因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序

2020-08-14 10:33:42 280 1

原创 线性结构非线性结构和递归

数据结构包括:线性结构和非线性结构。线行结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系线性结构有两种不通的存储结构,即顺序存储结构(数组)和链式存储结构(链表)。顺序存储的线性表成为顺序表,顺序表的存储元素是连续的链式存储的线性表称为链表,链表的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息线性结构常见的有:数组,队列,链表和栈非线性结构包括:二维数组,多维数组,广义表,树结构,图结构单向链表不能自我删除 需要辅助节点来找到待删除节点的前一个节点双向链

2020-08-14 10:31:59 615

开发问题记录55555

开发问题记录55555

2022-08-08

redis常见为题点111

redis常见为题点111

2022-08-08

mysql.md 11111111

问题记录

2022-08-08

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

TA关注的人

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