自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【源码】Spring源码解析(一)IOC容器

本文对Spring IOC容器的启动流程以及Bean的生命周期的各个阶段的源码进行了详细的分析,并对BeanFactory的继承体系进行了较详细的介绍。

2022-02-03 21:30:18 1392

原创 【个人项目】基于 Netty,Nacos 的 RPC 框架的实现

yuanlin-rpc-frameworkyuanlin-rpc-framework 是一款基于 Netty 实现的 RPC 框架,框架主要分为网络传输、服务发布、服务调用三个部分,实现了多种序列化方法和负载均衡策略,注册中心支持 ZooKeeper 和 Nacos。架构服务提供者(server)向注册中心(registry)注册服务,服务消费者(client)通过注册中心获取服务地址,再通过网络向服务提供者发起服务调用请求。特性通用良好的接口抽象,详细的中文注释,单元测试实现 4 种序列

2022-01-13 21:27:54 1681

原创 【Java虚拟机】OOM各种情况实例(堆,栈,元空间,直接内存)

文章目录堆溢出(OOM:Java Heap Space)栈溢出(unable to create new native thread)栈溢出(StackOverFlowError)元空间溢出(OOM:MetaSpace)直接内存溢出(OOM:Direct buffer memory)堆内存太小(OOM:GC overhead limit exceeded)代码放在了GitHub上,需要的话可以直接拉:https://github.com/yuanlin-repository/-OOM-堆溢出(OO

2021-04-10 10:34:51 353

原创 【Redis】Redis持久化原理,主从复制,哨兵,集群

文章目录RedisRedis的高可用性系统处于不可用什么叫Redis的不可用redis基于哨兵的高可用性Redis 持久化RDBAOFRedis replication 主从复制master持久化对主从架构安全的意义主从复制原理全量复制增量复制主从复制断点续传无磁盘化复制过期key处理心跳检测哨兵介绍核心知识异步复制集群脑裂异步复制和脑裂导致的数据丢失如何降低损失减少异步复制的数据丢失减少脑裂的数据丢失主观宕机和客观宕机哨兵集群的自动发现机制slave配置的自动纠正slave->master选举算法q

2021-04-07 16:48:44 275

原创 【JUC源码】ConcurrentHashMap 超详细源码学习笔记 (jdk1.8)

ConcurrentHashMap结构数组+链表+红黑树1. 字段分析// 字段分析 private static final int MAXIMUM_CAPACITY = 1 << 30; private static final int DEFAULT_CAPACITY = 16; static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; // jdk1.7遗留下来的,1.8只在初始化中

2021-02-21 16:05:52 488 15

原创 zookeeper安装

1.安装JDK,注意要配置 JAVA_HOME拿到JDK的安装路径,比如C:\Program Files\Java\jdk1.8.0_2112. 下载zookeeper3. 解压安装包解压安装包,新建data和log包4.修改配置文件conf文件将zoo_sample.cfg 拷贝一份为zoo.cfg,然后添加下面两行env文件在zkEnv中添加一行设置JAVA_HOMEzkServer.cmd添加pause防止cmd闪退5.点击zkServer启动zookeeper

2021-12-15 16:55:37 1433

原创 【数据结构】手写小顶堆(实现泛型和简单扩容)

