自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 深度分析:Redis 的数据结构及其使用场景分析

https://blog.csdn.net/weixin_47277170/article/details/106627589?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-8

2020-07-21 23:13:11 153

原创 12.StringTable

String s1 = new String("abc");不会放入字符串常量池中 String s2 = "abc";//会直接放入字符串常量池中,若本来就有,则指针指向其 String s3 = s1.intern(); System.out.println(s1 == s2);false System.out.println(s3 == s1);false System.out.println(s3 == s2);true String s1 = "abc"; String s2 = "abc";

2020-06-19 13:26:20 180

原创 11.执行引擎

2020-06-19 13:24:21 195

原创 序列化

serialversionuid怎么生成? 在IDEA里面默认并没有直接生成。 在idea工具栏中点击"File"按钮,在弹出的菜单中选择“Settings”选项。弹出Settings弹框后,在搜索栏中输入关键词"serial"并找到“Inspections”选项。 在右侧列表中选择“Serialization issues”并勾选该条目的所有选项,勾选完成后并点击“Ok”按钮。 选中类名称,按Alt+Enter快捷键。下拉弹框中找到“Add ‘serialVersionUID’ field”选项并点击该选

2020-06-15 20:32:32 134

原创 创建多线程的方式

一、继承Thread类 二、实现Runnable接口 Runnable r = ()-> Singleton singleton = Singleton.getInstance(); 三、实现Callable接口 Callable c1 = new Callable() { @Override public Object call() throws Exception { Singleton2 s3 = Singleto

2020-06-15 20:32:24 101

原创 ReentrantLock

ReentrantLock 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样

2020-06-15 20:32:15 141

原创 初识activeMQ

如果企业有很多部门,部门都有自己的系统,那么不同的系统之间的集成通信,Message Queue是很好的选择。 中间件比较 (1) kafka 编程语言:scala。 大数据领域的主流MQ。 (2) rabbitmq 编程语言:erlang 基于erlang语言,不好修改底层,不要查找问题的原因,不建议选用。 (3) rocketmq 编程语言:java 适用于大型项目。适用于集群。 (4) activemq 编程语言:java 适用于中小型项目。 =============================

2020-06-15 20:29:07 165

原创 LOCK

可重入锁和不可重入锁 不可重入锁:只判断这个锁有没有被锁上,只要被锁上申请锁的线程都会被要求等待。实现简单 可重入锁:不仅判断锁有没有被锁上,还会判断锁是谁锁上的,当就是自己锁上的时候,那么他依旧可以再次访问临界资源,并把加锁次数加一。 设计了加锁次数,以在解锁的时候,可以确保所有加锁的过程都解锁了,其他线程才能访问。不然没有加锁的参考值,也就不知道什么时候解锁?解锁多少次?才能保证本线程已经访问完临界资源了可以唤醒其他线程访问了。实现相对复杂。 ...

2020-06-15 20:28:26 160

原创 IO流

FileReader: FileReader fileReader = new FileReader(new File("yorumi.txt")); char[] buf = new char[100]; int len; while((len=fileReader.read(buf)) != -1){ String str = new String(buf,0,len); System.out.println(str); } FileWrite(file,true) 对原文件追加 Fi

2020-06-15 20:28:17 129

原创 Collection

List arr1 = Arrays.asList(new int[]{12,33}); arr1.size() //1 List arr2 = Arrays.asList(new Integer[]{12,33}) arr2.size() //2 ArrayList LinkedList Vector的异同: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ilNG2f8D-1592220099106)(E:\笔记\Pictures\QQ图片20200605212557

2020-06-15 20:28:04 168

原创 NIO

通道和缓冲区 NIO系统的核心在于:通道和缓冲区。 缓冲区(Buffer):在Java NIO中负责数据的存取。缓冲区就是数组,用于存储不同数据类型的数据。 根据数据类型的不同(boolean除外),提供了相应类型的缓冲区 ByteBuffer、CharBuffer、IntBuffer。。。。。(7种基本数据类型) 上述缓冲区管理方式几乎一致,通过allocate()获取缓冲区 核心方法: put() :存入数据到缓冲区中; get() :获取缓冲区中的数据; 缓冲区的四个核心属性: capacity :

2020-06-15 20:27:28 130

原创 10.对象的实例化

接图:6.执行inti方法进行初始化 对象访问方式主要有两种: 句柄访问 直接指针(Hotspot采用)

2020-06-15 20:22:17 157

原创 9.方法区

在jdk7及之前,习惯上把方法区称为永久代,jdk8之后,使用元空间取代了永久代。 本质上,方法区和永久代并不等价。 元空间的本质与永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代最大的区别在于:元空间不在虚拟机设置的内存中,而是使用本地内存。 永久代元空间二者不只是名字变了,内存结构也调整了。 JDK7: OOM(PermGen space) JDK8 : OOM(Metaspace) -XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=10m

2020-06-15 20:20:44 148

原创 8.堆

-Xmx:最大堆大小 -Xms:初始堆大小 -Xmn:年轻代大小 -XXSurvivorRatio:年轻代中Eden区与Survivor区的大小比值 所有线程共享堆,但也可以划分线程私有的缓冲区。(TLAB) JDK7 : 新生代 老年代 永久代 JDK8 : 新生代 老年代 元空间 默认堆空间大小 初始内存大小:物理电脑内存大小/64 最大内存大小:物理电脑内存大小/4 主动设置大小:Run -> Edit C… 开发中建议将初始内存大小和最大内存大小设置为一样的值。 查看设置的参数

2020-06-15 20:17:35 148

转载 7.本地方法

本地方法接口 在讲Java虚拟机运行时数据区中本地方法栈之前,我们先来说说运行时数据区之外的一个叫本地方法接口的东西简称JNI(Java Native Interface) 简单来讲,一个Native Method就是一个java调用非java代码的接口,一个Native Method 是这样一个java方法:该方法的底层实现由非Java语言实现,比如C。这个特征并非java特有,很多其他的编程语言都有这一机制,比如在C++ 中,你可以用extern “C” 告知C++ 编译器去调用一个C的函数。 在定义

2020-06-15 20:12:08 378

转载 6.虚拟机栈——栈帧

栈帧的内部结构 每个栈帧中存储着 1.局部变量表(Local Variables) 2.操作数栈(Operand Stack)(或表达式栈) 3.动态链接(Dynamic Linking)(或执行"运行时常量池"的方法引用)----深入理解Java多态特性必读!! 4.方法返回地址(Return Adress)(或方法正常退出或者异常退出的定义) 5.一些附加信息 其中部分参考书目上,称方法返回地址、动态链接、附加信息为帧数据区 局部变量表(Local Variables) 1.局部变量表也被称之为局部

2020-06-15 20:11:18 404

转载 5.虚拟机栈

虚拟机栈的背景 由于跨平台性的设计,java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 根据栈设计的优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。 内存中的堆与栈 栈是运行时的单位,而堆是存储的单位 1.栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放、放在哪儿。 2.一般来讲,对象主要都是放在堆空间的,是运行时数据区比较大的一块 3.栈空间存放 基本数据类型的局部变量,以及引用数据类

2020-06-15 20:10:29 135

转载 4.程序计数器

JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。 一个线程对应一个 JVM Stack。JVM Stack 中包含一组 Stack Frame。当 JVM 调用一个 Java 方法时,它从对应类的类型信息中得到此方法的局部变量区和操作数栈的大小,并据此分配栈帧内存,然后压入 JVM 栈中。 在活动线程中,只有位于

2020-06-15 20:09:12 498

转载 3.JVM运行时数据区划分

Java内存空间 内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了JAVA在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的jvm对于内存的划分方式和管理机制存在着部分差异(对于Hotspot主要指方法区) (图源阿里)JDK8的元数据区+JIT编译产物 就是JDK8以前的方法区 JavaAPI中的Runtime public class Runtime extends Object Every Java appl

2020-06-15 20:07:51 139

转载 2.类加载子系统

JVM细节版架构图 本文针对Class Loader SubSystem这一块展开讲解类加载子系统的工作流程 类加载子系统作用 1.类加载子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件标识即16进制CA TE BA BE; 2.加载后的Class类信息存放于一块成为方法区的内存空间。除了类信息之外,方法区还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射) 来一张经典的JVM内存结构图:其中类加载器的工作

2020-06-15 20:06:24 238

转载 1.简介

首先来看计算机系统当中JVM所处的位置 JVM是运行在操作系统之上的,并没有和硬件有直接的交互 Java一次编译,到处运行 古今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 Prog

2020-06-15 20:03:38 161

原创 TREE

B树,B树也称B-树,它是一颗多路平衡查找树。 每个节点都存储key和data,所有节点组成这棵树,并且叶子节点指针为null。 B+树 只有叶子节点存储data,叶子节点包含了这棵树的所有键值,叶子节点不存储指针。 后来,在B+树上增加了顺序访问指针,也就是每个叶子节点增加一个指向相邻叶子节点的指针,这样一棵树成了数据库系统实现索引的首选数据结构。 原因有很多,最主要的是这棵树矮胖,呵呵。一般来说,索引很大,往往以索引文件的形式存储的磁盘上,索引查找时产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要

2020-06-15 19:51:55 171

原创 SQL优化

① SQL语句及索引的优化 SQL语句的优化: 1、尽量避免使用子查询 2、避免函数索引 3、用IN来替换OR 4、LIKE前缀%号、双百分号、_下划线查询非索引列或*无法使用到索引,如果查询的是索引列则可以 5、读取适当的记录LIMIT M,N,而不要读多余的记录 6、避免数据类型不一致 7、分组统计可以禁止排序sort,总和查询可以禁止排重用union all 8、避免随机取记录 9、禁止不必要的ORDER BY排序 10、批量INSERT插入 11、不要使用NOT等负向查询条件 12、尽量不用sele

2020-06-15 19:48:37 122

原创 EasyCode生成后需要的改动

生成后需要做的改动: 1.Application.yml server: port: 8080 spring: datasource: url: jdbc:mysql://127.0.0.1:3306/database?useUnicode=true&characterEncoding=UTF-8 username: root password: 123456 type: com.alibaba.druid.pool.DruidDataSource d

2020-06-15 19:47:14 360

原创 #{} 与 ${}的区别

#{} 与 ${}的区别 #{} :是以预编译的形式,将参数设置到sql语句中:PreparedStatement;防止sql注入。 ${} :取出的值直接拼装在sql语句的;会有安全问题。 大多数情况下,都用#{}。 原生jdbc不支持占位符的地方我们就可以使用${}进行取值 比如分表、排序:按照年份分表拆分 ​ select * from ${year}_salary where xxx; 打印sql: mybatis: # spring boot集成mybatis的方式打印sq

2020-06-15 19:45:12 137

原创 GIT

git init git add git commit (-m “xxx”) git status git log git log --pretty=oneline git log --oneline git reflog git签名设置 : 作用:只区分不同开发人员的身份 一、项目级别/仓库级别:仅在当前本地库范围内有效 git config user.name UserName git config user.email User@email 用命令查看用户名和邮箱 git config user

2020-06-15 19:39:54 130

空空如也

空空如也

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

TA关注的人

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