自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

z13197919100的博客

沉淀自己,记录技术的点滴

  • 博客(38)
  • 问答 (5)
  • 收藏
  • 关注

原创 Redis分布式锁 - 基于Jedis和LUA的分布式锁

先基于单机模式,基于Jedis手工造轮子实现自己的分布式锁。首先看两个命令:Redis分布式锁机制,主要借助setnx和expire两个命令完成。setnx是set的简写。将key的值设为value,当且仅当key不存在;若给定的key已经存在,则 setnx不做任何动作。expire 命令为key设置生存时间,当key过期时生存时间为0 ),它会被自动删除。其格式为:通过Redis的setnxexpire。

2024-04-24 23:20:12 562

原创 分布式锁原理与实战一:分布式锁简介

在单体的应用开发场景中,在多线程的环境下,涉及并发同步的时候,为了保证一个代码块在同一时间 只能由一个线程访问,我们一般可以使用 synchronized 语法和去保证,这实际上是本地锁的方式。也就是说,在同一个 JVM内部,大家往往采用或者Lock的方式来解决多线程间的安全问 题。但在分布式集群工作的开发场景中,在 JVM之间,那么就需要一种更加高级的锁机制,来处理种跨 JVM 进程之间的线程安全问题。解决方案是:使用分布式锁。

2023-06-08 00:02:04 351

原创 分布式锁原理与实战四:ZooKeeper分布式锁Java代码实现

如果自己没有获得锁,则要监听前一个节点,此时需要找出前一个节点的路径,并保存在 prior_path 成员中,供后面的 await()等待方法去监听使用。这里,仅仅去监听自己前一个节点的变动,而不是其他节点的变动,提升效率。一旦队列中的后面的节点,获得前一个子节点变更通知,则开始进行判断,判断自己是否为当前子节点列表中序号最小的子节点,如果是,则认为加锁成功;因为,在获取的远程子节点列表中的其他路径返回结果时,返回的都是短路径,都只有最后一层路径。(2)判断是否是第一个,如果是第一个,则加锁成功。

2023-06-07 23:47:25 848

原创 分布式锁原理与实战三:ZooKeeper分布式锁的原理

理解了经典的公平可重入锁的原理后,再来看在分布式场景下的公平可重入锁的原理。通过前面的分析,基本可以判定:ZooKeeper 的临时顺序节点,天生就有一副实现分布式锁的胚子。为什么呢?ZooKeeper的每一个节点,都是一个天然的顺序发号器。在每一个节点下面创建临时顺序节点(EPHEMERAL_SEQUENTIAL)类型,新的子节点后面,会加上一个次序编号,而这个生成的次序编号,是上一个生成的次序编号加一。例如,有一个用于发号的节点 “/test/lock”

2023-06-07 22:57:23 637

原创 分布式锁原理与实战二:公平锁和可重入锁的原理

另外,先到先得,号排在前面的人先取到水,取水之后就轮到下一个号取水,挺公平的,说明它是一种公平锁。总之,如果取水时以家庭为单位,则同一个家庭,可以直接复用排号,不用从后面排起重新取号。假定,取水时以家庭为单位,家庭的某人拿到号,其他的家庭成员过来打水,这时候不用再取号,如图。排在1号的家庭,老公取号,假设其老婆来了,直接排第一个,正所谓妻凭夫贵。故事发生在一个没有自来水的古代,在一个村子有一口井,水质非常的好,村民们都抢着取井里的水。(3)先到的排在前面,那些后到的,一个一个挨着,在井边排成一队。

2023-06-07 22:36:25 700

原创 内存泄漏和内存溢出的区别

内存泄漏和内存溢出的区别

2022-05-11 22:31:47 264

原创 为什么hashmap的key不使用对象而是使用字符串

为什么hashmap的key不使用对象而是使用字符串

2022-05-11 22:15:50 863

原创 MySQL 组合索引及覆盖索引

MySQL 组合索引及覆盖索引

