自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM 内存溢出、泄漏问题

1 内存溢出、内存泄漏排查1.1 内存溢出内存溢出:是指程序在申请内存时,没有足够的内存空间供其使用,出现OutOfMemoryError错误。内存溢出的原因可能为:存在死循环和方法的无限递归调用。大量循环产生新对象。内存中加载的数据量过于庞大,如一次从数据库取出过多数据。集合类中有对对象的引用,使用完后未清空,使得JVM不能回收。(内存泄漏)可以通过Jstack工具和图形化JConsole工具查询到发生异常的具体区域。启动参数内存值设定的过小。1.2 内存泄漏内存泄漏:是指程序在

2021-03-15 21:52:38 195

原创 Java单例设计模式

文章目录1 单例设计模式1.1 饿汉式1.2 懒汉式+线程不安全1.3 懒汉式+线程安全1.4 DCL双重校验锁1.5 静态内部类1.6 枚举类型1.7 单例在JDK源码的运用1 单例设计模式确保一个类只有一个实例,并提供该实例的全局访问点。使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。1.1 饿汉式线程安全,在类装载的时候就完成实例化,没有达到Lazy Loading 的效果。如

2021-03-14 14:48:45 103

原创 Java 设计模式七大原则

文章目录1.七大原则1.1单一职责原则1.2 接口隔离原则1.3依赖倒转原则1.4里氏替换原则1.5开闭原则1.6迪米特法则1.7合成复用原则UML类图。1.七大原则设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础。常用七大原则单一职责原则接口隔离原则依赖倒转(倒置)原则里氏替换原则开闭原则迪莱特法则合成复用原则1.1单一职责原则对类来说的,**即一个类应该只负责一项职责。**如类A负责两个不同职责;职责1,职责2。当职责1需求变更而改变A时,可能

2021-03-14 13:24:43 127

原创 Java 浅拷贝和深拷贝

文章目录1 浅拷贝和深拷贝1.1 浅拷贝1.2 深拷贝1 浅拷贝和深拷贝1.1 浅拷贝对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那么浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。因为实际上两个对象的该成员变量都指向同一个实例。在这种情况下,在一个对象中修改该成员变量会影响到另一个对象的该成员变量值。浅拷贝是使用默认的 cl

2021-03-13 14:27:34 88

原创 Java语言基础知识

文章目录1.1 面向对象特性1.2 重载与重写1.3 泛型1.4 关键字1.4.1 static1.4.2 final1.5 字符串类比较1.1 面向对象特性封装性:是指隐藏对象的属性和方法实现细节,对外提供访问属性的公共方法。好处:能够更好的把控成员变量,甚至是管理类的内部结构。良好的封装能够减少耦合,使得代码更加健壮。外部程序通过对外方法即可访问,无需关注实现细节。继承性:继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功

2021-03-13 14:26:01 77

原创 JVM 垃圾回收器

文章目录1 垃圾回收器1.1 Serial1.2 ParNew1.3 Parallel Scavenge1.4 CMS1.5 G11.6 Stop The World1 垃圾回收器垃圾回收算法是JVM内存回收过程中具体的、通用的方法,垃圾收集器是JVM内存回收过程中具体的执行者,即各种GC算法的具体实现。1.1 SerialSerial 是最基础、历史最悠久的收集器。是一个单线程工作的收集器。在进行垃圾收集时,必须暂停其他所有工作线程,直到它收集结束。1.2 ParNewParNew收集器其

2021-03-08 15:29:31 81

原创 JVM 垃圾回收算法

文章目录1 垃圾回收算法1.1 标记-清除算法1.2 标记-复制算法1.3 标记-整理算法1.4 分代收集算法1 垃圾回收算法1.1 标记-清除算法分为“标记” 和 “清除” 两个阶段:首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未标记的对象。标记过程就是对象是否属于垃圾的判断过程。缺点执行效率不稳定,会随着对象增长而降低。会产生内存碎片化问题。1.2 标记-复制算法将可用内存按容量划分为大小相等的两块,每次只使用

