自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(375)
  • 问答 (1)
  • 收藏
  • 关注

转载 BeanFactory和ApplicationContext谁才是SpringIoC容器?

Spring-framework 官方文档简单翻译在org.springframework.beans和org.springframework.context包是Spring框架的IoC容器的基础。该 BeanFactory 界面提供了一种高级配置机制,能够管理任何类型的对象「这里提到的是管理对象,不是管理Bean」。ApplicationContext 是的子接口BeanFactory。它增加了:与Spring的AOP功能轻松集成消息资源处理(用于国际化)事件发布应用层特定的上下文,例如We

2022-05-15 17:13:09 328

转载 SpringIOC 依赖注入

概述根据Bean名称注入根据Bean类型查找单个bean 对象集合bean 对象注入容器内建对象注入非Bean 对象注入类型实时注入延迟注入注入方式接口注入Seter 注入注解注入构造注入配个图...

2022-05-15 16:41:51 203

转载 SpringIOC 依赖查找

概述根据名称查找实时查找延迟查找根据Bean 类型查找单个bean 对象集合bean 对象根据Bean 名称➕类型查找根据注解查找单个bean 对象集合bean 对象下面找些简单例子做一个示范首先,我们创建一个包含 spring-context 依赖的 maven 项目,然后定义一个 User.classpublic class User { private long id; private String name; public

2022-05-15 16:22:22 242

转载 Spring IOC 一些概念

IOC职责通用职责依赖处理依赖查找依赖注入生命周期管理容器托管资源(Java Beans 或其他资源 例如事件监听资源)配置容器外部化配置托管资源(Java Beans 或其他资源 例如XML 文件等)Java Beans 特性依赖查找生命周期管理配置元信息事件自定义资源管理持久化轻量级容器管理应用代码 控制容器启停 生命周期等等快速启动容器不需要一些特殊的配置就能启动轻量级内存占用 最小化API 依赖提供管控的渠道 帮助用

2022-05-15 15:18:52 98

原创 OLAP 多维分析

OLAP 主要操作是复杂查询,可以多表关联,使用count, sum, AVG 等聚合函数OLAP 对复杂查询做了直观的定义,包括钻取,切片,切块,旋转。上面的图只是大概表示一个样子直接看可能不太懂下面单个讲解一下钻取对不同维度层次的分析,通过改变维度的层次来变换分析的粒度。钻取包含上卷(Roll-up) 下钻(Drill-down)上卷(Roll-up) 也称为向上钻取,指从底到高层次的切换。下钻(Drill-down) 高层次向低层次切换切片 切块选择某个维度进行分割称为切片按

2021-08-18 21:00:10 505

原创 不同系统的建模方式

1. OLTP 系统建模方式OLTP 在线事务处理系统,主要的操作是随机读写为了保证事务的一致性,减少冗余,常使用关系模型在关系模型中,使用第三范式规则来减少冗余2. OLAP 在线联机分析OLAP 系统主要操作是复杂分析查询;关注数据整合,以及分析,处理性能。OLAP 根据数据的存储方式不同,又分为ROLAP,MOLAP,HOLAPROLAP (Relation OLAP 关系型OLAP) : 使用关系构建模型,存储系统一般为RDBMS典型的建模方法有 ER 模型,维度模

2021-08-18 08:23:59 603

转载 volatile 如何实现保证可见性和有序性

可见性lock指令,对volatile修饰的变量,执行写操作的话,JVM会发送一条lock前缀指令给CPU,CPU在计算完之后会立即将这个值写回主内存,同时因为有MESI缓存一致性协议,所以各个CPU都会对总线进行嗅探,自己本地缓存中的数据是否被别人修改如果发现别人修改了某个缓存的数据,那么CPU就会将自己本地缓存的数据过期,然后这个CPU上执行的线程在读取那个变量的时候,就会从主内存重新加载最新的数据。lock前缀指令 + MESI缓存一致性协议有效性(2)内存屏障:禁止重排序JVM提供的内存

2021-08-15 23:02:11 982

转载 Java虚拟机OOM之GC overhead limit exceeded

GC回收时间过长时会抛出OutOfMemoryError。过长的定义是:超过98%的时间用来做GC并且回收了不到2%的堆内存。连续多次GC都只回收了不到2%的极端情况下才会抛出。假如不抛出GC overhead limit错误会发生什么情况呢?那就是GC清理的这么点内存很快会再次填满,迫使GC再次执行,这样就会形成恶性循环,CPU使用率一直是100%,而GC却没有任何成果示例代码:public class GCOverheadLimitExceededDemo { public stat

2021-08-10 23:39:59 298

原创 Java虚拟机OOM之运行时常量池溢出

在 JDK 1.7 之前如果要向运行时常量池中添加内容,最简单的做法就是使用 String.intern()这个 Native 方法。该方法的作用是:如果池中已经包含一个等于此 String 对象的字符串,则返回代表池中这个字符串的String 对象;否则,将此 String 对象包含的字符串添加到常量池中,并且返回此 String 对象的引用。由于常量池分配在方法区内,我们可以通过-XX:PermSize 和-XX:MaxPermSize 限制方法区的大小,从而间接限制其中常量池的容量代码运行时常量池导

2021-08-10 23:36:41 281

转载 Java虚拟机OOM之方法区溢出

方法区用于存放 Class 的相关信息,如类名、访问修饰符、常量池、字段描述、方法描述等。对于这个区域的测试,基本的思路是运行时产生大量的类去填满方法区,直到溢出。虽然直接使用 JavaSE API 也可以动态产生类(如反射时的GeneratedConstructorAccessor 和动态代理等),但在本次实验中操作起来比较麻烦。在代码清单 2-5 中,笔者借助 CGLib①直接操作字节码运行时,生成了大量的动态类。值得特别注意的是,我们在这个例子中模拟的场景并非纯粹是一个实验,这样的应用经常会出现在

2021-08-10 23:07:31 269

转载 Java虚拟机OOM之虚拟机栈和本地方法栈溢出

由于HotSpot虚拟机中并不区分虚拟机栈和本地方法栈,因此,虽然设置本地方法栈大小的参数(-Xoss)存在,但是无效,栈容量只能由-Xss参数设定。关于虚拟机栈和本地方法栈溢,在java虚拟机规范中描述了两种异常:(1)如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常(2)如果虚拟机在扩展栈时无法申请到足够内存空间,则抛出OutOfMemoryError异常(3)与虚拟机栈一样,本地方法栈区域也会抛出 StackOverflowError 和OutO

2021-08-10 23:00:52 355

原创 kafka高吞吐量的原因

顺序读写kafka的消息是不断追加到文件中的,这个特性使kafka可以充分利用磁盘的顺序读写性能顺序读写不需要硬盘磁头的寻道时间,只需很少的扇区旋转时间,所以速度远快于随机读写零拷贝在Linux kernel2.2 之后出现了一种叫做"零拷贝(zero-copy)"系统调用机制,就是跳过“用户缓冲区”的拷贝,建立一个磁盘空间和内存的直接映射,数据不再复制到“用户态缓冲区分区kafka中的topic中的内容可以被分为多分partition存在,每个partition又分为多个段se.

2021-08-10 21:59:38 102

原创 Flink on Yarn

Flink 提供了两种在 yarn 上运行的模式,分别为 Session-Cluster 和 Per-Job-Cluster模式。1) Session-cluster 模式:Session-Cluster 模式需要先启动集群,然后再提交作业,接着会向 yarn 申请一块空间后,资源永远保持不变。如果资源满了,下一个作业就无法提交,只能等到yarn 中的其中一个作业执行完成后, 释放了资源, 下个作业才会正常提交。所有作业共享 Dispatcher 和 ResourceManager;共享资源;适

2021-08-09 21:54:31 146

转载 Semaphore 信号量限流 ,这东西真管用吗

最近参与公司的服务治理项目,主要目的是为了保证生产服务高可用性,以及高稳定性。为了更好的参与的这个项目,这段时间一直在充电学习这方面的相关知识,包括限流,熔断,服务降级等等。那在学习限流的时候,看到网上很多文章中直接使用了JDK 中 Semaphore 实现了限流器。虽然到达的限流的目的,但是实际上其还是存在很大缺陷。那你如果没有经过完整测试,直接将这套限流方式照搬过来,发到了生产环境,那就等着背这口大锅吧。好了,今天我们主要来聊聊 Semaphore ,文章主要内容如下图所示:semaph

2021-08-07 23:54:21 619

转载 维度建模的三种模式

星形模式:以事实表为中心,所有的维度表直接连在事实表上,最简单最常用的一种星型模式的核心是一个大的中心表(事实表),一组小的附属表(维表)。星型模式是维度模型最简单的形式,也是数仓以及数据集市使用最广泛的形式。维表只和事实表关联,维表之间没有关联;每个维表的主码为单列,且该主码放置在事实表中,作为两边连接的外码;以事实表为核心,维表围绕核心呈星形分布。雪花模式:雪花模式的维度表可以拥有其他的维度表,这种不易维护雪花模式是星型模式的扩展,所谓的“雪花化”就是将星型模式中的维度表.

2021-08-05 23:00:47 2758

转载 维度建模是什么

维度模型是数据仓库领域大师Ralph Kimball 所倡导,以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。维度建模是 数据仓库/商业智能 项目成功的关键,为什么这么说,因为不管我们的数据量从GB到TG还是到PB,虽然数据量越来越大,但是数据展现要获得成功,就必须建立在简单性的基础之上,而维度建模就是时刻考虑如何能够提供简单性,以业务为驱动,以用户理解性和查询性能为目标。维度建模:维度建模是专门应用于分析型数

2021-08-05 22:36:12 1358

转载 维度数据模型建模过程

选择业务流程确认那些业务处理流程是数据仓库应该覆盖的,是维度方法的基础。因此,建模的第一个步骤是描述需要建模的业务流程。例如,需要了解和分析一个零售店的销售情况,那么与该零售店销售相关的业务流程都是需要关注的。为了描述业务流程,可以简单利用文本记录,或者使用“业务流程建模标注”(BPMN)方法,也可以使用统一建模语言(UML)或其他类似方法。声明粒度确定了业务流程后,下一步是声明模型的粒度。这里的粒度用于确定事实中表示的是什么,例如,一个零售店的顾客在购物小票上的一个购买条目。在选择维度和事实.

2021-08-05 22:28:59 174

原创 Java 中的几种基本数据类型是什么?各自占用多少字节?

Java中有八种基本数据类型1、boolen—>1bit2、byte----->1字节3、short---->2字节4、char----->2字节5、int------>4字节6、float---->4字节7、long----->8字节8、double—>8字节但是其实boolean 这个一块是比较有争议得 详情可以看下这个https://blog.csdn.net/u012957549/article/details/119360527

2021-08-05 00:07:46 350

转载 Java中的boolean类型到底占用多少个字节?

一、什么是boolean类型?布尔类型:布尔数据类型只有两个可能的值:真和假。使用此数据类型为跟踪真/假条件的简单标记。这种数据类型就表示这一点信息,但是它的“大小”并不是精确定义的。也就是说,Java规范中,没有明确指出boolean的大小。二、如果要分大小,那么到底占几个字节呢?通过搜查各类资料(借鉴了一些大神的内容),发现有以下3种说法。1个bit(1/8个字节)boolean类型的值只有true和false两种逻辑值,在编译后会使用1和0来表示,这两个数在内存中按位算,仅需1位(bit)即

2021-08-03 22:17:30 1949 1

原创 Hive UDTF

1. 简介UDTF(User-Defined Table-Generating Functions) 用来解决 输入一行输出多行(On-to-many maping) 的需求。下面我们看下 具体怎么来编写继承org.apache.hadoop.hive.ql.udf.generic.GenericUDTF,实现initialize, process, close三个方法。2.编写UDTF首先会调用initialize方法,此方法返回UDTF的返回行的信息(返回个数,类型)。初始化完成后,会调用proc

2021-08-03 21:53:18 107

转载 Hive- UDF&GenericUDF

在Hive中,用户可以自定义一些函数,用于扩展HiveQL的功能,而这类函数叫做UDF(用户自定义函数)。UDF分为两大类:UDAF(用户自定义聚合函数)和UDTF(用户自定义表生成函数)。在介绍UDAF和UDTF实现之前,我们先在本章介绍简单点的UDF实现——UDF和GenericUDF,然后以此为基础在下一章介绍UDAF和UDTF的实现。Hive有两个不同的接口编写UDF程序。一个是基础的UDF接口,一个是复杂的GenericUDF接口。org.apache.hadoop.hive.ql. exec

2021-08-03 21:30:25 499

原创 Spark五种 Join 方式

在Spark 种 有2种 数据分发方式分别是 Hash Shuffle,和BroadCast。在Spark 种 有3种 join 方式 分别是 SoftMergeJoin, HashJoin,Nested Loop Join 。所以一共5种join 方式(没有 BroadCast SoftMergeJoin)为什么没有它呢相比 SMJ,HJ 并不要求参与 Join 的两张表有序,也不需要维护两个游标来判断当前的记录位置,只要基表在 Build 阶段构建的哈希表可以放进内存,HJ 算法就可以在 Pro

2021-08-02 22:20:27 6755 1

转载 线程的几种状态以及sleep/wait/yield/join的区别

一.线程通常有五种状态:新建状态(New):新创建了一个线程对象。就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待 获取CPU的使用权。运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进...

2020-04-14 22:24:50 601

原创 Leetcode 数组生成二叉树的工具

在刷leetcode 很多树题目的时候经常遇到这种情况,For example:Given BST [1,null,2,2], 1 \ 2 / 2发现测试的例子给的是一个数组 然而 需要输入的结果是一个树形结构每次手动的去创建比较麻烦,写了一个数组到树的一个小工具由于其中有null 的情况所以用的是装箱类,实现过程也比较简单,就是先创建根节点然后在...

2020-04-13 23:58:34 1732

原创 AQS介绍

AQS,即AbstractQueuedSynchronizer, 队列同步器,它是Java并发用来构建锁和其他同步组件的基础框架。来看下同步组件对AQS的使用:AQS是一个抽象类,主是是以继承的方式使用。AQS本身是没有实现任何同步接口的,它仅仅只是定义了同步状态的获取和释放的方法来供自定义的同步组件的使用。从图中可以看出,在java的同步组件中,AQS的子类(Sync等)一般是同步组件的静态内...

2020-04-13 23:42:04 152

转载 Happens-before原则

如果一个操作Happens-before另一操作,那么第一个操作结果对第二个操作可见.而且第一个执行操作顺序在第二个之前执行.两个操作之间存在Happens-before关系,并不意味着一定要按照Happens-before制定的顺序执行操作,如果重排序后与Happens-before顺序执行的操作结果一致,这样的重排序并不非法happen-before 原则规则:程序次序规则...

2020-04-12 19:37:28 186

原创 Java volatile 有什么作用

在由Java语言编写的程序中。有时候为了提高程序的执行效率,编译器会自己主动对其进行优化,把经常被訪问的变量缓存起来,程序在读取这个变量的时候有可能会直接从缓存(比如寄存器)中来读取这个值。而不会去内存中读取。这样做的一个优点是提高了程序的执行效率,但当遇到多线程编程时。变量的值可能由于别的线程而改变了,而该缓存的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致。比如,在本次线程内,当...

2020-04-12 19:20:38 418

转载 单例模式与线程安全

单例模式我想是平时大家都会经常用到,需要用线程安全的方式去保证对象的唯一。通常会使用两种方式去创建单例模式:1.饿汉式单例这种方式实现起来比较简单 但是会造成资源的浪费如果不使用这个类的话。package Singleton; public class HungerSingleton { private static HungerSingleton singleton=ne...

2020-04-12 19:05:58 132

原创 Synchronized与Lock区别

Java里面的两种管程模型之前我们了解了Java里面的一种管程模型monitor,synchronized就是基于Monitor实现的管程模型,在这个模型里面,synchronized中用锁解决了资源互斥问题,然后提供了wait(),notify(),notifyAll() 一组方法解决了线程同步问题,Java里面另一种管程模型就是Lock+Condition, 在此模型中 Lock是用来解决资...

2020-04-12 18:23:07 317

转载 synchronized在JDK6做了哪些优化

记得在大学中那个时候刚开始学习java, 需要遇到多线程需要加锁的操作时,不管不顾全部都用synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着我们学习的进行我们知道synchronized是一个重量级锁,相对于Lock,它会显得那么笨重,以至于我们认为它不是那么的高效而...

2020-04-12 16:18:33 1373

转载 Java都有哪几种锁

一、公平锁/非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有可能,会造成优先级反转或者饥饿现象。对于Java ReentrantLock而言,通过构造函数指定该锁是否是公平锁,默认是非公平锁。非公平锁的优点在于吞吐量比公平锁大。对于Synchronized而言,也是一种非公平锁。由于其...

2020-04-11 21:51:56 187

转载 类加载器

虚拟机设计团队把加载动作放到JVM外部实现,以便让应用程序决定如何获取所需的类。Java语言系统自带有三个类加载器:Bootstrap ClassLoader :最顶层的加载类,主要加载核心类库,也就是我们环境变量下面%JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar和class等。另外需要注意的是可以通过启动jvm时指定-Xbootclas...

2020-04-06 15:53:36 93

转载 Java类加载机制

java 类不能直接运行的需要经过一系列的步骤才能在JVM 中运行 废话不多说,直接来看吧。一、什么是类的加载在介绍类的加载机制之前,先来看看,类的加载机制在整个java程序运行期间处于一个什么环节,下面使用一张图来表示从上图可以看,java文件通过编译器变成了.class文件,接下来类加载器又将这些.class文件加载到JVM中。其中类装载器的作用其实就是类的加载。今天我们要讨论的就是这...

2020-04-06 14:58:00 94

转载 https SSL流程原理

前面两章介绍了,我们了解对称加密与非对称加密的特点和优缺点,以及数字证书的作用。https没有采用单一的技术去实现,而是根据他们的特点,充分的将这些技术整合进去,以达到性能与安全最大化。这套整合的技术我们称之为SSL(Secure Scoket Layer 安全套接层)。所以https并非是一项新的协议,它只是在http上披了一层加密的外壳。https的建立先看一下建立的流程图:这里把h...

2020-04-05 19:48:43 339

转载 Https的数字证书与数字签名

本文介绍一下为了解决非对称加密中公匙来源的不安全性。我们可以使用数字证书和数字签名来解决。1.数字证书的申请在现实中,有一些专门的权威机构用来颁发数字证书,我们称这些机构为认证中心(CA Certificate Authority)。我们(服务器)可以向这些CA来申请数字证书。申请的过程大致是:自己本地先生成一对密匙,然后拿着自己的公匙以及其他信息(比如说企业名称啊什么的)去CA申请数字证书...

2020-04-05 19:33:25 708

转载 https原理及其中所包含的对称加密、非对称加密

一、为什么要使用https使用https的原因其实很简单,就是因为http的不安全。当我们往服务器发送比较隐私的数据(比如说你的银行卡,身份证)时,如果使用http进行通信。那么安全性将得不到保障。首先数据在传输的过程中,数据可能被中间人抓包拿到,那么数据就会被中间人窃取。其次数据被中间人拿到后,中间人可能对数据进行修改或者替换,然后发往服务器。最后服务器收到数据后,也无法确定数据有没有被修改...

2020-04-05 16:37:18 538

转载 RPC与Http的区别

一.远程调用方式无论是微服务还是分布式服务(都是SOA,都是面向服务编程),都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢?常见的远程调用方式有以下几种:RPC:Remote Produce Call远程过程调用,类似的还有RMI(Remote Methods Invoke 远程方法调用,是JAVA中的概念,是JAVA十三大技术之一)。自定义数据格式,基于原生TCP通信,速度快,...

2020-03-31 00:13:39 961

转载 HTTP请求与响应步骤

HTTP请求与响应步骤http请求和响应,说白了就是计算机之间的问答对话。http请求是提问者,http响应是回答者。详细步骤如下所示。建立连接先解析DNS,例如把localhost变成ip(127.0.0.1),然后根据127.0.0.1和端口号8080(没有端口号则使用默认的端口)建立socket。也可以理解为通过“三次握手”建立TCP连接,确定通讯正常。发送请求命令sock...

2020-03-29 09:43:15 916

原创 详解TCP三次握手和四次挥手

建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:讲解一下图中的几个概念:【1】seq:序号,占4个字节,范围[0,4284967296],由于TCP是面向字节流的,在一个1个TCP连接中传送字节流中国的每一个字节都按照顺序编号,此外序号是循环使用的【2】ACK: 仅当ACK=1时确认字段才有效,当ACK=0时确认字段无效,并且TCP规定,在连接建立后所有的传送...

2020-03-29 09:25:22 430

转载 TCP和UDP的区别超完整版本

TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。 TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接...

2020-03-26 00:00:20 8075 2

空空如也

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

TA关注的人

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