自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 这是标题666

这是内容

2021-08-31 22:51:29 112

原创 JVM内存区域与垃圾回收

1、JAVA内存区域与内存溢出1.1、概述Java中JVM提供了内存管理机制,Java虚拟机在执行Java程序的过程中会把内分分为不同的数据区,如图:1.2、程序计数器程序计数器是当前线程所执行的字节码的行号指示器,作用就是根据计数器的值获取下一条要执行的字节码指令。当执行的是java方法,则记录的是正在执行的虚拟机字节码指令的地址,如果是Native方法,则这个计数器的...

2019-12-24 21:08:20 178

原创 JAVA线程池原理与源码分析

1、线程池常用接口介绍1.1、Executorpublic interface Executor {void execute(Runnable command);}执行提交的Runnable任务。其中的execute方法在将来的某个时候执行给定的任务,该任务可以在新线程、池化线程或调用线程中执行,具体由Executor的实现者决定。1.2、ExecutorServic...

2019-12-18 22:56:23 226

原创 面试【JAVA基础】其他

1、自定义注解@target说明了Annotation所修饰的对象范围: constructor、method、field、package、type等等。@retention定义了该Annotation被保留的时间长短, source(源文件保留)、class( class保留)、runtime(运行时有效)。@inherited某个被标记的类型是被继承的。一个类标记了带有@...

2019-12-18 22:54:27 93

原创 面试【JAVA基础】JVM

1、内存模型1.1、堆堆是所有线程共享的,主要存放对象实例和数组。新生代和老年代的比例是1:2。新生代中三个区域的比例是 8 : 1 : 1。1.1.1、新生代对象分配在eden区中,当eden区满时会触发minor gc,将eden区中存活的对象,复制到survivor0区中,清空eden区,当survivor0中满了时,会将存活的对象复制到survivor1区...

2019-12-18 22:52:48 173

原创 面试【JAVA基础】Web与网络

1、转发与重定向的区别转发是服务器请求资源,服务器直接访问目标地址url,把响应内容返回给浏览器。 重定向根据服务器返回的状态码重新请求地址。转发是服务器行为,重定向是客户端行为。转发显示的url不变而重定向显示新的url。转发页面和转发到的页面共享request的信息,重定向不共享数据。转发一般用于用户登录,根据角色转发到响应的模块, 重定向一般用于用户注销,跳...

2019-12-18 22:51:35 92

原创 面试【JAVA基础】类加载机制

1、类加载过程1.1、加载查找和导入class文件。1.2、链接验证检验载入的class文件的正确性,完整性。准备给类的静态变量分配存储空间,会赋对象类型的默认值。解析将class常量池中的符号引用转换成直接引用。符号引用和直接引用的区别:符号引用:java编译阶段不知道所引用的对象的实际地址,使用符号引用来代替直接引用:能够直接定位到对象的指...

2019-12-18 22:50:13 191

原创 面试【JAVA基础】锁

1、锁状态锁的状态只能升级不能降级。无锁没有锁对资源进行锁定,所有线程都能访问并修改同一个资源,但同时只有一个线程能修改成功。其他修改失败的线程会不断重试,直到修改成功,如CAS原理和应用是无锁的实现。偏向锁偏向锁是指一段同步代码一直被一个线程访问,那个该线程会自动获取锁,降低获取锁的代价。轻量级锁是指当锁是偏向锁的时候,被另外的线程所访问,偏向锁就会升级为轻量级锁,其...

2019-12-18 22:48:57 342

原创 面试【JAVA基础】阻塞队列

1、五种阻塞队列介绍ArrayBlockingQueue有界队列,底层使用数组实现,并发控制使用ReentrantLock控制,不管是插入操作还是读取操作,都需要获取锁之后才能执行。LinkedBlockingQueue底层基于单向链表实现,既可以当做有界队列,也可以当做无界队列使用。使用两个ReentrantLock实现并发控制:takelock和putlock。Synch...

2019-12-18 22:47:35 270

原创 面试【JAVA基础】集合类

1、ArrayList的扩容机制每次扩容是原来容量的1.5倍,通过移位的方法实现。使用copyOf的方式进行扩容。扩容算法是首先获取到扩容前容器的大小。然后通过oldCapacity (oldCapacity >> 1) 来计算扩容后的容器大小newCapacity。这里用到了>> 右移运算,即容量增大原来的1.5倍。还要注意的是,这里扩充容量时,...

