自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

IT王小二的博客

世界上回报率最高的两样投资,一是运动,二是读书。

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

原创 使用Let’s Encrypt实现网站https化

使用 Let’s Encrypt 证书和搭配 Nginx 实现网站 https 化。一、SSL证书获取由于 Let’s Encrypy 申请的 SSL 证书只有三个月的有效期,为了实现自动续期,使用 acme.sh 脚本来获取且自动续期。使用过程中如有问题参考 acme官方文档 ,文档有中文说明,下面记录我自己的操作。1. 下载脚本并安装下载脚本并安装,将邮箱设置成自己的。wget -O - https://raw.githubusercontent.com/acmesh-official/

2021-06-30 09:26:43 227 1

原创 ZooKeeper分布式锁的实现

ZooKeeper分布式锁的实现。在分布式的情况下,sychornized 和 Lock 已经不能满足我们的要求了,那么就需要使用第三方的锁了,这里我们就使用 ZooKeeper 来实现一个分布式锁。一、分布式锁方案比较方案实现思路优点缺点利用 MySQL 的实现方案利用数据库自身提供的锁机制实现,要求数据库支持行级锁实现简单性能差,无法适应高并发场景;容易出现死锁的情况;无法优雅的实现阻塞式锁利用 Redis 的实现方案使用 Setnx 和 lua 脚本机制实

2021-06-29 09:11:01 187 1

原创 ZooKeeper集群解析

ZooKeeper集群解析。这篇文章中来介绍一下 ZooKeeper 相关的集群角色,还有 ZAB协议,集群的安装在 ZooKeeper入门 中有介绍。一、ZooKeeper集群中的角色Leader 集群工作机制中的核心事务请求的唯一调度和处理者,保证集群事务处理的顺序集群内部个服务器的调度者(管理 follower,数据同步),为客户端提供读和写的服务,负责投票的发起和决议,更新系统状态。Follower 集群工作机制中的跟随者处理非事务请求,为客户端提供读服务,如果是写服务则转发给Leade

2021-06-28 09:32:13 213 1

原创 ZooKeeper Java客户端

ZooKeeper Java客户端。这里介绍两个客户端,一个为 ZooKeeper 原生客户端,一个为 ZkClient。首先创建一个maven项目,pom文件中添加依赖。<!-- 原生 --><dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4

2021-06-25 09:20:33 488 1

原创 ZooKeeper入门

ZooKeeper入门。一、ZooKeeper简介ZooKeeper 致力于提供一个高性能、高可用,且具备严格的顺序访问控制能力的分布式协调服务,是雅虎公司创建,是 Google 的 Chubby 一个开源的实现,也是 Hadoop 和 Hbase 的重要组件。1. ZooKeeper优点简单的数据结构:共享的树形结构,类似文件系统,存储于内存。可以构建集群:避免单点故障,3-5 台机器就可以组成集群,超过半数正常工作就能对外提供服务。顺序访问:对于每个读请求,ZooKeeper 会分配一个

2021-06-24 15:40:58 213

原创 实现一个并发任务执行框架

实现一个并发任务执行框架。问题参考来自网络一、需求产生和分析公司里有两个项目组,考试组有批量的离线文档要生成,题库组则经常有批量的题目进行排重和根据条件批量修改题目的内容。架构组通过对实际的上线产品进行用户调查,发现这些功能在实际使用时,用户都反应速度很慢,而且提交任务后,不知道任务的进行情况,做没做?做到哪一步了?有哪些成功?哪些失败了?都一概不知道架构组和实际的开发人员沟通,他们都说,因为前端提交任务到 Web 后台以后,是一次要处理多个文档和题目,所以速度快不起来。提示用多线程进行改进,

2021-06-23 09:30:56 229

原创 并发安全和死锁

