自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

梦蝶

不敢直面困难,怎能迎接挑战。

  • 博客(144)
  • 收藏
  • 关注

原创 字符串常量池StringTable 你真的了解么

本篇目录1、 String的基本特性2、 String的内存分配3、 字符串拼接操作3.1 字符串拼接3.2 拼接操作与append的效率对比4、 intern()的使用4.1 new String("ab")会创建几个对象,new String("a")+new String("b")呢4.2 关于String.intern()的问题4.3 总结String的intern()的使用1、 String的基本特性• String:字符串,使用一对""引起来表示。• String sl = "hell

2021-08-11 15:34:51 1039 4

原创 垃圾回收③---垃圾回收器

本篇目录1、GC的分类与性能指标1.1 GC分类1.2 评估GC的性能指标1.2.1 吞吐量1.2.2 暂停时间2、不同垃圾回收器概述2.1 垃圾收集器发展史2.2 7款经典的垃圾收集器2.3 7款经典的垃圾收集器与垃圾分代之间的关系2.4 垃圾收集器的组合关系2.5 查看默认的垃圾收集器3、Serial回收器:串行回收3.1 概述3.2 优势4、ParNew回收器:并行回收5、Parallel回收器:吞吐量优先5.1 概述6、CMS回收器:低延迟、并发回收6.1 概述6.2 工作过程6.3 CMS的优点

2021-08-11 11:22:44 1998 1

原创 本地方法接口

本篇目录本地方法为什么要使用Native Method使用现状本地方法简单来讲,一个Native Method就是一个java接口用非java代码的接口,一个Native Method 是这样一个java方法:该方法的实现由非Java语言实现,比如C。这个特征并非java特有,很多其他的编程语言都有这一机制,比如在C++ 中,你可以用extern “C” 告知C++ 编译器去调用一个C的函数。在定义一个native method时,并不提供实现体(有些像定义一个Java interface),因为其实

2021-08-09 14:54:50 627 2

原创 垃圾回收②---相关概念

本篇目录1、System.gc()的理解1.1 手动GC理解不可达对象的回收行为2、内存溢出与内存泄漏2.1 基本介绍2.2 内存溢出2.3 内存泄漏(Memory Leak)2.3.1 举例3、Stop The World4、垃圾回收的并行与并发4.1 并发(Concurrent)4.2 并行(Parallel)4.3 两者对比4.4 垃圾回收的并发与并行5、安全点与安全区域5.1 安全点(Safepoint)5.2 安全区域(Safe Region)6、引用6.1 基本了解6.2 强引用: 不回收6.3

2021-08-08 14:26:30 340 1

原创 垃圾回收①---概述+相关算法

本篇目录1、概述1.1 什么是垃圾1.2 为什么需要GC1.3 早期垃圾回收1.4 Java垃圾回收机制2、垃圾回收相关算法2.1 垃圾标记阶段:对象存活判断2.2 标记阶段算法1_引用计数法(Java没有采用)2.3 标记阶段算法2_可达性分析算法2.3.1 GC Roots2.4 对象的finalization机制2.4.1 对象是否死亡2.4.2 判断是否可以回收过程2.4.3 代码测试可复活对象2.4.4 分析OOM2.5 清除阶段算法1_标记-清除2.5.1 背景2.5.2 执行过程2.5.3

2021-08-07 21:10:54 1060 15

原创 执行引擎

本篇目录1、概述2、Java代码编译和执行的过程2.1 解释器、编译器2.2 为什么说Java是半编译半解释型语言3、基础回顾3.1 机器码3.2 指令指令集3.3 汇编语言3.4 高级语言字节码4、解释器现状5、JIT编译器5.1 HotSpot VM 为何解释器与JIT编译器共存解释器依然能存在的必要性HostSpot JVM的执行方式5.2 JIT编译器介绍概念解释热点代码及探测方式方法调用计数器回边计数器HotSpot VM 可以设置程序执行方式HotSpot VM 中的JIT分类C1和C2编译器不

