自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 资源 (2)
  • 收藏
  • 关注

原创 go mod的介绍以及其存在的优势

go path介绍最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面。这就导致了同一个库只能保存一个版本的代码。如果不同的项目依赖同一个第三方的库的不同版本代码开发必须在go path src目录下,不然,就有问题。依赖手动管理依赖包没有版本可言go mod介绍Go.mod是Golang1.11版本新引入的官方包管理工具用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。Go.mod其实就是一个Modules,关于Modules的官方定义为:Modules是相关

2021-04-08 00:32:50 2580

原创 rocketMq和kafka如何选

为什么在RocketMQ和kafka中选型在单机同步发送的场景下,Kafka>RocketMQ,Kafka的吞吐量高达17.3w/s,RocketMQ吞吐量在11.6w/s。kafka高性能原因生产者Kafka会把收到的消息都写入到硬盘中,它绝对不会丢失数据。为了优化写入速度Kafak采用了两个技术,顺序写入和MMFile。顺序写入因为硬盘是机械结构,每次读写都会寻址->写入,其中寻址是一个“机械动作”,它是最耗时的。所以硬盘最“讨厌”随机I/O,最喜欢顺序I/O。为了提高读写硬

2021-01-21 09:49:17 1036 1

原创 计算机网络网络层笔记

路由算法与路由协议概述路由算法的分类分层次的路由选择协议采用的原因:Ip数据报格式Ip数据报的分片最大传送单元MTU:链路层数据帧可封装数据的上限,以太网的MTU是1500字节IPv4地址ARP协议三种路由协议比较...

2020-12-03 15:08:46 209

原创 线程/进程同步的方式

互斥量: 采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。信号量: 它允许同一时刻多个线程来访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。事件(信号):通过通知操作的方式来保持多线程同步,还可以方便实现多线程优先级的比较作。临界区:临界区对象和互斥对象非常相似,只是互斥量允许在进程间使用,而临界区只限制与同一进程的各个线程之间使用,但是更节省资源,更有效率。...

2020-10-26 15:19:49 228

原创 同步和互斥的区别

互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。...

2020-10-26 15:14:06 2934

原创 进程的调度算法

先来先服务调度算法:先来先服务调度算法是一种最简单的调度算法,也称为先进先出或严格排队方案。当每个进程就绪后,它加入就绪队列。当前正运行的进程停止执行,选择在就绪队列中存在时间最长的进程运行。该算法既可以用于作业调度,也可以用于进程调度。先来先去服务比较适合于常作业(进程),而不利于段作业(进程)。时间片轮转调度算法:时间片轮转调度算法主要适用于分时系统。在这种算法中,系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中第一个进程执行,即先来先服务的原则,但仅能运行一个时间.

2020-10-26 10:28:09 433

原创 进程间的通信方式

每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。进程间通信(IPC)介绍进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和

2020-10-26 10:19:06 128

原创 操作系统

什么是死锁所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。死锁产生的4个必要条件互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。循环等待条件:在发生死锁时,必然存在一个进程–资源的环形链。以上这四个条件是死锁的必要条件,只要系统发生

2020-10-25 11:20:05 95

原创 SQL中in与exist的区别

existexists对外表用loop逐条查询,每次查询都会查看exists的条件语句,当 exists里的条件语句能够返回记录行时(无论记录行是的多少,只要能返回),条件就为真,返回当前loop到的这条记录,反之如果exists里的条 件语句不能返回记录行,则当前loop到的这条记录被丢弃,exists的条件就像一个bool条件,当能返回结果集则为true,不能返回结果集则为 falseinin查询相当于多个or条件的叠加,这个比较好理解,比如下面的查询select * from user whe

2020-09-19 21:10:10 2433

原创 谈一谈对synchronized的理解

Java对象的构成在 JVM 中,对象在内存中分为三块区域:对象头Mark Word(标记字段):默认存储对象的HashCode,分代年龄和锁标志位信息。它会根据对象的状态复用自己的存储空间,也就是说在运行期间Mark Word里存储的数据会随着锁标志位的变化而变化。Klass Point(类型指针):对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。实例数据这部分主要是存放类的数据信息,父类的信息。对其填充由于虚拟机要求对象起始地址必须是8字节的整数倍,

2020-08-25 10:45:11 482

原创 HashTable与ConcurrentHashMap

前言HashMap在多线程环境下存在线程安全问题,主要体现:在jdk1.7中,在多线程环境下,扩容时会造成环形链或数据丢失。#2.在jdk1.8中,在多线程环境下,会发生数据覆盖的情况。因此,一般在多线程的场景,会使用一下几种不同的方式去代替:使用Collections.synchronizedMap(Map)创建线程安全的map集合;HashtableConcurrentHashMap不过出于线程并发度的原因,一般会舍弃前两者使用最后的ConcurrentHashMap,他的性能和

