自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

鱼获飞的博客

听歌煲片跑全马,读书做梦敲代码。

  • 博客(63)
  • 资源 (2)
  • 收藏
  • 关注

原创 mysql索引

1、empty和null存储结构null为什么会影响索引性能?变长列表和NULL值列表超出范围怎么存储?2、索引结构B+树结构:页结构:页的row结构:3、索引种类主键索引:一种特殊的唯一索引,不允许有空值。唯一索引:索引列的值必须唯一,但允许有空值。支持多列。普通索引:最基本的索引,没有任何限制。联合索引:多个列组成的索引,遵循”最左前缀“原则。全文索引:支持大数据全文检索的倒排索引,版本5.6开始支持。聚簇索引和非聚簇索引:Every InnoDB t

2021-04-21 15:41:13 223

原创 MySQL散记

sql优化把数据量大的表作为驱动表 (straight join)用exists代替in的子查询在查询多的表上建立索引(一般结果在20%左右)​ 1.在经常使用where条件的字段上建立索引​ 2.在表关联的字段上建立索引​ 3.在经常使用order by 或 group by的字段建立索引​ 4.根据情况优先使用唯一索引, 单个索引区分度不大时使用联合索引索引失效的情况1.右模糊匹配时2.联合索引使用了只使用了右边的索引3.索引字段是int

2020-12-17 11:27:36 236

原创 MySQL组件和数据结构

连接器由一个工作线程去从一个网络连接中读取SQL语句IO模型:IO多路复用。扩展:五种网络IO模型解析器SQL接口(SQL Interface):执行SQL语句查询解析器(Parser):对SQL语句进行拆分解析查询优化器:生成执行计划,选择最优的查询路径ps:常用定位sqlexplain sqlinformation_schema.optimizer_trace执行器:执行器根据执行计划调用存储引擎的接口innodb索引:B+树支持MVCC有效地利用以及使

2020-12-11 15:40:36 245 1

原创 spring循环引入