2022-05-11 21:49:02 5834

原创 使用 mycat 实现数据库表按月分表

使用 mycat 实现数据库表按月分表

2022-04-01 18:33:55 1600 4

原创 完美解决renren-fast-vue执行npm install时因node版本过高导致node-sass报错的问题

升级sass的版本再执行npm install,如果出现npm WARN tar ENOENT: no such file or directory, ..../node_modules/.staging/先删除 package-lock.josn,再 npm install(1条消息) Vue解决报错9_人人开源renren-fast-vue执行npm install报错解决(sass的版本太低而node的版本太高导致)_xiaosi的博客-CSDN博客https://blog.csdn.

2021-12-27 15:17:42 1942

原创 JDK 8 新特性

JDK1.8的新特性1. 前言JDK1.8已经发布很久了,在很多企业中都已经在使用。并且Spring5、SpringBoot2.0都推荐使用JDK1.8以上版本。所以我们必须与时俱进,拥抱变化。Jdk8这个版本包含语言、编译器、库、工具和JVM等方面的十多个新特性。在本文中我们将学习以下方面的新特性:2. Lambda表达式函数式编程Lambda 表达式,也可称为闭包...

2020-04-13 15:00:50 143

原创 Oracle导入数据到指定用户时遇到IMP-00058: 遇到 ORACLE 错误 12154 ORA-12154: TNS: 无法解析指定的连接标识符 IMP-00000: 未成功终止导入

在网上看见一个帖子说是导入本地数据不用加 @ ,试了一下果然有效。修改后为:最后输入正确的用户名、密码,导入开始。

2020-03-31 15:10:39 2084

原创 导入项目后,import javax.servlet 出错解决办法

是因为工程里面web-inf/lib目录下少了相应的包引起的;在WEB-INF/lib目录下缺少servlet-api.jar。解决方法:将tomcat的

2020-03-31 15:03:24 1848

原创 jdk1.8 无法切换到 jdk1.7 ?

之前系统上装的 jdk 是 1.8 版本的,由于项目需要,需要用 1.7 版本的 jdk,奈何在修改环境变量之后,通过命令行 java -version 查询出的版本还是 1.8,后来找了下原因,发现是因为 jdk 1.8 在安装的时候会在系统变量 Path 里加上了C:\ProgramData\Oracle\Java\javapath;执行的指令在系统变量中搜寻命令时最先找到的就是 C:\P...

2020-03-31 09:54:45 420

原创 JavaMail的使用

首先导入坐标 <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> </dependency> 1.只发送正文// 创建邮件服务连接Session session = S...

2020-02-10 12:28:40 212

转载 为什么要用 MQ?

1、解耦 2、异步 3、削峰 使用了消息队列会有什么缺点? 消息队列如何选型? 如何保证消息队列是高可用的? 如何保证消息不被重复消费? 如何保证消费的可靠性传输? RabbitMQ kafka 如何保证消息的顺序性? 总结 一个用消息队列的人,不知道为啥用,有点尴尬。没有复习这点...

2019-11-07 18:44:54 173

原创 JVM 线上故障排查基本操作

前言 CPU 飚高 内存问题排查 总结 前言 对于后端程序员,特别是 Java 程序员来讲,排查线上问题是不可避免的。各种 CPU 飚高,内存溢出,频繁 GC 等等,这些都是令人头疼的问题。楼主同样也遇到过这些问题,那么,遇到这些问题该如何解决呢? 首先,出现问题,肯定要先定位问题所在,然后分析问题原因,再然后解决问题,最后进行总结,防止下...

2019-11-07 18:36:09 134

转载 什么是 YGC 和 FGC?

1.YGC和FGC是什么YGC:对新生代堆进行gc。频率比较高,因为大部分对象的存活寿命较短,在新生代里被回收。性能耗费较小。FGC:全堆范围的gc。默认堆空间使用到达80%(可调整)的时候会触发fgc。以我们生产环境为例,一般比较少会触发fgc,有时10天或一周左右会有一次。2.什么时候执行YGC和FGC a.edn空间不足,执行 young gc;...