2019-12-18 22:46:03 90

原创 面试【JAVA基础】多线程

本次整理的内容如下:1、进程与线程的区别进程是一个可执行的程序,是系统资源分配的基本单位;线程是进程内相对独立的可执行单元,是操作系统进行任务调度的基本单位。2、进程间的通信方式2.1、操作系统内核缓冲区由于每个进程都有独立的内存空间,进程之间的数据交换需要通过操作系统内核。需要在操作系统内核中开辟一块缓冲区,进程 A 将需要将数据拷贝到缓冲区中,进程 B 从缓冲区...

2019-12-18 01:01:02 103

原创 LeetCode|234.回文链表

题目描述等级: 简单请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?思路对于单链表,回文,快慢指针,链表反转的考察。>“回文”是指正读反读都能读通的句子,它是古今...

2019-12-18 00:46:48 96

原创 RedisTemplate: Failed to deserialize payload

问题org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to de...

2019-12-13 21:13:18 1180 1

原创 分布式文件存储:FastDFS简单使用与原理分析

引言FastDFS 属于分布式存储范畴,分布式文件系统 FastDFS 非常适合中小型项目,在我接手维护公司图片服务的时候开始接触到它,本篇文章目的是总结一下 FastDFS 的知识点。用了 2 台 2 核 4G 的阿里云服务器做集群部署,具体部署步骤请参考:https://github.com/happyfish100/fastdfs/wiki1、FastDFS 分布式文件系...

2019-12-12 21:22:13 279

原创 分布式锁的实现分析

1、设计目标分布式部署的应用集群中保证数据更新的互斥性,且程序出现异常时,锁能够自动释放,避免死锁发生。2、为什么要使用分布式锁为了保证分布式部署的应用集群中同一时间只有一个客户端对共享资源进行操作。根据锁的用途再细分:对共享资源的操作是幂等性的,使用分布式锁能够避免重复操作,从而提高效率。对共享资源的操作是非幂等的,比如订单状态的修改,如果多个客户端同时操作,最后的结...

2019-12-12 21:14:33 233

原创 深入了解Redis【二】对象及数据结构综述

引言Redis中每个键值对都是由对象组成:- 键总是一个字符串对象(string)- 值可以是字符串对象(string)、列表对象(list)、哈希对象(hash)、集合对象(set)、有序集合对象(zset)。介绍redis官方网站中对其数据类型的简单介绍:An introduction to Redis data types and abstractions摘抄一段...

2019-12-10 23:21:10 70

原创 深入了解Redis【一】源码下载与参考资料准备

引言一直在使用redis,但是却没有系统的了解过它的底层实现,准备边学习边记录,深入了解redis。打算分析以下几个方面:redis的基本类型及底层原理与java对比,每种数据类型的使用场景redis底层对象key的一致性Hash算法单线程的redis“快”redis的过期策略以及内存淘汰机制redis分布式锁原理redis备份方式多机环境下主从赋值、哨兵、集群的...

2019-12-10 23:14:12 307 1

原创 Java内存模型分析

在学习Java内存模型之前,先了解一下线程通信机制。1、线程通信机制在并发编程中,线程之间相互交换信息就是线程通信。目前有两种机制:内存共享与消息传递。1.1、共享内存Java采用的就是共享内存,本次学习的主要内容就是这个内存模型。内存共享方式必须通过锁或者CAS技术来获取或者修改共享的变量,看起来比较简单,但是锁的使用难度比较大,业务复杂的话还有可能发生死锁。1.2...

2019-12-10 23:09:37 129

原创 关于`ClawHub的技术分享`公众号

生命不息,折腾不止!该公众号的内容大部分为平时学习积累所整理的笔记,包括但不限于源码、原理、经验等。如果感兴趣,也可以访问clawhub的博客主站https://clawhub.club...

2019-12-08 22:32:50 76

原创 深入了解Kafka【五】Partition和消费者的关系

![]https://cdn.jsdelivr.net/gh/clawhub/image/diffuser/top/19/11/27/e3b34c09eeaadd7d63a297deee7ca2a8.jpg()1、消费者与Partition以下来自《kafak权威指南》第4章。假设主题T1有四个分区。1.1、一个消费者组1.1.1、消费者数量小于分区数量只有一个消费者时,...

2019-12-08 22:00:04 1444

原创 深入了解Kafka【四】消费者的Offset管理

