自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 NC系列中的UPM文件component组件属性说明

下方是一个示例的upm文件内容。

2023-06-08 10:06:10 832

原创 mycat的安装及使用

​ 我们刚刚讲解了数据切分的两种方式,会发现每种方式都有自己的缺点,但是他们之间有共同的缺点,分别是:​ 1、引入了分布式事务的问题​ 2、跨节点join的问题​ 3、跨节点合并排序分页的问题​ 4、多数据源管理的问题​ 针对数据源管理,目前主要有两种思路:​ 1、客户端模式,在每个应用程序模块中配置管理自己需要的一个或多个数据源,直接访问各个数据库,在模块内完成数据的整合​ 2、通过中间代理层来统一管理所有的数据源,后端数据库集群对前端应用程序透明;

2023-05-25 20:26:26 1976

原创 mycat的基本介绍及安装

​ Mycat 是什么?从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了 MySQL 协议的Server,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用MySQL 原生(Native) 协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为 N 个小表,存储在后端 MySQL 服务器里或者其他数据库里。

2023-05-25 20:24:32 822

原创 MySQL(九)

(1)共享读锁(S)之间是兼容的,但共享读锁(S)与排他写锁(X)之间,以及排他写锁(X)之间是互斥的,也就是说读和写是串行的。(2)在一定条件下,MyISAM允许查询和插入并发执行,我们可以利用这一点来解决应用中对同一表查询和插入的锁争用问题。(3)MyISAM默认的锁调度机制是写优先,这并不一定适合所有应用,用户可以通过设置LOW_PRIORITY_UPDATES参数,或在INSERT、UPDATE、DELETE语句中指定LOW_PRIORITY选项来调节读写锁的争用。

2023-02-23 20:13:02 429

原创 MySQL(八)

服务器参数设置

2023-02-22 20:48:25 536

原创 MySQL(七)

对于用户而言,分区表是一个独立的逻辑表,但是底层是由多个物理子表组成。分区表对于用户而言是一个完全封装底层实现的黑盒子,对用户而言是透明的,从文件系统中可以看到多个使用#分隔命名的表文件。mysql在创建表时使用partition by子句定义每个分区存放的数据,在执行查询的时候,优化器会根据分区定义过滤那些没有我们需要数据的分区,这样查询就无须扫描所有分区。分区的主要目的是将数据安好一个较粗的力度分在不同的表中,这样可以将相关的数据存放在一起。

2023-02-20 20:37:50 384

原创 MySQL(六)

mysql的关联查询很重要,但其实关联查询执行的策略比较简单:mysql对任何关联都执行嵌套循环关联操作,即mysql先在一张表中循环取出单条数据,然后再嵌套到下一个表中寻找匹配的行,依次下去,直到找到所有表中匹配的行为止。在编写快速的查询之前,需要清楚一点,真正重要的是响应时间,而且要知道在整个SQL语句的执行过程中每个步骤都花费了多长时间,要知道哪些步骤是拖垮执行效率的关键步骤,想要做到这点,必须要知道查询的生命周期,然后进行优化,不同的应用场景有不同的优化方式,不要一概而论,具体情况具体分析,

2023-02-19 11:46:03 363

原创 MySQL(五)

​ 只有当索引的列顺序和order by子句的顺序完全一致,并且所有列的排序方式都一样时,mysql才能够使用索引来对结果进行排序,如果查询需要关联多张表,则只有当orderby子句引用的字段全部为第一张表时,才能使用索引做排序。​ 一般情况下某个列前缀的选择性也是足够高的,足以满足查询的性能,但是对应BLOB,TEXT,VARCHAR类型的列,必须要使用前缀索引,因为mysql不允许索引这些列的完整长度,使用该方法的诀窍在于要选择足够长的前缀以保证较高的选择性,通过又不能太长。

2023-02-15 20:06:00 368

原创 MySQL(四)

