自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不要让任何事情成为你不去学习的理由。

关注同名gh不走丢,获取最新文章!

  • 博客(96)
  • 资源 (3)
  • 收藏
  • 关注

原创 数据库事务和分布式锁并发问题

锁内事务和事务内锁有什么区别?

2024-03-08 17:30:05 139

原创 网页打开慢,这锅该谁背?

工作中扯皮说不可避免且非常常见的事情. 开发与产品、开发和测试、前端和后端都会产生扯皮现象. 今天要聊的一个问题就是前后端之间的扯皮问题.网页打开太慢这个锅谁背?做开发不能无凭据地胡乱甩锅, 我们要用数据说话, 具体看哪个参数呢,就是我们今天介绍的 TTFB.TTFBTime To First Byte 就是后台响应的第一个字节到达浏览器的时间, 说白了这个值比较大的话就说明是后端接口的问题,比如达到了几秒甚至十几秒; 如果比较正常的话通常不会超过一秒,一般都是 ms 级别,当然数据较大

2024-03-06 16:30:00 172

原创 J.U.C——CyclicBarrier 实现原理

1. 通过 generation 来实现循环使用,每一轮结束后,都会重置 generation;2. CyclicBarrier 底层和 CountDownLatch 一样是基于 AQS 实现的;3. CyclicBarrier 不需要代码手动移除(trip)屏障,线程数量达到(count==parties)自动触发。

2024-02-20 14:42:00 86

原创 J.U.C——CountDownLatch 的实现原理

1. 调用await 方法的线程处于 WATING 状态,虽然源码中说是 "block";2. 等待线程和任务线程通过核心方法 wait 和 countDown 来协调工作,完成特定场景需求。

2024-02-20 11:12:20 72

原创 Servlet 预览pdf

上篇文章介绍了图片的预览,这篇我们介绍下 pdf 文件的预览,pdf 预览在实际开发中用的还是比较多的,比如很多文件协议、合同都是用pdf 格式,协议预览就需要我们做 pdf 预览了。大家注意看右上角,下载按钮也有了,这个是浏览器的功劳,所以一旦我们做了文件预览功能,下载功能就自动生成了,是不是特别棒~

2024-01-17 15:21:56 687

原创 RocketMQ 限流参数

1. pullBatchSize 在PushConsumer 模式中默认值是32,注意是每一次从队列拉取的最大数据,针对的是单个队列,所以必须考虑到RocketMQ一个 topic 会创建多个 queue 的特性。2. 根据经验,我们会认为pullBatchSize 调大点会更好,减少拉取次数处理效率更高,但是有时我们得根据实际情况来做取舍。

2024-01-17 11:21:31 897

原创 HashMap 死循环

1. 死循环的问题根本原因是多个线程操作(准确地说是修改)同一条链表,导致链表循环,其他线程读取的时候就会发生死循环。2. 虽然 1.8 扩容时链表改成了尾插法,但是仍然无法保证多线程数据安全,毕竟 HashMap 本身就不是线程安全的。

2023-12-25 15:59:59 400

原创 Tomcat 源码之StandardWrapperValve

invoke 中,调用 filterChain#filter,所有的filter 走完,调用servlet#service 方法,整个调用过程的任何exception 都会被捕捉,最后由StandardHostValve重定向到 ApplicationDispatcher(implements RequestDispatcher)我们知道一个请求过来 tomcat 处理的核心的代码在。

2023-12-07 17:32:28 920

原创 从Springboot 看 Tomcat 启动

所以这里可以看出来,启动 server 就是启动 service ,启动 service 里又启动了 engine ,启动 engine 就是启动每个子容器,子容器再递归启动子容器的子容器。就这样engine 启动了 host , host 启动 context ,context 启动 wrapper,这些容器都有一个 startInternal 方法,用来做容器自身的准备以及启动子容器。搞懂每个 startInternal 方法里面做的事情,才能真正理解 tomcat 启动原理!

2023-12-07 17:28:58 989

原创 Tomcat 整体架构与核心接口

Tomcat 源码博大精深,涉及的知识点、设计模式很多,读tomcat 源码,能大幅度提升内功

2023-12-07 17:22:34 394

原创 内网穿透工具cpolar

内网穿透就是让你不需要购买公网IP 的情况下,能够将你内网的东西暴露到外网中。

2023-04-27 17:57:42 295 1

原创 Feign 调用原理

之前的文章已经提到了openFeign 调用,今天就来扒一扒,具体是如何调用的...

2023-04-21 15:55:48 170

原创 SpringCloud 项目如何方便 maven 打包以及本地开发

springcloud-alibaba ,使用 nacos 做配置中心,maven 作为构建工具。为了防止 test 、prod 环境配置文件覆盖问题,使用 mvn -P 命令。resources目录中, test 目录下的 bootstrap.yml 指向测试的 nacos,prod 目录下bootstrap.yml 配置的是生产的 nacos。这样就可以根据用户选择test/prod 来打对应的包即可:选择 test 环境时, 就会将 test/bootstrap.yml 打包进去。