2019-11-07 18:34:44 6831

原创 MySQL中replace into 、insert into 、insert ignore into 的区别。

插入数据的表必须有主键或者是唯一索引!否则 replace into、insert ignore into、insert into会直接插入数据,这将导致表中出现重复的数据。-- replace into -- replace into 跟 insert 功能类似,不同点在于: 1. replace into 首先尝试插入数据到表中,如果发现表中已经有此行数据(根据主键...

2019-03-05 10:33:15 642

原创 解决eclipse配置文件乱码的问题

eclipse → Windows → Preferences → General → ContentType → Text → Java Properties File → 将Default encoding 的值改为UTF-8注意:不要落了第二步!!! 

2019-02-19 11:46:03 3344

原创 Centos安装rabbitMQ

0.安装文件准备首先将安装包上传到 /home/leyou/rabbit目录:这个是RabbitMQ的安装包:1.安装Erlang我们并没有提供Erlang安装包,直接采用yum仓库安装:yum install esl-erlang_17.3-1~centos~6_amd64.rpmyum install esl-erlang-compat-R14B-1.el6.noarch.rp...

2019-02-15 17:33:37 133

原创 Centos下安装FastDFS

1. Centos下安装FastDFS1.1 上传将课前资料中的文件上传到linux下的/home/leyou/fdfs目录:1.2 安装依赖FastDFS运行需要一些依赖,在课前资料提供的虚拟中已经安装好了这些依赖,如果大家想要从头学习,可以按下面方式安装:1.2.1 安装GCC依赖GCC用来对C语言代码进行编译运行,使用yum命令安装:sudo yum -y install g...

2019-02-15 17:17:23 2129

原创 Java基础面试题

Introduction目录Introduction 一, Java语言特点二, Java的基本数据类型有哪些, 各占几个字节三, long(8)与float(4)的取值范围谁大谁小?四, Java语言中的字符 char可以存储一个中文汉字吗? 为什么呢?五, 看下面的程序是否有问题,如果有问题,请指出并说明理由。六, 请自己实现两个整数变量的交换(不需要定...

2019-02-15 16:30:07 318

原创 springboot动态设置定时任务Cron参数表达式

由于项目中有多个定时任务,cron表达式在代码里面维护起来略显困难,故将cron表达式写在配置文件中。application.properties:1.配置文件 system.bEnableStatisticCurrentCron=1相对代码示例 @Scheduled(fixedDelayString = "${system.bEnableStatisticCurren...

2019-02-15 10:17:23 3656 1

原创 阿里巴巴中间件canal介绍和利用canal同步MySQL和Redis数据

canal简介         提供了另一种基于发布/订阅模式的同步机制,通过该框架我们可以对MySQL的binlog进行订阅,这样一旦MySQL中产生了新的写入、更新、删除等操作,就可以把binlog相关的消息推送至redis,redis在根据binlog中的记录,对redis进行更新。值得注意的是,MySQL的binlog需要手动打开,并且不会记录关于MyS...

2019-02-14 11:07:36 1948

原创 数据库值为数字而程序中显示为布尔值

第一次遇到这种问题,程序中查询数据库数据值变为布尔类型解决方法:            数据库中的该字段为tinyint,Tinyint(1) 就只用来保存 bool 值 只有0和1,可以讲tinyint长度放长,或改成int。...

2018-04-27 15:40:26 1085

原创 查询某个时间段内每隔十五分钟的数据(整15分钟的倍数有数据)

需求:选定时间段,每隔十五分钟查询一次数据SELECT   DATA_TIME FROM、  DR_DC_RIPPLE_HOUR_201804 WHERE DATA_TIME BETWEEN '2018-04-17 00:00:00'   AND '2018-04-17 23:59:59'   AND DATE_FORMAT(DATA_TIME, '%i') % 15 = 0   AND DATE...

2018-04-24 17:37:13 17555 2

转载 详解Java的MyBatis框架中SQL语句映射部分的编写

这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下1.resultMapSQL 映射XML 文件是所有sql语句放置的地方。需要定义一个workspace,一般定义为对应的接口类的路径。写好SQL语句映射文件后,需要在MyBAtis配置文件mappers标签中引用,例如:?123456&lt;map...

2018-02-24 10:08:24 367

转载 Mybatis框架中mapper配置和foreach标签的使用

foreach标签下面介绍一下一个mapper配置文件中的foreach标签(注意,要跟着前面的总结来看,这里使用的例子是结合前面的工程写的,大部分代码没有再赘述)foreach的作用是向sql传递数组或List,mybatis使用foreach解析1.1需求在用户查询列表和查询总数的statement中增加多个id输入查询。sql语句如下:两种方法:SELECT * FROM USER WHER...

2018-02-24 09:40:31 8643

原创 获取今天零点的时间

import java.util.Calendar;import java.util.Date;import org.apache.commons.lang3.time.DateUtils;public class Test { public static void main(String[] args) { // 获取今天零点的时间 Date startDate = D

2018-02-07 11:02:31 1674

转载 mybatis中的@Param

用注解来简化xml配置的时候,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中  我们先来看Mapper接口中的@Select方法12345678910111213package M

2018-02-07 10:47:04 328

转载 Java定时任务的实现

Spring定时任务的几种实现近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合spring框架来介绍。一.分类从实现的技术上来分类,目前主要有三种技术(或者说有三种产品):Java自带的java.util.Timer类,这个类允

2018-02-06 11:06:58 139

转载 web.xml配置详解

一、web.xml配置文件常用元素及其意义预览 1 web-app> 2 3 定义了WEB应用的名字--> 4 display-name>display-name> 5 6 声明WEB应用的描述信息--> 7 description>description> 8 9 context-param元素声明应用范围内的初始化

2018-02-06 09:26:48 120

原创 mysql 如何获取当前时间 前、后一小时的时间?

 取当前时间:   mysql&gt; select now();              +---------------------+  | now()               |  +---------------------+  | 2011-08-08 13:59:30 |  +---------------------+  前一小时的时间:...

2018-02-02 10:25:46 35244 6

原创 JSON.parseArray()用法

将从redis中获得的字符串直接转换成对象从redis中得到的数据:[{    "ct_pt": "xxx",    "data_time": "xxx",    "mp_id": "xxx",    "mp_name": "xxx",    "pos_p_e_total_e": "xxx",

2018-01-31 20:48:15 105115 14

转载 Java “Unhandled exception type Exception”错误提示

原文地址:http://www.olnote.com/itlife/note/100000089.html在Java中除了RuntimeException及其任何子类,其他异常类都被Java的异常强制处理机制强制异常处理。    关于那些被强制异常处理的代码块,必须进行异常处理,否则编译器会提示“Unhandled exception type Exception”错误警告。

2018-01-24 11:09:36 6372

原创 java.lang.OutOfMemoryError异常解决方法

java.lang.OutOfMemoryError异常解决方法   原因:常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据; 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收; 3.代码中存在死循环或循环产生过多重复的对象实体; 4.使用的第三方软件中的BUG; 5.启动参数内存值设定的过小;

2018-01-22 15:45:31 58376 1

原创 Mybatis初级讲解

1. 总结jdbc开发的问题1.     频繁创建数据库连接对象、释放,容易造成系统资源浪费,影响系统性能。企业项目中可以使用连接池解决这个问题,但是使用Jdbc需要自己实现连接池。mybatis已经提供了连接池。2.     sql语句定义、参数设置、结果集处理存在硬编码。企业项目中,sql语句变化的可能性较大,一旦发生变化,需要修改Java代码,系统需要重新编译,重新发布。不好

2018-01-02 09:27:43 259

空空如也

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

TA关注的人

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