每个节点占用一个磁盘块,一个节点上有两个升序排序的关键字和三个指向子树根节点的指针,指针存储的是子节点所在磁盘块的地址。以根节点为例,关键字为 16 和 34,P1 指针指向的子树的数据范围为小于 16,P2 指针指向的子树的数据范围为 16~34,P3 指针指向的子树的数据范围为大于 34。1、每个节点都有key,同时也包含data,而每个页存储空间是有限的,如果data比较大的话会导致每个节点存储的key数量变小。2、比较关键字 28 在区间(16,34),找到磁盘块 1 的指针 P2。

2023-02-06 21:17:49 348

原创 MySQL(三)

​ 在企业的应用场景中,为了知道优化SQL语句的执行,需要查看SQL语句的具体执行过程,以加快SQL语句的执行效率。​ 可以使用explain+SQL语句来模拟优化器执行SQL查询语句,从而知道mysql是如何处理sql语句的。​ 官网地址: https://dev.mysql.com/doc/refman/5.5/en/explain-output.html。

2023-02-04 16:05:26 623 1

原创 MySQL(二)

整数类型可以使用的几种整数类型:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT分别使用8,16,24,32,64位存储空间。尽量使用满足需求的最小数据类型字符和字符串类型1、char长度固定,即每条数据占用等长字节空间;最大长度是255个字符,适合用在身份证号、手机号等定长字符串2、varchar可变程度,可以设置最大长度;最大空间是65535个字节,适合用在长度可变的属性3、text不设置长度,当不知道属性的最大长度时,适合用text。

2023-02-02 20:09:27 260

原创 MySQL(一)

​MySQL的performance schema 用于监控MySQL server在一个较低级别的运行过程中的资源消耗、资源等待等情况。​ 特点如下:​ 1、提供了一种在数据库运行时实时检查server的内部执行情况的方法。performance_schema 数据库中的表使用performance_schema存储引擎。该数据库主要关注数据库运行过程中的性能相关的数据,与information_schema不同,information_schema主要关注server运行过程中的元数据信息。

2023-02-01 21:25:24 220

原创 JVM调优第十节

执行命令:java -Xms20M -Xmx20M -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC com.mashibing.jvm.gc.T15_FullGC_Problem01。–XX:CMSInitiatingOccupancyFraction 92% 可以降低这个值,让CMS保持老年代足够的空间。6585 -> 2770:整个堆的情况。6144->640:收集前后的对比。解决方案:降低触发CMS的阈值。(6144):整个年轻代容量。

2023-01-11 20:15:36 382 1

原创 JVM调优第九节

用jvm都会溢出,mycat用崩过,1.6.5某个临时版本解析sql子查询算法有问题,9个exists的联合sql就导致生成几百万的对象(来自 死物风情)小米云,HBase同步系统,系统通过nginx访问超时报警,最后排查,C++程序员重写finalize引发频繁GC问题。OOM产生的原因多种多样,有些程序未必产生OOM,不断FGC(CPU飙高,但内存回收特别少) (上面案例)如果有一个系统,内存一直消耗不超过10%,但是观察GC日志,发现FGC总是频繁产生,会是什么引起的?

2023-01-10 22:32:58 388

原创 JVM调优第八节

jstat -gc 动态观察gc情况 / 阅读GC日志发现频繁GC / arthas观察 / jconsole/jvisualVM/ Jprofiler(最好用)https://www.cnblogs.com/liugh/p/7620336.html (简单做法)作业:1:写一个死锁程序,用jstack观察 2 :写一个程序,一个线程持有锁不释放,其他线程等待。搜索jstack dump的信息,找 ,看哪个线程持有这把锁RUNNABLE。为什么阿里规范里规定,线程的名称(尤其是线程池)都要写有意义的名称。

2022-10-27 20:53:10 117

原创 JVM调优第七节

根据需求进行JVM规划和预调优优化运行JVM运行环境(慢,卡顿)解决JVM运行过程中出现的各种问题(OOM)

2022-10-26 20:45:35 112

原创 JVM调优第六节

根据需求进行JVM规划和预调优优化运行JVM运行环境(慢,卡顿)解决JVM运行过程中出现的各种问题(OOM)

2022-10-25 21:34:58 115

原创 JVM调优第五节

提示:结合GC, 一直创建字符串常量,观察堆,和Metaspace。如何证明1.7字符串常量位于Perm,而1.8位于Heap?JVM可以直接访问的内核空间的内存 (OS 管理的内存)NIO , 提高效率,实现zero copy。​ 取PC中的位置,找到对应位置的指令;

