自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java中OOM(OutOfMemoryError)错误分析及Java性能分析神器-JProfiler详解

JProfiler是一个重量级的JVM监控工具,提供对JVM精确监控,其中堆遍历、CPU剖析、线程剖析看成定位当前系统瓶颈的得力工具。可以统计压测过程中JVM的监控数据,定位性能问题JProfiler的安装JProfiler的安装 JProfiler详解JProfiler详解...

2020-07-30 11:06:04 389

原创 JVM中堆内存细节

2020-07-29 23:39:57 225

原创 Springboot配置Druid连接池后踩坑连接池自动断开{dataSource-1} closed

踩坑还原首先我们要在pom.xml文件中引入Druid连接池的包,版本啥的无所谓 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.21</version> </dependency>下面是springboo

2020-07-22 16:52:50 18160 6

转载 TreeMap和hashmap中用到的红黑树

红黑树图文详解,作者看到的比较详细的描述

2020-07-21 15:47:36 233

原创 Java中RandomAccessFile中的指针操作

RandomAccessFile简介此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当...

2020-06-16 15:37:23 910

原创 JAVA实现多线程复制同一个文件(非伪代码)

要求分析例:定义三个线程来复制文件,先计算文件总大小,然后平均分配给三个线程,0-1000,1001-2000,2001-3000,类似这样,如果文件大小不能被三个线程平均处理,这里我用的是再次开启一个线程来复制,其实我觉得不太妥当,因为给定是三个线程来复制,所以我想是否可以用到线程池来解决这个问题,让复制完的线程进入线程池,继续处理剩余的文件。这里可以设置核心线程数为三,等待队列大小为一。但是多开启一个线程还是比开启线程池来的直接一点,除非有硬性要求,否则多开启一个线程来处理已经足够了。代码实现一(多

2020-06-16 15:14:27 475

原创 JAVA实现单例模式之饿汉式和懒汉式

设计模式A:设计模式概述 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编写、代码设计经验的总结。 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性以及代码的结构更加清晰.B:设计模式分类 创建型模式(创建对象的): 单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。 行为型模式(对象的功能): 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 结构型模式(对象的组成): 模版方法模式、命令模式、迭代器模式、观

2020-06-15 19:50:29 237

原创 JAVA实现最简单的死锁现象

首先我们要理解什么是死锁,简单来说就是相互持有对方的锁死锁问题概述 如果出现了同步嵌套,就容易产生死锁问题 是指两个或者两个以上的线程在执行的过程中,因争夺资源产生的一种互相等待现象 死锁: 两个或者两个以上的线程, 在抢占CPU的执行权的时候, 都处于等待状态 举例: 中国人和美国人一起吃饭 中国人使用的筷子 美国人使用的刀和叉 中国人获取到了美国人的刀 美国人获取到了中国人的一根筷子

2020-06-15 12:04:05 261

原创 JAVA实现单项链表

未使用ArrayList,通过创建对象来实现public class SingleLinkList { //先初始化一个头结点,头结点不动,且不放任何元素 private HeroNode head = new HeroNode(0,"",""); //添加节点到单向链表 //找到该链表的最后一个节点,将该节点的next指向要添加的节点; public void add(HeroNode heronode){ //不能移动头结点,添加一个辅助变量来充

2020-06-03 21:43:51 169

原创 JAVA中数组实现循环队列

代码可以实现以下功能s(show),显示队列e(exit),退出程序a(add),添加数据g(get),取出数据h(head),队首元素代码实现//测试主函数public class 循环队列 { public static void main(String[] args) { System.out.println("测试环形队列 "); //创建一个环形队列 circleArray queue = new circleArray(4

2020-06-03 20:31:47 243 1

原创 JAVA实现稀疏数组棋盘案例

用稀疏数组模拟棋盘,其中数字1表示白色棋子,数字2表示黑色棋子,数字0表示还未被使用的棋盘代码实现public class 稀疏数组 { public static void main(String[] args) { //创建二维数组11*11,1表示黑色棋子,2表示白色棋子 int chessArr[][] = new int[11][11]; chessArr[1][2] = 1; chessArr[2][3] = 2;

2020-06-03 20:28:35 193

原创 实现动态Web的技术之Servlet

Servlet简介Servlet就是sun公司开发动态web的一门技术Sun在这些API中提供一个接口叫做:Servlet,如果你想开发一个Servlet程序,只需要完成两个小步骤:编写一个类,实现Servlet接口把开发好的Java类部署到web服务器中。把实现了Servlet接口的Java程序叫做,Servlet一个简单的Servlet实例编写一个普通类实现Servlet...

2019-09-13 00:03:41 238 1

原创 JavaWeb发布一个网站

1、基本概念1.1、前言web开发:web,网页的意思 , www.baidu.com静态webhtml,css提供给所有人看的数据始终不会发生变化!动态web类似淘宝的所有网站都是动态web提供给所有人看的网页内容在不同时刻不同地点都是不同的技术栈:Servlet/jsp, ASP, PHP在java中,动态web资源开发的技术统称为Javawebweb...

2019-09-12 21:00:37 385

原创 JavaScript实现计算器

计算器原理首先需要将计算器的框架搭出来<html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> body { margin-top: 60px; } input { width:...

2019-08-20 00:44:42 181

原创 JDK1.8的新特性之Lambda表达式

Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。Lambda表达式//匿名内部类Runnable runnable = new Runnable(){ @Override public ...

2019-08-04 18:19:21 341

原创 Java中三种线程创造方法

线程和进程简述进程A:线程和进程要想说线程,首先必须得聊聊进程,因为线程是依赖于进程存在的。B:进程概述什么是进程呢?通过任务管理器我们就可以看到进程的存在。概念:进程就是正在运行的程序,是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源。C:多进程的意义单进程计算机只能做一件事情。而我们现在的计算机都可以一边玩游戏(游戏进程),一边听音乐(音乐进程),...

2019-07-28 16:53:20 122

原创 Java中利用NIO复制文件的四种方法

NIO简述Java NIO ( New IO )是从 Java 1.4 版本开始引入的一个新的 IO API ,可以替代标准的 Java IO API 。NIO 与原来的 IO 有同样的作用和目的,但是使用的方式完全不同, NIO 支持面向缓冲区的、基于通道的 IO 操作。 NIO 将以更加高效的方式进行文件的读写操作.NIO与IO的区别NIO ...

2019-07-28 15:57:51 2503

原创 IO流中通过字节流实现文件复制的四种方法

文件复制我们试想生活中的文件复制步骤为Ctrl+C,Ctrl+V,通过这两个步解决问题,IO流完成复制的话也是两个步骤,首先用输入流来完成Ctrl+C,再用输出流完成Ctrl+V。输入流(源文件)每次读取一些信息,输出流在自己的文件里写入这些信息,输入流再读信息,输出流继续把读出的信息写进去,直到输出流读完信息,输入流就完成了信息写入,最终显示的就是文件复制,下面我们通过对一个视频文件进行复制,...

2019-07-25 17:33:29 489

原创 I/O流完成文件夹复制

I/O流简述A:IO流概述IO流用来处理设备之间的数据传输Java对数据的操作是通过流的方式Java用于操作流的对象都在IO包中 java.ioB:IO流分类a:按照数据流向 站在内存角度 输入流 读入数据 输出流 写出数据b:按照数据类型 字节流 可以读写任何类型的文件 比如音频 视频 文本文件 字符流 只能读写文本文件 什么情况下使用哪种流呢? 如果数据所在的文件...

2019-07-25 17:03:13 192

原创 Java中异常概述

Java中异常的概述和分类//A:异常的概述: 异常就是Java程序在运行过程中出现的错误。//B:异常的继承体系 异常的基类: Throwable 严重问题: Error 不予处理,因为这种问题一般是很严重的问题,比如: 内存溢出 非严重问题: Exception 编译时异常: 非RuntimeException 运行时异常: RuntimeExc...

2019-07-22 23:11:27 162

原创 Java模拟实现斗地主功能

需要完成的功能这里只完成创建扑克,发牌,看牌的功能,最终的实现斗地主功能还需进一步完善。创建扑克发牌的前提是有牌可发,所以我们要先创建一副牌,这里我们用的是HashMap集合来装扑克的花色以及点数;这样,我们就可以完成扑克的创建步骤。 String[] colos = {"♥", "♠", "♦", "♣"}; String[] nums = {"3", "4", "5"...

2019-07-22 22:33:20 576

原创 Java中TreeSet保证元素唯一且有序的原因

TreeSet底层数据结构TreeSet底层依赖于TreeMap,TreeMap的数据结构是二叉树(红黑树),由底层数据结构决定了TreeSet中元素有序且唯一。TreeSet集合中数据存储使用二叉树存储数据//第一次存储数据没有树根,就创建一个树根,把这个元素赋值给树根;//第二次进行存储的时候,首先和根节点的元素进行比较,比较有三种情况: //第一种情况当前元素和根节点的元素相同...

2019-07-22 21:30:50 1681 2

原创 Java中的6种集合遍历方法

Collection集合下List接口的三个子实现类Collection集合有两个接口,List接口和Set接口,在List接口下面有三个子实现类:ArrayList实现类,LinkedList实现类,Vector实现类。这三个实现类继承了Collection集合的遍历器,同时也有自己的遍历器,我们通过实例来说明如何遍历集合。Collection集合的迭代器因为Collection没有构造方...

2019-07-18 16:15:09 452

原创 Java中泛型概述和基本使用

泛型引入背景当我们调用一个方法的时候,有时候要传参数给方法,但是在调用方法之前我们需要对方法的接受参数类型进行确定,这在设计系统时是有局限性的。试想方法在被调用的时候根据传入的参数类型来确定接受类型,这将大大的提高代码的扩展性,因此有必要了解一下泛型的相关概念。泛型基本概念 //泛型机制:JDK1.5之后引入的一个概念 //把类型明确工作,推迟到创建对象,或调用方法时,才去明确...

2019-07-18 15:25:26 145

原创 Java实现快速排序

快速排序算法思想分治法:比大小,再分区从数组中取出一个数,作为基准数;分区:将比这个数大或等于的数全放到他的右边,小于他的数全放到他的左边。再对左右区间重复第二步,直到各区间只有一个数。实现思路:将基准数挖出形成第一个坑。由后向前找比他小的数,找到后挖出此数填到前一个坑中。由前向后找比他大或等于的数,找到后也挖出此数填到前一个坑中。再重复执行2,3两步骤。实现思路框图:...

2019-07-16 00:28:07 155

原创 Java实现冒泡排序、选择排序、直接插入排序

冒泡排序public class Maopao { public static void main(String[] args) { //冒泡排序 //思想:每一次排序将当前数与后一个数进行比较,大的放后面,重复进行, // 一轮排序结束后最大数将排到最后. int arr[]={24,69,80,57,13,20}; ...

2019-07-10 22:35:59 412

原创 Object类中hashCode()方法、equals()方法、getClass()方法、toString()方法和clone()方法总结

hashCode()方法在弄清楚hashCode之前我们需要先了解一下Object类//Object 是我们所有类的顶层父类,所有类都是直接或间接继承自他//创建Object类的对象 :Object obj = new Object();Object 类和我们学过的所有类具有相同的性质,只不过它是所有类的顶层父类。下面是hashCode()介绍//hashCode() 返回一个对象的...

2019-06-28 21:18:15 530

原创 Java中内部类概述和总结

内部类简述内部类,将一个类定义到另一个类内部,我们称之为内部类;在类A中,定义一个类B,那么这个类B我们称之为内部类,把A叫做外部类;根据内部类的定义位置不同,我们将内部类分为:局部内部类和成员内部类;成员内部类:将内部类定义到外部类的成员位置(类中方法外);局部内部类:将内部类定义到外部类局部位置(方法中)。public class Neibulei { public sta...

2019-06-27 18:09:44 109

原创 Java中传参和返回值方法总结

传参(参数传递)类名作为形式参数如果你以后看到一个方法的形参要一个“类”类型,就传一个该类对象public class MyTest { public static void main(String[] args) { Student student = new Student(); student.show(new Student(),20); ...

2019-06-27 00:56:51 2702

原创 Java中多态的基本知识

思维导图总结Java中的多态

2019-06-23 23:24:59 128

原创 Java中数组的定义及使用

数组数组的定义:数组是存储多个变量(元素)的东西(容器),这多个变量的数据类型要一致;一维数组的初始化数组的初始化分为两种:静态初始化+动态初始化;静态初始化:给定数组的值,系统确定数组的长度;动态初始化:给定数组的长度,系统给数组元素赋值,一般赋值为0或者null。一维数组初始化举例静态 : 数组类型[ ] 数组名 = new 数组类型 [ ] { 元素1, 元素2,… ,元素n ...

2019-06-22 22:40:17 573

原创 Java交换两个数据的四种方法

Java交换两个数据的四种方法我们熟知的交换两个数的方法是使用中间变量,但是这种方式需要引入一个无关的量,这自然会影响交换效率,因此我们提供另外三种数据交换方式。1.引入变量我们知道在计算机中,定义的每个变量都是计算机分配的一个地址来存储他们,这里我们先说一下两个符号 “=”和“= =”, “=”和“==”代表的意思非常容易混淆,“=”代表的赋值运算符, “= =”代表的判断运算符,所以语...

2019-06-05 14:40:50 4858

空空如也

空空如也

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

TA关注的人

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