自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 详解JVM和GC垃圾回收

JVM架构图分析我们编写的代码是java源文件.java文件,经过编译器编译成字节码文件.class文件,通过类装载器装载进jvm内存区域。Java虚拟机运行时数据区程序计数器:当前线程的行号指示器,用来记录当前执行到代码的哪一行、Java虚拟机栈:存局部变量表,操作数栈,动态链接,方法出口等本地方法栈:与虚拟机栈一样,只不过调用native服务Java堆:存放数组,和对象实例,该区域线程共享方法区:也叫永久代,存类信息,常量,静态变量。在jdk1.8取消了方法区,叫原空间,直接有直接内存管

2020-06-14 21:45:05 166

原创 Redis高级篇--主从复制、哨兵机制、集群cluster

Redis高级篇先熟悉一下redis的配置文件redis.conf服务器端配置daemonize yes|no 设置服务器已守护进程方式运行bind 127.0.0.1 绑定主机地址port 6379 设置端口号databases 16 设置数据库数量日志配置loglevel debug|vorbose|notice|warning 默认级别是vorbose日志记录文件名...

2020-05-01 01:44:49 1214

原创 虚拟机搭建集群设置桥接网络

下载安装VMware下载centOS7的镜像文件新建虚拟机安装vm上选择编辑,点击虚拟网络编辑器点击更改设置选择桥接模式,选择当前主机使用的网卡打开终端刚上来ens33网卡是没有IP的,使用dhclient自动分配ip接下来,设置成静态ip,设置网关,子网掩码,dns服务器。vim /etc/sysconfig/network-scripts/ifcfg-ens33设置...

2020-04-22 23:59:22 608 1

原创 Redis精通探险之路(面试必考)

基础及实践篇redis可以做什么redis可以做缓存数据库redis可以做分布式锁Id列表的自增redis的安装Docker方式安装:docker pull redis运行redis容器:docker run --name myredis -d -p6379:6379 redis执行容器中的客户端:docker exec -it myredis redis-cligithub源码...

2020-04-14 22:27:01 496

原创 详细了解JVM内存模型及垃圾回收机制

垃圾收集器主要对堆空间进行垃圾回收,堆空间主要存放的是实例对象,首先我们要判断是否还存活?1.引用计数法给对象添加一个引用计数器,用一次就加1,引用失效就减1,等于0的时候说明这个对象就是废物咯,可以清理掉的垃圾。可能引发的问题:两个对象互相引用,会导致这两个对象永远不会被回收。2.可达性分析算法选一个对象作为root起点,向下引用,不能到达的对象说明可以进行回收引用分为四种:强引用...

2020-03-16 20:58:31 183

原创 深入理解Mysql架构原理

什么是Mysql驱动先通过maven引入一段配置mysql驱动用来和数据库建立连接。各种语言编写的代码,通过Mysql驱动去访问数据库。什么是数据库连接池处理多线程并发请求数据库建立连接,以及线程不断销毁和创建的效率问题。常见的连接池:DBCP,C3P0, DruidMysql的连接池维护了与系统之间的多个数据库连接。系统跟Mysql建立连接的时候会传递过来账号,密码,库表权限。Mysql架构设计查询解析器把传过来的sql解析成Mysql能看懂得语句查询优化器对sql语句进行优化

2021-07-15 17:54:23 263

原创 如何实现接口的幂等性

什么是接口幂等性?重复调用一个接口多次,最后的结果和只调用一次的结果是一样的。这时我们称这个接口具有幂等性。接口不幂等产生的原因是什么?1 网络不稳定,导致接口重复2 用户的重复操作3 刷新浏览器怎么解决接口不幂等的问题1 前端按钮控制防止用户重复操作。2 数据库的唯一键约束,来保证一条数据只能插入一次。但是update语句无法保证,只适用于insert操作。3 使用redis来实现接口幂等性。选用接口参数中唯一性的key作为redis的key。此处可以在业务代码之前设置key,和在业务代

2021-06-22 16:39:54 1256

原创 一文带你了解Redis持久化机制

Redis持久化redis持久化提供了两种机制,一种时快照RDB和AOF写日志。RBD快照快照是一次全量备份。快照是以二进制序列化方式来存储的。占用空间比较小,恢复比较快。Redis使用操作系统的CopyOnWrite来实现快照持久化。fork(多线程)redis持久化调用glic函数fork出一个子进程,持久化就交给子进程来完成。子进程刚产生的时候和父进程共享内存的代码块和数据段。此时父进程正常对外提供服务,当有指令过来修改就会使用cow进行数据段页面分离、子进程页面没有变化,保持持久化瞬间

