自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Tomcat部署时war和war exploded区别以及平时踩得坑

war和war exploded的区别在使用IDEA开发项目的时候,部署Tomcat的时候通常会出现下边的情况:是选择war还是war exploded这里首先看一下他们两个的区别:war模式:将WEB工程以包的形式上传到服务器 ;war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器;1 2(1)war模式这种可以称之为是发布模式,看名字也知道,这是先打成war包,再发布;(2)war exploded模式是直接把文件夹、jsp页面 、classes.

2020-09-07 11:04:23 203

转载 使用idea基于maven创建SpringMVC项目

首先我们可以创建maven项目,file-> new ->project->maven如果下载不较慢,可以添加属性name: archetypeCatalog ,value: internal可以加快下载速度在选择自己的maven时。默认的下载存储位置是在C盘,可以打开配置文件更改为自己的下载位置:<localRepository>E:\Program Files\apache-maven-3.6.1\repository_file</localRepository&

2020-09-05 19:47:01 310

转载 SpringMVC中使用conversionSerivce

第一步自定义参数类型转换器 第二步配置despatcher-servletxml 第三步在springMVC接口里使用该转换 第四总结SpringMVC中的ConversionSerivce的作用是把接收的参数以什么“类型”呈现出来。前端传递什么参数我们后台以什么形势接收它们。比如SpringMVC中前端1,我们可以把它当成String或int,使用ConversionSerivce重点是类型,只要在类型不是常用类型的情况下才会调用我们自定义的参数转换器转换参数类型。第一步:自定...

2020-09-05 16:56:44 475

转载 Oracle merge into 函数 (增量更新、全量更新)

说明1、数据导入功能,存在全量更新/增量更新的问题,简单记录使用 oracel 的 merge into 函数。2、全量更新(覆盖模式):数据库存在该条数据时,做更新操作。不存在时,做新增操作3、增量更新(跳过模式):数据库存在该条数据时,不做任何操作,不存在时,做新增操作。4、merge into 对千万级以上的数据更新,速度比较慢。merge into 使用merge into [target-table] A using [source-table sql] B

2020-08-25 13:29:22 749

转载 cpu使用率低负载高,原因分析

原因总结产生的原因一句话总结就是:等待磁盘I/O完成的进程过多,导致进程队列长度过大,但是cpu运行的进程却很少,这样就体现到负载过大了,cpu使用率低。下面内容是具体的原理分析:在分析负载为什么高之前先介绍下什么是负载、多任务操作系统、进程调度等相关概念。什么是负载什么是负载:负载就是cpu在一段时间内正在处理以及等待cpu处理的进程数之和的统计信息,也就是cpu使用队列的长度统计信息,这个数字越小越好(如果超过CPU核心*0.7就是不正常)负载分为两大部分:CPU负载、IO负载

2020-08-17 09:33:35 2772

转载 3万字的Spring Boot 干货总结 !

说明:前面有4个小节关于Spring的基础知识分别是:IOC容器、JavaConfig、事件监听、SpringFactoriesLoader详解它们占据了本文的大部分内容:虽然它们之间可能没有太多的联系,但这些知识对于理解Spring Boot的核心原理至关重要,如果你对Spring框架烂熟于心,完全可以跳过这4个小节。正是因为这个系列的文章是由这些看似不相关的知识点组成,因此取名知识清单。在过去两三年的Spring生态圈,最让人兴奋的莫过于Spring Boot框架。或许从命名上就能看出这

2020-08-10 13:49:34 155

转载 Intellij IDEA构建Spark2.0以上工程示例

Intellij IDEA新建Spark2.0以上Maven工程示例长时间不用IDEA新建工程,新建的步骤都忘记了,再次记录一下,Spark新版中SparkSession需要依赖的包与SparkContext不一样,需要导入的jar包也是不同的。这里需要安装Java的JDK,新建工程会用到。首先,新建工程New -> Project选择Maven工程,选择JDK版本命名GroupId和ArtifactId,GroupId是项目所属组织的唯一标识,ArtifactId是项目的唯一标识,也是项

