Java
文章平均质量分 89
叮叮丶
这个作者很懒,什么都没留下…
展开
-
基于Zookeeper实现分布式锁
一、Zookeeper相关概念基于Zookeeper实现分布式锁,主要依赖于它的【瞬时有序节点】,当多个客户端并发创建瞬时有序节点时,会自动为我们生成有序的节点,例如定义子节点名为 order_ ,则生成的节点为 order_00000001,下一个节点为order_00000002,为我们保证有序。利用Zookeeper节点的递增性,可以规定节点编号最小的那个获得锁。当编号最小的那个释放锁后,通知第二个节点获得锁(节点监听机制),以此类推,首尾相连。所以说Zookeeper天然支持分布式锁。..原创 2020-10-12 16:10:19 · 283 阅读 · 1 评论 -
分布式事务基础与解决方案
一 、本地事务在计算机系统中,更多的是通过关系型数据库来控制事务,这是利用数据库本身的事务特性来实现的,因此叫数据 库事务,由于应用主要靠关系数据库来控制事务,而数据库通常和应用在同一个服务器,所以基于关系型数据库的事务又被称为本地事务。数据库事务的四大特性 ACID:A(Atomic):原子性,构成事务的所有操作,要么都执行完成,要么全部不执行,不可能出现部分成功部分失败的情况。C(Consistency):一致性,在事务执行前后,数据库的一致性约束没有被破坏。I(Isolation)原创 2020-09-21 18:12:59 · 315 阅读 · 0 评论 -
Spring深入理解
一、Spring的IOC机制和AOP机制IOC是典型的工厂模式,通过sessionfactory去注入实例。spring ioc的实现过程工程中通过maven引入一些spring框架的依赖,ioc功能 tomcat启动时,启动spring容器 spring ioc,spring容器,根据xml配置,或者是你的注解,去实例化bean对象,根据xml配置或者注解,对bean对象之间的引用关系,去进行依赖注入。spring ioc底层实现的核心技术是反射,他会通过反射的技术,直接根据你的类去自己原创 2020-08-27 16:19:55 · 370 阅读 · 0 评论 -
Java内存模型
一、Java内存模型Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM),用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果,JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。二、计算机高速缓存和缓存一致性计算机在高速的 CPU 和相对低速的存储设备之间使用高速缓存,作为内存和处理器之间的缓冲。将运算需要使原创 2020-08-22 12:23:27 · 166 阅读 · 0 评论 -
Java 并发编程原理解析
一、synchronized关键字的底层原理synchronized 同步语句块的实现,使用的是 monitorenter 和 monitorexit 指令,其中 monitorenter 指令指向同步代码块的开始位置,monitorexit 指令则指明同步代码块的结束位置。当执行 monitorenter 指令时,线程试图获取锁,也就是获取 monitor ( monitor 对象存在于每个 Java 对象的对象头中,synchronized 锁便是通过这种方式获取锁的,这也是为什么 Java 中原创 2020-08-19 15:23:03 · 168 阅读 · 0 评论 -
JDK1.8中HashMap优化分析
HashMap底层实现是数组,这里分析下jdk1.8中对HashMap的优化1. hash算法优化 // jdk1.8 HashMap中hash源码 static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); }源码解读:用 (key的hash值) 与 (key的hash值右移16位)原创 2020-08-18 17:45:05 · 1116 阅读 · 0 评论 -
链表-如何实现LRU缓存淘汰算法
1.如何分别用链表和数组实现LRU缓冲淘汰策略? 1)什么是缓存? 缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非广泛的应用,比如常见的CPU缓存、数据库缓存、浏览器缓存等等。 2)为什么使用缓存?即缓存的特点 缓存的大小是有限的,当缓存被用满时,哪些数据应该被清理出去,哪些数据应该被保留?就需要用到缓存淘汰策略。 3)什么是缓存淘汰策略? 指的是当缓存被用满时清理数据的优先顺序。 4)有哪些缓存淘汰策略? 常见的3种包括先进先出策略FIFO(Firs.原创 2020-08-06 13:53:02 · 533 阅读 · 0 评论 -
RabbitMQ基础概念及安装
一、RabbitMQ基础概念RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ使用Erlang语言编写的,并且RabbitMQ是基于AMQP协议的优点:采用Erlang语言作为底层实现:Erlang有着和原生Socket一样的延迟开源、性能优秀,稳定性保障提供可靠性消息投递模式(confirm)、返回模式( return )与SpringAMQP完美的整合、API丰富集群模式丰富,表达式配置,HA模式,镜像队列模型保证数据不丢失原创 2020-07-30 10:56:59 · 138 阅读 · 0 评论 -
Logstatsh7.x数据同步
目录一、logstatsh下载二、解压使用三、配置使用四、运行一、logstatsh下载对应Elasticsearch版本下载logstatsh,官网下载较慢,推荐 华为开源镜像站 下载,地址如下:https://mirrors.huaweicloud.com/logstash/这里下载版本为:logstash-7.3.2二、解压使用执行如下命令解压:tar -zxvf logstash-7.3.2.tar.gz将解压后的文件移动至 opt 目录下mv logstash-7.3.2 /原创 2020-07-24 16:36:03 · 346 阅读 · 1 评论 -
Elasticsearch集群的搭建
目录一、Elasticsearch集群的概念二、搭建Elasticsearch集群三、Elasticsearch集群脑裂现象探讨一、Elasticsearch集群的概念集群:ES节点:运行的ES实例ES集群:由若干节点组成,这些节点在同一个网络内,cluster-name相同节点:master节点: 集群中的一个节点会被选为master节点,它将负责管理集群范畴的变更,例如创建或删除索引,添加节点到集群或从集群删除节点。master节点无需参与文档层面的变更和搜索,这意味着仅有一个mas原创 2020-07-24 11:05:59 · 334 阅读 · 0 评论 -
Elasticsearch基础知识及实践应用
一、Elasticsearch 核心概念当前Elasticsearch版本号:7.3.2Elasticsearch关系型数据库ES数据库索引index表文档 document行(记录)字段 fields列分片(shard):shard = primary shard(主分片)把索引库拆分为多份,分别放在不同的节点上,比如有3个节点,3个节点的所有数据内容加在一起是一个完整的索引库。分别保存到三个节点上水平扩展,提高吞吐量。备份(replica):原创 2020-07-21 17:47:23 · 384 阅读 · 0 评论 -
Java 8 Stream截取List
一、需求说明现有接口需对已注册用户批量注册至极光,极光提供接口仅支持单词500,故使用Stream截取数据库查询结果。二、代码实现 // 查询所有需注册至极光的用户基础信息 List<JiGuangInfo> jiGuangInfos = getJiGuangInfoList(); // 总注册数 int countAll = jiGuangInfos.size(); // 批次注册数 .原创 2020-07-20 14:09:54 · 6790 阅读 · 0 评论 -
keepalied双主热备
一、keepalied安装下载keepalied后解压,进入解压目录,执行 configure 命令配置安装目录与conf配置文件目录./configure --prefix=/usr/local/keepalived --sysconf=/etcprefix : keepaivied 安装路径sysconf :核心配置文件所在位置,固定,改为其他位置无法启动执行命令后若提示以下内容,则需安装 libnl/libnl-3 依赖安装 libnl/libnl-3 依赖yu..原创 2020-06-04 11:15:55 · 494 阅读 · 0 评论 -
苹果APP授权登录
一、前值说明苹果App开发完成后支持微信QQ一键登录,审核时要求具备Apple登录以防万一,苹果登录有两种方式,一种是jwt,二是授权码模式,这里采用jwt模式,开发语言为java二、代码实现使用相关技术:jwt+restTemplate+fastjson/** * 解析apple授权token * @param jwt * @return * @throws Exception */ public JSONObject ap.原创 2020-05-26 14:41:50 · 817 阅读 · 0 评论 -
springboot整合swagger文档
1. 普通方式:@Configuration@EnableSwagger2public class Swagger2 { // 配置swagger2核心配置 @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) // 指定api类型为swagger2 .apiInfo(apiInfo()) .原创 2020-05-21 16:45:29 · 122 阅读 · 0 评论 -
Java调用极光IM API注册用户并上传头像
梗概:根据极光文档,java注册用户到极光IM分为两个步骤,第一步,调用文件上传接口,上传头像,获取返回的 media_id ,即资源文件id。第二步调动注册接口,带上头像数据即可。代码如下:相关技术栈:RestTemplate,Lombok一、编写上传文件方法上传成功后返回资源id//文件上传极光 public String uploadHead(String u...原创 2020-05-06 17:19:11 · 795 阅读 · 0 评论 -
shiro通过sessionId获取当前用户登录信息
一、应用场景前后端分离架构,使用shiro做权限管理,登录成功将sessionId返回,访问接口时在请求头携带即可。由于业务需要,现有需要接口不做拦截,在方法内做权限判断,于是将sessionId携带在RequestParam中,进行登录或权限校验。二、实现代码ProfileResult:登录中构造安全数据的实体类import com.guangjutx.entity.au...原创 2020-04-17 11:19:33 · 9703 阅读 · 3 评论 -
高并发下缓存数据库数据一致性解决方案及实现代码
一、技术栈springboot+mybatis+redis二、实现原理以商品库存为例:更新商品库存的时候,根据数据(如商品ID )的唯一标识,将操作路由之后,发送到一个jvm内部的队列中读取数据(库存)的时候,如果发现数据不在缓存(redis)中,那么将执行重新读取数据+更新缓存的操作,根据唯一标识路由之后,也发送同一个jvm内部的队列中一个队列对应一个工作线程,每个工作线...原创 2019-12-31 18:03:09 · 778 阅读 · 0 评论 -
SpringMVC整合百度富文本编辑器
目录一、前言二、官网下载三、整合至spring项目四、自定义图片视频文件等上传一、前言运营那边需要一个强大的富文本编辑器功能,用于推送文章的编辑等等,总而言之需要可以编辑PC端展示效果,或手机端展示。最开始选择的是wangEditor编辑器,因为整合很方便,功能相对简单,做完之后,交付时运营方表示不能满足他们的需求,于是,重新选择了百度的富文本编辑器。虽然很久没人维护更新了...原创 2019-10-31 16:46:56 · 707 阅读 · 0 评论 -
springcloud教程环境配置之maven配置
一、maven下载地址官网3.5.4下载地址:http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.zip二、maven环境变量此电脑,右键,属性,更改设置,高级,环境变量新建变量名:MAVEN_HOME 变量值:D:\apache-maven-3.5....原创 2018-10-26 15:03:25 · 3368 阅读 · 0 评论 -
支付宝支付https回调,根证书缺省内置在JDK 1.6的信任根证书库中解决办法
在jdk\jre\lib\security目录下运行命令: keytool -import -alias cacert -keystore cacerts -file 盘:目录/证书文件.crtkeystore的默认密码:changeithttps检测地址:https://www.geocerts.com/ssl-checker...原创 2019-09-23 09:36:40 · 903 阅读 · 0 评论 -
springboot项目打包成jar包后下载resources目录下文件
@GetMapping("/download") public void download(HttpServletResponse response)throws Exception{ ClassPathResource classPathResource = new ClassPathResource("templates\\Topic_Template.xlsx");...原创 2019-08-21 16:59:45 · 1635 阅读 · 3 评论 -
系统架构的演变
一、系统架构演变随着互联网的发展,网站应用的规模不断扩大。需求的激增,带来的是技术上的压力。系统架构也因此也不断的演进、升级、迭代。从单一应用,到垂直拆分,到分布式服务,到SOA,以及现在火热的微服务架构 。1.1 集中式架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键。存...翻译 2018-11-05 14:07:55 · 448 阅读 · 0 评论 -
springboot整合mybatis
一、jdbc和事务spring中的jdbc连接和事务是配置中的重要一环,在SpringBoot中加入jdbc启动器即可。<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artif...原创 2018-11-01 10:53:37 · 283 阅读 · 0 评论 -
SpringBoot配置静态资源路径与拦截器
一、整合springmvc/访问静态资源我们接着上一节的说,对于springboot我们应该也是有了相应的了解了,上节中说到修改tomcat端口号,我们可以先测试一下,在application.properties中添加如下配置# tomcat端口server.port=80启动,看控制台就会发现端口号已被修改成80了,springboot项目在启动时,会默认寻找applicati...原创 2018-11-01 09:48:02 · 7644 阅读 · 0 评论 -
SpringBoot入门及进阶
一、springboot简介Spring Boot是用一些固定的方式来构建生产级别的spring应用。Spring Boot 推崇约定大于配置的方式以便于你能够尽可能快速的启动并运行程序。简单点说:Spring Boot 称为搭建程序的脚手架。其最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,做到开箱即用,迅速上手,让我们关注业务而非配置。通俗的说...原创 2018-10-26 18:07:57 · 600 阅读 · 0 评论 -
ftp上传下载工具类
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.Outp...原创 2018-10-24 10:56:46 · 151 阅读 · 0 评论 -
springcloud教程环境配置之idea快速入门
一、字体及主题二、启动项三、快捷键类名自动补全:默认并不是Alt + /,改成Alt + /代码生成:默认的代码生成快捷键:Alt + insert常用快捷键:快捷键 作用 Ctrl + Y 删除一行 Ctrl + D 复制一行 Ctrl + Alt + L 格式化 Ctrl + Alt + O 导包 A...翻译 2018-10-26 14:44:40 · 1183 阅读 · 1 评论 -
springcloud教程环境配置之idea安装破解
一、下载安装官方下载地址:https://www.jetbrains.com/idea/download/点击下载idea安装程序。下载完成之后运行安装程序,选择安装路径。选择版本位数next继续,install安装。安装成功之后先不要运行。二、破解下载破解文件下载地址:http://idea.lanyus.com/破解补丁下载完成之后...原创 2018-10-26 13:57:28 · 496 阅读 · 0 评论 -
SSM框架配置读写分离
一、前言 本篇博客是上一篇SSM框架搭建的后续,因为有人反应说,需要用到两个库,让我想起了项目中经常用到的读写分离的配置,所以查询了一下相关实现,中和几篇博客,挑选了一个比较简便的方式,测试,成功之后写在这里,希望给大家有帮助。(看这篇博文之前,请阅读SSM框架搭建:https://blog.csdn.net/dwhdome/article/details/79131059,在s...原创 2018-10-25 16:19:12 · 5953 阅读 · 1 评论 -
报错:you can change this value on the server by setting the the max_allowed_packet variable
报错:you can change this value on the server by setting the the max_allowed_packet variable。原因:MySQL的一个系统参数问题:max_allowed_packet,其默认值为1048576(1M),单次加载数据超过1M则报该异常解决方案:在MySQL黑窗口中输入:show VARIABLES like...原创 2018-08-07 19:28:49 · 4391 阅读 · 0 评论 -
jQuery短信验证码倒计时
话不多说直接上代码function hqCode(){ var tel = $("#tel").val(); if(tel==""){ alert("请输入手机号"); return false; } var rule=/^[1][3,4,5,7,8][0-9]{9}$/; //正则表达式验证手机号 if(!rule.test(tel)){ alert("原创 2018-01-27 17:25:08 · 512 阅读 · 0 评论 -
初识SpringCloud
一、简介SpringCloud是Spring旗下的项目之一,官网地址:http://projects.spring.io/spring-cloud/Spring最擅长的就是集成,把世界上最好的框架拿过来,集成到自己的项目中。SpringCloud也是一样,它将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态等等功能。其主要...原创 2018-11-05 16:57:40 · 326 阅读 · 0 评论 -
Eureka注册中心入门案例
一、认识Eureka在之前的案例中,user-service对外提供服务,需要对外暴露自己的地址。而consumer(调用者)需要记录服务提供者的地址。将来地址出现变更,还需要及时更新。这在服务较少的时候并不觉得有什么,但是在现在日益复杂的互联网环境,一个项目肯定会拆分出十几,甚至数十个微服务。此时如果还人为管理地址,不仅开发困难,将来测试、发布上线都会非常麻烦,这与DevOps的思想是背道而...原创 2018-12-10 17:44:22 · 486 阅读 · 1 评论 -
阿里云OSS服务转储缩略图
一、需求APP后台服务单独搭建文件服务器,选择了阿里云的OSS对象存储,某些功能模块中,对图片的存储是私有读写的,即不能通过域名+路径直接访问,在图片列表中,考虑到APP流畅性以及带宽费率问题,需要显示缩略图提升流畅性以及快速加载。所以,上传原图后(私有读写),自动转储一份缩略图(公共读,私有写),可通过域名+路径直接访问。二、实现package com.guangjutx.modu...原创 2019-08-15 11:20:06 · 1182 阅读 · 0 评论 -
读取excel写入txt文件
public static void main(String[] args) throws Exception { InputStream in = new FileInputStream("C:/Users/Desktop/参考资料/minganciku/敏感词库表统计.xlsx"); Workbook wb0 = new XSSFWorkbook(in); ...原创 2019-07-05 14:52:51 · 893 阅读 · 0 评论 -
Windows服务器svn提交必须加注释
一、svn提交代码时必须写注释新建 pre-commit.bat 文件,内容如下:@echo offset SVNLOOK="C:\svn\VisualSVN Server\bin\svnlook.exe"setlocalset REPOS=%1set TXN=%2rem check that logmessage contains at least 10 characters...原创 2019-06-11 16:41:10 · 571 阅读 · 0 评论 -
手动实现springmvc框架
一、实现思路要实现的功能:初始化时,将注解的类实例化到容器中进行管理,访问时可以根据url找到指定的方法进行调用,对于Autowired注解的属性,要将容器中管理的bean注入进来,实现springmvc的简易功能。具体思路:加载spring的配置文件 初始化用户设定的包下面的类(加了注解的) 把扫描到的类,通过反射机制实例化放到IOC容器中,beanName默认是首字母小写...原创 2019-04-11 17:37:18 · 280 阅读 · 0 评论 -
centos6.5百度网盘下载
CentOS 6.5操作系统下载生成环境Linux服务器,建议下载最小化安装64位系统,服务器上用的系统强烈建议下载后核对MD5。此版本也提供了最小化安装的CD镜像文件(CentOS-6.5-x86_64- minimal.iso, CentOS-6.5-i386-minimal.生成环境Linux服务器,建议下载最小化安装64位系统,服务器上用的系统强烈建议下载后核对MD5。此版本也提供了...转载 2019-02-26 10:22:34 · 16368 阅读 · 7 评论 -
ForkJoin的使用案例
使用ForkJoin计算1-100的和:public class ForkJoinTaskExample extends RecursiveTask<Integer> { public static final int threshold = 2; private int start; private int end; public Fo...原创 2019-02-25 10:44:37 · 803 阅读 · 0 评论