自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mr_Gu的博客

交个朋友

  • 博客(38)
  • 资源 (6)
  • 问答 (1)
  • 收藏
  • 关注

原创 JVM | 垃圾回收篇

本篇主要讲解Java虚拟机的内存分配策略、垃圾回收算法以及相关的垃圾回收器。建议阅读 [JVM | 快速入门] 后再继续此篇!目录一、内存分配与回收策略(一)内存分配的一般过程(二)大对象直接进入老年代(三)长期存活的对象将进入老年代(四)动态对象年龄判定(五)空间分配担保(六)TLAB相关说明(七)对象一定分配到堆上吗?二、垃圾回收算法三、垃圾回收器一、内存分配与回收策略下图是Java堆内存的各个区域划分图,相信读者在 [JVM | 内存管理篇] 也已经熟悉了。(一)内存分配的一般过程步.

2021-03-12 00:35:25 293

原创 JVM | 内存管理篇

简介: 对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题。然而一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误是非常困难的。本篇文章主要介绍Java虚拟机运行时的各个部分及其作用。目录运行时数据区程序计数器Java虚拟机栈栈帧局部变量表操作数栈动态链接方法返回地址附加信息本地方法栈Java堆方法区运行时常量池直接内存对象的创建及访问实战执行引擎运行时数据区Ja.

2021-03-09 00:50:15 428

原创 JVM | 快速入门

目录JVM是什么Java技术体系JVM的生命周期JVM学习路线JVM是什么JVM即Java虚拟机(Java Virtual Machine),其本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。JVM 是可运行 Java 代码的假想计算机,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接的交互。Java语言的可移植性正是建立在Java虚拟机的基础上。任何平台只要装有针对于该平台的Java虚拟机

2021-03-09 00:46:20 264

原创 Java高级工程师必备技术栈

1 Java基础知识包括异常处理、反射、注解、序列化等。2 Java集合数据集合框架以及继承关系。3 JVM原理包括JVM的架构、内存管理、垃圾回收、字节码、类加载机制等。学会这本神书 《深入理解Java虚拟机》你就可以入门JVM并且应付大部分人了。4 Java多线程高并发第一层学会Java线程基础知识以及常见的锁的用法第二层去理解锁机制,线程的底层原理。建议阅读 《Java并发编程的艺术》,阿里大牛的神作。5 设计模式23种设计模式,这个只需要你能够看出是哪种设计模式就好。如果要

2021-03-07 00:30:34 4892 12

原创 Mysql基础:安装、配置、卸载

安装包获取进入Mysql官方获取免安装版:https://dev.mysql.com/downloads/mysql/网速不好的可以直接用我下载好的:解压好放到自己指定的目录下。Mysql配置文件如果想快速安装这一步也可跳过,直接看下一步安装。配置如下参数保存为my.ini文件存放在Mysql安装目录下。[mysqld]# 设置3306端口port=3306# 设置mysql的安装目录basedir=D:\Program Files\mysql-8.0.23-winx64# 设置m

2021-03-06 00:44:40 190

原创 LeetCode习题集-柱状图中最大的矩形

目录上题目我的思路题解上题目题目:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。示例:输入: [2,1,5,6,2,3]输出: 10我的思路面积 = 柱子高度 x 长度我们在循环过每一根柱子后,其实就可以求出每根柱子可以乘以的最大长度。

2021-03-05 22:28:48 179

原创 Mysql基础:视图、变量、存储过程与函数

目录视图变量(一) 系统变量(二) 自定义变量用户变量局部变量存储过程和函数(一) 存储过程(二) 函数(三) 流程控制结构分支结构循环结构视图含义: 虚拟表,和普通表一样使用。mysql15.1版本出现的新特性,是通过表动态生成的数据。只保存sql逻辑,不保存查询结果。作用:重用sql语句简化复杂sql操作,不必要知道查询细节保护数据,提高安全性视图创建示例:# 原始sqlselect 表1名称.列名称, 表2名称.列名称 from 表1名称 inner join 表2名称 on

2021-03-04 23:02:51 159 3

原创 Mysql基础:SQL语言语法

