自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 内建对象—int

内建对象—int一. 用不溢出的整数1.1 整数溢出1.2 实例对象结构1.2.1 结构定义1.2.2 大整数实现1.3 小整数静态对象池二. 类型对象及大整数运算2.1 整型对象2.2 加法运算2.3 减法运算2.4 绝对值运算2.4.1 x_add绝对值加法2.4.2 x_sub绝对值减法一. 用不溢出的整数1.1 整数溢出在计算机中的变量类型存储空间固定,能表示的数值范围有限。常见语言中int类型长度为32位,能表示的整数范围为-2147483648至2147483647。Python中的整数永

2021-08-01 00:16:34 422 1

原创 内建对象—float

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Ma

2021-07-31 19:29:58 336

原创 实例对象的生命周期

实例对象的生命周期一. 泛型API和特型API1.1 泛型API1.2 特型API二. 对象的创建2.1 创建对象的方式2.2 创建对象的过程三. 对象的多态性3.1 Python中多态的应用3.2 对象行为3.3 引用计数一. 泛型API和特型APIPython由C语言实现,对外提供C API目的是在C环境中实现交互。C API分为泛型API和特型API两类。1.1 泛型API泛型API 与类型无关,属于抽象对象层(Abstract Object Layer,AOL)。这类API参数是PyObje

2021-06-15 14:27:51 363

原创 PyType_Type和PyBaseObject_Type