并发安全和死锁。一、并发安全1. 什么是线程安全性当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在调用代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的 – Java并发编程实战那么怎么实现线程安全呢?可以使用下面的这些方式。2. 线程封闭1、实现好的并发是一件困难的事情,所以很多时候我们都想躲避并发。避免并发最简单的方法就是线程封闭。什么是线程封闭呢?就是把对象封装到一个线程里,只有这一个线程能看到此

2021-06-22 12:26:02 244

原创 Java线程池

Java线程池。一、为什么要用线程池1、降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2、提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。3、提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。二、ThreadPoolExecutor的类关系Executor 是一个接口,它是 Executor 框架的基础,它将任务的提交与任务的执行分离开来。ExecutorServ

2021-06-21 12:26:06 192

原创 Java并发容器

并发容器。一、小知识1. hash就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。常用 HASH 函数:直接取余法、乘法取整法、平方取中法。hash冲突的处理办法。1、开放寻址法。2、再散列法。3、链地址法(拉链法)常用 h

2021-06-20 15:24:36 130

原创 Java显式锁

Java 显式锁。一、显式锁什么是显式锁?由自己手动获取锁,然后手动释放的锁。有了 synchronized(内置锁) 为什么还要 Lock(显示锁)?使用 synchronized 关键字实现了锁功能的,使用 synchronized 关键字将会隐式地获取锁,但是它将锁的获取和释放固化了,也就是先获取再释放。与内置加锁机制不同的是,Lock 提供了一种无条件的、可轮询的、定时的以及可中断的锁获取操作,所有加锁和解锁的方法都是显式的。二、Lock的常用api方法名称描述

2021-06-18 15:05:45 173

原创 Java线程的并发工具类

Java线程的并发工具类。一、fork/join1. Fork-Join原理在必要的情况下,将一个大任务,拆分(fork)成若干个小任务,然后再将一个个小任务的结果进行汇总(join)。适用场景:大数据量统计类任务。2. 工作窃取Fork/Join在实现上,大任务拆分出来的小任务会被分发到不同的队列里面,每一个队列都会用一个线程来消费,这是为了获取任务时的多线程竞争,但是某些线程会提前消费完自己的队列。而有些线程没有及时消费完队列,这个时候,完成了任务的线程就会去窃取那些没有消费完成的线程的

2021-06-17 16:59:21 139

原创 线程基础、线程之间的共享和协作

线程基础、线程之间的共享和协作。一、基础概念1. 进程和线程进程是操作系统进行程序运行资源(资源包括:CPU、内存空间、磁盘 IO 等)分配的最小单位,例如我们的 idea,chrome就是一个进程。线程是 CPU 调度的最小单位,必须依赖于进程而存在,一个进程存在一个或多个线程。2. CPU核心数和线程数的关系多核心:也指单芯片多处理器( Chip Multiprocessors,简称 CMP),CMP 是由美斯坦福大学提出的,其思想是将大规模并行处理器中的 SMP(对称多处理器)集成

2021-06-16 12:20:57 267

原创 JVM性能优化

JVM 性能优化。一、内存溢出内存溢出的原因:程序在申请内存时,没有足够的空间。1. 栈溢出方法死循环递归调用(StackOverflowError)、不断建立线程(OutOfMemoryError)。2. 堆溢出不断创建对象,分配对象大于最大堆的大小(OutOfMemoryError)。3. 直接内存JVM 分配的本地直接内存大小大于 JVM 的限制,可以通过-XX:MaxDirectMemorySize 来设置(不设置的话默认与堆内存最大值一样,也会出现OOM 异常)。4. 方法区溢

2021-06-15 10:12:19 724 2

原创 JVM 的执行子系统

JVM 的执行子系统。一、Class类文件结构1. JVM的平台无关性与平台无关性是建立在操作系统上,虚拟机厂商提供了许多可以运行在各种不同平台的虚拟机,它们都可以载入和执行字节码,从而实现程序的一次编写,到处运行。各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码(ByteCode)是构成平台无关性的基石,也是语言无关性的基础。Java 虚拟机不和包括 Java 在内的任何语言绑定,它只与“Class 文件”这种特定的二进制文件格式所关联,Class 文件中包含了 Java 虚拟机

