自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 shell脚本编程实践(九)

简介简介发布方式。项目交付是一个涉及到多团队共同协作的事情,它包括 产品团队设计产品、研发团队开发产品、测试团队测试代码、运维团队发布代码和维护站点等工作。

2024-08-10 18:10:52 837

原创 shell脚本编程实践(八)

基础知识需求虽然awk提供了内置的函数来实现相应的内置函数,但是有些功能场景,还是需要我们自己来设定,这就用到了awk的自定义函数功能了。awk的函数目的,与shell的函数目的一致,都是提高代码的复用能力和功能灵活性函数语法格式function 函数名(参数1, 参数2, ...)函数体代码注意:函数名不能用awk的关键字信息简单实践实践1-简单函数实践BEGIN {print "两值之和为: "sum_resultprint "两值之差为: "sub_result}'

2024-08-10 17:28:55 632

原创 shell脚本编程实践(七)

基础知识需求虽然awk提供了内置的函数来实现相应的内置函数,但是有些功能场景,还是需要我们自己来设定,这就用到了awk的自定义函数功能了。awk的函数目的,与shell的函数目的一致,都是提高代码的复用能力和功能灵活性函数语法格式function 函数名(参数1, 参数2, ...)函数体代码注意:函数名不能用awk的关键字信息简单实践实践1-简单函数实践BEGIN {print "两值之和为: "sum_resultprint "两值之差为: "sub_result}'

2024-08-10 13:26:17 1051

原创 shell脚本编程实践(六)

简介准备文件精确匹配实践。

2024-08-10 10:15:42 814

原创 shell脚本编程实践(五)

简介函数间调用实践1-图形信息打印文件间调用实践2-拆分function_drawn_graph.sh脚本。

2024-08-10 01:39:52 1011

原创 shell脚本编程实践(四)

简介for嵌套for语句实践1-输出99乘法表for嵌套if语句实践2-判断目录中的文件类型if嵌套for语句实践3-获取系统支持的shell类型。

2024-08-10 00:16:20 817

原创 shell脚本编程实践(三)

基础知识数组创建在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的语法格式:array_name=(value1 . . . valuen) 注意:基于元素的格式,主要有单行定义、多行定义、单元素定义、命令定义等多种样式语法解读单行定义array_name=(value0 value1 value2 value3) 多行定义value1value2value3) 单元素定义注意:单元素定义的时候,可以不使用连续的下标,而且下标的范围没有限制。

2024-08-10 00:13:09 868

原创 shell脚本编程实践(二)

命令简介实践1 - 信息的输出实践2 - 引号信息输出实践3 - 特殊符号的输出实践4 - 内容的拼接。

2024-08-04 13:47:50 586

原创 shell脚本编程实践(一)

基础知识程序外在关系:业务数据:用户访问业务时候,产生的信息内容数据结构:静态的描述了数据元素之间的关系算法:解决各种实际问题的方法和思路数据结构 + 算法 = 程序内在关系:算法其实就是数据的表示和处理,而数据的处理受到数据的各种存储形式的约束,所以算法的效率和样式受到数据结构的严重约束。数据结构存储下来的数据为为算法服务的,而算法存在的意义就是为了数据结构中的内容而存在的。

2024-08-04 13:39:41 894

原创 Seaborn数据可视化

Seaborn是基于matplotlib的图形可视化python包。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。Seaborn是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。应该把Seaborn视为matplotlib的补充,而不是替代物。

2024-07-28 01:57:10 575

原创 Matplotlib数据可视化

官网:https://matplotlib.org/在数据分析与机器学习中,我们经常要用到大量的可视化操作。一张制作精美的数据图片,可以展示大量的信息,一图顶千言而在可视化中,Matplotlib算得上是最常用的工具。Matplotlib 是 python 最著名的绘图库,它提供了一整套 API,十分适合绘制图表,或修改图表的一些属性,如字体、标签、范围等Matplotlib 是一个 Python 的 2D 绘图库,它交互式环境生成出版质量级别的图形。

2024-07-28 01:56:13 842

原创 Pandas数据分析库

