自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 资源 (1)
  • 收藏
  • 关注

原创 Hutool-core最新最全解析(四)

凡是存储数据的地方都可以归类到资源。

2022-12-16 00:00:00 365 1

原创 Hutool-core最新最全解析(三)

在FileUtil中本来已经针对文件的读操作做了大量的静态封装,但是根据职责分离原则,我觉得有必要针对文件读取单独封装一个类,这样项目更加清晰。当然,使用FileUtil操作文件是最方便的。

2022-12-15 15:46:32 895

原创 Hutool-core最新最全解析(二)

在IO操作中,文件的操作相对来说是比较复杂的,但也是使用频率最高的部分,我们几乎所有的项目中几乎都躺着一个叫做FileUtil或者FileUtils的工具类,我想Hutool应该将这个工具类纳入其中,解决用来解决大部分的文件操作问题。文件类型判断在文件上传时,有时候我们需要判断文件类型。但是又不能简单的通过扩展名来判断(防止恶意脚本等通过上传到服务器上),于是我们需要在服务端通过读取文件的首部几个二进制位来判断常用的文件类型。文件监听监听一个文件的变化或者目录的变动,包括文件的创建、修改、删除,以及

2022-12-15 15:22:27 1452

原创 Hutool-core最新最全解析(一)

小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。官网Hutool的集成打包产品,由于考虑到“懒人”用户及分不清各个模块作用的用户,“无脑”引入hutool-all模块是快速开始和深入应用的最佳方式。MavenHutool-bomMaven中的BOM通过定义一整套相互兼容的jar包版本集合,使用时只需要依赖该BOM文件,无需再指定版本号。BOM维护方负责版本升级和jar包版本之间的兼容性,为了解决依赖

2022-12-14 10:50:08 2208

原创 Lombok最新最全解析

Project Lombok是一个java库,可以自动插入到编辑器和构建工具中,为java增添情趣。不要再编写另一个getter或equals方法,只需一个注释,您的类就有一个功能齐全的构建器、自动化您的日志记录变量等等。(避免重复造轮子)现有版本采用JSR 269规范(可插拔批注处里API)可以让我们修改编译过程,在编译期融入我们自己的东西,相比通过反射来获取注解,运行时代码效率降低等问题。所以在javac 解析成抽象语法树之后(AST),Lombok根据自己的注解处理器,动态修改AST,增加新的节点,最

2022-12-02 17:16:53 1645

原创 虚拟机字节码执行引擎

概述执行引擎是Java虚拟机最核心的组成部分之一。由自己实现的,可以自行指定指令集与指令引擎的结构体系,能够执行哪些不被硬件直接支持的指令集格式。执行过程:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果运行时栈帧结构栈帧是用于支持虚拟进行方法调用和方法执行的数据结构,在虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表,操作数栈,动态连接,方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机里面从入栈到出栈的过程。...

2022-01-07 17:28:10 534

原创 深入了解JAVA技术(9)类加载器

类加载器通过一个类的全限定名来获取描述此类的二进制字节流,放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。类加载器在类层次划分,OSGi,热部署,代码加密等类与类加载器用于实现类的加载动作,对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性。每一个类加载器,都拥有一个独立的类名称空间。两类来源于同一个class文件,被同一个虚拟机加载,只要加载他们的类加载器不同,那这两类不相等。判断Class对象相等的方法,equals(),isAss

2022-01-05 11:51:16 302

原创 深入了解JAVA技术(8)类加载的过程

类加载的时机类从被加载到虚拟机中开始,到卸载出内存为止,生命周期:加载 验证 准备 解析 初始化 使用 卸载有五种情况必须立即对类进行初始化:遇到 new getstatic putstatic invokestatic 字节码指令 如果类没有进型初始化 就会触发其初始化使用java.lang.reflect包的方法对类进行反射调用的时候, 如果类没有进型初始化 就会触发其初始化当初始化一个类的时候 如果父类没有进行初始化 就先触发其父类的初始化当虚拟机启动时 用户需要指定一个要执行的主类 m

2022-01-04 17:32:40 363

原创 深入了解JAVA技术(8)字节码指令有知道的嘛