2022-10-24 21:28:56 89

原创 JVM调优第四节

project structure - project settings - library 添加该jar包。注意Premain-Class这行必须是新的一行(回车 + 换行),确认idea不能有任何错误提示。当一个对象计算过identityHashCode之后,不能进入偏向锁状态。src目录下创建META-INF/MANIFEST.MF。在需要使用该Agent Jar的项目中引入该Jar包。新建项目ObjectSize (1.8)创建文件ObjectSizeAgent。

2022-10-23 19:47:01 87

原创 JVM调优第三节

协议很多intel 用MESI现代CPU的数据一致性实现 = 缓存锁(MESI …) + 总线锁读取缓存以cache line为基本单位,目前64bytes位于同一缓存行的两个不同数据,被两个不同CPU锁定,产生互相影响的伪共享问题伪共享问题:JUC/c_028_FalseSharing使用缓存行的对齐能够提高效率。

2022-10-20 21:42:47 127

原创 JVM调优第二节

动态语言支持java.lang.invoke.MethodHandle解析的结果为REF_getstatic REF_putstatic REF_invokestatic的方法句柄时,该类必须初始化;overwrite findClass() -> defineClass(byte[] -> Class clazz)(重写模板方法findClass,调用defineClass)父加载器不是“类加载器的加载器”,也不是“类加载器的父类加载器”加密(自定义加载器加载自加密的class,防止反编译,防止篡改)

2022-10-19 20:37:39 85

原创 JVM调优第一节

3.应用程序、JVM、操作系统之间的关系JVM运行起来以后会向操作系统申请内存空间,申请到一块适合的区域程序运行找JVM,之后JVM会把申请好的空间分配给程序一句话概括 JVM 与操作系统之间的关系:JVM 上承开发语言,下接操作系统,它的中间接口就是字节码。4.== JVM、JRE、JDK 的关系==JVM 是 Java 程序能够运行的核心。但是需要注意,JVM 自己什么也干不了,你需要给它提供生产原料(.class 文件) 。仅仅是 JVM,是无法完成一次编译,处处运行的。它需要一个基本的类

2022-10-18 21:50:53 421

原创 多线程与高并发实战第十四节

主页:http://lmax-exchange.github.io/disruptor/源码:https://github.com/LMAX-Exchange/disruptor。

2022-10-17 21:02:59 125

原创 多线程与高并发实战第十三节

第一个我们讲了一个Executor这个接口,大家回顾一下这个接口是干什么使的,把线程的定义和执行分开,主要来做线程的执行接口。在这他下面有一个整个的这个线程池的生命周期,它里面的方法都给他定义全的接口ExecutorService,他下面还有AbstractExecutor这个没有和大家说,这个无所谓了,是为了哪些个子类做准备的。然后才是各种各样的ThreadPoolExecutor,把线程池作为一个执行的单元,给他单独出来的这么一个类,然后他的七个参数是需要大家背过的1:corePoolSoze核心线程数

2022-10-13 20:45:47 190

原创 多线程与高并发实战第十二节

两个线程,第一个线程是从1到26,第二个线程是从A到一直到Z,然后要让这两个线程做到同时运行,交替输出,顺序打印。那么这道题目的解法有非常多。用LockSupport其实是最简单的。你让一个线程输出完了之后停止,然后让另外一个线程继续运行就完了。我们定义了两个数组,两个线程,第一个线程拿出数组里面的每一个数字来,然后打印,打印完叫醒t2,然后让自己阻塞。另外一个线程上来之后自己先park,打印完叫醒线程t1。两个线程就这么交替来交替去,就搞定了。当时出这道题的时候是想考察wait、notify和noti

2022-10-12 21:01:16 116

原创 多线程与高并发实战第十一节