1、Offset TopicConsumer通过提交Offset来记录当前消费的最后位置,以便于消费者发生崩溃或者有新的消费者加入消费者组,而引发的分区再均衡操作,每个消费者可能会分到不同的分区。我测试的kafka版本是:0.11.0.2,消费者往一个特殊的主题“_consumer_offset”发送消息,如图:消息的内容包括:fields| content-|-Key ...

2019-12-08 21:58:26 523

原创 深入了解Kafka【三】数据可靠性分析

1、多副本数据同步策略为了保障Prosucer发送的消息能可靠的发送到指定的Topic,Topic的每个Partition收到消息后,要向Producer发送ACK,如果Produser收到ACK,就会进行下一轮发送,否则重试。1.1、多副本概述为了提高消息的可靠性,Kafka每个Topic的partition都有N个副本(replica)。这N个副本中,其中一个repli...

2019-12-08 21:54:35 187

原创 LeetCode|344. 反转字符串

题目描述等级: 简单编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例1:输入:["h","e","l&q...

2019-12-05 23:13:00 53

原创 LeetCode|350. 两个数组的交集 II

题目描述等级: 简单给定两个数组,编写一个函数来计算它们的交集。示例1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2]示例2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。我们可...

2019-12-05 23:11:22 65

原创 LeetCode|371. 两整数之和

题目描述等级: 简单不使用运算符 和 - ,计算两整数a 、b之和。示例1:输入: a = 1, b = 2输出: 3示例2:输入: a = -2, b = 3输出: 1思路对于位运算的考察。在位运算中,异或操作获取的是两个数的无进位和,异或:相同为0,不同为1。如,2^3 0010^ 0011------- 0001...

2019-12-05 23:07:57 78

原创 对于分布式Job的思考

引言在清理Github的时候,发现以前写的一个简单的分布式任务分发系统ClawHub/task-distribution,使用了zk的选主与队列,调度器使用spring的ThreadPoolTaskScheduler,任务支持cron表达式。这让我想起在这之前还封装过Quartz,那时候做的是单机版超大型应用,内部需要做调度系统。目前在公司使用过Elastic-Job,也使用过...

2019-12-05 21:05:11 292

原创 分布式ID方案SnowFlake雪花算法分析

