自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

0102的博客

专注于数据结构与算法,java基础,应用开发相关中间件Redis,zk等,微服务相关文章正在计划中。

  • 博客(175)
  • 资源 (21)
  • 收藏
  • 关注

原创 数据结构与算法--死磕二叉树

死磕二叉树近一年都比较关注算法相关的知识,也刷了不少题,之前的文章中大多也是算法相关的文章,但是感觉每次遇到树相关的题型都不能应对自如,因此还是有必要在相关知识上下功夫,因此有此次总结,以下是所有树相关的文章数据结构与算法–面试必问AVL树原理及实现数据结构与算法–二叉树的深度问题数据结构与算法–二叉堆(最大堆,最小堆)实现及原理数据结构与算法–二叉查找树转顺序排列双向链表数据结构与算法-- 二叉树中和为某一值的路径数据结构与算法-- 二叉树后续遍历序列校验数据结构与算法-- 广度优先打

2021-07-13 16:31:35 219 34

原创 数据结构与算法-- 八皇后问题(多种实现方案)

八皇后问题解法一本篇我们承接上一篇中的思想,想到了一个经典的算法题,八皇后问题:题目:在8*8的国际象棋上摆放8个皇后,使得其互相不能攻击,即任意两个换后不能在同一行,同一列,或者同一对角线上。如下图中所示,就是一个符合预期的摆放方式,问总共有多少中摆放方式。上图中的数字代表此处放置一个皇后,并且从上到下依次是0~7 总共8个。分析:由于8个皇后任意两个不能处在同一行,那么肯定每个皇后占据一行。有上图看,我们必然可以用数组来标识myQueen[8] 数组,数组中i 个数字表示位于

2021-05-26 17:59:05 4856 28

原创 Interview preparation-- mongodb

如果需要查询时效性,例如insert后立刻查询,选择 primary/primaryPreferred。如果是类似广播发布信息,比如上传图片后,全国各地每个地方都需要读:nearest。如果实效性不高,则可以从:secondary/sendaryPreferred。

2023-04-16 12:04:11 182 1

原创 Interview preparation -- 线上问题排查指令

【代码】Interview preparation -- 线上问题排查指令。

2023-04-04 16:48:43 147

原创 Interview preparation-- manager

书籍:-《管理学》:https://book.douban.com/subject/1012611/-《卓有成效的管理者》:https://book.douban.com/subject/25850098/-《人性的弱点》:https://book.douban.com/subject/1391399/课程和培训:Coursera:https://www.coursera.org/edX:https://www.edx.org/领英学习:https://www.linkedin.com/learn

2023-04-02 16:58:05 148

原创 Interview preparation--TCP

TCP头部信息关键信息:32位序列号:每个包中表示当前这个数据包的唯一值32为确认序列号:加入是k 目的主机返回的确认好,就是高速对方,我已经收到了你之前发送的序列号为k-1的消息ACK 标志:表示确认是否有效,带上ACK表示当前消息是确认报文段FIN:表示关闭请求的标志位SYN:表示建立请求的标示位TCP连接建立首先客户端,服务器TCP进程都处于关闭状态TCP服务器是被动等待的,因此服务端会进入监听状态客户端发送链接请求,链接请求标志位 SYN = 1 ,当前报文的32

2023-03-30 18:44:54 76

原创 Interview preparation--DNS & CDN

请求从客户端发出后,会先通过网络中的DNS才能找到对应的目的地,因为我们对IP地址等数字不敏感,无法很快的记住,因此我们需要一个类似www.baidu.com这种域名的方式找到我要访问的地址,因此就需要一个数据库用来存储www.baidu.com的IP地址信息。DNS查询过程解析过程:xxx.a.baidu.com。DNS的目的是将域名解析成IP地址,大型系统部署多个节点。

2023-03-29 00:05:18 92

原创 Interview preparation -- MQ

Kafka中是通过Zookeeper选举的出的Master/Slave,Zookeeper具备选举功能,选举机制的原理是少数服从多数,那么Zookeeper的选举机制必定由Zookeeper集群中多个实例共同完成,Zookeeper集群中多个实例必须相互通讯,如果实例太多,网络通讯就会变得非常复杂,并且zookeeper在自身master挂掉,发生选举master节点期间是不对外提供服务的,这样的话系统会变得非常复杂。RocketMQ中Topic是逻辑概念,队列(Queue)是物理概念,和Kafka很想。

2023-03-24 23:58:40 78

原创 Interview preparation -- MySql

