自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HashMap源码分析

本文分析是基于JDK1.8中的HashMap源码

2022-03-14 10:08:53 1250

原创 MySQL索引篇

索引的分类索引类型有两种, 一种是BTree索引, 一种是Hash索引。本篇只介绍BTree索引。BTree索引BTree索引的使用范围精确匹配范围匹配Like前缀查询Like关键字, 只有前缀查询才会使用到索引, 其余Like都不会使用到索引。尽管使用字符串前缀匹配可以使用索引, 但效率不会很高, 所以要慎用Like关键字。只要使用了Like, 这个优化难度就比较大。like前缀使用索引的速度是由匹配字符串的精确程度,匹配字符串精度越高,速度越快,否则反之,匹配范围过大时也会有不使用

2021-11-03 00:14:21 255

原创 MySQL引擎篇

MySQL引擎只介绍常用MySQL引擎, 分别是MyISAM、InnoDB、Memory和CSVMySAM是MySQL 5.5.8版本之前的默认引擎, 在MySQL 5.5.8+后的默认存储引擎是InnoDB。采用表空间保存文件, 表空间有两种, 一直是系统表空间(ibdataN), 一种是独立表空间(tablename.ibd)。在5.3版本后默认使用独立表空间。设置innodb_file_per_table属性选择表空间模式//查看表空间模式SHOW VARIABLES LIKE 'inn

2021-11-01 23:11:40 6406

原创 为什么要禁用JDK序列化

什么是序列化在软件中, 一个项目的对象数据存放在内存中, 要经过一个过程的转换, 这个转换就是序列化和反序列化. 所以序列化就是将对象转换为数据, 反序列化就是将数据转换为对象.JDK序列化有哪些问题Java自带序列化只能被Java反序列化不同编程语言间就无法使用Java序列化有安全问题使用Java序列化的代码Java官网的安全编码指导方针中有说明: “对不信任数据的反序列化, 从本质上来说就是危险的, 应该予以避免。”, 说明Java序列化是不安全的//使用Java序列化只需要

2021-10-17 23:00:12 177

原创 浅析Mybatis

介绍Mybatis是Java的持久层(DAL)框架Mybatis是ORM框架ORMORM是对象和关系型数据库映射, 简单的说就是把代码中的对象与表结构一一对应, 做到对象与表结构的转换, 也可以理解为在编程语言(代码)中使用的"虚拟数据库".将关系型数据库表中的记录映射成为对象, 以对象的形式呈现.知名度比较高的ORM框架hibernate 全自动, 功能强大, 笨重, 学习成本高Mybatis 半自动, 支持自定义SQL语句JAP Java自带框架NHibernate .NET

2021-09-17 00:09:45 274

原创 MS-ArrayList和LinkedList的区别

最基本的不同点, ArrayList的底层数据结构是数组, LinkedList底层的数据结构是链表.由于数据结构不同, 两者的适用场景也有差异. ArrayList更适合随机查找,LinkedList更适合删除和添加.| | ArrayList | LinkedList ||—|---|—|| get() | O() | || add() | | || add() | | || remove() | | |...

2021-06-29 23:43:21 58

原创 缓存

缓存一般而言, 现在互联网应用(网站或App)的整体流程, 可以概括下图所示, 用户请求从界面(浏览器或App界面)到网络转发、应用服务器再到存储)数据库或文件系统, 然后返回到界面呈现内容.随着互联网的普及, 内容信息越来越复杂, 用户数和访问量越来越大, 应用需要支持更多的并发量, 同时我们应用服务器和数据库服务器所做的计算也越来越多. 但是往往我们的应用服务器资源是有限的, 且技术变革是缓慢的, 数据库每秒能接受的请求次数也是有限的(或者文件的读写也是有限的), 如何能够有效利用有限的资源来提供尽

2021-01-05 22:05:10 223

原创 HashMap