spring的循环引用:class A { @Autowired A a; @PostConstruct public void testa () { System.out.println("------a PostConstruct--------"); }}class B { @Autowired B b; @PostConstruct public void testb () { System.out.println(

2020-05-27 20:17:49 197

原创 ReentrantLock源码

ReentrantLock的源码分析:ReentrantLock:public class ReentrantLock implements Lock, java.io.Serializableabstract static class Sync extends AbstractQueuedSynchronizerstatic final class FairSync extends Sync { final void lock() { acquire(1); } protec

2020-05-27 20:03:10 105

原创 Java集合数据结构

1、HashMap的实现原理、HashMap的数据结构、HashMap的源码理解、从HashMap源码角度说说怎么put数据、HashMap怎么解决hash冲突的。extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable// 初始容量 16// 最大容量 2^30// 加载因子 0.75// 扩容倍数 2// 临界值 = 容量 * 加载因子 默认临界值为12// 最大临界值

2020-05-26 19:50:05 308

原创 双亲委派模型四次被破坏

第一次破坏:由于双亲委派模型是在JDK1.2之后才被引入的,而类加载器和抽象类java.lang.ClassLoader则在JDK1.0时代就已经存在,面对已经存在的用户自定义类加载器的实现代码,Java设计者引入双亲委派模型时不得不做出一些妥协。在此之前,用户去继承java.lang.ClassLoader的唯一目的就是为了重写loadClass()方法,因为虚拟机在进行类加载的时候会调用加载器的私有方法loadClassInternal(),而这个方法唯一逻辑就是去调用自己的loadClass()。

2020-05-21 18:37:03 347

原创 2020-05-16

Scala 是 Scalable Language 的简写,是一门多范式的编程语言。联邦理工学院洛桑(EPFL)的 Martin Odersky 于 2001 年基于 Funnel 的工作开始设计 Scala。Funnel 是把函数式编程思想和 Petri 网相结合的一种编程语言。Scala 类似于 Java 的编程语言,设计初衷是实现可伸缩的语言,并集成面向对象编程和函数式编程的各种特性。...

2020-05-16 09:29:20 126

原创 spark生态圈

Spark 生态圈是加州大学伯克利分校的 AMP 实验室打造的,是一个力图在算法(Algorithms)、机器(Machines)、人(People)之间通过大规模集成来展现大数据应用的平台。AMP 实验室运用大数据、云计算、通信等各种资源及各种灵活的技术方案,对海量不透明的数据进行甄别并转化为有用的信息,以供人们更好地理解世界。该生态圈已经涉及机器学习、数据挖掘、数据库、信息检索、自然语言处理和语音识别等多个领域。如图 1 所示,Spark 生态圈以 Spark Core 为核心,从 HDFS、Ama

2020-05-11 11:42:23 167

原创 perfma:JVM工具

https://console.perfma.com/JVM参数分析:这块服务提供了若干个服务:参数查询、参数检查、参数变迁、参数优化、参数生成等。定位JVM问题时,我们通常需要分析Java线程Dump(Java线程Dump生成方式为:jstak -l pid > pid.log)。perfma提供了3种形式:本地上传,HTTP下载,FTP下载。我们一般本地上传用的比较多。...

2020-04-15 11:32:11 3651

原创 scala语法

lesson3 scala变量和表达式、基本数据类型、运算符号和apply函数scala解释器也被称为REPL,会快速编译scala代码为字节码,然后交给JVM来执行。REPL:Read(取值)-> Evaluation(求值)-> Print(打印)-> Loop(循环)。计算表达式:在scala>命令行内,键入scala代码,解释器会直接返回结果给你。如...

2020-04-09 19:15:23 275

原创 spark学习笔记

Spark 框架:Spark Core:用于离线计算。Spark SQL:用于交互式查询。Spark Streaming:用于准实时流式计算。Spark MLlib:用于机器学习。Spark GraphX:用于图计算。Spark 主要用于大数据的计算,而 Hadoop 以后主要用于大数据的存储(比如HDFS、Hive、HBase等),以及资源调度(Yarn)。Spark 使用 Sp...

2020-04-06 14:10:37 112

原创 elasticsearch用法和原理笔记

lesson 2Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统lesson 31、什么是搜索?2、如果用数据库做搜索会怎么样?3、什么是全文检索、倒排索引和Lucene?4、什么是Elasticsearch?lesson 4elasticsearch的核心概念Near Realtime(NRT):近实时,两个意思,从写入数据到数据可以被搜索到有...

2020-04-03 00:16:19 253

原创 缓存雪崩、穿透和失效问题

1、缓存雪崩: redis 集群彻底崩溃后,大量请求直接打到 mysql 上面,导致 mysql 也崩溃继而导致源服务乃至整个网站崩溃解决方案:事前:发生缓存雪崩之前怎么防止 redis 挂掉redis集群部署(冗余slave部署),利用redis本身的主从切换的高可用性双机房部署,一套集群部署在两个机房或两个机房各自部署一套集群事中:redis 集群已挂三层缓存架构,nginx...

2020-03-23 21:41:51 111

原创 缓存预热和热点数据(storm)解决方案

- 支撑各种实时类的项目场景:实时处理消息以及更新数据库,基于最基础的实时计算语义和API(实时数据处理领域) - 对实时的数据流持续的进行查询或计算,同时将最新的计算结果持续的推送给客户端展示,同样基于最基础的实时计算语义和API(实时数据分析领域)对耗时的查询进行并行化,基于DRPC,即分布式RPC调用,单表30天数据,并行化,每个进程查询一天数据,最后组装结果 - 高度的可伸缩性:如果要扩容直接加机器,调整storm计算作业的并行度,storm会自动部署更多的进程和线程到其他的机器,无缝快速

2020-03-22 13:49:54 847

原创 高可用(hystrix)解决方案

作用:资源隔离、限流、熔断、降级、运维监控1、创建command:资源隔离:线程池隔离技术与信号量隔离技术线程池隔离技术是 hystrix 自己会开一个线程池,然后web容器如 tomcat 把请求讲交给 hystrix线程池来处理,当超过 hystrix 线程池大小时就会快速失败;而信号量隔离技术是直接使用web容器的线程,一旦超过信号量的容量就会快速失败,hystrix 默认的策略就是...

2020-03-22 00:14:25 402

原创 三级缓存架构和分布式数据一致性问题解决方案

代码地地址:item-service 和 casche-service1、解决热点数据 redis 与 mysql 数据双写不一致的问题背景:执行查询操作:(懒加载方案,用的时候才加载)客户端服务直接查询 redis 集群,如果集群里面有就直接返回信息到客户端。如果 redis 集群里面没有,就去商品服务里面查询。商品服务直接去 mysql 里面查询,如果没有就返回空。如果有就更...

2020-03-15 14:27:10 734

原创 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 185

原创 redis主从架构实现高可用(哨兵机制)的原理

**哨兵机制的作用:**- 集群监控,负责监控 redis master 和 slave 进程是否正常工作- 消息通知,如果某个 redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员- 故障转移,如果 master node 挂掉了,会自动转移到 slave node 上- 配置中心,如果故障转移发生了,通知 client 客户端新的 master 地址

2020-03-13 10:12:48 204

原创 redis实现高性能的主从架构原理

**主从架构,读写分离**:当启动一个 slave 时,它会发送一个 PSYNC 命令给 master ,如果这是 slave 重新连接 master,那么master 仅仅会复制给 slave 部分缺少的数据; 否则如果是 slave 第一次连接 master,那么会触发一次 full resynchronization ,开始 full resynchronization 的时候,master 会启动一个后台线程,开始生成一份RDB快照文件,同时还会将从客户端收到的所有写命令缓存在内存中。RDB文件生成

2020-03-11 11:09:32 274

原创 redis 企业级灾备方案

1)写crontab定时调度脚本去做数据备份2)每小时都copy一份rdb的备份到一个目录中,仅保留最近48小时的备份3)每天都保留一份当日的rdb的备份到一个目录中,仅保留最近1个月的备份4)每次copy备份的时候都把旧的备份给删掉5)每天晚上将当前服务器上所有的数据备份发送一份到远程的云服务上