2021-08-07 11:49:09 358 10

原创 运行数据区③---方法区

本篇目录1. 堆、栈、方法区的交互关系1.1 运行时数据区结构图1.2 堆、栈、方法区的交互关系2. 方法区的理解3. 设置方法区大小与OOM3.1 设置方法区大小3.2 方法区OOM4. 方法区的内部结构4.1 类型信息4.1 域信息(成员变量)4.3 方法信息non-final的类变量4.4 运行时常量池常量池运行时常量池5. 方法区的使用举例6. 方法区的演进细节永久代为什么要被元空间替换StringTable 为什么要调整7. 方法区的垃圾回收8. 总结1. 堆、栈、方法区的交互关系1.1 运行

2021-08-07 10:28:43 1776 75

原创 运行数据区②---堆

本篇目录1. 核心概述1.1 配置jvm及查看jvm进程1.2 分析SimpleHeap的jvm情况1.3 堆的细分内存结构JDK 7以前: 新生区+老年区+永久区JDK 8以后: 新生区+老年区+元空间2.设置堆内存大小与OOM2.1 查看堆内存大小2.2 堆大小分析2.3 OOM3.年轻代与老年代4.图解对象分配过程4.1 一般分配过程4.2 对象分配的特殊情况4.3 常用调优工具5.Minor GC、Major GC、Full GC5.1 年轻代GC(Minor GC)触发机制:5.2 老年代GC(M

2021-08-06 17:08:40 2075 49

原创 运行数据区 ① --- 程序计数器+虚拟机栈+本地方法栈

本篇目录回顾01 内存02 分区03 线程JVM系统线程1、程序计数器(PC寄存器)1.1 作用1.2 代码示例2、虚拟机栈2.1 概述2.1.1 背景2.1.2 内存中的堆与栈2.1.3 虚拟机栈是什么2.1.4 栈的特点2.1.5 栈中可能出现的异常2.1.6设置栈的内存大小2.2 栈的存储结构和运行原理2.2.1 概述2.2.2 栈帧的内部结构2.3 局部变量表(Local Variables)2.3.1 概述2.3.2 变量槽slot的理解与演示2.3.3 slot的重复利用2.3.4 静态变量与局

2021-08-06 11:06:49 666 59

原创 类加载子系统

本篇目录JVM结构图1. 类加载子系统作用1.1 类加载器ClassLoader角色1.2 加载1.3 链接1.3.1 验证:1.3.2 准备1.3.3 解析1.4 初始化2. 类加载器分类2.1 自定义类与核心类库的加载器2.2 虚拟机自带的加载器2.3 用户自定义类加载器3. ClassLoader的常用方法及获取方法3.1 ClassLoader类3.2 ClassLoader继承关系3.3 获取ClassLoader的途径4. 双亲委派机制4.1 双亲委派机制工作原理4.2 双亲委派机制的优势5.

2021-08-05 23:05:24 775 35

原创 jvm基本介绍

JVM的位置)一些JVM• SUN Classic• Exact VM• HotSpot VM :HotSpot指热点代码探测技术• BEA JRockit:(BEA 已被Oracle收购) 专注于服务端应用,世界最快的jvm之一• IBM J9• Taobao JVM: 目前已经在淘宝、天猫上线,替换了Oracle官方JVM;• Graal VM: Oracle 2018年4月公开,口号 Run Programs Faster Anywhere.最可能替代HotSpot的产品Andro

2021-08-05 19:38:56 685 1

原创 LPM Sprint 4-13 开发 工作总结

工作内容Sprint 周期 工作内容 Sprint 4 本迭代周期快速熟悉项目,开发新功能: 【添加任务】-智能推荐; 【任务类型】-智能推荐 Sprint 5 本周期修复学生登陆首页跳转问题。 Sprint 6 本周期主要是与SPM项目合并,了解SPM业务,讨论并落实合并方案。 Sprint 7 根据类图、任务拆分Excel、实际开发情况梳理业务; 【分配计划】解决计划...