目录就是HDF5中的group, 描述了数据集dataset的分类信息,通过group 有效的将多种dataset 进行管理和区分;这些运算是关系型数据库的核心操作。DataFrame是由多种类型的列构成的二维标签数据结构,类似于 Excel 、SQL 表,或 Series 对象构成的字典。HDF5,可以存储不同类型数据的文件格式,后缀通常是.h5,它的结构是层次性的。最直观的理解,可以参考我们的文件管理系统,不同的文件位于不同的目录下。数据中的薪水是一个区间,这里用薪水区间的均值作为相应职位的薪水。

2024-07-25 23:19:30 716

原创 NumPy科学计算库

NumPy(Numerical Python)是Python的一种开源的数值计算扩展。提供多维数组对象,各种派生对象(如掩码数组和矩阵),这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nestedlist structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。

2024-07-25 23:18:23 926

原创 Python高级(四)_内存管理

系统默认创建好的,等着你使用概述:整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁内存空间。Python 对小整数的定义是 [-5, 256] ,这些整数对象是提前建立好的,不会被垃圾回收。在一个 Python 的程序中,无论这个整数处于LEGB(局部变量,闭包,全局,内建模块)中的哪个位置,所有位于这个范围内的整数使用的都是同一个对象。默认创建出来,池内为空的,创建一个就会往池中存储一个。

2024-07-10 22:18:20 745

原创 Python高级(三)_正则表达式

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。

2024-07-10 22:13:30 1470

原创 Python高级(二)_面向对象进阶

数据封装、继承和多态只是面向对象程序设计中最基础的3个概念。在Python中,面向对象还有很多高级特性,允许我们写出非常强大的功能。python是动态语⾔,动态编程语⾔ 是 ⾼级程序设计语⾔ 的⼀个类别,在计算机科学领域已被⼴泛应⽤。它是⼀类在 运⾏时可以改变其结构 的语⾔ :例如新的函数、对象、甚⾄代码可以被引进,已有的函数可以被删除或是其他结构上的变化。动态语⾔⽬前⾮常具有活⼒例如,我们现在创建一个人的类,在这个类里面,定义了两个初始属性name和age。

2024-07-05 23:23:39 1059

原创 Python高级(一) 函数式编程

通过列表⽣成式,我们可以直接创建⼀个列表。但是,受到内存限制,列表容量肯定是有限的。⽽且,创建⼀个包含100万个元素的列表,不仅占⽤很⼤的存储空间,如果我们仅仅需要访问前⾯⼏个元素,那后⾯绝⼤多数元素占⽤的空间都⽩⽩浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从⽽节省⼤量的空间。在Python中,这种⼀边循环⼀边计算的机制,称为⽣成器:generator。

2024-07-04 23:42:12 279

原创 Python基础(二)

函数定义默认值参数函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参个数可变的位置参数定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数使用*定义个数可变的位置形参结果为一个元组个数可变的关键字形参定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参使用**定义个数可变的关键字形参结果为一个字典def fun(*args): #函数定义时的可变的位置参数fun(10)fun(10,30)fun1(a=10)pass。

2024-06-30 13:48:03 774

原创 Python基础(一)

我是一个‘90’后,我被孕育在1989年的圣诞节期间,我的程序员爸爸荷兰人吉多·范罗苏姆,为了打发无趣的圣诞节创造了我,我在1991年时候被真正的生了出了,我的程序员爸爸给我起了个非常吓人的名字叫Python(大蟒蛇的意思),我的名字取自英国20世纪70年代首播的电视喜剧《蒙提.派森的飞行马戏团》(Monty Python’s Flying Circus)

2024-06-30 02:58:49 1056

原创 MyCat2

Mycat 是基于 java 语言编写的数据库**中间件**,是一个实现了 MySQL 协议的服务器,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL 原生协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信,**其核心功能是分库分表和读写分离**,即将一个大表水平分割为 N 个小表,存储在后端 MySQL 服务器里或者其他数据库里。

2024-05-30 00:07:39 897

原创 PostgreSQL

PostgreSQL是一个功能强大的 **开源** 的关系型数据库。底层基于C实现。PostgreSQL的开源协议和Linux内核版本的**开源**协议是一样的。BDS协议,这个协议基本和MIT开源协议一样,说人话就是你可以对PostgreSQL进行一些封装,然后商业化是收费。PostgreSQL的名字咋来的。之前叫Ingres,后面为了解决一些ingres中的一些问题,作为后面的ingres,就起名叫postgre。

2024-05-27 23:15:56 736

原创 Oracle