2023-04-19 15:05:26 740

原创 Maven 私服的包一直无法下载的同学看过来!!

私服无法下载 snapshot 包?一定是姿势不对!!

2023-02-22 16:42:48 2178

原创 Hello 2023

年初到年尾,感觉刚写完,就要迎接2023了。今天是2022最后一天,本来是元旦假期的第一天,奈何要来公司加班,抽个时间来回顾下 2022 吧。

2022-12-31 11:03:33 753

原创 记最近工作中 Mybatis sql 的使用技巧

mybatis sql 小技巧,了解下~

2022-12-08 10:27:44 238

原创 String 之 substring 方法的前世今生

jdk 1.6 的 substring 内存泄露风险你知道吗?

2022-10-10 11:01:15 147

原创 Gitlab + Jenkins 自动触发CI/CD

Gitlab + Jenkins 这一套工具相信大家用的都比较多, 有些场景我们需要自动化构建,比如基础工具包,这套工具也是支持的,只需要做以下简单配置即可,下面跟我操作。

2022-09-07 16:44:57 782

原创 httpClient 高级用法——retryHandler

RPC 框架层出不穷,但是说起鼻祖那一定是来自于 apache 的 httpClient。RPC 框架的一个重要特征就是要解决因网络失败导致超时问题,换句话说就是要支持重试机制。httpClient 也不例外。httpClient 是通过 retryHandler 来实现重试的。当请求过程出现异常时,你可以选择是否自动重试。下面就看下具体使用步骤:一. 定义 retryHandlerHttpRequestRetryHandler myRetryHandler = new HttpReq

2022-05-19 11:46:35 1242

原创 SpringCloud 远程调用——OpenFeign

1. 导入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>2. 开启 openFeign配置类或者启动类上添加注解,自动扫描已经定义好

2022-04-25 10:55:27 994

原创 Lombok 虽好,使用时需谨慎

Lomboklombok 相信大家都不陌生了,一句话带过去:就是一系列注解在编译的时候给大家生产一些常用的基础代码,比如 构造方法、get/set、以及 builder 方式提供的链式编程。今天讨论的就是使用 @Builder 时带来的意想不到的坑。@Builder 的坑@Builder@Datapublic class User{ private Long id; private String username;}通过该注解,你后续可以采用链式编程,比如:

2022-03-25 16:28:02 373

原创 VMware 导入 CentOS 7

用了很久的 Mac ,换工作公司给配了 windows 台式机,刚好最近工作需要用到 linux ,就打算安装个 VMware ,然后导入以前全量克隆出来 CentOS 7 虚拟机。本以为很多东西已经配置好了,以为导入后就可以正常使用,实际却不然,也弄了小半天,这里记录下坑吧。一、宿主机 ping 不通虚拟机原因是以前配置的 ip 地址和公司机器 ip 不在一个网段, 修改后可以 ping 通!1. 配置虚拟网络 vmnet8配置虚拟机的网关:2. 配置 ens33.

2022-03-23 17:02:53 1087

原创 Redis 实现分布式锁

什么是分布式锁已经在之前的文章介绍过了,不明白的同学请回头阅读。这篇文章开始介绍分布式锁的具体实现。实现方式有很多,今天介绍如何通过 redis 来实现。今天介绍最基本的通过 setnx命令来实现,当然还有基于 redis 开源的第三方实现,比如 redisson.SETNXset if not exist,如果 key 不存在,设置指定的值并返回 1,否则不做任何操作返回 0,整个过程是原子操作。通过该命令来实现锁时需要考虑多线程并发带来的异常情况,比如上一次程序中断导致锁没有释放、死

2022-03-23 14:04:30 1268

原创 classpath 到底指什么?

classpathThe CLASSPATH variable is one way to tell applications, including the JDK tools, where to look for user classes.JavaSE 中定义 calsspath 是一个环境变量,用来告诉你的应用到哪里去找你的 class 文件。JavaEEeclipse 使用的 workspace 中找到 .classpath 文件使用文本编辑器查看:classpath.

2022-03-17 14:46:32 726

原创 select、poll、epoll 区别在哪儿?

select 、poll、epoll 都能实现多路复用, 但是它们之间有什么区别呢?

2022-03-14 18:03:02 1228

原创 再谈 NIO

之前的文章已经提到了 IO 模型之一的 NIO, 今天打算从 “阻塞”字面 以及java 代码层面再深一步聊一聊 NIO.《到底什么是 IO》https://mp.weixin.qq.com/s/OkIajg8aDlkLtsE81NP5jQAll is blocking从严格意义上说,所有的请求都是阻塞的,原因是所有的请求发出去之后都会等待,只是等待时长多少而已,这点希望大家明白。阻塞与非阻塞实际上就是阻塞的时间长短不同。Blocking vs Non-Blocking两者不同之处..

2022-03-14 11:31:46 691

原创 Bean 的生命周期之初始化

