自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

weixin_44331516的博客

。。。。。。

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

原创 Mybatis原理

加载mybatis全局配置文件(数据源、mapper映射文件等),解析配置文件,MyBatis基于XML配置文件生成Configuration,和一个MappedStatement(包括了参数映射配置、动态SQL语句、结果映射配置),其对应着<select | update | delete | insert>标签项。 SqlSessionFactoryBuilder通过Configuration对象生成SqlSessionFactory,用来开启SqlSession。 SqlSessi..

2021-10-10 18:45:00 80

原创 MySQL知识点

MySQL 是一种关系型数据库一、事务相关1.1什么是事务?事务是逻辑上的一组操作,要么都执行,要么都不执行。事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。1.2事物的...

2021-10-02 15:27:07 98

原创 线程安全与锁优化

1、java的线程安全按照“安全程度”由强至弱排序,将 Java 语言中各个操作共享的数据分为以下 5 类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。2、线程安全的实现方法2.1互斥同步同步是指在多个线程并发访问共享数据时,保证共享数据在同一个时刻只被一个或一些线程使用。而互斥是实现同步的一种手段,临界区(Critical Section)、互斥量(Mutex)和信号量(Semaphore)都是主要的互斥实现方式。因此,在互斥和同步里:互斥是因...

2021-09-17 14:21:50 95

原创 Java内存模型与线程

1、Java内存模型1.1主内存与工作内存Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存进内存和取出的底层细节。这里的变量(Variables)与Java变量有所区别,包括了实例字段、静态字段、构成数组对象的元素,不包括局部变量与方法参数,因为后者是线程私有的,不会共享。 Java内存模型规定了所有变量都存储在主内存(Main Memory)中,每条线程还有自己的工作内存。线程的工作内存中保存了被该线程使用到的变量主内存副本,线程对...

2021-09-17 11:34:32 73

原创 虚拟机类加载机制

1、加载加载阶段,虚拟机需要完成以下3件事情:通过一个类的全限定名来获取定义此类的二进制字节流 将这个字节流代表的静态存储结构转化成方法区的运行时数据结构 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口2、验证这一阶段的主要目的是为了确保Class文件的字节流包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。2.1 文件格式验证验证魔数、版本号、常量池类型、指向常量的索引、utf...

2021-09-16 17:00:13 52

原创 Java垃圾收集器与内存分配策略

1、垃圾收集算法1.1 分代收集现代的虚拟机大都采用了这种gc回收算法,通过将内存根据存活时间的不同划分为不同代,来选择最合适的对象回收算法。部分收集(Partial GC):指目标不是完整收集整个Java堆的垃圾收集,分为: 新生代收集(Minor GC/Young GC):指目标只是新生代的垃圾收集。老年代收集(Major GC/Old GC):指目标只是老年代的垃圾收集。混合收集(Mixed GC):指目标是收集整个新...

2021-09-16 16:20:36 64

原创 Java内存区域