字节码指令:Java虚拟机的指令由一个字度长度的,代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随气候的零之多个代表此操作所需参数而构成。Java虚拟机采用面向操作数栈而不是寄存器的架构,大部分的指令都不包含操作数,只有一个操作码。字节码指令集:是由多个字节码指令组成集,是一种指令集架构。缺点:字节码指令集限制了Java虚拟机操作码的长度为一个字节,意味着指令集的操作嘛总数不可能超过256条,再一个class文件格式放弃了编译后代码的操作数长度对齐,如果虚拟机处理那些超过一个字节数据的时

2021-12-30 15:26:04 128

原创 Lambda 表达式与方法引用

Lambda 表达式,可以取代大部分的匿名内部类,写出更简单优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。常用方法格式:@FunctionalInterface;修饰函数式接口,接口中的抽象方法只有一个。主要是和 lambda 表达式一起出现。/**多参数无返回*/@FunctionalInterfacepublic interface MultiParamNoReturn { void method(int a, int b);}// 实现该接

2021-12-28 18:07:56 126

原创 长话简说JavaScript(9)代理基础

代理和反射为开发者提供了拦截并向基本操做嵌入额外行为的能力。具体地说,可以给目标对象定义一个关联的代理对象,而这个代理对象可以作为抽象的目标对象来使用。在对目标对象的各种操作影响目标对象之前可以在代理对象中对这些操作加以控制。创建空代理只作为一个抽象的目标对象。代理使用Proxy 构造函数创建的。接收参数目标对象和处理程序对象。const target = { id: 'target' }; const handler = {}; const proxy = new Proxy(target

2021-12-26 01:00:00 243

原创 Java 8 新特性之Optional 类方法大全

Java应用中最常见的bug就是空值异常。在Java 8之前,Google Guava引入了Optionals类来解决NullPointerException,从而避免源码被各种null检查污染,以便开发者写出更加整洁的代码。Java 8也将Optional加入了官方库。

2021-12-24 18:29:21 314

原创 你不知道的stream()方法大全

stream() 是Java 8 新特性。它是java.util.Collection中的一个方法。支持数据类型 * @author Josh Bloch * @author Neal Gafter * @see Set * @see List * @see Map * @see SortedSet * @see SortedMap * @see HashSet * @see TreeSet * @see ArrayL

2021-12-24 15:55:26 2797

原创 长话简说JavaScript(8)继承

很多面向对象语言都支持两种继承:接口继承和实现继承。而ECMAScript只支持原型链实现。原型链基本思想:通过原型继承多个引用类型的属性和方法。function SuperType() { this.property = true; } SuperType.prototype.getSuperValue = function() { return this.property; }; function SubType() { this.subproperty = false; }

2021-12-23 08:00:00 143

原创 长话简说JavaScript(8)创建对象

创建对象的形式非常简单,通过Object 构造函数或对象字面量。通过几种方式来更快速的创建对象工厂模式function createPerson(name, age, job) { let o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function() { console.log(this.name); }; return o; } let person1 = crea

2021-12-22 08:00:00 46

原创 长话简说JavaScript(8)类

ECMAScript 6 新引入的 class 关键字具有正式定义类的能力。支持正式的面向对象编程,但实际上它背后使用的仍然是原型和构造函数的概念。类定义// 类声明class Person {} // 类表达式const Animal = class {};函数受函数作用域限制,而类受块作用域限制类的构成类可以包含构造函数方法、实例方法、获取函数、设置函数和静态类方法,但这些都不是必需的。空的类定义照样有效。编程风格必须类名的首字母要大写,以区别于通过它创建的实例class Baz {

2021-12-21 22:06:05 858

原创 长话简说JavaScript(8)理解对象

面对对象编程听起来很Java,Java老程序可能对于它的理解很深,那js中的对象又是如何实现,有什么作用么?随着我的笔记一起来了解吧。对象是啥在某一种意义上对象就是一组没有任何规的值。它的每个属性和方法都有一个名称来标识。创建自定义对象就是创建一个Object实例let person = new Object(); person.name = "Nicholas"; person.age = 29; person.job = "Software Engineer"; person.sayNa

2021-12-21 08:00:00 53

原创 长话简说JavaScript(7)理解迭代

许多人都说循环,有的时候把迭代都给你忘记了。迭代是按照顺序反复多次执行一段程序,一般会有明确的终止条件。跟循环不是一回事,循环是迭代的基础。

2021-12-20 08:00:00 108

原创 你知道Java类的小密码?

稍微了解的Java的同学都知道,Java类是通过class文件编译成字节码在虚拟机里运行程序的。那么问题来了,你知道所谓的字节码怎么在虚拟机被识别的呢?有的同学肯定会说是通过class类名来区分,那么好,我给大家讲解一下类的结构?...

2021-12-16 22:50:30 1150

原创 深入了解JAVA技术(7)虚拟机性能监控与故障处理工具你知道哪几个?

虚拟机出现问题的情况下你知道怎样处理吗?在处理事物问题时,我们都要通过一些东西来处理,在我们虚拟机出现问题时我们也需要通过一些东西来处理问题,那就是我们所说的”工具“。下面介绍这几个工具,针对虚拟机出现问题,可能会用到的。jps:虚拟机进程状况工具可以查看正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一IDjstat:虚拟机统计信息监视工具用于监控虚拟机各种运行状态信息的命令行工具,也可以显示本地或者远程虚拟机进程中的类转载,内存,垃圾收集,JIT编译等运行数据。

2021-12-15 03:45:00 203

原创 长话简说JavaScript(6)Set详细解读

ECMAScript 6 新增的 Set 是一种新集合类型,为这门语言带来集合数据结构。

2021-12-15 00:00:00 173

原创 长话简说JavaScript(6)Set详解

ECMAScript 6 新增的 Set 是一种新集合类型1.基本 API// 使用数组初始化集合const m = new Set(["val1", "val2", "val3"]);// 使用自定义迭代器初始化集合const m2 = new Set({ [Symbol.iterator]: function*() { yield "val1"; yield "val2"; yield "val3"; } });console.log(m.add("val4")); /

2021-12-14 00:00:00 264

原创 深入了解JAVA技术(6)你知道对象究竟存放在哪里呢?

大家想必都知道对象是在Java堆上分配,那具体在拿大家知道吗?创建的对象主要分配在新生代的Eden区上,少数情况分配在老年代中,分配的规则不是固定的。 1. **对象优先分配在Eden** 2. **大对象直接进入老年代** 大对象是指需要大量连续内存空间的Java对象

2021-12-14 00:00:00 561

原创 深入了解JAVA技术(6)垃圾收集器都有哪些

如果收集算法时内存回收的方法,那么垃圾收集器就是具体的实现.Java虚拟机规范中对垃圾收集器如何实现没有规定,所以不同厂商所提供的垃圾收集器都会有很大差别,今天具体介绍一些主流的来收集器有哪些?...

2021-12-13 01:45:00 207

原创 长话简说JavaScript(6)Array详细解读

Array一组有序的数据。通过索引标记,是动态大小的,会随着数据添加而自动增长。1.创建数组let colors1 = new Array(); //使用 Array 构造函数let colors2 = new Array(20); //使用 Array 构造函数,确认数组大小let colors3 = new Array("red", "blue", "green"); // 使用 Array 构造函数,保存存入的元素Array 构造函数还有两个 ES6 新增的用于创建数组的静态方法:fro

2021-12-13 00:00:00 276

原创 长话简说JavaScript(6)Map详解

MapMap 是一种新的集合类型,为这门语言带来了真正的键/值存储机制。Map 的大多数特性都可以通过 Object 类型实现。1.基本 APIconst m= new Map().set("key1", "val1").set("key2", "val2").set("key3", "val3"); console.log(m.has("key1"));// true 判断是否含有key值console.log(m.get("key1"));// val1 获取key值中的valueconso

2021-12-13 00:00:00 558

原创 长话简说JavaScript(5)RegExp是什么?

RegExp 类型支持正则表达式。语法简单let expression = /pattern/flags;pattern是任何简单或复杂的正则表达式,包括字符类、限定符、分组、向前查找和反向引用。flags是了表示匹配模式的标记修饰符含义描述g全局模式表示查找字符串的全部内容,而不是找到第一个匹配的内容就结束。i不区分大小写表示在查找匹配时忽略 pattern 和字符串的大小写。m多行模式表示查找到一行文本末尾时会继续查找。y粘附模式表示只查找

2021-12-12 00:00:00 588

原创 长话简说JavaScript(5)Global和Math是什么东西?

Global一种兜底对象,在全局作用域中定义的变量和函数都会变成 Global 对象的属性 。包括 isNaN()、isFinite()、parseInt()和 parseFloat(),实际上都是 Global 对象的方法。1.URL 编码方法encodeURI()和 encodeURIComponent()方法用于编码统一资源标识符(URI),以便传给浏览器。有效的 URI 不能包含某些字符,比如空格。使用 URI 编码方法来编码 URI 可以让浏览器能够理解它们,同时又以特殊的 UTF-8 编码

2021-12-11 00:00:00 219

原创 长话简说JavaScript(4)垃圾回收是什么鬼?

你没有看错!JavaScript是使用垃圾回收的语言,就是在执行环境中代码执行时管理内存。跟Java有一些相似。Java代码执行需要通过Java虚拟机,Java虚拟机可以帮助开发者管理内存。JavaScript通过自动内存管理实现内存分配和闲置资源回收。基本思想:确定哪个变量不会在使用,然后释放它占用的内存。例如页面跳转后,之前页面的变量占用着内存都会被释放掉其内存。在游览器发展史上,用到两种主要的内存清理策略:标记清理和引用计数,听起来跟Java虚拟机管理内存算法有些相似。那我们就开始了解这两个策略

2021-12-10 08:00:00 169

原创 长话简说JavaScript(5)你深度了解过Date?

Date 类型将日期保存为自协调世界时(UTC,Universal Time Coordinated)时间 1970 年 1 月 1 日午夜(零时)至今所经过的毫秒数。这样转换成时间更加精准。创建日期对象,使用new 操作符来调用 Date 构造函数:let now = new Date(); //这个显示当前毫秒时间戳 如果Date()里面添加毫秒时间戳...

2021-12-09 11:24:32 501

原创 长话简说JavaScript(4)什么是执行上下文与作用域

执行上下文是根据变量或函数访问哪些数据,操作他们的行为,这些过程中需要必须有上下文来决定。这个上下文定义的所有变量和函数都存在于这个对象上。虽然不能通过代码访问变量对象,但是后台根据变量处理数据。类似于Java项目debug执行程序时variables列表里的临时变量,程序执行完后,这些临时变量就会消失。下面介绍一下全局上下文是什么?全局上下文相当于在window系统下的window对象,通过var定义的全局变量和函数都会成为window对象的属性和方法,let和const定义的不会在全局上下文中,但是作

2021-12-09 01:00:00 76

原创 长话简说JavaScript(4)原始值与引用值都是什么

ECMAScript 变量可以包含两种不同类型的数据:原始值和引用值,原始值就是最开始定义一些简单值,原始值类型:Undefined、Null、Boolean、Number、String 和 Symbol。保存原始值的变量是按值(byvalue)访问的,因为我们操作的就是存储在变量中的实际值。引用值就是有多个值构成的对象,因为avaScript 不允许直接访问内存位置,因此不能直接操作对象所在的内存空间。在操作对象时,实际上操做就是对该对象的引用,不是对象的对象 。如果保存引用值得变量是是按引用(by re

2021-12-08 08:00:00 279 1

原创 长话简说JavaScript(3)语言基础中的语句和函数

语句通常使用一或多个关键字完成既定的任务。语句可以简单,也可以复杂。简单的如告诉函数退出,复杂的如列出一堆要重复执行的指令。主要介绍这些常用语句if 语句:if (condition) statement1 else statement2这里的(condition)可以是任何表达式,求值结果不一定是布尔值。原理是:ECMAScript 会自动调用 Boolean()函数将这个表达式的值转换为布尔值。如果条件求值为 true,则执行语句statement1;如果条件求值为 false,则执行语句

2021-12-07 08:00:00 74

原创 深入了解JAVA技术(5)垃圾收集算法

为什么要介绍垃圾收集算法?各个平台的虚拟机操作内存的方法各不相同,这次具体介绍一些主流垃圾收集算法的思想及发展过程.标记-清除算法算法主要分为两个阶段 ,标记和清除,首先标记处所有需要回收的对象,在标记完成后统一回收所有被标记的对象.不足的是:一个效率的问题,标记和清除两个过程的效率都不高;另一个空间问题,标记清除后产生大量不连续 的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象是,无法找到足够的连续内存不得不提前出发两一个垃圾收集动作.这个算法应该是最基础的剩下的算法都是依据这

2021-12-06 08:00:00 51

原创 深入了解JAVA技术(4)对象怎么死亡?

你觉得对象死了吗?大家都知道JAVA堆里面存放整个项目中几乎所有的对象实例上,垃圾收集器在对堆进行回收前,都做了哪些呢?哪些还活着,哪些已经死了引用计数算法很多认为对象是否存在的算法是这样的:给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加1;当引用失效时,计数器值就减1;无论什么时刻计数器为0的对象就不能再被使用,这都是好多初学者的回答。...

2021-12-05 21:01:27 435

原创 长话简说JavaScript(3)语言基础中的语法与数据类型

语言基础主要根据ECMAScript 第 6 版语法区分大小写 变量 test 和变量 Test 是两个不同的变量。标识符 变量、函数、属性或函数参数的名称 遵循驼峰大小写形式,即第一个单词的首字母小写,后面每个单词的首字母大写注释 单行注释和块注释严格模式 一种不同的 JavaScript 解析和执行模型 不规范写法在这种模式下会被处理,如果不安全抛出错误 这个 ”use strict“开启严格模式 放在整个或方法内语句 推荐以分号结尾关键字与保留字 最好还是不要

2021-12-04 08:00:00 127

原创 长话简说JavaScript(3)语言基础中的操作符

操作符可用于操作数据值的操作符,包括数学操作符(如加、减)、位操作符、关系操作符和相等操作符等。一元操作符:只操作一个值的操作符递增/递减操作符:递增/递减操作符在数值前面先执行,递增/递减操作符在数值后面后执行,示例:let num = 2;console.log(num--); // 2console.log(num); // 1console.log(num++); // 1console.log(num); // 2console.log(--num); // 1consol

2021-12-03 22:17:47 330 2

原创 深入了解Java技术(3)Java虚拟机对象探秘

很多人说Java时面向对象编程,之所以这样说因为程序运行过程中都有对象被创建出来,在代码中通常用new关键字,但是你知道虚拟机时怎样创建对象?虚拟机遇到new指令,通过在常量池里检查是否这个指令的参数(类的符号引用)已被加载,解析,初始化,如果没有的话,虚拟机去执行相应的类加载过程,经过上述的检查通过后虚拟机对新生对象分配内存,分配内存的原理就是Java堆中的内存分为用过的和空闲中间有指示器当分界线,当有新的对象,指针挪动一段与对象大小相等的距离,这种方式称为’指针碰撞’,如果指示器不是在内存

2021-12-01 22:59:44 552

原创 长话简说JavaScript(2) HTML如何使用JavaScript

HTML中如何使用JavaScript

2021-12-01 22:25:48 7137 29

原创 长话简说JavaScript(1)JavaScript基本情况

JavaScript的由来1995年,JavaScript问世,最开始主要用于在客户端处理输入验证,一些简单验证不需要请求服务器,替服务器分担了一些问题,它的最初的名字是Mocha,后来和sum公司进行合作开发改了名字叫LiveScript,当发行第二版时为了借助Java热度改名了叫JavaScriptJavaScript的用途最初时处理输入验证,后来经过发展能够处理复杂的计算和交互,包括闭包,lambda,元编程等特性,之前只是在桌面浏览器后来推广到手机游览器和屏幕阅读器,逐渐变得强大,现阶段软件开

2021-11-30 16:38:37 613

oracle索引,存储过程,函数

由自己手敲代码已验证好用,里面有索引,存储过程,函数

2018-11-20

空空如也

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

TA关注的人

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