SQL是结构化查询语言(Structured Query Language),专门用于数据存取、数据更新及数据库管理等操作。在Oracle开发中,客户端把SQL语句发送给服务器,服务器对SQL语句进行编译、执行,把执行的结果返回给客户端。Oracle SQL语句由如下命令组成:目前主流的数据库产品(比如:SQL Server、Oracle,MySQL)都支持标准的SQL语句。数据定义语言,表的增删改操作,数据的简单查询,事务的提交和回滚,权限的授权和撤销等,Oracle与MySQL在操作上基本一致。

2024-04-28 15:35:13 918

原创 8.MyBatis整合Spring的原理

设计模式类工厂模式建造者模式单例模式代理模式绑定:MapperProxy延迟加载:ProxyFactory 插件:PluginSpring 集成MyBaits: SqlSessionTemplate的内部SqlSessionInterceptorMyBatis自带连接池:PooledConnection日志打印:ConnectionLogger、StatementLogger适配器模式。

2023-09-18 23:32:26 61

原创 7.MyBatis中的插件机制

首先我们来看下一个自定义的插件我们要如何来实现。

2023-09-18 23:31:34 82 1

原创 6.MyBatis基础模块-类型转换模块

MyBatis是一个持久层框架ORM框架,实现数据库中数据和Java对象中的属性的双向映射,那么不可避免的就会碰到类型转换的问题,在PreparedStatement为SQL语句绑定参数时,需要从Java类型转换为JDBC类型,而从结果集中获取数据时,则需要从JDBC类型转换为Java类型,所以我们来看下在MyBatis中是如何实现类型的转换的。

2023-09-18 23:30:49 94 1

原创 5.MyBatis基础模块-反射工具箱

接口的定义如下// 检测该ReflectorFactory是否缓存了Reflector对象// 设置是否缓存Reflector对象// 创建指定了Class的Reflector对象> type);然后我们来看看它的具体实现。

2023-09-18 23:28:26 99 1

原创 4.MyBatis基础模块-日志模块

首先日志在我们开发过程中占据了一个非常重要的地位,是开发和运维管理之间的桥梁,在Java中的日志框架也非常多,Log4j,Log4j2,Apache Commons Log,java.util.logging,slf4j等,这些工具对外的接口也都不尽相同,为了统一这些工具,MyBatis定义了一套统一的日志接口供上层使用。首先大家对于适配器模式要了解下哦。

2023-09-10 00:26:03 100 1

原创 3.MyBatis基础模块-缓存模块

MyBatis作为一个强大的持久层框架,缓存是其必不可少的功能之一,Mybatis中的缓存分为一级缓存和二级缓存。但本质上是一样的,都是使用Cache接口实现的。缓存位于 org.apache.ibatis.cache包下。通过结构我们能够发现Cache其实使用到了装饰器模式来实现缓存的处理。首先大家需要先回顾下装饰器模式的相关内容哦。我们先来看看Cache中的基础类的API// 煎饼加鸡蛋加香肠。

2023-09-08 08:10:21 66 1

原创 2.MyBatis核心工作原理讲解

接下来我们就开始MyBatis的源码之旅,首先大家要从宏观上了解Mybatis的整体框架分为三层,分别是基础支持层、核心处理层、和接口层。如下图然后根据前面讲解的MyBatis的应用案例,给出MyBatis的主要工作流程图在MyBatis的主要工作流程里面,不同的功能是由很多不同的类协作完成的,它们分布在MyBatis jar包的不同的package里面。大概有一千多个类,这样看起来不够清楚,不知道什么类在什么环节工作,属于什么层次。

2023-09-02 18:43:40 93 1

原创 1.ORM框架的发展历史与MyBatis的高级应用

具体的操作步骤是,首先在pom.xml中引入MySQL的驱动依赖,注意MySQL数据库的版本这种实现方式首先给我们的感觉就是操作步骤比较繁琐,在复杂的业务场景中会更麻烦。尤其是我们需要自己来维护管理资源的连接,如果忘记了,就很可能造成数据库服务连接耗尽。同时我们还能看到具体业务的SQL语句直接在代码中写死耦合性增强。每个连接都会经历这几个步骤,重复代码很多,总结上面的操作的特点:针对这些问题我们可以自己尝试解决下针对常规jdbc操作的特点,我们可以先从代码重复和资源管理方面来优化,我们可以创建一个工具类来专

2023-08-13 22:19:56 216 1

