自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Collector原理解析

collect函数式编程原理解析

2022-07-20 17:22:46 629 1

原创 阻塞队列 — DelayedWorkQueue源码分析

前言线程池运行时,会不断从任务队列中获取任务,然后执行任务。如果我们想实现延时或者定时执行任务,重要一点就是任务队列会根据任务延时时间的不同进行排序,延时时间越短地就排在队列的前面,先被获取执行。队列是先进先出的数据结构,就是先进入队列的数据,先被获取。但是有一种特殊的队列叫做优先级队列,它会对插入的数据进行优先级排序,保证优先级越高的数据首先被获取,与数据的插入顺序无关。实现优先级队列高效常用的一种方式就是使用堆。关于堆的实现可以查看《堆和二叉堆的实现和特性》ScheduledThreadPoo.

2022-05-30 20:23:44 2508 1

原创 地址栏输入URL到显示页面的过程

前言从地址栏输入URL到显示页面都发生了什么?这是一道面试经常会考的面试题。那么下面我们就来探讨一下从你输入URL后到响应,都经历了哪些过程。1、DNS解析我们在用户PC中使用网页浏览器来访问外部服务器的内容,在网页浏览器的地址栏中输入外部服务器的域名。比如我们输入www.porttest.com,用户PC中的DNS客户端进程会发送一个DNS查询请求报文,其内容为域名www.porttest.com 所对应的IP地址是什么?DNS 的查询请求报文需要使用运输层的UDP协议封装成UDP用户数据报,其首

2022-03-07 15:50:24 3458

原创 DNS解析过程

1、DNSDNS(Domain Name System)是域名系统的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,用于 TCP/IP 网络。2、域名系统DNS 的作用通常我们有两种方式识别主机:通过主机名或者 IP 地址。人们喜欢便于记忆的主机名表示,而路由器则喜欢定长的、有着层次结构的 IP 地址。为了满足这些不同的偏好,我们就需要一种能够进行主机名到IP 地址转换的目录服务,域名系统作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。因此,即使不使用域名

2022-03-07 14:59:01 6050

原创 SpringBoot内置tomcat启动原理

SpringBoot内置tomcat启动原理前言不得不说SpringBoot的开发者是在为大众程序猿谋福利,把大家都惯成了懒汉,xml不配置了,连tomcat也懒的配置了,典型的一键启动系统,那么tomcat在springboot是怎么启动的呢?内置tomcat开发阶段对我们来说使用内置的tomcat是非常够用了,当然也可以使用jetty。<dependency> <groupId>org.springframework.boot</groupId>

2022-02-28 11:24:12 306

原创 Spring ApplicationContextInitializer介绍和原理

一、 ApplicationContextInitializer 介绍首先看spring官网的介绍:翻译一下:用于在spring容器刷新之前初始化Spring ConfigurableApplicationContext的回调接口。(剪短说就是在容器刷新之前调用该类的 initialize 方法。并将 ConfigurableApplicationContext 类的实例传递给该方法)通常用于需要对应用程序上下文进行编程初始化的web应用程序中。例如,根据上下文环境注册属性源或激活配置文件等。

2022-01-27 10:35:27 1175

原创 MVCC原理

