自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java-性能排查工具

性能排查工具:第三方:arthas使用和原理以及btrace、housemd、greys等性能排查工具、在线gc分析工具(gceasy)jdk:jconsole、jvisualvm、jmc参考:https://arthas.aliyun.com/doc/https://www.cnblogs.com/fengzheng/p/7416942.htmlhttps://github.com/oldmanpushcart/greys-anatomyhttps://github.com/CSUG/HouseMDhtt

2022-06-23 17:00:22 516 2

原创 caffeine与guava cache

1.Caffeine 对比 Guava cacheCaffeine在读写上都明显优于Guava cache,主要是因为2个原因, 淘汰策略 W-TinyLRU 和 Ringbuffer队列.2.W-TinyLRU2.1主流的淘汰策略FIFO 先进先出, 队列的形式,淘汰最先进入的缓冲数据,命中率较低LFU 最近最少未使用, 数据放入队尾,直接淘汰队首的数据即可,但是如果一个热点数据在短时间内没有访问就会导致被淘汰.LRU 最近最少频率, 对数据进行了访问频率的计算,通过每个数据的频率进行淘汰

2022-06-23 16:55:45 1394

原创 连续子数组的最大和 ----Java

代码package practice;/** * @author iu * 连续子数组的最大和 * 给出一个数组,找出数组中连续的最大和的子数组 * 使用max记录最大值,sum记录累加的当前值,如果sum <= 0 sum重新赋值为 array[i] * 如果 >= 0 则继续相加,但是需要比较sum和 max的值, max记录的是之前最大的值。 * 如果当前su...

2019-08-05 21:48:28 141

原创 Java虚拟机内存区域

JVM运行时管理的内存区域方法区虚拟机栈本地方法栈堆程序计数器程序计数器(线程私有)程序计数器是一个较小的内存区域,可以当做一个虚拟机运行时的字节码的行号计数器。字节码解释器工作的时候就是通过改变这个计数器的值来获取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复都需要这个计数器来完成。由于多线程是通过线程轮流切换并分配处理器的运行时间来完成的,所以每一次切换线...

2019-08-05 15:26:52 128

原创 二叉搜索树的后序遍历序列

给一个数组,然后判断数组是不是一个二叉搜索树的后序遍历序列二叉搜索树:左子节点小于根节点,右子节点大于根节点后序遍历:左右根 先打印左子节点,在右子节点,然后根节点。思路和代码思路写在代码的注释里面了。package practice;/** * @author iu * 二叉搜索树的后序遍历序列 * 给一个序列判断是不是某人二叉搜索树的后序遍序列 * 递归 * 最后一位...

2019-07-30 20:07:21 89

原创 虚拟机类加载机制---JVM

JVM类加载分为七步加载----验证----准备----解析—初始化—运行—卸载 其中验证准备解析 统称为连接过程。在类加载中加载、验证、准备、初始化、卸载的开始顺序是固定的。而只有开始顺序是固定的,在运行和完成并不一定是按着这个顺序进行的。他们可以是混合这进行,但是开始顺序是按着这个顺序开始的。jvm并没有强行规定加载的时间。但是初始化开始之前必须要进行加载、验证、准备。强制...

2019-07-29 16:59:05 72

原创 二叉树的前序中序后序一加层次遍历----java

前序先遍历根节点,在左子节点,在右子节点中序先遍历左子节点,在根节点,在右子节点后序先变量左子节点,在右子节点,在根节点代码package BinaryTree;import java.util.ArrayDeque;import java.util.Deque;import java.util.Stack;/** * @author iu */public cla...

2019-07-29 10:59:38 103

原创 从上到下依次打印二叉树

如题:如果一个二叉树的先序遍历为 1 2 4 5 3 6 7 则从上到下打印为 1 2 3 4 5 6 7 (先序遍历为先打印根节点,在左节点,在右节点)直接上代码代码----javapackage practice;import BinaryTree.BinaryTreeNode;import util.MyUtil;import java.util.Deque;import...

2019-07-26 15:34:17 130

原创 Java的13个原子操作类

Java从JDK1.5开始提供了java.util.concurrent.atomic包,这个包中的原子操作类提供了一个种用法简单、性能高效、线程安全的更新变量的一个方式原子更新基本类型Atomic提供了3个类:AtomicBoolean:原子更新布尔类型AtomicInteger:原子更新整型AtomicLong:原子更新长整型3个类提供的方法基本一模一样;主要方法如下:i...

2019-07-25 15:22:34 68