并发容器容器这章是面试特别爱问,这个面试属于是高频中的高频,为什么他特别爱问,因为他牵扯的东西太多了,拿大腿想一下也知道容器肯定是往里面装东西的肯定牵扯到数据结构,数据结构肯定要牵扯到算法,还有一点就是容器本身的一个组织结构也是大家比较爱考的,再一点他又牵扯到高并发,这就是面试的一个重灾区。容器这章得用好多个维度来讲他才能理解的比较透彻,今天,主要还是从线程池使用的角度,为了和后面的线程池做准备。这个容器通过接口来说分为两大类,我们先从大体的结构上来认识他。第一大类Collection叫集合。集合的意思

2022-10-11 21:24:34 613

原创 多线程与高并发实战第十节

今天咱们继续讲AQS的源码,在上节课我教大家怎么阅读AQS源码,跑不起来的不读、解决问题就好 — 目的性、一条线索到底、无关细节略过,读源码的时候应该先读骨架,比如拿AQS来说,你需要了解AQS是这么一个数据 结构,你读源码的时候读起来就会好很多,在这里需要插一句,从第一章到本章,章章的内容都是环环相扣的,没学习前边,建议先去补习一下前面的章节。通过ReentrantLock来解读AQS源码AQS大家还记得吗?最核心的是它的一个共享的int类型值叫做state,这个state用来干什么,其实主要是看他的子类

2022-10-10 21:55:19 86

原创 多线程与高并发实战第九节

首先我们简单回顾一下前面三节课讲的内容,分别有线程的基本概念、synchronized、volatile、AtomicXXX、各种JUC同步框架(ReentrantLock、CountDownLatch、CyclicBarrier、Phaser、ReadWriteLock-StampedLock、Semaphore、Exchanger、LockSupport),其中synchornized重点讲了一下,包括有synchornized的底层实现原理、锁升级的概念(四种状态:无锁、偏向锁、轻量级锁、重量级锁),

2022-10-09 22:18:30 281

原创 多线程与高并发实战第八节

像原来我们写m++你得加锁,在多线程访问的情况下,那现在我们可以用AtomicInteger了,它内部就已经帮我们实现了原子操作,直接写 count.incrementAndGet(); //count1++ 这个就相当于count++。原来我们对count是需要加锁的,现在就不需要加锁了。我们看下面小程序,模拟,我们计一个数,所有的线程都要共同访问这个数count值,大家知道如果所有线程都要访问这个数的时候,如果每个线程给它往上加了10000,你这个时候是需要加锁的,不加锁会出问题。但是,你把它改成At

2022-10-08 21:36:22 235

原创 多线程与高并发实战第七节

我们先来看这个volatile的概念,volatile它是什么意思,现在像大的互联网企业的面试,基本上volatile是必会的,有时候他也不会太问,认为你应该会,但是中小企业也就开始问这方面的问题。我们来看一下这个小程序,写了一个方法啊,首先定义了一个变量布尔类型等于true,这里模拟的是一个服务器的操作,我的值为true你就给我不间断的运行,什么时候为false你再停止。测试new Thread启动一个线程,调用m方法,睡了一秒,最后running等于false,运行方法他是不会停止的。

2022-09-28 21:41:04 89

原创 多线程与高并发实战第六节

多线程与高并发大概讲六大块,我们先从线程的基本概念开始,给大家复习一下,不知道有多少同学是基础不太好,说什么是线程都不知道的,如果这样的话,花时间去补初级内容的课。什么是叫一个进程?什么叫一个线程?**进程:**做一个简单的解释,你的硬盘上有一个简单的程序,这个程序叫QQ.exe,这是一个程序,这个程序是一个静态的概念,它被扔在硬盘上也没人理他,但是当你双击它,弹出一个界面输入账号密码登录进去了,OK,这个时候叫做一个进程。进程相对于程序来说它是一个动态的概念。

2022-09-26 21:19:12 87

原创 算法数据结构体系学习 第十六节

2)生成一个源点到各个点的最小距离表,一开始只有一条记录,即原点到自己的最小距离为0,源点到其他所有点的最小距离都为正无穷大。3)从距离表中拿出没拿过记录里的最小记录,通过这个点发出的边,更新源点到各个点的最小距离表,不断重复这一步。2)把所有入度为0的点在图中删掉,继续找入度为0的点输出,周而复始。5)如果不会,要当前边,将该边的指向点加入到被选取的点中,重复2)4)如果会,不要当前边,继续考察剩下解锁的边中最小的边,重复3)2)某个点加入到被选取的点中后,解锁这个点出发的所有新的边。