之前的文章《Spring IOC 中循环依赖,两幅图搞定》中介绍了 bean 的创建过程:1. 创建 createBean2. populateBean3. initializeBean第一步,通过反射拿到构造方法创建 bean; 第二步,填充 bean 的属性,如果发现被依赖的属性不存在则会首先创建被依赖属性,然后填充,里面涉及的循环依赖的问题已经讲过;第三步初始化是我们今天来聊的话题。先看代码: protected Object initializeBean(final Str

2022-03-08 15:51:56 1124

原创 Netty 源码之 channel 注册和 eventLoopGoup

一、NioServerSocketChannel 注册到 bossGroup (evenLoop)二、bossEventLoop (使用selector)轮询一旦有客户端连接,执行 read 方法:继续跟进 unsafe.read 方法:再进去, read 方法并不是真正的系统调用 read, 而是accetp 连接!!!!获取连接后,pipeline (channelHandler链)开始工作:首先就是ServerBootstrapAc...

2022-03-04 16:45:33 358

原创 Reactor 和 Proactor 到底是什么玩意

网络编程中出了 IO 模型之外,另一个被经常提到的就是 Reactor 模型和 Proactor 模型, 其实这两个模型和 IO 模型有着重要的关系,看完本文你就知道了.如果你对 IO 模型还不清楚,请先移步下面的文章后再回头来看本文.《到底什么是IO》https://mp.weixin.qq.com/s/OkIajg8aDlkLtsE81NP5jQ在网络编程中,服务器设计的好坏直接影响到能支持的最大并发数,通常会考虑两种方式,一种是通过 线程的方式,另一种就是通过事件的方式.单线程网络通.

2022-03-03 16:34:44 629

原创 农村真的民风淳朴吗?

农村真的民风淳朴吗?

2022-02-24 11:06:52 324

原创 深度解析 intern 方法

String 类的 intern 方法你真的了解吗?

2022-02-23 18:51:15 1301 2

原创 到底什么是IO

IO 分为本地IO和网络IOIO 分类BIO/NIO/AIO

2022-02-18 11:08:24 6919

原创 分布式问题解决模式

什么是分布式系统?分布式系统会带来什么问题?如何解决?带着这些问题,我们来聊一聊。

2022-01-28 14:42:05 3596

原创 工作流 activiti

工作流到底是个什么鬼?如何使用?

2022-01-27 13:43:20 663

原创 Redis 的分区

为什么要分区分区是指把不同的 key 分发到不同的 redis 实例上,每个 redis 实例只存储 所有 key 的一个子集。分区的好处是能够支持更大的数据量,多个 redis 实例能够充分利用多核的优势。分区后带来的问题1. 同时操作多个 key 会比较复杂;2. redis 事务不再支持:跨 redis 实例的两个操作无法保证事务性。3. 伸缩节点比较复杂:redis cluster 在伸缩节点时可以自动 rebalance key ,但是 客户端和代理服务分区的方式就不能

2022-01-25 17:02:54 1387

原创 分布式一致性协议——Gossip

关于分布式一致性问题我已经在之前《分布式一致性协议——Raft》的谈到,还不清楚的朋友可以回头看一下。这篇文章将介绍另一种分布式一致性协议——Gossip。问题思考下,大规模集群时,如果还是采用 raft 协议,会不会有问题?根据上篇文章,我们知道 leader 会广播到 follower ,集群规模较大,势必会造成网络拥挤、网络超时等问题,无论从可用性还是性能角度考虑,都会存在问题。因为大规模集群需要考虑一下问题:1. 集群规模大,可靠性降低,即使出现部分网络问题,数据也应该能最终到达

2022-01-24 17:55:57 2730

原创 一致性 hash

分布式系统中,多个节点间实现请求的负载均衡,如果部分实例由于一些特殊的原因宕机或者需要扩容,这个时候就涉及到部分请求重新分发的问题。为了最小化请求重新分发,引入了一致性 hash 算法。先看下传统的 hash 算法解决请求分发问题的过程。hashhash 算法大家应该很熟悉了,就是将不定长的数据经过计算后输出定长的结果。如果在分布式系统中使用 传统hash 方法来分发请求,server = hash(key)%n这会带来两个问题: 一旦服务器节点数 n 发...

2022-01-24 11:00:55 478

原创 分布式一致性协议——Raft

面试大厂高薪职位,必问!!!

2022-01-21 16:13:45 1767

原创 我们这代人追求的是什么?

80后90后的人,是非常累的两代人,我说的累不只是生理累,还有心累。马不停蹄的追我们,到底在追什么?

2022-01-12 17:02:28 116

原创 RocketMQ 基础与高级

RocketMQ 基础与高级用法看过来,哪点没说明白的欢迎你指出来!!

2022-01-11 10:50:49 559

建模教程——uml

uml建模教程,很好,对于初学者,是个不错的东西

2013-06-14

java面试必备

java程序员工作必备,你一定会用到的

2013-06-14

java学习步骤

如何学习java,java开发之路

2013-06-14

空空如也

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

TA关注的人

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