原创 Java-------阻塞队列

什么是阻塞队列阻塞队列是一个支持两个附加操作的队列,支持阻塞的插入和移除方法。阻塞的插入:当阻塞队列满的时候,会阻止其他线程插入元素,直到队列不满时,才可以继续插入阻塞的移除:当阻塞队列不为空时,可以移除元素。当队列为空时,获取元素的线程会等到阻塞队列不为空时再获取元素。抛出异常当队列满的时候,在往里面插入元素会抛出illegalStateException异常,如果队列为空时,获取...

2019-07-25 11:14:34 73

原创 Java------ConcurrentHashMap简介

ConcurrentHashMap相比较于HashMap和HashTable,比HashMap更安全,在多线程情况下不会出现死循环,比HashTable的效率更高,HashTable每一次都加了synchronized锁,导致多线程的竞争过于激烈。而ConcurrentHashMap使用了锁分段技术来提升并发效率。锁分段技术就是将锁用于容器的一部分数据,多个锁加锁于多个数据,这样这个数据加锁...

2019-07-23 23:04:07 105

原创 判断栈的压入序列和弹出序列是否为同一序列

题目输入两个整数序列,第一个序列表示栈的压入序列,第二序列表示栈的弹出序列,判断第二个序列是否为该栈的弹出序列;如:压入:{1,2,3,4,5} 弹出: {4,5,3,2,1} 该弹出序列为压入序列的弹出序列, 先压入1,2,3,4 然后弹出4 在压入5,在弹出3,2,1如:压入:{1,2,3,4,5} 弹出: {4,5,3,1,2} 该弹出序列不为压入序列的弹出序列,先压入1,2,...

2019-07-23 16:54:55 129

原创 堆栈实现min函数

* 包含min的栈 * 实现一个可以得到min元素的栈,并且min、pop、push方法的时间复杂度都是O(1)思路使用一个主栈,一个辅助栈来实现,主栈存正常数据,辅助栈存主栈的最小值如主栈后入的值比之前最小的值大,则复制之前最小值存入(保证主栈和辅助栈长度一致)min()方法获取的是辅助栈的最小值,pop和push方法都对主栈和辅助进行操作代码package practice;...

2019-07-22 16:41:42 319

原创 顺时针打印矩阵

给定任意一个矩阵,要求顺时针打印完矩阵 如:1 2 3 45 6 7 89 10 11 1213 14 15 16打印输出为 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10思路首先要确定循环结束的条件:起始位置为(0,0)第二次起始位置为(1,1)第三次为(2,2)以此推类:第n次为(n,n) 如4,4矩阵...

2019-07-22 12:46:25 63

原创 算法——输入一个十进制数和n进制,把十进制转换为n进制

题目是看牛客上面的一个题:代码看了别人的,都是用的循环判断。我使用的是递归(递归可能出现栈过深问题)我用的string 接收,最好使用StringBuffer 来接受。毕竟string是一个常量,耗费比StringBuffer更大。就是使用 m 对 n 求余得到一位数,然后在重复这个过程,直到为0 为止。package practice;public class BinaryCo...

2019-07-18 17:51:19 1299

原创 java报错提示 isnot encloseing class

出现了这样的报错,自己查找了一下发现写法错误了正确的写法应该是这样A a = new A();A.B ab = a.new B();正确和错误的写法先声明了A a = new A();原因:没有静态(static)的类中类不能使用外部类进行.操作,必须用实例来进行实例化类中类...

2019-07-16 15:42:24 996

原创 剑指offer——调整数组顺序使得奇数位于偶数前

代码package practice;import util.MyUtil;import java.util.Arrays;/** * @author iu * 将数值的奇数放在偶数前 * 维护2个指针,left位于0位和 right位于数值最后位, * left找到偶数 right找到奇数 然后交换 * left和right相遇是截止 */public class ...

2019-07-16 15:08:43 68

原创 重入锁ReentrantLock

介绍重入锁顾名思义,支持重进入的锁,他表示该锁能够支持一个线程对资源的重复加锁。该锁还支持获取锁时的公平和非公平选择。ReentrantLock不想synchronized一样隐式的支持可重入。但是在调用lock()方法时,已经获取到锁的线程。可以再次调用lock()方法而不被阻塞。公平锁与非公平锁:公平锁就是按照等待时间来分配锁的,也就是先进先出FIFO。而非公平锁,是不需要排队直接抢占的...

2019-07-16 11:02:41 81