2021-06-13 15:00:57 1135 1

原创 JVM 垃圾回收算法和垃圾回收器

JVM 垃圾回收算法和垃圾回收器。一、垃圾回收的区域栈:栈中的生命周期是跟随线程,所以一般不需要关注。堆:堆中的对象是垃圾回收的重点。方法区:这一块也会发生垃圾回收,不过这块的效率比较低,一般不是我们关注的重点。二、怎么判断对象的存活一般有两种方式(引用计数法、可达性分析),JVM使用的是可达性分析。1. 引用计数法给对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象可被回收(Python 在用,但主流虚拟机没有使用)。优点:快

2021-06-12 12:23:59 576

原创 JVM中的对象

JVM中的对象。一、对象的创建过程检查加载 -> 分配内存 -> 内存空间初始化 -> 设置 -> 对象的初始化1. 检查加载虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那么必须先执行相应的类加载过程。2. 分配内存根据方法区的信息确定为该类分配的内存空间大小。但是分配内存时主要注意两个问题1、如何分配空间指针碰撞:假设Java堆中内存是绝对规整

2021-06-11 14:55:15 209

原创 JVM组成结构

JVM组成结构。一、JavaSE体系JavaSE,Java 平台标准版,为 Java EE 和 Java ME 提供了基础。JDK:Java 开发工具包,JDK 是 JRE 的超集,包含 JRE 中的所有内容,以及开发程序所需的编译器和调试程序等工具。JRE:Java SE 运行时环境 ,提供库、Java 虚拟机和其他组件来运行用 Java 编程语言编写的程序。主要类库,包括:程序部署发布、用户界面工具类、继承库、其他基础库,语言和工具基础库。JVM:Java 虚拟机,负责 JavaSE 平台

2021-06-10 09:28:17 138

原创 Redis高可用

有时候单机形式下的redis性能不足时可能会挂掉导致系统服务异常,为了解决这个问题就有了下面这个内容。一、Redis主从复制1. 主从复制的理解类似于MySQL的读写分离,一台Redis(主节点)进行写,其他Redis(从节点)进行读。从节点建议用只读模式 slave-read-only=yes, 若从节点修改数据,主从数据不一致,主节点数据更改后从节点数据又被覆盖,没有任何意义。传输延迟:主从一般部署在不同机器上,复制时存在网络延时问题,redis 提供。repl-disable-tcp-

2021-06-09 19:43:41 169 1

原创 Redis性能测试、jedis连接原理、弱事务

Redis 性能测试、jedis连接原理、弱事务。一、性能测试、jedis连接原理1. 什么是Redis慢查询和MySQL一样:当sql执行时间超过 long_query_time 参数设定的时间阈值(比如2秒)时,会发生耗时命令记录。通信流程如下:redis命令的生命周期:发送、排队、执行、返回。redis 的所有指令全部会存放到队列, 由单线程按顺序获取并执行指令。如果某个指令执行很慢, 会出现阻塞, 以上图可以得出: Redis 的慢查询指的是在执行第 3 个操作的时候发生的。2.

2021-06-09 09:17:33 283 2

原创 Redis常见应用场景

Redis常见应用场景。如果还不清楚Redis常用操作指令请访问 Redis入门,或者访问 文档网站。一、String 场景计数功能:例如掘金文章点击数量,阅读数量。集群环境下的session共享。二、Hash 场景各种 商城购物车 (淘宝,京东。。)设计思路购物车绑定了 userId。商品id作为feild,商品数量作为value。模拟过程// 初始化购物车数据hmset userId:1 prod:1 1 prod:2 3 prod:3 4// 增加商品 prod:

2021-06-08 09:21:02 139

原创 Redis入门

Redis入门操作。一、Redis的安装Redis安装请查看 Linux(CentOS7)安装Redis5.0。二、Redis是什么Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。1、Redis安装在磁盘。2、Redis数据存储在内存。三、快速理解Redis使用Redis是一种键值对(key-value)高性能缓存数据库,类似于Java中的Map<key, value> 。四、Redis