2020-03-09 15:49:58 409

转载 事务失效和循环依赖

文章来源:https://www.cnblogs.com/V1haoge/p/9476550.html一篇不错的讲解Spring事务实现原理和事务不生效的解决方法的文章,感谢作者。一、提出问题不知道你是否遇到过这样的情况,在ssm框架中开发web引用,或者使用springboot开发应用,当我们调用一个带有@Transactional注解的方法执行某项事务操作的时候,有时候会发现事务是不生效...

2019-10-29 10:01:38 597

原创 hadoop生态圈

大数据主要解决海量数据的存储和海量数据的分析计算问题,其特点是大量、高速、多样和低价值密度。Google 是 hadoop 的思想之源:GFS -> HDFS, Map-Reduce -> MR, BigTable -> Hbase。Hadoop 三大发行版本是Apache、Cloudera和HortonworksHadoop 组成:HDFS:一个高可靠、高吞吐量的分布式文...

2019-06-11 21:31:25 289

原创 分布式文件服务器介绍

FastDFS是一个开源的轻量级分布式文件系统,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。官方论坛 http://bbs.chinaunix.net/forum-240-1.htmlFastDfs google Code http://code.google.com/p/fast...

2019-05-31 10:40:25 2994

原创 《Java程序性能优化》挖坑

今天扫了葛一鸣的《Java程序性能优化》,发现这本书还是很有价值,于是准备挖坑了,一个大坑。。。Java性能调优可以从以下方面切入:1、设计调优。1)设计模式:通读《Java设计模式》、Value Object模式和业务代理模式。2)常用组件:缓冲(Buffer)和缓存(Cache)、对象池(线程池和连接池)。3)常用方法:并行代替串行、负载均衡、时间换空间和空间换时间。2、Java程...

2019-05-13 17:19:09 174

原创 通用Mapper和Mybatis查询速度对比

今天突然想对比项是mybatis写sql快还是通用Mapper快,就手动做个小测试,因为mybatis的缓存测试手动测试起来比较麻烦,后面学习压测工具再进行全面测试对比。long mt1 = System.currentTimeMillis();List<PayOrder> payOrderList = payOrderMapper.selectByExample(example)...

2019-05-08 19:22:02 2871 1

原创 CAT分布式实时监控系统

CAT(Central Application Tracking),是基于纯Java开发的分布式实时监控系统。开源代码托管在GitHub(搜索CAT即可),作者是吴其敏(qmwu2000,目前在平安任职)和尤勇(youyong205 目前在点评运维部)。CAT采用非常开放的Apache License开源,在国内已经有100多家互联网公司在使用和评估,包括大众点评网、携程网、猎聘网、陆金所和找钢网...

2019-04-25 21:18:09 1284 1

原创 UML画图

来填设计模式的坑了,这段时间看了简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式和单例模式,看完后为了加深理解便想着画画这些模式的UML图。先是准备用powerdesigner画的,觉得太丑了,又找到了plantUML,正好在IDEA可以引入该软件的软件,正好,安装plantUML后配置下环境变量:GRAPHVIZ_HOME:D:\Idea\graphviz\installfile...

2019-04-23 20:28:13 402

原创 代码的坏味道

“代码的坏味道”是来自Martin Flowler所著《重构 改善既有代码的设计》第三章的title,据作者说这一章来自Kent Beck。我觉得本章是应用重构的重点,因为它告诉我们在看到什么样的代码时就应该思考重构了,下面我就把22种坏味道以我的理解整理了一下。重复代码(Duplicated Code):分为三种情况,一个类中含有相同的表达式,Extract Method(110),两个互...

2019-04-21 12:20:57 6532

原创 面向对象设计原则和设计模式