PyType_Type和PyBaseObject_Type一. 类型的类型—PyType_Tpye二. 类型之基—PyBaseObject_TypePyObject和PyTypeObject内容的最后指出下图中对实例对象和类型对象的理解是不完全正确的,浮点类型对象全局唯一,Python在C语言层面实现过程中将其定义为一个全局静态变量,定义于Object/floatobject.c中,命名为PyFloat_Type。PyTypeObject PyFloat_Type = { PyVarObje

2021-06-15 01:12:48 742 5

原创 PyObject和PyTypeObject

PyObject和PyTypeObject一. 实例对象的基石—PyObject和PyVarObject1.1 PyObject结构体1.2 宏的定义1.3 PyVarObject结构体1.4 两种头部信息宏定义及其初始化1.4.1 定长对象实现1.4.2 变长对象实现1.4.3 头部信息宏初始化二. 类型对象的基石—PyTypeObject2.1 PyTypeObject包含信息2.2 类型对象和实例对象在内存中的关系Python是C语言实现的,因此Python对象在C语言层面应该是一个结构体 ,组织对

2021-06-14 22:12:27 1179 2

原创 对象类型概述

对象类型概述一. 变量只是名字二. 可变对象和不可变对象2.1 不可变对象2.2 可变对象三. 定长对象和变长对象3.1 变长对象2.2 定长对象一. 变量只是名字定义一个变量a,并通过id内建函数取出其内存地址,>>> a = 1>>> id(a)4302704784定义另一个变量b,将变量a的值赋予b,并取出b的内存地址,>>> b = a>>> id(b)4302704784变量a和b具有相同的地址,这与常

2021-06-14 18:05:01 1092 2

原创 类、对象体系

类、对象体系一. Python面向对象特点二. Python类、对象体系2.1 实例对象、类型对象、type类型2.1.1 内置类型2.1.2 自定义类型2.2 object类型2.3 type和object类间的关系2.4 类、对象关系图示一. Python面向对象特点Python所谓的“一切皆对象”总结而言可以理解如下,Python语言中,基本类型也是对象。相比其他语言,Python不再区别对待基本类型和对象,所有基本类型内部均由对象实现。 一个整数是一个对象,一个字符串也是一个对象。类型也是

2021-06-14 16:49:39 340 3

原创 结构型设计模式(1):适配器模式

适配器模式1.组成角色2.代码实现类适配器对象适配器3.优缺点适配器的概念可以通过下图进行说明,生活中最常见的例子就是电压转换插头,通过放置在电源与充电设备之间,能够使得两个原本不能一同使用的物品配合使用。使用适配器模式的情形可以总结为,现有的类或接口不能满足要求,且不能对现有的类和接口代码进行改动1.组成角色适配器模式,根据适配器类与适配者类的关系不同,适配器模式可分为对象适配...

2020-01-15 21:37:07 262

原创 创建型设计模式(4):原型模式

原型模式1.复制引用、复制对象、浅拷贝和深拷贝复制引用复制对象浅拷贝和深拷贝2.代码实现简单深拷贝是否做到完全深拷贝真正深拷贝3.通过序列化和反序列化实现深拷贝4.使用场景5.优缺点类和对象的关系好比模具和构件的关系,对象总是通过构造方法从类中创建的。但是某些场景下是不允许类的调用者直接调用构造函数,也就说对象未必需要从类中衍生出来,现实生活中存在太多案例是通过直接 “克隆” 来产生新的对象,...

2020-01-14 21:48:37 207

原创 创建型设计模式(3):建造者模式

建造者模式1.建造者模式组成2.代码实现3.优缺点总结4.与工厂方法比较模块化生产将产品的各个部分分别打造,最终组装起来得到一个完整的产品。同时,相同的一堆零件在组装过程中的顺序或用量不同时,可以得到不同的产品。相比其他创建型设计模式,工厂模式强调如何生产一个对象,而建造者模式强调顺序。数量不同,组合生成的对象也就会可能产生不同的对象。1.建造者模式组成建造者模式通常由如下几部分构成,...

2020-01-14 20:38:56 222

原创 创建型设计模式(2):单例模式

单例模式1.代码实现懒汉式实现饿汉式实现2.单例模式优缺点3.单例模式使用场景单例模式的使用场景,想确保任何情况下都绝对只有一个实例在程序上表现出只存在一个实例依据上面的使用场景,得出单例模式的构建,只有一个实例该实例对象由该类本身创建提供全局访问点能够对该实例对象进行获取1.代码实现单例模式的主要角色是单例类,该类中通常包含如下实现,私有的构造方法私有的类成员变量...

2020-01-14 19:51:43 157

原创 创建型设计模式(1):工厂模式

工厂模式简单工厂分类1.普通简单工厂2.多方法简单工厂3.静态方法简单工厂工厂方法模式1.模式说明2.开发实例抽象工厂模式1.模式特点2.组成角色3.开发实例4.良好拓展性工厂模式对将调用的方法或者通过new创建类对象的过程进行封装。就好像使用数据库中间件的过程,无需关心底层的实现,只需要将用户名和密码上传即可。工厂模式的优点如下,一个调用者想创建某个对象只需要知道名称即可屏蔽具体的行为...

2020-01-13 22:39:01 639

原创 Java8新特性:lambda表达式(下)

lambda表达式3.lambda表达式高级拓展方法引用3.lambda表达式高级拓展方法引用方法引用是结合lambda表达式的一组语法特性,具体分为静态方法引用、实例方法引用和构造方法引用。...

2019-12-11 01:10:30 188

原创 Java8新特性:lambda表达式(上)

lambda表达式1.lambda表达式概述传统实现方式lambda表达式实现2.lambda表达式基础语法函数式接口1.lambda表达式概述lambda表达式是Java8的新特性,也被称为箭头函数、匿名函数、闭包。这种表达式体现的是轻量级函数式编程的思想。->符号是lambda表达式的核心符号,符号左侧是操作参数,符号右侧是操作表达式语句块。lambda表达式出现的目的是在开发过程...

2019-12-09 00:58:46 215

原创 线程池:Executor框架源码解析(下)

线程池:Executor框架源码解析2.源码解析ThreadPoolExecutor类*5)任务执行—execute方法6)新建Worker并执行任务—addWorker方法更新Worker的数量添加worker到workers集合中并且启动worker持有的线程7)线程任务实际运行—runWorker方法总结1)submit方法整体流程2)线程池整体图2.源码解析ThreadPoolExec...

2019-11-25 22:31:58 228

原创 线程池:Executor框架源码解析(上)

Executor框架使用1.整体架构2.源码解析Executor接口ExecuorService接口AbstractExecutorService1)构建任务—newTaskFor方法2)构建任务并执行—submit方法Java内部提供了线程池Executor框架,其功能比之前笔记中自实现的简易线程池更加全面。1.整体架构Executor框架的整体架构如下,接口/类说明...

2019-11-25 20:56:47 337