小顶堆/** * @Author yl * 小顶堆 */public class MyHeap<T> { private int size = 0; private T[] queue; private Comparator<T> comparator; public MyHeap(Integer size, Comparator<T> comparator) { queue = (T[]) new Obj

2021-08-19 11:33:09 139

原创 【源码】常用容器源码流程梳理

文章目录ListArrayList本文是我在浏览了常用容器类的源码后,对他们的底层数据结构、重要属性、扩容流程,增加元素,获取元素,删除元素的方法进行的一个梳理ListArrayList 1.底层数据结构 + 成员变量 elementData(Object[]):存放数据 size(int):当前集合元素个数 elementData.length(int):当前集合容量 DEFAULT_CAPACITY(int):集合默认最小容量为 10

2021-08-09 23:34:25 138

转载 【Git】GitLab学习笔记

GitHubGitHub是一个面向开源及私有软件项目的托管平台,因为只支持git作为唯一的版本库格式进行托管,故名GitHub。GitHub于2008年4月10日正式上线,除了Git代码仓库托管及基本的 Web管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过350万,托管版本数量也是非常之多,其中不乏知名开源项目Spring、MyBatis、React、Vue等。2018年6月4日,微软宣布,通过75亿美元的股票

2021-04-27 22:27:26 111

原创 【Git】Git学习笔记(Git架构,创建仓库,版本控制,分支管理)

文章目录Git简介什么是项目的版本管理?团队协同开发版本管理工具--GitGit架构Git的基本使用Git设置用户信息Git回退版本远程仓库分支分支常用指令企业中分支常用模型总结Git简介什么是项目的版本管理?在项目开发过程中,项目每开发到一个阶段都对当前项目进行一次备份,这个备份就是项目的一个版本。当我们继续开发一个阶段,再进行备份,就生成了多个版本。多个版本的集合就是项目的版本库。项目管理中的一些问题需要手动维护版本的更新日志,记录版本的变化需要手动查找历史版本,当历史版本比较多的时候

2021-04-27 21:49:21 361

原创 【项目开发】常用流程图

文章目录类图状态图时序图原型图E-R图类图类图是描述系统中的类,以及各个类之间的关系的静态视图。能够让我们在正确编写代码以前对系统有一个全面的认识。类图是一种模型类型,确切的说,是一种静态模型类型。状态图描述类的对象所有可能的状态,以及事件发生时状态的转移条件。可以捕获对象、子系统和系统的生命周期。他们可以告知一个对象可以拥有的状态,并且事件(如消息的接收、时间的流逝、错误、条件变为真等)会怎么随着时间的推移来影响这些状态。一个状态图应该连接到所有具有清晰的可标识状态和复杂行为的类;该图可以确定

2021-04-26 09:35:17 633

原创 【计算机网络】计算机网络巩固学习(网络层)

网络层通过路由器将各种网络连接起来,屏蔽掉各种网络在物理上或者其他方面的不同。但我们利用IP协议就可以使这些不同的网络在用户看来好像是一个统一的网络。使用IP协议的虚拟互连网络称为IP网。在这种覆盖全球的IP网的上部使用TCP协议,就是现在的互联网。各类IP地址的网络号字段和主机号字段。使用点分十进制法表示IP地址一般不使用的特殊的IP地址IP地址的重要特点。如何将IP地址转为MAC地址。ARP地址解析协议ARP 是解决同一个局域网上主机与路由器的 IP 地址和 MAC 地

2021-04-21 17:34:11 241 3

原创 【计算机网络】计算机网络巩固学习(基本分层,物理层,数据链路层)

基本分层OSI七层模型应用层:最高层,直接为应用进程通信提供服务。表示层:为应用层提供数据的表示、压缩、加密。会话层:用于在两个会话层主体之间建立和管理连接。传输层:为端到端提供传输服务,有TCP和UDP协议。网络层:网络层将数据封装成数据报,将数据报从源端传到目的端,同时进行路由选择。数据链路层:在物理层提供比特流的基础上,建立相邻节点之间的数据链路,通过差错控制在信道上进行传输。物理层:定义物理链路的电气、规程等特性,实现透明传输比特流。五层模型应用层,传输层,网络层,数据链路层

2021-04-18 21:10:48 184

原创 【Java并发】死锁实例(两个线程互相等待资源)

开启两个线程,先各自获取一个资源,然后尝试获取对方的资源。public class TestInput { static Object resource_one = new Object(); static Object resource_two = new Object(); public static void main(String[] args) { Thread1 thread1 = new Thread1(); Thread2 thr

2021-04-17 17:17:38 405

原创 【Java并发】模拟JDK1.7 HashMap发生死锁

注:如果当前JDK版本不是1.7可以先安装一下JDK1.7,然后在IDEA的Project Structure调一下使用的JDK版本,再在settings中调一下java complier的版本,就可以使用JDK1.7了。(如果是maven项目不要使用maven重新导入,否则Project Structure中的修改会被还原)代码非常简单,创建80个线程一直插入数据,多试几次,知道发生死锁。public class TestInput { static HashMap<String, S

2021-04-17 16:58:34 234

原创 【Java虚拟机】Java VisualVM使用

堆溢出实例通过不断创建Object对象,并加入到List中,导致堆溢出。import java.util.ArrayList;import java.util.List;/** * -Xms100M -Xmx100M * -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:/ */public class HeapOOM { public static void main(String[] args) { List&

2021-04-10 11:08:13 158

原创 【Redis】Redis工具类(设置,删除,设置超时,自增,自减,类型转换)

public class RedisService { @Autowired JedisPool jedisPool; /** * 获取当个对象 * */ public <T> T get(KeyPrefix prefix, String key, Class<T> clazz) { Jedis jedis = null; try { jedis = jedisPool.getResource(); //生成真正的key

2021-04-07 14:41:58 418

原创 【Redis】常见面试题总结

文章目录Redis概述什么是RedisRedis为什么这么快Redis有哪些数据类型Redis底层数据结构Redis底层实现之跳跃表Redis持久化机制RDBAOF缓存异常缓存雪崩缓存穿透缓存击穿缓存预热缓存更新缓存降级热点数据和冷数据事务Redis事务的概念Redis事务的三个阶段Redis事务相关命令事务的ACIDRedis分布式问题分布式锁什么是 RedLock常用工具Redis支持的Java客户端都有哪些?官方推荐用哪个?Redis和Redisson有什么关系?Jedis与Redisson对比有什么

2021-04-05 14:52:08 156

原创 【项目开发问题】SpringBoot整合Mybatis,日期无法转化,MD5加盐

1.在SpringBoot启动类上配置要扫描的包2.配置yml文档server: port: 8080spring: datasource: username: root password: 123456 url: jdbc:mysql://localhost:3306/seckill?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useL

2021-03-19 16:14:22 120

原创 【Redis】SpringBoot整合Redis

文章目录一、创建SpringBoot项目Redis 可以配置的字段二、测试1. 配置yml2. 原生API测试(RedisTemplate)3. 自定义RedisTemplate一、创建SpringBoot项目创建时勾上 Redis。注意:在 SpringBoot 2.x 之后,原来使用的 jedis 被替换为了 lettuce。jedis 和 lettuce 有什么区别呢?jedis:采用直连,多个线程操作时不安全,如果想要避免不安全,使用 jedis pool 连接池!BIOlettu

2021-03-15 17:42:56 97 1

原创 【Redis】 通过Jedis操作Redis

一、连接服务器上的 Redis要通过 idea 使用 jedis 连接服务器上的 Redis,必须先进行相应的配置。这里我是使用的阿里云轻量级服务器,系统是 CentOS7.3设置服务器的安全组,开放 6379 端口设置 Redis 的配置文件这里需要修改两个属性,先将bind开头的属性注释掉,然后将 protected-mode 由 yes 改为 no。重启服务器,开启 redis-serveridea 导入依赖,编写连接代码<dependencies&gt

2021-03-15 15:48:47 76

原创 【Redis】基础知识(八大数据类型,事务)

文章目录一、Redis 的一些常见问题二、Redis 5大基本数据类型String(字符串)List(列表)Set简单介绍:Redis是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存、消息中间件MQ。它支持多种数据类型,比如字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)与范围查询,bitmaps,hyperloglogs 和 地理空间(geospatial)索引半径查询。Redis 内置了(主从)复制(replic

2021-03-15 13:21:48 88

原创 【Redis】如何在阿里云服务器上安装 Redis

这里使用阿里云轻量应用服务器,系统为 CentOS7.3安装流程首先安装 gcc目前最新版本已经是6.0.8了。Redis6 以上需要gcc版本在7以上。运行下面命令升级gcc#第一步yum -y install centos-release-scl#第二步yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils#第三步scl enable devtoolset-9 bash需要注意的.

2021-03-14 12:00:51 245

原创 【Java并发】JUC 常见基础面试题

文章目录JUC 面试题谈谈 volatile可见性验证为什么不保证原子性如何解决原子性JMM(Java 内存模型)可见性原子性有序性DCL (Double Check Lock)版本单例模式CAS(CompareAndSwap)Unsafe 类举例CAS 的缺点ABA问题集合类不安全问题公平锁和非公平锁可重入锁(递归锁)LockSupport原理使用及对比参考资料JUC 面试题谈谈 volatilevolatile 是由 Java 虚拟机提供的一种轻量级的同步机制。保证可见性不保证原子性禁止重

2021-02-21 16:23:47 1838 3

原创 【MySQL】MySQL事务总结

文章目录MySQL 事务总结ACID分类实现原子性实现原理:undo log持久性实现原理:redo log和 binlog 比较隔离性隔离级别现代数据库解决并发控制的方法有哪些两段锁协议MVCC快照读和当前读原理锁共享锁和排他锁行锁记录锁间隙锁临键锁意向锁(Intention Lock)好处兼容性插入意向锁自增长锁隐式锁不同语句的加锁情况MySQL 事务总结ACID事务是一组不可分割的操作,一个独立的工作单元,它满足四个特性。原子性(Atomicity):事务的操作要么都成功,要么失败回滚。不可

2021-02-21 16:13:51 106

原创 【MySQL】MySQL索引总结

MySql 索引1. 索引分类普通索引唯一索引:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。单个索引:一个列构成的索引。联合索引(复合索引):对表的多个列建立索引。联合索引就是一棵 B+ 树,只是对多个列进行排序,比如 a,b 两个列建立联合索引,会先按 a 排序,再按 b 排序。联合索引的使用必须满足最左匹配原则,即查询从索引的最左列开始且不跳过索引中的列,**如果跳过,索引就会失效。**这是 B+ 树索引的一个特征。聚集索引(主键索引):聚集索引是根据表的主键构

2021-01-09 19:23:52 112

原创 npm install -g gulp 无法执行,没有响应,一直卡住

设置代理:npm config set registry https://registry.npm.taobao.org然后重新执行 npm install -g gulp 即可。

2020-11-28 18:08:51 574 1

原创 【比赛经历】蓝桥杯 CC++ B组 国家二等奖参赛经历

蓝桥杯 C/C++ 组国家二等奖参赛经历省赛赛前准备在省赛前准备了接近一周的时间,这一周的时间主要是在刷“挑战程序设计竞赛”这本书,看了一些比较基础的算法比如 dfs,bfs,动态规划(背包问题,子序列等),简单的数据结构(栈,队列,最小堆/最大堆,并查集等)简单的图论算法等,具体的请看挑战程序设计竞赛(初级篇)学习记录。然后 10 月 17 日 省赛开始,做完下来填空题应该对了 3 道,编程应该对了 2 道半。省赛的感受就是:前面几道填空题都是大水题,基本没有技术含量,但是就是不容易对。比如

2020-11-17 16:25:01 3987 2

原创 【计算机网络】计算机网络(网络层)

4.1 网络层提供的两种服务OSI体系的支持者极力主张在网络层使用可靠传输的虚电路服务。而TCP/IP体系的网络层提供的是数据报服务(传送IP数据报)。虚电路服务和数据报服务的主要区别。对比的方面虚电路服务数据报服务思路可靠通信靠网络来保证可靠通信靠用户主机来保证连接的建立必须有不需要终点地址仅在连接建立阶段使用,每个分组使用短的虚电信号每个分组都有终点的完整地址分组的转发属于同一条虚电路的分组均按照同一路由进行转发每个分组独立选择路由进行转发

2020-10-22 20:20:12 635 2

原创 【题记】最大子阵(dp+贪心)

7-44 最大子阵 (100分)给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵中的元素和最大。其中,A的子矩阵指在A中行和列均连续的一块。输入格式:输入的第一行包含两个整数n, m,分别表示矩阵A的行数和列数。接下来n行,每行m个整数,表示矩阵A。输出格式:输出一行,包含一个整数,表示A中最大的子矩阵中的元素和。输入样例:在这里给出一组输入。例如:3 3-1 -4 33 4 -1-5 -2 8输出样例:在这里给出相应的输出。例如:10样例说明:取最后一列,和

2020-10-15 10:48:25 161

原创 【题记】挑战程序设计竞赛(初级篇)学习记录

贪心1.调度区间,P42#include<iostream>#include<cstring>#include<cstdio>#include<vector>#include<iomanip>#include<algorithm>using namespace std;typedef long long ll;const int MAX_N = 100000;// 区间总数int n; // 存储输入的工

2020-10-08 22:35:46 382

原创 【题记】大数加法乘法

int* mul(int* buf, int k){ ll t = 0; for(int i = 0; i < 50; i++){ int s = buf[i]*k+t; buf[i] = s % 10; t = s / 10; } return buf;}void print(int* buf){ for (int i = 60; i >= 0; i--) { if (buf[i] =

2020-10-08 21:51:47 68

原创 【题记】入门_状压DP

题目描述:在电影《金陵十三钗》中有十二个秦淮河的女人要自我牺牲代替十二个女学生去赴日本人的死亡宴会。为了不让日本人发现,自然需要一番乔装打扮。但由于天生材质的原因,每个人和每个人之间的相似度是不同的。由于我们这是编程题,因此情况就变成了金陵n钗。给出n个女人和n个学生的相似度矩阵,求她们之间的匹配所能获得的最大相似度。所谓相似度矩阵是一个n*n的二维数组like[i][j]。其中i,j分别为女人的编号和学生的编号,皆从0到n-1编号。like[i][j]是一个0到100的整数值,表示第i个女人和第j个学

2020-10-08 21:36:11 156

原创 【Java容器】HashMap总结

思维导图:HashMap继承树插入流程图扩容流程图

2020-10-03 19:58:15 134

原创 【数据结构】红黑树

红黑树思维导图出现的背景,初衷,要解决的问题背景:Rudolf Bayer在1972年发明了红黑树,称为“对称二叉B树”,但红黑树这个名字来源于Leo J Guibas 和 Robert Sedgewick在1978年写的一篇论文。Rudolf Bayer是一名慕尼黑大学的信息学教授,(信息学是一门研究信息的收集、分类、操作、存储、检索和传播的科学),他发明红黑树的初衷是为了存储和有效地检索多维数据简介:红黑树是一棵自平衡的二叉搜索树应用场景:1.C++中的map,set2.Java中的H

2020-10-03 11:04:40 220

原创 【Java容器】ArrayList源码阅读笔记

ArrayList是一个非常重要Java容器,下面是ArrayList的源码阅读笔记。首先我们先看ArrayList继承的类和实现的接口public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable我们可以看到ArrayList继承父类AbstractList,

2020-09-28 20:31:51 154

原创 【JUC源码】JAVA并发(三)_AQS独占锁_保姆级源码解析

同步队列同步队列节点源码:public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable { ...... //AQS通过头尾指针管理同步队列 private transient volatile Node head;//头节点 private transient volatile Node ta

2020-09-27 16:39:47 168

原创 【Java并发】Java并发(二)_线程状态转换以及基本操作

线程状态转换以及基本操作思维导图1.新建线程1.1 Java程序天生就是一个多线程程序,包含了分发处理发送给JVM信号的线程调用对象的finalize()方法的线程清除Reference的线程main线程,用户程序的入口1.2 如何新建线程继承Thread类,重写run方法通过实现Runable接口通过实现Callable接口2.线程状态转换2.1 线程的状态NEW:初始状态,线程被构建,但还没有调用start()方法RUNNABLE:运行状态,Java将操作系统中

2020-09-23 19:30:04 115

原创 【Java并发】Java并发(一)_并发编程的优缺点

并发编程的优缺点思维导图:1. 为什么要用并发1.1 并发编程可以将多核CPU的计算能力发挥到极致,提高性能1.2 面对复杂业务模型,并发程序会比串行程序更适应业务需求,并发程序更能吻合这种业务拆分2.并发编程有哪些缺点2.1 频繁的上下文切换概念时间片是CPU分配给各个线程的时间,因为时间非常短,所以CPU不断通过切换线程,让我们觉得多个线程是同时执行的,时间片一般是几十毫秒。而每次切换时,需要保存当前的状态起来,以便能够进行恢复先前状态,而这个切换时非常损耗性能,过于频繁反而无法

2020-09-23 19:17:43 294

原创 【JVM】JVM二刷(四)_虚拟机性能监控和故障处理工具

1.jps:虚拟机进程状况工具   作用:列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID。   LVMID与操作系统的进程PID是一致的,使用Windows的任务管理器或UNIX的ps命令也可以查到虚拟机进程的LVMID。jps -q:只输出LVMID,省略主类的名称jps -m:输出虚拟机进程启动时传递给主类main()函数的参数jps -l:输出主类的全名,如果进程执行的是jar包,输出Jar路径jps -

2020-09-22 17:22:43 192

空空如也

空空如也

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

TA关注的人

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