![](https://img-blog.csdnimg.cn/20210419150257459.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
java
文章平均质量分 88
java学习摘录
凄戚
这个作者很懒,什么都没留下…
展开
-
MySQL 存储引擎、事务、多版本并发控制(MVCC)、数据类型
InnoDB 内部做了很多优化,包括从磁盘读取数据时采用的可预测性预读,能够自动在内存中创建 hash 索引加速读操作的自适应哈希索引,以及能加速插入操作的插入缓冲区(Insert Buffer)等。解析查询会创建对应的解析树,然后对其各种优化,包括重写查询,决定表的读取顺序,以及选择合适的索引等。一列保存了行的创建时间,一个保存行的过期时间(或删除时间),这个时间是系统版本号,每开始一个新的事务,系统版本号就会自动递增。主键索引的叶子结点包含了整行数据,而二级索引的叶子节点存储的是主键索引的值。原创 2022-11-02 10:51:31 · 396 阅读 · 0 评论 -
JVM 内存分配与回收策略实战经验总结
内存分配与回收策略:Java 技术体系的自动内存管理最根本的目标是自动化地解决两个问题:。原创 2022-11-01 17:51:12 · 416 阅读 · 0 评论 -
经典垃圾收集器 CMS、G1
7. G1 提供了两种 GC 模式,Young GC 和 Mixed GC,两种都是完全 Stop The World 的,Young GC 会选取所有年轻代的 Region,Mixed GC 选定所有年轻代的 Region 和统计出的收益高的老年代 Region。5. G1 之所以能简历可预测的停顿时间模型,是因为它将 Region 作为回收的最小单元,每次回收都是 Region 大小的整数倍,这个大小即根据优先级列表排出的收益最大,这也是 Garbage First 的由来。原创 2022-11-01 17:49:05 · 623 阅读 · 0 评论 -
Java 运行时数据区域:堆、栈、方法区等以及 OOM
Java 虚拟机,OOM,GC,堆,栈,方法区原创 2022-11-01 17:40:41 · 636 阅读 · 0 评论 -
Redis 实战
RedisRedis 是一个开源的,高级的键值对存储和一个适用的解决方案,用于构建高性能,可扩展的 Web 应用程序。场景:在互联网中经常用来缓存热点数据:1. redis 数据在内存中,可以保证读取的高效(接近每秒数十万次);2. 减少下层持久层数据库读取压力,像 mongodb,每秒近千次就有压力;3. redis 单线程运行,天然具备读写的原子性使用:1. 先 get 读取 redis,没有读到再去 db;将 db 读到的数据 set 到 redis 中,返回数据。2. 更新:del 掉 red原创 2022-04-13 12:24:27 · 1161 阅读 · 0 评论 -
分布式缓存与本地缓存的区别
分布式缓存与本地缓存的区别转载自:https://ost.51cto.com/posts/1002缓存的概念:在服务端中,缓存主要是指将数据库的数据加载到内存中,之后对该数据的访问都在内存中完成,从而减少了对数据库的访问;解决了高并发场景中数据库容易成为性能瓶颈的问题;以及基于内存的访问速度高于磁盘的访问速度的原理,提高了数据的访问速度和程序性能。而根据缓存是否与应用程序属于同一进程,可以将内存分为本地缓存和分布式缓存。本地缓存是在同一个进程内的内存空间中缓存数据,数据读写都是在同一个进程内完成原创 2022-04-12 12:48:39 · 2212 阅读 · 0 评论 -
ShardingSphere 学习
ShardingSphere 学习中遇到的一些概念及总结先来了解下什么是 ShardingSphere:ShardingSphere确实是以分片为核心、其他功能为辅助的中间件。但Apache ShardingSphere的定位并不仅仅是用于分片的数据库中间层,它其实是一个可插拔平台。无论分片、读写分离、分布式事务、高可用治理、SQL审计、数据脱敏、数据扩容等功能,都将以SPI的形式加入到ShardingSphere平台中,ShardingSphere最终只是一个空白的可以跑的数据库协议+高性能IO的骨架。原创 2022-03-31 19:01:42 · 2056 阅读 · 0 评论 -
前期绑定和后期绑定
前期绑定和后期绑定转载自:https://blog.csdn.net/youngyouth/article/details/79747043在多态的时候,我们将子类的类型向上转换为父类,进行类型的泛化,便于我们写出实用性很强的代码,新类型不用改变原有代码。这里有个问题就是:任何类型传进去都是父类型 ,但是在方法调用的时候,却是调用的子类的方法,或者说,编译器是怎么知道,具体该调用哪一个方法的呢?这就与前期绑定和后期绑定有关系了。前期绑定前期绑定是面向过程语言的编译器做法:编译器在编译面向过原创 2022-03-31 18:58:49 · 778 阅读 · 0 评论 -
logback 日志使用
项目中的日志打印这些日志都打印到哪里去了?我们可以看到控制台有日志打印,但是在项目里也可以发现日志,这有什么区别吗?这个对于日志来说是可以选择的,可以配置。所以了解了下日志,东西还不少,记录如下:这里使用 logback, spring 自带 logback 和 slf4j 的依赖,日志框架会在项目启动时默认加载classpath 下命名为 logback-spring 或 logback 的文件。日志基本格式日志输出主要在文件中,应包括以下内容:时间、日志级别、调用链标识(可选)原创 2022-03-31 18:56:26 · 764 阅读 · 0 评论 -
关于 Spring Boot 中的一些注解使用
1. 关于项目中使用 @Autowired 注解刚开始接触 spring boot 的时候看到别人在字段上添加 @Autowired 自己也就跟着这样写了,刚开始只是注意到字段有下划线,这个如果是 Mapper 的话,在 dto 上添加 @Repository就可以解決,但是还是可以看到注解报错,鼠标悬浮显示“不推荐这样使用注解“,那么正确的方式是怎样的呢?有两种方式:基于构造函数的依赖注入:对于必须的依赖项,使用构造函数注入,可以使它们成为 final且不为null。综合来看 Constru原创 2022-03-31 16:25:24 · 334 阅读 · 0 评论 -
数据库连接池实战学习笔记
数据库连接池实战学习1. HikariCP1.1 HikariCP 单数据源1.2 HikariCP 多数据源2. Druid2.1 Druid 单数据源Druid 的监控功能2.2 Druid 多数据源3. Mybatis最近学习了一些常用数据库连接池的实战,将一些数据库的特点和要点记录下来。主要学习了关系型数据库: hikari(号称性能最好的 Java 数据库连接池)、Druid(这两个数据库表现是很好的,比之前的 C3P0、DBCP、BoneCP 效果好太多,但是 Druid 表现还好,主要用原创 2022-03-21 16:32:05 · 1627 阅读 · 0 评论 -
数据库连接池实战学习笔记
数据库连接池实战学习1. HikariCP1.1 HikariCP 单数据源1.2 HikariCP 多数据源2. Druid2.1 Druid 单数据源Druid 的监控功能2.2 Druid 多数据源3. Mybatis最近学习了一些常用数据库连接池的实战,将一些数据库的特点和要点记录下来。主要学习了关系型数据库: hikari(号称性能最好的 Java 数据库连接池)、Druid(这两个数据库表现是很好的,比之前的 C3P0、DBCP、BoneCP 效果好太多,但是 Druid 表现还好,主要用原创 2022-03-21 16:32:05 · 1627 阅读 · 0 评论 -
NIO以及Netty入门
nio、netty 以及 Dubbo 入门0 Netty 简介1 BootStrap1.1 启动器初步介绍1.2 BootStrap 执行流程2 Netty 入门2.1 服务端2.1.1 NettyServer 以及相关类2.2 客户端2.2.1 NettyClient 以及相关类2.3 通信协议2.3.1 codec 通信消息体2.4 消息分发2.5 NettyServerConfig 和 NettyClientConfig3 Netty 解决粘包和拆包问题3.1 粘包和拆包3.2 常见解决方案3.3 N原创 2022-02-06 21:23:25 · 725 阅读 · 0 评论 -
NIO(非阻塞式IO)
新I/OByteBuffer实际上,新 I/O 使用 NIO(同步非阻塞)的方式重写了老的 I/O 了,因此它获得了 NIO 的种种优点。即使我们不显式的使用 NIO 进行编程,也能带来性能和速度的提高。这种提升不仅仅体现在文件读写(File I/O),同时也体现在网络读写(NetWork I/O)中,如,网络编程。速度的提升来自于使用了更接近操作系统的 I/O 执行方式的结构:Channel(通道)和 Buffer(缓冲区)。可以将通道想象成矿井,缓冲区就是运送煤炭的小车。通过小车装煤,也可以从车原创 2021-12-20 15:43:52 · 508 阅读 · 0 评论 -
基础(原始)I/O
I/O前言1、输入流类型2、输出流类型3、通过 FilterInputStream 从 InputStream 读取数据4、通过 FilterOutputStream 向 OutputStream 写入数据5、Reader 和 Writer5.1 更改流的行为6、I/O 流典型用途6.1 缓冲输入文件6.2 从内存输入6.3 格式化内存输入6.4 基本文件的输出6.5 文本文件输出快捷方式6.6 存储和恢复数据6.7 读写随机访问文件前言对于编程语言的设计者来说,实现良好的输入/输出(I/O)系统是一项原创 2021-09-10 18:43:12 · 106 阅读 · 0 评论 -
文件与streams
文件与streams(注意:不是指流式编程的Streams)1、文件和目录路径1.1 选取路径部分片段1.2 路径分析 Files 工具类1.3 Paths 的增减修改2、目录:新增文件系统路径监听:WatchService文件查找:PathMatcher文件读写Java 7 大大简化了文件读写的基本操作,添加的新元素放在 java.nio.file 包下面,大家通常把 nio 中的 n 理解为 new,即新的io,现在更应该当成是 non-blocking :非阻塞 io(io 就是 input/ou原创 2021-09-07 10:55:53 · 267 阅读 · 0 评论 -
并发编程高级部分:并行流,Tasks和Executors以及CompletableFuture类
并发编程1、并发的新定义2、并发的超能力3、并发为速度而生4、四句格言4.1 不要这样做4.2 没有什么是正确的,一切都可能有问题4.3 它起作用,并不意味着它没有问题4.4 你必须仍然理解5、残酷的真像6、并行流7、创建和运行任务8、终止耗时任务9、CompletableFuture 类10、死锁11、这篇博客是对并发编程学习过程中总结的笔记。这篇博客是对并发编程概念最基本的介绍,它的目标是为我们提供足够的基础知识,使你能够把握问题的额复杂性和危险性,从而避免一些错误。1、并发的新定义并发通常原创 2021-08-26 16:51:40 · 510 阅读 · 0 评论 -
并发底层原理:线程、资源共享、volatile 关键字
并发底层原理:线程、资源共享、volatile 关键字1、线程1.1 定义任务2.2 Thread 类2、资源共享本博客记录了在学习并发底层的一些知识笔记:包括中底层并发概念。1、线程并发将程序划分为独立分离运行的任务。每个任务都由一个执行线程 来驱动,我们通常将其简称为线程。而一个线程就是操作系统进程中 单一顺序的控制流。因此,单个进程可以拥有多个并发执行的任务。线程模型为编程带来了便利,它简化了在单一程序中同时交织在一起的多个操作的处理。线程的一大好处是可以使你从这个层次抽身出来,即代码不原创 2021-08-13 17:49:41 · 182 阅读 · 0 评论 -
equals 和 hashCode
Java 中的equals 和 hashCode前言一、equals 规范1.1 不同子类的相等性(如何定义 equals)二、 哈希和哈希码2.1 理解 hashCode2.2 为了速度而散列(散列的原理)前言假设你有一个容器使用哈希函数,当你创建一个对象放到这个容器时,你必须定义 hashCode 函数和 equals 方法。这两个函数一起被用于哈希容器中的查询操作。一、equals 规范当你创建一个类时,它自动继承自 Object 类,如果你不覆写 equals(),你将会获得object原创 2021-07-14 15:01:03 · 108 阅读 · 0 评论 -
获取配置文件properties中的数据
通过类加载器来获取配置文件内容环境一、直接通过某个线程获取二、通过类的类加载器获取总结环境在开发中我们将经常用到的一些常量和一些繁琐的配置可以提取出来,方便我们的使用。这些数据经常保存在配置文件中配置文件经常和工具类配合使用。当需要使用它们时通过查找配置文件或调用工具类方法来实现。这些properties文件都是在src/main/resource 下直接存放,而不能再放到文件夹里,否则会找不到。一般有两种类似的获取方式:一、直接通过某个线程获取 Properties p = new P原创 2021-07-05 15:03:11 · 2410 阅读 · 0 评论 -
流式编程:流支持,创建,中间操作以及终端操作
集合优化了对象的存储,而流(Streams)则是关于一组组对象的处理。原创 2021-06-23 10:33:54 · 396 阅读 · 0 评论 -
泛型:泛型接口,泛型方法,擦除,边界与通配符,动态类型安全,泛型异常,Java 8 的潜在类型
泛型前言一、简单泛型1.1 元组类库1.2 RandomList二、泛型接口:工厂方法设计模式三、泛型方法3.1 可变参数与泛型方法3.2 一个通用的生成器Generator3.3 简化元组四、匿名内部类前言泛型出现的原因:一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类。如果要编写可以应用于多中类型的代码,这种刻板的限制对代码的束缚性很大。oop中,多态算是一种泛化机制。只是有一些性能损耗之前一直是单继承结构,使得程序受限太多。如果方法的参数是一个接口,这种限制就放松了很多。原创 2021-06-08 22:43:39 · 499 阅读 · 1 评论 -
函数式编程:Java 8 Lambda表达式
函数式编程语言操纵代码片段就像操作数据一样容易。虽然Java不是函数式语言,但Java 8 Lambda 表达式和方法引用(Method Reference)允许你以函数式编程。原创 2021-05-26 14:37:59 · 390 阅读 · 0 评论 -
多态&Class对象&注册工厂&反射&动态代理
类型信息(多态&Class对象&注册工厂&反射&动态代理)运行时类型信息(RTTI)使得你可以在程序运行时发现和使用类型信息。以下将讨论Java是如何让我们在运行时识别对象和类的信息的。主要有两种方式:一种是传统的RTTI:它假定了我们在编译时已经知道了所有的类型(在本程序中);另一种是:“反射”机制,它允许我们在运行时发现和使用类的信息。一、为什么需要RTTI先来看一个很熟悉的例子。abstract class Shape{ void draw(原创 2021-04-29 20:34:13 · 238 阅读 · 0 评论 -
注解的定义以及注解编译器
注解与反射注解1. 元注解反射2.1 Java反射机制2.2 理解Class类并获取Class实例2.3 类的加载与ClassLoader2.4 创建运行时类的对象2.5 获取运行时类的完整结构2.6 调用运行时类的指定结构注解1. 元注解元注解(meta-annotation): 元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解: 1.@Target,原创 2021-04-27 17:38:15 · 204 阅读 · 0 评论 -
字符串
字符串一、pandas是什么?二、使用步骤1.引入库2.读入数据总结字符串操作是计算机程序设计中最常见的行为。由其是在Java大展拳脚的Web系统中更是如此。一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns原创 2021-04-16 16:45:28 · 96 阅读 · 0 评论 -
异常
异常前言一、基本异常二、捕获异常1.要明白异常是如何被捕获的,必须首先理解监控区域的概念。它是一段可能产生异常的代码,并且后面跟着处理这些异常的代码。2.读入数据总结前言Java的基本理念是:结构不佳的代码不能运行。发现错误的理想时机是在编译阶段,然而,编译期并不能解决所有错误,余下的就必须在运行期间解决。java中的异常处理的目的在于通过使用少于目前数量的代码来简化大型,可靠的程序的生成,异常的相关知识学起来并非晦涩难懂,并且它属于那种可以使你的项目收益明显,立竿见影的特性之一。提示:以下是本篇原创 2021-04-16 15:12:17 · 59 阅读 · 0 评论 -
内部类
内部类内部类最简单的内部类(由易到难)简单内部类链接到外部类使用.this与.new插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入内部类内部类:可以将一个类的定义放在另一个类的定义内部。内部类是一种非常有用的特性,它允许你把一些逻辑相关的类组织在一起,并控制内部的类的可视性。内部类与原创 2021-04-02 17:26:32 · 109 阅读 · 0 评论 -
Java集合
容器基本概念Java容器类的用途是“保存对象”,并将其划分为两个不同的概念。Collection:一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,而Set不能有重复元素。Queen按照排队规则来确定对象的产生顺序(通畅与他们插入的顺序相同)。Map:一组成对的键值对对象,允许你使用键来查找值。...原创 2021-04-01 16:03:57 · 74 阅读 · 0 评论 -
总结接口与接口引申出的几种设计模式
总结接口与接口引申出的几种设计模式接口引申出的两种设计模式代码适配器设计模式代码复用以上内容自己整理于Thing In Java接口一章内容接口接口的概念和使用应该很熟悉,但是设计模式和接口的真正意义一直很模糊,所以总结一下。总之就是使用接口可以使自己的代码复用性更好。引申出的两种设计模式创建一个能够根据所传递的参数对象的不同而具有不同行为的方法:被称为策略设计模式。这类方法包含要执行的算法中固定不变的部分,而“策略”包含变化的部分。策略就是传递进去的参数对象,它包含要执行的代码适配器设计模式:无原创 2021-03-18 09:56:10 · 647 阅读 · 0 评论