1、算法SnowFlake算法生成的数据组成结构如下:在java中用long类型标识,共64位(每部分用-分开):0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 0000000000 001位标识,0表示正数。41位时间戳,当前时间的毫秒减去开始时间的毫秒数。可用 (1L <...

2019-12-05 20:57:01 208 1

原创 并发编程挑战:死锁与上下文切换

引言上下文切换(有时也称做进程切换或任务切换)是指 CPU 从一个进程或线程切换到另一个进程或线程。上下文切换会影响多线程执行速度。死锁是指多个进程或线程循环等待它方占有的资源而无限期地僵持下去的局面。1、上下文切换上下文定义cpu发生进程或者线程切换时,所依赖的数据集合,比如一个函数有外部变量,函数运行时,必须获取外部变量,这些变量值的集合就是上下文。引发问题对于...

2019-12-03 17:59:46 218

原创 LeetCode|387. 字符串中的第一个唯一字符

题目描述等级: 简单给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = "leetcode"返回 0.s = "loveleetcode",返回 2.注意事项:您可以假定该字符串只包含小写字母。思路对于字符串和Hash表的考察。首先遍历一遍字符串中字符,用Ha...

2019-12-03 00:15:57 66

原创 LeetCode|387. 字符串中的第一个唯一字符

![](https://cdn.jsdelivr.net/gh/clawhub/image/diffuser/top/19/11/27/7b902620bb14e2ee04ccae509693ea25.jpg题目描述等级: 简单给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = "leetcode"返回 ...

2019-12-03 00:12:16 154

原创 LeetCode|412. Fizz Buzz

题目描述等级: 简单写一个程序,输出从 1 到 n 数字的字符串表示。如果n是3的倍数,输出“Fizz”;如果n是5的倍数,输出“Buzz”;如果n同时是3和5的倍数,输出 “FizzBuzz”。示例:n = 15,返回:[ "1", "2", "Fizz&quo...

2019-12-03 00:11:33 167

原创 深入了解Kafka【二】工作流程及文件存储机制

1、Kafka工作流程Kafka中的消息以Topic进行分类,生产者与消费者都是面向Topic处理数据。Topic是逻辑上的概念,而Partition是物理上的概念,每个Partition分为多个Segment,每个Segment对应两个文件,一个索引文件,一个日志文件。Producer生产的数据会被不断的追加到日志文件的末端,且每条数据都有自己的offset。消费组中的每个Con...

2019-12-02 21:30:38 108

原创 深入了解Kafka【一】概述与基础架构

1、概述Kafka是一个分布式的、基于发布订阅的消息系统,主要解决应用解耦、异步消息、流量削峰等问题。2、发布订阅模型消息生产者将消息发布到Topic中,同时有多个消息消费者订阅该消息,消费者消费数据之后,并不会清除消息。属于一对多的模式,如图:3、系统架构网上找了个不错的架构图:上图中标识了一个kafka体系架构包括若干Producer、Broker、Co...

2019-12-02 21:28:57 187

原创 分布式ID生成方案汇总

1、目标1.1、全局唯一不能出现重复的ID,全局唯一是最基本的要求。1.2、趋势有序业务上分页查询需求,排序需求,如果ID直接有序,则不必建立更多的索引,增加查询条件。而且Mysql InnoDB存储引擎主键使用聚集索引,主键有序则写入性能更高。1.3、高可用ID是一条数据的唯一标识,如果ID生成失败,则影响很大,业务执行不下去。所以好的ID方案需要有高可用。...

2019-12-02 21:11:01 293

原创 深入了解Netty【八】TCP拆包、粘包和解决方案

1、TCP协议传输过程TCP协议是面向流的协议,是流式的,没有业务上的分段,只会根据当前套接字缓冲区的情况进行拆包或者粘包:发送端的字节流都会先传入缓冲区,再通过网络传入到接收端的缓冲区中,最终由接收端获取。2、TCP粘包和拆包概念因为TCP会根据缓冲区的实际情况进行包的划分,在业务上认为,有的包被拆分成多个包进行发送,也可能多个晓小的包封装成一个大的包发送,这就是TCP...

2019-12-02 21:05:02 250

原创 深入了解Netty【七】Netty核心组件

1、Bootstrap与ServerBootstrapbootstrap用于引导Netty的启动,Bootstrap是客户端的引导类,ServerBootstrap是服务端引导类。类继承关系:2、Future与ChannelFutureNetty中的操作都是异步的,等待完成或者注册监听。如://b为ServerBootstrap实例 ChannelFuture f = ...

2019-12-01 22:28:39 102

原创 深入了解Netty【六】Netty工作原理

引言前面学习了NIO与零拷贝、IO多路复用模型、Reactor主从模型。服务器基于IO模型管理连接,获取输入数据,又基于线程模型,处理请求。下面来学习Netty的具体应用。1、Netty线程模型Netty线程模型是建立在Reactor主从模式的基础上,主从 Rreactor 多线程模型:但是在Netty中,bossGroup相当于mainReactor,workerG...

2019-12-01 20:14:51 204

原创 深入了解Netty【五】线程模型

![]()引言不同的线程模型对程序的性能有很大的影响,Netty是建立在Reactor模型的基础上,要搞清Netty的线程模型,需要了解一目前常见线程模型的一些概念。具体是进程还是线程,是和平台或者编程语言相关,本文为了描述方便,以线程描述。目前存在的线程模型有:传统阻塞IO服务模型Reactor模型Proactor模型1、传统阻塞IO服务模型采用阻塞IO模...

2019-12-01 20:09:47 121

原创 深入了解Netty【四】IO模型

引言IO模型就是操作数据输入输出的方式,在Linux系统中有5大IO模型:阻塞式IO模型、非阻塞式IO模型、IO复用模型、信号驱动式IO模型、异步IO模型。因为学习Netty必不可少的要了解IO多路复用模型,本篇是基础。名词概念阻塞:指向调用方,在调用结果返回之前,调用方线程会挂起,直到结果返回。非阻塞:指向调用方,在调用结果返回之前,调用方线程会处理其他事情,不会阻塞。...

2019-12-01 20:01:11 114

原创 私藏免费可商用图片网站分享

福利概述分享两类资源:- 随机返回高清大图- 免费可商用网站1、自动切换随机返回高清图片https://source.unsplash.com/collection/collectionid/1600x900https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture2、免费...

2019-12-01 12:27:46 286

空空如也

空空如也

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

TA关注的人

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