自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 问答 (4)
  • 收藏
  • 关注

原创 JVM内存溢出分析整理(一)

OutOfMemoryError:unable to create new native thread

2021-12-19 11:33:28 2386

原创 连redis中简单的String数据类型内部结构,我竟然都不会

请移到公众号原文浏览

2021-06-10 09:37:35 1123

原创 rocketMQ总结(二)之集群扩容需同步主题以及订阅组

集群扩容注意事项集群扩容需同步主题以及消费组订阅关系先说结果:再举例说明生产环境主题、订阅组如何配置集群扩容不同步主题,会如何?集群同步主题配置集群扩容不同步订阅消费组,又如何?集群同步订阅消费组配置学习资料集群扩容需同步主题以及消费组订阅关系先说结果:集群扩容时,需要同步broker集群上的 topic.json、subscriptionGroup.json 文件。再举例说明下面以原先集群三主三从扩容到四主四从为例来说明:broker-a(原来)、broker-b(原来)、broker-c(原来

2021-06-08 10:52:22 979

原创 mongoDB分片技术之片键设计(学习笔记)

选择片键需要考虑的因素:片键基数:片键基数指的是划分数据块的能力。举个例子,假如要记录一个省所有考生的高考成绩,如果以成绩作为片键进行范围分片,那存储较高成绩记录的分片的数据量必然要远远小于存储平均成绩左右记录的分片的数据量,存储数据最多的这个分片就会成为瓶颈。这时以考生的考号作为片键就更有利于数据的均匀分布。写分布:为了系统负载均衡,我们往往会期望数据均匀分布于各个分片上。如果以一个单调递增的值作为片键,那么最终数据往往只会往一个分片上写入。查询分发:同样的,大多数情况下我们也希望读操作均匀的

2021-05-29 18:03:45 776

原创 rocketMQ总结(一)

常见问题RocketMQ,不同Group的消费者能消费相同topic的消息RocketMQ中对同一个消费组设置不同的tag订阅关系,出现消息丢失的问题官方告诉使用者:同一个消费组,必须保持订阅关系一致丢失原因分析:同组消费实例订阅不同topic丢失原因总结同一组订阅topic 不一致,也会造成消息部分不消费;由于负载均衡消费,分发消息给了各个实例,而有的消费者实例刚好不是订阅该主题的。消息过滤实现机制消费端队列存储的是 tag 的 hashcode,不同的字符串得到的hashcode值

2021-05-21 18:08:17 2013

原创 springBoot + mongoDB分页查询优化设计实践(笔记二)

mongoDB分页查询优化设计实践背景设计原理及开发过程方式1方式2关键代码具体可详见项目背景这个是针对上一篇博客的具体实现,主要是为了解决大数据量下(比如:物联设备上报数据的查询),mongoDB采用skip() + limit()越往后翻页查询越慢的问题。设计原理及开发过程可以根据某个字段(值不重复)进行排序查询,边查询边返回下一次的查询起点,边查询边缩小查询范围,向后查询查询效率就可以越高方式1主键设计规则: _id = 设备ID + “.” + 上报时间(时间戳整数,秒为单位)。注意事

2021-01-25 15:32:58 1766

转载 Java中的Date和时区转换问题

(1)、Date中保存的是什么Date对象里存的只是一个long型的变量,其值为自1970年1月1日0点至Date对象所记录时刻经过的毫秒数。调用Date对象getTime()方法就可以返回这个毫秒数。不同的时区,执行下面的语句Date date =newDate();new出的date对象里存的毫秒数是相同的。确切的说,Date对象里存的是自格林威治时间(GMT)1970年1月1日0点至Date对象所表示时刻所经过的毫秒数。所以,如果某一时刻遍布于世界各地的程序员同时执行new ...

2021-01-05 17:52:56 1884

原创 IOT下设备等大数据量存储、统计分析的胡思乱想(笔记)

思考大数据量下的存储方案方式一mysql关系型数据库方式二mongodb + spark方式三hbase方式一mysql关系型数据库采用分库分表的方式。根据具体业务场景(按天或按月查询数据),可进行按月、天等时间方式进行分表存储,避免单表存储过大,导致查询瘫痪。至于复杂聚合统计分析等,可能需要单独开任务分析计算并存储到中间表来加速查询。方式二mongodb + sparkmongodb 可以通过分片的方式快速进行横向扩展,达到分布式存储的目的,适用物联网等海量数据的存储场景。而mongodb

2020-12-20 11:40:20 1978 2

原创 由mongoDB分页查询过慢引发的思考(笔记一)

前言当mongoDB存储的数据量越来越大的时候,按常规的接口查询方法显然会不行,否则导致查询过慢。应用相似点在hBase中,分页查询的时候的时候主要是按rowkey来进行查询的。存储的时候,rowkey是按字典的有序方式存储的,因此rowkey的设计成了查询的关键。业务中通常有获取最近时间的数据处理需求,这时候就可以把时间戳作为rowKey来查询。但是时间戳前面部分是相同的,在查询的时候就易造成热点现象,因此需要使用时间戳反转的方式来处理。实际生产中可以用Long.Max_Value - t

2020-12-19 22:53:27 2614 1

原创 Git 提交本地代码操作

Git 提交、更新本地代码步骤第一步:第二步:第三步:第四步:第五步:第一步:git status 查看当前状态红色的字体显示的就是你修改的文件第二步:git add . 或者 git add xxxgit add . 可以把你的内容全部添加到本地git缓存区中git add xxx… 可以提交指定的部分文件到本地git缓存区,例如:git add DCPDataPlatform/pom.xml DCPDataPlatform/src/main/*第三步:git commit

2020-12-02 11:08:32 1472

原创 mysql对无索引的字段进行排序后limit,有可能导致分页查询重复出现问题

发现问题mysql对无索引字段进行排序后limit ,当被排序字段有相同值时并且在limit范围内,取的值并不是正常排序后的值,有可能第一页查询的记录,重复出现在第二页的查询记录中,导致分页结果查询错乱问题。也就是说,当排在第N行的数据可取key1、 key2 时 , 排序结果可能是key1,也可能是key2。问题重演如上以页大小15、按发生时间event_time(不是索字段)倒序进行分页查询,第一页与第二页查询中出现大量重复记录,由此可证。具体sql:SELEC.

2020-11-03 09:50:13 1390

原创 关于web项目中JWT token会话刷新思考

概述主要记录下JWT token过期后,前后端token刷新过渡问题。具体思路用户通过浏览器访问web系统,进行登录操作后,后台会返回jwt token以及用户信息;同时,会将用户信息设置到redis缓存中(其他缓存亦可),并设置缓存过期时间跟jwt中的过期时间一样。 用户下次的请求需要带上JWT token作为请求头,(java后台用拦截器)如果token中过期时间还没过期,就重设redis的过期时间(为原来的过期时间固定值),校验通过,拦截器依然放行;如果token中的时间过期但是redi

2020-11-02 11:39:54 707 1

原创 springboot整合mybatis通用Mapper插件

概述这是一个简单的web Demo。demo地址:https://github.com/wusong1994/springBoot-mybatis-demo特点1.springboot整合通用mapper插件、XML以及注解方式,实现查询分页等2.自定义日志输出3.多配置环境切换,maven打包动态指定配置环境4.接口(无论异常)统一格式输出搭建步骤执行document/db下的sql脚本,建立数据库(支持mysql5.7以上) 执行test目录下的测试单元打包部署根

2020-10-12 11:10:42 848

原创 JWT认证工具类封装(笔记)

概述主要针对JWT方式下token生成,token有效期内刷新,结合缓存(redis缓存)来避免频繁查询数据库获取用户信息,提高访问速度。采用JWT token+ redis缓存方式,可以有效避免集群部署下认证信息丢失的情况(比如cookie+session),即将token放到请求头header中即可。Token服务类代码首先需要引入JWT依赖 <!--Token生成与解...

2020-03-26 16:32:38 1034

原创 Springboot 整合RabbitMq 案例及场景应用

请移步原文:https://blog.csdn.net/qq_35387940/article/details/100514134

2020-03-20 18:00:04 388

原创 java多线程中之yield、join 、wait和sleep的区别

概要这里只简略总结记录下yield、join、sleep和wait的某些容易遗忘的知识点。1.wait()Object中的wait、notify、notifyAll,可以用于线程间的通信,核心原理为借助于监视器的入口集与等待集逻辑。通过这三个方法完成线程在指定锁(监视器)上的等待与唤醒,这三个方法是以锁(监视器)为中心的通信方法。除了他们之外,还有用于线程调度、控制的方法,他们是s...

2020-03-18 14:42:30 1878

原创 java多线程之如何正确停止线程(二)

概要该篇主要对java多线程之如何正确停止线程(一)的补充完善,其实恰当使用Thread.interrupt()与Thread.interrupted()组合确实是可以正常退出线程的,但是有些地方需要注意下,否则有可能无法正确退出线程。下面主要对线程的interrupt()中断和终止方式进行介绍。1.interrupt()介绍关于interrupt(),可以看下java的jdk文档,...

2020-03-18 11:23:13 472

原创 基于redis的分布式锁

概述“分布式锁”是用来解决分布式应用中“并发冲突”的一种常用手段,而单机应用则可以使用java自带的同步机制(如synchronized等等)进行。具体到业务场景中,有两种情况:抢不到锁的请求,允许丢弃。 并发请求,不允许丢数据,直到等到锁为止或者出现超时抛出异常结束。实现分布式锁两种情景代码简单实现如下:package com.github.springsecurityd...

2020-03-12 12:16:54 1701

原创 OAuth 2.0 第三方认证详解

阮一峰讲的不错,可看下其博客:http://www.ruanyifeng.com/blog/2019/04/oauth_design.htmlhttp://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.htmlhttp://www.ruanyifeng.com/blog/2019/04/github-oauth.html...

2020-03-10 16:08:01 464

原创 docker部署实操(二)下之如何解决容器之间采用宿主机内网IP进行通讯

如何解决容器之间采用宿主机内网IP进行通讯操作环境: centos7服务器一台,只开放一个80端口;采用docker方式部署。MongoDb数据库安装一个MongoDb数据库:用于接口推送文档数据存储。安装步骤如下:拉取镜像:docker pull mongo 启动容器,挂载主机目录/home/mongoDb到容器中:docker run --name mongodb...

2020-03-07 10:54:44 1396

原创 java socket网络编程之一对一长连接通讯(包括心跳检测、掉线重连)

需求现在假如有个简单的通讯需求,需要客户端和服务端进行通讯,但是只需要一个客户端和服务端建立长连接即可。客户端与服务端建立长连接过程中,由于网络问题、服务端重启等问题,可能会导致客户端连接被中断,所以客户端必须具备连接中断后重新恢复的通讯的功能。方案因为本人应用中只需要简单的消息发送,所以使用socket在客户端与服务端之间建立简单的长连接,使用socket进行通讯即可满足需求。下面是...

2020-02-28 15:59:07 1808

原创 一不小心,MongoDB可将服务器内存耗尽

概述MongoDB默认占用内存比较大,如果和其他应用部署一起,足以将服务器内存快速耗尽。后果:或被系统杀死其进程或杀死系统其他进程。不论何种结果,都不是我们所愿意看到的。如何应对1、最好将MongoDB单独部署,否则易导致服务器内存不足,因其默认是按系统内存进行分配,而不考虑其他进程占用内存的情况,且本身所需内存越大越好。具体内存情况可查看其官网。从MongoDB 3.4开始,默认...

2019-12-31 17:07:08 2768

原创 学习笔记:开源项目框架汇总【留着以后可能有用】

概述有时自己开发一个后台管理系统从头到尾搭建核心框架有点痛苦,因此我们可以找一下开源通用的demo进行修改改造以进行快速开发,大神请绕行【完全可以自己码出来】。列表 Guns 基于Spring Boot2,致力于做更简洁的后台管理系统。包含系统管理,代码生成,多数据库适配,SSO单点登录,工作流,短信,邮件发送,OAuth2登录,任务调度,持续集成,docker部署等功能。可快速...

2019-11-19 17:24:02 2133 1

原创 CAS学习笔记(三):认证中心返回多属性配置

概述cas-server默认的可用信息只有用户名, 如果我还想知道他的角色类型等其它属性,这时候就需要做一些配置了。其它代码编写代码方式这里不做介绍,只做简单配置的方式介绍。配置操作1、cas-server项目自行根据CAS学习笔记(二)来搭建具体目录结构如下:2、application.properties 配置多属性,这里配置多一个数据表角色字段##...

2019-09-20 18:09:34 2204

原创 CAS学习笔记(二): 系统集成CAS遇到问题解决办法

概述最近工作遇到多个系统需要进行单点登录认证,所以研究了一下CAS 单点登录主要是为了避免各个协作办公系统之间需要重复登录的繁琐操作 下面主要记录下基于cas+springboot+vue整合遇到的问题CAS认证中心采用的是可覆盖的开源CAS:cas-overlay-template,可以到github去下载:https://github.com/apereo/cas-ov...

2019-09-06 18:33:02 1278

原创 CAS学习笔记(一): 单点登录CAS的前端知识

概述主要讲述cas服务端(认证中心)和cas客户端(子系统)如何利用cookie及session来判断用户是否已进行单点登录的过程 其中每个客户端未去cas服务端认证前,访问客户端其实都会经过浏览器重定向到认证中心的,这样就会带上cas认证中心的用户cookie信息(当然只要认证过才有)了,验证用户签发的登录票据TGT是否已经拥有。因此,客户端若未到cas认证中心认证过, 其实都会由...

2019-09-06 17:50:37 1323

原创 学习笔记:Java生产环境下性能分析及调优概要

1内存溢出分析1.1导出内存映像文件1)自动导出内存映像文件JVM参数配置:内存溢出时自动导出 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./2)内存溢出时,使用JMAP手动导出内存映像文件(推荐)Jmap -dump:live,format=b,file=heap.bin1.2内存分析工具 MAT使用MAT导...

2019-08-18 16:41:21 376

转载 学习笔记:如何使用 Idea 远程调试 Java 代码

引言服务器应用程序出现问题,但是应用相关的各种资源信息文件都在服务器, 服务器文件不方便download下来、为使问题重现并进行解决,再使用本地开发进行调试就比较困难,这时候远程调试就显得非常有用。第一步:远程配置需要在tomcat中配置,开启远程调试设置,在tomcat 的配置文件catalina.sh中 增加以下设置:JAVA_OPTS="-agentlib:jdwp=tran...

2019-08-18 15:31:06 269

原创 SVN Update时提示 Please execute the 'Cleanup' command

有时,使用小乌龟(TortoiseSVN)拉取比较大的项目时(网络不好),会出现卡死现象;等得不耐烦,强行取消后,重新拉取发现锁着了,无法更新。网上有各种方法,最后亲测后发现还是下面的方法比较可靠:具体步骤如下:1、官网下载sqlite3:https://www.sqlite.org/download.html,我的是window系统,使用sqlite-tools-win32-x8...

2019-08-15 20:51:55 1621

原创 java多线程之如何正确停止线程(一)

停止线程,也许我们首先会有一种错感,觉得使用Thread.stop()或者Thread.interrupt()与Thread.interrupted()等组合就能退出线程了。可是在实际运用过程中,这样真的可以达到安全退出线程吗?下面就由我带大家逐一分析实例,最后顺便举个例说明如何才能安全的退出线程。1、Thread.stop()方式停止线程,会发生什么呢? 不用多说,直接简单粗暴...

2019-06-29 23:26:42 2783

原创 java多线程之内存可见性

可见性概念:一个线程对共享变量值的修改,能够及时地被其他线程看到。共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。JAVA内存模型(JMM): 所有的变量都存储在主内存中 每个线程都有自己的独立的工作内存,里面保存了该线程使用到的变量的副本(主内存中该变量的一份拷贝)1、共享变量在线程间的可见性1.1、s...

2019-06-29 21:00:26 523

原创 docker创建启动容器,针对时间错乱的问题及解决办法汇总

1、普通容器创建启动后,时间不准确情况解决办法 有时我们通过docker创建启动容器后, 通过 docker exec -it 容器ID /bin/bash 进入容器后,通过 date命令 查看当前时间出现时区偏差, 这时就需要进行时间修正。 进入docker已运行容器里中: 执行命令 : ln -sf /usr/share/zoneinfo/...

2019-05-11 20:51:28 1414 1

空空如也

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

TA关注的人

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