自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 彻底搞懂 - 从源码看JUC的基石: AQS

AQS(AbstractQueuedSynchronizer)抽象队列式同步器,从它的名字中,我们可以看出AQS本身是一个同步器,也就是发生资源竞争时,用来同步的工具。它的内部使用了队列来进行实现,而之所以叫“抽象”,是因为AQS只是一个“框架”,它提供了当发生资源竞争时,竞争失败的线程入队、出队等的方式,但没有描述竞争的具体细节,这些交由其子类来按需具体实现,AQS在JUC中许多大名鼎鼎的类中得到应用,例如ReentrantLock,CountDownLatch,Semaphore等等,可以说,AQS是J

2022-03-29 19:01:56 695

原创 彻底搞懂-ThreadLocal的前世今生

一. 设计原理可以通俗的理解,方法里有方法的局部变量、类里有类的局部变量,而线程也可以有线程的局部变量,他就是ThreadLocal。每个线程访问ThreadLocal变量时,都是访问自己内部的变量副本,线程之间无法互相访问ThreadLocal的设计思路其实是应用了线程封闭的思想,来解决线程间的对象安全问题,将对象封闭在线程内部,也就不存在并发,对象就是安全的。由此我们可以想到,为了实现这个目的,每个线程内部,应该持有一个属于自己的Entry,我们可以对它进行set get操作。实际上的设计也确实如

2022-03-29 18:53:34 764

原创 彻底搞懂 - 一文理清各种IO模型

一.背景知识:1.文件描述符众所周知,在Linux中,一切都可以看作是文件,进程对于一个打开的文件,如何对应上并找到它呢?文件描述符应运而生:File descriptor,简称fd。操作系统为每个进程维护了一个文件描述符表,又维护了一个系统级的打开文件表,当然还有inode表。进程根据fd -> 文件指针 -> 文件偏移量 -> inode指针,就能指明对应的文件资源。在操作系统中,用户进程是不能与IO设备直接交流的,需要通过内核来完成这个任务,内核将IO设备的数据copy到内

2022-03-29 18:46:00 1482

原创 FlinkX启动流程分析

base FlinkX源码1.12_release版本flinkX启动主要依赖两部分:flink-client它主要完成解析用户的提交指令,完成作业提交flink-dist这部分是打包后的target,包含了各个异构数据源的connector,和关键的flinkx-core启动脚本:flinx/bin/flinkxA.提交过程:入口类:com.dtstack.flinkx.client.Launcher从main方法开始:1.通过OptionParser类解析校验启动时传入的参数Opt

2021-10-25 14:47:16 765

原创 Java诊断工具-Arthas入门与实践

Java诊断工具-Arthas入门与实践目录Java诊断工具-Arthas入门与实践什么是Arthas?Arthas能做什么?我在哪里可以下载Arthas?快速入门1. 下载并运行math-game2. 使用Arthas粘附目标程序3. jad反编译源码4. watch查看方法返回结果5. trace打印内部调用路径6. stack打印被调用路径进阶操作1.tt时空隧道2.getstatic查看静态属性3.调用静态方法高阶操作1. 调用由spring管理的类的方法2. 实时修改线上代码参考文献:什么是

2021-08-17 20:04:38 202

原创 使用Redis实现分布式锁

背景:spring项目中我们经常使用定时注解@Scheduled结合cron表达式来完成我们的定时任务需求,这种方式在单点状态下是没有问题的,但是实际使用时,为了高可用,我们经常是多节点部署项目,这时就出现了定时任务被多次执行的问题。我们当然可以通过统一的配置中心配置项来指定具体执行定时任务的实例,但这样就失去了高可用的效果,并且也不利于后期项目交接与维护。所以需要分布式锁,来解决目前的问题。当然也有一些成型的分布式定时任务方案,如XXL等,这里为了方便,我们基于Redis实现一个简单的分布式锁。需要

2021-02-24 11:32:54 218

原创 Mac下使用Docker部署SpringCloud项目

背景:随着微服务的项目越来越多,部署这些项目和解决环境差异,成了一个耗时的工作,使用Docker可以方便的帮我们解决诸多问题,此处不叙述Docker的优点和用法,记录一下在Mac环境下使用Docker部署SpringCloud服务的过程。范例服务:服务1:注册中心eureka服务2:MySQL服务3:业务应用1.Docker安装Mac可以从Docker官网 https://www.docker.com/products/docker-desktop 方便的下载dmg文件进行傻瓜式安装。安装好后