提高一个软件系统的可维护性和可复用性是面向对象软件设计的核心问题,软件的可维护性是指软件能够被理解、改正、适应及扩展的难易程度,软件的可复用性是指软件能够被重复使用的难易程度。可维护性的复用是以设计原则为基础的,下面列举7个重要的的面向对象设计原则:单一职责原则(SRP):一个对象应该只包含单一的职责,并且该职责被完整的封装在一个类中。用于控制类的粒度大小,是实现高内聚、低耦合的指导方针。一...

2019-04-13 00:12:36 683

原创 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 250

原创 synchronized关键字底层实现原理

最近在看周志明的《深入理解JVM虚拟机》,看到class文件结构,便想边看边做些笔记。我们都知道Java“一次编译,到处运行”的特性,那么这种特性怎么实现的呢?Java源文件被Java编译器编译成JVM可以识别的.class文件执行,即JVM是Java程序运行的底层环境,而JVM虚拟机与操作系统没有什么关系,这就是“一次编译,到处运行”的原因。但是JVM是怎么执行我们的.class文件的呢?JV...

2019-03-10 23:54:24 541

原创 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 1549

原创 juc下常用的五个高并发工具

1、CountDownLatch:同步计数器当CountDownLatch的count计数&gt;0时,await()会造成线程阻塞,当使用countDown()让count-- == 0时,线程结束阻塞。 如果想让其他线程执行完指定程序,其他所有程序都执行结束后再执行,这时可以用CountDownLatch,但计数无法被重置,如果需要重置计数,请考虑使用 CyclicBarrier。下面dem...

2019-03-09 22:15:17 2636

原创 Springboot自动加载机制源码分析

我们都知道spring boot框架是集合各种框架很好的开发工具,搭建项目环境可以用脚手架傻瓜模式搭建,那么这种机制下面的原理是怎么实现的呢?下面记录下查看源码的过程:Spring boot的三个关键地方:pom文件引入依赖包yml文件进行相关配置SpringBoot的启动类实现自动加载的源头在启动类上,主要的地方有两个:@SpringBootApplication和**Spring...

2019-03-09 19:42:38 2455

原创 数据库库表常见设计笔记

突然想整理下以前项目中遇到的数据库库表设计的简单思路,下面以网上商品的表设计为例:商品有分类、品牌,如果按照简单思路来看创建三张表good、brand、category就可以了,但是在真正项目中往往不是那么简单。根据表关系设计库表1、树形结构:树形结构表一般用id和parent_id来设计这里商品分类表(tb_category)分了3个层级,当然也可以为4个,这里不论--商品分类表(tb...

2019-03-08 19:55:01 441

原创 线程池相关知识和调优

JUC中已经默认提供了一些种线程池给我们用,如果这些还不能达到我们的要求,我们也可以自己来创建线程池使用。常见的四种线程池:newCachedThreadPool:可缓存的线程池,该线程池中没有核心线程,非核心线程的数量为Integer.max_value,就是无限大,当有需要时创建线程来执行任务,没有需要时回收线程,适用于耗时少,任务量大的情况。newSecudleThreadPool:...

2019-03-07 17:05:26 1083

原创 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 8538

原创 数据库定时任务

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 436

原创 Netty入门demo

Netty 是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty 作为异步事件驱动的网络,高性能之处主要来自于其 I/O 模型和线程处理模型,前者决定如何收发数据,后者决定如何处理数据。1、I/O 模型NIONetty 的 IO 线程 NioEventLoop 由于聚合了多路复用器 Selector,可以同时并发处理成百上千个客户端连接。当线程从某...

2019-02-27 16:26:33 331

从零开始带你成为jvm实战高手.txt

从今天开始,我们将要开始一个MySQL的专栏,一起来研究MySQL数据库的底层原理和各种实践案例,以及互联网公司的技术方案。现在我们先来看看,在一个Java工程师眼中的数据库是什么东西?平时我们在做Java系统时,一般情况下都会连接到一个MySQL数据库上去,执行各种增删改查的语句。据我所知,目前行业里大部分的Java工程师对MySQL的了解和掌握程度,大致就停留在这么一个阶段:对MySQL可以建库建表建索引,然后就是执行增删改查去更新和查询里面的数据!所以我们看下面的图,很多Java工程师眼中的数据库大致就是下面这样子。(附加说明:我在写《从0开始带你成为JVM实战高手》专栏时,采用的是亿图

2020-08-26

dubbo初级和高级视频资料(含代码)

01、Spring boot集成Dubbo入门到精通视频教程。02、Dubbo基础到高级教程。03、Dubbox分布式框架入门到精通教程。04、【实战】基于dubbo海量流量分布式商城项目实战

2019-03-10

空空如也

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

TA关注的人

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