2021-03-08 15:26:42 99

原创 JVM 对象存活分析

文章目录1 对象存活分析1.1 引用计数法1.2 可达性分析算法1 对象存活分析1.1 引用计数法在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能在使用的,可以,就可以被回收。弊端:很难解决对象之间相互循环引用的问题。public class ReferenceCountingGc { public Object ojb = null; public static void main(Strin

2021-03-08 15:23:48 85

原创 JVM 内存结构

文章目录1 JVM内存结构1.1 程序计数器1.2 Java虚拟机栈1.3 本地方法栈1.4 堆1.5 方法区1 JVM内存结构JDK1.6、JDK1.7、JDK1.8 内存模型演变1.1 程序计数器较小的内存空间、线程私有、记录当前线程所执行的字节码行号。如果执行Java方法,计数器记录虚拟机字节码当前指令的地址,本地(Native)方法则为空。唯一一个不会出现OutOfMemoryError的内存区域。作用:指向下一条要执行的字节码指令地址。1.2 Java虚拟机栈线程私有的

2021-03-06 17:32:53 88

原创 JVM 类加载机制

文章目录1. 类加载机制1.1 类的生命周期1.2 类加载器1.3 双亲委派机制1. 类加载机制Java 虚拟机把描述类的数据从Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java 类型,这个过程被称为虚拟机的类加载机制。1.1 类的生命周期类的生命周期分为,加载、连接、初始化、使用和卸载这四个阶段,在连接中又包括:验证、准备、解析。其中加载、验证、准备、初始化、卸载这5个阶段顺序是确定的,类的加载过程必须按照这种顺序进行开始,而解析阶段则不一

2021-03-05 14:28:16 59

原创 深入理解AQS

文章目录1. AQS1.1 AQS 是什么1.2 AQS 主要方法源码解析1.2.1 获取资源1.2.2 释放资源1.3 基于AQS 实现的锁1. AQS1.1 AQS 是什么AQS是 AbstractQueuedSynchronizer 的简称,即抽象队列同步器 。是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石, 通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类变量state表示持有锁的状态。数据结构它并不是直接储存线程,而是储存拥有线程的Node

2021-03-04 20:57:35 103 1

原创 Java Volatile关键字

文章目录1. Volatile1.1 基本概念1.2 volatile的内存语义1. Volatile1.1 基本概念内存可见性内存可见性,指的是线程之间的可见性,当一个线程修改了共享变量时,另一个线程可以读取到这个修改后的值。重排序为优化程序性能,对原有的指令执行顺序进行优化重新排序。重排序可能发生在多个阶段,比如编译重排序、CPU重排序。1.2 volatile的内存语义保证变量的内存可见性禁止volatile变量与普通变量重排序内存可见性public class Vo

2021-03-04 13:17:53 92 1

原创 Java ThreadLocal类

文章目录1. ThreadLocal1.1 ThreadLocal 是什么1.2 底层数据结构以及原理1.3 内存泄露问题1.4 应用场景1. ThreadLocal1.1 ThreadLocal 是什么通常情况下,我们创建的变量是可以被任何⼀个线程访问并修改的。如果想实现每⼀个线程都有⾃⼰的专属本地变量该如何解决呢? JDK 中提供的 ThreadLocal 类正是为了解决这样的问题。也就是说ThreadLocal 提供了线程间数据隔离的功能,只在同一个线程共享数据。1.2 底层数据结构以及原理

2021-03-04 13:15:59 87 1

原创 Java 原子操作类 Atomic

文章目录1 Atomic 类1.1 Atomic 是什么?1.2 具有原子性的原理1 Atomic 类1.1 Atomic 是什么?Java从JDK1.5 开始提供了java.util.concurrent.atomic包(以下简称Atomic包),这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。Atomic包大致可以分为4类原子更新基本类型原子更新数组原子更新引用原子更新属性Atomic只能保证读写安全(读写会加锁),并不能保证线程安全。例如:如

2021-03-03 17:18:43 176 1

原创 由浅入深分析阻塞队列

文章目录1 阻塞队列1.1 常见的阻塞队列1.2 阻塞队列的原理1.3 使用场景1.4 手写 BlockingQueue1 阻塞队列1.1 常见的阻塞队列ArrayBolckingQueue由数组结构组成的有界阻塞队列。内部构造是数组,具有数组的特性。public ArrayBlockingQueue(int capacity) { this(capacity, false);}public ArrayBlockingQueue(int capacity, boolean fa

2021-03-02 16:41:39 96

原创 一文带你了解ReentrantLock

1 ReentrantLock文章目录1 ReentrantLock1.1 ReentrantLock 是什么?1.2 ReentrantLock 和 Synchronized区别1.1 ReentrantLock 是什么?ReentrantLock是⼀个非抽象类,它是Lock接⼝的JDK默认实现,实现了锁的基本功能。从名字上看,它是⼀个"可重⼊"锁,从源码上看,它内部有⼀个抽象类 Sync ,是继承了AQS,自己实现的⼀个同步器。同时,ReentrantLock内部有两个非抽象类 NonfairS

2021-03-02 13:22:58 138

原创 一文了解Synchronized关键字

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录1 Synchronized1.1 synchronized 关键字是什么?1.2 synchronized 原理1.3 synchronized JDK1.6 优化1.4 锁升级的过程1 Synchronized1.1 synchronized 关键字是什么?synchronized 关键字解决的是多个线程之间访问资源的同步性,synchronized 关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。

2021-03-01 21:29:57 156

原创 多线程的前置知识点

多线程的前置知识点文章目录多线程的前置知识点1 线程的几种状态2 三种线程初始化方法3 线程池3.1 为什么要使用线程池3.2 线程池原理3.3 五种常见的线程池1 线程的几种状态new 尚未启动的线程处于此状态 是指还没调用Thread实例的start()方法。Thread thread = new Thread(()->{});System.out.println(thread.getState()); // 输出 NEWrunnable 在Java虚拟机中执行的线程处于

2021-02-28 16:45:18 170 1

原创 字符串常量Java内部加载

字符串常量Java内部加载public class StringPool58Demo { public static void main(String[] args) { String str1 = new StringBuilder("58").append("tongcheng").toString(); System.out.println(str1.intern()); System.out.println(str1 == str1.inte

2021-02-28 11:53:50 139

原创 记一次学习心得

记一次学习心得在这次CSDN高校俱乐部技术分享会上,老师给我们带来了一种工程化编程思维,将一个复杂的大问题,拆解成可执行,好理解的小问题。下面我将通过一个小例子来体现它的奥秘之处。题目:用C语言打印一个等腰三角形通常我们会这样写 #include<stdio.h> int main() { int h; scanf("%d",&h); for(int i=h,k=1;i>=0;i--,k+=2){ for(int j=i-1

2020-12-21 17:28:16 88 1

原创 由浅入深了解Redis

Redis1.1概述redis是什么?官网概述Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings),散列(hashes),列表(lists), 集合(sets), 有序集合(sorted sets)与范围查询(bitmaps), 地理空间(hyperloglogs) 和 索引半径查询 (geospatial) 。Redis 内置了复制(replication), LUA脚本(Lua scr

2020-12-08 16:52:03 510

原创 分布式锁之Redis篇

分布式锁之Redis文章目录分布式锁之Redis1. 前言2. Redis实现分布式锁2.1 阶段一2.2 阶段二2.3 阶段三2.4 阶段四2.5 阶段五2.6 小总结3. Redisson实现分布式锁3.1 Redisson 简介3.2 可重入锁 Reentrant Lock3.3 读写锁 ReadWriteLock3.4 信号量 Semaphore3.5 闭锁 CountDownLatch3.6 Redisson解决上面Redis查询问题1. 前言在Java并发编程中,我们通常使用到synch

2020-12-08 16:42:45 290 1

原创 ssh在网络安全中的魅力

SSH1. SSH简介SSH是(Secure Shell Protocol)的简写 ,是网络应用层协议。目的是为远程登录会话和其他网络服务提供安全性的协议。2. 主要功能传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真

2020-12-07 17:05:43 190

原创 ubuntu 16.04环境配置以及必要软件安装

linux ubuntu系统环境搭建1. 配置环境1.1 安装jdktar -zvxf jdk-8u171-linux-x64.tar.gz -C /usr/environment/jdk#设置环境变量vim /etc/profileexport JAVA_HOME=/usr/environment/jdk/jdk1.8.0_271export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/

2020-11-30 18:44:56 225

原创 linux学习笔记---一些命令学习

linux 命令学习1 用户和用户组管理1.1 用户管理1、添加新的用户账号useradd 选项 用户名参数说明:选项:-c comment 指定一段注释性描述。-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。-g 用户组 指定用户所属的用户组。-G 用户组,用户组 指定用户所属的附加组。-s Shell文件 指定用户的登录Shell。-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。用户名:指定

2020-11-30 18:42:30 161 1

原创 缓存的一些开胃菜

文章目录缓存1. 缓存的概念2. 本地缓存3. 分布式缓存4. 缓存失效问题4.1 缓存穿透4.2 缓存雪崩4.3 缓存击穿缓存1. 缓存的概念在服务端编程中,缓存主要是指将数据库的数据加载到内存中,之后对该数据的访问都在内存中完成,从而减少了对数据库的访问,解决了高并发场景中数据库容器成为性能瓶颈的问题;以及基于内存的访问速度高于磁盘的访问速度的原理(数据库读取数据一般需要从磁盘读取),提高了数据的访问速度和程序性能。基本思想基本思想就是空间换时间,它对系统的性能提升的性价比非常高。缓存的思想

2020-11-20 15:45:53 151 2

原创 对Mybatis-Plus的爱不释手

MyBatis-Plus文章目录MyBatis-Plus1. 简介2. 能干什么2.1 特性2.2 常用注解2.2.1 @TableName2.2.2 @TableId2.2.3 @TableField2.2.4 @Version2.2.5 @TableLogic3. 怎么玩4. 小总结1. 简介MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。2. 能干什么2.1 特性强大的 CRUD 操作:内置

2020-11-15 14:44:53 163

原创 一文带你领略Java注解(Annotation)的魅力

文章目录Java注解(Annotation)什么是注解?注解的用处系统注解标准注解元注解自定义注解一个简单的注解带成员变量的注解结论获取注解信息举例Java注解(Annotation)什么是注解?Annotation是Java5开始引入的新特征,中文名称叫注解。它用来将元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。注解为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据。Java注解是附加在代码中的一些元数据,用于一些工具编译、运行时进

2020-11-04 21:53:48 167

原创 从源码角度分析 java反射(Reflection)

文章目录反射reflect1 反射的引入1.1 什么是反射机制呢?1.2 反射机制的优点与缺点2 Class类2.1 获得Class对象2.2 Classloader中loadClass()方法Class.forName()区别2.3 源码解析2.3.1 ClassLoader.loadClass源码解析2.3.2 Class.forName源码解析3 通过反射获取类的主要信息3.1创建对象3.2 获取类的属性3.3 获取类的方法3.4 获取泛型信息3.5 获取其他信息反射reflect1 反射的

2020-11-04 21:50:25 459 1

原创 一文了解nginx

nginx简介文章目录nginx简介前言1.2安装1.3解析配置文件1.4反向代理1.5负载均衡1.6动静分离第一种第二种1.7高可用原理安装keepalived1.8nginx原理前言本文主要介绍nginx的配置文件及使用场景什么是nginx?nginx(engine x)是一款高性能的http 服务器/反向代理web服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常

2020-09-16 17:32:03 233

原创 深入源码分析Spring AOP

文章目录前言AOP底层原理1、@EnableAspectJAutoProxy2、AspectJAwareAdvisorAutoProxyCreator3、AOP流程3.1、容器创建3.2、注册后置处理器3.3、初始化剩下的单实例Bean3.4、目标方法的执行4、总结前言本文主要介绍Spring AOP原理AOP底层原理1、@EnableAspectJAutoProxy@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)

2020-09-10 22:29:36 175

原创 stl知识点总结

1.容器STL容器分类:容器适配器、顺序容器、关联容器。容器适配器:stack—>后进先出//stack基本操作 stack<int>st; st.push(); //压入栈 st.top(); //访问栈顶元素 st.pop(); //抛出栈顶 st.empty(); //判断栈顶是否为空 st.size(); //栈内元素个数que...

2019-08-25 18:01:53 246

原创 knn算法总结

k-近邻算法(k-nearst neighbor)工作原理:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常...

2019-08-11 23:00:22 270

原创 python---numpy库知识点

numpy 是 python 中科学计算的核心库,numpy 这个词来源于 numerical 和 python 两个单词。它提供了一个高性能的多维数组对象,以及大量的库函数和操作,可以帮助程序员轻松地进行数值计算,广泛应用于机器学习模型、图像处理和计算机图形学、数学任务等领域。1.arraynumpy 中定义的最重要的对象是称为 ndarray 的 n 维数组类型,它是描述相同类型的元素集合...

2019-08-11 15:17:45 235 1

原创 思维题

//望来看的(不会写)同学不要直接粘代码,应付老师//还有我写博客水平有点low,没写好的地方还请大家多多包涵,我我我会尽力去写好图着色问题题目描述图着色问题描述为:给定无向连通图G=(V, E)和正整数k,求最小的整数k,使得用k种颜色对G中的顶点着色,使得任意两个相邻顶点着色不同。输入第一行:顶点个数N和边数M接下来M行:每行两个整数,表示a到b存在边。输出一个整数K, 最少...

2019-05-24 11:36:17 402 2

原创 迷之信号塔

题目描述有N个顶点,在顶点上放置信号塔则与之相邻的顶点能被信号覆盖到。现在给你N-1条边,求解最少需要放置多少个信号塔才能使得所有顶点都有信号输入第一行:一个整数N接下来N-1行:每行两个整数a和b(中间空格隔开)输出一个整数,最少需要放置信号塔的个数样例输入71 22 32 52 73 45 6样例输出3这该死的信号塔终于有点思路了了了但还是不过,希望路...

2019-05-21 13:17:33 543 3

原创 班级比赛题解

第一题 :传送门题意:把每个月银行账户余额加起来除以12//ac代码#include<cstdio>using namespace std;int main(){ double x; double re=0; for(int i=1;i<=12;i++){ scanf("%lf",&x); re+=x;...

2019-05-12 20:50:05 342 5

原创 分治算法实现螺旋数组

利用分治算法实现螺旋数组主要通过四个for循环+递归代码如下,与君共勉。#include<bits/stdc++.h>using namespace std;const int maxn=100;int num[maxn][maxn];int n;int ans=0;void fun(int a,int b){ int i=b,j=b,k; if...

2019-05-10 10:49:11 194

原创 c++利用栈实现简单计算器

@T简单计算器OC老师课后任务代码如下:`#include&lt;bits/stdc++.h&gt;using namespace std;int prio(char ch) //运算符优先级判定{switch(ch){case ‘+’:case ‘-’:return 1;case ‘’:``case ‘/’:return 2;case’(’:return 3;...

2019-05-10 10:48:46 2350

原创 0414打牛客比赛题解

dp算法题目描述:小猫在研究序列。小猫在研究选择。给定一个长度为N的序列a1,a2,…,aN,请你在这N个元素中选出一些(可以不选,可以全选),使得对于任意1≤i<N,ai与ai+1不被同时选,求选出的数的和最大是多少。输入描述:第一行一个正整数T,表示数据组数。每组数据的第一行一个正整数N。接下来一行N个正整数a1,a2,…,aN。输出描述:T行,每行一个整数,表示每组数据的...

2019-04-14 19:59:48 2967

book_Web_Code.rar

大二web课程书本课后任务源代码,提供css样式、js代码以页面图片,这是分每一个单元一个压缩包,不是一个合起来的项目

2020-05-20

空空如也

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

TA关注的人

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