1、程序计数器程序计数器也叫PC计数器,用于记录程序当前所运行到的指令行。在多线程中,CPU会对就绪状态的线程进行随机调度,此时就需要程序计数器来记录不同线程所执行到的位置。程序计数器是唯一不会发生OOM(OutOfMemory)的地方。2、Java虚拟机栈虚拟机栈主要是用于普通方法。每个方法在执行的时候都会创建一个栈帧,其包含了局部变量表、操作数栈、动态链接、返回出口。局部变量表存放了编译期可知的各种Java虚拟机基本数据类型(boolean、byte、...

2021-09-16 14:37:38 55

原创 Redis设计与实现总结--独立功能的实现

1、发布与订阅Redis的发布订阅功能由PUBLISH、SUBCRIBE、PSUBCRIBE等命令组成。通过执行SUBSCRIBE命令,客户端可以订阅一个或多个频道,从而成为这些频道的订阅者(subscriber):每当有其他客户端向被订阅的频道发送消息(message)时,频道的所有订阅者都会收到这条消息。1.1 频道的订阅与退订Redis将所有频道的订阅关系都保存在服务器状态的pubsub_channels字典里面,这个字典的键是某个被订阅的频道,而键的值则是...

2021-09-14 16:54:19 84

原创 Redis设计与实现总结--多机数据库的实现

1、复制1.1 旧版复制功能的实现Redis复制功能分为 同步(sync)和命令传播(command propagate)两个操作;同步(sync):将slave数据库状态更新至master所处的数据状态;(全量操作) 命令传播(command propagate):当master执行写命令,导致主从数据不一致时。将写命令传播到slave,从而达到一致状态;1.1.1 同步当slave接受到salveof命令,从服务首先同步操作,即像master发送SYN...

2021-09-10 11:26:17 67

原创 Redis设计与实现总结--单机数据库的实现

1、数据库1.1 服务器中的数据库Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每一项都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库。struct redisServer{ // ... // 一个数组,保存着服务器中的所有数据库 redisDb *db; // 服务器的数据库数量,默认是16 int dbnum; // ...}1.2

2021-03-26 09:47:27 243

原创 Redis设计与实现总结--数据结构与对象

1、简单动态字符串Redis没有使用C语言传统的字符串表示,而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型,并将SDS作为Redis的默认字符串表示。一些无需对字符串值进行修改的地方(比如打印日志)使用C字符串作为字符串字面量;对于需要修改字符串值时,就会使用SDS来表示字符串值。redis> SET msg "hello word"OK如果客户端执行这样的命令,Redis将在数据库中创建一个新的键值对,其中:键值对的键是一个

2021-03-20 17:14:50 163

原创 Redis原理解析

一、简介Redis 与 其他 key - value 缓存产品有以下三个特点:Redis 支持数据持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis 不仅仅支持简单的 key - value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储 Redis 支持数据的备份,即 master - slave 模式的数据备份二、优势性能极高: Redis 读的速度是 110000 次 /s, 写的速度是 81000 次 /s 。...

2021-03-16 11:55:26 179

原创 springboot使用redistemplate操作redis

一、Redis数据类型1、String字符串  String是Redis最基本的类型,一个key对应一个value。String类型是二进制安全的,即Redis的string可以包含任何数据,比如jpg图片或者序列化的对象 。一个键最大能存储512MB。2、列表  列表是简单的字符串列表(使用链表实现的),排序为插入的顺序。列表的最大长度为2^32-1。用列表可以实现生产者消费者模式,生产者调用lpush添加项到列表中,消费者调用rpop从列表中提取,如果没有元素,则轮询去获取,或者使用brpop等

2020-07-20 17:38:26 102

原创 MQ四个问题

为什么要使用MQ?异步、解耦、削峰填谷使用了MQ之后有什么优缺点?缺点:系统可用性降低、系统复杂度提高、数据一致性问题怎么保证MQ消息不丢失?生产者数据丢失:  1、事务方式:通过channel.txSelect开启一个事务,接着发送消息,如果消息没有成功被RabbitMQ接收到,生产者会收到异常,此时就可以进行事务回滚channel.txRollback然后重新发送。假如Rabbit...

2019-12-10 18:27:50 111

原创 Rabbit MQ和SpringBoot整合

项目整体架构如下:1、首先在pom.xml文件中引入jar包<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency>2、添加配置文...

2019-09-10 15:47:33 75

原创 Rabbit MQ的六种队列

MQ是一个互联网架构中常见的解耦利器。AMQP是消息队列的一个协议。Rabbit MQ的六种队列:简单队列、Work模式、Work模式的“能者多劳”、订阅模式、路由模式、主题模式1、简单队列P:消息的生产者C:消息的消费者红色:队列生产者将消息发送到队列,消费者从队列中获取消息。(一个生产者一个消费者,如测试代码所示)2、Work模式一个生产者、2个消费者。一个消息只能被一...

2019-09-09 15:51:57 222

转载 MySQL锁

MySQL不同的存储引擎支持不同的锁机制:行锁表锁页锁MyISAMokBDBokokInnoDBokok特点:  表锁:开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低  行锁:开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高  页锁:开销和加锁速度介于表锁和行锁之间;会出现死锁;锁定粒度...

2019-07-29 15:11:35 68

原创 rabbitmq安装

1、下载地址https://www.rabbitmq.com/install-standalone-mac.html2、解压至某个文件夹下3、切换至文件夹下面4、启动rabbitMQcd sbin/./rabbitmq-server restart5、rabbitMQ有个默认的用户guest,密码也是guest。guest这个默认的用户只能通过http://localhost:156...

2019-07-15 14:37:22 93

原创 A-寻找两个有序数组的中位数

题目:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。 public static double findMedianSortedArrays(int[] nums1, int[] nums2) { int res...

2019-07-05 18:10:05 58

原创 A-无重复字符的最长子串

题目:给定一个字符串,请你找出其中不含有重复字符的最长子串 的长度。方法一:暴力法逐个检查所有的子字符串,看它是否不含有重复的字符。public int lengthOfLongestSubstring(String s) { int result = 0; if (s == null || "".equals(s)) return result; int n = s.le...

2019-07-05 10:58:15 86

转载 A-两数相加

题目:给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路:使用变量记录进位/** * Definition for singly-linked li...

2019-07-01 15:19:28 99

原创 A-两数之和

题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。方法一:遍历每个元素x,查找是否存在一个值与 target -x 相等。 public int[] twoSum(int[] nums, int target) { if (nums.length <2 || target < 0) t...

2019-06-14 15:32:19 71

原创 java 8

1、Lambda 表达式Lambda 表达式主要用来定义行内执行的方法类型接口,且免去了使用匿名方法的麻烦。public class Test { public static void main(String args[]){ Test tester = new Test(); // 类型声明 MathOperation additio...

2019-06-12 19:04:45 75

原创 MySQL面试题

1、四个特性及含义四个基本要素(acid):原子性、一致性、隔离性、持久性原子性(Actomicity):整个事务中的操作要么全完成,要么全部不完成,不能滞留在中间某个环节,事务在执行过程发生错误,会被回滚(Rollback)到事务开始前的状态,就像没执行过一样一致性(Consistent):在事务开始和结束之后,数据库的完整性约束没有被破坏隔离性(Isolation):使事务在给定的时间...

2019-04-29 19:19:24 122

原创 Redis面试题

1、什么是Redis?答:Redis全称为:Remote Dictionary Server(远程数据服务),是一个基于内存的高性能key-value数据库。2、Redis的数据类型?答:Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。3、使用Redis有哪些好处?(1) 速度快,因为数据...

2019-04-29 16:38:49 240

原创 A-二叉树的遍历(递归法)

public class TreeNode{ public int value; public TreeNode leftNode; public TreeNode rightNode; public TreeNode(int value) { this.value = value; ...

2019-04-22 14:16:28 112

原创 A-和为s的两个数字VS和为s的连续正数序列

题目41-1:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。分析:  先选定第一个数字,然后将后面的数字依次遍历求和,并与需要的数字比较,需要n-1次,如果第一个数字不行,选择第二个,依次遍历求和。。。。需要n^2次,时间复杂度比较高,但也是可以的,在面试中,如果没有更好的办法写这个也是可以的,毕竟要比交白卷好得多,这...

2019-04-20 10:07:27 76

原创 A-二叉树的深度&数组中只出现一次的数字

题目39-1:输入一颗二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(包含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。二叉树定义如下。 public class TreeNode{ public int value; public TreeNode leftNode; public TreeNode rightNod...

2019-04-20 10:07:12 152

原创 A-只出现一次的字符串&两个链表的第一个公共结点

题目35:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’。分析:  最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字符。如果字符串有n个字符,每个字符可能与后面的O(n)个字符相比较,因此这种思路的时间复杂度是O(n2),并不理想。  可以定义一个哈希...

2019-04-20 10:06:55 125

原创 A-数组中出现次数超过一半的数字&最小的k个数

题目29:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。分析:  数组中有一个数字出现次数超过数组长度的一半,也就是说它出现的次数比其它数字出现的次数的和还要多。因此可以在遍历数组的时候保留两个值:一个是数组中的一个数字,另一个是次数。当遍历到下一个数...

2019-04-20 10:06:27 111

原创 A-从上往下打印二叉树&字符串的排列

题目23:从上往下打印二叉树的每个结点,同一层的结点按照从左到右的顺序打印。二叉树定义如下: public class TreeNode{ public int value; public TreeNode leftNode; public TreeNode rightNode; public TreeNode() {}...

2019-04-20 10:06:08 147

原创 A-二叉树的镜像&包含min函数的栈

题目19:请完成一个函数,输入一个二叉树,该函数输出它的镜像。二叉树结点定义如下。 public class TreeNode{ public int value; public TreeNode leftNode; public TreeNode rightNode; public TreeNode() {} ...

2019-04-20 10:05:08 87

原创 A-反转链表&合并两个排序的链表

题目16:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表定义如下: public class Node<T> { public T item; public Node<T> next; public Node() { } public Node(T it...

2019-04-19 17:24:37 147

原创 A-调整数组顺序&链表中倒数第k个结点

题目14:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶说位于数组的后半部分。分析:  最简单的思路是从头到尾扫描这个数组,每碰到一个偶数,就拿出这个偶数,并把后面所有的数字向前移动一位,最后把这个偶数放至数组末尾。由于每碰到一个偶数就需要移动O(n)个数字,因此总的时间复杂度是O(n^2)。  另一种做法是:发现偶数在奇数的前面,则交换他们的...

2019-04-19 09:55:38 118

原创 A-位运算&在O(1)时间删除链表结点

  位运算是把数字用二进制表示之后,对每一位上的0或者1的运算。  有一道很有意思的题目:在Excel2003中,用A表示第一列,B表示第二列…Z表示第26列,AA表示第27列,AB表示第28列…以此类推,请写一个方法,输入用字母表示的列号编码,输出它是第几列。这道题的本质是把十进制数字用A~Z表示成二十六进制。  位运算一共有五种:与、或、异或、左移和右移。  左移运算符m<<...

2019-04-18 10:25:09 125

原创 Linux-shell脚本

2019-04-17 18:32:18 107

原创 Linux-系统日常管理

【监控系统的状态】1)w 查看当前系统的负载  第一行从左面开始显示的信息依次为:时间,系统运行时间,登录用户数,平均负载。第二行开始以及下面所有的行,告诉我们的信息是,当前登录的都有哪些用户,以及他们是从哪里登录的等等。其实,在这些信息当中,笔者认为我们最应该关注的应该是第一行中的’load average:’后面的三个数值。第一个数值表示1分钟内系统的平均负载值;第二个数值表示5分钟内系...

2019-04-17 18:21:05 126

原创 Linux-正则表达式

【grep / egrep】语法: grep [-cinvABC] ‘word’ filename  -c :打印符合要求的行数  -i :忽略大小写  -n :在输出符合要求的行的同时连同行号一起输出  -v :打印不符合要求的行  -A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行  -B :后跟一个数字,例如 –B2 则表示打印符合要求的行以...

2019-04-17 18:12:17 90

原创 Linux-文档的压缩与打包

  在linux下最常见的压缩文件通常都是以.tar.gz 为结尾的,除此之外还有.tar, .gz, .bz2, .zip等等。以前也介绍过linux系统中的后缀名其实要不要无所谓,但是对于压缩文件来讲必须要带上。这是为了判断压缩文件是由哪种压缩工具所压缩,而后才能去正确的解压缩这个文件。以下介绍常见的后缀名所对应的压缩工具。  .gz gzip 压缩工具压缩的文件  .bz2 bzip2 ...

2019-04-17 17:58:07 74

原创 Linux-文本编辑工具vim

  vim是vi的升级版。在笔者看来vi 和vim最大的区别就是编辑一个文本时,vi不会显示颜色,而vim会显示颜色。vim的三种模式:一般模式、编辑模式、命令模式。一般模式: 当你vim filename 编辑一个文件时,一进入该文件就是一般模式了。在这个模式下,你可以做的操作有,上下移动光标;删除某个字符;删除某行;复制、粘贴一行或者多行。编辑模式:一般模式下,是不可以修改某一个字符的,...

2019-04-17 17:55:51 79

空空如也

空空如也

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

TA关注的人

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