HashMap是由数组+链表组成的JDK1.8之后是数组+链表+红黑树HashMap的实现原理HashMap是一个用于存储Key-Value键值对的集合, 每一个键值对也叫做Entry. 这些个键值对(Entry)分散存储在一个数组当中, 这个数组就是HashMap的主干.HashMap数组每一个元素的初始值都是Null.对于HashMap, 我们最常使用的是两个方法:Get和Put.Put方法的原理调用Put方法的时候发生了什么?比如调用hashMap.put(“apple”,0), 插入

2020-12-30 10:02:05 1643

原创 B-树和B+树

B-树读作B树, 中间的’-'不是减号.MySQL数据库的索引的数据结构主要是Hash表或B+树.先引入问题, 数据库索引为什么使用树结构存储?因为树的查询效率高, 而且可以保持有序. 二叉树的时间复杂度是O(logN), 查找和比较次数都是最小的, 但是并没有使用二叉树作为索引的数据结构.没有使用二叉树的原因是因为磁盘IO, 数据库引擎是存储在磁盘上的, 当数据量比较大的时候, 索引的大小可能有几个G甚至更多. 当我们利用索引查询的时候, 不可能将整个索引全部加载到内存中去, 只能逐一加载每一个磁

2020-12-28 16:38:44 1080

原创 04|深入浅出索引(上)

本文作为学习笔记, 侵删, 原内容来自于极客时间MySQL实战45讲01|基础架构: 一条SQL查询语句是如何执行的02|日志系统: 一条SQL更新语句是如何执行的03|事务隔离: 为什么你改了我还看不见04|深入浅出索引(上)05|深入浅出索引(下)06|全局锁和表锁 : 给表加个字段怎么有这么多阻碍07|行锁功过 : 怎么减少行锁对性能的影响08|事务到底是隔离的还是不隔离的实践篇MySQL基本篇基础篇(04)提到数据库索引,我想你并不陌生,在日常工作中会经常接触到. 比如某一个

2020-12-28 11:30:07 130

原创 03|事务隔离: 为什么你改了我还看不见

本文作为学习笔记, 侵删, 原内容来自于极客时间MySQL实战45讲01|基础架构: 一条SQL查询语句是如何执行的02|日志系统: 一条SQL更新语句是如何执行的03|事务隔离: 为什么你改了我还看不见04|深入浅出索引(上)05|深入浅出索引(下)06|全局锁和表锁 : 给表加个字段怎么有这么多阻碍07|行锁功过 : 怎么减少行锁对性能的影响08|事务到底是隔离的还是不隔离的实践篇基础篇(03)提到事务, 你肯定不陌生, 和数据库打交道的时候, 我们总是会用到事务. 最经典的例子就

2020-12-27 16:42:44 78

原创 02|日志系统: 一条SQL更新语句是如何执行的

本文作为学习笔记, 侵删, 原内容来自于极客时间MySQL实战45讲01|基础架构: 一条SQL查询语句是如何执行的02|日志系统: 一条SQL更新语句是如何执行的03|事务隔离: 为什么你改了我还看不见04|深入浅出索引(上)05|深入浅出索引(下)06|全局锁和表锁 : 给表加个字段怎么有这么多阻碍07|行锁功过 : 怎么减少行锁对性能的影响08|事务到底是隔离的还是不隔离的实践篇基础篇(02)上一篇我们系统了解了一个查询语句的执行流程, 并介绍了执行过程中涉及的处理模块. 一条查

2020-12-26 13:54:25 74

原创 01|基础架构: 一条SQL查询语句是如何执行的

基础篇(01)本文作为学习笔记, 侵删, 原内容来自于极客时间MySQL实战45讲01|基础架构: 一条SQL查询语句是如何执行的02|日志系统: 一条SQL更新语句是如何执行的03|事务隔离: 为什么你改了我还看不见04|深入浅出索引(上)05|深入浅出索引(下)06|全局锁和表锁 : 给表加个字段怎么有这么多阻碍07|行锁功过 : 怎么减少行锁对性能的影响08|事务到底是隔离的还是不隔离的实践篇有一个简单的表, 表里只有一个ID字段, 在执行下面查询语句时:mysql> s

