- 博客(206)
- 收藏
- 关注

原创 分布式锁的应用
mysql zk redismsql 加锁就是新增数据 解锁就是删除数据redis 分布式锁什么环境使用分布式锁jdk 中的锁只能解决一个进程多线程的锁 jvm锁思路应用场景有缺点redis 单进程 单线程分布式锁 用在1多进程2进行同一个数据读写信息3 操作数据互斥加锁通过setnx 向特定的key写入一个随机值,并同时是设置失效时间,写值成功既加锁成功注意点必...
2019-07-24 11:25:08
168

原创 HashMap
hashmap 是一个entry对象的数组 数组中的每一个entry元素 又是一个链表的头节点HashMap 是数组 + 链表 数据结构默认初始化容量 16 ,因子 0.75 元素12个然后rehash 每次2 的次方时间复杂度 0(1) 链表 0(n) jdk1.8 阈值 0(lgn)...
2019-02-25 18:02:56
669
1

原创 synchronized
synchronized锁在单线程下生效吗虽然有锁升级 但是也会生效多个线程持有对象监视器作为同一个对象的前提下,同一时间只有一个线程可以执行synchronized(任意自定义对象)同步代码快。监听锁 monitor 一个对象只有唯一的一个。synchronized 关键字使用的是对象监视器原理作为同步synchronized实现同步的基础:普通同步方法,锁是当前实例对象静态同步...
2019-02-21 10:47:01
380
1

原创 volatile
volatile变量是一种稍弱的同步机制在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比synchronized关键字更轻量级的同步机制。读取快 修改慢1.volatile保证可见性1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。2)禁止进行指令重排序。编译出来的只...
2019-02-21 10:19:04
267

原创 StringBuffer 和 StringBuilder 区别
1、StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,2、只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。3、在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全而StringBuffer...
2019-02-20 18:07:12
212
1

原创 线程基础总结
多线程是异步的,所以千万不要把eclipse 里的代码的顺序当成线程执行的顺序,线程被调用的时机是随机的。实现线程的方式 一种是继承thread 类 另一种是实现runnable 接口thread 不支持多继承 为了支持多继承可以实现runnable 方法start()通知线程规划器此线程已经准备就绪,等待调用线程对象的run()方法 这个过程其实就是让系统安排一个时间来调用thread ...
2019-02-18 18:16:02
152

原创 ZAB协议
zookeeper就是paxos算法的一个实现并不对。zookeeper并没有完全才有paxos算法,而是使用了一种称为ZAB ( ZooKeeper Atomic Broadcast , ZooKeeper 原子消息广播协议)是zookeeper数据一致性的核心算法。ZAB协议是为分布式协调服务ZooKeeper专门设计的一种支持崩溃恢复的原子广播协议。ZAB不像paxos算法那样,是一种...
2019-02-18 15:25:41
315
1

原创 Paxos算法
Paxos算法是莱斯利·兰伯特(英语:Leslie Lamport,LaTeX中的“La”)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。[1]目录1 问题和假设2 算法2.1 算法的提出与证明2.2 算法的内容2.2.1 决议的提出与批准2.2.2 实例2.2.2.1 情况一2.2.2.2 情况二2.2.2.3 情况三2.2.3 决议的发布2.2.4 ...
2019-02-15 16:53:16
247
1

原创 集合的时间复杂度
ListarrayList linkedlistarraylist 可增长的数组长度 查询快 get() set() 常数级插入和现有所有项的删除代价昂贵 除非在表的末端ArrayList 是线性表(数组)get() 直接读取第几个下标,复杂度 O(1)add(E) 添加元素,直接在后面添加,复杂度O(1)add(index, E) 添加元素,在第几个元素后面插入,后面的元素需要向后...
2019-02-15 10:32:02
6257