其实用其中一个就行,但是因为try-cache语句对性能有一定的影响,我们通过BoomFilter拦截的方式让当天的exception流程降到最低,减少性能损耗,同时因为还存在补数据的问题,例如,昨天或者前天的数据存在一定的问题或者漏穿的问题,需要重新同步,因此在同步历史数据时候,还是需要通过try cache操作来完成update。当前值是4,但是在视图A,B,C中,分别记录的值是1,2,4,也就是同一个字段,在系统不同时间段可能存在N多个版本,这就是数据库的多版本并发控制(MVCC)

2023-03-22 19:04:41 96

原创 Interview preparation -- redis

Redis在执行bgsave的时候主线程的写操作还在进行中,此时,利用写时复制(Copy-On-Write)技术做到并行进行,当写发生,被写入的这块数据会被复制一份,fork线程操作复制数据写入RDB,主线程不影响。bloomFilter是基于BitMap实现的,当我们面对巨量数据时候,用普通的数据结构存储时候,会消耗很大的内存,例如,5千万用户的访问,我们对比集合类型和Bitmaps类型,加入用户id是Long,64位。文件事件处理器:服务器会为不同任务执行不同事件处理器,这些处理器是一个个不同的函数。

2023-03-21 17:45:07 55

原创 Interview preparation -- spring cloud seata

事物完成后释放锁等资源,删除日志。AT模式是一种无侵入的分布式事务解决方案,用户只需要关注自己的SQL,AT模式中用户的SQL就是第一阶段,Seata-AT模式会给你自动生成事务二阶段提交与回滚,是2PC的一个应用。一阶段:Seata拦截业务SQL,解析SQL,找到要更新的数据,记录Undo,然后执行业务SQL,在记录Redo,最后生成行锁,这些操作都是在本地数据库事务内完成。2PC即两阶段提交协议,是将整个事物流程分为两个阶段,P是指准备阶段,C是提交阶段。

2023-03-20 20:45:46 75

原创 Interview preparation -- spring cloud gateway

自定义Filter 用的才是最多的,需要实现Ordered,GlobalFilter。

2023-03-19 23:57:29 49

原创 Interview preparation -- spring-cloud-sentinel

下图是令牌桶案例,系统已一定速率(r token/sec)往固定容量的令牌桶中放入令牌,如果此时有客户端请求过来,则需要从令牌桶中拿到令牌以获得访问资格。令牌桶是对网络整体限制 + 速率限制的一个常用算法,对于每一个请求,都需要从令牌桶中获取一个令牌,如果没有获得令牌,则需要出发限流策略。令牌桶算法中,有两个关键值,桶容量,令牌添加速率,两个值都必须低于系统能承载的最大QPS,

2023-03-18 22:49:15 185

原创 Interview preparation--SpringCloudSentinel

Sentinel的设计中资源定义和 规则配置,还有流控算法三者是分开的,我们可以通过Sentinel api先定义好资源埋点,然后需要的时候我们在实时的增加上流控规则。这种方式极大的增加了Sentinel的灵活性。Sentinel是一个轻量级的流控架构,主要以流量为切入点,从流量控制,熔断,系统负载保护等多个维度来帮助用户保护服务的稳定性。与Hystrixx相比,Sentinel设计更简单,使用更方便灵活,能动态的修改限制规则。

2023-03-18 11:39:19 314

原创 Interview preparation -- java并发编程

