自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

汐日南莘的博客

当你只有一个目标时,整个世界都会为你让路

  • 博客(58)
  • 资源 (12)
  • 收藏
  • 关注

原创 java文件压缩加密,使用流的方式

Java加密压缩,使用流输入输出压缩文件

2023-11-20 00:36:23 701

原创 Java线上常见问题排查方法

CPU问题cpu问题是比较常见的问题,cpu负载过高会导致系统接口卡顿,响应变慢,对于造成cpu过高的大致有以下几种情况。JVM频繁GC导致cpu高。存在死循环,导致cpu负载过高。执行其他消耗cpu多的操作,比如打印过多的debug日志,循环过多。在实际开发中,遇到比较多的是频繁gc,尤其是频繁Full GC导致cpu过高。频繁Full GC主要由以下几种情况。老年代空间不足metaspace方法区空间不足System.gc()针对cpu过高的常用排查方法由:使用arthas

2022-04-20 01:40:00 1914

原创 一次Full GC导致CPU飙升的排查过程

一次FULL GC导致CPU飙升,系统卡顿的问题排查过程,JVM, FULL GC

2022-04-10 01:01:30 2080

原创 分布式一致性协议

分布式一致性协议主要分为单主协议,多主协议。它们的核心区别在于是否允许多个节点发起写操作,单主协议只允许由主节点发起写操作,因此它可以保证操作有序性,一致性更强

2022-03-23 00:02:02 12415

原创 如何解决 if-else 过多的问题