原创 线程池:手动实现线程池

手动实现线程池1.创建线程的问题2.线程池概念3.自开发线程池主体架构实现任务队列—RunnableTaskQueue实现线程池—MyExecutor运行线程池1)调用形式12)调用形式21.创建线程的问题并发的本质是任务并行处理,大多数的并发程序围绕离散任务执行来构建。构建的基本思路是对任务进行划分,使得各个不同类型的任务之间相互独立,不存在依赖。这样就可以并行处理任意的任务。在资源无限制...

2019-11-25 00:16:02 846 1

原创 锁:ReentrantLock源码解析

ReentrantLock源码解析1.整体架构类注释类结构构造方法2.源码解析Sync同步器1)重入性实现原理—nonfairTryAcquire方法2)释放锁—tryRelease方法公平锁—FairSync1)资源加上公平锁—lock方法2)公平锁处理逻辑—tryAcquire方法非公平锁—NonfairSync1)资源加上非公平锁—lock方法2)非公平锁处理逻辑—tryAcquire方法R...

2019-11-18 01:22:53 651

原创 锁:AbstractQueuedSynchronizer源码解析(下)

AbstractQueuedSynchronizer源码解析1.释放锁释放排它锁—release方法unparkSuccessor方法1.释放锁释放锁是在显式调用Lock.unlock()方法时触发的,目的是让线程释放对资源的访问权。unlock方法的基础方法是release和releaseShared,分别代表排它锁和共享锁的释放。释放排它锁—release方法排它锁的释放过程比较简单,...

2019-11-16 21:59:44 236

原创 锁:AbstractQueuedSynchronizer源码解析(上)

AbstractQueuedSynchronizer源码解析1.整体架构类注释类定义类属性1)一般属性2)同步队列属性3) 条件队列属性4)Node5)共享锁和排它锁的区别Condition接口1)类注释2)条件队列示例3)接口方法2.同步器状态3.获取锁获得排它锁—acquire1)addWaiter方法2)acquireQueued方法setHead方法shouldParkAfterFaile...

2019-11-14 15:17:59 270

原创 线程:synchronized原理及使用

synchronized原理与使用1. synchronized作用2. synchronized使用同步代码块同步方法synchronized使用总结3. sychronized原理4. synchronized注意事项1. synchronized作用能够保证原子性的Atomic变量和保证可见性、有序性的 volatile关键字是轻量级的实现并发同步的方式,但是都存在着一定的局限,具体参考...

2019-11-11 00:36:33 397

原创 线程:并发问题的解决

并发问题的解决1. 实现原子性Atomic1)Atomic概述2)Atomic源码分析构造方法increamentAndGet方法CAS算法1)CAS与synchronized差异2)CAS算法缺点2. 实现可见性和有序性volatile效果理解volatile1)保证可见性2)保证有序性3)无法保证原子性volatile使用场景并发的三大特性是在并行开发中一定要保证的。最简单的保证这三个特性...

2019-11-10 21:54:53 729

原创 线程:并发中可能存在的问题

并发中可能存在的问题1. 并发编程三大特性2. 原子性竞态条件3. 可见性缓存不一致性CPU缓存模型Volatile关键字4.有序性指令重排实例5. 问题根源—JMM模型1. 并发编程三大特性并发编程的三大特性实际上是并发编程中所有问题的根源,原子性所有操作要么全部成功,要么全不成功可见性一个线程对变量的修改,其余的线程能够立刻读取到变量的最新值有序性代码在执行阶段的执行顺序与程...

2019-11-10 15:51:09 972 2

原创 线程:Future、ExecutorService源码解析

Future、ExecutorService源码解析1.整体架构2.Callable接口3.FutureTask类Future接口RunnableFuture接口统一Callable和Runnable1)FutureTask类定义2)FutureTask类属性3)FutureTask构造器4)Runnable适配CallableFutureTask对任务的管理1)get方法2)run方法3)can...

2019-11-08 22:31:48 259

原创 MySQL事务(2):事务控制

事务控制事务控制语句1)常用事务语句2)差异辨析3)注意事项已正确执行语句不会自动回滚rollback to savepoint并非结束事务隐式提交SQL语句事务控制语句MySQL默认设置下,事务都是自动提交的,即SQL执行后会立即执行commit操作。1)常用事务语句显式的开启一个事务需要使用begin、start transaction或者执行set autocommit=0,通过这些...