原创 Java的Lock接口介绍以及与synchronized关键字的区别

Lock接口Lock接口是在Java SE5之后出现的,在并发包中新增的Lock接口以及相关的实现类来实现锁的功能。Lock和synchronized关键字的区别synchronized可以隐式的获取释放锁(通过synchronized方法块或者方法实现)。Lock接口在使用的时候需要显式的获取释放锁。但是拥有了锁的获取和释放的可操作性行、可中断的获取锁,以及超时获取锁等多种synchron...

2019-07-15 19:59:10 191

原创 Piped流(管道输入/输出流)

管道输入输出流比较其他的文件输入输出流和网络输入输出流的主要差别管道输入输出流主要用于线程之间的数据传输管道输入输出流的传输介质是内存管道输入输出的实现PipedOutputStream PipedInputStream 面向字节的管道输入输出流PipedWriter PipedReader 面向字符的管道输入输出流实例通过命令行...

2019-07-15 11:03:44 995

原创 Daemon线程

在java中,Daemon线程是支持型线程,用来程序中后台调用已经支持性工作,所有一旦JVM中没有Daemon线程的时候,JVM将会退出。Daemon必须在线程启动之前设置,不能再之后设置。可以通过Thread.setDaemon(true)将线程设置为Daeon线程。因为在Daemon不存在与JVM时,JVM将退出,所以不能通过finally块来保证执行关闭或者轻量资源的逻辑。...

2019-07-14 23:10:50 64

原创 线程的状态

线程的状态Java线程在运行的生命周期可能处于6中状态:NEW 初始状态,线程被构建,但是还没有调用start状态RUNNABLE 运行状态,Java线程将操作系统中的就绪和运行两种状态笼统的称作“运行中”BLOCKED 阻塞状态,表示线程阻塞于锁WAITING 等待状态,表示线程进入等待状态,进入该状态的线程需要其他等待其他线程做一些特点动作(通知或中断)TIME_WAITING...

2019-07-14 23:04:58 50

原创 设置线程的优先级

在java中 可以使用一个整形成员变量priority来控制优先级。在线程构建的时候可以通过setPriority(int)来设置优先级,需要输入一个1~10的int整型变量。 1的优先级最小,10的优先级最大。在一些操作系统同会忽略程序的优先级设置。所有不一定都会生效。...

2019-07-14 22:58:29 165

原创 Java内存模型概述(JMM)

处理器内存模型顺序一致性内存模式是一个理论的参考模式。JMM和处理器内存模型都是参照顺序一致性内存模型来设计的。在设计JMM和处理器内存模型的时候都会做一些放松。因为如果按照顺序一致性内存模型来设计JMM和处理器内存模型的话,许多性能的优化就不可以使用。针对不同类型的读写操作的执行顺序的放松,处理器内存模型可以分为以下几种。放松程序中的写-读操作————Total Store Order...

2019-07-11 21:22:57 139

翻译 final域的内存语义

final域的重排序规则对于final域,编译器和处理器要遵守两个重排序规则:在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这个两个操作之间不能重排序初次读一个包含final域的对象引用,与随后初次读这个final域,这个两个操作不能重排序写final域的重排序规则写final域的重排序规则禁止把final域的写重排序到构造函数之外通过以下两...

2019-07-10 15:41:23 66

翻译 内存屏障的四个分类

屏障类型指令示例说明LoadLoad BarriersLoad1;LoadLoad;Load2确保Load1的数据的装载先于Load2及所有后续装载指令的装载StoreStoreBarriersStore1;StoreStore;Store2确保Store1数据对其他处理器可见(刷新到内存)先于Store2及所有后续存储指令的存储LoadStore Bar...

2019-07-10 15:22:31 943

翻译 锁的内存语义

锁的释放-获取建立的happens-before关系锁除了让临界区互斥执行外,还是可以让释放锁的线程向获取同一个锁的线程发送消息class MonitorExample {int a = 0;public synchronized void writer() {a++; }public sunchronized void reader() {int i = a; }}...

2019-07-10 11:16:59 68

原创 happens-before 简介

针对JSR-133内存模型,使用happen-before概念来描述内存可见性。一个操作的结果对另外一个操作可见,就必须存在happen-before关系。happen-before规则程序顺序规则:一个线程中的每一个操作,happen-before于该线程中的任意后续操作监视器锁规则:对于一个锁的解锁,happen-before必须随后对这个锁加锁volatile变量规则:对于一个vo...

2019-07-09 23:17:03 62

转载 原子操作

