自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式之单例模式

设计模式之单例模式概述单例模式:确保一个类只有一个实例,并提供一个全局访问点。单例设计模式,是采取一定的方法措施以保证在整个系统中,某个类只能存在一个对象实例,并且这个类只提供静态方法用来获取该对象实例。理解简单例子我们使用笔记本时,会将不用的文件移入到废纸篓(mac)或者回收站(windows)中,对于笔记本来说,废纸篓或者回收站就是唯一一个实例。一个公司的董事长A的职位只有一个,对于该公司而言,A就是该公司的唯一的董事长的实例。同理,在软件开发过程中,开发一个系统时,有一些实例在系

2021-03-30 23:38:37 108

原创 Redis基本数据类型

Redis数据类型#查找错误日志$ docker logs myredis #使用docker开启容器后,进入容器执行redis客户端$ docker exec -it myredis redis-cli#开启容器后,进入redis-benchmark 是一个压力测试工具 进行测试$ docker exec -ti 24d68d(容器id) redis-benchmark数据存储类型存储类型代表字符串类型string列表类型list散列类型has

2021-03-29 23:22:21 115

原创 正则表达式进阶

零宽度断言先行断言用于判断所匹配的格式是否在另一个确定的格式之前,该确定的格式仅作为匹配的约束,并不包含在匹配结果中;后发断言用于用于判断所匹配的格式是否在另一个确定的格式之后,筛选条件为其前跟随着断言中定义的格式。符号详细描述格式?=正先行断言-存在(?=…)?!负先行断言-排除(?!..)?<=正后发断言-存在(?<=…)?<!负后发断言-排除?<!..)贪婪匹配与惰性匹配正则表达式默认采用贪婪匹配模式,

2021-03-29 23:10:24 114

原创 八、堆

堆概述一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了,堆是JVM管理的最大一块内存空间,并且堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buffer,TLAB)。《Java虚拟机规范》中对Java堆的描述是:所有的对象实例以及数组都应

2021-03-09 23:45:49 80

原创 类初始化和实例初始化