2020-08-22 16:49:11 148

原创 HashMap源码解析

前言HashMap是我们开发中经常是使用的一种数据结构,在jdk1.7之前使用的是数组加链表组成的数据结构,在1.8之后,为了避免大量hash冲突后,大量key-value对保存在同一个链表上而导致查询效率过低,引入了红黑树,当单个链表长度过长(大于TREEIFY_THRESHOLD = 8时),将链表转换成红黑树,以提高查询效率。下面具体介绍HashMap的具体实现,包括put,get,resize方法解析。HashMap存储的数据结构HashMap中维护着一个Node数组,数组里面每个地方都存了K

2020-08-21 15:13:13 96

原创 谈一谈对ThreadLocal的理解

什么是ThreadLocal?ThreadLocal提供一个线程的局部变量,访问某个线程拥有自己局部变量。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。ThreadLocal的作用ThreadLocal的作用主要是做数据隔离,填充的数据只属于当前线程,变量的数据对别的线程而言是相对隔离的,在多线程环境下,可以防止自己的变量被其它线程篡改。ThreadLocal的使用场景

2020-07-30 16:47:05 502

原创 一致性hash和普通hash区别?

普通hash定义Hash函数:一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。碰撞(冲突):如果两个关键字通过hash函数得到的值是一样的,就是碰撞或冲突。Hash表(散列表):根据散列函数和冲突处理将一组关键字分配在连续的地址空间内,并以散列值记录在表中的存储位置,这种表成为散列表。常用算法直接寻址法:即取关键字或关键字的线性函数为散列地址:H(key)=key或H(key)=a*key+b;数字分析

2020-07-29 15:31:22 4221

原创 计算机网络

对五层网络协议的理解?每一层的作用是什么?每一层的数据单元是什么?五层体系结构包括:应用层、运输层、网络层、数据链路层和物理层。五层协议只是OSI和TCP/IP的综合,实际应用还是TCP/IP的四层结构。为了方便可以把下两层称为网络接口层。三种模型结构:1、物理层:比特主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做

2020-07-03 18:00:37 418

原创 Mysql常见的几种log

什么是binlogbinlog记录了数据库表结构和表数据变更,比如update/delete/insert/truncate/create。它不会记录select(因为这没有对表没有进行变更)主要有两个作用: 复制和恢复数据MySQL在公司使用的时候往往都是一主多从结构的,从服务器需要与主服务器的数据保持一致,这就是通过binlog来实现的数据库的数据被干掉了,我们可以通过binlog来对数据进行恢复。因为binlog记录了数据库表的变更,所以我们可以用binlog进行复制(主从复制)和恢复数

2020-06-24 17:42:38 3826

原创 Mysql复习

数据库的三范式第一范式1NF:数据库表中的字段都是单一属性的,不可再分第二范式2NF:数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖,即符合第二范式第三范式3NF:在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合3NFchar 和 varchar 的区别定长和变长char 表示定长,长度固定,varchar表示变长,即长度可变。char如果插入的长度小于定义长度时,则用空格填充;varchar小于定义长度时,还是按实际长度存储,插入多长就存多长。

2020-06-11 14:38:52 594

原创 Mybatis复习

Mybatis 中 #{}和 ${}的区别#方式能够很大程度防止sql注入(使用占位符,最终的参数会有单引号)。#{}:动态解析 -> 预编译 -> 执行$方式无法防止Sql注入(直接解析了,没有单引号,这样的话可以直接写SQL呀,比如select * from ${tableName},当tableName的值为:‘user;delete from user’,这样最终解析的SQL为:select * from user;delete from user,这个就会有SQL注入的问题

2020-06-10 14:36:26 162

原创 Spring复习

AOP 的基本概念Aop(aspect oriented programming面向切面编程),是spring框架的另一个特征。AOP包括切面、连接点、通知(advice)、切入点(pointCut) 。

2020-06-08 19:59:07 130

原创 redis常见面试题

1.什么是redisredis是基于内存的key-value型的NoSQL数据库,由C语言编写,它以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。以设置和获取一个256字节字符串为例,它的读取速度可高达110000次/s,写速度高达81000次/s。支持多种数据结构,单个value的最大限制是1GB。2.Redis的数据类型Redis支持五种数据类型:String,hash,list,set,zsetsorted(有序集合)高级数据结构:HyperLogLog,Geo,Pub/

2020-05-30 16:35:33 218

原创 跳表Skiplist