总线锁保证原子操作处理器提供一个LOCK#信号,使得该处理器可以独占共享内存缓存锁保住原子操作内存区域如果被缓存在处理器的缓存行中,并且在Lock操作期间被锁定,那么当它执行锁操作回写到内存时,修改内部的内存地址。缓存一致性机制会阻止同时修改由2个以上的处理器缓存的内存区域数据。Java如何实现原子操作在java中通过锁和循环CAS的方式来实现原子操作...

2019-07-09 11:14:16 63

原创 java并发编程笔记——轻量级锁

轻量级锁轻量级锁加锁JVM会先在当前线程的栈帧中创建用于存储锁记录的空间,将对象头的中Mark Word复制到锁记录中,使用CAS(比较并交换)将对象头中的Mark Word替换为指向锁记录的指针。轻量级锁解锁使用CAS将Dispalaced Mark Word(锁记录)替换回对象头。如果成功没竞争发生,如果失败,代表当前锁存在竞争。锁会升级为重量级锁。...

2019-07-09 10:25:10 86

原创 java并发编程笔记——偏向锁

锁锁的4个状态:1.无锁状态2.偏向锁状态3.轻量级锁状态4.重量级锁状态锁的状态可以升级,但是不可以降级。目的是为了提高获得锁和释放锁的效率。偏向锁(让线程获得锁的代价更低)当线程访问同步块的时候,会在对象头的栈帧中的锁记录里存储锁偏向的线程ID,以后该线程进入和退出同步块时不需要进行CAS操作来加锁和解锁。偏向锁的撤销偏向锁只有当其他线程尝试竞争偏向锁的时候才会释放锁。偏...

2019-07-09 10:15:27 78

原创 vue中父子路由的配置

import Vue from 'vue'import Router from 'vue-router'import HelloWorld from '../components/HelloWorld'import Login from '../view/login/Login'import Index from '../view/index'import StudentNavMenu ...

2019-06-04 15:04:14 4029

原创 vue中axios传参

安装npm install axios --save 安装main.js配置文件中使用 methods: { findStudentGradeList () { this.$axios.post('/api/student/findStudentGradeList', this.studentGrade, {headers: {'content-Ty...

2019-06-04 15:01:41 3406 1

原创 vue使用axios跨域传参

安装axiosnpm install axiosmain.js配置// The Vue build version to load with the `import` command// (runtime-only or standalone) has been set in webpack.base.conf with an alias.import Vue from 'vue'im...

2019-05-30 16:00:30 522

原创 ESLint: Initialization error (ESLint). Cannot find module '.../lib/cli.js'

打开file 的 setting

2019-05-28 16:28:41 4010 1

原创 vue中报this dependency was not found:'element-ui/lib/theme-chalk/index.css'

看了很多,自己的情况是 {test: /.css$/,loader: ‘style-loader!css-loader’,exclude: /node_modules/}少了 exclude: /node_modules/在webpack.base.conf.js中 test中加入这一句就好...

2019-05-28 16:21:19 2516

原创 归并排序code

排序code迭代//基于迭代的归并排序public static void mergeSortBU(int[] arr, int len){ for (int sz = 1; sz <= len; sz += sz) { //对arr[i...i+sz-1]和arr[i+sz...i+2*sz-1]进行归并 for (int i = 0; i+s...

2019-05-24 14:53:05 66

原创 大根堆创建于排序

创建大根堆 static void buildBigHeap(int[] array, int last) { //从最大的非叶子节点开始(last - 1 /2),到根节点终止 for (int i = (last -1) / 2; i >= 0; i--) { int k = i; //判断是否超过数组...

2019-05-23 17:18:21 280

转载 八中经典排序算法

排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。我整理了以前自己所写的一些排序算法结合网上的一些资料,共介绍8种常用的排序算法,希望对大家能有所帮助。八种排序算法分别是:1.冒泡排序;2.选择排序;3.插入排序;4.快速排序;5.归并排序;6.希尔排序;7.二叉排序;8.计数排序;其中快排...

2019-05-22 08:33:59 341

原创 Vue报错找不到package.json

C:\Users\iu\Desktop\StdentGrade>npm run devnpm ERR! path C:\Users\iu\Desktop\StdentGrade\package.jsonnpm ERR! code ENOENTnpm ERR! errno -4058npm ERR! syscall opennpm ERR! enoent ENOENT: no suc...

2019-05-21 19:14:24 17453 1

空空如也

空空如也

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

TA关注的人

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