2020-08-02 07:27:53 188

转载 Tomcat 架构原理解析到架构设计借鉴

Tomcat 发展这么多年,已经比较成熟稳定。在如今『追新求快』的时代,Tomcat 作为 Java Web 开发必备的工具似乎变成了『熟悉的陌生人』,难道说如今就没有必要深入学习它了么?学习它我们又有什么收获呢?静下心来,细细品味经典的开源作品。提升我们的「内功」,具体来说就是学习大牛们如何设计、架构一个中间件系统,并且让这些经验为我所用。美好的事物往往是整洁而优雅的。但这并不等于简单,而是要将复杂的系统分解成一个个小模块,并且各个模块的职责划分也要清晰合理。与此相反的是凌乱无序,比如你..

2020-07-30 11:19:17 123

转载 请别再问Spring Bean的生命周期了(非常详细)

Spring Bean的生命周期是Spring面试热点问题。这个问题即考察对Spring的微观了解,又考察对Spring的宏观认识,想要答好并不容易!本文希望能够从源码角度入手,帮助面试者彻底搞定Spring Bean的生命周期。只有四个!是的,Spring Bean的生命周期只有这四个阶段。把这四个阶段和每个阶段对应的扩展点糅合在一起虽然没有问题,但是这样非常凌乱,难以记忆。要彻底搞清楚Spring的生命周期,首先要把这四个阶段牢牢记住。实例化和属性赋值对应构造方法和setter方法的注入,初始化

2020-07-21 16:57:24 208

原创 YARN提交MR程序流程以及MR调优

YARN提交MR程序流程YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成,如图4-23所示。图4-23 Yarn基本架构Yarn工作机制1.Yarn运行机制,如图4-24所示。图4-24 Yarn工作机制2.工作机制详解 (1)MR程序提交到客户端所在的节点。 (2)YarnRunner向ResourceManager申请一个Application...

2020-07-10 14:28:20 2064

转载 Zookeeper工作原理(详细)

1、Zookeeper的角色  » 领导者(leader),负责进行投票的发起和决议,更新系统状态  » 学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票  » Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度  » 客户端(client),请求发起方    

2020-07-10 09:56:27 4553

原创 多线程基础-aqs源码流程+condition注意点

细节:HEAD的节点总是指向空节点Thread.interrupted();中断,复位Thread.currentThread().interrupt();中断 Nofair:lock()后直接cas更改state的值抢占锁。抢占失败后加入CLH队列中。Fair:lock()后先看有没有等待锁的线程,有的话就加入CLH队列中。加入到队列后流程就一样了,都需要被前置线程释放锁的时候唤醒。...

2020-07-09 17:12:30 130

原创 java运行时数据区和jvm垃圾回收与调优详解以及JMM

1.JVM内存分配与回收1.1 对象优先在Eden区分配大多数情况下,对象在新生代中 Eden 区分配。当 Eden 区没有足够空间进行分配时,虚拟机将发起一次Minor GC。我们来进行实际测试一下。在测试之前我们先来看看 Minor Gc和Full GC 有什么不同呢?新生代GC(Minor GC):指发生新生代的的垃圾收集动作,Minor GC非常频繁,回收速度一般也比较快。 老年代GC(Major GC/Full GC):指发生在老年代的GC,出现了Major GC经常会伴随至少一

2020-07-09 05:49:58 171

原创 程序是怎样跑起来的--二进制基础运算

一、什么是二进制数为了更清晰地说明二进制数的机制,首先让我们把00100111这个二进制数值转换成十进制数值来看一下。二进制数的值转换成十进制数的值,只需将二进制数的各数位的值和位权相乘,然后将相乘的结果相加即可。首先,让我们从位权的含义说起。例如,十进制数39的各个数位的数值,并不只是简单的3和9,这点大家应该都知道。3表示的是3×10=30,9表示的是9×1=9。这里和各个数位的数值相乘的10和1,就是位权。数字的位数不同,位权也不同。第1位(最右边的一位)是10的0次幂(=1),第2位是.

2020-07-07 09:51:02 937

转载 Feign常见问题总结

