自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张俊杰 的博客

这个博客是平时给自己学习记录和工作遇到的问题解决啥的碎片化的随便写写的 , 这是我的语雀地址 yuque.com/zjj1994/

  • 博客(57)
  • 资源 (6)
  • 问答 (1)
  • 收藏
  • 关注

原创 并发-线程池[老的,有时间我重新整理一下]

并发-线程池[老的,有时间我重新整理一下]文章是直接从我本地word笔记粘贴过来的,排版啥的可能有点乱,凑合看吧,有时间我会慢慢整理为什么要用线程池?平时开发的时候基本不太用线程,用线程池更多一点Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。Java创建一个线程出来,虚拟机要去跟操作系统申请的,给这个线程去分配资源,也就说创建

2021-01-31 15:21:57 79

原创 并发-集合容器[老的,有时间我重新整理一下]

并发-集合容器[老的,有时间我重新整理一下]文章是直接从我本地word笔记粘贴过来的,排版啥的可能有点乱,凑合看吧,有时间我会慢慢整理ConcurrentSkipList系列ConcurrentSkipList是有序的容器是TreeMap 和TreeSet的并发集合替代品.ConcurrentSkipListMap 有序MapConcurrentSkipListSet 有序SetTreeMap和TreeSet使用红黑树按照key的顺序(自然顺序、自定义顺序)来使得键值对有序存储_,_但是

2021-01-31 15:20:50 15

原创 并发-基础[老的,有时间我重新整理一下]

并发-基础[老的,有时间我重新整理一下]文章是直接从我本地word笔记粘贴过来的,排版啥的可能有点乱,凑合看吧,有时间我会慢慢整理电脑方面知识什么是进程和线程最早的计算器其实没操作系统,只能输入,计算和输出功能,用户输入一个指令,计算机完成操作,大部分时候计算机都在等待用户输入指令,这样处理性能很低效,因为人的输入速度远远比不上计算机的运行速度.为了解决手工操作带来的低效,批处理操作系统应运而生,批处理就是先把要执行的指令预先写下来,(写到纸上,磁盘,磁带等等),形成一个指令清单,这个指令清单就是

2021-01-31 15:20:14 158

原创 并发-安全[老的,有时间我重新整理一下]

并发-安全[老的,有时间我重新整理一下]文章是直接从我本地word笔记粘贴过来的,排版啥的可能有点乱,凑合看吧,有时间我会慢慢整理什么是线程安全性并发编程最大的难点并不在于如何使用,而在于如何保证我们程序的线程安全.,如果我们能保证并发安全的话,那么我们可以大胆的在程序里面使用多线程.在《Java并发编程实战》中,定义如下:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在调用代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么就称这个类是线程

2021-01-31 15:19:39 100

原创 并发-CAS[老的,有时间我重新整理一下]

并发-CAS[老的,有时间我重新整理一下]文章是直接从我本地word笔记粘贴过来的,排版啥的可能有点乱,凑合看吧(一)执行原理synchronized 是一个原子操作,但是比较重量级的.(因为这个线程拿到锁以后,其它线程都必须等待. 如果做的事情耗时非常久,那么就大大降低效率)CAS是无锁,是乐观锁机制,我的操作某个数据的时候,悲观锁是先抢到锁,乐观锁是先拿到数据(oldValue),然后这个线程做完事情运算完值以后得到一个(新值)newValue , 我把这个新的值写回去的时候,我先用自己存的ol

2021-01-31 15:17:55 18

原创 04.JDK对synchronized锁的更多优化措施