2020-12-25 14:22:08 95

原创 粒度、开销和系统调度与线程进程的关系

系统调度首先来聊聊什么是调度.在操作系统中, 系统必须为多个进程之间可能有竞争关系的请求分配计算机资源. 对处理器而言, 可分配的资源是处理器上的执行时间, 分配的途径是"调度". 调度功能必须设计成可以满足多个目标, 包括公平、任何进程都不会产生饥饿、有效的使用处理器时间以及较低的开销, 此外, 调度中还需要考量优先级和实时期限方面. 从根本上说, 调度是属于队列管理, 用来在排队环境中减少延迟和优化性能.一. 调度类型长程调度 : 决定加入到待执行的进程池中.中程调度 : 决定加入到部分或全部

2020-12-20 16:09:08 1204

原创 粒度(数据库)

粒度, 就是统计的粗细程度. 举两个例子, 销售库里的销售额, 可以是一天一个值, 也可以是一个月一个值, 甚至一年一个值, 这就是相对于时间维度表的粒度;以" 组织结构 “为例, 比如我们的一个层级结构式: 总公司, 分公司, 部门, 科室. 这就是不同的粒度级别. 实际应用中, 比如有人问, 你的某个报表粒度是怎样的, 回答是, 组织结构我们的报表是分公司级别的, 但是数据粒度是到科室的(也就是你的事实表中, 层级聚合到科室级别). 所以我们就能支持到之上的"粗"粒度, 比如总公司, 分公司及部门.

2020-12-17 17:38:30 2677

原创 Java反射