这里写目录标题SQL语言分类一、DQL(Data query language)数据查询语言(一) 基础查询(二) 条件查询(三) 排序查询SQL常见函数(四) 分组查询(五) 多表查询SQL92语法SQL99语法多表查询使用场景(六) 子查询(七) 分页查询(八) union联合查询二、DML(Data manage language)数据操作语言(一) 插入语句(二) 修改语句(三) 删除语句三、DDL(Data define language)数据定义语言(一) 库的管理(二) 表的管理(三) Mys

2021-03-04 22:56:29 1513 5

原创 Java锁升级过程

目录CAS概念Java的Atomic包用的就是自旋synchronized原理锁升级过程CAS概念Compare And Swap (Compare And Exchange) / 自旋 / 自旋锁 / 无锁因为经常配合循环操作,直到完成为止,所以泛指一类操作cas(v, a, b) ,变量v,期待值a, 修改值bABA问题,A改为B又被改成了A,无法判断当前A是否是之前的A,自旋就是你空转等待解决办法(版本号 AtomicStampedReference),基础类型简单值不需要版本号Java

2021-02-28 14:55:37 391 1

原创 ThreadLocal源码对于弱引用的应用

目录什么是ThreadLocalThreadLocal源码为什么要用弱引用呢?什么是ThreadLocalthreadlocal是一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据。用法如下:/** * ThreadLocal测试 */public class ThreadLocalTest { static ThreadLocal<Men> t1 = new ThreadLocal<>(); public st

2021-02-27 20:59:31 203 2

原创 Spring的三级缓存及其原因

首先看下Spring创建一个bean的基本流程:创建该实例的原始对象 --> 进行自动装配 --> AOP代理处理 --> 完成bean的创建并加入单例池(即一级缓存)但是当有循环依赖的时候,Spring是如何解决的呢?主要原理是利用三级缓存机制:singletonObjects: 一级缓存,也就是我们平常理解的单例池。singletonFactories: 二级缓存,存储的是单例工厂。earlySingletonObjects: 三级缓存,存储正在创建中的单例对象。

2021-02-27 20:49:59 8631 17

原创 虚引用在java中的应用

强软弱虚四种引用1.强引用(Strong Reference):如果一个对象具有强引用,它就不会被垃圾回收器回收。即使当前内存空间不足,JVM也不会回收它,而是抛出 OutOfMemoryError 错误,使程序异常终止。如果想中断强引用和某个对象之间的关联,可以显式地将引用赋值为null,这样一来的话,JVM在合适的时间就会回收该对象Object obj = new Object(); //只要obj还指向Object对象,Object对象就不会被回收obj = null; //手动置null

2021-02-27 20:37:30 1119 2

原创 缓存行对齐

目录什么是缓存行对齐验证CPU的缓存行对齐现象原因分析什么是缓存行对齐高速缓存控制器是针对数据块,而不是字节进行操作的。从程序设计的角度讲,高速缓存其实就是一组称之为缓存行(cache line)的固定大小的数据块,其大小是以突发读或者突发写周期的大小为基础的。缓存基本上来说就是把后面的数据加载到离CPU自己进的地方,对于CPU来说,它是不会一个字节一个字节的加载的,因为这非常没有效率,一般来说都是要一块一块的加载的,在CPU的缓存技术中,这个术语叫“CacheLine”(有的中文编译成“缓存行”)

2021-02-27 20:07:27 1221 4

原创 DCL单例引发对于volatile关键字的思考

问题引入观察下面代码,思考INSTANCE属性为什么要加volatile关键字public class Single { private static volatile Single INSTANCE; private Single() { } public static Single getInstance() { if (INSTANCE == null) { synchronized (Single.class){

2021-02-26 20:59:27 153 2

原创 CPU指令重排序

什么是指令重排序CPU的速度至少比内存快100倍,为了提升效率,会打乱原来的执行效率,会在一条指令执行过程中(比如去内存读数据,大概慢100多倍),去同时执行另一条指令(前提是两条指令没有依赖关系)。体现在代码层面就是,写在后面的代码可能比前面的代码先执行。验证指令重排序观察下面代码:/** * 测试指令重排序 */public class ReorderTest { private static int x = 0, y = 0; private static int a

2021-02-26 20:50:19 842 2

原创 Java中的Volatile关键字

理解Java中volatile关键字的作用存储器的层次结构问题引入volatile关键字并发编程的三个问题存储器的层次结构要理解volatile关键字的作用,得先了解计算机的存储结构,如下图所示:L1缓分成两种,一种是指令缓存,一种是数据缓存。L2缓存和L3缓存不分指令和数据。L1和L2缓在CPU每个核心中独有一份,L3 .则是所有CPU核心共享的内存。L1、L2、L3的越离CPU近就越小,速度也越快,越离CPU远,速度也越慢。再往后面就是内存,内存的后面就是硬盘。计算机在执行程序时,每条

2021-02-24 21:47:01 120

原创 LeetCode习题集-最长有效括号

题目给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释:最长有效括号子串为 "()"。示例 2:输入: ")()())"输出:4解释:最长有效括号子串为 "()()"。对题目的理解: 在一段字符串内需要满足两个条件即有效字符串:1: "(" 和 ")" 的数量相等2: "(" 出现在对应 ")" 的前面。例如:"()(())" 是一个有效字符串,    ")(" 则不是(不满

2020-09-15 10:45:28 120

原创 Leetcode习题集-股票交易系列

LeetCode股票交易系列一共有6道题,运用贪心思想和动态规划来解题!文章目录题目条件:在主题干下分别加上以下条件分析1) 最多进行 1 笔交易(k=1)【贪心算法实现】2) 不限交易次数【二维 DP】3) 不限交易次数,但有「冷冻期」的额外条件。4) 不限交易次数,但有「手续费」的额外条件5) 最多进行 2 笔交易(k=2)【三维 DP】6) 最多进行 k 次交易题目给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。条件:在主题干

2020-09-09 16:47:48 342

原创 Leetcode习题集-吃掉N个橘子的最少天数

题目:厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子: 吃掉一个橘子。 如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子。 如果剩余橘子数 n 能被 3 整除,那么你可以吃掉 2*(n/3) 个橘子。每天你只能从以上 3 种方案中选择一种方案。请你返回吃掉所有 n 个橘子的最少天数。 示例 1:输入:n = 10输出:4解释:你总共有 10 个橘子。第 1 天:吃 1 个橘子,剩余橘子

2020-09-01 21:36:36 400 1

原创 Leetcode习题集-黑名单中的随机数

题目:给定一个包含 [0,n ) 中独特的整数的黑名单 B,写一个函数从 [ 0,n ) 中返回一个不在 B 中的随机整数。对它进行优化使其尽量少调用系统方法 Math.random() 。提示:1 <= N <= 10000000000 <= B.length < min(100000, N)[0, N) 不包含 N,详细参见 interval notation 。示例 1:输入:[“Solution”,“pick”,“pick”,“pick”][[1,[]],

2020-08-31 21:07:16 197 1

原创 快速上手Java泛型

文章目录一、泛型主要用法1 泛型类2 泛型方法3 限定泛型类型变量4 通配符二、为啥用泛型三、泛型的局限性一、泛型主要用法1 泛型类Pair 类引人了一个类型变量 T,用尖括号 ( < >) 括起来,并放在类名的后面。public class Pair<T>泛型类可以有多个类型变量。例如, 可以定义 Pair 类,其中第一个域和第二个域使用不同的类型:public class Pair<T, U> { . . . } 类定义中的类型变量指定方法的返

2020-08-31 17:13:08 100 1

原创 Git命令清晰图解

Git是目前世界上最先进的分布式版本控制系统远程仓库Remote、本地仓库Repository、工作区workspace、暂存区index等概念介绍。远程仓库:作为代码的远程托管平台,列如github、gitlab等。本地仓库:我们自己本地储存的一份代码,将远程代码fetch/clone后就会到本地仓库。工作区:我们可以看到的和修改的就是工作区代码,通过切换本地仓库分支,该分支的代码就会加载到工作区。暂存区:暂存区,或者叫待提交更新区,在提交进入Repository之前,我们可以把所有的更新放在

2020-08-24 12:55:13 281

原创 Java并发基础知识

初识Java并发有互相关注的没,交个朋友文章目录初识Java并发一、什么是线程二、如何中断线程三、认识线程状态四、认识线程属性五、同步处理六、阻塞队列七、Callable 与 Future八、执行器九、同步器一、什么是线程多线程程序在较低的层次上扩展了多任务的概念:一个程序同时执行多个任务。通常,每一个任务称为一个线程(thread)。多进程与多线程有哪些区别呢?本质的区别在于每个进程拥有自己的一整套变量, 而线程则共享数据。二、如何中断线程1 正常运行结束2 interrupt 方法

2020-08-18 21:48:10 190 1

转载 史上最全正则表达式总结

1.正则表达式正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。列目录时, dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的。正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。1.1 普通字符由所有那些未显..

2020-08-12 12:56:27 985

原创 git遇到错误Failed to connect to 127.0.0.1 port 1080: Connection refused

git pull拉代码时遇到如下错误:网上搜索说是代理导致的,于是输入如下命令取消代理:git config --global --unset http.proxygit config --global --unset https.proxy但是依然报错,如下图所示:后来发现该项目中的代理设置并未取消!解决方法为:1.进入该项目的.git文件夹(可能是隐藏的,需要打开显示隐藏文件设置)。2.找到config文件。3.删除config文件中的http部分内容。4.再执行git pu

2020-05-15 11:16:02 597

原创 数据结构与算法学习之第二天

线性表:由0或多个数据元素组成的有限序列。ADT 线性表Data 一对一的数据OperationInitList:初始化ListEmpty:判断是否为空ClearList:清空GetElem:将线性表L中的第i个位置元素值返回给eLocateElem:在线性表中查找其可能存在的元素的序号ListInsert:插入元素ListDelete:删除元素ListLength:线性表长...

2020-03-29 11:06:49 68

原创 数据结构与算法学习之第一天

本文内容较为简洁,适合学过的同学进行回顾。程序设计 = 数据结构+算法数据结构:就是关系,数据之间关系的集合。分为:逻辑结构和物理结构逻辑结构:数据元素的相互关系。1.集合结构:集合中数据无相互关系2.线性结构:一对一关系3.树形关系:一对多关系4.图形结构:多对多关系物理结构:逻辑结构在计算机中的存储形式即数据元素存储方式:1.顺序存储结构:如数组,是把元素存放在地址连续的...

2020-03-24 22:53:26 93

原创 钉钉小程序快速上手

语言类似于vue,建议先学习vue。小程序分为 app 和 page 两层。app 用来描述整体程序,page 用来描述各个页面。1.App代表顶层应用,管理所有页面和全局数据,以及提供生命周期方法。(1)app.js:应用逻辑(2)app.acss:应用样式(可选)(3)app.json:应用配置:就是配置路由的地方App 提供四个事件,可以设置钩子方法。(1)onLaunch:小...

2019-12-31 17:56:06 2749 1

原创 threejs动画时间与帧率的关系

每一帧动画与animationclip.time时间相对应,当使用animation.mixer.updata()更新位置时,mixer.time和cilp.time的时间也随之更新;同样地,当改变时间时,位置也同样相应更新。不过update会立马更新位置,而改变时间只有在update的时候才会立马更新到该时间位置。...

2019-11-13 20:23:50 2263

原创 threejs学习之透视相机与正交相机

three.js学习之透视相机与正交相机透视相机和正交相机的原理都是将可视范围内的物体投影到一个平面,我们在浏览器上所看到的就是这个投影平面,这个平面也就是我们设置相机时,far属性所在的那一个横截面。透视相机和正交相机的区别就是可视体的设置方法不同,透视相机的可视体是一个四锥体,而正交相机是一个长方体;透视相机由四锥体投影到一个平面时,相同大小的网格离上顶面越近投影到far横截面自然...

2019-11-11 21:50:04 3089

原创 WebWorker简介

导航什么是WebWorker为什么要使用WebWorkerWebWorker兼容性如何WebWorker能用来做什么如何使用WebWorkerimportScripts.WebWorker的其他类型介绍1.什么是WebWorkerWebWorker是运行在后台的javascript,独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情。点击选取内容等等,而此时...

2019-10-20 23:51:29 641

原创 three.js动画(Animation)

导航一、three.js的动画解析基本流程二、各部分功能介绍三、threejs的动画类型四、threejs对动画的处理过程一、three.js的动画解析基本流程var mesh; //导出外部文件获得// 新建一个AnimationMixer, 并取得AnimationClip实例列表var mixer = new THREE.AnimationMixer( mesh );v...

2019-10-17 22:11:36 7162 4

原创 NodeJS搭建本地服务器

主要是为了解决浏览器无法跨域访问的问题步骤1.下载Node.js 并安装2.验证是否安装成功控制台输入:node -v3.运行npm install anywhere -g来安装anywhere注意:如果出现fetchMetadata: sill resolveWithNewModule [email protected] checking in在网上找了一些原因,才发现后面的URL地...

2019-10-13 21:55:08 372

原创 three.js材质大全

three.js材质大全目录材质(Material)MeshBasicMaterialMeshDepthMaterialMeshDistanceMaterialMeshMatcapMateriaMeshNormalMaterialMeshFaceMaterialMeshLambertMaterialMeshPhongMaterialMeshToonMaterialMesh...

2019-10-11 22:06:29 1439

原创 three.js网格加载原理

如下代码所示,每当我们运用three.js创建一个网格时,网格的构造方法中都会自动生成一个object3D对象,可以看出,所有的网格底层其实都是一个object3D对象。创建完object3D对象之后再把对象类型改为type,将我们之前定义好的集合体(geometry)和材质(material)赋值给这个object3D对象,也就是现在的Mech对象。至此,网格加载完成,进行更新。THREE...

2019-10-07 09:46:11 255 1

原创 three.js中的object3D对象

下面是object3D对象的构造方法,在该方法下我们可以清楚的看到一个object3D对象的构造过程。接下来按源码顺序具体解释一下每个属性和对象方法:Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。uuid是Universally Unique Identifier的缩写,它是在一定的范围内(从特定的名字空间...

2019-10-07 09:44:41 6171

原创 three.js为正方体6个面加载不同纹理(and天空图的制作)

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>TextureTest</title> <script src="../libs/three.js"></script> <s...

2019-10-02 19:57:45 2133 2

原创 three.js鼠标事件

实现功能:1.左键点击方块并移动鼠标,方块跟随鼠标移动。2.右键点击方块并移动鼠标,方块旋转。3.鼠标滚动可以放大或缩小方块。代码实现如下:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Test01</title&...

2019-09-29 23:55:31 5197 1

hexo-theme-icarus-master.zip

个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客

2020-09-12

myblogvue-master.zip

个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客个人博客

2020-09-12

apache-maven-3.6.1.rar

maven是一个项目构建和管理的工具,提供了帮助管理构建、文档、报告、依赖、scms、发布、分发的方法。 可以方便的编译代码、进行依赖管理、管理二进制库等等。 maven的好处在于可以将项目过程规范化、自动化、高效化以及强大的可扩展性利用maven自身及其插件还可以获得代码检查报告、单元测试覆盖率、实现持续集成等等

2020-09-11

lombok-plugin-0.31-2020.1.zip

Discussing code is now as easy as highlighting a block and typing a comment right from your IDE. Take the pain out of code reviews and improve code quality. Try it free! Features @Getter and @Setter @FieldNameConstants @ToString @EqualsAndHashCode @AllArgsConstructor, @RequiredArgsConstructor and @

2020-09-11

instantclient_19_5.rar

instantclient是连接orcal数据库的一个客户端工具,双击sqlplus.exe程序,弹出请输入用户名,键入: scott/[email protected]:1521/orcl即可,其中sctt是登陆orcle的用户名,tiger是密码,后面的是主机地址,orcl是数据库名。

2020-08-20

jdk-8u231-windows-x64.zip

JDK8 一、新特性 1、lambda表达式(重点) 2、函数式接口 3、方法引用与构造器引用 4、Stream API(重点) 5、接口中的默认方法和静态方法 6、新时间日期API 7、其他新特性

2020-05-16

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

TA关注的人

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