TIPS本文基于Spring Clou Greenwich SR1,理论支持Spring Cloud Finchley及更高版本。本文总结Feign常见问题及解决方案。一、使用案例 如何使用Feign构造多参数的请求 使用Spring Cloud Feign上传文件 使用Feign实现Form表单提交 二、FeignClient接口如使用@PathVariable,必须指定value属性代码示例:@FeignClient("microservice-..

2020-07-01 15:23:48 323

转载 扩展Ribbon支持基于元数据的版本管理

一个微服务在线上可能多版本共存,例如:服务提供者有两个版本:v1、v2 服务消费者也有两个版本:v1、v2v1/v2是不兼容的。1、服务消费者v1只能调用服务提供者v1;消费者v2只能调用提供者v2。2、优先调用同集群下的实例。3、实现基于权重配置的负载均衡。如何实现呢?下面围绕该场景,实现微服务之间的版本控制。元数据元数据就是一堆的描述信息,以map存储。举个例子:spring: cloud: nacos: metadata:

2020-07-01 14:54:20 450

转载 你不知道的事---SringCloud的feign的继承特性

前言说起SpringChoud的feign大家用过的都说好。Feign是Netflix开发的声明式、模板化的HTTP客户端。对于我们微服务来说,微服务之间的api调用,使用feign来说是再方便不过的。本文先介绍一下,传统的feign的调用写法方式,再介绍我们的重点feign的继承特性。feign的继承特性有很多的好处,可以进行参数和方法的统一管理,一次修改,feign和具体的controller都变了。总之好处还是不少的。但是官方并不推荐,因为带来了服务间的紧耦合,怎么选择需要权衡利弊。传统的

2020-07-01 14:51:28 266

转载 彻底征服 Spring AOP 之 理论篇

基本知识其实, 接触了这么久的 AOP, 我感觉, AOP 给人难以理解的一个关键点是它的概念比较多, 而且坑爹的是, 这些概念经过了中文翻译后, 变得面目全非, 相同的一个术语, 在不同的翻译下, 含义总有着各种莫名其妙的差别. 鉴于此, 我在本章的开头, 着重为为大家介绍一个 Spring AOP 的各项术语的基本含义. 为了术语传达的准确性, 我在接下来的叙述中, 能使用英文术语的地方, 尽量使用英文.什么是 AOPAOP(Aspect-Oriented Programming), 即 面向切

2020-07-01 09:57:09 194 1

转载 零复制(zero copy)技术

1.1 背景说明:网络数据传输的全过程在每一次网络io过程,数据都要经过几个缓存,再发送出去。如下图:以右侧为浏览器,左侧为httpd服务器为例。当httpd服务收到浏览器发送的index.html文件的请求时,负责处理请求的httpd子进程/线程总是会先发起系统调用,让内核将index.html从存储设备中加载出来。但是加载到的位置是内核空间的缓冲区kernel buffer,而不是直接给进程/线程的内存区。由于是内存设备和存储设备之间的数据传输,没有CPU的参与,所以这次是DMA操作。

2020-06-30 15:02:08 440

转载 不可不知的socket和TCP连接过程

背景1.TCP协议栈维护着两个socket缓冲区:send buffer和recv buffer。要通过TCP连接发送出去的数据都先拷贝到send buffer,可能是从用户空间进程的app buffer拷入的,也可能是从内核的kernel buffer拷入的,拷入的过程是通过send()函数完成的,由于也可以使用write()函数写入数据,所以也把这个过程称为写数据,相应的send buffer也就有了别称write buffer。不过send()函数比write()函数更有效率。最终数据是通

2020-06-30 14:22:55 316

转载 五种IO模型透彻分析

1. 基础在引入IO模型前,必须得对某一段数据的整个”经历”做一番解释。如图:当某个程序或已存在的进程/线程(后文将不加区分的只认为是进程)需要某段数据时,它只能在用户空间中属于它自己的内存中访问、修改,这段内存暂且称之为app buffer。假设需要的数据在磁盘上,那么进程首先得发起相关系统调用,通知内核去加载磁盘上的文件。但正常情况下,数据只能加载到内核的缓冲区,暂且称之为kernel buffer。数据加载到kernel buffer之后,还需将数据复制到app buffer。到了这.

2020-06-30 13:20:39 201

原创 mybatisplus逆向工程记录

mybatisplus确实是非常实用,在创建项目是节省很多重复工作,下面记录一下。1.新建maven或者gradle工程2.添加相关依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:/.

2020-06-23 15:10:47 132

原创 Springboot2.x+mybatis多数据源(MySQL+Oracle)集成

背景:最近项目需求需要同时查询MySQL和Oracle的数据,项目已经上线,总结一下,以备后续查看(该文档并不是完整的项目)。项目基于gradle管理的标准的Web MVC架构:build.gradlegroup 'com.data.mult'version '1.0-SNAPSHOT'apply plugin: 'java'apply plugin: 'eclipse'apply plugin: 'application'mainClassName = 'com.data...

2020-06-23 13:39:44 1122

转载 JVM 史上最最最完整深入解析

Java运行时数据区:Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图:1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。2、虚拟机栈:虚拟机栈是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压人栈,当方法正常返回或者抛出未捕获

2020-06-17 12:23:19 136

翻译 ACID

在计算机科学中,ACID(原子性、一致性、隔离性、持久性)是数据库事务的一组属性,目的是在发生错误、断电等情况下保证有效性。在数据库上下文中,满足ACID属性的数据库操作序列(可以将其视为数据上的单个逻辑操作)称为事务。例如,从一个银行账户到另一个银行账户的资金转移,即使涉及多个变化,如借记一个账户和贷记另一个账户,也是一笔交易。1983年,Andreas Reuter和Theo Ha...

2020-02-19 16:25:47 227

原创 IDEA快捷键使用记录

ctrl+alt+h和alt+f7:查看方法调用层级Ctrl + F12 :查看所有方法

2020-02-09 17:30:44 127

转载 JNDI怎么理解

JNDI 是什么JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的意义和作用,就没有真正掌握J2EE特别是EJB的知识。那么,JNDI到底起什么作用?要了解JNDI的作用,我们可以从“如果不用JNDI我们怎样做?用了JNDI后我们又将怎样做?”这个问题来探...

2019-08-06 09:58:22 128

原创 ambari集成第三方应用

背景:最近遇到一个需求,公司运维人员可以通过ambari界面addservice按钮添加、启动、停止我们公司的系统,就花时间研究了一下ambari的集成。步骤:万事皆套路,ambari集成也同样,一是告诉ambari我要添加什么服务,二是告诉ambari我的服务在哪并且怎么加载的。下面我就按照这两个步骤来说明详细过程。一、告诉ambari我添加什么服务。首先要在/var/lib/amb...

2019-06-06 09:43:43 2486 3

原创 自定义ClassLoader加载mysql驱动

背景:最近在研究自定义类加载器ClassLoader加载自定义目录的jar时,当加载mysql驱动时总是报ClassNotFoundException。原因:当DriverManager加载驱动时只承认当前系统的加载器加载的jar,自定义的显然不承认。3、解决办法:自定义myDriver实现Driver接口,并实现接口方法,其包含成员变量Driver即可。public cla...

2019-03-13 13:25:02 1000

原创 MR中的iterator与ArrayList的iterator区别以及用法

背景:最近在写MR程序时遇到一个奇怪的问题,利用iterator迭代器遍历数据添加到List中时,保存在List中的元素都是最后遍历的数据。原因:因为MR中的iterator.next()方法返回的是数据的引用,每次向List中添加都是把引用传入而ArrayList中的iterator.next()方法返回的是数据,所以才会导致如上情况。解决:每次迭代重新创建一个对象加入List中即可。...

2019-03-09 09:42:22 258

原创 IDEA中使用Spark SQL查询Hive

1、使用Maven搭建项目环境,添加Maven依赖&lt;properties&gt; &lt;scala.version&gt;2.11.8&lt;/scala.version&gt; &lt;spark.version&gt;2.3.1&lt;/spark.version&gt; &lt;/properties&gt;&lt;dependencies&gt;

2019-03-08 10:42:50 1266

原创 Java项目查找资源文件搜索路径原理简析

一、在用eclipse构建的项目中,根目录下会有.classpath文件中指定classpath路径。 说明:kind="src"所指的路径就是classpath路径。二、在用idea构建项目中,会在根目录下的.idea/moudles/xxx_main.iml文件中指定classpath路径。 说明:url所指的路径就是classpath路径。三、Java...

2019-02-28 10:56:17 1003

原创 Javaagent入门介绍

Javaagent是一个简单优雅的java agent,利用java自带的instrument特性+javassist字节码编辑技术,实现了无侵入的方法级性能监控。创建agent。作为agent的jar包必须有两个要求。一、必须实现premain方法二、在MANIFEST.MF文件中有Premain-Class,eclipse打包是必须指定该文件。三、执行java -jav...

2019-02-28 10:51:42 368

原创 基于kafka1.1.1版本流处理代码以及演示

Kafka Stream定位是轻量级的流计算类库,所有功能放在Lib中实现,实现的程序不依赖单独执行环境。一、测试环境搭建1、下载kafka_2.11-1.1.1.tgz包解压后修改config目录下server.properties文件,主要是修改zk地址为本集群的例如:zookeeper.connect=xxx.xxx.xxx.xxx:21812、启动kafka,命令如下:bin/...

2018-07-27 16:41:28 1355

原创 Java应用程序接收信号和注册钩子关闭程序

一、接收信号1、在Linux中执行kill -l查看信号,共有64中信号2、实现SignalHandler接口并注册信号。import sun.misc.Signal;import sun.misc.SignalHandler;public class SingleTest implements SignalHandler { public static void...

2018-07-25 17:31:29 748

原创 Spark2.11 任务划分以及执行流程

1、spark Application中可以由不同的action触发job,也就是说一个Application里可以有很多的job,每个job是由一个或者多个stage构成的,后面的stage依赖前面的stage,只有前面依赖的stage计算完成后面的stage才会计算;2、stage划分的就是根据宽依赖如:reduceByKey、groupByKey等前后就需要划分为两个stage;3、由act...

2018-06-18 16:52:51 1662

原创 Spark2.11 Executor的启动注册和执行任务的流程

一、当master在接收到RegisterApplication消息后会向worker发送LaunchDriver和LaunchExecutor消息来分别启动Driver和Executor。实际上这里启动Executor是指的启动CoarseGrainedExecutorBackend进程,而Executor只是CoarseGrainedExecutorBackend的内部的对象。二、实际上Dri...

2018-06-18 09:39:28 621

原创 Spark2.11 启动Driver以及Executor流程

一、首先client会向master注册application,然后调用scschedule()开始启动Driver和Executor流程,分别向worker发送LaunchDriver和launchExecutor指令启动Driver和Executor。二、Driver启动流程:worker通过DriverRunner启动线程的方式启动Driver三、Executor的启动流程跟Driver 的...

2018-06-17 18:54:15 522

原创 spark2.11 资源调度流程(cluster模式下Driver、Executor的调度)

Spark只有在cluster模式下启动时,才会有Driver的资源调度,如果在client模式下启动,Driver就在提交Job的机器上启动。资源调度指的是应用程序获得的计算资源,任务调度是在资源调度的基础上进行的。Master是负责资源调度和管理的,每次有新的应用程序或者集群资源发生变化的时候都会重新资源调度(也就是schedule()方法的执行);发生资源变化的动作有:RegisterWor...

2018-06-17 14:16:30 460

转载 Spark Application的调度算法

本文转自:https://www.cnblogs.com/francisYoung/p/5205420.html要想明白spark application调度机制,需要回答一下几个问题:1.谁来调度?2.为谁调度?3.调度什么?3.何时调度?4.调度算法前四个问题可以用如下一句话里来回答:每当集群资源发生变化时,active master 进程 为 所有已注册的并且没有调度完毕的applicati...

2018-06-16 20:15:16 286

空空如也

空空如也

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

TA关注的人

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