自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

孟庆云的博客

计算机编程知识笔记

  • 博客(34)
  • 收藏
  • 关注

原创 分布式系统和事务

分布式系统和事务文章目录分布式系统和事务@[TOC](文章目录)网络分区CAP一致性分类BASE分布式事务权衡2PCXA组件流程问题TCC三阶段问题适用场景本地消息表流程问题可靠消息最终一致性方案流程第一步: 消息由系统A投递到中间件第二步: 消息由中间件投递到系统B最大努力通知方案总结Seata组件流程VS 2PC要点说明网络分区一个分布式系统里面,节点组成的网络本来应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域。数据就散布在了这些不连通的区域中。这就叫分区

2022-03-18 15:22:12 2537

原创 synchronized原理

synchronized原理文章目录synchronized原理语法语义(作用)对象头ObjectMonitor(ObjectMonitor.hpp文件,C++实现的)字节码Mutex Lock语法(1)修饰普通方法(2)修饰静态方法(3)修饰代码块语义(作用)(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够即时可见(3)防止各种重排序问题对象头我们都知道,对象被创建在堆中。并且对象在内存中的存储布局方式可以分为3块区域:对象头、实例数据、对齐填充。其中对象头,便是我们

2022-03-17 18:55:08 947

原创 垃圾回收机制

尽管虚拟机内存的动态分配与内存回收技术很成熟,可万一出现了这样那样的内存溢出问题,那么将难以定位错误的原因所在。为了高效的回收,jvm将堆分为三个区域:1.新生代(Young Generation)2.老年代(Old Generation);3.永久代(Permanent Generation)(jdk1.8之前)1 判断对象是否存活算法1.1 引用计数算法这种算法判断很简单,简单来说就是...

2020-04-27 01:16:39 541 1

原创 MYSQL索引的底层实现原理

1 索引的本质索引(Index)是帮助MySQL高效获取数据的数据结构,为什么需要需要特定的数据结构呢?首先,顺序查找这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,更优秀的查找算法,比如二分查找(binary search)、二叉树查找(binary tree search),我们会发现每种查找算法都只能应用于特定的数据结构之上,但是数据本身的组织结构不可能完全满足各种数据结构,所以,在...

2020-04-13 22:21:14 3348

原创 MySQL Explain详解

Explain命令用于查看一个这些SQL语句的执行计划,信息有10列,分别是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra1 id:选择标识符这是SELECT的查询序列号1.1 执行顺序id相同:执行顺序由上至下;id不同:如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行有相同也有不同...

2020-04-12 00:06:26 440

原创 MYSQL的锁机制

1 有哪些锁mysql 中的锁可以按照多个维度进行分类1.1 按照工作原理分其实就是读写锁加上意向锁1.1.1 共享锁(S 锁 )持有同一个共享锁的多个进程可以同时进入保护空间,这就是共享锁命名的来源,持有通常在读取数据前加锁,以实现多个对数据的读取进程可以相互并发执行不被阻塞,因此也常被称为“读锁”innodb 通过 MVCC 机制实现了无需加锁即可以避免读写冲突,所以在RC和RR的...

2020-04-09 23:43:00 114

原创 数据库事务

1 前言关于事务,说简单点就是一串原子操作,说复杂又牵扯出好多疑问:为啥需要事务;ACID是干啥的,是怎么保证的;隔离级别和并发问题是什么关系,底层是怎么实现…带着这些问题,让我们开始学习事务吧2 为什么要有事务现实中存在很多一组操作需要顺序完成的场景,比如转账至少包括A账户减少和B账户增加两步操作,我们希望他们能要么同事执行,要么同时失败,并且操作前后数据库都要处于正确状态。存在的问题(...

2020-03-20 22:47:29 1084

原创 Lock和Synchronized

1 锁的分类可重入锁Synchronized和ReentrantLook都是可重入锁,锁的可重入性标明了锁是针对线程分配方式而不是针对方法。例如调用Synchronized方法A中可以调用Synchronized方法B,而不需要重新申请锁。读写锁按照数据库事务隔离特性的类比读写锁,在访问统一个资源(一个文件)的时候,使用读锁来保证多线程可以同步读取资源。ReadWriteLock是一个读写...

2020-03-20 13:58:13 120

原创 redis

1 Redis支持哪几种数据类型1.1 string最基本的数据类型,二进制安全的字符串,最大512M二进制安全二进制安全功能(函数)是指在一个二进制文件上所执行的不更改文件内容的功能或者操作,其本质上将操作输入作为原始的、无任何特殊格式意义的数据流,即输入任何字节都能正确处理, 即使包含零值字节(\0)value可以是String也可以是数字作为数字一般做一些复杂的计数功能的缓存1...

2020-03-18 21:37:25 1334

原创 java IO

1 Java中有哪几种类型的流字符流和字节流,字节流继承inputStream和OutputStream,字符流继承自Reader和Writer, InputStream,OutputStream,Reader,writer都是抽象类。所以不能直接new。1.1 区别字节流是最基本的,主要用在处理二进制数据,它是按字节来处理的。但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的e...

2020-03-17 22:24:35 222

原创 CAS和MESI和VOALTILE

CAS比较并交换(Compare and Swap)1 基本原理有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。CAS是一种典型的乐观锁, 假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。2 实现原子操作CAS操作分为获取当前值、比较和设置至少两部分,不是原子操作如何保证原子性呢。2.1 JNIc...

2020-03-17 18:53:37 789

原创 JVM内存分配机制

1 CPU和内存的交互了解jvm内存模型前,了解下cpu和计算机内存的交互情况。因为Java虚拟机内存模型定义的访问操作与计算机十分相似.1.1 高速缓存内存相当于cpu和磁盘之间的缓冲区,但是随着cpu的发展,内存的读写速度也远远赶不上cpu,加上高速缓存解决了处理器和内存一快一慢的矛盾1.2 缓存一致性协议在多核cpu中,每个处理器都有各自的高速缓存(L1,L2,L3),而主内存确只...

2020-02-24 00:26:52 750

原创 HashMap和ConcurrentHashMap

1 基本特性储存的是键值对,可以接受null键值,非Synchronized,很快2 基本常量2.1 DEFAULT_INITIAL_CAPACITY初始容量,也就是默认会创建 16 个箱子,箱子的个数不能太多或太少。如果太少,很容易触发扩容,如果太多,遍历哈希表会比较慢。2.2 MAXIMUM_CAPACITY哈希表最大容量1 << 30(1073741824),一般情况...

2020-02-21 22:04:03 515

原创 红黑树

1 简介1.2 特性(红或黑)每个节点或者是黑色,或者是红色(根是黑)根节点是黑色(叶是黑)每个叶子节点是黑色(叶子节点只为空)(红子黑)如果一个节点是红色的,则它的子节点必须是黑色的(黑数同)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点1.3 完全黑平衡最长路径的节点中数量不会超过最短路径的两倍1.4 应用TreeSet\TreeMap\Linux虚拟内存...

2020-02-20 18:30:52 127

原创 软考笔记(软件设计师)

海明威校验码由Richard Hamming于1950年提出、目前还被广泛采用的一种很有效的校验方法,是只要增加少数几个校验位,就能检测出二位同时出错、亦能检测出一位出错并能自动恢复该出错位的正确值的有效手段,后者被称为自动纠错。它的实现原理,是在k个数据位之外加上r个校验位,从而形成一个k+r位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的偶校验位的组合中,...

2019-05-13 16:29:55 951

原创 Spring技术内幕学习笔记

一、 Spring的设计理念和整体架构1.Spring的设计目标简单来说,Spring为开发者提供的是一个一站式的轻量级应用开发框架。作为平台,Spring抽象了开发中遇到的共性问题。同时作为轻量级的框架,Spring有一些特点:支持POJO和使用JavaBean的开发方式,使应用面向接口开发,充分支持OO的设计方法。依据对传统操作系统的认知方法,在设计上把Spring划分为核心、组件和应用3个基...

2018-07-04 15:54:39 555

原创 深入理解Java内存模型学习笔记

 基础并发编程模型的分类共享内存:线程之间共享程序的公共状态,线程之间通过写-度内存中的公共状态来隐式进行通信。同步是指程序用于控制不同  线程之间操作发生相对顺序的机制。在共享内存并发模型里,同步是显示进行的。消息传递:线程之间没有公共状态,县城之间必须通过明确的发送消息来显示进行通信。在消息传递的并发模型里,由于消息的发送必须在消息的接收之前,因此同步是隐式进行的。Java并发模型:Java的...

2018-06-15 13:55:02 175

原创 类加载机制

一类的加载连接和初始化1JVM的启动和终止2类的加载3类的连接4类的初始化1目的2方式3初始化步骤6初始化时机二类加载器1类加载器简介2加载器层次结构1Bootstrap根引导或原始类加载器2Extension Classloader扩展类加载器3 System ClassLoader系统应用类加载器3类加载机制1三种类加载机制2父子关系3实现类4加载步骤5创

2017-03-04 20:56:59 415

原创 lucene

一、理论1 lucene简介1.1 什么是luceneLucene是一个全文搜索框架,而不是应用产品。因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品。2 lucene的工作方式lucene提供的服务实际包含两部分:一入一出。所谓入是写入,即将你提供的源(本质是字符串)写入索引或者将其从索引中删除;所谓出是读出,即向

2017-02-24 12:17:47 194

原创 java常见算法

冒泡排序原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束public void exeBubbleSort(int[] arr){ //循环躺数 for(int i=0;i&amp;amp;amp;amp;lt;arr.length;i++){ //从左往右循环比较相邻元素大小,

2017-02-23 16:16:51 480

转载 垃圾回收

一、垃圾回收的意义在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其他对象;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾回收意味着程序不再需要的对象是“无用信息”,这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用。事实上,除了释放没用的对象,

2017-02-21 15:46:10 323

转载 物化视图

一、概述物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。物化视图(Materialized View)在9i以前的版本叫做快照(SNAPSHOT),从9i开始改名叫做物化视图。它是用于预先计算并保存表连接或聚集等耗

2017-02-21 14:12:33 335

原创 java内存泄漏

一、Java内存回收机制不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址。Java中对象是采用new或者反射的方法创建的,这些对象的创建都是在堆(Heap)中分配的,所有对象的回收都是由Java虚拟机通过垃圾回收机制完成的。GC为了能够正确释放对象,会监控每个对象的运行状况,对他们的申请、引用、被引用、赋值等状况进行监控,Java会使用有向图的方法进行管

2017-02-21 13:51:24 306

原创 强引用、软引用、弱引用、虚引用

在Java中,虽然不需要程序员手动去管理对象的生命周期,但是如果希望某些对象具备一定的生命周期的话(比如内存不足时JVM就会自动回收某些对象从而避免OutOfMemory的错误)就需要用到软引用和弱引用了。   从Java SE2开始,就提供了四种类型的引用:强引用、软引用、弱引用和虚引用。Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有

2017-02-21 12:03:51 665

转载 RESTful

一 什么是REST二理解RESTful1资源与URI使用_或-来让URI可读性更好使用来表示资源的层级关系使用用来过滤资源或可以用来表示同级资源的关系2统一资源接口GETPOSTPUTDELETEPOST和PUT用于创建资源时有什么区别客户端不一定都支持这些HTTP方法吧统一接口是否意味着不能扩展带特殊语义的方法统一资源接口对URI有什么指导意义如果GET请求增加计数

2017-02-21 11:46:42 382

原创 设计模式

一、创建型模式1、工厂方法模式(Factory Method)1.1 普通工厂模式解释:就是建立一个工厂类(无接口),对实现了同一接口的一些类进行实例的创建,测试时根据工厂类中核心方法的输入d的String类型的参数返回不同类型的实例。1.2 多个工厂方法模式解释:将普通工厂模式的工厂类中的核心方法拆成了多个方法,不再需要输入参数,不同的方法对应返回不同类型的实例。1.3 静态工厂方法模式解释:将多

2017-02-21 10:43:17 258

转载 MVC框架

一、简述MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:●Model(模型)表示应用程序核心(比如数据库记录列表)。●View(视图)显示数据(数据库记录)。●Controller(控制器)处理输入(写入数据库记录)。MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。Model(模型)是应

2017-02-21 10:32:42 1348

转载 Spring事务原理

一、事务的基本原理Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行:获取连接 Connection con = DriverManager.getConnection()开启事务con.setAutoCommit(true/false);执行CRUD提交事务/回滚事务 con.

2017-02-20 17:05:04 480

转载 数据库三范式

一 简介设计关系型数据库时,遵从不同的规范要求,设计出合理的关系型数据库。这些规范被称作范式。越高的范式数据库的冗余度就越低。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)满足第二范式一定满足第一范式,满足第三范式一定满足第二范式,依次类推。。。关系型数据库的最低要求是满足第一范式。

2017-02-17 11:41:29 807

转载 Spring AOP 深入剖析

[toc] AOP是Spring提供的关键特性之一。AOP即面向切面编程,是OOP编程的有效补充。使用AOP技术,可以将一些系统性相关的编程工作,独立提取出来,独立实现,然后通过切面切入进系统。从而避免了在业务逻辑的代码中混入很多的系统相关的逻辑——比如权限管理,事物管理,日志记录等等。这些系统性的编程工作都可以独立编码实现,然后通过AOP技术切入进系统即可。从而达到了 将不同的关注点分离

2017-02-17 11:17:59 240

原创 JavaEE 轻量级常用框架原理

一 Hibernate我们从三个角度理解一下Hibernate:1 Hibernate是对JDBC进一步封装 原来没有使用Hiberante做持久层开发时,存在很多冗余,如:各种JDBC语句,connection的管理,所以出现了Hibernate把JDBC封装了一下,我们不用操作数据,直接操作它就行了。2 我们再从分层的角度来看 我们知道非常典型的三层架构:表示层,业务层,还有持久层。H

2017-02-16 19:58:17 1560

原创 Java中的一些为什么

为什么接口可以多继承非接口的单继承多继承虽然能使子类同时拥有多个父类的特征,但是其缺点也是很显著的,主要有两方面:如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该变量时将产生歧义,无法判断应该使用哪个父类的变量。如果在一个子类继承的多个父类中拥有相同方法,子类中有没有覆盖该方法,那么调用该方法时将产生歧义,无法判断应该调用哪个父类的方法。接口的多继承在接口中不能有实例变量,只能

2017-02-16 15:42:28 247

原创 Java中的各种区别

i 和 I的区别和区别方法重写和方法重载的区别抽象类和接口的区别arraylist和linkedlist区别 接口实现形式性能arraylist和vector区

2017-02-16 12:32:36 2973

原创 Java基础概念

面向对象的特征有哪些方面封装抽象多态继承Java中的异常处理机制的简单原理和应用概念分类面试提示面向对象的特征有哪些方面1.封装:封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响. 面向对象的封装性,即将对象封装成一个高度自治和相对封闭的个体,对象状态(属性)由这个对象自己的行为(方法)来读取和改变.2.

2017-02-16 11:10:41 660

空空如也

空空如也

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

TA关注的人

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