2020-12-29 17:23:16 574

原创 Spark SQL 权限控制

背景Spark如今已经是我们最常用的计算和查询引擎之一,但是很遗憾的是社区版的Spark本身没有任何权限控制手段(据说Spark的Thrift server服务支持create/drop权限控制,但我并未试过,而且只有这种层次的控制并不够),我们当然可以在应用层通过业务功能来从平台上控制用户的权限,但随着业务进化,从中间件层次对Spark做出和hive一样的权限控制也十分重要。由于目前还没有很成熟方案,下面是我的一些探索,给有同样需求的同学一些思路。1. 通过控制hive权限来控制Spark权限我们平

2020-12-23 11:32:10 2570 1

原创 解决Spark连接Hive查询数据NullPointerException问题

背景:我们有一个使用Spark做数据计算的项目,一直以来运行正常,近日测试环境突然发生运行时空指针异常问题(已脱敏处理): ERROR ApplicationMaster: User class threw exception: java.lang.RuntimeException: serious problemjava.lang.RuntimeException: serious problem at org.apache.hadoop.hive.ql.io.orc.OrcInputFormat.

2020-08-13 09:59:13 2879 1

原创 SpringCloud + Nacos 做服务注册与配置中心

此前我使用的服务注册发现与配置中心均为比较老的开源产品,Eureka + disconfig,由于两者均已经停止维护,故尝试使用阿里的Nacos,Nacos的介绍就不放了,官网文档非常清晰:================环境版本信息:操作系统:MacOS Catalina10.15.6JDK:1.8Nacos-Server: 1.3.2================1. Server程序下载你可以下载源码自己编译,也可以直接下载最新稳定版:https://github.com/aliba

2020-08-07 18:44:01 655 1

原创 JDK8 LocalDate与LocalTime的使用

以前我们在Java中处理时间与日期时经常使用Calender与SimpleDateFormat,很抽象,而且比较难用,实际上Java8提供了两个新的类:LocalDate与LocalTime:LocalDate初始化:// 取当前日期:LocalDate today = LocalDate.now();// 根据年月日取:LocalDate crischristmas = LocalDate.of(2020, 06, 12);// 根据字符串取(标准yyyy-MM-dd):LocalDate

2020-06-15 18:40:14 403

原创 linux查询当前目录下文件占比情况

今天发现服务器上根目录爆满,需要查询下是哪个目录占用空间过高,记录下命令,下次用时方便:du -h -x --max-depth=1

2020-06-10 17:54:03 711

原创 Spring的定时注解配置详情

经常用,总也记不住,备份一下,便于使用:注解:@Scheduled(cron = "* * * * * ? ")CronTrigger配置完整格式为: [秒] [分] [小时] [日] [月] [周] [年]通配符说明:表示所有值. 例如:在分的字段上设置 “*”,表示每一分钟都会触发。? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为"?" 具体设置为 0 0 0 10 * ?表示区间。例如

2020-05-14 16:09:36 133

原创 Scala入门(六)继承与特质

