自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 通过dump文件,分析outOfMemoryError的排查过程和排查思路

前段时间发现有一个内存溢出导致java线上服务OOM的问题,通过jvm启动配置增加-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/app/oom的命令,在出现了第二次服务挂掉的时候,拿到了当时的dump文件,以下是我通过dump文件对异常进行梳理的过程。首先,把服务器的dump文件拉到我本地后,使用jdk自带的jvisualvm装载dump文件在载入后,我得到了各个类的内存占用情况分析图。如下:在这个分析图表中,我发

2022-03-14 15:14:29 3761 1

原创 oracle分区表创建——实现重新定义普通表为分区表

一.什么是表分区表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成(例如oracle的各个表空间)二.分区表有何好处1.可以存储更多的数据。使用分区表能够把大数据量表丢到各个不同的物理存储位置上,和单个磁盘,解决了存储空间的限制。2.能够优化查询。在一些业务下,过期很久的数据通常很少被查询,而通过分区表的合理分区,我们可以取到指定分区或部分分区内的数据,大大提高查询效率。3.分区表可以更好的维护数据。当我们

2022-02-11 11:40:40 1331

原创 如何通过域名直接跳转系统ip具体的链接url

1.前因 今天遇到一个没有处理过的需求,客户要求我们为他的域名配置一个应用url跳转,但是要求直接通过域名就可以跳转到应用首页。举个例子,客户要求我们通过www.xxx.com需要进入到某个网站,但是网站部署的服务器是内网服务器,只开放了一个8888的端口作为外网端口,并且通过nginx转发了一串/qz的url才能进入,也就是要通过www.xxx.com:9999/qz才能进入。而内网端口和配置又不允许修改,最后,绕了一圈,发现了一个最简单的解决方案。记录下来与大家共勉。...

2021-12-17 13:49:29 2925

原创 arthas java诊断工具入门应用和常见启动问题

1.何为arthas作为java开发工程师来说,不可避免会遇到的问题就是,在正式环境下你的java服务出现一些突发问题的快速排查,而排查时最难排查定位的问题莫过于一些内存溢出、cpu高占用和GC相关等异常。因此,一款能够快速通过堆栈、线程来快速定位正式环境线上问题点的工具就显得极为重要。而应运而生的arthas便是一款快速解决定位此类问题的工具,我们来看下arthas官方文档(官方文档:Arthas 用户文档 — Arthas 3.5.5 文档)对arthas工具的定位,了解下arthas的强大之处:

2021-12-17 11:26:10 6449

原创 oracle主键自增触发器编写

1.创建自增序列create 序列名minvalue 1nomaxvalueincrement by 1start with 1nocache;

2021-06-15 17:12:21 890

原创 Linux redis常用命令

最近项目上遇到了一个问题,项目在近期在进行域名更新,当新域名替换结束后,发现了前端的查询列表展示的视频和图片都无法正确显示。在排查过后,定位到了是由于redis缓存里面的旧域名...

2021-06-01 14:54:48 14130 2

原创 服务器路由链路追踪命令

当我们在开发过程中,可能会有遇到项目的域名经过的网络路由跳转非常复杂的情况,其中跳转回牵扯到很多服务器,那么,我们如何去定位最终访问的域名跳转出口呢?我们可以使用tracert命令进行跟踪,此命令可以使用tracert+域名的方式来进行跟踪路由跳转,并且最终能够定位到域名跳转的出口。如图所示,最终的出口即为120开头的ip,即为你当前项目域名的ip出口。...

2021-05-19 15:57:56 3796

原创 maven下的包树形结构查看利器插件——maven helper

我们在配置maven或者在遇到ar包依赖冲突的相关问题时,经常会需要寻找某个具体的jar包处在哪个dependency下,然而不管是自己在依赖下找还是使用mvn dependency:tree命令去获取树状结构,都非常难以找到对应的父类依赖在哪。 而本片博客为大家介绍一个非常便利的查看maven包下的树形结构的IDEA插件——maven helper。我们只需要到File->Setting->Plugins下,查找maven helper,然后进行restart IDEA,即可立即使用...

2021-03-03 17:35:53 1373 1

原创 redis缓存穿透之终极解决方案——布隆过滤器