AQS是AbstractQueuedSynchronizer抽象类,AQS是JUC包下的一个基础类,很多并发功能都是通过AQS实现的,比如ReentranLock,ThreadPoolExecutor,阻塞队列,CounDownLatch,Semaphore,CyclicBarrier等都是基于AQS实现的AQS内部关键属性如下下:} Node() {} Node() {

2023-03-15 23:34:38 102

原创 Interview preparation -- Nacos核心功能点源码分析

服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存。Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。

2023-03-14 10:50:29 220

原创 Interview preparation -- Spring Cloud Alibaba Nacos

​ CP 原则属于强一致性原则,要求所有节点可以查询的数据随时都要保持一直(同步中的数据不可查询),即:若干个节点形成一个逻辑的共享区域,某一个节点更新的数据都会立即同步到其他数据节点之中,当数据同步完成后才能返回成功的结果,但是在实际的运行过程中网络故障在所难免,如果此时若干个服务节点之间无法通讯时就会出现错误,从而牺牲了以可用性原则(A),例如关系型数据库中的事务。​ 分区容错性(Partition tolerance):在网络异常(光缆断裂、设备故障、宕机)的情况下,系统仍能提供正常的服务。

2023-03-13 16:02:50 42

原创 Interview preparation -- Spring AOP

ProxyFactoryBean是ProxyConfig的一个子类,ProxyConfig是一个数据的基础类,他为子类提供了配置属性的解析,一次来获取一个代理信息的基础数据,比如Adice ,PointCut,Advisor等信息在xml文件中的配置由他来载入。代理模式图解,代理对象通过持有被代理对象的引用,在执行具体方法的时候通过调用被持有代理对像的引用来完成被代理对象的方法,并且同时增加自己的增强方法,Spring AOP中的设计思想也是同样的。

2023-03-13 13:13:21 40

原创 Interview preparation -- SpringAop

在不修改原有代码,或者无法修改原有代码的情况下,增强对象功能,使用代理对象代替原来的对象去完成功能而达到扩展功能的目的。JDK动态代理的局限性一定要有接口和实现类的存在增强接口中定义的方法,实现类中其他和接口无关的方法是无法增强的只能读取到接口方法上的注解,不能读取到实现类方法上的注解总而言之,JDK动态代理只能和接口打交道,不能与具体实现类有交集,因为他并不知道所要代理的类是那个实现类。

2023-03-12 23:15:32 66

原创 Interview preparation -- spring bean生命周期

Spring bean生命周期

2023-03-10 15:15:36 50

原创 IM流程图

撒旦法

2023-03-10 14:47:54 87

原创 Interview preparation -- Spring-IOC容器初始化过程

利用AbstractApplicationContext 中对DefaultResourceLoader 类继承的getResource方法 对传入的Path进行解析,然后生成一个FileSystemResource对象并返回。如果是其他类型的ApplicationContext,就生成对应类型的Resource依据上一步骤得到的FileSystemResource,在BeanDefinitionReader 接口中定义了资源文件的读取固定模板方法。

2023-03-08 18:41:13 33

原创 JVM 类加载机制 - review

类加载的“加载”阶段,需要完成以下三件事情。

2023-03-06 18:35:32 27

原创 Interview preparation -- JVM性能优化-垃圾收集器

JVM性能优化-垃圾收集器

2023-03-03 15:37:11 103 1

原创 Interview preparation -- JVM性能优化-jvm参数,GC算法

引用计数算法:标记清除算法:复制算法:标记压缩算法:增量算法:分代收集。

2023-03-02 23:57:18 32

原创 Netty核心组件EventLoop源码解析

每次执行execute方法就会向队列中添加任务。当第一次添加时候就启动线程,执行run方法,run方法是EventLoop的核心实现,负责轮询获取事件,处理事件,执行队列中任务其中调用selector的select方法默认阻塞一秒,有定时任务就t+0.5,t是定时任务剩余时间,当执行execute方法时候,也就是添加任务的时候,唤醒selector,防止selector阻塞事件过长当selector返回的时候,会调用processSelectedKeys对selectKey进行处理。

2023-02-28 22:20:43 291

原创 Netty心跳(heartbeat)服务源码解析

IdleStateHandler实现心跳检测功能,当服务器和客户端没有任务读写,并且超过设置事件,会触发handler的userEentTriggered方法,用户可以在这个方法中实现自己的逻辑IdleStateHandler的实现基于EventLoop的定时任务,每次读写都会记录一个最后读/写事件,定时任务执行的时候,根据最后读写事件与间隔时间的差值来判断是否执行内部有3 个定时任务,分别对应读,写,读/写事件,通常我们监听读/写事件就足够。

2023-02-27 23:02:15 389

原创 Netty核心组件ChannelPipeline事件handler源码解析

ChannelPipeline中的出入站方法中出站是从tail开始,入站是从head开始,因为出站是从服务器端通过ChannelPipeline到SocketChannel写,从tailHandlerContext开始,能让前面所有的Handler进行处理,能防止Handler被遗漏,比如编码入站当然是从SocketChannel通过 ChannelPipeline 到服务器端,当然是从head开始往内部输入,让后面的handler能处理这些输入数据,比如解码。

2023-02-24 17:28:17 376

原创 Netty核心组件创建源码浅析

如上可以看到他的初始化过程中包含 DefaultChannelPipeline, executor 线程池初始化,就是我们创建的EventLoopGroup,包括inbound,outbound两个boolean类型,标识此处的Handler是处理出站还是处理入站。channelRead当从channel读取数据时候被调用,这两个方法是我们使用Netty编码的时候经常用到的。是一个通用的能够同时处理入站事件和出站事件的类,类结构如下。bind方法,当请求将channel绑定到本地的时候调用。

2023-02-23 12:29:03 384

原创 Netty服务端请求接受过程源码剖析

循环遍历之前doReadMessage中获取的buf中的所有请求,调用Pipeline的firstChannelRead方法,用于处理这些接受的请求或者其他事件,在read方法中,循环调用ServerSocket的Pipeline的fireChannelRead方法,开始执行管道中的handler的ChannelRead方法,如下。参数buf是一个静态队列。将获取到的Nio中SocketCHannel包装成Netty中的NioSocketChannel 并且添加到buf队列中(list)

2023-02-17 15:52:45 407

原创 Netty启动流程源码剖析

可以看到,这正是我们在group链式调用中在初始化 ServerBootstrap 中的channel传入的NioServerSocketChannel,接下来就直接到NioServerSocketChannel中的构造方法,如下代码。每个元素的类型给赋值了一个EventLoop,也就是我们的NioEventLoopGroup中是一个NioEventLoop的一个事件循环数组,包含了多个EventLoop,这个可以注册channel,用于在事件循环中去进行选择。Unsafe对象示意图。

2023-02-16 11:56:31 424

原创 从CPU中缓存架构浅析volatile底层原理

JMM中规定所有变量都存储在主内存(Mail Memory)中。每条线程都有自己的工作内存(work Memory),此处说明的主内存,即上文中的操作系统的内存,每条线程的工作内存,就是我们CPU的高速缓存,从上文对CPU缓存的说明可以看出,线程对变量读,写在工作内存中进行,同时,本线程工作内存的变量无法改变其他线程工作内存,必须通过主内存完成信息交换内存模型如下:如上图中,线程A修改变量后,只会在此线程工作内存中体现。

2023-02-06 15:58:21 423 1

原创 Java I/O中的Reactor模式

单Reactor单线程,酒店的门童,服务员是同一个人,全程为客户服务单Reactor多线程,1个门童,多个服务员,门童之负责接待,转给服务员主从Reactor多线程,多个门童,多个服务员。

2022-09-16 16:08:24 921

原创 入门级微单反性能对比

单反

2022-08-26 11:54:10 831

原创 IO与零拷贝

零拷贝时网络编程的一个关键优化点在Java程序中,常用的零拷贝又mmap(内存映射)和sendFile。那么在OS中的设计时如何,我们需分析mmap和sendFile对比最后通过案例分析。

2022-08-26 10:10:17 392

原创 javaI/O包中的包装模式

InputStream类是一个抽象类,FileInputStream是具体的组件,实现了抽象类所有接口,所以FilterInputStream是我们的装饰角色,他实现了InputStream所有接口,并且持有InputStream的一个实例。上面案例中,装饰器模式就是赋予被装饰类更多的功能,在Java I/O中,有很多组合功能情况,这些不同功能的组合就是装饰器实现的,比如FilterInputStream为案例说明。Component:抽象组件角色,定义一组抽象接口,规定这个被装饰组件的功能。...

2022-08-04 17:48:16 216

原创 I/O性能与可靠性

RAID类型访问速度数据可靠性磁盘利用率ARID0很快很低100%ARID1很慢很高50%ARID10中的很高50%ARID5较快很高(N-1)/NARID6较快很高(N-2)/N解决问题数据存储容量问题RAID用多块磁盘组成存储阵列,例如RAID5可以扩大N-1倍数据读写速度将数据并发写入N份磁盘,写入速度明显提升,同时读取也是一样,但是并不能提升N倍,因为机械硬盘延迟主要是用来寻址的时间,数据真正读写时间只占一小部分。https。...

2022-08-02 12:09:49 366

原创 NIO工作方式浅析

NIO提供了比传统文件访问更好的方法,两个优化方法FileChannel.transferTO,FileChannel.transferFrom,另外一个是FileChannel.map。此时底层操作系统就可以从缓冲区中正确读取这5个字节数据,并且发送出去,在下一次写入数据之前我们在调用clear()方法,缓冲区的索引又会回到初始位置。mark的作用当调用mark()方法时候,会记录当前position的前一个位置,我们需要调用reset时候,position恢复mark记录的值。......

2022-08-01 15:49:49 271

原创 手把手教你 git revert merge

开发中git分支管理研发流程从develop分支切出一个新分支,根据是功能还是bug,命名为id-xxx 或 id-fixbug-*。开发者完成开发,提交分支到远程仓库。开发者发起merge请求,将新分支请求merge到develop分支,并提醒code reviewer进行review(也可以在当前开发分支review)code reviewer对代码review之后,若无问题,则接受merge请求,新分支merge到develop分支,同时可删除新建分支;若有问题,则不能- - 进行mer

2022-05-07 16:05:28 3466

原创 SpringBoot中Bean按条件装配

@Conditional条件装配@Conditional是Spring Framework提供的一个核心功能注解,这个注解的作用是提供自动装配的条件限制,一般我们在用@Configuration,@Bean的时候使用它。也就是我们在自定义Bean的注入的时候,我们可以通过@Condition来对bean的注入增加逻辑判断,符合我们要求的我们才让他自动装配@Conditional 的使用如下注解源码是@Condition@FunctionalInterfacepublic interfac

2022-03-10 11:58:44 732

Flink架构原理,入门操作

Flink架构原理、Flink应用场景、Flink特点优势、Flink分布式集群企业级部署、Flink任务提交、高可用、并行度设置及参数配置、常用API、Flink窗口、Flink状态、FlinkTable、FlinkSQL、Flink复杂时间等一系列Flink热点技术。如果你在学习和工作中有实时业务处理场景,通过本课程学习,可以掌握如何使用Flink进行企业级开发,同时在市场竞争力上也胜人一筹。

2023-05-05

ClickHouse学习入门,快速上手

ClickHouse学习入门,快速上手 本课程包含大数据OLAP分析场景技术选择、ClickHouse优秀特性分析、ClickHouse分布式集群搭建及实战应用、库表引擎、ClickHouse重点MergeTree引擎、视图、SQL语法、API、ClickHouse与其他大数据分析框架整合、实时场景下ClickHouse应用等内容,从多方面、多角度为大家呈现ClickHouse的“惊艳”之处,让大家学习技术少走弯路,事倍功半。

2023-05-05

20201210技术分享--java动态追踪技术浅析.pptx

动态追踪技术分享ppt,给技术分享提供模板,java技术组内分享ppt,互联网技术,监控底层技术,Arths底层原理,BTrace实现原理

2020-12-10

京东微服务实践--杰夫服务框架.zip

JD微服务实践解析,已现有jd的微服务使用经历来写的一篇文,值得看

2019-07-02

设计模式分享PPT

设计模式分享ppt,需要做分享的可以参照,一定要五十个字吗

2019-07-02

人工智能时代,一本书读懂区块链金融.zip

详细的讲解了区块链金融,比特币,大数据,以及分布式账本技术对以后经济的影响

2019-07-02

Rxjava官网中文翻译

Rxjava响应式编程框架官网的翻译版本,对于初学者来说是比较有用的

2019-07-02

mysql_to_mongodb.py

构建可空速率将mysql中数据导入到mongodb中,脚本化运行,可以直接在服务器上跑

2019-07-02

ES文件浏览器工具推荐.pdf

首次解除es查询相关的东西的时候获取到的一个文档,对新手来说有一点作用

2019-06-25

kafka监控工具

kafka监控,可以监控各个节点以及推送到节点的信息,以及信息大小

2016-06-01

ibatis jar

ibatis 2.3.4.726 java的ibatis的jar包

2014-09-13

李兴华java实战经典pdf完整版

李兴华java实战开发经典,完整版,找了好久才找到。

2014-08-28

jsp获取文件完整路径

可以获取文件完整路径,不过要求环境是在windows下的google浏览器,应为不同浏览器,不同操作系统下获取文件路径方法不同,我没有找到通用的方法,因为浏览器处于安全考虑本身就禁止访问本地中的文件系统。

2014-08-28

jsp获取文件夹路径

获取文件夹路径,不是文件路径,但是这种方法需要设置安全等级,应为浏览器内核安全设置的时候是禁止范文文件夹路径的。

2014-08-27

Gitlab密码修改流程

gitlab密码修改的流程,

2014-08-27

jsp验证码提交实现

jsp验证码生成,提交拦截,jsp验证码生成,提交拦截,jsp验证码生成,提交拦截,jsp验证码生成,提交拦截,

2014-08-23

XQuery基本使用语法

jackrabbit站内搜索技术使用的基本语言,是基于xpath语言所演化过来的一种jackrabbit对站内信息进行索引的技术。

2014-08-15

jackrabbit jar包

jackrabbit开发用jar包,jackrabbit是基于Lucene的一种站内搜索技术,它用xml文件为他的元数据,自动穿件索引,使用xpath或者xquery的查询方法。

2014-08-15

留言板静态界面

留言板静态界面是做论坛卡发心目的中间步骤,有比较高鹗参考价值

2012-11-04

Java Web开发实战经典视频列表

Java Web开发实战经典视频列表包含了web开发的主要知识点的视屏名字可以参照这个进行视屏下载

2012-11-04

图书管理系统

c语言程序设计,使用文件以及指针使用了不是很复杂的存储在txt文件中

2012-04-16

空空如也

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

TA关注的人

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