原创 Thread 和 启动线程几种方式
启动线程几种方式第一种:1】d定义Thread类的子类,并重写该类的run()方法,该方法的方法体就是线程需要完成的任务,run()方法也称为线程执行体。2】创建Thread子类的实例,也就是创建了线程对象3】启动线程,即调用线程的start()方法 注:(start ()是真正的启用了线程 run() 只是thread类的一个方法)第二种:A类实现runnable 重写run 方...
2019-02-15 10:20:09
8969
1
原创 es routing的用法
http://localhost:8888/test/test1/106?routing=testroutehttp://localhost:8888/test/test1/106?routing=testroute,testroute1
2022-07-11 15:39:54
316
原创 jvm 卡表
我们知道,JVM在进行垃圾收集时,需要先标记所有可达对象,然后再清除不可达对象,释放内存空间。那么,如何快速的找到所有可达对象呢?最简单粗暴的实现,就是每次进行垃圾收集时,都对整个堆中的所有对象进行扫描,找到所有存活对象。逻辑是简单,但性能比较差。简单粗暴的实现方式,通常都是不可取的。那JVM是如何实现快速标记可达对象的?答案是GC Roots。GC Roots是垃圾收集器寻找可达对象的起点,通过这些起始引用,可以快速的遍历出存活对象。GC Roots最常见的是静态引用和堆栈的局部引用变量。然而,这
2022-05-27 10:55:06
597
原创 应用层的拆包和粘包
应用层的拆包和粘包简介拆包和粘包是在socket编程中经常出现的情况,在socket通讯过程中,如果通讯的一端一次性连续发送多条数据包,tcp协议会将多个数据包打包成一个tcp报文发送出去,这就是所谓的粘包。而如果通讯的一端发送的数据包超过一次tcp报文所能传输的最大值时,就会将一个数据包拆成多个最大tcp长度的tcp报文分开传输,这就叫做拆包。一些基本概念MTU泛指通讯协议中的最大传输单元。一般用来说明TCP/IP四层协议中数据链路层的最大传输单元,不同类型的网络MTU也会不同,我们普遍使用的以
2022-05-27 10:49:42
352
原创 tcp udp区别
tcp和udp的区别有:1、udp是无连接的,tcp是面向连接的;2、udp是不可靠传输,tcp是可靠传输;3、udp是面向报文传输,tcp是面向字节流传输。UDPUDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。它有以下几个特点:1、面向无连接首先 UDP 是不需要和 TCP一
2022-05-27 10:44:30
2530
原创 mysql 更新查询出来的数据
UPDATE `book_info` b, (SELECT i.* FROM `book_tree` t LEFT JOIN `book_info` i ON t.`book_id` = i.`id` WHERE t.`two_level_id` = 5) t1 SET b.`with_file_type_name` = 5 WHERE b.`id` = t1.id 核心是 update 表1 表2
2022-05-25 21:59:57
805
原创 cas 面试题
1、cas 是机器里面那个关键字unsafe c++ 写的 comxchg2、cas java 的实现atomic 包下3、是什么锁乐观锁4、aba 问题解决CAS可以有效的提升并发的效率,但同时也会引入ABA问题。如线程1从内存X中取出A,这时候另一个线程2也从内存X中取出A,并且线程2进行了一些操作将内存X中的值变成了B,然后线程2又将内存X中的数据变成A,这时候线程1进行CAS操作发现内存X中仍然是A,然后线程1操作成功。虽然线程1的CAS操作成功,但是整个过程就是有问题的。比如链
2021-10-13 16:57:43
622
原创 一致性协议算法-2PC、3PC、Paxos、Raft、ZAB、NWR
https://baijiahao.baidu.com/s?id=1693824822611080380&wfr=spider&for=pc2pc3pcacidcapbasepaxosraft(paxos简化)zab(zk)nwr(亚马逊)
2021-09-28 20:33:24
181
原创 多线程的基础
操作系统:会有个多个进程一个进程多个线程线程都有各自的计算器、堆栈和局部变量等属性,并且都能够访问共享的内存变量。处理器(cpu时间片)在这些线程上高速切换,让使用者感觉到这些线程在同时执行。现在操作系统基本是采用时分的形式调度运行的线程,操作系统会分出一个一个时间片。线程会分到若干的时间片。java 天生适合多线程。priority 优先级默认5 优先级越高分配的时间片数量越多线程状态:初始 运行 阻塞 等待 超时等待 终止...
2021-09-13 19:34:59
127
原创 es嵌套查询示例
{ "_source": { "include": [ "level" ] }, "from": 0, "size": 500, "query": { "bool": { "must": [ { "nested": { "path": "level",
2021-08-15 19:16:38
853
原创 future method
ListenableFuture<SendResult<String, Object>> future = kafkaTemplate.send(tojoyKafkaTopic, JSON.toJSONString(behaviorMessage)); future.addCallback(new ListenableFutureCallback<SendResult<String, Object>>() { ...
2021-08-05 11:23:15
173
原创 java 反射取值和重新赋值
package com.tojoy.customer.behaviorcollector.utils;import com.tojoy.customer.behaviorcollector.domain.BehaviorMessage;import java.lang.reflect.Field;public class BehaviorMessageUtil {public static BehaviorMessage behaviorMessageChange(BehaviorMessage .
2021-07-27 11:52:25
179
原创 去重的sql语句转变成es语句
sql 语句 转变成es 语句SELECT DISTINCT(systemId) FROM customer{ "size": 0, "aggs": { "group_by_tags": { "terms": { "field": "systemId.keyword" } } }}
2021-07-23 14:41:00
282
原创 windows bat 修改文件夹(包括批量)
REN ‘12-100.mp4’ 12-1000.mp4注意; 如果文件名有 空格或者非法字符 将文件名用双引号起来 单引号可不管用ren 其实就是cmd 修改批量操作就是excel 操作
2021-06-23 00:01:35
624
原创 mysql判断是小数还是整数
SELECT pub_date FROM book_info WHERE pub_date <>ROUND(pub_date,0)UPDATE book_info SET pub_date =0 WHERE (pub_date REGEXP ‘[^0-9.]’) =1
2021-06-16 21:09:38
2433
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人