2021-05-25 11:41:35 246 3

原创 【分布式系统】唯一ID生成策略总结

文章目录全局唯一id介绍    全局唯一id特点:常见全局唯一id生成策略    1、数据库自增长序列或字段生成id全局唯一id介绍    系统唯一id是我们在设计阶段常常遇到的问题。在复杂的分布式系统中,几乎都需要对大量的数据和消息进行唯一标识。在设计初期,我们需要考虑日后数据量的级别,如果可能会对数据进行分库分表,那么就需要有一个全局唯一id来标识一条数据或记录。生成唯一id的策略有多种,但是每种策略都有它的适用场景、优点以及局限性。

2021-01-30 11:55:27 6148 383

原创 【Java】生成 .json格式文件工具类

package com.glodon.kgb.utils.json;import java.io.File;import java.io.FileOutputStream;import java.io.OutputStreamWriter;import java.io.Writer;/** * @Author; * @Description:生成.json格式文件 * @Date:Created in 15:39 2020/12/15 * @Modified By: */publi

2021-01-20 14:40:26 534 12

原创 【java】File文件类型转为MultipartFile文件类型工具类

package com.glodon.kgb.utils.multipartfile;import java.io.*;/** * @Author; * @Description: * @Date:Created in 18:11 2020/12/15 * @Modified By: */public class File2byteUtil { public static byte[] File2byte(File tradeFile){ byte[] buffe

2021-01-20 14:24:34 708 9

原创 【Java】阿里云oss上传文件工具类【亲测有效】

前置条件:已有accessKeyId、accessKeySecret等信息。阿里云oss授权方式可自行百度。配置信息:config.properties 配置文件信息,value值根据自己实际情况补充完整# Aliyun Configaliyun.oss.accessKeyId=aliyun.oss.accessKeySecret=# Aliyun OSS Configaliyun.oss.endpoint=aliyun.oss.bucketName=aliyun.oss.fo.

2021-01-20 11:46:09 2386 11

原创 什么是hardcode编码

所谓hardcode,即硬编码:1、把一个本来应该(可以)写到配置信息中的信息直接在程序代码中写死了;2、程序代码中出现了魔法值。对于情况1,例如我们写了一个收发邮件的程序,用户名、密码,服务器地址等这些配置信息写成外部配置,在程序代码中读取配置信息;但是如果我们直接写死在程序代码中,每次改信息时都需要重新编译,且如果多处程序代码中出现了这种配置信息,修改起来也比较麻烦…这种程序不易于维护。大部分程序语言里,可以将一个固定数值定义为一个标记,然后用这个特殊标记来取代变量名称。当标记名称改变时,变.

2021-01-20 10:59:43 7224 26

原创 适合小白了解学习的DevOps实践

什么是DevOps?随着微服务及容器化技术的普及至大众视线后DevOps常被提及,关于DevOps似乎并没有一个标准的定义,如果说从基于目标导向去给它做一个定义,DevOps是一套实践方法,即在保证高质量的前提下,缩短系统由变更、提交、部署更新到生产环境的时间,DevOps的核心由此可见体现在“保证高质量”, “缩短时间”,“部署”。如上图,传统开发和运维之间存在一堵墙,开发人员想改变而运维人员想要稳定。另外,传统开发工具与运维工具也存在一堵墙,并没有打通成为一条工具链。从字面上来理解DevOps ,

2021-01-12 17:42:29 589 5

转载 快速了解什么是CI/CD

在谈论软件开发时,经常会提到持续集成Continuous Integration(CI)和持续交付Continuous Delivery(CD)这几个术语。但它们真正的意思是什么呢?在本文中,我将解释这些和相关术语背后的含义和意义,例如持续测试Continuous Testing和持续部署Continuous Deployment。概览工厂里的装配线以快速、自动化、可重复的方式从原材料生产出消费品。同样,软件交付管道以快速、自动化和可重复的方式从源代码生成发布版本。如何完成这项工作的总体设计称为“持续交

2021-01-12 15:10:46 535 4

原创 一文教你json字符串与JavaBean对象如何相互转换

工作中经常会遇到在复杂的业务场景中,将数据持久化时某个字段存储的是json字符串,取出数据进行操作时,不能直接对json字符串进行操作,能操作的是JavaBean对象。或者调用其他的服务(Java应用服务、python服务等),接收到的结果为json字符串,在对结果进行处理时,不能直接操作,需要将其转化为JavaBean对象。…所以,在这些情况下,就需要将json字符串、json对象与JavaBean对象进行转化,来实现需要的操作。实现方式如下:pom文件中导入依赖: &lt.

2021-01-10 21:33:31 2094 20

原创 InterlliJ Debug启动:method breakpoints may dramatically show down debugging

问题:使用idea在DEBUG的时候出现Method breakpoints may dramatically slow down debugging 问题。如下图:原因分析:根据提示信息判断,代码中的断点可能是打在方法上面了,导致在某个断点卡住了,程序一直启动不起来。重启服务器和重启idea都没有任何作用。。解决方式:打开Breakpoints面板看看,(快捷键:Ctrl - Shift -F8 )将选择框中的“√”去掉,点击右下角Done。再次启动程序即可。...

2020-12-12 17:42:24 972 10

原创 mybatis-plus中 queryWrapper查询对象常见方法

2020-12-12 17:13:01 3994 9

原创 使用Java8新特性(stream流、Lambda表达式)实现多个List 的笛卡尔乘积 返回需要的List<JavaBean>

需求分析:有两个Long类型的集合 :List<Long> tagsIds;List<Long> attributesIds;现在需要将这两个Long类型的集合进行组合,利用笛卡尔乘积的方式得到组合后的结果,并需要将得到的笛卡尔结果转换为Java中自定义的bean对象。例如:tagsIds=[1,2,3];attributesIds=[4,5]笛卡尔积结果为:[[1,4],[2,4],[3,4],[1,5],[2,5],[3,5]]最终转为Javabean对.

2020-12-12 16:42:29 2199 11

原创 MySQL中的CURRENT_TIMESTAMP

最近在项目中发现一个小问题,数据被更改时,插入记录和更新记录的时间会被同步更新。设置的两个时间create_time、update_time,按照预期来讲,应该是创建记录的时候会同步更新create_time,update_time,而在更新记录的时候,只有update_time会被同步更新。但实际情况却是update记录时,两个time都会被同步更新。在代码中并没有对时间进行显性的设置,对时间的维护是MySQL本身进行管理的,所以就查看了一下之前同事创建表时的SQL。通过SQL语句可以看出,.

2020-12-12 15:46:55 20354 14

原创 java.util.Date与 java.sql.Date两个包下Date的区别与联系

区别:

2020-12-05 16:53:39 1195 8

原创 int、bigint、mediumint、smallint、tinyint的比较

注意点:①int(4)只能存储4个长度的数字,int(11)就会存储11个长度的数字,这种理解是错误的。看下面的两个例子:    通过上面的例子可以看出,即使我指定了int(M)中M的长度,实际上MySQL中能存储的数据不仅是M的长度。是不是我指定了不同M的长度,所占的存储空间就不一样呢?也就是说数据的存储空间是不是会随着M的增加而增大呢?如果你的回答是肯定的话,那么,对数据存储所占空间大小的理解可能像小编之前一样,存在一些偏差。    实际上int(M)所占多少存储空间与指定..

2020-12-05 15:04:09 983 11

原创 swagger2注解说明文档

注解属性说明@Api用于类上,说明该类的作用。可以标记一个controller类作为swagger的文档资源valueurl的路径tags如果设置这个值,value的值会被覆盖description对Api资源的描述basePath基本路径,可以不用配置position设置多个Api显示的顺序位置producesFor example, “application/json, application/xml”cons...

2020-11-29 20:03:21 482 8

原创 “No operations defined in spec!”一文教你swagger如何扫描多个controller

方式一:如果你的项目工程目录结构是下面这样的:则使用多个controller的共同拥有的“父类”,即精确到这些个controller的上一级目录。按照以下方式进行扫描包:@Beanpublic Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(Reques

2020-11-29 11:59:08 2605 45

原创 MySQL数据类型和Java数据类型对应关系表

MySql 数据类型和 Java 数据类型之间的转换是很灵活的。一般来讲,任何 MySql 数据类型都可以被转换为一个 java.lang.String,任何 MySql 数字类型都可以被转换为任何一种 Java 数字类型(当然这样也可能出一些四舍五入,溢出,精度丢失之类的问题)。转换表ResultSet.getObject() 方法遵循 JDBC 规范对 MySql 和 Java 的类型进行转换。ResultSet.getObject() 对 MySql 类型和 Java 类型转换表 .

2020-11-28 17:37:49 504 6

原创 Mysql中tinyint与Java数据类型对应关系

Mysql中,如果使用tinyint(1)来设置表中字段的数据类型,可以存储0和1;在Java中使用Boolean来接收,0映射为false,1映射为true。Mysql中,如果使用tinyint来设置字段的数据类型,映射到Java数据类型中,不仅可以使用上面的Boolean类型来接收,也可以使用Java中int类型来接收。在MySQL中存储的tinyint(1)类型数据,不仅可以存储0和1,任意一个一位自然数都可以(0-9)。不过,当这样(tinyint(1))使用时,0映射为Java中的Boolea.

2020-11-28 17:00:20 32515 9

原创 MySQL中bit与Java数据类型对应关系

MySQL中使用bit存储数据,含义只能表示0或1,bit称为位数据类型;且不能用于计算。存储消耗<=1个字节【bit类型占用的空间与bit类型的列所在表的位置有关,有些情况下bit占用了一个字节,有些情况下bit实际占用了几个位,不足一个字节】。 bit与Java中的Boolean类型相对应,0表示false,1表示true。一般我们会使用bit(M)表示使用几位数据。在实际业务中,更常用的是使用bit(1),用1位来表示0或1,映射到Java中的数据类型对应的就是false或true。如..

2020-11-28 11:23:55 8906 3

原创 Mysql中Bigint与Java数据类型对应关系

MySQL中,有符号类型 Bigint(20)的取值范围为-9223372036854775808~9223372036854775807,与Java.lang.Long的取值范围完全一致,mybatis/mybatis-plus会将 Bigint(20)映射为Long类型。MySQL中,无符号类型Bigint(20) unsigned的取值范围是0 ~ 18446744073709551615,其中有一半的数据超出了Java中Long类型的取值范围,mybatis/mybatis-plus会将 Big.

2020-11-27 22:32:53 18198 16

原创 python 中各种下划线的神操作:_、_xx、xx_、__xx__、_ _xx、_classname_ _xx

  通常情况下,python中定义一些变量或者方法的时候,会使用到下划线。这些下划线只是简单的一种编码规约么?一开始仅认为是编程风格的规约,后来了解到这些下划线都是很讲究的。什么情况下该使用哪种下划线,不同的下划线有什么意义,等等。接下来就介绍一下以下划线命名的各种变量正确使用姿势。1、只有一个下划线(_)①先来看一个例子:通过上面的例子,我们不难发现,当我输入一个下划线时,会有返回值。其实在python解析器里,单个下划线(_)本身就是有值的。这是因为它会指向你最后一次执行的表达式,所以.

2020-10-31 13:57:43 788 4

原创 from import 导入时找不到module的解决办法(Python模块包中_init_.py文件的作用)

文章目录背景正文Ⅰ、报错信息Ⅱ、问题解决Ⅲ、问题分析Ⅳ、_init_.py文件作用背景最近在使用Pycharm开发python脚本时,遇到这样一个现象:打开别人给的工程,环境配置都没有问题,前一天晚上还能正常执行脚本,但第二天早上上班的时候,再次打开工程执行脚本竟然执行不了了。正文Ⅰ、报错信息报错信息就是找不到本地导入的模块。凡是本地的模块被引入到其他脚本文件中都读取不到。Ⅱ、问题解决在被引入.py文件的所在package下新建一个_init_.py文件(from 后面每一级packa

2020-10-30 23:32:49 20652 9

原创 一个实例告诉你Python中关于 if __name__ == ‘__main__‘ 有何作用

文章目录前言正文.py源文件实例现象运行原理前言相信大部分开发者对于“程序入口”这个概念并不陌生。对于很多编程语言来说,程序都必须要有一个入口,比如既保留C语言面向过程思想又有面向对象思想的语言C++等,以及完全面向对象的编程语言Java、C#等,都需要一个main函数作为程序的入口,也就是程序的运行会从main函数开始。Java、C#中都必须要有一个包含main方法的主类作为程序的入口。但python不同,它属于脚本语言,不像编译型语言那样先将程序编译为二进制文件再运行,而是动态逐行解释运行,

2020-10-30 11:56:16 391 3

原创 Anaconda 的安装、环境变量配置及使用

文章目录Anaconda 介绍下载安装配置环境变量Anaconda与PyCharm连接Anaconda 介绍Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。 因为包含了大量的科学包,Anaconda 的下载文件比较大(约 531 MB),如果只需要某些包,或者需要节省带宽或存储空间,也可以使用Miniconda这个较小的发行版(仅包含conda和 Python)。Conda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同版

2020-10-24 16:02:03 1153 4

原创 Anaconda python3.6版本下载

官方地址:https://repo.anaconda.com/archive/清华大学镜像:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/3.6的对应的是 Anaconda 5.2,5.3以后的都是python 3.7的了,安装时要注意版本对应问题,操作系统、以及32bit与64bit的选择。...

2020-10-24 15:25:41 6921 3

原创 PyCharm2020.2.3社区版安装,配置及使用教程(Windows)

下面开始本次安装教程:PyCharm分为专业版,教育版和社区版,专业版是收费的,教育版和社区版免费。专业版适用企业开发,教育版适合教师和学生,对于Python初学小白来说,如果仅仅是Python代码练习或者进行自动化测试学习,社区版功能完全足够了。Python学习爱好者可以根据自己需要选择下载,专业版网上有破解教程,可以百度。以下为社区版和专业版区别,官网上有说明:一,本次教程系统配置1.WIN10 64位2.8GB内存3.SSD固态硬盘4.屏幕分辨率:1920x10805.Python版

2020-10-24 15:13:10 13737 13

原创 Springmvc工作原理详解

文章目录SpringMVC是什么入门实例pom.xml配置文件前端控制器web.xml配置文件:springmvc.xml配置文件:index.jsp页面:HelloController:success.jsp页面:上述实例执行时序图:文字说明:处理流程架构图:Springmvc的几大组件:核心架构具体执行流程文字说明:SpringMVC是什么把名词分开来说,Spring与MVC可以更好地解释什么是SpringMVC,MVC为现代web项目开发的一种很常见的模式,简言之C(控制器)将V(视图、用户客户

2020-08-25 15:24:12 396 6

原创 思想上移,行动下移

勿以善小而不为,勿以恶小而为之。随手丢掉的垃圾、尤其是破碎的玻璃渣,随地吐掉的口香糖、书桌上乱放的杂物、工作中偶尔的迟到、与人约好后的爽约.....一件件看似不起眼的小事儿,也许我们很少把这些放在眼里,记在心中 ,但就是这些不起眼的小事儿,一件件堆积在一起,逐渐就会拉开我们人与人之间的差距。透过现象看本质,这是我们学生时代政治老师常说的一句话。也许仅仅根据这些现象说明不了什么,但透过这些现象,深入挖掘,就会从本质上有所差别。把破碎的玻璃渣使用胶带缠绕起来丢进垃圾桶,他是不是在丢掉垃圾之前为他人考虑了.

2020-08-22 15:40:28 301 4

空空如也

空空如也

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

TA关注的人

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