代码例子如下public class Father{ private int i = test(); private static int j = method(); static{ System.out.print("(1)"); } Father(){ System.out.print("(2)"); } { System.out.print("(3)"); } public int test(){ System.out.print("(4)"); retur.

2021-03-08 23:39:47 96

原创 正则表达式知识整理

正则表达式元字符描述限定符相关描述?标记?之前的字符为可选,有没有都行。*匹配>=0个重复的在*号之前的字符,(0 ~ +∞)。+匹配>=1个重复的+号前的字符,(1 ~ +∞)。点运算符相关描述.匹配任意单个字符除了换行符。字符类相关描述[ ]字符种类。匹配方括号内的任意字符。[^ ]否定的字符种类。匹配除了方括号里的任意字符。(xyz)字符集,匹配与 xyz 完全相等的字符串。量词相关描述

2021-03-07 23:43:47 123 1

原创 针对某一字段截取后排序

针对某一字段截取后排序现在oracle数据库中有一张表A中有字段row存储的是字符串,数据类似于row (第1行、第2行、第3行…第15行…第108行),要求同一批的数据,针对row由小到大进行排序。思路:对字段row进行截取后,剩下中间的数字,然后转化为number类型在进行排序。函数:substr(字符串,截取开始位置,截取长度) //返回截取的字符串,0、1都是表示截取的开始位置为第一个字符。to_number()函数可以将char或varchar2类型的string转换为一个

2021-03-06 23:34:31 443 1

原创 Zookeeper知识整理

Zookeeper = 文件系统 + 通知机制特点Zookeeper:一个领导者(Leader),多个跟随者(Follower),组成的集群。集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。更新请求顺序进行,来自同一个Client的更新请求按其发送顺序依次执行。数据更新原子性,一次数据更新要么成功,要么失败。实时性,在一定时间范围内,Client能读到最新数据。.

2021-03-05 23:14:01 131

原创 常用注解

Spring MVC注解只有类和方法级别的注解会被继承给子类,方法参数级别的注解无法被继承,所以参数注解在接口及实现类中必须保持一致;项目注解作用SpringBoot@ConfigurationProperties批量注入配置文件中的属性@Value一个个指定@ConfigurationSpring配置文件@Bean给容器中添加组件Spring@PropertySource读取外部配置,加载指定的配置文件@ImportResou.

2021-03-04 23:37:27 117 3

原创 git知识点梳理总结

版本控制集中式版本控制工具:CVS、SVN、VSS等分布式版本控制工具:Git、Mercurial、Bazaar、Darcs等git相关结构工作区:写代码的地方暂存区:临时存储本地库:历史版本代码托管中心用来维护远程库,在局域网环境下使用GitLab 服务器;外网环境下,使用GitHub和码云。容易混淆的命令#版本回退$ git reset --hard <commit_id>#丢弃暂存区上的修改,将它放回到工作区 HEAD$ git reset HEAD

2021-03-03 23:40:43 132 1

原创 并行流stream的使用

Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。 使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简言之,Stream API 提供了一种高效且易于使用的处理数据的方式。Stream 和 Collection 集合的区别:Collection 是一种静态的内存数据结构,而 Stream 是有关计算的。前者是主要面向内存,存储..

2021-03-02 23:48:58 831

原创 匿名内部类与Lambda 表达式

匿名内部类匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。其语法形式如下:父类名|接口名 对象名 = new 父类构造器(参数列表)|实现接口(){ // 方法重写 @Override public void method() { // 执行语句 }};//分号结尾使用匿名内部类的条件是:必须继承一个父类或实现一个接口,因为类没有名字,要创建该对象的引用的话,则必须继承一个父类或者实现一个接口,然后通过父类引用匿名内部

2021-03-01 23:33:05 328 2

原创 创建对象时发生的那些事儿

对象的实例化过程如图是JVM的完整框图[1] :是类加载阶段,类加载的过程一共有三个阶段:(1)加载阶段、(2)链接阶段、(3)初始化阶段。加载 .class文件时,采用的是双亲委派机制。(1)加载阶段: 通过该类的全限定名拿到该类的二进制字节流,之后将该字节流所代表的静态存储结构转化为方法区的运行时数据结构,在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。(2)链接阶段分为三步:验证、准备、解析。验证(Verify):文件格式验证

2021-03-01 00:33:47 192 2

原创 七、本地方法栈

本地方法栈用于管理本地方法的调用、线程私有、允许被实现成固定或者是可动态扩展的内存大小;本地方法一般是使用C语言实现的。当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制的世界。它和虚拟机拥有同样的权限。本地方法可以通过本地方法接口来访问虚拟机内部的运行时数据区它甚至可以直接使用本地处理器中的寄存器直接从本地内存的堆中分配任意数量的内存并不是所有的JVM都支持本地方法。因为Java虚拟机规范并没有明确要求本地方法栈的使用语言、具体实现方式、数据结构等。如果JVM产品不.

2021-02-17 22:48:08 70

原创 深入理解i++与++i

为了讲解i++与++i,直接由以下几个例子分析:例子一方法test1()和test2()字节码解释:当直接使用i++与++i的时候,反编译字节码文件是一致的,均为0 iconst_1 //立即数 1 压入操作数栈1 istore_1 //栈顶元素 1 写入到局部变量表索引为1的位置 2 iinc 1 by 1 //局部变量表索引为1的数 +1 即 1+1 = 25 return由此可以得出,执行结果后,局部变量表中的变量 i 为2。例子二方法test3()字节码解释:i++

2021-02-16 22:57:20 812

原创 六、本地方法接口

本地方法一个Native Method是一个Java调用非Java代码的接囗;Native Method方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern 告知C++编译器去调用一个C的函数。“A native method is a Java method whose implementation is provided by non-java code.”(本地方法是一个非Java的方法,它的具体实现是非Jav

2021-02-11 23:36:53 97

原创 五、虚拟机栈

虚拟机栈概述由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的;优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。栈是运行时的单位,而堆是存储的单位栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放,放哪里每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用,栈是线程私有的;它的生

2021-02-10 23:43:10 92

原创 四、程序计数器

PC寄存器特点PC寄存器用来存储指令相关的现场信息,它区别于广义上的物理寄存器,可以看作是物理PC寄存器的一种抽象模拟。在jvm内存模型中,它运行速度最快;线程私有,并且生命周期与线程的生命周期保持一致。任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的Java方法的JVM指令地址。不会出现 OOM 异常。PC寄存器用来存储指向下一条指令的地址,执行引擎会从寄存器中取到指令并执行。面试题PC寄存器存储字节码指令地址的作用是因为线程是顺序执行流,

2021-02-02 23:29:12 106

原创 引子、jvm攀登系列概述

终于决定要把JVM系列整体过一遍以加深自己对JVM的理解,在B站找到了尚硅谷宋红康老师的JVM系列的视频,历时将近两个月总算是把上篇看完了,在本子和Typora上做了一些笔记,简单把笔记整理一下上传到博客,算是对自己的一个交代。视频链接:https://www.bilibili.com/video/BV1PJ411n7xZ?from=search&seid=7481392023116247275 妥妥的给大佬点赞三连,感谢老师。参考链接:https://blog.csdn.net/on.

2021-02-02 22:56:37 82

原创 三、运行时数据区概述及线程

内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。运行时数据区的完整结构图Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区:其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁。线程独有:独立包括程序计数器、栈、本地方法栈线程间共享:堆、堆外..

2021-02-01 23:00:57 79

原创 二、类加载子系统

类加载子系统类的加载过程的完整结构框图类加载子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。且只负责加载,是否可以运行,由执行引擎来决定(Execution Engine),加载的类信息可以存放于方法区。class文件 --> Java.lang.Class --> 多个具体实例。类的加载过程加载流程:通过一个类的全限定名获取定义此类的二进制字节流将这个字节流所代表的静态存储结构

2021-01-27 23:22:00 94

原创 一、JVM 整体概述

JVM 整体概述垃圾收集机制为我们打理了很多繁琐的工作,大大提高了开发的效率,但是,垃圾收集也不是万能的,懂得JVM内部的内存结构、工作机制,是设计高扩展性应用和诊断运行时问题的基础,也是Java工程师进阶的必备能力。Java的跨平台性每个语言都需要转换成字节码文件,最后转换的字节码文件都能通过Java虚拟机进行运行和处理随着Java7的正式发布,Java虚拟机的设计者们通过JSR-292规范基本实现在Java虚拟机平台上运行非Java语言编写的程序。Java虚拟机根本不关心运行在其内部

2021-01-25 23:52:46 98

原创 NIO知识总结

BIO、NIO、AIO区别BIO:Block IO 同步阻塞式 IO,在传统的java.io包下,它基于流模型实现(面向流的IO操作),提供了我们最熟知的一些IO功能,例如File 抽象、输入输出流等。BIO的交互方式是同步、阻塞的方式,即在读取输入流或者写入输出流时,在读、写动作完成之前,线程会一直阻塞在那里,它们之间的调用是可靠的线性顺序。NIO:non-blocking IO 同步非阻塞 IO,是在JDK1.4中引入的NIO框架(java.nio包),可以看作是传统IO的升级,NIO支持面

2021-01-21 23:35:54 80

原创 字符编码与序列化

字符编码概述在计算机世界中,它只能识别二进制数据,每一个二进制位(bit)有0和1两种状态。而为了方便应用计算机,让它可以处理各种信息,便将所有的信息最终都表示为一个二进制的字符串。而各个国家的信息的载体我们可以看作是文字,将各个国家的文字用一连串二进制数据来表示,并一一对应,形成一张表,这张表便是编码表。而编码,就是制定一种规则,将字符映射到唯一一种状态(二进制字符串)。例如在ASCII编码中,字符 A 对应的二进制字符串为:01000001。常见的字符编码如下图:注意U

2021-01-20 23:22:10 378

原创 java高级之IO流

java高级之IO流IO流原理I/O是Input/Output的缩写,I/O技术用于处理设备之间的数据传输。如读/写文件,网络通讯等。在Java程序中,我们使用“流(stream)” 的方式对数据进行输入/输出的操作。在java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。在编写java程序时,站在程序的角度上来说:输入(input):读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。输出(output):将程序(内存)数据输出到磁盘

2021-01-17 23:36:47 107

原创 java中的值传递和引用传递

关于java中是值传递还是引用传递,网上各种说法层出不穷,正好最近在研究java内存模型,打算从内存模型角度上来分析一下java中的参数传递问题。先上代码: public class TransTest { public static void main(String[] args) { //定义一个基本数据类型的数据 int num = 100; //定义一个引用类型为String类的数据 String st

2021-01-17 00:46:44 131 1

原创 事务相关知识点

在对数据库进行一系列操作时,为了进行统一的提交或者回滚操作,需要进行事务管理,在使用事务时,需要有一个事务管理器,可以使用xml方式指定事务管理器,也可以使用Spring Boot中的@Configuration和@Bean注解指定:xml方式<!--配置事务管理器,指定管理着某个数据源,保证数据的完整性和一致性,--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSou.

2021-01-13 23:43:11 83

原创 mybatis中批量更新sql语句,trim、foreach标签,varchar定义理解

准备工作现在有一张表为:student,相关字段如下:mapper层方法int batchUpdateStudent(List<Student> studentList);xml语句<update id="batchUpdateStudent"> update student <trim prefix="set" suffixOverrides=","> <trim prefix="name =case" suffix="end,

2021-01-11 23:10:30 505

原创 java IO流之File类的使用

java高级之IO流文章目录java高级之IO流File类的使用File类概述路径分隔符File类常用方法构造方法获取方法重命名与判断方法创建和删除方法总结欢迎关注File类的使用File类概述对于经常使用计算机的人,对计算机系统里面的目录和文件一定不陌生,在计算机系统上我们可以手动新增、修改、删除、查看文件夹及文件夹里的文件,也可以通过Java标准库中的java.io.File对象来操作文件和目录。File类是文件和文件目录路径的抽象表示形式,它与平台无关,File类的一个对象,代表一个

2020-11-27 22:48:41 131

原创 java泛型初级理解

java高级之泛型文章目录java高级之泛型初识泛型走进泛型方法形参实参类比从方法到集合自定义泛型结构自定义泛型类自定义泛型接口自定义泛型方法泛型特性初识泛型走进泛型方法形参实参类比从一个方法的实参和形参说起://现在定义了一个add方法,两个参数,参数类型为Integer,i、j是形参。private Integer add(Integer i, Integer j) { return i + j;}@Testpublic void testAdd() { int

2020-09-25 22:34:56 99

原创 java容器集合源码分析

Map接口源码分析文章目录Map接口源码分析HashMap底层实现HashMap源码分析LinkedHashMap源码分析注意Set接口源码分析HashSet底层实现`LinkedHashSet`底层实现List接口源码分析ArrayList底层实现LinkedList底层实现Vector底层实现总结HashMap底层实现JDK7中,HashMap使用数组+链表的结构,JDK8中,HashMap使用数组+链表+红黑树的结构。HashMap添加数据的过程梳理,从JDK7为例梳理过程,并分析JD

2020-09-19 22:28:58 88

原创 java集合之Map及Collections工具类详解

java高级之集合Map接口概述Map接口与Collection接口并列,Collection集合中的元素是独立存在的,而Map集合中的元素是成对存在的,它用于保存具有映射关系的键-值对:key-value;因此可以将Collection集合称为单列集合,Map集合称为双列集合。Map 中的 key 和 value 可以是任何引用类型的数据;Map 中的 key 值不允许重复,使用Set来存放,因此,同一个 Map 对象所对应的类,必须重写hashCode()和equals()方法。如果Map中

2020-08-30 23:37:08 205

原创 java集合Collection、List、Set详解

java高级之集合文章目录java高级之集合概述集合 VS 数组数组集合整体概述Collection接口常用方法迭代器迭代器中的方法源码简单分析循环List接口概述常用方法实现类:ArrayList实现类:LinkedList实现类:VectorList接口总结Set接口概述实现类:HashSet实现类:LinkedHashSet实现类:TreeSetSet接口总结概述万事万物皆对象,我们可以使用数组来存储对象但存在一些弊端。集合就像是一种java容器,可以动态的存储多个对象,可以把它理解为是动态

2020-08-22 23:44:02 398

原创 java注解的前生今世

Java高级之注解初识注解概念入门在现实世界中,我们可以用沉鱼、落雁、闭月、羞花来形容女子容貌美丽;在动物世界中,我们可以用凶猛、强悍、睿智、威武来形容狮子老虎的地位;那么联系到在Java世界,我们应该用何来形容Java源码的类、方法、字段以及参数呢?答案是注解。注解:Annotation,翻译过来便是:注释、释文。它可以为Java源码的类、方法、字段以及参数提供一些描述性的信息。元数据:我们将类、方法、字段以及参数当作是Java世界的数据,注解用来描述这些数据,那么,我们可以将注解理

2020-08-12 23:32:39 152

原创 深入浅出java反射应用一一动态代理

Java高级之反射反射应用之动态代理问题的起源适逢学生暑期,现在驾校里有许多学生趁着假期开始学车,目前正在练习科目二,整体流程固定,如下:/** * 驾校学生接口 */interface DrivingStudent{ //准备科目二的考试 void prepare();}/** * 正常驾校学生的考试流程 */class CommonStudents implements DrivingStudent{ @Override public void

2020-08-06 22:35:26 126

原创 深入剖析java反射原理

枚举类文章目录枚举类背景及定义自定义枚举类与enmu对比枚举类简单介绍枚举类特点使用说明枚举类反编译主要方法总结背景及定义自定义枚举类与enmu对比在上一篇java高级之多线程中,生命周期的线程的状态中,有这样的一段代码,分别代表线程的新建状态、运行状态、阻塞状态、等待状态、超时等待状态、终止状态。public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_

2020-08-03 22:25:57 117

原创 一文打尽java枚举类

枚举类文章目录枚举类背景及定义自定义枚举类与enmu对比枚举类简单介绍枚举类特点使用说明枚举类反编译主要方法总结背景及定义自定义枚举类与enmu对比在上一篇java高级之多线程中,生命周期的线程的状态中,有这样的一段代码,分别代表线程的新建状态、运行状态、阻塞状态、等待状态、超时等待状态、终止状态。public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_

2020-07-18 22:07:27 123

原创 java多线程菜鸟入门,概念及创建方式

多线程文章目录多线程基本概念程序、进程、线程程序进程程序与进程区别线程并行与并发总结重要线程的创建继承于Thread类实现Runnable接口使用Callable和Future通过线程池创建线程统一测试生命周期状态状态的转换线程的同步问题提出使用同步机制同步监视器即锁锁的操作Lock锁线程的通信方法wait() 与 notify() 和 notifyAll()注意区别基本概念程序、进程、线程程序程序:简单理解为完成特定任务而编写的一段静态的代码,是静态对象。进程程序不能单独运行,只有将

2020-07-12 23:39:47 246

原创 在oracle中使用merge into实现更新和插入数据

oracle中使用merge into文章目录oracle中使用merge intoDUAL表解释使用场景用法单表多表DUAL表解释在Oracle数据库中,dual是Oracle中的一个伪表,在Oracle数据库中的select语句的语法为:SELECT column_1, column_2, ... FROM table_name;即在使用select语句时,如果没有表名,...

2020-01-29 23:34:14 676

原创 码云配合git入门命令总结学习

码云配合git入门命令总结学习文章目录码云配合git入门命令总结学习基本设置基本命令总结学习准备工作以及基本思路基本命令创建仓库入门命令码云搭建仓库步骤准备前工作具体操作方法远程仓库基本命令标签相关命令所有命令总结基本命令总结说明远程库有关的命令说明标签相关命令容易混淆的命令基本设置设置用户名及email:git config --global user.name "Your Name...

2020-01-16 23:29:44 269

空空如也

空空如也

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

TA关注的人

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