2022-09-24 22:36:37 80

原创 多线程与高并发实战第五节

JDK早期,synchronized 叫做重量级锁, 因为申请锁资源必须通过kernel, 系统调用。

2022-09-21 21:19:40 131

原创 多线程与高并发实战第四节

注意序列化并非其他程序一直没机会执行,而是有可能会被调度,但是抢不到锁,又回到Blocked或者Waiting状态(sync锁升级)重量级锁(经过操作系统的调度)synchronized早期都是这种锁(目前的实现中升级到最后也是这种锁)数据的不一致(unconsistency),并发访问之下产生的不期望出现的结果。如果临界区执行时间长,语句多,叫做 锁的粒度比较粗,反之,就是锁的粒度比较细。轻量级锁(CAS的实现,不经过OS调度)(无锁 - 自旋锁 - 乐观锁)我们平时所说的"上锁",一般指的是悲观锁。

2022-09-19 21:12:25 252

原创 算法数据结构体系学习 第十五节

给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。上、下、左、右相邻的1认为是一片岛,返回矩阵中 省份 的数量。

2022-09-18 10:46:27 126

原创 多线程与高并发实战第三节

程序是什么?进程是什么?–> 程序启动 进入内存 资源分配的基本单位线程是什么?–> 程序执行的基本单位程序如何开始运行?–> CPU 读指令 - PC(存储指令地址) ,读数据 Register ,计算, 回写, -> 下一条线程如何进行调度?–> linux 线程调度器(OS)操作系统线程切换的概念是什么?–> Context Switch CPU保存现场 执行新线程,恢复现场,继续执行原线程这样的一个过程。

2022-09-16 22:23:02 328

原创 多线程与高并发实战第二节

sleep()方法在睡眠的时候,不到时间是没有办法叫醒的,这个时候可以用interrupt设置标志位,然后呢必须得catch InterruptedException来进行处理,决定继续睡或者是别的逻辑,(自动进行中断标志复位)如果想打断正在竞争锁的线程,使用ReentrantLock的lockInterruptibly()interrupt()不能打断正在竞争锁的线程synchronized()interrupt是否能中断正在竞争锁的线程。

2022-09-15 21:42:41 82

原创 多线程与高并发实战第一节

之前的硬件,只有一个CPU之前的OS,只运行一个进程随着多核CPU的出现,人们开始追求对CPU效率的极致压榨多线程的程序随之诞生,但随之诞生的,也是非常难以应对的各种并发bug。

2022-09-14 22:03:58 103

原创 算法数据结构体系学习 第十四节

一共花费110铜板。但如果先把长度60的金条分成30和30,花费60;例如,给定数组{10,20,30},代表一共三个人,整块金条长度为60,金条要分成10,20,30三个部分。4)把x和y各自所在集合的所有点合并成一个集合,只需要小集合的代表点挂在大集合的代表点的下方即可。比如长度为20的金条,不管怎么切,都要花费20个铜板。说明: 每做完一个项目,马上获得的收益,可以支持你去做下一个项目。你来安排宣讲的日程,要求会议室进行的宣讲的场次最多。一块金条切成两半,是需要花费和长度数值一样的铜板的。

2022-09-11 22:58:47 68

原创 算法数据结构体系学习 第十三节

整个公司的人员结构可以看作是一棵标准的、 没有环的多叉树。除老板之外的每个员工都有唯一的直接上级。叶节点是没有任何下属的基层员工(subordinates列表为空),除基层员工外,每个员工都有一个或多个直接下级。3,对于能举出反例的策略直接跳过,不能举出反例的策略要证明有效性。2)用一种局部最功利的标准,总是做出在当前看来是最好的选择。给定一棵多叉树的头节点boss,请返回派对的最大快乐值。1,实现一个不依靠贪心策略的解法X,可以用最暴力的尝试。2.派对的整体快乐值是所有到场员工快乐值的累加。

2022-09-03 20:59:37 93

空空如也

空空如也

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

TA关注的人

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