作为一门支持面向对象的语言,scala对于继承当然也有很好的支持,下边我们看下这部分内容:1.抽象类scala的抽象类范例:abstract class Car{ val carBrand: String //字段没有初始化值,就是一个抽象字段 def info() //抽象方法,不需要使用abstract关键字 def greeting() {println(...

2020-04-22 09:35:55 218

原创 Scala入门(五)对象

1.单例对象scala中没有像java一样的静态方法或者静态字段,但scala提供了单例对象,和java中的静态方法是一样的功能:object Person { private var lastId = 0 def newPersonId() = { lastId +=1 lastId }}可以看出,我们可以使用object关键...

2020-04-21 22:30:07 160

原创 Scala入门(四)类

scala作为一门多范式语言,对面向对象也有很好的支持,下边我们熟悉下这部分内容:1.最简单的类class Counter{ //这里定义类的字段和方法}定义了类以后,就可以正常new对象了。2.定义字段和方法类中的函数被称为方法,使用def定义:class Counter{ private var value = 0 def increment(): U...

2020-04-20 12:06:25 807

原创 Scala入门(三)数据结构

和java一样,scala也提供了List,Map等数据结构,下边我们逐一介绍:1.数组Array非常简单,一看就懂,需要注意的是,scala操作数组下标用的是圆括号,而不是方括号。val arr = new Array[Int](3) //声明一个长度为3的整型数组,注意每个元素初始值为0arr(0) = 1 //给第1个元素赋值为1arr(1) = 2 //给第2个元素赋值为2...

2020-04-18 12:10:13 125

原创 Scala入门(二)控制语句

scala的控制语句范例如下:1.if else与java基本一致:val x = 10if (x>0) { println("x大于0")} else if{ println("x小于0")} else { println("我也不知道了")}但有一点不同,scala的if语句是有返回值的,也就是说它可以赋值给变量:val x = 10val ...

2020-04-18 11:40:30 174

原创 Scala入门(一)基本数据类型与变量

最近工作需要用到Spark,就不可避免的要接触Scala语言,本着尽快上手的目的,对Scala的基本使用快速的过一遍,侧重比较Java和Scala的异同点。1.Scala的安装安装部分不再细述,安装好jdk,scala,配置好环境变量就可以了。2.变量scala声明变量的方式和python有点像,支持类型推断功能,也就是说,很多情况下,我们并不需要声明变量的类型,scala会自动推断。sc...

2020-04-18 11:15:17 389

原创 Mac环境搭建Elasticsearch+Kibana及基本使用

基本环境信息操作系统:macOS Catalina 10.15.3JDK版本:1.8ES版本:7.6kibana版本:6.8需要注意的是,ES7.6版本默认指定的是jdk11,这里因为我安装的是jdk8,就手工配置勉强使用。1.下载下载以上内容就不再赘述了,网上很多资源,如果你安装了brew,可以直接安装:brew install elasticsearchbrew insta...

2020-03-25 15:40:17 2142 1

原创 Mac自带终端免密远程登录

其实就是使用脚本来代替我们输入命令:1.新建一个SSH文件这里我在用户目录下新建一个文件夹,存放我们的ssh文件mkdir sshConfigvim test1.ssh2.写脚本上半部分是定义我们的用户名,密码,端口,xxx部分按照你自己的填写就行了#!/usr/bin/expect -fset user rootset host xxx.xxx.xxx.xxxset pas...

2020-03-25 10:28:11 437

原创 MySQL查询表的字段名和注释

记录一下,方便使用SELECT COLUMN_NAME AS name,if( COLUMN_COMMENT is null or COLUMN_COMMENT='', COLUMN_NAME, COLUMN_COMMENT) AS comment FROM information_schema.COLUMNS WHERE TABLE_NAME='表名'...

2020-03-24 12:22:35 612

原创 Java后端字符串转MultipartFile

今天做了一个小功能,大概是对前端传回来的MultipartFile中的脚本文件进行解析处理,处理后再封装成MultipartFile对象传递给其它接口继续调用,遇到一些坑,简单记录一下。1.读取并处理MultipartFile中的脚本内容: Reader reader = new InputStreamReader(multipartFile.getInputStream(), Standar...

2020-03-19 12:44:01 11752 2

原创 13.Spring事务管理-编码方式

2019-03-06 21:36:14 205

原创 12.Spring整合JDBC(二)

2019-03-06 21:35:29 73

原创 11.Spring整合JDBC(一)

2019-03-06 21:34:49 96

原创 10.AOP的应用

2019-01-24 12:02:29 82

原创 9.AOP与动态代理

2019-01-24 12:01:57 218

原创 8.整合Junit测试

2019-01-24 12:01:30 77

原创 7.使用注解代替配置文件

2019-01-24 12:01:06 108

原创 6.复杂属性注入方法

2019-01-24 12:00:35 58

原创 5.基本属性注入方法

2019-01-24 12:00:02 242

原创 4.Spring的分模块配置

2019-01-24 11:59:34 82

原创 3.Bean的常用属性

2019-01-24 11:59:06 109

原创 2.三种创建对象的方法

2019-01-24 11:58:39 116

原创 1.Hello Spring

2019-01-24 11:57:18 96

空空如也

空空如也

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

TA关注的人

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