事务的4个隔离级别读未提交读已提交可重复读串行化什么是脏读简单说,读了一条未提交的数据什么是不可重复读?一个事务读取了另外一个事务修改后记录 强调的是 update 和delete ,只需要锁住满足条件的记录即可什么是幻读一个事务读取了另外一个事务插入的数据,强调的是 insert ,要锁住满足条件及相近的记录。备注:幻读是因为update的操作的where是属于当前读,所以与快照读无关,从而导致了update修改的数据的版本号也被更新为了当前的版本号(可能存在低的事

2022-01-24 11:47:09 229

原创 线上问题如何排查

磁盘空间不足问题先用 df -h 从总体查看磁盘状态文件系统 容量 已用 可用 已用% 挂载点devtmpfs 1.9G 4.0K 1.9G 1% /devtmpfs 1.9G 24K 1.9G 1% /dev/shmtmpfs 1.9G 740K 1.9G 1% /runtmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup/dev/vd

2022-01-18 19:23:24 881

原创 把线程池扒个底朝天

这节分享Java线程池,接下来我们一步步把线程池扒个底朝天。引言:老三取钱有一个程序员,他的名字叫老三。老三兜里没有钱,匆匆银行业务办。这天起了一大早,银行姐姐说早安。老三一看柜台空,卡里五毛都取完。老三这天起的晚,营业窗口都排满。只好进入排队区,摸出手机等空闲。老三睡到上三杆,窗口排队都爆满。经理一看开新口,排队同志赶紧办。这天业务太火爆,柜台排队都用完。老三一看急上火,经理你说怎么办。经理挥手一笑间,这种场面已见惯。四种办法来处理,你猜我会怎么办。小小

2021-11-29 11:20:12 121

原创 Redis列表、集合、有序集合的区别和使用场景

1.1 列表列表(list)类型是用来存储多个字符串,元素从左到右组成一个有序的集合.列表中的每个字符串被称为元素(element),一个列表最多可以存储(2的32次方)-1个元素.在redis中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定所有下标的元素等.列表类型有两个特点:①列表中的元素是有序的,这就意味着可以通过索引下标获取某个元素或者某个范围内的元素列表.②列表中的元素可以是重复的.1.1.1 命令1) 插入命令(1) 从右边插入元素.  r

2021-11-24 11:52:38 2770

原创 HTTP、Socket、TCP之间的关系与区别

前言整理了下HTTP、Socket、TCP之间的关系与区别,我们经常会被问到的东西,那么什么是HTTP呢?HTTP属于老话题了,在项目中我们经常需要往服务器端发POST或者GET请求,但是对于HTTP的了解不应该只局限于此。千里之行,始于足下。越想走的远,基本原理就应该了解的透彻全面一些,仅仅停留在使用ASIHttpRequest或者AFNetWorking传个参数发个请求的程度上是不够的。通过本文你能收货哪些内容:完整HTTP请求与响应包含的必要元素HTTP不同版本之间的差别HTTP、Soc

2021-11-12 19:44:39 888

原创 HTTP Headers