2019-11-06 22:18:44 883

原创 MySQL事务(1):事务实现

事务实现事务分类1)扁平事务2)带有保存点的扁平事务3)链事务4)嵌套事务5)分布式事务redo log1) redo log构成2) redo log和bin log事务是数据库区别于文件系统的重要特性,由一条或一组SQL语句组成。事务将数据库从一种一致状态转换为另一种一致状态。事务应当完全符合ACID特性,atomicity,原子性事务是不可分割的工作单位,事务中的操作语句要么全部完...

2019-11-05 11:09:09 595

原创 线程:Thread类源码解析(下)

Thread类源码解析4.Thread APIsleep方法yield方法setPriority方法interrupt方法*Join方法4.Thread APIsleep方法sleep 方法会使线程休眠指定的时间长度。休眠的意思是,当前逻辑执行到此不再继续执行,而是等待指定的时间。但在这段时间内,该线程持有的 monitor 锁(锁在以后的笔记中讲解)并不会被放弃。可以认为线程只是工作到一...

2019-11-01 01:30:01 185

原创 线程:Thread类源码解析(上)

Thread类源码解析1.基本架构类注释线程状态1)NEW2)RUNNABLE3)RUNNING4)BLOCKED5)TERMINATED6)WAITING和TIMED_WAITING优先级守护线程ClassLoader2.初始化方法1.基本架构Thread类涉及较多基本概念,理解基本概念是读源码的前提。类注释每个线程都有优先级,高优先级的线程可能会优先执行父线程创建子线程后,子线程的...

2019-11-01 00:56:34 277

原创 MySQL锁(4):乐观锁与悲观锁

乐观锁与悲观锁乐观锁1)乐观锁特点2)乐观锁实现版本号机制CAS算法3)乐观锁缺点悲观锁乐观锁与悲观锁使用场景乐观锁1)乐观锁特点乐观锁( Optimistic Locking ) 假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测。如果发现冲突了,则返回错误的信息,让用户决定如何去做。2)乐观锁实现实现乐观锁一般有以下2种方式,版本号机...

2019-10-28 21:15:45 319

原创 MySQL锁(3):死锁

死锁死锁概念死锁的解决1)设置超时时间2)wait-for graph死锁示例1)AB-BA死锁2)特殊死锁降低死锁发生概率分析死锁的方法死锁概念死锁是指两个及以上的事务在执行过程中因争锁造成的相互等待。解决死锁一般有两种方法,设置超时时间:两个事务等待过程实际上是阻塞过程,对参数innodb_lock_wait_timeout进行设定来设置超时时间。wait-for graph检验死...

2019-10-28 20:22:37 551

原创 MySQL锁(2):行锁

行锁事务隔离级别InnoDB行锁模式1)共享锁和排它锁2)意向锁RC级别下行锁实验1)通过非索引字段查询2)通过唯一索引查询3)通过普通索引查询RC级别下的间隙(gap)RR级别下行锁实验MySQL数据库中InnoDB引擎支持行锁,。事务隔离级别不同的事务隔离级别对应的行锁是不同的,对应的行锁的锁定范围也是不同的。隔离级别说明read uncommitted 读未提交...

2019-10-28 11:16:04 447 1

原创 MySQL锁(1):MySQL全局锁和表锁

全局锁与表锁锁的概念数据准备全局锁表锁和元数据锁1)表锁表锁使用场景及分类表锁上锁命令表读锁使用表写锁使用表锁使用总结2)元数据锁(MDL)元数据锁相关概念元数据锁阻塞示例online DDL插队现象锁的概念锁用于协调多个客户端对同一数据的并发访问,保证并发访问时数据的有效性和一致性。MySQL的锁分为全局锁、表锁和行锁。数据准备创建一个表格,对后续锁的使用演示做准备。CREATE T...

2019-10-27 22:39:48 450

原创 MySQL索引(3):B+树索引的使用