一.介绍与原理在我们开发过程中,避免不了经常使用到redis这个缓存中间件,尤其是在大并发访问量的时候,他的存在会让我们在对数据库操作时节省很大的性能。 然而当我们进行redis的使用时,难免不了会发生以下这三种redis搞崩数据库的情况:缓存击穿、缓存穿透、缓存雪崩。而在遇到这几种情况时,我们都要有对应的解决措施去防止他的发生。今天我要记录的就是redis modle中的一种非常实用的解决缓存击穿的利器——布隆过滤器(bloomFilter)。 何为布隆过滤器呢?他的定义的使用定义很简...

2021-02-25 15:55:04 2707 1

原创 一次IO操作时间的含义是什么

我们在开发过程中,经常在进行sql查询或者写入操作时会谈到一次IO操作的时间,但是这个一次IO操作时间究竟是什么意思,是多久的时间呢。其实,这就要牵扯到数据库存储的原理了,我们都知道,我们的数据库数据实际上是存储在磁盘中的,每次进行读取数据时,其实是去磁盘拿数据,再到内存里面操作的。这里我们首先要理解一下磁盘的一些基本常识,磁盘是如何进行查找数据的呢?磁盘的结构分为移动臂、磁道、读写磁头、柱面等主要部分,如下图所示:而当我们进行例如一个普通的select查询某条数据时,每查询一行数据其实

2021-01-27 15:34:31 2658 1

原创 springboot项目打包jar包后获得当前jar包层的路径

在开发过程中,我们经常要遇到上传图片、word、pdf等功能,但是当我们把项目打包发布到服务器上时,对应的很多存储路径的方法就会失效,而以下的方法则可以将我们想要的路径定位到对应的jar包当层的路径,个人觉得非常实用,记录一下与大家分享。//第一行代码的入参只要随便指定某个类即可。ApplicationHome home = new ApplicationHome(PdfUtils.class); String basePath= home.getSource().getParentFile().

2021-01-14 16:18:22 1087

原创 vue与后端接口是如何进行接口请求的原理

最近遇到一个很奇怪的问题:前端vue和后端java项目布在同一台服务器(假设该服务器为180服务器),该180服务器无法通过外网访问,前端通过另一台可ping通180服务器和连接外网的服务器(假设为181服务器)进行nginx外网映射访问。此时,我们的设计是希望前端通过内网IP直接对后端接口请求,而不是去走域名进行请求,这样能够在请求时少走一次防火墙,提供接口请求速度。 但是理想很美好,但是现实是最后发现,前端一直无法成功访问到后端接口,一直请求失败。经过多方排查和请教大佬,终于清楚的理解了前后端...

2020-11-18 11:40:58 7961 2

原创 linux环境下查询日志常用命令

1.情况1,想实时查询正在进行的最新的日志。使用tail -100f logs.log 表示查询logs.log日志下的最新实时的100行数据。2.情况2,想查询定位某个错误在第几行,从错误行开始后的日志。首先,定位错误行,使用cat -n logs.log |grep "Exception" 此命令将会模糊查询出现“Exception”的行号,当你找到对应的行号(例如第996行),再使用tail -n +996 logs.log即可获得第996的错误行之后的信息。3.情况3,查看某个错误...

2020-09-27 19:11:31 504 1

转载 ConcurrentHashMap底层实现原理(JDK1.7 & 1.8)

发现一篇ConcurrentHashMap写得非常好的底层实现,大家可以去仔细学习一下:https://www.jianshu.com/p/865c813f2726(转载自此文章,侵权即删)

2020-06-24 09:57:02 343

原创 分布式集群下session如何保证共享

解决集群Session共享问题的四个方案:1.Session Sticky实现:让负载均衡器能够根据每次的请求的会话标识来进行请求的转发,这样就能保证每次都能落到同一台服务器上面。存在的问题:如果这一台Web服务器宕机或者重启了,服务器上的会话数据会丢失,用户需要重新登陆等;会话标识是应用层的信息,那么负载均衡器要将同一个会话的请求都保存到同一个Web服务器上的话,就需要进行应用层的解析,这个开销比第四层交换(LVS负载均衡器属于第四层)要大。负载均衡器变为一个有状态的节点,存消耗会更大,容灾方

2020-06-22 14:07:51 390

原创 MYSQL优化之大量数据的limit分页优化

