- 博客(104)
- 资源 (4)
- 收藏
- 关注
原创 Redis高级功能
在默认情况下,Sentinel会以每两秒一次的频率,通过命令连接向所有被监视的主服务器和从服务器发送以下格式的命令: PUBLISH __sentinel__:hello ",,,,,,," ·其中以s_开头的参数记录的是Sentinel本身的信息 ·而m_开头的参数记录的则是主服务器的信息。完整重同步,需要主服务器生成一个新的 RDB文件,文件生成的开销是有得;
2023-04-09 14:36:03
1262
原创 redis 底层数据结构详解
/SDS所保存字符串的长度int len;// 记录buf数组中未使用字节的数量int free;// 字节数组,用于保存字符串char buf[];
2023-04-02 14:58:44
1286
原创 Mybatiplus自定义sql注入器实现批量插入
2.使用Mybatiplus封装的saveBatch插入,用时3595ms,发现其实还是一条一条sql循环插入的,是伪批量。读取存有10条数据的Excel文件,批量插入数据库。3.使用自定义sql注入器实现批量插入。1.Excel文件写入10万条数据。进行测试,用时1773ms。
2023-02-18 21:43:04
1088
原创 桥接模式 实现第三方账号登录
它的主要职责是定义出该角色的行为, 同事保存一个对实现化角色的引用,该角色一般是抽象类它引用实现化角色对抽象化角色进行修正。
2023-01-02 18:52:04
720
原创 迭代器模式 实现ES大量数据查询
数据从Mysql 迁移到 Es, Es查询数据默认fetch Size最大为10000条,如果查询超过1万条,需要通过scroll形式进行查询。
2023-01-02 16:10:43
2313
1
原创 状态模式+观察者(监听器模式)实现订单状态变更
用户从开始下订单,到支付完成,再到物流部进行发货,最终用户确认收货。触发订单状态变化的操作:支付订单;整个流程涉及到很多订单状态,需要通过代码对订单状态进行管理。订单状态包括:待支付;订单完成(状态模式)用户创建订单-> 支付订单->发货->收货->订单完成。用户确认收货操作导致订单状态变为订单完成状态。物流部门发货操作导致订单状态变为待收货状态。用户创建订单操作导致订单状态为待支付状态。用户支付操作导致订单状态变为待发货状态。创建订单完成后,订单状态初始化为待支付。设计整体结算发货以及收货的流程。
2022-12-31 23:26:38
2109
原创 建造者模式+原型模式 实现发票开具功能
支付成功之后开具增值发票,由于发票所需内容较多,而且随着国家政策可能会有所更改,发票内容的添加和删除以及后台对象的组装尽量做到灵活。建造者模式是将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。发票工具不是高并发访问接口,且无法缓存,使用原型模式尽量保证发票创建的性能。用户支付完成后,部分企业用户或个人账户需要开电子增值税发票,实现该功能。
2022-12-28 22:58:43
526
原创 装饰器模式 实现用户支付成功后添加用户的积分
新建抽象的 AbstractPayContext 类,使用 PayContext 继承 AbstractPayContext。新建 AddPointDecrator 类,继承 AddPointContext 实现具体的业务逻辑。新建抽象的装饰器类 AddPointContext 继承 AbstractPayContext。
2022-12-18 19:14:33
174
原创 Java 实现一个性能计数器
1.0版本,最小原型/** * 统计类 */public class Metrics { /** * 响应时间,key为接口名称,value为时间集合 */ private Map<String, List<Double>> responseTimes = new HashMap<>(); /** * 时间戳,key为接口名称,value为时间集合 */ private Map<S
2022-04-09 22:19:13
799
原创 Java8 stream使用
/** * 交易员 */@Data@AllArgsConstructor@NoArgsConstructorpublic class Trader { private String name; private String city;}/** * 交易 */@Data@AllArgsConstructorpublic class Transaction { private final Trader trader; private final .
2022-04-04 16:18:23
593
原创 分布式ID
SnowFlake定义:SnowFlake是Twitter公司采用的一种算法,目的是在分布式系统中产生全局唯一且趋势递增的ID,ShardingSphere默认的分布式主键生成器组成部分:1.第一位 占用1bit,其值始终是0,没有实际作用。2.时间戳 占用41bit,精确到毫秒,总共可以容纳约69年的时间。3.工作机器id 占用10bit,其中高位5bit是数据中心ID,低位5bit是工作节点ID,做多可以容纳1024个节点。4.序列号 占用12bit,每个节点每毫秒0开始不断累加
2022-03-22 21:06:25
329
原创 门面模式
1.定义:门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。2.好处:解决性能:假设有一个系统 A,提供了 a、b、c、d 四个接口。系统 B 完成某个业务功能,需要调用 A 系统的 a、b、d 接口。利用门面模式,我们提供一个包裹 a、b、d 接口调用的门面接口 x,给系统 B 直接使用。假设我们刚刚提到的系统 A 是一个后端服务器,系统 B 是 App 客户端。App 客户端通过后端服务器提供的接口来获取数据。我们知道,App 和服务器之间是通过移动网络通信的,网络通信耗时
2022-03-21 22:32:58
250
原创 java面试常见题
一:集合1. 常用的集合?List ,Set ,MapList : 有序,可重复的集合,ArrayList和LinkedList有什么区别?Set : 无序,不可重复。HashSet如何保证元素不重复?Map: 数据结构?TreeMap,LinkedHashMap,HashMap 区别?HashMap 的 put 过程?扩容过程?扩容后的大小为什么是2的倍数?时间复...
2021-12-28 23:26:28
245
1
原创 Spring基础
1.进程和线程的区别进程是资源分配的最小单位,线程是CPU调度的最小单位 线程不能看做独立应用,而进程可看做独立应用 进程有独立的地址空间,互相不影响,多进程的程序比多线程程序健壮 进程的切换比线程的切换开销大2.Thread中start和run方法的区别调用start方法会创建一个新的子线程并启动 run方法只是thread的一个普通方法调用3.线程的状态六个状态新建(New):创建后尚未启动的线程的状态 运行(Runnable):包含Running 和Ready 无限期等
2021-12-24 23:55:17
1241
原创 职责链模式
多个处理器依次处理同一个请求。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再传递给 C 处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式。示例:使用职责链实现敏感词过滤public interface SensitiveWordFilter { boolean doFilter(Content content);}public class SexyWordFilter implements Sensitiv
2021-12-08 23:37:39
279
原创 适配器模式
类适配器类适配器使用继承关系来实现interface ITarget { void f1(); void f2(); void fc();}class Adaptee { public void fa() { } public void fb() { } public void fc() { }}class Adaptor extends Adaptee implements ITarget {
2021-12-08 00:30:09
152
原创 python .bin文件转.pcd
点云文件处理import numpy as npbin_url = "D:\标注\px支撑\脚本分项目\\3D点云\\bin\\1634862979725228000.bin"pcd_url = "D:\标注\px支撑\脚本分项目\\3D点云\pcd\\1634862979725228000.pcd"# 读取点云points = np.fromfile(bin_url, dtype="float32").reshape((-1, 4))# 写文件句柄handle = open(pcd
2021-12-06 16:37:36
2664
3
原创 Java 多线程并发总结
目录1.volatile关键字1.1 保证多个线程运行时的可见性问题1.2 禁止指令重排2 synchronized 关键字2.1用法2.2 实现原理2.3 锁升级过程3.Lock锁3.1Lock()3.2tryLock()3.3tryLock(long time, TimeUnit unit)3.4 lockInterruptibly() 可以响应中断3.5unLock()4.Java锁的分类4.1悲观锁和乐观锁4.2公平锁和非公平锁4.2.
2021-12-05 16:21:32
1986
3
原创 Future详解
目录1. Future 和 Callable1. 1 Runnable的缺陷1.2Callable 接口1.3Future 和 Callable 关系1.4 Future 的5个主要方法1.4.1 get()方法:获取结果1.4.2 get(long timeout,TimeUnit unit) 方法: 超时不获取1.4.3cancel 方法:取消任务的执行1.4.4. isDone方法: 判断线程是否执行完毕1.4.5. isCanaelled 方法: 判...
2021-11-25 22:07:29
2555
原创 python文件.csv和.dta格式互转
# csv 转 dtadta_path = 'D:\标注\px支撑\脚本分项目\\test\dta\\'csv_path = 'D:\标注\px支撑\脚本分项目\\test\csv\\'for file in os.listdir(csv_path): data_frame = pd.read_csv(csv_path + file,encoding='utf-8') id = data_frame["ID"].tolist() patent = data_frame["pa.
2021-11-23 12:14:40
4007
原创 Java线程池详解
目录1.为什么要使用线程池1.1没有线程池之前创建线程:每一个任务创建一个线程:1.2for循环创建1000个线程:1.3没有使用线程池带来的问题:1.4线程池的好处:1.5线程池适合的应用场合:2.创建和停止线程池2.1线程池构造函数的参数2.2添加线程规则2.3增减线程的特点2.4线程池应该手动创建还是自动创建自动创建:通过Executors工厂方法创建2.5停止线程池的正确方法3.线程池的拒绝策略拒绝时机:4种拒绝策略:1.为..
2021-11-21 16:02:58
528
原创 并发的死锁问题及解决方案
目录1.什么是死锁2.发生死锁的例子2.1简单的例子2.2生产中的例子-转账2.3模拟多人转账3.死锁的4个必要条件4.如何定位死锁5.修复死锁的策略5.1线上发生死锁怎么办?5.2常见修复的策略6.实际工作中如何避免死锁1.什么是死锁发生在并发中 互不相让:当两个(或更多)线程(或进程)相互持有对方所需要的资源,又不主动释放,导致所有人都无法继续前进,导致程序陷入无尽的阻塞,这就是死锁2.发生死锁的例子2.1简单的例子当类的对象flag=
2021-11-14 23:55:48
2033
原创 模板模式
概念:模板模式主要是用来解决复用和扩展两个问题 复用指的是,所有的子类可以复用父类中提供的模板方法的代码。扩展指的是,框架通过模板模式提供功能扩展点,让框架用户可以在不修改框架源码的情况下,基于扩展点定制化框架的功能。复用:Java IO 类库中,有很多类的设计用到了模板模式,比如 InputStreamread() 函数是一个模板方法,定义了读取数据的整个流程,并且暴露了一个可以由子类来定制的public abstract class InputStream impl
2021-10-30 10:31:24
217
原创 观察者模式
观察者模式(Observer Design Pattern)也被称为发布订阅模式 在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知public interface Subject { void registerObserver(Observer observer); void removeObserver(Observer observer); void notifyObservers(Message message);}public int
2021-10-30 09:40:29
156
原创 递归获取子文件夹下所有文件
package org.simpleframework.util;import lombok.extern.slf4j.Slf4j;import java.io.File;import java.io.FileFilter;import java.net.URL;import java.util.HashSet;import java.util.Set;/** * @author chongfayi * @date 2021-10-21 */@Slf4jpublic clas.
2021-10-21 17:16:46
621
原创 python把一个文件夹中的多个文件分成N份
import osimport shutil"""一个文件夹中有多个文件,把所有文件分成 num 份,新建文件夹放入"""#原文件存放的文件夹地址file_path = 'D:\\'#新文件存放的文件夹地址new_file_path = 'D:\\'#每个文件夹存放的个数num = 10000list_ = os.listdir(file_path)if num > len(list_): print('num长度需小于:', len(list_)) .
2021-08-24 10:37:34
2632
3
原创 python合并多个csv文件
url = "D:\\"new_url = "D:\\"file = []for path in os.listdir(url): file.append(pd.read_csv(url+path)) all_data = pd.concat(file, axis=0)all_data.to_csv(new_url + "all_data_result2" + ".csv", encoding="gb18030",index=0)
2021-08-24 10:31:55
295
2
原创 装饰者模式
我们现在需要定义一个资源池配置类 ResourcePoolConfig,这个类里面的有成员变量有几个成员变量。因为 maxTotal、maxIdle、minIdle 不是必填变量,所以在创建 ResourcePoolConfig 对象的时候,我们通过往构造函数中,给这几个参数传递 null 值,来表示使用默认值。public class ResourcePoolConfig { private static final int DEFAULT_MAX_TOTAL = 8; priva
2021-07-06 10:54:54
140
1
原创 多线程并发总结
目录1.volatile关键字1.1 保证多个线程运行时的可见性问题1.2 禁止指令重排2 synchronized 关键字2.1用法2.2 实现原理2.3 锁升级过程3.Lock锁3.1Lock()3.2tryLock()3.3tryLock(long time, TimeUnit unit)3.4 lockInterruptibly() 可以响应中断3.5unLock()4.Java锁的分类4.1悲观锁和乐观锁4.2公平锁和非公平锁
2021-07-04 15:29:16
1734
5
原创 python 音频分割
"""把原音频,按csv中的标注结果分割成几个音频,如text是无,忽略。否则从sDate到eDate 进行分割。"""import osimport pandas as pdimport jsonfrom pydub import AudioSegmentcsv_url = "D:\csv\\"wav_url = "D:\标注音频与示例\\"save_wav = "D:\wav\\new_wav\\"for path in os.listdir(csv_url): dat.
2021-06-25 11:25:11
2363
原创 线程池详解
目录1.为什么要使用线程池1.1没有线程池之前创建线程:每一个任务创建一个线程:1.2for循环创建1000个线程:1.3没有使用线程池带来的问题:1.4线程池的好处:1.5线程池适合的应用场合:2.创建和停止线程池2.1线程池构造函数的参数2.2添加线程规则2.3增减线程的特点2.4线程池应该手动创建还是自动创建自动创建:通过Executors工厂方法创建2.5停止线程池的正确方法3.线程池的拒绝策略拒绝时机:4种拒绝策略:..
2021-06-20 19:51:35
1606
1
springtest.rar
2020-04-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