一、HTTP 请求内容由于最新的http2,并没有被各大浏览器广泛使用,所以本文是基于http/1.1所编写的。同时经过检测我们也发现,chrome等浏览器也正是使用http/1.1版本的。关于http/1.1协议的详情,可查看官方文档我们打开chrome的network,点击任何一条request请求,即可发现,每个http headers都包含以下部分:Genaral,Request Headers,Response Headers,Request Payload。General(不属于he

2021-11-04 15:34:37 2285

原创 CDN工作原理及淘宝双十一图片访问实战

淘宝的图片访问,有98%的流量都走了CDN缓存。只有2%会回源到源站,节省了大量的服务器资源。但是,如果在用户访问高峰期,图片内容大批量发生变化,大量用户的访问就会穿透cdn,对源站造成巨大的压力。结合阿里淘系2020年双11的淘宝实践,给大家分享下在图片业务里,我们是如何使用CDN以及如何解决挑战和困难。————————————————————— CDN工作原理内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群

2021-11-04 10:59:21 2526

原创 Avro 入门

Avro简介Apache Avro是一个数据序列化方法。Avro提供:丰富的数据结构。紧凑、高效的二进制数据格式。容器文件,用于存储持久数据。远程过程调用(RPC)。易于集成到动态语言的特性。无论是读写数据文件,还是使用或实现RPC协议,都无需代码生成。代码生成是一个优化选项且只对静态类型语言的实现有意义。Schemaschema是一种metadata(元数据,是用于描述数据的数据),用于描述avro数据;schema通过JSON定义,下面是一个record类型的schema:

2021-09-27 14:38:05 379

原创 SpringBoot-kafka序列化使用 Avro

【需求】:生产者发送数据至 kafka 序列化使用 Avro,消费者通过 Avro 进行反序列化,并将数据通过 MyBatis 存入数据库。一、Pom【1】Apache Avro 1.8;【2】Spring Kafka 1.2;【3】Spring Boot 1.5;【4】Maven 3.5;<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x

2021-09-27 14:26:53 1042

转载 Spring中的循环依赖

前言Spring中的循环依赖一直是Spring中一个很重要的话题,一方面是因为源码中为了解决循环依赖做了很多处理,另外一方面是因为面试的时候,如果问到Spring中比较高阶的问题,那么循环依赖必定逃不掉。如果你回答得好,那么这就是你的必杀技,反正,那就是面试官的必杀技,这也是取这个标题的原因,当然,本文的目的是为了让你在之后的所有面试中能多一个必杀技,专门用来绝杀面试官!本文的核心思想就是,当面试官问:“请讲一讲Spring中的循环依赖。”的时候,我们到底该怎么回答?主要分下面几点什么是循环

2021-08-16 18:21:15 699 1

原创 String

String:字符串常量池作为最基础的引用数据类型,Java 设计者为 String 提供了字符串常量池以提高其性能,那么字符串常量池的具体原理是什么,我们带着以下三个问题,去理解字符串常量池:字符串常量池的设计意图是什么?字符串常量池在哪里?如何操作字符串常量池?字符串常量池的设计思想字符串的分配,和其他的对象分配一样,耗费高昂的时间与空间代价,作为最基础的数据类型,大量频繁的创建字符串,极大程度地影响程序的性能JVM为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化

2021-08-10 11:05:49 85

原创 Mac Docker部署SpringBoot应用

一、安装Docker环境使用 Homebrew 安装macOS 我们可以使用 Homebrew 来安装 Docker。Homebrew 的 Cask 已经支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 来进行安装:$ brew cask install docker==> Creating Caskroom at /usr/local/Caskroom==> We'll set permissions properly so we won't

2021-07-28 17:31:21 521

原创 Dubbo介绍

介绍Dubbo背景大规模服务化之前,应用可能只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过F5等硬件进行负载均衡。(1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。此时需要一个服务注册中心,动态的注册和发现服务,使服务的位置透明。并通过在消费方获取服务提供方地址列表,实现软负载均衡和Failover,降低对F5硬件负载均衡器的依赖,也能减少部分成本。(2) 当进一步发展,服务间依赖关系变得错踪复

2021-07-26 20:20:50 150

原创 Redis-哨兵原理

1、架构图2、服务器列表3、搭建主从模式①、主要配置项主服务器(上图的Node1)配置文件 redis.config 主要配置项:#配置端口port6379#以守护进程模式启动daemonize yes#pid的存放文件pidfile /var/run/redis_6379.pid#日志文件名logfile"redis_6379.log"#存放备份文件以及日志等文件的目录dir"/opt/redis/data"从服务器配置文件主要配置项基本和主服务器保持一致,需要修改端口

2021-07-26 19:02:18 148

原创 基于Zookeeper + Dubbo 搭建的项目

基于Zookeeper + Dubbo 搭建的项目项目简介此项目为自己学习Dubbo+Zookeeper,搭建的第一个项目,主要架构就是一个父项目、三个子Module:dubbo_provider、 dubbo_consumer 和 dubbo_api,三个子Module分别继承父项目。Dubbo的远程访问是基于接口的。Consumer和Provider使用同一个接口,可以实现远程访问。Provider给接口写实现,提供服务。Consumer使用接口,并通过Dubbo创建的动态代理对象,远程访问

2021-07-26 11:49:53 939 1

原创 Zookeeper vs Etcd

Zookeeper vs EtcdZookeeper 和 Etcd 都是非常优秀的分布式协调系统,zookeeper 起源于 Hadoop 生态系统,etcd 的流行是因为它是 kubernetes 的后台支撑。本文将会说明 zookeeper 和 etcd 的优缺点,以便于您根据实际需求选择更合适的分布式协调系统。Zookeeper概述zookeeper 起源于 Hadoop,后来进化为 Apache 的顶级项目。现在已经被广泛使用在 Apache 的项目中,例如 Hadoop,kafka,s

2021-06-25 19:32:47 247

原创 kafka 中 zookeeper 具体是做什么的?

kafka 中 zookeeper 具体是做什么的?zookeeper 是 kafka 不可分割的一部分,可见其重要程度,所以我们有必要了解一下 zookeeper 在 kafka 中的具体工作内容。而且,这也是面试时经常问的。zookeeper 存储了一些关于 consumer 和 broker 的信息,那么就从这两方面说明 zookeeper 的作用。1.broker状态zookeeper 记录了所有 broker 的存活状态,broker 会向 zookeeper 发送心跳请求来上报自己的

2021-06-25 18:54:23 131

原创 JavaWeb开发:jar包和war包区别和目录结构

Java开发:jar包和war包区别和目录结构,深入了解:1.jar包的介绍JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。JavaSE程序可以打包成Jar包(J其实可以理解为Java了)。JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和

2021-06-22 11:20:27 1713

原创 Filter和Interceptor的区别

Filter和Interceptor的区别Interceptor主要作用: 拦截用户请求,进行处理,比如判断用户登录情况、权限验证,只要针对Controller请求进行处理,是通过HandlerInterceptor。Interceptor分两种情况,一种是对会话的拦截,实现spring的HandlerInterceptor接口并注册到mvc的拦截队列中,其中preHandle()方法在调用Handler之前进行拦截(上图步骤3),postHandle()方法在视图渲染之前调用(上图步骤5),aft

2021-06-15 11:58:29 1083

原创 宽表和窄表概念和优缺点

宽表和窄表概念和优缺点宽表: 从字面意义上讲就是字段比较多的数据库表。通常是指业务主题相关的指标、维度、属性关联在一起的一张数据库表。由于把不同的内容都放在同一张表存储,宽表已经不符合三范式的模型设计规范,随之带来的主要坏处就是数据的大量冗余,与之相对应的好处就是查询性能的提高与便捷。这种宽表的设计广泛应用于数据挖掘模型训练前的数据准备,通过把相关字段放在同一张表中,可以大大提高数据挖掘模型训练过程中迭代计算时的效率问题。(一句话,空间换时间,便于训练迭代、减少表关联数量,修改少量数据时不需要该多张表)

2021-05-28 18:38:31 4547

原创 @RequestBody()和RequestParam()的使用

@RequestBody()和RequestParam()的使用基础知识介绍:@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody()接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。在后端的同一个接收方法里,@RequestBody()与@RequestParam()可以同时使用,@RequestBody()最多只能有一个,而@RequestParam()可以有多个。注: 一个请求

2021-05-28 17:59:47 522

原创 Kafka分区策略、ISR以及ack机制、故障处理机制、消费方式、分区分配策略

Kafka分区策略、ISR以及ack机制、故障处理机制、消费方式、分区分配策略分区原因1.分区的原因(1)方便在集群中扩展,每个partition可以通过调整以适应它所在的机器,而一个topic又可以有多个partition组成,因此整个集群就可以适应任意大小的数据了。(2)可以提高并发,因此可以以partition为单位读写2.partition的三种分区原则(1)指明partition的情况下,直接将指明的值直接作为partition的值(2)没有指明partition值单有key的值,将

2021-05-27 19:23:55 1274 3

原创 Kafka基本认识和场景

1 Kafka 基本概念Kafka 是一款基于发布与订阅的消息系统。它一般被称为“分布式提交日志”或者“分布式流平台”。1.1、消息和批次消息:Kafka 的数据单元被称为 消息。可以把消息看成是数据库里的一个“数据行”或一条“记录”。消息由 字节数组 组成,所以对于 Kafka 来说,消息里的数据没有特别的格式或含义。键:消息可以有一个可选的元数据 ,也就是 键。键也是一个 字节数组 ,与消息一样,对于 Kafka 来说也没有特殊的含义。 当消息以一种可控的方式写入不同的分区时,会用到键

2021-05-25 18:27:56 160

原创 Spring Boot整合Swagger

前言不管Spring Boot整合还是SpringMVC整合Swagger都基本类似,重点就在于配置Swagger,它的精髓所在就在于配置。1、Swagger简介目前互联网时代前后端分离已成趋势,前后端混在一起,前端或者后端无法做到“及时协商,尽早解决”,最终导致问题集中爆发。解决方案就是前后端通过API进行交互达到相对独立且松耦合。Swagger就是这样的一个API框架,Swagger支持多种语言 如:Java,PHP等,它号称是世界上最流行的API框架!2、整合前可能遇到的问题1、导入好依赖

2021-05-24 16:11:13 474 2

原创 log4j2.xml参数详解

log4j2.0以后我们通常在log4j2.xml中配置相关参数,在配置的时候我们需要理解这些参数的具体含义,下面列出了这些参数的解释。1、Logger 完成日志信息的处理<logger name="com.srd.ljzd" level="INFO" additivity="true"> <appender-ref ref="INFO" /> <appender-ref ref="WARN" /> <appender-ref ref="

2021-05-19 11:35:25 2055

原创 SpringBoot中Filter的使用和原理

​ 先把SpringBoot中filter的使用示例写出来,然后再解释下代码、说一下运行的顺序,最后讲一下filter的原理(其实就是责任链设计模式,从马士兵老师那里偷来的。。。)​ 要想使用filter,需要写一个方法继承Filter类,我们写如下两个自己的Filter类,首先是FirstFilter类,其中@Order里边的数字越小代表越先被该Filter过滤,@WebFilter代表这是个Filter类并把这个类注入到容器中:package com.example.executor_test.fi

2021-05-18 16:09:52 620 2

原创 Mybatis的执行流程

Mybatis的执行流程

2021-05-18 11:53:30 94

原创 Hystrix快速入门

Hystrix快速入门对大部分电商和快递公司来说,每年年底(Q4季度)由于双11等大促活动的存在,将面对大量的用户流量,尤其是属于大促的那几天,无论是用户的商品订单还是物流订单,都将是平时的3倍以上。对于技术人员来说,提前落地相应的服务保障体系,并进行相应的压测和演习,是题中应有之意。整个保障体系的实现涉及的环节很多,本文将选取奈飞Netflix公司的Hystrix"豪猪"框架(其基于Java语言和最近比较流行RxJava流式框架),针对分布式应用的服务保障问题进行探讨,之后将按照基本知识、应用实践、配置

2021-05-17 15:57:30 190

原创 对MySQL索引的理解

一、索引是什么?索引是帮助MySQL高效获取数据的数据结构。二、索引能干什么?索引非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。索引能够轻易将查询性能提高好几个数量级,总的来说就是可以明显的提高查询效率。三、索引的分类?1、从存储结构上来划分:BTree索引(B-Tree或B+Tree索引),Hash索引,full-index全文索引,R-Tree索引。这里所描述的是索引存储时保存的形式,2、从应用层次来分:普通索引,唯一索引,复合索引3、根据中数据的物理顺序与键值的逻

2021-04-13 14:30:19 80

原创 图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)

图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻路(走迷宫),搜索引擎,爬虫等,也频繁出现在 leetcode,高频面试题中。前言深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻

2021-04-09 11:04:14 20611 4

原创 Cookie和Session

Cookie是什么?从它的词语本身含义来看:Cookie:n. 饼干;小甜点N-COUNT A cookie is a piece of computer software which enables a website you have visited to recognize you if you visit it again. 再次访问某一网站时,能令网站识别访问人的计算机软件。Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息。如何识别特定的客户呢?cookie就可以做到。

2021-03-25 10:44:43 83

原创 Spring Boot:处理跨域

一、跨域背景1.1 何为跨域?Url的一般格式:协议 + 域名(子域名 + 主域名) + 端口号 + 资源地址示例:https://www.dustyblog.cn:8080/say/Hello 是由https + www + dustyblog.cn + 8080 + say/Hello组成。只要协议,子域名,主域名,端口号这四项组成部分中有一项不同,就可以认为是不同的域,不同的域之间互相访问资源,就被称之为跨域。1.2 一次正常的请求Controller层代码:@RequestMa

2021-03-24 15:00:39 113

原创 URL Encoding

什么是URL Encoding​ URL encoding是Uniform Resource Identifier(URI)规范文档中对特殊字符编码制定的规则。本质是把一个字符转为​ %加上UTF-8编码对应的16进制数字。故又称之为Percent-encoding。RFC 3986把字符分为以下三类:18个保留字符。: / ? # [ ] @ ! $ & ’ ( ) * + , ; =66个非保留字符。a-z A-Z 0-9 - _ . ~其它字符。 比如”好”等中文字符为什么要

2021-03-15 18:07:01 1320

原创 搞懂Docker和K8s

2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司。这家公司主要提供基于PaaS的云计算技术服务。具体来说,是和LXC有关的容器技术。LXC,就是Linux容器虚拟技术(Linux container)后来,dotCloud公司将自己的容器技术进行了简化和标准化,并命名为——Docker。Docker技术诞生之后,并没有引起行业的关注。而dotCloud公司,作为一家小型创业企业,在激烈的竞争之下,也步履维艰。正当他们快要坚持不下去的时候,脑子里蹦出了“开源

2021-03-12 19:37:12 356

空空如也

空空如也

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

TA关注的人

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