原创 JVM的性能优化

对象逃逸的本质是对象指针的逃逸。在计算机语言编译器优化原理中,逃逸分析是指分析指针动态范围的方法,它同编译器优化原理的指针分析和外形分析相关联。当变量(或者对象)在方法中分配后,其指针有可能被返回或者被全局引用,这样就会被其他方法或者线程所引用,这种现象称作指针(或者引用)的逃逸(Escape)。通俗点讲,如果一个对象的指针被多个方法或者线程引用时,那么我们就称这个对象的指针(或对象)的逃逸(Escape)。什么是逃逸分析?

2023-05-07 17:44:12 102

原创 JVM命令以及执行引擎

当超过一定的时间限度,如果方法的调用次数仍然不足以让它提交给即时编译器编译,那么这个方法的调用计数器就会被减少一半,这个过程称为方法调用计数器热度的衰减(Counter Decay),而这段时间就成为此方法的统计的半衰周期( Counter Half Life Time)。对于第二种是由循环体出发的,但是编译器依然会以整个方法(而不是单独的循环体)作为编译对象,因为发生在方法执行过程中,称为栈上替换(On Stack Replacement,简称为 OSR 编译,即方法栈帧还在栈上,方法就被替换了)。

2023-05-04 23:12:52 110

原创 ZGC深入解析

官网实际上:ZGC诞生于JDK11,经过不断的完善,JDK15中的ZGC已经不再是实验性质的了。从只支持Linux/x64,到现在支持多平台;从不支持指针压缩,到支持压缩类指针…在JDK16,ZGC将支持并发线程栈扫描(Concurrent Thread Stack Scanning),根据结果,实现并发线程栈扫描之后,ZGC的STW时间又能降低一个数量级,停顿时间将进入毫秒时代。SPECjbb 是这几个字母的首字母组成的,tandarderformancevaluation。

2023-05-03 22:38:51 160

原创 G1垃圾收集器

CMS单线程或者双线程情况下效率很低CMS会并发失败CMS可中止的预处理会导致极限5S停顿并发失败进入foregroud还会导致进入Full GC,全局MSC整理(避免:定时任务在用户量少的时候触发一次fullGc)CMS吞吐的设计并不是很优秀。

2023-05-03 22:36:44 145

原创 CMS垃圾收集器

官网CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。不关心垃圾碎片的产生采用的是"标记-清除算法",整个过程分为4步由于整个过程中,并发标记和并发清除,收集器线程可以与用户线程一起工作,所以总体上来说,CMS收集器的内存回收过程是与用户线程一起并发地执行的。

2023-05-02 23:05:38 124

原创 垃圾收集器浅析

不随着版本的变化而改变。

2023-05-02 23:03:50 76

原创 JVM的垃圾收集算法

当前主流商业 JVM 的垃圾收集器,大多数都遵循了 分代收集(Generational Collection)的理论进行设计,这里需要解释下,很多博客都会把分代收集当成一种具体的垃圾收集算法,其实并不是,分代收集只是一种理论,一套指导方针,一套符合大多数程序运行实际情况的经验法则,它建立在几个分代假说之上。需要额外的表来记录对象的迁移位置,具体来说通过设置内存大小相同的Carl Table 来记录对象的标记位向量(对象的开始和结束位置)、偏离位向量(对象移动后的开始位置)和内存索引号。

2023-05-02 12:01:47 180

原创 内存模型以及对象已死问题

弱引用(Weak Reference)对象与软引用对象的最大不同就在于:GC在进行回收时,需要通过算法检查是否回收软引用对象,而对于Weak引用对象, GC总是进行回收。不可见阶段的对象在虚拟机的对象根引用集合中再也找不到直接或者间接的强引用,最常见的就是线程或者函数中的临时变量。程序不在持有对象的强引用。当到达某对象的任意路径都不含有引用对象时,对这个对象的引用就被称为强引用。对于某个对象而言,只要应用程序中持有该对象的引用,就说明该对象不是垃圾,如果一个对象没有任何指针对其引用,它就是垃圾。

2023-04-28 23:56:14 76

原创 对象的内存布局和JVM内存模型

对象在内存中的存储结构及JVM内存模型

2023-04-25 22:58:43 106

原创 JVM之深入运行时数据区

运行时数据区

2023-04-24 22:06:48 116 1

空空如也

空空如也

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

TA关注的人

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