JAVA
文章平均质量分 52
java
单手提煤气罐
这个作者很懒,什么都没留下…
展开
-
【无标题】
一、服务雪崩1、定义:服务堆积在同一个线程池中,因为所有的请求都是同一个线程池进行处理,这时候如果在高并发情况下,所有的请求全部访问同一个接口,这时候可能会导致其他服务没有线程进行接受请求,这就是服务雪崩效应效应。2、原因:a.某几个机器故障:例如机器的硬驱动引起的错误,或者一些特定的机器上出现一些的bug(如,内存中断或者死锁)。b.服务器负载发生变化:某些时候服务会因为用户行为造成请求无法及时处理从而导致雪崩,例如阿里的双十一活动,若没有提前增加机器预估流量则会造服务器压力会骤然增大二挂掉。转载 2022-06-20 09:02:01 · 236 阅读 · 0 评论 -
HashMap的实现原理
在JDK8中,HashMap底层是采用“数组+链表+红黑树”来实现的。HashMap是基于哈希算法来确定元素的位置(槽)的,当我们向集合中存入数据时,它会计算传入的Key的哈希值,并利用哈希值取余来确定槽的位置。如果元素发生碰撞,也就是这个槽已经存在其他的元素了,则HashMap会通过链表将这些元素组织起来。如果碰撞进一步加剧,某个链表的长度达到了8,则HashMap会创建红黑树来代替这个链表,从而提高对这个槽中数据的查找的速度。HashMap中,数组的默认初始容量为16,这个容量会以2的指数进行扩容。具体原创 2022-06-03 17:00:00 · 2419 阅读 · 1 评论 -
介绍一下信号量
信号量(Semaphore),也被称为信号灯,是在多线程环境下使用的一种设施,可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。信号量是一个非负整数,所有通过它的线程/进程都会将该整数减一(通过它当然是为了使用资源),当该整数值为零时,所有试图通过它的线程都将处于等待状态。在信号量上我们定义两种操作: Wait(等待) 和 Release(释放)。当一转载 2022-06-03 08:26:40 · 268 阅读 · 0 评论 -
Java创建字符串对象详解
JAVA创建对象有两种方式,一种是通过字符串常量的方式创建,比如String str=“abc”,一种是字符串变量通过new形式的创建,比如String str = new String(“abc”)String str = "abc"创建过程首先在常量池中查找是否存在内容为"abc"字符串对象如果不存在则在常量池中创建"abc",并让str引用该对象(也就是创建1个对象的情况)如果存在则直接让str引用该对象(该对象是存在方法区的运行时常量池中的)(也就是创建0个对象的情况)Java中原创 2022-05-03 15:05:21 · 2634 阅读 · 1 评论 -
红黑树详解
https://www.jianshu.com/p/038585421b73转载 2022-04-21 19:44:26 · 94 阅读 · 0 评论 -
GC(垃圾回收,Garbage Collect)
目录1 如何确定一个对象是垃圾?1.1 引用计数法1.2 可达性分析2 什么时候会垃圾回收3 垃圾收集算法3.1 标记-清除(Mark-Sweep)3.2 标记-复制(Mark-Copying)3.3 标记-整理(Mark-Compact)4 分代收集算法5 垃圾收集器5.1 Serial5.2 Serial Old5.3 ParNew5.4 Parallel Scavenge5.5 Parallel Old5.6 CMS5.7 G1(Garbage-First)5.8 ZGC5.9 垃圾收集器分类5.10原创 2022-04-08 19:44:32 · 316 阅读 · 0 评论 -
JVM常用参数及其含义
原创 2022-04-08 09:42:37 · 122 阅读 · 0 评论 -
运行时数据区与JVM内存模型
文章目录一、运行时数据区1.1 图解1.2 初步认识1.2.1 Method Area(方法区)1.3.2 Heap(堆)1.3.3 JVM Stacks(虚拟机栈)1.3.4 程序计数器1.3.5 本地方法栈1.4 折腾一下1.4.1 栈指向堆1.4.2 方法区指向堆1.4.3 堆指向方法区1.4.4 Java对象内存模型二、 JVM内存模型2.1 与运行时数据区2.2 图形展示2.3 对象创建过程2.4 常见问题一、运行时数据区在装载阶段的第(2),(3)步可以发现有运行时数据,堆,方法区等名词原创 2022-04-07 21:32:07 · 395 阅读 · 1 评论 -
JVM详解
文章目录一、JVM1.1 源码到类文件1.1.1 源码demo1.1.2 前期编译1.1.3 类文件(Class文件)1.1.3.1 16进制1.1.3.2 文件结构1.1.3.3 简单分析1.1.3.4 常量池分析2.2 类文件到虚拟机(类加载机制)2.2.1 装载(Load)2.2.2 链接(Link)2.2.2.1 验证(Vertify)2.2.2.2 准备(Prepare)2.2.2.3 解析(Resolve)2.2.3 初始化(Initialize)2.2.4 类加载器ClassLoader2.2原创 2022-04-06 21:05:30 · 1156 阅读 · 0 评论 -
Maven生命周期和插件
生命周期和插件Maven的核心概念是:坐标、依赖、仓库、生命周期以及插件Maven的生命周期是抽象的,其实际行为都是由插件来完成的1.1 何为生命周期Maven的生命周期就是为了对所有的构建过程进行抽象和统一生命周期包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建步骤,几乎所有项目的构建,都能映射到这样一个生命周期上每个构建步骤都可以绑定一个或者多个插件行为1.2 生命周期详解1.2.1 三套生命周期Maven拥有三套相互独立的生命周期,分别原创 2022-04-04 22:12:34 · 1449 阅读 · 0 评论 -
Tomcat服务器的下载、安装以及部署
文章目录前言一、Tomcat下载二、安装Tomcat1.解压压缩包2.配置环境变量3.启动Tomcat三、 Tomcat项目部署1.内嵌部署web项目2.外部连接web项目前言本篇文章将对于tomcat这一工具的下载、安装以及将web项目部署至tomcat上进行讲解一、Tomcat下载Tomcat的官网如下:https://tomcat.apache.org/在这里,我们选择下载的是Tomcat 9点击Tomcat 9 之后,我们就可以看见如上图所示,图中标注出来了Windows需要下载原创 2022-04-03 17:30:18 · 1551 阅读 · 0 评论 -
使用Nexus创建私服
文章目录前言一、搭建私服1.配置settings.xml文件二、上传本地项目至私服1.配置pom.xml文件2.上传项目前言前面讲过了如何在Windows上下载Nexus,接下来讲讲如何使用Nexus搭建私服以及上传本地项目至私服一、搭建私服1.配置settings.xml文件如下图,我们在settings.xml中配置了如下设置,意思是本机所有的请求都会转到nexus_aliyun仓库中去注意,如果我们访问的私服需要账号和密码,参考下图,同样是在settings.xml中配置注意,id原创 2022-04-01 18:21:09 · 405 阅读 · 0 评论 -
Windows下安装Nexus
文章目录前言一、下载Nexus二、安装1.解压2.启动Nexus3.访问网页4.登录前言这里不再将Nexus的基本概念了,直接讲如何在Windows上安装并运行Nexus。一、下载Nexus链接如下:https://help.sonatype.com/repomanager3/product-information/download进去后直接下载window系统的,但需要挂VPN,如果没有的话,下方有链接中有链接:https://pan.baidu.com/s/1edOn2DZfwdTlC2原创 2022-03-31 21:07:23 · 8090 阅读 · 7 评论 -
Maven仓库介绍
1 何为Maven仓库任何一个依赖、插件或者项目构建的输出都可以称为构件任何一个构件都有一组坐标唯一标识Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是仓库2 仓库的布局构件:groupId = org.testng、artifactId = testng、version = 5.8、classifier = jdk15、packaging = jar,其对应的路径按如下步骤生成基于构件的groupId准备路径,将groupId中的句号分隔符转换成路径分隔符原创 2022-03-30 22:01:21 · 2418 阅读 · 0 评论 -
使用Archetype生成项目骨架
什么是项目骨架?基本目录结构和pom.xml文件内容称为项目的骨架,Maven提供了Archetype以帮助我们快速构建项目骨架其实Maven为我们提供了一个快速构建项目骨架的方式,那就是archetype,下面讲讲如何使用Archetype来快速构建项目骨架Maven3,使用命令 mvn archetype:generate在本地打开cmd,输入该命令后会有一段长长的输出,然后回车选择默认的Archetype接着就会提示出现要创建项目的groupId、artifactId、ver原创 2022-03-29 21:41:31 · 290 阅读 · 0 评论 -
使用eclipse打包Maven项目
Maven中最重要的是POM文件,其打包也是基于该文件的,在POM文件中配置插件,可以实现将Maven项目打包成可执行jar包依赖如下:<build> <plugins> <!-- 将项目打包成可执行jar包 --> <plugin> <artifactId> maven-assembly-plugin </artifactId> <configuration> <descr原创 2022-03-28 20:55:18 · 7956 阅读 · 1 评论 -
告别动态规划,连刷40道动规算法题,我总结了动规的套路
文章目录前言一、动态规划的三大步骤二、案例详解案例一、简单的一维 DP(1)定义数组元素的含义(2)找出数组元素间的关系式(3)找出初始条件(4)再说初始化案例二:二维数组的 DP(1)定义数组元素的含义(2)找出关系数组元素间的关系式(3)找出初始值案例三、二维数组 DP问题描述步骤一、定义数组元素的含义步骤二:找出关系数组元素间的关系式步骤三、找出初始值前言今天,我就来跟大家讲一讲,我是怎么做动态规划的题的,以及从中学到的一些套路。相信你看完一定有所收获。如果你对动态规划感兴趣,或者你看的懂..转载 2021-04-21 21:23:20 · 293 阅读 · 0 评论 -
Java快速排序
目标算法:它来了它来了,没错,它就是快排,顾名思义,非常快速的排序算法,今天学习的算法就是快排算法思想:选择一个元素作为基准值。将比基准值小的元素都放在基准值的左边,比基准值大的元素都放在基准值的右边。一般选择的基准值都是第一个元素先从后往前进行比较,用基准值和最后一个元素进行比较,如果最后一个元素比基准值小,就交换位置,然后执行第3步;否则就用倒数第二个元素和基准值进行比较,直到找到第一个比基准值小的元素从后往前比较结束后,开始从前往后比较,如果找到了第一个比基准值大的元素,就交换位置,否原创 2021-04-16 19:25:02 · 174 阅读 · 0 评论 -
Java插入排序
目标算法:插入排序算法思想:插入排序,非常类似于整扑克牌。在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。无论什么时候,左手中的牌都是排好序的通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入如果输入数组已经是排好序的话,插入排序出现最佳情况,其运行时间是输入规模的一个线性函数如果输入数组是逆序排列的,将出现最坏情况。平均情况与最坏情原创 2021-04-16 16:00:09 · 254 阅读 · 0 评论 -
Java冒泡排序
目标算法:冒泡排序算法思想:比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换这样对数组的第 0 个数据到 N-1 个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置N=N-1,如果 N 不为 0 就重复前面二步,否则排序完成代码实例:public class Nc_140 { public static void main(String[] args) { int[] arr = {5, 2, 3, 2, 4};原创 2021-04-16 14:56:17 · 54 阅读 · 0 评论 -
自定义Arrays.sort()方法
目标:自定义Arrays.sort()方法,让其实现从大到小排序实现:如下图代码public class Test { public static void main(String[] args) { Integer [] arr = {0, 9, 8, 6, 4}; Arrays.sort(arr,(z1,z2)->(z2).compareTo(z1)); for (int a : arr ) {原创 2021-04-15 18:31:30 · 917 阅读 · 1 评论 -
求最大数
题目如下:示例题解代码:public class LeCo { public static void main(String[] args) { int[] nums = {1, 10, 12, 56}; System.out.println(largestNumber(nums)); } public static String largestNumber(int[] nums) { if (nums == null |原创 2021-04-15 18:00:36 · 225 阅读 · 0 评论 -
判断链表是否有环
文章目录前言一、题目要求二、解法1.JAVA代码2.Python代码总结前言链表,数据结构中很基础的一种存储结构,非常非常的基础,单链表更是非常简单,但对于初学者而言,这些都是非常复杂的。这次讲的就是如何判断链表中是否有环,环的定义在此就不再赘述了。一、题目要求判断一个链表中是否有环结构。最好空间复杂度为O(1)。二、解法1.JAVA代码代码如下:public class NC4 { //快慢指针能相遇说明有环 public boolean hasCycle(Lis..原创 2021-04-14 17:45:47 · 275 阅读 · 0 评论 -
Java二分查找(相同元素显示先出现的元素的下标)
二分查找,是很常用的一种查找方法,如果是简单的考察二分查找,就太简单了,这里讲的是一种二分查找的略微的升级版。如果要查找的元素有两个,而要求输出下标小的那个元素下标,废话不多说,上代码。public class NC { public static void main(String[] args) { int[] numbs = { 0, 2, 3, 4, 56, 98 }; int target = 3; System.out.println(原创 2021-04-14 17:01:47 · 329 阅读 · 2 评论 -
Java 求最大公约数
文章目录前言一、四种方法1.暴力枚举2.辗转相除法3.更相减损法4.简化的辗转相除法前言求最大公约数,是比较常见的算法,下面总结几种常用的方法一、四种方法1.暴力枚举无脑流,最为简单粗暴,也是最容易想到的一种方法public static int gcd(int a, int b) { // 暴力枚举 int min = a < b ? a : b; for (int i = min; i >= 1; i--) { if (a % i == ..原创 2021-04-12 19:45:20 · 5446 阅读 · 0 评论 -
Java 字符串匹配的三种方法
文章目录一、示例二、解释1.replace()方法2.replaceAll()方法3.replaceFirst()方法4.常用的字符列表一、示例如图,都是为了替换字符串s中的"("符号,但三种匹配方法,有三种不同的效果及写法。二、解释1.replace()方法replace()方法没有用到正则表达式,但会匹配所有的参数并进行替换2.replaceAll()方法replaceAll()方法使用的是正则表达式来匹配,而括号在正则表达式中是特殊字符,所以需要用双斜杠来进行转义,同时会匹配所..原创 2021-04-11 21:35:10 · 10303 阅读 · 0 评论 -
Java 字符串反转的三种方法
文章目录1.StringBuffer2.char数组3.charAt1.StringBufferpublic class App { public static void main(String[] args) { String s = "abcd"; System.out.println(new StringBuffer(s).reverse().toString()); }}SringBuffer类和String一样,也用来代表字符串,相比String, S..原创 2021-04-10 23:27:52 · 129 阅读 · 0 评论 -
LeetCode笨阶乘(JAVA、Python)
题目如下:其实可以使用递归,可以以四个数字为一组来进行运算,这样的话就避免了创建一个方法来完成运算JAVA代码如下:package main.java.com.leetcode;public class Solution_1006 { public int clumsy(int N) { if (N <= 2) return N; if (N == 3) return 6; int su原创 2021-04-01 23:21:31 · 87 阅读 · 0 评论 -
Java二维数组的快速查找
问题描述: 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列每行的第一个整数大于前一行的最后一个整数原因分析:二分查找的经典使用解决方案:class Solution { public boolean searchMatrix(int[][] matrix, int target) { if (matrix == null || matrix[0] == null) {原创 2021-03-30 23:32:35 · 468 阅读 · 0 评论 -
JAVA环境变量的配置
文章目录前言一、JAVA环境变量的配置1.打开环境变量2.点击“系统变量”下面的”新建“选项3.系统变量“中找到”Path“,点击编辑5.在“系统变量”栏,“新建”,“变量名”为“CLASSPATH”总结前言Java作为常用的一种编程语言,很多时候都需要使用,在安装好Java后,不要急着开始编写程序,正所谓工欲善其事必先利其器,要先配置好环境变量一、JAVA环境变量的配置1.打开环境变量 “此电脑”——>单击右键——>选择“属性”——>选择“高级”——>选择“环境..原创 2021-03-24 09:41:52 · 93 阅读 · 0 评论 -
JAVA冒泡排序
冒泡排序,是一种较简单的排序算法。其核心思想是重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。举个栗子吧!...原创 2021-01-03 15:14:50 · 407 阅读 · 0 评论 -
Java二分查找
二分查找前言一、二分查找是什么?二、示例1.代码演示2.结果演示总结前言对Java二分查找进行简单解释一、二分查找是什么?二分查找,又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。二、示例1.代码演示代码如下(示例):public class BinarySearch { public原创 2020-12-14 11:35:36 · 590 阅读 · 0 评论 -
Java基础之格式化输出
文章目录- 用法- 常用标识符- 实例原创 2020-10-26 17:02:42 · 694 阅读 · 0 评论