04.JDK对锁的更多优化措施1.逃逸分析如果jdk在分析编译的时候发现,一个对象不会逃逸方法外或者线程外,则可针对此变量进行优化:在写代码的时候,即使方法加了synchronized关键字,编辑器也会把你这个方法的锁消除掉.2.锁消除虚拟机的运行时编译器在运行时如果检测到一些要求同步的代码上不可能发生共享数据竞争,则会去掉这些锁。如果JVM检测到某段代码不可能存在共享数据竞争,JVM会对这段代码的同步锁进行锁消除。在动态编译同步块的时候,JIT编译器可以借助一种被称为逃逸分析(Escape

2021-01-31 15:04:37 13

原创 03.synchronized锁升级降级问题

03.synchronized锁升级降级问题概述现代的(Oracle)JDK 中,JVM 对此进行了大刀阔斧地改进,提供了三种不同的 Monitor 实现,也就是常说的三种不同的锁:偏斜锁(Biased Locking)、轻量级锁和重量级锁,大大改进了其性能。所谓锁的升级、降级,就是 JVM 优化 synchronized 运行的机制,当 JVM 检测到不同的竞争状况时,会自动切换到适合的锁实现,这种切换就是锁的升级、降级。当没有竞争出现时,默认会使用偏斜锁。JVM 会利用 CAS 操作(compa

2021-01-31 15:04:08 398 2

原创 02.synchronized原理

概述在 Java 早期版本中,synchronized 属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的 Mutex Lock 来实现的,Java 的线程是映射到操作系统的原生线程之上的。如果要挂起或者唤醒一个线程,都需要操作系统帮忙完成,而操作系统实现线程之间的切换时需要从用户态转换到内核态,这个状态之间的转换需要相对比较长的时间,时间成本相对较高,这也是为什么早期的 synchronized 效率低的原因。庆幸的是在 Java 6 之后 Java 官方对从 JVM 层面对

2021-01-31 15:03:18 5

原创 01.Synchronized概述

synchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为"互斥区"或"临界区",如果加了Synchronize 修饰符 就变成线程安全了分析:当多个线程访问myThread的run方法时,以排队的方式进行处理(这里排对是按照CPU分配的先后顺序而定的),一个线程想要执行synchronized修饰的方法里的代码:1 尝试获得锁2 如果拿到锁,执行synchronized代码体内容;拿不到锁,这个线程就会不断的尝试获得这把锁,直到拿到为止,而且是多个线程同时去竞争这把锁。(也就是会有锁

2021-01-31 15:01:54 8

原创 SpringBoot的 Kafka事务代码案例

事务案例测试说明启动项目正常发送两个消息postman发送Get请求:http://localhost:8080//testSendMsg?flag=1此时两个consumer都会接到消息发送两个消息间隔抛出异常postman发送Get请求:http://localhost:8080//testSendMsg?flag=0发送两个消息之间出现异常,第一个消息会被回滚,此时两个consumer都不会接到消息, 这就是事务的原子性pom依赖<?xml version="1.0"

2021-01-29 13:58:59 94

原创 删除markdown文件里面没有引用的图片小工具

前言markdown 插入图片默认是放到本地的, 如果你在markdown文件里面删除了图片,但是本地图片是还存在的,于是我写了个小工具删除这个没有用的图片pom.xml<?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"

2021-01-29 12:26:48 78 2

原创 Maven单纯的jar项目打包把maven依赖打进去

在 pom.xml 配置<build> <!--<pluginManagement>&lt;!&ndash; lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) &ndash;&gt;--> <plugins> <plugin>

2021-01-29 12:05:39 34

原创 Kafka 的topic和消费者组里面的消费者消费的关系.

一个topic一个partition可以被不同的消费者组里面的消费者消费如果你有两个消费者组消费一个partition里面的值, 假如说partition里面有100条数据结果就是 这两个消费者组里面的消费者分别消费100条数据也就是说, 假如,生产者发送了 一个消息 ,消息为hello,. 那么 两个消费者组里面的其中一个消费者都会消费这个 hello 的消息.一个分区.test组消费者组1package com.consumer;import org.apache.kafka.cli

2021-01-28 11:38:32 415

原创 Zookeeper在Kafka中的作用

文章来源于我的知识库:https://www.yuque.com/crow/message_oriented_middlewareZookeeper在Kafka中的作用Kafka集群中每个broker是如何知道集群中的其它broker的Kafka多台机器是没有主从的区别的,如何有效形成一个集群系统的?就是通过zookeeper里面一个brokers目录,当Kafka broker启动起来之后都会给自己注册到Kafka的brokers目录下面.所有的Kafka的broker都能知道其它节点,都是通过

2021-01-28 09:09:41 28

原创 Kafka 高效读写数据,为什么那么快

文章来源于我的知识库:https://www.yuque.com/crow/message_oriented_middlewareKafka 高效读写数据顺序写磁盘磁盘的原理:读写一份连续的数据比读写一份随机的数据效率要非常的高,因为少了寻址的时间Kafka的producer生产数据,要写入到log文件中,写的过程是一直追加到文件末端,为顺序写。官网有数据表明,同样的磁盘,顺序写能到600M/s,而随机写只有100K/s(这太极端了,实际上不会那么夸张)。这与磁盘的机械机构有关,顺序写之所以快,是

2021-01-28 09:08:09 24

原创 Kafka分区分配的概念,哪个consumer消费哪个partition

文章来源于我的知识库:https://www.yuque.com/crow/message_oriented_middlewareKafka分区分配的概念,哪个consumer消费哪个partitionKafka分区分配的概念一个consumer group中有多个consumer,一个 topic有多个partition,所以必然会涉及到partition的分配问题,即确定那个partition由哪个consumer来消费。Kafka有两种分配策略,一是RoundRobin,一是Ran

2021-01-28 09:06:25 121

原创 Kafka offset的维护

文章来源于我的知识库:https://www.yuque.com/crow/message_oriented_middlewareoffset的维护概念消费者消费完了消息是不会被立刻删除的,每个消费者把消费的数据消费到哪里了就需要做个记录,就是offsetKafka 0.9版本之前,consumer默认将offset保存在Zookeeper中,从0.9版本开始,consumer默认将offset保存在Kafka一个内置的topic中,该topic为"__consumer_offsets" 。由于

2021-01-28 09:05:40 141 1

原创 kafka 消费者组案例

文章来源于我的知识库:https://www.yuque.com/crow/message_oriented_middleware消费者组案例生产者是怎么把数据给我们的partition的创建生产者1个分区创建生产者一个副本 ,一个分区[root@zjj103 ~]# kafka-topics.sh --zookeeper zjj101:2181 --create --topic hello --partitions 1 --replication-factor 1Created topic

2021-01-28 09:04:53 20

原创 Kafka消费方式

文章来源于我的知识库:https://www.yuque.com/crow/message_oriented_middleware消费方式Kafka采用consumer采用pull(拉)模式从broker中读取数据。push是broker集群推送消息给消费者pull是消费者从broker集群中拉取消息push(broker集群推送消息给消费者)push方式的话能更及时的获取到数据,一有数据就推送消息.但是push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。

2021-01-28 09:04:19 45

原创 Kafka生产者发送消息的流程

生产者发送消息的流程文章来源于我的知识库:https://www.yuque.com/crow/message_oriented_middleware概念Kafka的Producer发送消息采用的是异步发送的方式。在消息发送的过程中,涉及到了两个线程——main线程和Sender线程,以及一个线程共享变量——RecordAccumulator(两个线程之间共享的)。main线程将要发送的消息包装成ProducerRecord 之后放到RecordAccumulator(线程共享变量),Sender

2021-01-27 18:24:31 17

原创 Kafka 幂等性

幂等性文章来源于我的知识库:https://www.yuque.com/crow/message_oriented_middleware概述ack设置-1之后虽然不会出现数据丢失问题,但是还会出现数据重复问题数据重复了怎么办???是否允许数据重复取决于场景, 有写场景重复了也没事儿,比如说记录点击事件,重复了顶多就是多记录一条数据,但是如果是订单,充值之类的,数据重复的话,那么问题就有点严重了.有的数据不但不能丢,还不能重复,比如说交易的场景,记录数据不能记录两份儿.解决办法在某个版本之

2021-01-27 18:23:56 55

原创 Kafka集群故障处理细节

集群故障处理细节文章来源于我的知识库:https://www.yuque.com/crow/message_oriented_middlewareLEO和HW概念LEO:指的是每个副本最大的offset;HW:指的是消费者能读到的最大的offset,ISR队列中最小的LEO。HW:上图消费者最多能读到12,因为假如说Leader挂掉了,那么消费者读到的话,肯定是读整个集群中offset最小的那个.这个offset最小就意味着所有机器的offset肯定大于等于这个offset , 假如说A机器

2021-01-27 18:23:29 34

原创 Kafka生产者是怎么把数据给我们分区的

生产者是怎么把数据给我们分区的?文章来源我的知识库https://www.yuque.com/crow/message_oriented_middleware分区的目的1.方便扩展:每个Partition可以通过调整以适应它所在的机器,而一个topic又可以有多个Partition组成,因此整个集群就可以适应任意大小的数据了;2.提高并发:以partition为读写单位,可以多个消费者同时消费数据,提高了消息的处理效率。分区的原则我们需要将producer发送的数据封装成一个ProducerR

2021-01-27 18:20:18 15

原创 Kafka数据可靠性保证ACK机制

数据可靠性保证ACK机制文章来源于我的知识库https://www.yuque.com/crow/message_oriented_middleware概念为保证producer发送的数据,能可靠的发送到指定的topic,topic的每个partition收到producer发送的数据后,都需要向producer发送ack(acknowledgement确认收到),如果producer收到ack,就会进行下一轮的发送,否则重新发送数据。副本数据同步策略****方案****优点***

2021-01-27 18:19:22 49

原创 Kafka工作流程及文件存储机制

Kafka工作流程及文件存储机制文章来源于我的知识库https://www.yuque.com/docs/share/036935c4-89d5-4a6a-a8e6-cf07f0f6e669?# 《Kafka工作流程及文件存储机制》Kafka工作流程概述Kafka中消息是以topic进行分类的,生产者生产消息,消费者消费消息,都是面向topic的。topic是逻辑上的概念,一般一个业务就是一个topic,而partition是物理上的概念,每个partition对应于一个log文件,该log文件

2021-01-27 18:16:59 21

原创 个人用的好用的软件

个人用的好用的软件自己平时使用的好用的软件**魔方温度监控色域检查工具系统默认文件存放位置转移系统维护用的Dism++x64新的资源管理器XYPlorergit图形界面化软件SourceTree卸载软件geek.exe看epub的软件Adobe Digital Editions 4.5 (ADE_4.5_Installer) 看 epub 不错改按键的软件KeySwap破解版vue调试软件Vue.js devtools vue调试软件Chrome插件码云代码格式化

2021-01-25 10:17:03 28

原创 spark算子简单总结

Transformation转换算子value类型:map() 映射mapPartitions() 以分区单位执行MapmapPartitionsWithIndex() 带分区号flatMap() 压平glom() 分区转换数组groupBy() 分组filter() 过滤sample() 采样distinct() 去重coalesce() 重新分区repartition() 重新分区执行shufflesortBy() 排序pipe() 执行脚本双value类型:union(

2021-01-24 16:02:04 9

原创 提交spark任务到yarn集群上

先Maven打包自己编写的程序.放到Linux指定目录下放到/root/module/spark_job/realtime-parent.jar编写Spark-submit 提交脚本要注意空格啥的 和路径别写错了sh脚本文件: $SPARK_HOME/bin/spark-submit \--class com.ods.BaseDBMaxwellApp \--num-executors 80 \--driver-memory 6g \--executor-memory 6g \--ex

2021-01-24 15:16:22 64

原创 Linux 根据名字搜索文件 find命令

我想搜索/root/soft/ 目录下的 名字叫 capacity-scheduler.xm 文件, 我可以这么写sudo find /root/soft/ -name *capacity-scheduler.xm*如果我想从根目录搜索,就直接sudo find / -name *capacity-scheduler.xm*详解介绍案例 : 查找 Linux下的Tomcat目录,输入命令:sudo find / -name *tomcat*命令:find语法:find [搜索范围路径

2021-01-24 14:27:49 638

原创 maven打包的时候指定打包后的包名字

假如说我想给打包后的包名叫 realtime-parent那么在pom.xml的build 标签里面配置realtime-parent <build> <finalName>realtime-parent</finalName> <plugins> </plugins> </build></project>

2021-01-24 13:34:08 1020 1

原创 Java 和大数据面试题

https://www.yuque.com/books/share/0dcfaecb-179a-4386-9907-0bc9eee94a18?# 《大数据面试》

2021-01-20 18:44:44 29

原创 jsp select下拉选填充

两个效果是一样的. <label class="col-lg-1 col-md-1 col-xs-12 col-xss-12 xs_Textright md_Textright LabelOnpadding">消息类别:</label> <div class='col-lg-5 col-md-5 col-xs-12 col-xss-12'> <form:select

2021-01-20 12:16:24 7

原创 利用 maxwell-bootstrap 初始化数据

https://www.yuque.com/docs/share/9f9a40ea-a76f-472e-a2d0-ead1bd43746d?# 《利用 maxwell-bootstrap 初始化数据》利用 maxwell-bootstrap 初始化数据假设现在gmall202004 数据库里面有 base_province表需要通过maxwell初始化一下初始化省份表命令:bin/maxwell-bootstrap --user maxwell --password 123456 --host zj

2021-01-19 20:31:54 183 2

原创 安装使用 Maxwell

https://www.yuque.com/docs/share/4231bf37-9da9-4deb-a768-46ea153f2a60?# 《Maxwell监控MySQL的增量数据》前置条件1.Kafka能正常使用2.Mysql能正常使用开启Mysql的binlog如何开启binlog:https://blog.csdn.net/qq_41489540/article/details/112709210怎么配置binlog看上面的帖子,my.cnf内容换成下面的内容my.cnf内容#设

2021-01-19 20:29:46 26

原创 Maxwell 介绍

https://www.yuque.com/docs/share/658f2419-1cc6-4eea-9832-f1fd5decfb18?# 《Maxwell介绍》(一)概念Maxwell 是由美国 zendesk 开源,用 java 编写的 Mysql 实时抓取软件,其抓取的原理也是基于 binlog。(二)Maxwell 和 canal 工具对比Maxwell 没有 canal 那种 server+client 模式,只有一个 server 把数据发送到消息队列或 redis。如果需要多个实例

2021-01-19 20:28:35 69

原创 Kafka shell 启动生产者和消费者

1.启动消费者kafka_2.11-0.11.0.2/bin目录下面,有个kafka-console-consumer.sh 将生产者的数据打印在控制台上面命令 : kafka-console-consumer.sh --bootstrap-server zjj101:9092 --topic hello输入完了之后就卡着了… 等待生产者生产数据.2.启动生产者kafka提供了用于测试的producer,位置在kafka_2.11-0.11.0.2/bin目录下面,有个kafka-console-

2021-01-18 12:11:05 189 1

原创 Scala封装Phoenix工具类操作Hbase

Maven依赖<!--注意 底层引用的\org\glassfish\javax.el\3.0.1-b06-SNAPSHOT在仓库中已经移除了我们这里引用其稳定版本--><dependency> <groupId>org.apache.phoenix</groupId> <artifactId>phoenix-spark</artifactId> <vers

2021-01-17 15:03:57 54

原创 Phoenix 对HBASE表操作

https://www.yuque.com/docs/share/c0b81507-2318-48a7-a22c-2278b0e82ab9?# 《01.对HBase表操作》

2021-01-17 14:33:45 50

原创 Docker内部MySQL开启binlog日志

查看 binlog状态在MySQL终端执行一下, Navicat都行show variables like '%log_bin%'发现是没有开启binlog修改Docker的MySQL的my.cnf配置文件添加下面内容,注意: log-bin = /logs/mysql-bin.log 是Docker内部的路径,不是Linux宿主机的路径#设置日志格式binlog_format = mixed#设置日志路径,注意路经需要mysql用户有权限写log-bin = /logs/mysql

2021-01-16 15:18:11 183

原创 Docker安装vim编辑器

docker内部安装vim编辑器进入docker容器后依次执行下面命令:apt-get updateapt-get install vim

2021-01-16 13:41:08 43

WPS Office.10.1.0.6875(无联网功能)

WPS Office.10.1.0.6875(无联网功能) 这是没有联网功能,单纯就是wps的文本,没有广告,没有登录功能, 绿色版的.压缩后只有80m 还有wps表格功能.我现在就在用,挺好用的比world2016要小巧

2018-03-31

mysql-connector-java-5.1.27.jar

mysql-connector-java-5.1.27-bin.jar jar包, 可以用这个连接MySQL的,, 适合MySQL5 版本的,, 很不错......

2020-10-29

sqoop-1.4.6.bin__hadoop-2.0.4-alpha

sqoop-1.4.6.bin__hadoop-2.0.4-alpha 导入导出工具,, 可以去官网下载, 也可以用这个

2020-10-29

json格式转换工具

可以把json格式的代码转换成,用起来挺不错的.

2018-02-15

ssm整合通用mapper

ssm整合通用mapper,如题,,适合新手去看,如题Spring4 mybatis3 好早以前弄的了, 适合新手看看,

2019-02-11

简单的ajax异步Crud项目

是自己写的简单的异步CRDU 项目,我本人也是一个菜鸟,当时什么都不会,自己写异步写了半天,现在自己写出来了,供新手学习,里面有ajax异步页面, 以及传智封装的分页

2018-05-12

空空如也

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

TA关注的人 TA的粉丝

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