前言 if-else基本上是所有高级语言都有的语句。Java,Python,Go,C++。可以说if-else是编程 语言种必须用的。基本上大大小小的需求都需要用到if-else。if-else不能滥用,不要让自 己变成只会写if-else的程序员。if-else滥用会导致代码可读性,维护成本增高。我们需要 使用好if-else来。使用卫语句,提前return。提前return减少不必要的判断,减少If-else嵌套层次。优化前: if(a != null){

2020-07-20 00:55:17 5697 1

原创 Redis缓存一致性问题解决方案

在开发中经常使用到redis。redis作为缓存可以加快程序响应速度。从redis缓存中读取数据大致需要0.5ms左右,从数据库需要几毫秒。大致业务流程如下图:每次设置缓存时都有一个过期时间,根据不同业务,过期时间也不一致,设置过期时间能保证缓存数据最终一致性问题。这样能保证在更新数据库成功,更新缓存失败,或者缓存了脏数据时,缓存过期后,能正确的读取到最新的值。我们常见的三种缓存更新方案:...

2020-04-27 12:05:20 11423 5

原创 Python迁移MySQL数据到MongoDB和Elasticsearch

在工作中经常遇到一些需要批量导入数据到NoSql中。比如我们上线一个新的功能,需要把mysql的一些数据批量导入到Elaticsearch或者mongodb中。这里使用Python代码简洁,方便高效。根据需求变更参数,sql执行以下脚本即可。import pymysql, jsonimport pymongofrom elasticsearch import Elasticsearch,...

2020-04-09 00:55:07 1870

原创 使用Redis实现分布式可重入锁

在分布式应用中经常需要用到分布式锁。redis使用set命令来实现分布式锁SET key value [EX seconds] [PX milliseconds] [NX|XX]直接使用该命令构建的redis分布式锁是不像jdk的reentrantlock具有可重入性的,使用线程的ThreadLocal变量存储当前持有锁的计数,可以实现redis分布式锁的可重入性。另外Redis分布式锁有...

2020-03-26 23:21:17 1511

原创 使用Redis HyperLogLog统计UV浏览用户数

在开发中,经常遇到要统计某个页面的访问用户数UV。我们很容易想到使用Redis Set来统计,当用户数不多的时候确实可以,本人开发的项目中药统计一个月面一个月用户的访问数量,月活跃用户数量在千万级别以上,如果用Set即使使用Hash打散存储key也需要700-800MB的redis内存,这明显很浪费.这种场景中使用HyperLogLog进行去重统计是非常合适的.HyperLogLog算法是一种非...

2020-03-24 22:49:47 1840

转载 Redis的数据结构和相关常用命令

本节中将介绍Redis支持的主要数据结构,以及相关的常用Redis命令。本节只对Redis命令进行扼要的介绍,且只列出了较常用的命令。如果想要了解完整的Redis命令集,或了解某个命令的详细使用方法,请参考官方文档:https://redis.io/commandsKeyRedis采用Key-Value型的基本数据结构,任何二进制序列都可以作为Redis的Key使用(例如普通的字符串或一张JP...

2019-06-18 16:41:53 212

原创 Spring aop获取目标对象,方法,接口上的注解

在开发中,我们经常需要使用spring aop自定义注解来实现一些特定的功能。比如权限拦截,多数据源动态切换。在编写切面通知实现类中我们需要获取到注解上的值内容。比如方法上的注解,类上的注解,接口上的注解。AOP的基本概念:切面(Aspect) :通知和切入点共同组成了切面,时间、地点和要发生的“故事”。连接点(Joinpoint) :程序能够应用通知的一个“时机”,这些“时机”就是连接...

2018-11-25 22:51:54 25716 9

转载 Java字符串相似度匹配

原文:http://wdhdmx.iteye.com/blog/1343856#bc2319361package com.xfl.boot.common.utils;/** * Created by XFL * time on 2018/11/16 0:10 * description: */public class SimilarityUtils { public sta...

2018-11-16 00:30:31 15908 3

原创 Java单例的实现,单例模式为什么需要volidate

单例模式可以说是大多数开发人员在实际中使用最多的,常见的Spring默认创建的bean就是单例模式的。单例模式有很多好处,比如可节约系统内存空间,控制资源的使用。其中单例模式最重要的是确保对象只有一个。 常见单例模式的实现方式。主要是区分懒加载,非懒加载。 非懒加载实现方式: 该方式使用的是类加载机制确保系统只会生成一个对象。但是该方式没有实现懒加载。public class TestS...

2018-08-28 00:27:58 3685 1

原创 springboot使用hibernate-validator校验请求参数

作为Web后台开发人员,对于api接口进行参数校验是非常必要的操作。可以说不进行参数校验是不负责任的开发。对参数校验才能使接口更加安全健壮。每个业务接口都有大量的参数需要校验。如果将这些参数放置到业务中使用if,else之类的判断则会显得代码不简洁。多了很多不必要的参数校验代码。验证代码繁琐,重复劳动。 在开发中使用hibernate-validator框架进行参数校验能非常友好的解决代码繁琐,...

2018-08-13 00:33:00 3104 1

原创 使用Spring的Aop拦截请求参数,请求头信息,响应结果,响应时间

在Web应用中线上请求的监控非常重要,在大部分的应用中对于请求参数返回参数,响应时间,请求头信息都是非常重要的,对于线上问题排查是非常重要的。这里使用Spring aop来实现对每个请求监控,打印请求参数,返回参数等等。在实际应用中随着线上应用的稳定需要对uri做监控管理,哪些需要监控,哪些不需要等等设置,如果稳定的请求监控会消耗大量的性能。最好能够对每个请求实体返回实体实现系列化接口,重...

2018-05-29 01:03:01 24091 4

原创 解决Java中Long类型转换成Json时,在Js代码调用时精度丢失的问题

在Java中18位或者更高位的Long类型转化成json,js调用时会存在精度丢失的问题。Spring MVC中默认的消息转换器时MappingJackson2HttpMessageConverter,使用的是Jackson系列化的,也就是ObjectMapper。所以我们也可以设置ObjectMapper将所有的Long类型转换成String类型,但是这个方法粒度大,会将所有的Long类型都转换...

2018-03-20 23:37:25 2878

原创 使用logstash-6.2.2和logstash-input-jdbc插件实现mysql数据同步到Elasticsearch

首先需要安装Elasticsearch,安装方法在上一篇文章中有了 http://blog.csdn.net/u010180738/article/details/79423341logstash的安装和elasticsearch版本需要一致,这里安装6.2.2最新版本的,需要jdk1.8版本及以上,注意elasticsearch插件2.X和6.X版本相差较大,并且没有向下兼容。 参数和配...

2018-03-07 11:24:58 4367 1

转载 Java中CAS详解

在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制,但是volatil...

2018-03-04 22:16:08 193

原创 Linux环境下elasticsearch-6.2.2安装以及配置

Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。 Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。安装Elasticsearch-6...

2018-03-02 14:55:45 9330

原创 elasticsearch.yml配置解析

cluster.name: my-applicationcluster.name指定集群的名称,同一个集群的节点要设置在同一个集群名称。如果不配置该项,系统默认取elasitcsearchnode.name指定节点的名称,同一集群的节点名称不能相同,如果不配置该项,系统会随机分配一个名称。 node.attr.rack指定节点的部落属性,这是一个比集群更大的范围。 node.maste...

2018-03-02 14:14:36 1208

原创 RedisTemplate系列化器之GenericJackson2JsonRedisSerializer

Redis作为高速缓存数据库,目前应用非常广泛。RedisTemplate是Spring提供用于操作redis数据库的一个类。 将数据存放到Redis中,以及数据读取。这里必然涉及到数据的系列化和反系列化。RedisTemplate默认的系列化类是JdkSerializationRedisSerializer,用JdkSerializationRedisSerializer序列化的话,被序列化的...

2018-02-27 01:04:08 30061 2

原创 使用redis 实现分布式锁

使用redis 实现分布式锁在有些需要高可用的场景中,保证并发量的情况下需要使用分布式锁来做控制,保证应用的可靠性。我们知道jdk提供了一些常用的锁比如ReentrantLock,ReentrantReadWriteLock,synchronized。对于这些锁的实现这里就不详细介绍了,在使用过程中这些锁锁的是对象,在单服务器的时候有用。但是现在基本都不是单一服务器了,一般都会有多台服务器。对

2018-01-14 23:59:34 371

原创 使用FutureTask执行并行耗时任务

在实际开发中,一般任务都有串行和并行之分。比如走完A步骤之后才能在走B步骤,这个属于串行。比如登录注册操作,只有先获取验证码,然后在使用验证码登录。又比如为了获取一个商品的价格,我们可以从多个渠道获取,从不同渠道获取商品价格是属于并行任务的,多个渠道之间完全没有任何的关系。这个时候我们一般都要搜集结果。FutureTask就是非常适合这种情景的。 主要api有get,run,canc...

2017-11-06 00:04:07 2699

原创 Spring嵌套事物,事物的传播之REQUIRES_NEW

很久没写博客了,大概是目前这份工作本身就能让我学到挺多东西吧,所以没去写博客了,希望以后的自己,只要工作内容是开发就要保持一个月至少一篇的博客吧。 > 之前写过一篇文章是关于spring事物的传播行为的。 > 今天这篇文章主要是将RROPAGATION_REQUIRES_NEW传播行为在实际项目中的使用。该事物会开启一个新的事物也就是创建一个事物和之前的事物没有任何关系。 关于PROPAG

2017-10-23 00:23:07 4030 2

转载 HashMap详解

原文链接:https://zhuanlan.zhihu.com/p/21673805 摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功

2017-05-21 22:25:11 470

转载 Java四种线程池的使用

Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。 n

2017-05-17 23:19:50 234

原创 Java中的ThreadLocal

ThreadLocal其实,它就是一个容器,用于存放线程的局部变量。为每个线程保留一份变量副本。 我们来看下面的代码: 数据库连接工具package com.xfl.concurrent;import java.sql.Connection;import java.sql.DriverManager;/** * Created by XFL * time on 2017/5/16 23:

2017-05-17 00:35:46 253

原创 Java动态代理

在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface)、另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的。 java的动态代理应用非常广泛,比如Spring的aop,在Spring中利用aop可以进行事务管理,而Spring的aop的实现原理就是java的动态代理。分布式服务框架dubbo也是利用了j

2017-05-15 23:24:25 249

原创 使用Java实现简易RPC框架

RPC其全程为Remote Process Call,即为远程过程调用。RPC将传统的本地调用转换为调用远端的服务器的方法,给系统的处理能力和吞吐量带来了极大的提升。 随着项目的发展,业务越来越复杂,单个项目的话,会非常复杂,且不易维护,如果单个项目挂了就会导致整个系统都无法使用,但是把复杂的业务拆分为多个小业务就方便系统的维护与开发。这种情况下就会有系统之间的相互调用。当日调用量不大的时候

2017-05-14 23:24:17 1930

原创 JedisSentinelPool配置说明

Jedis是Java最常用的用于连接Redis的客户端。也是Redis官方推荐的Redis连接客户端之一。一般在项目中是使用Spring来管理jedis的连接池的,利用Spring ioc容器来管理。 <!--配置Jedis连接池--> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> <pr

2017-03-21 23:38:07 8356

原创 Spring RestTemplate的使用(解决put,delete方法无返回值问题)

Spring提供了RestTemplate,可以利用RestTemplate调用REST资源。 同时也可以用作服务端到服务端发送请求。 在Java后台开发中,也可以使用RestTemplate来测试接口。 RestTemplate支持get,put,delete,post操作。package com.test;import org.springframework.http.ResponseEn

2017-03-11 23:03:42 17666 2

原创 Redis常用命令(String数据类型的操作)

在上一篇文章中我们介绍了redis的常用命令。 Redis一般在使用时是会集群使用的。采用的是主从模式,一般都是主服务器负责写操作,从服务器负责读操作,从服务器不断的从主服务器复制更新数据。比如当一条数据过期时主服务器删除数据之后,会向所有的从服务器显示的发送一条删除命令,确保从服务器的数据能及时更新。当主服务器判断为下线时,sentinel会选取从服务器中的一个为新的主服务器,原先的主服务器

2017-03-04 23:59:32 373

原创 Java浮点数计算精确度问题

在Java中如果使用浮点型小数进行计算,尤其是商业计算将会出现奇怪的结果。比如下面的程序:System.out.println(30.29 - 1.01);我们期望它输出的结果是29.28,但是实际结果确是:29.279999999999998。 首先解释下为什么,为什么整数的时候不会呢,只有浮点数float,double才会呢,而且有的时候会,有的时候不会? 比如下面的程序:System.ou

2017-02-26 18:02:57 504

原创 Redis常用命令(String数据类型的操作)

为了方便操作这里可以下载Redis的Windows 64位的版本 下载地址:http://download.csdn.net/detail/u010180738/9667899Redis是目前非常流行的NoSql数据库之一。主要用于在Web应用中充当缓存,比如存放用户信息(一般存放用户信息时都会使用多台Redis服务器,使用主从服务器,主服务器用于写操作,从服务器用于读操作)。Redis是非常流行

2017-02-20 23:33:22 5047

转载 Java中static变量作用和用法详解

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何

2017-02-12 12:06:37 298

原创 Java中的try catch finally

一直以为自己对try catch足够了解了,但是在看到这篇博客后才意识到自己了解的仅仅是皮毛。 首先要知道f inally不是一定会执行的.下面的情况下finally就肯定不会执行的。 (1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行, 这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。

2016-12-03 22:14:53 561

原创 Spring集成Dubbo

在上一篇文章中介绍了Dubbo。 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案。它主要解决了在高访问量的情况下进程间的通讯问题,底层使用了socket来实现。我们知道消费者consumer调用服务者提供的服务时,因为两个程序不在同一个进程,所以不能够和同一个应用中那样直接调用,dubbo为我们处理好了通讯的问题。 当调用远程RPC服务时: •首先

2016-10-30 00:28:16 411

原创 Dubbo

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,是阿里巴巴的一个开源项目。 阿里巴巴的Dubbo的user guide: 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。 单一应用架构 当网站流量很小时,只需一个应用,将

2016-10-26 23:21:38 253

转载 HTTP中GET与POST的区别

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。当你在面试中被问到这个问题,你的内心充满了自信和喜悦。 你轻轻松松的给出了一个“标准答案”:GE

2016-10-25 23:09:01 183

原创 Java中的Final关键字,区分基本数据类型与引用类型,值传递与引用传递

Final可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了。对于基本数据类型声明为Final后其值无法再次改变,对于引用类型,可以改变改引用的内容,但是无法改变这个引用,即不能再次指向新的引用地址,也就是重新赋值,new一个新的对象。首先我们来看看基本数据类型与引用类型的区别: 如上如所述; 对于基本类型,变量中保存的是其值。对于引用类型,变量中保存的

2016-10-20 23:50:55 2927 2

nginx-1.8.0(windows64位版本)

nginx-1.8.0(windows64位版本),nginx.bat批处理需要修改nginx目录

2018-02-03

redis-windows64版本

连接时未设置密码,用户名mymaster,双击startSentinel.bat打开哨兵,双击startServer.bat打开服务 双击redis-cli.exe打开客户端

2017-06-08

阿里巴巴Java开发手册v1.2.0

阿里巴巴Java开发手册v1.2.0

2017-06-04

Java与模式

《Java与模式》是一本讲解设计原则以及最为常见的设计模式的实用教材,目的是为了工作繁忙的Java系统设计师提供一个快速而准确的设计原则和设计模式的辅导。全书分为55章,第一个章节讲解一个编编程模式,说明此模式的用意、结构,以及这一模式适合于什么样的情况等。每一个章节都附有多个例子和练习题,研习这些例子、完成这些练习题可以帮助读者更好地理解所讲的内容。大多数的章节都是相对独立的,读者可以从任何一章开始读起。为了满足不同程序的读者的需要,书中提供了一些标为“专题”的章节,不阅读这些章节,对阅读书中的标准章节没有影响。

2017-05-26

Spark快速大数据分析(带书签)

Spark快速大数据分析

2017-05-26

redis实战(带书签) 完整版下载

redis实战,完整版

2017-05-15

shiro教程-张开涛(带完整书签)

shiro教程

2017-05-12

大型网站系统与java中间件实践 pdf下载 高清完整版

大型网站系统与Java中间件实践

2017-05-10

redis设计与实现第二版(带书签)

redis设计与实现第二版(带书签)

2017-03-04

redis windows 64位版本

连接时未设置密码,用户名mymaster,双击startSentinel.bat打开哨兵,双击startServer.bat打开服务

2016-10-30

zookeeper windows版本

zookeeper,windows 64位版本

2016-10-30

百度实习管理员问卷答案

百度知道电脑网络管理员问卷参考答案 里面有详细的参考答案

2013-05-29

空空如也

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

TA关注的人

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