2021-06-07 09:13:00 166 2

原创 Linux(CentOS7)安装Redis5.0

记录一下自己在 Linux(CentOS 7) 下安装 Redis5.0.8 过程。一、准备工作1. 下载Redis从 Redis官网 下载后上传CentOS目录 /usr/local ,当然,你也可以使用 wget 命令下载。2. 安装编译环境yum -y install gcc-c++3. 开放访问端口如果需要远程访问,需要打开访问端口,云服务器还需控制台配置安全组访问。# 查看想开的端口是否已开,若此提示FirewallD is not running, 表示为不可知的防火墙 需要

2021-06-04 09:13:20 194

原创 Linux(CentOS7)下二进制安装MySQL5.7.26

记录一下自己在 CentOS7 下二进制安装 MySQL5.7.26 的过程,之前使用 Linux(CentOS7)下rpm安装MySQL8.0.16 之后发现 rpm 方式安装不利于维护,也不利于单机安装 MySQL 多实例,所以这里记录一下二进制安装过程,理论上8.0二进制安装按此方法也没问题,毕竟官方文档 5.7和8.0 版本的安装文档步骤都一致。一、准备工作1. 下载MySQL所需要的安装包从 MySQL官网 下载,上传至 CentOS 系统 /usr/local/ 目录下,当然你也可以使用

2021-06-03 15:38:40 224

原创 Linux(CentOS7)下rpm安装MySQL8.0.16

记录一下自己在 CentOS7 下 rpm 安装 MySQL8.0.16 的过程。一、准备工作1. 下载MySQL所需要的安装包从 MySQL官网 下载,上传至 CentOS 系统 /usr/local/MySQL 目录下,当然你也可以使用 wget 命令直接下载至 CentOS,此处使用的 8.0.16 版本。# 你想要的版本Product Version: 8.0.16# CentOS选择Red Hat Enterprise Linux / Oracle LinuxOperating S

2021-06-02 15:07:01 293

原创 Linux(CentOS7)下配置多个tomcat

记录 Linux(CentOS7) 下配置多个 tomcat 的操作过程。一、下载tomcat前提:安装配置好jdk环境,未配置可参考Linux(CentOS7)下安装jdk1.8。从 tomcat官网 选择你想要的 tomcat 版本下载后上传 Linux,我的版本是 apache-tomcat-8.5.41.tar.gz,把 tomcat 放在 /usr/local/tomcat 目录下,可根据需要修改。二、解压并重命名的tomcat解压 tomcat。tar -zxvf apache

2021-06-02 09:49:36 442

原创 Linux(CentOS7)下安装jdk1.8

Linux(CentOS7) 下安装 jdk1.8 操作过程。一、检查是否自带jdkrpm -qa|grep java如果存在则用下面命令删除,xxx yyy zzz代表查询出来的自带jdk名称,名称中间用空格隔开,至今为止没碰到过自带的。rpm -e --nodeps xxx yyy zzz二、下载jdk上传推荐从 jdk官网 下载,虽然下载需要登录(密码设置还麻烦),并且下载速度不是很快,但是安全,此处使用 jdk8 的最后一个商业免费版本 jdk-8u202-linux-x64.ta

2021-06-01 16:46:52 376

原创 Linux(CentOS7)下Nginx安装

记录一下 Linux(CentOS7) 下 Nginx 安装过程一、准备工作版本说明:Linux版本:CentOS 7 64位Nginx版本:nginx-1.20.01. 下载安装文件采用源码包方式安装,当然使用 yum 方式安装也可以,此处使用源码包安装。进入目录(个人习惯/usr/local),下载安装文件,如果云服务器下载速度过慢也可本地下载后上传。cd /usr/localwget http://nginx.org/download/nginx-1.20.0.tar.gz

2021-06-01 10:43:43 160

空空如也

空空如也

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

TA关注的人

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