自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(122)
  • 资源 (5)
  • 收藏
  • 关注

原创 LSM Tree

LSM

2022-12-05 16:35:32 565 1

转载 为什么使用TypeReference

在使用fastJson的时候对于泛型的反序列化很多场景下都会使用到TypeReference,例如: public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); JSONObject o = new JSONObject(); o.

2021-09-01 16:02:54 1083

原创 行为型-策略模式

模板模式主要起到代码复用和扩展的作用。除此之外,我们还讲到了回调,它跟模板模式的作用类似,但使用起来更加灵活。它们之间的主要区别在于代码实现,模板模式基于继承来实现,回调基于组合来实现。最常见的应用场景是,利用它来避免冗长的 if-else 或 switch 分支判断。不过,它的作用还不止如此。它也可以像模板模式那样,提供框架的扩展点等等。定义一族算法类,将每个算法分别封装起来,让它们可以互相替换。策略模式可以使算法的变化独立于使用它们的客户端(这里的客户端代指使用算法的代码)。工厂模式是解耦对象的创

2021-07-02 11:47:09 191

原创 mysql日志

MySQL数据库可以实现主从复制,实现持久化,实现回滚,其关键在于MySQL里的三种log,分别是:binlogredo logundo logbinlog用于记录数据库表结构和表数据变更的二进制日志,比如insert、update、delete、create、truncate等等操作,不会记录select、show操作,因为没有对数据本身发生变更。使用mysqlbinlog命令可以查看binlog文件内容。会记录下每条变更的sql语句,还有执行开始时间,结束时间,事务id等等信息。使用命

2021-04-20 14:33:00 182 1

转载 洞察设计模式的底层逻辑

底层逻辑的本质创建型设计模式、结构型设计模式、行为型设计模式设计模式的底层逻辑1 设计模式的基石面条型的代码、过程式的代码和面向对象的类型类比 雕刻诗文的修改面条型一块木板雕刻一首诗;耦合太严重,牵一发而动全身过程式自顶向下,逐步求精;分而治之;每块木板上只雕刻一行诗;【极端情况全改】面条型诗由行组成,行由一个个字组成,活字印刷;复用性强核心:洞察到事物的结构和关系,首先回答的是what,而不是how。过程式就是过分强调了how,一开始就思考怎么去做,

2021-04-15 10:56:15 214

转载 ​Java Map中那些巧妙的设计

一 自动扩容最小可用原则,容量超过一定阈值便自动进行扩容。扩容是通过resize方法来实现的。扩容发生在putVal方法的最后,即写入元素之后才会判断是否需要扩容操作,当自增后的size大于之前所计算好的阈值threshold,即执行resize操作。HashMap的put方法 public V put(K key, V value) { return putVal(hash(key), key, value, false, true); }static final in

2021-03-25 18:54:23 121

转载 Kafka深度剖析

Kafka简介Kafka概述:Kafka由 linked-in 开源 。kafka-高产出的分布式消息系统(A high-throughput distributed messaging system)。Kafka是一个高吞吐、分布式、基于发布订阅的消息系统,利用Kafka技术可以在廉价的PC Server上搭建起大规模消息系统。Kafka的特性:高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer grou

2021-03-23 15:49:52 309

原创 重写equal 的同时为什么必须重写hashcode?

equal定义:如果两个对象是相等(equal)的,那么两个对象调用hashCode必须产生相同的整数结果,即:equal为true,hashCode必须为true,equal为false,hashCode也必须为false,所以必须重写hashCode来保证与equal同步。默认情况下也就是从超类Object继承而来的equals方法与‘==’是完全等价的,比较的都是对象的内存地址,但我们可以重写equals方法,使其按照我们的需求的方式进行比较,如String类重写了equals方法,使其比较的是字符

2021-03-18 14:32:53 409 1

转载 无参数方法的@Cacheble注释

@Cacheable(value="usercache", key = "mykey")public string sayHello(){ return "test"}无参方法,设置Cache的key值时,报错rg.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Property or field ‘mykey’ cannot be found on object of type ‘org

2021-03-16 10:21:00 1719

转载 RocketMQ如何保证消息的可靠性?

RocketMQ如何保证消息的可靠性?消息的发送方式有哪几种?存储消息的可靠性面临哪些挑战?消费消息的确认机制是怎样的?分布式系统中一个重要的前提假设是所有的网络传输都是不可靠的,在网络传输不可靠的情况下,保证消息的可靠传输,除了进行重试投递别无他法。常用的绝大多数消息队列RocketMQ、RabbitMQ等在消息传输上都只能保证至少传输成功一次,也即(At least once),而不能保证只传输成功一次(Exactly once)。由于分布式系统网络的不可靠,可能就会出现消息丢失的现象,那么R