在mysql中,如果我们遇到要查询分页列表的数据,我们正常的sql语句是这样写的(主键索引为user_id):select * from user where 各种条件 limit 0,10这句sql乍一看非常直接明了,没啥毛病,但是当我们的数据量达到了几百万条时,我们要查几万条数据之后的分页,那要怎么处理呢?简单啊,这样写就好了:select * from user where 各种条件 limit 50000,10然而,事情并没有想象中的简单,当我们以这样的方式去查询时,mys...

2020-06-05 17:16:25 894 1

原创 mysql数据库编码设计规范总结

1:数据库表命名设计规则1.以下划线命名法作为表名设计,在第一个下划线之前的字符串应标明对应的模块缩写,若模块名称太长,超过6个字符,可使用缩写表示。例如:sys_user_detail表,sys为声明为系统通用模块,为system的缩写,userDetail以下划线命名法命名。2.在表设计时应该按照对应关系尽量将表设计为一对一、一对多、多对多的形式(特殊设计除外),多对多的中间表命名规则尽量以两个表的表名相拼而成,例如:sys_user表与sys_role表的中间表为sys_user_role表.

2020-05-25 10:59:15 902 1

原创 java方法调用时如何在栈中执行的

java方法本质当我们调用某个java方法时,实际上是线程调用了它私有的虚拟机栈,将方法作为一个栈帧将其压入虚拟机栈中。栈帧中存放着该java方法中的局部基本类型变量、引用对象指向堆的地址,它本质是一个内存区块,里面存储着方法的数据集。一个方法从开始执行到执行完毕其实就对应该栈帧的入栈到出栈的过程。java方法的互相调用原理 当方法相互调用时,虚拟机栈又是怎么处理的呢?例如,有一个方法A,方法A调用了方法B,方法B调用了方法C。此时,当方法A开始执行调用时,它产生了一个栈帧S1,放入线程的...

2020-05-21 14:57:27 1620

原创 记录一次诡异错误:springboot项目上传文件后就会重新启动

今天遇到一个非常奇葩的错误。每当springboot项目访问某个文件上传接口的时候,接口每次一走完就会重启项目tomcat。经过排查发现,原来是因为项目里面将文件上传到了项目下的classes目录下,并且在项目maven中配置了热部署devtools。说起这个热部署,大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就...

2020-04-10 16:02:57 1329

原创 java final关键字修饰引用变量