B+树索引使用OLTP和OLAP需要使用索引的情况联合索引OLTP和OLAP数据库存在两种类型的应用,OLTP和OLAP应用。联机事务处理OLTP(on-line transaction processing) 主要是执行基本日常的事务处理,比如数据库记录的增删查改。比如在银行的一笔交易记录,就是一个典型的事务。OLTP的特点一般有:实时性要求高。银行异地汇款对实时处理能力有高要求。...

2019-10-25 16:46:08 207

原创 队列:队列在Java中的应用

队列在Java中的应用1. 队列和线程池队列在线程池中的作用—存放任务请求线程池中的队列类型1)LinkedBlockingQueueSynchronousQueueDelayedWorkQueue2. 队列和锁队列在锁中的作用—管理争锁失败的线程Java的线程池直接使用了队列的API,锁借鉴了队列的思想,重新实现了队列。所以队列在这两个的实现上都发挥了关键作用。1. 队列和线程池队列在线程...

2019-10-25 01:26:18 1775

原创 MySQL索引(2):B+树索引基本概念

B+树索引基本概念聚簇索引辅助索引B+索引的分裂B+树索引的管理及Cardinality值B+树索引的本质就是B+树在数据库中的实现,但是B+树索引在数据库中有一个特点是高扇出性,所以在数据库中B+树的高度一般在2到4层,即查找某个键值的行记录最多需要2到4次IO。B+树索引可以分为聚簇索引(一级索引)和辅助索引(二级索引),二者都是B+树,叶节点存放数据。二者的区别在于聚簇索引的叶节点存放的...

2019-10-24 21:15:37 426

原创 MySQL索引(1):InnoDB存储引擎概述

InnoDB引擎概述InnoDB常见索引索引相关数据结构1)二分法查找2)二叉查找树和平衡二叉树3)B+树索引是数据库应用和开发的重要方面。索引过少,查询性能会有影响;反之,过多,对应用的性能也有产生影响。在实际开发中,会在创建索引时取一个平衡点。InnoDB常见索引InnoDB支持如下常见索引,B+树索引全文索引哈希索引InnoDB支持的哈希索引时自适应的,根据表的使用情况自动...

2019-10-24 17:55:32 283

原创 队列:SynchronousQueue源码解析

SynchronousQueue源码解析1. 整体架构2.源码解析非公平堆栈SynchronousQueue是队列中最特殊的队列,它本身没有容量大小,将一个元素放入到队列中后无法立刻返回。直到其他线程将放入的元素消费掉才能够返回。SynchronousQueue在消息队列技术中间件中被大量使用,其内部同时使用两种数据结构实现队列,分别是FIFO的队列和FILO的堆栈。分别对应两个内部类Tran...

2019-10-24 10:06:33 207

原创 队列:ArrayBlockingQueue源码解析

ArrayBlockingQueue源码解析整体架构整体架构数组阻塞队列的类注释信息如下,底层是有界数组(不能扩容),容量一旦初始化,后续无法修改队列中元素是有顺序的,按照先入先出进行排序,从队伍插入数据,从队头拿出数据队列满时,放数据会被阻塞;队列空时,取数据会被阻塞该类中几个重要的对象,// 数组大小必须在初始化的时候手动设置,没有默认大小final Object[] it...

2019-10-22 00:57:06 156

原创 队列:DelayQueue源码解析

DelayQueue源码解析1.整体结构2.使用演示3. 源码解析数据存入队列—put方法队列取出数据—take方法与大多数阻塞队列不同,DelayQueue是一种延迟队列。一般的队列当资源足够时立马执行,而DelayQueue到达设定的延迟时间后才会执行。1.整体结构DelayQueue延迟队列底层使用的是锁的能力,在多线程操作时也具备安全性。DelayQueue类注释中提及的3个关键概...

2019-10-21 22:13:46 277

原创 MySQL基础优化(7):高效count函数

高效count函数重新认识count函数1)count(*)和count(字段)的区别2)MyISAM引擎和InnoDB引擎count(*)的区别3)5.7.18版本前后count(*)的区别4)count(1)和count(*)效率比较优化count1)show table status2)增加计数表count方法用于统计记录数目是很常见的,但是如果使用不当会导致效率低下。首先创建测试表,...

2019-10-21 01:29:55 733

空空如也

空空如也

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

TA关注的人

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