2021-03-12 17:03:36 1840

原创 美团:Java线程池实现原理 阅读笔记

多核CPU多线程并行计算,提升服务器性能J.U.C提供的线程池ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务一、写在前面线程池是什么线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。(管理线程而获取并发性)池化思想:为了最大化收益并最小化风险,而将资源统一在一起管理的一种思想。Pooling is the grouping together of resources (assets, equipment

2021-03-04 22:37:52 494 2

原创 并发编程与高并发解决方案(三):死锁

互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。(没法改变)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。【增加一个中间层来破坏该条件】不可剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。【Java 显示锁支持通知(notify/notifyall)和等待

2021-03-04 13:53:02 185 1

原创 并发编程与高并发解决方案(二):可见性volatile

可见性一个线程对主内存的修改可以及时的被其他线程观察到共享变量在线程间不可见的原因线程交叉执行重排序结合线程交叉执行共享变量更新后的值没有在工作内存与主内存间及时更新SynchronizedJMM关于其的规定 :锁可以让临界区互斥执行,让释放锁的线程向获取同一个锁的线程发送消息。加锁与解锁是同一把锁线程解锁前,必须把共享变量的最新值刷新到主内存线程加锁时,清空工作内存中共享变量的值,从而使用共享变量时需要从主内存重新读取最新值可见性-volatile通过 加入内存屏障和 禁止

2021-03-02 22:05:07 106

原创 高速缓存(cache)原理

高速缓存(cache) 概念和原理cache基本思想▪ cache 存储器( Cache memories )▪ 在处理器附近增加一个小容量快速存储器(cache)▪ 基于SRAM,由硬件自动管理cache基本思想:▪ 频繁访问的数据块存储在cache中▪ CPU 首先在cache中查找想访问的数据,而不是直接访问主存▪ 我们希望被访问数据存放在cache中Cache 基本概念:块(block)访问block b 不在 Cache 中,从内存中取出 block b ,将 block

2021-03-01 22:11:38 5627

转载 开篇:并发编程核心[分工、协作、互斥]

线程和进程图解工厂、车间、工人并发编程可抽象成三个核心问题: 分工、同步/协作、互斥学并发编程,透彻理解这三个核心是关键分工将当前 Sprint 的 Story 拆分成「合适」大小的 Task,并且安排给「合适」的 Team Member 去完成关于分工,常见的 Executor,生产者-消费者模式,Fork/Join 等,这都是分工思想的体现同步/协作任务拆分完毕;任务之间会存在依赖关系,前面的任务执行完毕,后面的任务才可以执行,人高级在可以通过沟通反复确认,确保自己的任务可以开始执行。但

2021-03-01 13:49:22 228

原创 如何截取中英文字符串不乱码

public static void main(String[] args) { String dispatchSite = "差不奥xxcnubis那里是身材好cU币我吃完子额鹅湖撤回"; String str = subGB2312(dispatchSite, 30); System.out.println(str); str = sub(dispatchSite, 30); System.out.println(str

2020-11-27 16:15:46 321

原创 线程池OOM异常

现象MACunable to creat new native threadwindow测试前 在启动测试类之前先将JVM内存调整小一点,不然很容易将电脑跑出问题在idea里:Run -> Edit Configurations VM options修改成-Xms10M -Xmx10M(-Xms10M Java Heap内存初始化值 -Xmx10M Java Heap内存最大值)Exception in thread “main” java.lang.OutOfMemoryEr

2020-10-23 13:29:03 1270

原创 压测线程池问题

现象描述:exception: java.util.concurrent.RejectedExecutionException:Task java.util.concurrent.FutureTask@1329962c rejected from java.util.concurrent.ThreadPoolExecutor@5a10b905[Running, pool size = 250, active threads = 250, queued tasks = 1024, completed ta

2020-10-23 11:25:28 799

转载 那些年我们一起着迷的Spring:Introduction和advisor(十一)

转载:Spring入门(Schema-based AOP其四)Introduction简介允许切面声明一个实现指定接口的通知对象,并且提供了一个接口实现类来表达这些对象由<aop:aspect>中的<aop:declare-parents>元素声明。该元素用于声明所匹配的类型拥有一个新的parent(因此得名)<aop:aspect id="usageTrac...

2019-07-23 16:05:21 909

转载 那些年我们一起着迷的Spring:AOP-Advice应用(十)

转自:Spring入门(Schema-based AOP其三)<bean id="moocAspect" class="com.imooc.aop.schema.advice.MoocAspect"></bean><bean id="aspectBiz" class="com.imooc.aop.schema.advice.biz.AspectBiz">&l...

2019-07-23 15:27:15 140

转载 那些年我们一起着迷的Spring:AOP实现-切入点pointcut(九)

基于配置的AOP实现Spring所有的切面和通知偶必须放在一个<aop:config>内(可以配置包含多个元素),每一个<aop:config>可以包含pointcut,advisor元素(它们必须按照这个顺序进行声明)<aop:config>风格的配置大量使用了Spring的自动代理机制 <bean id="moocAspect" class="c...

2019-07-23 14:54:32 193

原创 那些年我们一起着迷的Spring: 基于java的容器注解(七)

spring中Qualifier注解(10)https://blog.csdn.net/kang82651204/article/details/50528813https://blog.csdn.net/timo1160139211/article/details/77967573

2019-07-23 11:06:30 119

转载 并发编程与高并发解决方案:HashMap与ConcurrentHashMap

HashMap最多只允许一条记录的键为null,允许多条记录的值为null。HashMap非线程安全。如果需要满足线程安全,可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap。HashMap慕课网实战·高并发探索(十):HashMap与ConcurrentHashMaphttp://www.cnbl...

2019-07-18 10:16:19 223

转载 java中的接口与抽象类

《JAVA编程思想》一书中,将抽象类定义为“包含抽象方法的类”,但是如果一个类不包含抽象方法,只是用abstract修饰的话也是抽象类。抽象类就是为了 继承 而存在的。对于一个父类,如果它的某个方法在 父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。抽象类必须要有抽象方法吗? a...

2019-07-17 15:58:55 192

转载 深入理解JVM(四)——垃圾回收算法

深入理解JVM(四)——垃圾回收算法jvm系列(十):JVM演讲PPT分享stop the world会在执行某一个垃圾回收算法的时候产生,JVM为了执行垃圾回收,会暂停java应用程序的执行,等垃圾回收完成后,再继续运行。如果你使用JMeter测试过java程序,你可能会发现在测试过程中,java程序有不规则的停顿现象,其实这就是“stop the world”,停顿的时候JVM是在做垃圾...

2019-07-17 10:51:45 195

原创 String考点

== 解读对于基本类型和引用类型 == 的作用效果是不同的,如下所示:基本类型:比较的是值是否相同;引用类型:比较的是引用是否相同(内存地址);代码示例:String x = "string";String y = "string";String z = new String("string");System.out.println(x==y); // trueSystem.ou...

2019-07-16 21:36:47 158

原创 线程生命周期

1、创建线程的三种方式:继承 Thread 类,覆写父类中的 run() 方法,新线程类创建线程实现 Runnable 接口,实现接口中的 run() 方法,Thread 类创建线程实现 Callable 接口,FutureTask 类构造创建方法体,Thread 类创建线程3、线程的六种状态:Thread.State 枚举类中的定义NEW:还没开始运行的线程处于这种状态RUNNAB...

2019-07-11 09:29:31 57

原创 线程池(二):Executors线程池 封装

ExecutorService newSingleThreadExecutor()。newSingleThreadExecutor() { return new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());}只使用一个线程,使用无界队列L...

2019-07-10 16:14:04 176

转载 CopyOnWrite

原文:不了解这些“高级货”,活该你面试当炮灰。。。【石杉的架构笔记】读多写少的场景下引发的问题多个线程并发读和写ArrayList(ArrayList默认情况下是线程不安全的)怎么让这个ArrayList变成线程安全的呢?比如说一定要在synchronized代码段来对这个ArrayList进行访问,这样的话,就能同一时间就让一个线程来操作它了,或者是用ReadWriteLock读写锁的方式...

2019-05-24 11:01:07 190

原创 redis笔记

Redis 教程| 菜鸟教程 Window 下安装下载地址:https://github.com/MSOpenTech/redis/releases。打开一个 cmd 窗口 使用 cd 命令切换目录到 解压的redis 下运行:redis-server.exe redis.windows.conf这时候另启一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。切换到 redis...

2019-05-24 09:40:13 193 1

转载 RabbitMQ消息100%可靠性投递的解决方案实现(二)

消费端自定义监听继承DefaultConsumer,重写handleDelivery()方法public class Producer { public static final String MQ_HOST = "192.168.222.101"; public static final String MQ_VHOST = "/"; public static fin...

2019-05-16 15:19:05 2071

转载 RabbitMQ消息100%可靠性投递的解决方案实现(一)

RabbitMQ消息中间件极速入门与实战 课程 RabbitMQ学习——高级特性RabbitMQ消息中间件技术精讲(三)—— 深入RabbitMQ高级特性https://blog.csdn.net/u012211603/article/details/86118129消息如何保证100%投递成功什么是生产端的可靠性投递保障消息的成功发出保障MQ节点的成功接收发送端收到MQ节点(Br...

2019-05-16 14:08:09 7024 3

原创 缓存穿透、击穿、雪崩

问题大量的请求到数据库去查询。可能会导致数据库由于压力过大而宕掉。缓存穿透:请求查询一条数据库中不存在的数据,即缓存和数据库都查询不到这条数据,因此请求每次都会打到数据库上面去。解决办法缓存空值: 缓存中存储这些空数据的key。(也要设置过期时间) BloomFilter布隆过滤器(位数组+hash函数)针对这种key异常多、请求重复率比较低的数据,没有必要进行缓存,使用Bloo...

2019-05-08 10:34:25 233

原创 强引用、软引用、弱引用、虚引用

当垃圾回收器宣布一个对象死亡,至少需要经过两个阶段:1.当对象进行可达性分析时发现没有和GC ROOTS相连接就会被第一次标记;2.判断对象是否覆盖finalize(),如果覆盖,并且未被引用过这个方法的对象就会被放在F-Queue中,最后由JVM执行该方法。(JVM自动创建的低优先级finalize()线程,方法执行随时可能会终止)强引用、软引用、弱引用、虚引用强引用最普通的引用 O...

2019-02-18 17:08:18 221

转载 索引之二叉查找树,平衡二叉树

二叉查找树(二分查找)不合适做索引,因为当数据库中的数据变更时(删除/新增节点),可能会变为一个线性表,那么查找的效率会很低.平衡二叉树1 :每个节点最多只能有二个孩子节点2 :左子树的值小于根节点的键值,右子树的键值大于根节点的键值。3 :任意节点的左子树和右子树的高度差的绝对值不超过1(平衡二叉树的特点)平衡二叉树进行插入操作可能导致失去平衡左左失去平衡(左边高,右边低...

2019-02-14 14:53:31 726

原创 并发编程与高并发解决方案(三):线程安全-原子性

多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。原子性:提供了互斥访问,同一时刻只能有一个线程来对它进行操作可见性:一个线程对主内存的修改可以及时的被其他线程观察到有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序的存在,该观察结果一般杂乱无序。原...

2019-01-23 17:46:49 117

原创 并发编程与高并发解决方案(二):三大问题

一种规范,Java Memory Model-JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。1.一个线程如何和何时可以看到其他线程修改过的共享变量的值。2.如何以及何时同步的访问共享变量。堆Heap:运行时数据区,有垃圾回收。优点:运行时动态分配内存大小(生存期不必事先告诉编译器)缺点:由于运行时动态分配内存,所以存取速度慢一些栈Stack:栈的数据是可...

2019-01-22 17:26:38 179

原创 那些年我们一起着迷的Spring:bean的注解实现(六)

spring–bean的定义及作用域的注解实现持久层:持久是相对于瞬时来说的,其实就是可以把数据固化在硬盘或者磁带一类可以保存很长时间的设备上,不像放在内存中一样断电就消失了。企业应用中数据很重要(各种订单数据、客户数据、库存数据之类的),比应用程序本身更重要,所以需要把数据持久化。持久化可以通过很多方式,写文件和数据库都可以。只是现在企业一般都会选择把数据持久化到数据库中,因为可以很方便的查...

2019-01-14 15:17:06 267

转载 那些年我们一起着迷的Spring:概述(一)

Spring入门篇-慕课网:那些年我们一起着迷的Spring视频spring基本概述spring是一个开源框架,为了解决企业应用开发的复杂性而创建的,但现在已经不止应用于企业应用;是一个轻量级的控制反转(IOC) 和 面向切面(AOP) 的容器框架从大小与开销两方面而言Spring都是轻量的通过控制反转(IOC)的技术达到松耦合的目的 ; 提供了面向切面编程的丰富支持,允许通过分离应用...

2019-01-11 17:40:36 213

原创 并发容器J.U.C -- AQS同步组件(三)

https://www.jianshu.com/p/9e70e927fafchttps://blog.csdn.net/jesonjoke/article/details/80058631ReentrantLockjava中两类锁:SynchronizedJ.U.C中提供的锁。ReentrantLock与Synchronized都是可重入锁,本质上都是lock与unlock的操作。...

2018-12-29 16:42:34 234

反编译工具

java的反编译工具,下载解压即可用,文件小,方便快捷。

2018-05-03

java反编译工具

java反编译工具,用于反编译java的jar包,war包。下载解压运行.exe文件

2018-05-03

大批量产生id算法

大批量插入数据时,高并发时,可避免id的重复且速度快

2018-03-13

instantclient_11_2

解决常见的Cannot load OCI DLL, 126: Instant Client package is required for Baic and TNS connection For more information: http://wiki.navicat.com/wiki/index.php/Instant_client_required问题。

2017-07-19

C# zip文件解压缩

C# zip文件解压缩 只能实现一级目录的解压缩

2016-07-14

空空如也

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

TA关注的人

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