当final修饰变量初始化为一个引用对象时,它的内存地址就指向了引用变量实例的堆地址,且不会改变。因此无论引用变量如何修改,fianl修饰的变量都会随之改变。具体例子如下:public class myTest { private static StringBuffer sb=new StringBuffer("blooze"); //为final修饰的变量初始化赋值给sb...

2020-03-24 14:46:08 2086

原创 java过滤器与拦截器的区别

1.拦截器不依赖于servlet容器,而过滤器依赖于servlet容器。2.拦截器基于反射机制,而过滤器基于函数回调。3.拦截器只能对controller层的请求进行拦截(action请求),而无法对例如直接请求静态变量的请求进行拦截。而过滤器可以过滤任何请求。4.拦截器可以取到spring管理的各个bean(即可以取到@autowrite的实例),因此可以再拦截器中对业务进行操作。而...

2020-03-23 09:52:42 119

原创 springboot如何保证多线程安全

我们在@RestController下,一般都是@AutoWired一些Service,由于这些Service都是单例,对于在Controller中调用他们的方法,由于方法在JVM中属于栈操作,对于每一个线程来说,栈都是独立的,所以是线程安全的。 由于Controller本身是单例模式 (非线程安全的), 这意味着每个request过来,系统都会用原有的instance去处理,这样导致了两个结...

2020-03-18 15:33:42 7143 1

转载 mysql数据库优化之sql语句优化

推荐一篇博主徐刘根的文章,写得很好:https://blog.csdn.net/xlgen157387/article/details/44156679

2020-03-18 10:57:56 91

原创 数据库分区和分表的区别以及其作用

1.为何要分表分区 当我们遇到海量数据存储在数据库中的某张表,此时单个表承受的压力是巨大的。这不但会导致查询变慢,而且由于表的锁机制导致更新修改删除等操作也会受到严重影响(即使是行级锁也会有影响),因此便出现了数据库性能瓶颈。解决数据库瓶颈问题有很多个地方可以进行优化,本篇文章专门针对分区分表进行描述,如果有兴趣了解更多的解决数据库高并发问题的小伙伴可以看我博客的另一篇数据库高并发解决的博客...

2020-03-18 10:28:12 7101 1

原创 多线程常见陷阱之重排序

一.何为重排序? 重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。二.重排序是如何发生的? 当一段代码中的其中几行数据不会出现数据依赖性的关系时,他就有可能被编译器和处理器为了提高编译器和处理器的并行度等原因而进行重排序。导致你原本可能想要的逻辑出现了本不能出现的bug。 先说说数据依赖性是什么,然后我们再来看一个出现重排序报错的实例。 (一...

2020-02-15 14:32:59 268

原创 java设计模式之策略模式

策略模式的含义以及优势针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而是它们可以相互替换。策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能。换句话说,当你的代码里面有很多不同场景的if -else的逻辑判断,并且他们都相互独立,那么我们就可以使用策略模式将它改造成的几个类来维护这些逻辑已达到解耦的作用。策略模式的组成1.抽象策略角色:这...

2020-01-14 19:41:31 115

原创 华为云接入springcloud项目demo步骤以及注意事项(包括替换eureka和feign方案)

今天我们讲一下如何将springcloud项目整合到华为云上进行服务管控。首先是pom文件的导入,我们首先要将华为云的镜像放入到我们Maven的setting.xml中。具体导入内容为:<mirrors> <mirror> <id>huaweicloud</id> <mirrorOf>*,!HuaweiCloudSDK...

2020-01-08 17:12:37 2447 1

原创 高性能Mysql学习日志之范式与反范式(七)

4.3范式与反范式 基本描述:在范式化的数据库中,每个事实数据会出现且仅出现一次,相反的,在反范式化的数据库中,信息是冗余的,他可能会存储在多个地方。 范式化的优点:1.范式化的更新操作通常比反范式要快得多。2.当数据较好的符合范式化时,就只有很少的重复数据,就只需要更少的更新操作。3.范式化的表通常比较小,可以更好放在内存中,所以执行操作会更快。4.很少的多余数据意味着检索数据时需要...

2020-01-03 19:56:12 486

原创 高性能Mysql学习日志之自增列、mysql本身的缺陷以及应对措施(六)

4.1.6选择标识列(自增列)标识列,即可以不用手动的插入值,系统提供默认的序列值。为标识列选择适当的数据类型是十分重要的,正确的数据类型会他在查询和连表查询中的性能更加强大。首先,要确保标识列和以该标识列作为外键的所有数据类型都要一致,否则不仅可能导致性能问题,还有可能导致难以发现的报错,这种错误通常很难以发现。其次,尽量满足值的范围需求的同时,应该选择最小的数据类型。因为越小的数据...

2019-12-31 11:43:48 185

原创 高性能Mysql学习日志之长字符串类型、时间类型、枚举类型(五)

(接上篇4.1.3)BLOB和TEXT类型 这两个类型都是为了存储数据量很大的字符串而设计的字符串数据类型,BLOB和TEXT分别使用二进制和字符串方式存储。Mysql在对这两个类型处理时,会将它们当做一个独立的对象,当他们的值很大时,InnoDB会专门使用“外部”的存储区域进行存储,在这种情况下,每个值都要额外提供1~4个字节来存储一个指针,以便在外部存储区域存储实际值。 由于B...

2019-12-28 10:53:48 139

原创 高性能Mysql学习日志之数据库的数据类型优化原则以及整型数据类型(四)

4.1选择优化的数据类型 Mysql支持的数据类型非常多,而选择合适的数据类型对获得高性能是至关重要的,以下的几个原则有助于对数据类型的设计做出更好的选择。 a.更小的通常更好:尽可能正确存储数据的最小数据类型,这会使之更快,因为他们占用的磁盘、内存和CPU缓存更小,并且处理时需要的CPU周期也更少。 b.简单就好:简单数据类型通常占用更少的CPU周期,例如整型比字符型操作代价更...

2019-12-27 13:40:48 111

原创 高性能Mysql学习日志之InnoDB行级锁的替代实现方案(三)

1.4多版本并发控制Mysql的大多数事务型存储引擎的实现都不是基于简单的行级锁。基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制(MVCC)。它的实现是通过保存数据再某个时间点的快照来实现的。当一个事务开始进行时,他无论花了多少时间执行多少次相同的查询,他看到的数据都是一致的。而不同的事务在不同时间点开始事务时,每个事务对同一张表、同一个时刻看到的数据可能都是不相同的,如图所示,事...

2019-12-27 09:07:01 170 1

原创 高性能Mysql学习日志之事务脏读、不可重复读、幻读原理以及排它锁共享锁结合事务的原理解析(二)

1.3事务一个运行良好的事务所必须具备的标准特征:原子性、一致性、隔离性、持久性。1.3.1事务隔离级别Read UnCommitted(未提交读) :指对于一个事务,它即使还没commit,但是他的部分内容却已经被其他事务所看见,即脏读。例如:当你对A表、B表、C表进行一个事务的更新操作。当A表更新完成,B表、C表还没更新,这时候来了另一个事务对A表和B表进行查询操作,此时他能看...

2019-12-24 21:50:15 209

原创 高性能Mysql学习日志之Mysq的整体架构描述l(一)

第一章1.1.mysql服务器逻辑架构图在架构图中第一层属于客户端,并不属于mysql,他主要跟mysql进行连接处理、授权认证和安全等交互。第二层服务层为msql的核心架构,mysql的核心服务都在这里,包括缓存、优化、解析、mysql提供的所有的内置函数(包括日期函数、时间函数、数学函数、加密函数等)以及存储过程、触发器和视图都是在这个地方实现的。第三层存储引擎层为my...

2019-12-23 21:51:36 198

转载 java jvm的工作原理

详情请参考此篇文章,写得非常详尽仔细:https://blog.csdn.net/qq_41701956/article/details/81664921

2019-10-08 15:36:03 66

原创 springboot使用restful风格基本使用和常用注解

为何使用restful风格,为何这样设计? restful风格,就是一种面向资源服务的API设计方式,它不是规范,不是标准,它一种设计模式。EST的核心在于,当你设计一个系统的时候,资源是第一位的考虑,你首先从资源的角度进行系统的拆分、设计,而不是像以往一样以操作为角度来进行设计。当我们在写一个进行一个前后端请求时,总是以操作为第一位的设计方法,在以操作为第一位的设计时,首先我们确认了一...

2019-09-27 13:46:14 3188

原创 数据库索引的作用以及索引基本原理

当我们面对大量的数据查询时,为了提高查询效率,我们在数据库中总要使用到索引。那么索引究竟是怎么样的东西呢?索引本质索引其实就是一种数据结构,他将数据库中的数据以一定的数据结构算法进行存储,能够帮助我们快速的检索数据库中的数据。何时使用索引1.当某些列的查询概率比较高或经常作为where条件的列。2.在作为主键的列上。3.在经常用在表连接的列上。在这些时候,我们就要考虑使...

2019-09-25 14:15:10 2283

原创 ngnix与zookeeper的作为负载均衡的区别的结合

负载均衡其实应该是分为两步,先查到所有需要负载均衡的服务列表(或者可用的服务器),再根据某种负载均衡策略分发下去,获得最终要的服务(或者最终访问的服务器)。 zookeeper作为注册中心,他在负载均衡中其实就是作为查找出所有服务的作用,但是他并没有任何均衡策略。而ngnix则能够提供相应的一些负载均衡策略,通过负载均衡策略选择出一个最终的服务。 ngnix的...

2019-09-24 15:18:16 489

原创 redis如何配置密码(在window环境)

redis在市场上应用越来越普及这样有好处也里弊端,例如好处有:大量的使用会使用Redis越来越稳定(BUG快速解决)、解决方案越来越多也越来越稳定、相关资料也越来越多等等好处,然后问题也越来越明显,例如:Redis的安全问题日益提升,安全包括两个方面:①外部的安全,包含:攻击、入侵、挂毒(例如:Redis的挖矿病毒已经不在是个例)等,②内部的安全:离职人员的恶意删除数据或者无意误删...

2019-09-24 11:05:18 700

原创 JAVA SSO单点登录原理以及实现方案

首先是单点登录的基本原理理解,此处可看这篇文章,写得很浅显易懂:https://www.cnblogs.com/lexiaofei/p/7172214.html进入正题,如何真正实现一个系统的单点登录方案呢?大家都知道在JAVA web中,服务器保持登录状态使用的是session机制,而在客户端如果希望存储某个系统的信息使用的是cookie机制。而SSO WEB的实现方案正是根据这两个来进...

2019-09-20 10:59:08 1474

空空如也

空空如也

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

TA关注的人

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