2021-04-02 10:17:47 218 3

原创 java8新特性-默认方法和Optional以及新的时间日期API

默认方法Java 8引入了一个新功能,叫默认方法,通过默认方法你可以指定接口方法的默认实现。换句话说,接口能提供方法的具体实现。因此,实现接口的类如果不显式地提供该方法的具体实现,就会自动继承默认的实现。方法上加default关键字冲突问题:接口是可以多实现的,但是java中时单继承,default方法自带实现类,在多实现的时候会产生冲突。三条规则:(1) 类中的方法优先级最高。类或父类中声明的方法的优先级高于任何声明为默认方法的优先级。(2) 如果无法依据第一条进行判断,那么子接口的优先级

2021-01-12 11:28:21 228

原创 Java8新特性-Stream流-Lambda表达式

Lamda表达式Comparator<User> userComparator = (User a, User b) -> { return a.getAge() - b.getAge();};()->{}左边括号是函数式接口内方法的参数,右面是方法体函数式接口函数式接口:只定义一个抽象接口。ComparatorRunnableCallable List<String> str = Arrays.asList("a","b","

2021-01-12 11:19:11 950

原创 LVS四层负载均衡

LVS目录LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。LVS相关术语LVS/NAT原理LVS/DR 原理(默认模式)LVS/Tun 原理LVS的八种调度算法实践LVS的NAT模式实践LVS的DR模式LVS结合keepaliveLVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器。LVS工作模式分为NAT模式、TUN模式、以及DR模式。集群模式:LB:负载均衡集群,主从复制HA:高可用集群,,JPC:高性能。LVS 由2部分程序组成,包括 ip

2020-11-06 12:16:59 272 1

原创 Redis最全脑图分享

2020-10-10 10:34:23 435

原创 零拷贝技术详细解读(Zero Copy)

文章目录为什么要有DMA技术?了解一下传统的文件传输如何实现零拷贝PageCache有什么用?为什么要有DMA技术?在没有 DMA 技术前,I/O 的过程是这样的:CPU 发出对应的指令给磁盘控制器,然后返回;磁盘控制器收到指令后,于是就开始准备数据,会把数据放入到磁盘控制器的内部缓冲区中,然后产生一个中断;CPU收到中断信号后,停下手头的工作,接着把磁盘控制器的缓冲区的数据一次一个字节地读进自己的寄存器,然后再把寄存器里的数据写入到内存,而在数据传输的期间CPU 是无法执行其他任务的。

2020-10-09 16:49:19 6221 2

原创 Disruptor单机最强队列

介绍Disruptor拥有开飞机般的速度,单线程里每秒处理600w订单,业务逻辑处理器完全是运行在内存中的,是基于事件源驱动的。Maven包<dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.4.2</version></dependency>Disrupt

2020-09-17 15:27:11 413

原创 Openresty增强版Nginx--整合Lua访问Redis

文章目录Openresty安装整合Lua脚本整合Redis模块redis2-nginx-module工具**lua-resty-redis****组件lua-resty-http**OpenrestyOpenResty是一个基于Nginx与Lua的高性能Web平台,其内部集成了大量精良的Lua库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态Web应用、Web服务和动态网关。安装预编译安装以CentOS举例 其他系统参照:http://openresty.org/c

2020-09-16 18:01:14 865

原创 RabbitMQ史上最强实践

RabbitMQ实践Rabbit MQ消息中间件的作用RabiitMQ的安装生成和消费消息入门指南架构图生产者和消费者队列交换器,路由键,绑定交换器类型RabbitMQ运转流程生产者发送消息消费者消费消息AMQP协议客户端开发向导连接RabbitMQ使用交换器和队列消费消息推模式拉模式消费端的确认与拒绝RabbitMQ进阶消息何去何从mandatory参数immediate参数过期时间TTL设置队列的TTL过期时间死信队列延迟队列优先级队列RPC实现持久化生产者确认事务机制发送方确认机制消费端的要点消息分发

2020-09-11 16:56:28 568

原创 Zookeeper的最全解读

文章目录zookeeper的概括和基础zookeeper能做什么zookeeper的功能zookeeper不适用的场景分布式进程之间通信zookeeper基础什么是原语zookeeper的结构APIznode的不同类型临时节点被删除的情况有序节点znode 四种类型节点监视和通知客户端可以设置多种监视点版本zookeeper架构zookeeper仲裁会话安装zookeeper会话的状态和声明周期仲裁模式的配置通过zookeeper实现锁主-从模式主节点从节点,任务和分配客户端角色zookeeper的概括和

2020-09-07 09:55:40 290 1

原创 BAT面试Redis秘籍

文章目录Redis用来做什么?Redis为什么这么快?Redis有哪些数据结构字符串strings散列 hashes列表 lists集合sets有序集合sorted sets什么是epoll模型Redis怎么实现分布式锁Redis是二进制安全得吗你了解Redis遍历时候的索引吗Redis的管道连接Redis的发布订阅Redis事务Redis缓存击穿怎么解决?缓存和数据库的区别Redis的key有效期Redis怎么淘汰过期的keyRedis淘汰策略Redis的持久化Redis用来做什么?redis是一种基

2020-08-24 09:52:09 189

原创 juc--Fork-Join分治编程

Fork-Join分治编程天道酬勤

2020-08-14 16:38:24 204

原创 juc-Exchanger两个线程通信交换数据

Exchanger的使用类,的功能可以使2个线程之间传输数据,它比生产者/消费者模式使用的wait/notify要更加方便**方法exchange()**阻塞的特性类Exchanger中的exchange()方法具有阻塞的特色,也就是此方法被调用后等待其他线程来取得数据,如果没有其他线程取得数据,则一直阻塞等待。public class ThreadA extends Thread { private Exchanger<String> exchanger; public T

2020-08-04 17:14:50 179

原创 juc-Semaphore信号量

Semaphore 含义是信号、信号系统。此类的主要作用就是限制线程并发的数量。public class Service { private Semaphore semaphore=new Semaphore(2);//同一时间做多允许一个线程执行 public void testMethod(){ try { semaphore.acquire();// 使用掉一个许可,减法 System.out.println(Thre

2020-08-04 11:12:29 148

原创 Nginx负载均衡,反向代理

7层网络负载均衡负载均衡用户认证访问反向代理安装Tengine官网下载,linux安装安装c语言编译器GCCyum install gcc openssl-devel pcre-devel zlib-devel -y解压缩tar -zxvf tengine进入目录./configure --prefix=/usr/local/tengine安装make && make install进入安装目录/usr/local/tenginesbin可执行程序./ngin

2020-07-29 16:44:49 118

原创 设计模式--委派模式

委派模式委派模式基本作用就是负责任务的调用和分配,跟代理模式很像。例子:老板给项目经理下发任务,项目经理把任务分发到员工。/** * 员工类 */public interface IEmployee { public void doing(String command);}public class EmployeeA implements IEmployee { public void doing(String command) { System.out.p

2020-07-12 17:12:50 96

原创 设计模式--抽象工厂

任何可以产生对象的方法或者类都可以叫做工厂。抽象工厂:一个超级工厂创建其他工厂上图展示:代码实现:为形状创建一个接口package com.dl.pattern.abstractFactory;public interface Shape { public void drow();}创建实体类package com.dl.pattern.abstractFactory;public class Circle implements Shape { @Overrid

2020-06-25 14:57:17 118

原创 详细讲解策略模式

策略模式系统动态的在几种算法中选择一种来使用。上图,Strategy是一个接口,ConcreteStrategyA,ConcreteStrategyB,ConcreteStrategyC都实现了Strategy接口,但是实现的策略是不同的。这符合了开闭原则(对修改关闭,对扩展开放),Context用来接收Strategy的策略实现类,Context和Strategy是聚合关系。代码如下:定义策略接口package com.dl.pattern.strategy2;/** * 先定义策略,面

2020-06-25 12:45:12 173

原创 Java代码实现,快速排序

快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列时间复杂度: O(NlogN) 最差O(N^2)代码实现package com.dl.paixu;import java.util.Arrays;/** * 单轴快排 * 选一个轴,把数组分成两个数组,左边比轴小,右边比轴大

2020-06-25 12:09:55 201

原创 设计模式--单例模式

饿汉式类一初始化就加载。构造方法私有化。/** * 饿汉式单例 JVM保证线程安全 * * 缺点:不管用与否都实例化 */public class Mgr01 { private static final Mgr01 INSTANCE =new Mgr01(); private Mgr01(){}; public static Mgr01 getInstance(){ return INSTANCE; } public void

2020-06-20 17:06:39 84

原创 java代码实现-希尔排序

希尔排序希尔排序是升级版的插入排序。对数组进行分组,每次步长不断缩减,最后步长为1.本文算法为步长初始等于数组长度的一半,每次步长除以2,最后步长为1为止。public static shellSort(int[] arr){ for(int gap=arr.leength/2;gap>0;gap/=2){ for(int i=gap;i<arr.length;i++){ for(int j=i;j>gap-1;j-=gap){ if(arr[j]<arr

2020-06-20 11:45:50 173

原创 java代码实现插入排序

插入排序时间复杂度:O(n^2)从第二个元素开始循环,把元素放在应该放的位置上 public static void main(String[] args) { int[] arr={2,34,12,25,7}; insertSort(arr); System.out.println(Arrays.toString(arr)); } public static void insertSort(int[] arr){ fo

2020-06-20 10:18:17 214

原创 Java代码实现冒泡排序

冒泡排序时间复杂度:O(n^2)public class BubbleSelcct { public static void main(String[] args) { int[] arr={23,13,22,89,6,35}; bubble(arr); for (int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } }

2020-06-20 10:03:12 475

原创 java代码实现--队列

队列是一个有序列表先进先出原则public class QueueTest{privat Object[] data=null;private int maxsize;//队列容量private int front;//队列头private int last;//队列尾QueueTest(){ this(10);}public QueueTest(int initsize){ if(initsize>=0){ data=new Object[initsize]; this.

2020-06-19 11:15:52 111

原创 java代码实现-数据结构-栈--先进后出

栈是一种先进后出的数据结构。public class StackTest{ private Object[] data=null; private int maxsize=0; private top=-1; StackTest(){ this(10);//调用有参构造} public StackTest(int initsize){ if(initsize>=0){ this.maxsize=initsize; data=new Object(maxsize); top=-1

2020-06-19 09:59:41 773

原创 springboot定时任务详解

在启动类上届注解@EnableScheduling@SpringBootApplication@EnableSchedulingpublic class App { public static void main(String[] args) { SpringApplication.run(App.class); }}创建任务类@Componentpublic class TaskJob { @Scheduled(fixedRate = 1000)

2020-06-12 17:00:35 120

原创 springboot自定义注解-保姆级教程

需要在自定义注解上加元注解1.@Target定义注解修饰的目标,就是用来修饰方法和类2.@Retention定义注解的生命周期,分为以下三种:源码级别SOURCE,编译期级别CLASS,运行期级别RUNTIME3@Documented定义注解会被javadoc或者其他类似工具文档化import java.lang.annotation.*;@Target({ElementType.METHOD})@Documented@Retention(RetentionPolicy.R

2020-06-12 16:45:00 163

原创 ShardingSphere分库分表中间件

ShardingSphere主要有三大技术:Sharding-JDBCsharding-proxy:透明化数据库代理端sharding-sidecar分库分表主要分为垂直分库,垂直分表,水平分库和水平分表。Sharding-JDBC增强版JDBC1 开源得轻量级java框架作用:1 数据分片2 读写分离目的:简化对数据库的分库分表的数据操作sharding-JDBC实现水平分表创建数据库和表。1 创建数据库course_db2 在数据库创建两张表course_1 、course

2020-06-07 19:32:21 579

原创 springboot处理全局异常

@ControllerAdvicepublic class GlobalExceptionHandler { private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); /** * 处理自定义的业务异常 * @param req * @param e * @return */ @ExceptionHandler(value = BizExcepti

2020-05-20 18:51:29 90

原创 jdk生成证书使用https安全连接

在有jdk环境的机器上,在命令行输入keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore sang.p12 -validity 365-genkey 表示要创建一个新的密钥-alias 表示jeystore的别名-keyalg 表示使用加密算法是RSA,一种非对称加密算法-keysize 表示密钥的长度-keystore 表示生成密钥存放的位置-validity 表示密钥的有效时间,单位为天在

2020-05-14 13:25:39 725

原创 Tcp的三次握手和四次挥手过程

Tcp的报文格式其中比较重要的字段有:(1)序号(sequence number):Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。(2)确认号(acknowledgement number):Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。(3)标志位(Flags):共6个,即URG、ACK、PSH、RST、SYN、FIN等。具体含义如下:URG:紧急指针(urgent pointer)有效。ACK:确认序号

2020-05-13 17:03:52 155

原创 Reids事务及分布式锁

Redis事务一个指令队列连续执行事务的边界multi 开始exec 结束位置set age 30QUEUEget ageQUEUEset age 31QUEUEexec一起执行discard取消事务事务中,如果有错误的语法命令,所有的指令都不执行事务中,语法不错能执行,已经执行的命令不会回滚。手动回滚,记录之前的状态,出错,整体克隆...

2020-05-01 01:28:16 145

原创 Redis的持久化实战配置

Redis持久化RDB(快照)和AOF(记录数据命令过程,日志)RDBsave命令输入save命令,会在data目录下生成一个dump.rdb文件修改配置文件6379的。vim /conf/redis-6379.confdbfilename dump-6379.rdb 存储文件名称rdbcompression yes 开启压缩rdbchecksum yes 开启检测重...

2020-04-29 23:21:14 316

空空如也

空空如也

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

TA关注的人

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