跳跃表(skiplist)是一种随机化的数据结构,是一种可以与平衡树媲美的层次化链表结构——查找、删除、添加等时间复杂度都是O(log n),许多知名的开源软件中的数据结构均采用了跳表这种数据结构,如Redis中的有序集合zset。skiplist 它不要求上下相邻两层链表之间的节点个数有严格的对应关系,而是 为每个节点随机出一个层数(level)。比如,一个节点随机出的层数是 3,那么就把它链入到第 1 层到第 3 层这三层链表中。为了表达清楚,下图展示了如何通过一步步的插入操作从而形成一个 skipl

2020-05-24 14:32:50 178

原创 Collections.同步方法和copyonwriteArrayList

List实现线程安全,在java中我找到自带有两种方法,一种是通过Collections.synchronizedList()方法,另一种是copyonwriteArrayList代替ArrayList;Collections方法的实现从Collections源码中,我们可以看出,Collections.synchronizedList实现线程安全的方法是使用synchronized实现,public void add(int index, E element) { synch

2020-05-21 17:59:05 326

原创 ArrayList扩容与缩容机制

ArrayList集合类是我们面试中经常被问到的一个问题,类似的有ArrayList与LinkedList的区别之类的,而ArrayList与LinkedList的主要区别在于其数据结构的不同,ArrayList的底层是数据类型,而LinkedList是链表类型,从而导致了ArrayList更适用于多查询操作,而LinkedList适用于多删除插入操作;本章主要讲解的是ArrayList的扩容和缩容操作。ArrayList扩容首先,先看看ArrayList的初始化,源码如下:public ArrayL

2020-05-21 15:18:58 2341 5

原创 Mysql存储引擎——MyIASM和Innodb的区别

InnoDB和MyISAM的最大不同点有两点:一是支持事务(TRANSACTION);二是采用了行级锁MyIASM是MySQL5.1以前默认的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。不过和Innodb不同,MyIASM中存储了表的行数,于是SELECT COUNT(*) FROM ...

2020-05-07 22:25:42 214

原创 二分查找和二叉树查找的区别

关于二分查找和二叉树的理解:(1)二分查找即折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难(2)二叉查找树,它或者是一棵空树,或者若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。两者明显的区别是二分查找速度快删除和插入困难,二对于建...

2020-05-06 14:12:13 5489 2

原创 Mysql主键索引与非主键索引区别

什么是索引MySql官方索引的定义:索引(Index)是帮助MySql高效获取数据的数据结构,索引的目的在于提高查询效率,类比字典;实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,索引列也是要占用空间。主键索引和普通索引的区别1.主键索引索引着数据,然而普通索引索引着主键ID值(这是在innodb中,但是如果是myisam中,主键索引和普通索引是没有区别的都是直接索...

2020-05-05 01:18:05 4728 3

原创 分布式事务解决方案之可靠消息最终一致性

什么是可靠消息最终一致性事务可靠消息最终一致性方案是指当事务发起方执行完成本地事务后并发出一条消息,事务参与方(消息消费者)一定能够接收消息并处理事务成功,此方案强调的是只要消息发给事务参与方最终事务要达到一致。此方案是利用消息中间件完成,如下图:事务发起方(消息生产方)将消息发给消息中间件,事务参与方从消息中间件接收消息,事务发起方和消息中间件之间,事务参与方(消息消费方)和消息中间件...

2020-04-25 11:58:06 328

原创 文件系统操作与磁盘管理

查看磁盘和目录的容量使用 df 命令查看磁盘的容量“1k-块”,它表示以磁盘块大小的方式显示容量,后面为相应的以块大小表示的已用和可用容量使用 du 命令查看目录的容量# 默认同样以 块 的大小展示$ du # 加上`-h`参数,以更易读的方式展示$ du -h-d参数指定查看目录的深度# 只查看1级目录的信息$ du -h -d 0 ~# 查看2级$ du -h -d...

2020-04-24 01:42:45 106

原创 分布式事务解决方案之2PC(两阶段提交)

概述学习了分布式事务的基础理论,以理论为基础,针对不同的分布式场景业界常见的解决方案有2PC、TCC、可靠消息最终一致性、最大努力通知这几种。什么是2PC2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2是指两个阶段,P是指准备阶段,C是指提交阶段。举例:张三和李四好久不见,老友约起聚餐,饭店老板要求先买单...

2020-04-22 16:36:34 858

原创 分布式事务

什么是分布式事务分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这中分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务什么是事务事务由一组操作构成,我们希望这组操作能够全部正确执行,如果这一组操作中的任意一个步骤发生错误,那么就需要回滚之前已经完成的操作。也就是同一个事务中的所有操作,要么全都正确执行,要么全都不要执...

2020-04-18 16:27:59 169

原创 redisson源码解析

概述上一篇讲到分布式锁的实现方式主要有zookeeper,redis,mysql三种方式,而redis使用最为广泛,但手工利用redis去实现存现许多需要考虑的问题,如死锁,误删,可重入等问题,手工实现不仅繁琐,并且可能会遗漏,因此,我们可以利用redisson为我们封装好的分布式锁,它的使用方法与lock基本一致。什么是redissonRedisson是一个在Redis的基础上实现的Jav...

2020-04-17 17:59:13 2052

原创 Linux文件打包与解压缩

一、概念在 Windows 上最常见的不外乎这两种 .zip,.7z 后缀的压缩文件。而在 Linux 上面常见的格式除了以上两种外,还有 .rar,.gz,.xz,.bz2,.tar,.tar.gz,.tar.xz,*.tar.bz2使用 zip 打包文件夹:$ zip -r -q -o shiyanlou.zip /home/shiyanlou/Desktop$ du -h shiya...

2020-04-16 23:21:46 165

原创 redis缓存的击穿、穿透、雪崩

缓存击穿缓存在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。解决方法:利用redis增加一个分布式锁,当有多个请求访问时,只允许一个线程可以访问数据库,其他线程等待。缓存穿透查询一个不存在于缓存和数据库的数据,导致永远不会加载缓存,会反复查询数据库,造成io压...

2020-04-16 12:13:24 123

原创 分布式锁

什么是分布式锁要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。线程锁:主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如synchronized是共享对象头,显示锁Lock是共享某个变量(state)。进程锁:为了控制同一操作系统中多个进程访问某...

2020-04-16 11:33:05 81

原创 设计模式——代理模式

代理模式基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问,即通过代理对象访问目标对象,这样做的好处:可以在目标实现的基础上,增强额外的功能操作,即扩展目标对象的功能被代理的对象可以是远程对象、创建开销大的对象或者需要安全控制的对象代理模式主要有三种:静态代理,动态代理【JDK代理(接口代理)和Cglib代理(可以在内存动态的创建对象,而不需要实现接口)静态代理静态代...

2020-04-14 09:25:32 67

原创 设计模式——适配器模式

基本介绍适配器模式(Adaper Pattern)将某个类的接口转化成客户端期望的另一个接口表示,主要的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。适配器模式属于结构型模式主要分为三类:类适配器模式、对象适配器模式、接口适配器模式工作原理适配器模式:将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容从用户的角度看不到被适配者,是解耦的用户调用适配...

2020-04-13 15:14:10 95

原创 设计模式——策略模式

基本介绍策略模式中,定义算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户;算法体现了几个设计原则把变化的代码从不变的代码中分离出来;针对接口编程而不是具体类(定义了策略接口)多用组合/聚合,少用继承(客户通过组合方式使用策略)类图说明:从上图可以看到,context有成员变量strategy或者其他的策略接口,需要使用到哪个策略,可以在构造器...

2020-04-13 10:29:59 103

原创 设计模式——观察者模式

定义定义对象见的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并且自动更新。使用场景一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两个方面封装在独立 的对象中使它们可以各自独立地改变和复用。一个对象的改变将导致一个或多个其他对象也发生改变,而并不知道具体有多少对象将发生改变,也不知道这些对象是谁。需要在系统中创建一个触发链,A对象的行为将影响...

2020-04-12 18:29:29 97

原创 设计模式——工厂模式

概述工厂设计模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到灵活性的目的。工厂模式一共三类简单工厂模式工厂方法模式抽象工厂模式简单工厂模式把创建Pizza对象封装到一个类中,这样我们有新的Pizza...

2020-04-12 17:12:52 109

原创 设计模式七大原则

单一职责原理:基本介绍:对类来说的,一个类只负责一项职责注意事项和细节: 1、降低类的复杂度,一个类只负责一项原则 2、提高了类的可读性,可维护性 3、降低更换引起的风险 4、只有逻辑足够简单,才可以在代码上违反单一职责原则;只有类中的方法足够少,可以在方法级别保持单一职责原则接口隔离原则基本介绍:客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在...

2020-04-12 13:41:24 98

mysql优化分析+主从复制+分表分库

从mysql索引分析开始,介绍如何建立索引,什么情况需要建立索引,以及查询截取分析,mysql 的锁机制,主从复制,分表分库等mysql高级部分知识结构

2020-03-12

org.springframework.transaction-3.1.2.RELEASE.zip

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.interceptor.TransactionInterceptor#0': Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'transactionManagerBeanName' of bean class [org.springframework.transaction.interceptor.TransactionInterceptor]: Bean property 'transactionManagerBeanName' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?

2019-05-24

空空如也

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

TA关注的人

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