- 博客(30)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 pushgateway HA高可用方案
本文介绍了一种Pushgateway HA的方案,是在flink作业监控中遇见并不断解决问题,最终形成。其高可用方案本身与flink无关。
2024-12-06 13:36:46
1462
原创 Flink on yarn 开发过程中遇到的问题
去到正常和异常的节点下比较,确实异常节点缺失这个文件夹(用于存储运行时nodemanager和taskmanager的日志),怀疑是部署中间件框架时遗漏,通过手动增加文件夹的方式,问题解决。如果source端的数据量最小,拿到source端流过来的数据后做了细粒度的拆分,数据量不断的增加,到sink端的数据量非常大的这种情况,就需要提高并行度。keyby之后的算子,视具体情况而定,可以通过测试反压的方法,得到keyby算子上游的数据发送量和该算子的处理能力来得到合理的并行度(在无倾斜情况下)
2024-08-13 09:33:52
1408
原创 mysql
字符集和比较规则 字符集指的是某个字符范围的编码规则。 比较规则是针对某个字符集中的字符比较大小的一种规则。 在MySQL中,一个字符集可以有若干种比较规则,其中有一个默认的比较规则,一个比较规则必须对应一个字符集。 查看MySQL中查看支持的字符集和比较规则的语句如下: SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式];SHOW COLLATION [LIKE 匹配的模式]; MySQL有四个级别的字符集和比较规则
2024-08-13 09:23:59
1057
原创 Redis
为啥 redis 单线程模型也能效率这么高? 纯内存操作。 核心是基于非阻塞的 IO 多路复用机制。 C 语言实现,一般来说,C 语言实现的程序“距离”操作系统更近,执行速度相对会更快。 单线程反而避免了多线程的频繁上下文切换问题,预防了多线程可能产生的竞争问题。 redis 过期策略定期删除:redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。惰性删除:获取时redis检查该key是否过期,如果过期则删
2021-09-01 16:52:14
190
原创 四种线程池
#### newCachedThreadPool1. 创建一个可缓存的线程池2. 工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线程池中添加线程。3. 如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止。终止后,如果又提交了新的任务,则线程池重新创建一个工作线程。4. 适用:执行很多短期异步的小任务#### newFixedThreadPool1. 创建一个指定工作线程数量的线程池2. 每当提交一个任
2021-06-09 11:02:55
146
原创 IDEA你不得不知道的快捷键
功能 配置 使用 说明 自动补全 Keymap:Completion-Basic 在想要提示的地方按快捷键可以强制提示 有些函数入参为λ表达式的时候,可以用此方法帮你补全 文本格式转换:下划线<=>驼峰 需要安装插件CamelCase 选中想要修改的文本,快捷键shift+alt...
2021-04-17 17:04:49
495
原创 JVM GC
收集器的配合使用收集器分类收集器 适用分代 特性 算法 优势 劣势 Serial 新生代 串行 复制算法 1、简单高效 2、单核CPU适用 Serial Old 老年代 标记-压缩算法 ParNew 新生代 并行,只是Serial的多线程版本,底层共用代码 复制算法 1、多核CPU适用 2、减少STW时间 Parallel Scavenge 新...
2021-04-07 17:55:13
147
原创 myBatis + log4j简单实例
代码段//根据xml创建SqlSessionFactory对象String resource = "mybatisConfig.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactory...
2019-12-21 09:49:28
121
原创 按数组内容及位置更新数据库表
在进行业务开发时,遇见一个需求,从前端返回一个list的ids,要按照ids去从数据库中查找,然后将它的列属性-优先级更新为该id在ids的位置。例如:ids=[3, 6 ,2],则将id为3、6、2的条目的优先级列设置成对应位置的1、2、3。同时不能在代码中有循环,只能与数据库有一次连接。这也就意味着只能把循环写在mapper.xml中。然后就有了以下两种解决方案:一次发多条sql语...
2019-12-21 09:44:34
301
原创 spring mvc 各种注解
@RequestMapping建立请求URL和处理请求方法之间的对应关系,可以放在类上或者方法上。@RequestMapping("/account") //表示请求的一级目录public class AccountController { @RequestMapping("/findAccount") //表示请求的二级目录...
2019-12-21 09:33:10
104
原创 spring mvc 简单实例
启动服务器,加载配置文件(web.xml)配置DispatcherServlet对象(<servlet>标签) 加载springmvc.xml(beans配置) 开启注解扫描,创建Controller对象(@Controller注解生效) 创建视图解析器对象(InternalResourceViewResolver) 开启springMVC框架注解的支持(@Req...
2019-12-21 09:33:04
146
原创 spring AOP总结
通配符* 匹配任意数量字符 //任意返回值,任意名称,任意参数的公共方法execution(public * *(..))//匹配com.zejian.dao包及其子包中所有类中的所有方法within(com.zejian.dao..*)+ 匹配给定类的任意子类//匹配实现了DaoUser接口的所有子类的方法within(com.zejian.dao.DaoU...
2019-12-21 09:32:54
136
原创 并发编程 — 6.5 JUC — 同步器
同步器名称 作用 CountDownLatch 倒数计数器,构造时设定计数值,当计数值归零后,所有阻塞线程恢复执行;其内部实现了AQS框架 CyclicBarrier 循环栅栏,构造时设定等待线程数,当所有线程都到达栅栏后,栅栏放行,然后再进行新的一次循环。其内部通过ReentrantLock和Condition实现同步 Semaphore 信号量,类似于“令牌...
2019-12-20 20:09:25
171
原创 并发编程 — 6.4 JUC — 可重入锁
ReentrantLockReentrantLock实现了Lock接口,而ReentrantLock其实相当于一副空壳,它的主要功能就是控制构造出公平锁还是非公平锁,对锁的相关操作细节都是由内部类Sync来完成。Sync继承自AQS(AbstractQueuedSynchronizer),并再衍生出两个内部类非公平锁NofairSync和公平锁FairSync。通过ReentrantLock...
2019-12-20 20:06:52
186
原创 并发编程 — 6.3 JUC — 阻塞同步机制AQS
AbstractQueuedSynchronizer(AQS),即队列同步器。它是构建锁或者其他同步组件的基础框架(如ReentrantLock、ReentrantReadWriteLock、Semaphore等),它是JUC并发包中的核心基础组件。AQS的主要使用方式是继承,子类通过继承同步器并实现它的抽象方法来管理同步状态。Node节点AQS维护了一个静态内部类Node,它包含了以下属...
2019-12-20 20:02:21
520
原创 并发编程 — 6.2 JUC — 锁 Locks
锁是用于控制多线程访问共享资源的工具。通常,锁提供对共享资源的独占访问:一次只有一个线程可以获取锁,对共享资源的所有访问都需要首先获取锁。但是,一些锁可以允许同时访问共享资源,例如读写锁ReadWriteLock。锁的分类a.悲观锁与乐观锁悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每...
2019-12-20 19:56:47
156
原创 并发编程 — 6.1 JUC — 非阻塞同步机制CAS
CAS的作用在多线程并发下,可以通过加锁来保证线程安全性,但多个线程同时请求锁,而线程的挂起和恢复会有很大的开销。一些细粒度的操作,例如同步容器,操作往往只有很少代码量,如果存在锁并且线程激烈地竞争,调度的代价很大。在硬件的支持下,出现了非阻塞的同步机制,其中一种常用实现就是CAS。CAS说明CAS(compare and swap,比较并交换)操作包含三个操作数 —— 内存位置(V)...
2019-12-20 19:55:04
147
原创 并发编程 — 5. Unsafe类
Unsafe类使Java拥有了像C语言的指针一样操作内存空间的能力,同时也带来了指针的问题。可以通过类似 C语言里面的 memcpy 和 memset等函数直接操作对应内存地址的数据。 Unsafe是单例模式,通过调用getUnsafe方法来获取Unsafe实例。但是在方法中通过判断ClassLoader是不是启动类BootStrap ClassLoader来决定是否返回,...
2019-12-20 19:51:37
320
原创 并发编程 — 4. 线程Thread
线程状态java中线程的状态分为6种:初始化(New):当线程完成对象创建后,即new Thread(...),还没有调用start()方法之前,线程处于此状态。 运行态(Runnable):调用start方法,正在jvm中运行,但是可能正在等待操作系统的其他资源。(包含了操作系统的可运行和运行中状态) 阻塞(Blocked):受阻塞,并且正在等待监视器锁。 等待(Waiting):...
2019-12-20 19:48:20
174
原创 并发编程 — 3. synchronized关键字
synchronized的出现打破了volatile关键字的局限性(无法保证原子性和只能修饰单一变量),它可以用来锁住代码块、实例对象、类对象。synchronized的使用a. 修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码块前要获得给定对象的锁//Thread类public class MyThread implements Runnable{ private ...
2019-12-20 19:45:15
144
原创 并发编程 — 2. volatile关键字
一个变量被volatile修饰时,它会保证需要写回的值会被立即更新到内存,而读取时也会直接从内存读取新值。 volatile关键字保证了可见性和一定的有序性,而不保证原子性。保证可见性//线程1boolean stop = false;while(!stop){ doSomething();}//线程2stop = true;这段代码通过线...
2019-12-20 19:37:05
132
原创 并发编程 — 1. 三大概念
原子性一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。类似于数据库的事务的原子性,比如在银行转账时,两个账户进行读写操作,若不具有原子性则可能导致意想不到的结果。再举个例子,一个简单的赋值语句 i=9,假若执行到这句话包括两个过程为低16为赋值和为高16为赋值。那么有可能发生一个线程修改完低16位,被中断。另外一个线程又去读取i的值,这时候就会读取到错误...
2019-12-20 19:27:53
231
原创 并发编程 — 0. 前言
在并发编程之前,首先要了解并发问题的本质原因——计算机内存模型 早期CPU还是单核单线程的时候,并不存在并发问题。但随着科技的发展飞速,CPU发展迅速,计算能力也越来越强,但人类对计算能力的需求也越来越高。为了充分利用CPU,引入了超线程(单个cpu核心能模拟出多个线程)和多核心(多个CPU分工共同完成计算)技术。之后就出现了线程并发问题(其本质就是数据不一致问题)。...
2019-12-20 19:02:11
214
原创 函数形参赋值与后置++的特殊问题
我们都知道,函数调用时,先将函数实参按照从右往左的顺序压栈,然后在函数体内,出栈并按照从左往右的顺序给形参赋值。我们也知道,i++是先参与运算再自增,所以x = i++ 就相当于 x = i, i += 1。有如下代码:从右往左,i自加1变成1,然后赋值给a,b这时候都为1由于i++的特殊机制,使得a位置的栈弹出获取的是i在自加之前保存的值,然后再自加。这也就方便理解...
2018-08-30 17:19:16
1239
2
原创 类存在虚继承,虚函数的内存占用问题
最近在准备找工作,复习的过程中,遇到了求解含有虚继承、虚函数的类的内存大小计算问题(也就是sizeof的结果)。在这里,做一些总结以便后来者更易理解。1、我们知道,一个空类的sizeof值为1.2、加入一个虚函数后,其sizeof值为4,是因为对于类A,编译器为其建立了一个虚表,而A中保存了一份指向虚表的指针,指针就是一个地址,在32位(x86)下,地址的大小为4个字节,所以sizeo...
2018-08-30 16:21:35
1798
2
原创 扩展子集和问题
问题描述:给定一个包含n个整数的数组 set和固定值sum,判断 nums 中是否存在若干个元素 a,b,c ... 使得 a + b + c +...=sum 。找出所有满足条件且不重复的元组。该问题由原问题扩展出来的,适用于求解数组包含任意整数(包含正负零),任意元素组合且和为任意值m的不重复结果。解题思路:1、先将数组 set按照绝对值大小逆排序,将所有0元素放在数组后面2...
2018-08-02 17:19:20
265
原创 配置Win10 + Qt 5.9 MSVC + VS2017
1. Qt的安装Qt官网上已经很难找到想下载的具体版本了,而且还要申请账号,填一堆乱七八糟的东西,这里给出地址:http://download.qt.io/official_releases/qt/5.9/5.9.6/其他版本的Qt也可以找到。目前,qt的安装包不分MingGW和MSVC版本,只有在安装的时候才区分,自行选择。2. VS2017的安装直接官网去下载:https://www.visu...
2018-06-07 15:37:17
5422
1
原创 Mac下配置PATH
用户级:(即给当前用户配置环境变量,文件会在电脑启动时加载)Terminal(终端)命令:1、查看当前PATH值echo $PATH2、生成.bash_profile.swp文件sudo vi ~/.bash_profile回车后输入:I(INSERT) //终端会自动变为INSERT状态3、输入export PATH=$PATH:/user/Qt5
2016-12-23 20:14:38
711
原创 Qt中创建OpenGL基本框架
1、创建Qt设计界面类 2、在.pro文件中加入opengl,以及加入需要用到的LibsQT += core gui openglLIBS += -lglut -lglu32 -lopengl323、修改Widget的父类继承QGLWidget,并导入QGLWidget虚函数initializeGL( )、resizeGL( )、paintGL( )。如有需要其它函数根据实际
2016-11-23 11:36:26
3253
原创 Qt中 QTableWidgetItem设置编辑状态小技巧
通过QTableWidget中的item( )方法可以获得相应行数和列数的QTableWidgetItem,若要设置该Item的编辑状态(即可编辑状态和不可编辑状态),可以通过QTableWidgetItem下的setflags函数来设置。
2016-11-05 23:00:04
13099
Mac OS中在Qt下用OpenGL
2016-12-20
TA创建的收藏夹 TA关注的收藏夹
TA关注的人