Java
鱼获飞
听歌煲片跑全马,读书做梦敲代码。
展开
-
缓存雪崩、穿透和失效问题
1、缓存雪崩: redis 集群彻底崩溃后,大量请求直接打到 mysql 上面,导致 mysql 也崩溃继而导致源服务乃至整个网站崩溃解决方案:事前:发生缓存雪崩之前怎么防止 redis 挂掉redis集群部署(冗余slave部署),利用redis本身的主从切换的高可用性双机房部署,一套集群部署在两个机房或两个机房各自部署一套集群事中:redis 集群已挂三层缓存架构,nginx...原创 2020-03-23 21:41:51 · 129 阅读 · 0 评论 -
高可用(hystrix)解决方案
作用:资源隔离、限流、熔断、降级、运维监控1、创建command:资源隔离:线程池隔离技术与信号量隔离技术线程池隔离技术是 hystrix 自己会开一个线程池,然后web容器如 tomcat 把请求讲交给 hystrix线程池来处理,当超过 hystrix 线程池大小时就会快速失败;而信号量隔离技术是直接使用web容器的线程,一旦超过信号量的容量就会快速失败,hystrix 默认的策略就是...原创 2020-03-22 00:14:25 · 442 阅读 · 0 评论 -
三级缓存架构和分布式数据一致性问题解决方案
代码地地址:item-service 和 casche-service1、解决热点数据 redis 与 mysql 数据双写不一致的问题背景:执行查询操作:(懒加载方案,用的时候才加载)客户端服务直接查询 redis 集群,如果集群里面有就直接返回信息到客户端。如果 redis 集群里面没有,就去商品服务里面查询。商品服务直接去 mysql 里面查询,如果没有就返回空。如果有就更...原创 2020-03-15 14:27:10 · 776 阅读 · 0 评论 -
redis cluster的搭建和原理
1、在 linux 下执行命令:mkdir -p /etc/redis-clustermkdir -p /var/log/redismkdir -p /var/redis/7001mkdir -p /var/redis/7002mkdir -p /var/redis/7003mkdir -p /var/redis/7004mkdir -p /var/redis/7005mkdir ...原创 2020-03-13 19:31:22 · 203 阅读 · 0 评论 -
redis实现高性能的主从架构原理
**主从架构,读写分离**:当启动一个 slave 时,它会发送一个 PSYNC 命令给 master ,如果这是 slave 重新连接 master,那么master 仅仅会复制给 slave 部分缺少的数据; 否则如果是 slave 第一次连接 master,那么会触发一次 full resynchronization ,开始 full resynchronization 的时候,master 会启动一个后台线程,开始生成一份RDB快照文件,同时还会将从客户端收到的所有写命令缓存在内存中。RDB文件生成原创 2020-03-11 11:09:32 · 305 阅读 · 0 评论 -
redis 企业级灾备方案
1)写crontab定时调度脚本去做数据备份2)每小时都copy一份rdb的备份到一个目录中,仅保留最近48小时的备份3)每天都保留一份当日的rdb的备份到一个目录中,仅保留最近1个月的备份4)每次copy备份的时候都把旧的备份给删掉5)每天晚上将当前服务器上所有的数据备份发送一份到远程的云服务上原创 2020-03-09 15:49:58 · 451 阅读 · 0 评论 -
事务失效和循环依赖
文章来源:https://www.cnblogs.com/V1haoge/p/9476550.html一篇不错的讲解Spring事务实现原理和事务不生效的解决方法的文章,感谢作者。一、提出问题不知道你是否遇到过这样的情况,在ssm框架中开发web引用,或者使用springboot开发应用,当我们调用一个带有@Transactional注解的方法执行某项事务操作的时候,有时候会发现事务是不生效...转载 2019-10-29 10:01:38 · 649 阅读 · 0 评论 -
代码的坏味道
“代码的坏味道”是来自Martin Flowler所著《重构 改善既有代码的设计》第三章的title,据作者说这一章来自Kent Beck。我觉得本章是应用重构的重点,因为它告诉我们在看到什么样的代码时就应该思考重构了,下面我就把22种坏味道以我的理解整理了一下。重复代码(Duplicated Code):分为三种情况,一个类中含有相同的表达式,Extract Method(110),两个互...原创 2019-04-21 12:20:57 · 6603 阅读 · 0 评论 -
面向对象设计原则和设计模式
提高一个软件系统的可维护性和可复用性是面向对象软件设计的核心问题,软件的可维护性是指软件能够被理解、改正、适应及扩展的难易程度,软件的可复用性是指软件能够被重复使用的难易程度。可维护性的复用是以设计原则为基础的,下面列举7个重要的的面向对象设计原则:单一职责原则(SRP):一个对象应该只包含单一的职责,并且该职责被完整的封装在一个类中。用于控制类的粒度大小,是实现高内聚、低耦合的指导方针。一...原创 2019-04-13 00:12:36 · 715 阅读 · 0 评论 -
Linux服务器nginx的负载均衡配置
服务器nginx的配置:worker_processes 4;events { # 最大并发数 worker_connections 1024;}http{ #静态页面服务器 upstream upload_pool{ server 192.168.248.129:80; } #文件服务器 upstream upload_pool{ #...原创 2019-03-11 17:19:39 · 293 阅读 · 0 评论 -
《Java程序性能优化》挖坑
今天扫了葛一鸣的《Java程序性能优化》,发现这本书还是很有价值,于是准备挖坑了,一个大坑。。。Java性能调优可以从以下方面切入:1、设计调优。1)设计模式:通读《Java设计模式》、Value Object模式和业务代理模式。2)常用组件:缓冲(Buffer)和缓存(Cache)、对象池(线程池和连接池)。3)常用方法:并行代替串行、负载均衡、时间换空间和空间换时间。2、Java程...原创 2019-05-13 17:19:09 · 204 阅读 · 0 评论 -
线程池相关知识和调优
JUC中已经默认提供了一些种线程池给我们用,如果这些还不能达到我们的要求,我们也可以自己来创建线程池使用。常见的四种线程池:newCachedThreadPool:可缓存的线程池,该线程池中没有核心线程,非核心线程的数量为Integer.max_value,就是无限大,当有需要时创建线程来执行任务,没有需要时回收线程,适用于耗时少,任务量大的情况。newSecudleThreadPool:...原创 2019-03-07 17:05:26 · 1109 阅读 · 0 评论 -
CAT分布式实时监控系统
CAT(Central Application Tracking),是基于纯Java开发的分布式实时监控系统。开源代码托管在GitHub(搜索CAT即可),作者是吴其敏(qmwu2000,目前在平安任职)和尤勇(youyong205 目前在点评运维部)。CAT采用非常开放的Apache License开源,在国内已经有100多家互联网公司在使用和评估,包括大众点评网、携程网、猎聘网、陆金所和找钢网...原创 2019-04-25 21:18:09 · 1337 阅读 · 1 评论 -
UML画图
来填设计模式的坑了,这段时间看了简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式和单例模式,看完后为了加深理解便想着画画这些模式的UML图。先是准备用powerdesigner画的,觉得太丑了,又找到了plantUML,正好在IDEA可以引入该软件的软件,正好,安装plantUML后配置下环境变量:GRAPHVIZ_HOME:D:\Idea\graphviz\installfile...原创 2019-04-23 20:28:13 · 426 阅读 · 0 评论 -
通用Mapper和Mybatis查询速度对比
今天突然想对比项是mybatis写sql快还是通用Mapper快,就手动做个小测试,因为mybatis的缓存测试手动测试起来比较麻烦,后面学习压测工具再进行全面测试对比。long mt1 = System.currentTimeMillis();List<PayOrder> payOrderList = payOrderMapper.selectByExample(example)...原创 2019-05-08 19:22:02 · 2943 阅读 · 1 评论 -
分布式文件服务器介绍
FastDFS是一个开源的轻量级分布式文件系统,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。官方论坛 http://bbs.chinaunix.net/forum-240-1.htmlFastDfs google Code http://code.google.com/p/fast...原创 2019-05-31 10:40:25 · 3049 阅读 · 0 评论 -
hadoop生态圈
大数据主要解决海量数据的存储和海量数据的分析计算问题,其特点是大量、高速、多样和低价值密度。Google 是 hadoop 的思想之源:GFS -> HDFS, Map-Reduce -> MR, BigTable -> Hbase。Hadoop 三大发行版本是Apache、Cloudera和HortonworksHadoop 组成:HDFS:一个高可靠、高吞吐量的分布式文...原创 2019-06-11 21:31:25 · 305 阅读 · 0 评论 -
redis主从架构实现高可用(哨兵机制)的原理
**哨兵机制的作用:**- 集群监控,负责监控 redis master 和 slave 进程是否正常工作- 消息通知,如果某个 redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员- 故障转移,如果 master node 挂掉了,会自动转移到 slave node 上- 配置中心,如果故障转移发生了,通知 client 客户端新的 master 地址原创 2020-03-13 10:12:48 · 238 阅读 · 0 评论 -
springcboot分页助手pagehelper实现
1、 前台页面<template> <div> <v-layout class="px-3 pb-2"> <v-flex xs2> <v-btn color="info" small>新增</v-btn>原创 2019-01-05 19:25:17 · 327 阅读 · 0 评论 -
synchronized关键字底层实现原理
最近在看周志明的《深入理解JVM虚拟机》,看到class文件结构,便想边看边做些笔记。我们都知道Java“一次编译,到处运行”的特性,那么这种特性怎么实现的呢?Java源文件被Java编译器编译成JVM可以识别的.class文件执行,即JVM是Java程序运行的底层环境,而JVM虚拟机与操作系统没有什么关系,这就是“一次编译,到处运行”的原因。但是JVM是怎么执行我们的.class文件的呢?JV...原创 2019-03-10 23:54:24 · 571 阅读 · 0 评论 -
Java8集合流操作
一、集合流操作:多的不说直接贴(过滤、排序、聚合以及汇总demo)代码:/** * Created by wangk on 2019-03-10. */@Datapublic class User { private int id; private String name; private String classNo; private int age;...原创 2019-03-10 15:49:55 · 1565 阅读 · 0 评论 -
Spring Cloud Security实现单点登录(JWT+RSA)
JWT,全称是Json Web Token, 是JSON风格轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权;官网:https://jwt.ioJWT包含三部分数据:–Header:头部,通常头部有两部分信息:声明类型,这里是JWT加密算法,自定义我们会对头部进行base64加密(可解密),得到第一部分数据–Payload:载荷,就是有效数据,一般包含下面信息:...原创 2019-01-22 16:47:35 · 2999 阅读 · 0 评论 -
分布式事务和分布式锁笔记
-----分布式事务------单系统事务ACID特性不适用分布式系统,建议把需要事务的微服务聚合成一个单机服务,使用数据库的本地事务。不论任何一种方案都会增加系统的复杂度,这样的成本实在是太高,千万不要因为追求某些设计,而引入不必要的成本和复杂度。CAP 定理,又被叫作布鲁尔定理。对于设计分布式系统(不仅仅是分布式事务)的架构师来说,CAP 就是你的入门理论。C (强一致性):对某个指定...原创 2019-01-25 00:39:35 · 744 阅读 · 0 评论 -
Hibernate Validator笔记
Hibernate Validator是Hibernate提供的一个开源框架,使用注解方式非常方便的实现服务端的数据校验。hibernate Validator 是 Bean Validation 的参考实现 。Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint(约束) 的实现,除此之外还有一些附加的 constraint。在日常开发中,Hi...原创 2019-01-25 00:35:55 · 377 阅读 · 0 评论 -
Spring通用异常处理
异常处理1)引入springmvc依赖包<!--引入异常处理--><dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId></dependency>2)创建异常信原创 2019-01-08 14:20:30 · 314 阅读 · 0 评论 -
Java使用FastDFS模块
yaml文件配置:#项目通用配置lg: upload: baseUrl: http://image.legou.com/ filePath: E:\myproject\upload allowTypes: - image/jpeg - image/png - image/bmp#FastDFSfdfs: so-timeo...原创 2019-01-10 18:18:01 · 548 阅读 · 0 评论 -
jdk7下HashMap源码分析
&amp;amp;amp;amp;lt;textarea readonly=&amp;amp;amp;quot;readonly&amp;amp;amp;quot; name=&amp;amp;amp;quot;code&amp;amp;amp;quot; class=&amp;amp;amp;quot;Java&amp;amp;amp;quot;&amp;amp;amp;amp;原创 2018-12-15 00:57:49 · 154 阅读 · 0 评论 -
springcloud项目搭建笔记
1、系统架构的演变:1)集中式架构:代码耦合高,开发维护困难, 无法针对不同模块进行针对性优化,单点容错率低,并发能力差。2)垂直拆分:系统间相互独立,会有很多重复开发工作,影响开发效率。3)分布式服务:系统间耦合度变高,调用关系错综复杂,难以维护。4)服务治理(SOA):服务间会有依赖关系,一旦某个环节出错会影响较大,服务关系复杂,运维、测试部署困难。5)微服务特点:自治(服务独立)、...原创 2018-12-25 22:27:23 · 173 阅读 · 0 评论 -
springboot基础知识
1、springboot基本知识:整合springmvc如果你想要保持Spring Boot 的一些默认MVC特征,同时又想自定义一些MVC配置(包括:拦截器,格式化器, 视图控制器、消息转换器 等等),你应该让一个类实现WebMvcConfigurer,并且添加@Configuration`注解,但是千万不要加@EnableWebMvc注解。如果你想要自定义HandlerMapping、Han...原创 2018-12-25 22:23:22 · 242 阅读 · 0 评论 -
springboot的actuator配置
1、引入依赖包(2.0.0版本)<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></dependency>2、yaml文件配置#暴露端口...原创 2019-02-22 11:35:38 · 2431 阅读 · 0 评论 -
SpringCloud配置中心使用bus消息总线动态刷新
1、config-server服务端引入依赖&lt;!--actuator--&gt;&lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-actuator&a原创 2019-02-22 11:45:56 · 517 阅读 · 0 评论 -
linux下Java内存溢出排查
1、查询gc情况(每1秒钟打印一次gc情况)jstat -gcutil pid 1000:1查询结果含义:S0:幸存区1占用率S1:幸存区2占用率E:Eden区占用率O:老年区占用率M:元数据区(java8,相当于java7及之前的永久代的概念)使用大小ccs:压缩后使用率YGC:young gc 次数,YGCT:young gc耗时FGC:full gc次数FGCT:f...原创 2019-03-07 12:19:27 · 8818 阅读 · 0 评论 -
juc下常用的五个高并发工具
1、CountDownLatch:同步计数器当CountDownLatch的count计数>0时,await()会造成线程阻塞,当使用countDown()让count-- == 0时,线程结束阻塞。 如果想让其他线程执行完指定程序,其他所有程序都执行结束后再执行,这时可以用CountDownLatch,但计数无法被重置,如果需要重置计数,请考虑使用 CyclicBarrier。下面dem...原创 2019-03-09 22:15:17 · 2665 阅读 · 0 评论 -
Springboot自动加载机制源码分析
我们都知道spring boot框架是集合各种框架很好的开发工具,搭建项目环境可以用脚手架傻瓜模式搭建,那么这种机制下面的原理是怎么实现的呢?下面记录下查看源码的过程:Spring boot的三个关键地方:pom文件引入依赖包yml文件进行相关配置SpringBoot的启动类实现自动加载的源头在启动类上,主要的地方有两个:@SpringBootApplication和**Spring...原创 2019-03-09 19:42:38 · 2497 阅读 · 0 评论 -
数据库定时任务
Mysql定时任务开启event事件开关,默认是关闭的。#或者set GLOBAL event_scheduler=NO;set GLOBAL event_scheduler=1;修改时区为北京时间show variables like '%time_zone%';set time_zone = '+8:00';#默认情况下,delimiter是分号。#DELIMITER定好结...原创 2019-03-06 23:15:24 · 468 阅读 · 0 评论 -
数据库库表常见设计笔记
突然想整理下以前项目中遇到的数据库库表设计的简单思路,下面以网上商品的表设计为例:商品有分类、品牌,如果按照简单思路来看创建三张表good、brand、category就可以了,但是在真正项目中往往不是那么简单。根据表关系设计库表1、树形结构:树形结构表一般用id和parent_id来设计这里商品分类表(tb_category)分了3个层级,当然也可以为4个,这里不论--商品分类表(tb...原创 2019-03-08 19:55:01 · 462 阅读 · 0 评论 -
Java反射和动态代理
在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功能就称为java语言的反射机制。通俗点讲,通过反射,该类对我们来说是完全透明的,想要获取任何东西都可以。想要使用反射机制,就必须要先获取到该类的字节码文件对象(.class),通过字节码文件对象,就能够通过该类中...原创 2019-02-27 09:46:23 · 164 阅读 · 0 评论 -
Netty入门demo
Netty 是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty 作为异步事件驱动的网络,高性能之处主要来自于其 I/O 模型和线程处理模型,前者决定如何收发数据,后者决定如何处理数据。1、I/O 模型NIONetty 的 IO 线程 NioEventLoop 由于聚合了多路复用器 Selector,可以同时并发处理成百上千个客户端连接。当线程从某...原创 2019-02-27 16:26:33 · 381 阅读 · 0 评论 -
Zuul过滤器
@Component //注入到spring容器public class LoginFilter extends ZuulFilter { @Override public String filterType() { //pre 请求在路由之前执行 //routing 在路由请求时调用 //post 在routing和error...原创 2019-02-22 13:56:01 · 124 阅读 · 0 评论 -
nginx和跨域解决方案
1、引入nginx的原因(反向代理)。我们可以使用hosts修改域名直接指定IP地址,但是只能访问默认端口80。这是远远不够的。80是http协议的默认端口,是在输入网站的时候其实浏览器(非IE)已经帮你输入协议了,所以你输入http://baidu.com,其实是访问http://baidu.com:80。2、nginx可以作为web服务器,但更多的时候,我们把它作为网关,因为它具备网关必...原创 2019-01-03 23:32:08 · 887 阅读 · 0 评论