Java反射应用广泛, 能够配置 : 类的全限定名、方法和参数, 完成对象的初始化, 甚至是反射某些方法. 这样就可以大大增强Java的可配置性, Spring IoC的基本原理也是如此.通过反射构建对象在Java中允许通过反射配置信息构建对象,ReflectServiceImpl类package com.IDEA_Project.reflect;public class ReflectServiceImpl { public void sayHello(String name){

2020-10-27 20:44:08 83

原创 页面跳转

页面跳转是开发一个web应用经常会发生的事情。跳转的方式有两种: 服务端跳转和客户端跳转.服务器跳转服务端跳转可以看到浏览器的地址依然是/login 路径,并不会跳转到一个新的html页面客户端跳转客户端跳转跳转到了一个新的html页面...

2020-09-19 12:38:31 273

原创 静态块

静态代码块中的代码会在类加载JVM时运行,且只被执行一次,也就是说这些代码不需要实例化类就能够被调用。一般情况下,如果有些代码必须在项目启动的时候就执行的时候,就需要使用静态代码块。静态块常用来执行类属性的初始化。...

2020-09-14 14:09:34 136

原创 Java库类

Java基础(库类)String类每个用双引号里的字符串都是String类的一个实例对象.String类对象是不可变字符串""是长度为0的空串(和null有区别) str.substring(num1,num2); //提取子串,num1是起始位置,num2是结束位置.(从0开始计数) String astr = String.join("分隔符","字符串1","字符串2","字符串3","字符串n"); //把多个字符串放在一起,用指定的分隔符分割 str = str.su

2020-09-13 15:53:05 72

原创 Linux的网络连接模式和各个文件夹的功能

各文件夹的作用1、/ 根目录 --------- 所有目录挂在其下2、/boot --------- 存放Ubuntu内核和系统启动文件。系统启动时这些文件先被装载。3、/etc --------- 系统的配置文件目录。密码文件、设置网卡信息、环境变量的设置等都在此目录中,许多网络配置文件也在其中。4、/lib --------- 根文件系统目录下程序和核心模块的共享库。这个目录里存放着系统最基本的动态链接共享库,类似于Windows下的system32目录,几乎所有的应用程序都需要用到这些共享

2020-09-13 15:52:18 243

原创 String 类

String类 字符串类,在编程中使用次数非常多. String类来创建和操作字符串.创建字符串String str = "csdn博客";和其它对象一样,可以使用关键字和构造方法来创建 String 对象。String类有11种构造方法,这些方法提供不同的参数来初始化字符串. 具体可以参见String的源码String是不可变类型, 对字符串比较多的修改,应该使用StringBuffer和StringBuilder类字符串长度String.length();返回值是int类型连接字

2020-09-13 12:44:54 137

原创 StringBuffer 和 StringBuilder 类

当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

2020-09-13 12:20:03 86

原创 Mysql数据库

Mysql常用操作命令

2020-09-09 07:14:12 243

原创 2020-08-31

Tomcat是常见的免费的web服务器.启动tomcatbin\startup.bat启动tomcat, 不要关闭tomcat窗口简单的部署一个网页把html文件复制到 tomcat\webapps\ROOT 目录下, 再通过http://127.0.0.1:8080/文件名.html 访问.8080是tomcat默认使用的端口号tomcat配置信息tomcat的很多配置信息存放在conf\server.xml修改端口号...

2020-08-31 14:40:14 65

原创 Java引用

在Java中有引用对象, 引用对象又分为强软弱虚四种强引用首先是强引用, 也就是普通引用:只要有一个引用指向了对象, java垃圾回收器就不会回收这个对象, 这就是普通引用(强引用), 当一个对象没有引用指向时就会被回收.import java.io.IOException;public class test01 { public static void main(String[] args) throws IOException { M m = new M();//

2020-08-21 23:39:46 485

原创 模板方法模式

基本介绍模板方法模式(Template Method Pattern), 又叫模板模式(Template Pattern), 在一个抽象类公开定义了执行它的方法的模板. 它的子类可以按需要重写方法实现, 但调用将抽象类中定义的方法进行.简单说, 模板方法模式定义一个操作中的算法的骨架, 而将一些步骤延迟到子类中, 使得子类可以不改变一个算法的结构, 就可以重写定义该算法的某些特定步骤.这种类型的设计模式属于行为型模式.模板方法模式的原理类图对原理类图的说明(模板方法模式的角色及职责)Ab

2020-08-20 13:43:08 120

原创 单例模式

单例模式饿汉模式在类的初始化的时候就创建好对象,适用于对象不是很占内存的情景下. public class Danli { private Danli() { }//私有化构造方法, 无法用new实例化 private static Danli instance = new Danli(); //定义一个类属性并且指向实例化对象 public static Danli getInstance() { return instance; }} public stat

2020-08-19 15:28:37 257

原创 UML

统一建模语言统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。UML本身是一套符号的规定, 就像数学符号和化学符号一样, 这些符号用于描述软件模型中的各个元素和他们之间的关系, 比如类、接口、实现、泛化、依赖、组合、聚合等常用工具有Rational Rose, 也可以用一些插件来建模...

2020-08-19 14:08:41 132

原创 设计模式基本介绍

设计模式23种设计模式 编写软件过程中, 程序员面临着来自 耦合性, 内聚性以及可维护性, 可扩展性, 重用性, 灵活性 等多方面的挑战, 设计模式是为了让程序(软件), 具有更好的代码重用性(相同功能的代码, 不用多次编写)可读性(编程规范性, 便于其他人阅读理解)可扩展性可靠性(新增功能后, 对原有功能没有影响)使程序呈现高内聚, 低耦合的特性模块内部是非常紧密的, 功能和功能之间是低耦合的设计模式七大原则设计模式原则: 其实就是程序员在编程时, 应当遵守的原则, 也是各种设计模

2020-08-17 20:25:38 239

原创 多线程和高并发(2)

xx

2020-08-06 17:40:15 94

原创 Java连接Mysql(JDBC)

Java连接MysqlJDBC (Java DataBase Connection) 是通过JAVA访问数据库.java连接mysql数据库需要第三方的类, 大多数java的类包的后缀名都是jar压缩包.导包: Project->property->ava build path->libaries->add external jars中文版: 项目->属性->Java构建路径->库->添加外部JARmysql的第三方包网上都有, 自行百度.如果使用

2020-08-05 14:23:45 246

原创 多线程和高并发(1)

程序进程: 一个程序里不同的执行路径(同时执行)线程协程面试问题: 启动线程的三种方式Thread 从Thread继承Runnable 实现Runable接口Executors.newCachedThrad 通过线程池来启动注: 使用线程池启动本质和使用Thread同源...

2020-07-29 09:49:05 159

原创 Java内存机制

在Java中有四块内存空间分别是栈内存空间、堆内存空间、全局数据区、全局代码区其中全局数据区存放static(静态)类型的属性, 全局代码区存放所有的方法定义.使用最多的两块内存区域是栈和堆.栈内存中存放的是在函数中定义的基本类型的变量和定义的引用变量, 当一段代码块定义一个变量时, Java就在栈中为这个变量分配内存空间, 当超过变量的作用域后, Java会自动释放掉为该变量分配的内存空间, 该内存空间可以立即被另做他用.引用变量(简称 ‘引用’)实质上是数组或对象在堆内存中的首地址, 引用变量

2020-07-28 16:11:47 152

原创 多线程

多线程的实现进程: 启动一个可执行文件就是一个进程线程: 线程是进程内部所做的完成的任务继承Thread 重写Run方法继承Thread启动线程实例化对象, 调用start方法实现Runnable接口 重写Run方法实现Runnable接口启动线程实例化对象, new Thread(对象).start匿名类实现多线程线程池实现多线程常用方法Thread.sleep() 当前线程暂停Thread.sleep() 会抛出InterruptedException 中断异常单位是毫秒(

2020-07-16 21:08:03 105

原创 Hadoop安装与配置

Hadoop框架Hadoop是Apache提供的开源的, 可靠的, 可拓展的, 用于分布式存储(计算)的框架.Hadoop除了官网提供的发行版以外, 还有很多其他版本. 各大厂商中比较出名的发行版: Cloudera的CDH, 华为的HDP.

2020-07-13 22:37:33 166

原创 java容器和泛型

Java泛型使用ArrayList存放对象, 当没有指定类型时, 它可以存放所有类型 ArrayList al = new ArrayList(); //可以存放各种类当指定泛型的容器, 那么泛型中只能存放该类型和该类型的子类 ArrayList<tool> tools = new ArrayList<>(); //只能存放tool和tool的子类 ArrayList<tool> tools = new ArrayList<tool>();

2020-06-19 12:10:02 222

原创 Java文件对象和流

File类 File f1 = new File("路径"); //创建文件对象 File f2 = new File(f1,"路径"); //通过给定的父抽象路径名和子路径名字符串创建一个新的File实例File对象的操作 public String getName() //返回由此抽象路径名表示的文件或目录的名称。 public String getParent() //返回此抽象路径名的父路径名的路径名字符串,如果此路径名没有指定父目录,则返回 null。 public Fi

2020-06-16 10:02:06 377

原创 java文件拆分与合并

拆分和合并需要先导入一些java包import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Arrays;主程序 public static void main(String[] args) { File f = new

2020-06-14 15:45:10 344

原创 异常

异常异常对象都是派生于Throwable类的一个实例所有的异常都是由Throwable继承而来.Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误.这种错误是比较少见的.Exception层次有两个分支, 一个分支派生于RuntimeException; 另一个分支包含其他异常. 划分两个分支的规则是: 由程序错误导致的异常属于RuntimeException; 而程序本身没有问题, 但由于想I/O错误这类问题导致的异常属于其他异常(IOException).出现Runtim

2020-06-10 07:59:16 270

原创 时间和日期

时间和日期Date类java.util.Date; 日期类java.sql.Date; 数据库日期类在计算机中, 所有的数据都是以数字的形式存放. 日期中的0, 代表的是时间原点, 对应的日期是1970年1月1日 8点0分0秒. 在这个时间上每过1毫秒数值就+1.查看当前时间 Date time = new Date(); System.out.println(time);获取日期的数值 Date time = new Date(); System.out.println(time.

2020-06-06 12:29:30 198

空空如也

空空如也

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

TA关注的人

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