自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 双12压测引出的线上Full GC排查

这个Full GC问题是去年双12压测的时候触发的,中间排查的过程和踩的坑给大家借鉴一下。

2023-04-11 14:43:27 382

原创 秀出新天际的SpringBoot笔记,让开发像搭积木一样简单

Java (面向对象编程语言)经过30多年的发展,产生了非常多的优秀框架。Spring (为解决企业应用程序开发的复杂性而创建的框架)曾是最受欢迎的Java框架之一, 但随着Node、Ruby、Groovy、PHP等脚本语言的蓬勃发展,使用Spring开发应用就显得繁琐了,因为它使用了大量的XML配置文件,配置繁琐,整合不易,开发和部署效率低下。这时急切需要一-种新的能解决这些问题的快速开发框架,于是Pivotal Software公司在2013开始了Spring Boot的研发。

2023-04-11 14:36:12 335

原创 一次简单的Java服务性能优化,实现压测 QPS 翻倍

前段时间我们的服务遇到了性能瓶颈,由于前期需求太急没有注意这方面的优化,到了要还技术债的时候就非常痛苦了。在很低的 QPS 压力下服务器 load 就能达到 10-20,CPU 使用率 60% 以上,而且在每次流量峰值时接口都会大量报错,虽然使用了服务熔断框架 Hystrix,但熔断后服务却迟迟不能恢复。每次变更上线更是提心吊胆,担心会成为压死骆驼的最后一根稻草,导致服务雪崩。在需求终于缓下来后,leader 给我们定下目标,让我们在两周内把服务性能问题彻底解决。近两周的排查和梳理中,发现并解决了多个性能瓶

2023-04-11 14:20:45 550

原创 想拿到10k-40k的offer,这些技能必不可少,为程序员的你了解吗

关于面试刷题也是有方法可言的,建议最好是按照专题来进行,然后由基础到高级,由浅入深来,效果会更好。上述资料已整理作为一名程序员,阶段性的学习是必不可少的,而且需要保持一定的持续性,这次在这个阶段内,我对一些重点的知识点进行了系统的复习,一方面巩固了自己的基础,另一方面也提升了自己的知识广度和深度。

2023-04-03 14:10:46 251

原创 又是一季金三银四,Spring之AOP知识要点总结

在Spring框架中,AOP(面向切面编程)是一个重要的组件,它提供了一种有效的方法来解决横切关注点(cross-cutting concerns)的问题,例如日志记录、安全性、事务处理等。AOP的实现依赖于三个关键的概念:切点(pointcut)、通知(advice)和切点表达式(pointcut expression)。在上述代码中,@Pointcut注解用于声明一个切点,这个切点指定了匹配所有com.example.service包中任意类的任意方法。

2023-04-03 13:58:39 173

原创 ES和MongoDB:一次别开生面的比较

综上所述,ES和MongoDB都有着自己的优势和劣势,在具体的场景下需要进行选择和使用。如果需要进行全文检索和聚合分析,可以选择ES;如果需要进行Web应用程序和大规模数据存储和查询,可以选择MongoDB。如果需要结合使用,需要考虑其生态环境和支持度。无论选择哪种方案,都需要根据具体的需求进行综合考虑。

2023-04-03 13:55:37 8919 2

原创 面试扫盲篇:String、StringBuffer、StringBuilder的区别

String类是不可变的,每次对String对象进行修改都会创建一个新的String对象,因此在需要对字符串进行大量修改的场景下,使用String类会产生很多的开销。StringBuffer和StringBuilder类是可变的,可以对其进行修改,而不会创建新的对象。StringBuffer类是线程安全的,而StringBuilder类不是线程安全的。在单线程环境下,StringBuilder类的性能比StringBuffer类更高。

2023-04-03 13:49:13 220

原创 高速摸鱼,Guava中这些Map的骚操作,让我的代码量减少了50%

Guava的MapMaker类允许您创建具有各种自定义选项的Map。例如,您可以设置Map的大小,设置并发级别,启用弱引用等等。以下是一个示例代码,演示了如何使用MapMaker创建一个具有最大值的Map,一旦超过这个最大值,就会删除最旧的条目。在上面的代码中,我们使用maximumSize()方法设置Map的最大大小为1000,并使用expireAfterWrite()方法设置Map中每个条目的过期时间为10分钟。一旦超过最大大小,MapMaker将自动删除最旧的条目。使用BiMap进行双向映射。

2023-03-30 14:32:26 212

原创 Linux 的 TCP 连接数量最大不能超过 65535?

在使用 TCP/IP 协议时,会遇到一个经典的问题:TCP 连接数量最大不能超过 65535。这是因为 TCP 协议头中的端口号是 16 位的,因此最大只能表示 65535 个端口号。那么,服务器又是如何应对百万千万的并发连接的呢?

2023-03-30 14:29:32 1406

原创 扫盲篇:Java中为啥一个 main 方法就能启动项目?

在了解Java中为什么一个main方法就能启动项目之前,我们需要了解Java程序的执行流程。在Java程序执行过程中,JVM(Java虚拟机)首先加载Java字节码文件,然后解释字节码指令,并在解释过程中执行Java程序中的方法和语句。当JVM启动Java应用程序时,会寻找包含main方法的类,并执行该方法。因此,main方法就是Java程序的入口方法,也是Java应用程序的启动方法。Java程序入口是指程序的起点,也就是程序的入口方法。在Java程序中,main方法就是程序的入口方法。

2023-03-30 14:24:53 261

原创 为什么 MySQL 不推荐使用 join?

在MySQL中,JOIN语句用于将两个或多个表中的数据连接起来,从而实现关联查询。JOIN语句通常用于查询包含相关数据的表,例如,查询一个人的所有订单或者查询一个订单中的所有产品。MySQL支持多种JOIN类型,包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN。在这些JOIN类型中,INNER JOIN是最常用的类型。它返回两个表中匹配的行,而LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN则返回不同类型的行。

2023-03-29 15:41:51 351

原创 超通俗易懂,Kafka入门级学习笔记,看完就明白了

身为运维工程师,我们对Kafka耳熟能详,但也仅仅如此。还有很大一批人不知道Kafka是做什么的,也不知道Kafka的原理和配置,更不用说Kafka的高级应用了。我们学习Kafka不仅是因为它是运维必备的知识,更因为Kafka也是面试中的“常客”,,学习Kafka是当务之急。今天不讲晦涩难懂的知识,仅仅让大家用几分钟就能快速了解Kafka,超通俗易懂的手册,新人也完全跟得上。

2023-03-29 15:35:45 188

原创 Dynamic-Tp: 让你的SpringBoot项目拥有更高效的线程池管理

Dynamic-Tp是一个开源的Java项目,它提供了一种动态线程池的解决方案。该项目的目标是提供一种更高效、更灵活的线程池解决方案,以满足多线程编程中的实际需求。动态调整线程池大小:Dynamic-Tp可以根据当前负载情况动态调整线程池的大小,从而保证程序的高效性和稳定性。任务调度和优先级管理:Dynamic-Tp支持任务调度和优先级管理,可以根据任务类型和重要程度自动调整任务的执行优先级。任务队列管理。

2023-03-29 15:25:05 645

原创 凭借左程云(左神)的这份 “程序员代码面试指南”我入职了字节

看玩左神这份书后,醍醐灌顶,瞬间明白了许多之前没学明白的东西,最后成功面试字节。希望看到这篇文章的小伙伴们可以早日找到满意的工作,跳槽到心仪的公司。

2023-03-29 15:23:24 732

原创 ULID vs UUID:为什么ULID更适合在分布式系统中使用?

ULID(Universally Unique Lexicographically Sortable Identifier)是一种可排序、唯一的标识符,由Alizain Feerasta在2016年提出,它结合了时间戳和随机数生成器来生成一个32位的标识符,适用于分布式系统中标识数据实体和事件等场景。其中,Timestamp(时间戳)和Randomness(随机数)共占16个字符,Unique Identifier(唯一标识符)占16个字符。

2023-03-29 15:10:16 474

原创 阿里巴巴为什么不建议直接使用@Async注解?

Async 注解是 Java 8 中的一个注解,用于标识一个方法是异步执行的。当一个方法被标记为 Async 时,该方法将在一个新的线程中执行,并且可以立即返回一个 CompletableFuture 对象。使用 CompletableFuture 可以更轻松地管理异步计算的结果。// 异步执行一些操作 }在上面的代码中,doSomethingAsync() 方法被标记为 Async,这意味着该方法将在一个新的线程中异步执行,同时返回一个 CompletableFuture 对象。

2023-03-29 14:51:18 416

原创 我把Java基础编程及思维导图整理的超级详细,小白都能看懂

变量类型 变量名 = 变量值;变量类型 变量名;变量名 = 变量值;

2023-03-28 15:13:24 305

原创 京东大佬细说:Nginx反向代理时保持长连接,看完直呼“学到了“

nginx反向代理,如何通过配置支持从client到server的长连接?如何避免nginx线程池内线程数反复震荡导致性能不稳定的问题?深入了解nginx,get到nginx的一些性能优化方向。除了了解如何保持长连接,也通过本案例学习到开源中间件的一些常用定位思路和优化方法。

2023-03-28 15:07:30 987

原创 天天说熟练使用各种Spring框架,Spring容器使用流程你会吗?

Spring容器的API有 BeanFactory 和 ApplicationContext 两大类,他们都是顶级接口。其中ApplicationContext 是 BeanFactory 的子接口。对于两者的说明请参考面试题讲解Spring容器部分。我们主要使用 ApplicationContext 应用上下文接口。以下是本篇文章正文内容。

2023-03-28 14:55:45 111

原创 数据结构之简单的数组

百度百科是这么解释的:数据结构(data structure)是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。其实我们总结一下的话,那真的太简单的,存在内存的,而且是用来存数据的,它就可以理解为数据结构。

2023-03-28 14:44:25 125

原创 再见ChatGPT,又一值得国内程序员体验的AI生产力工具问世

工具永远只是工具,我们要做的就是善于利用工具,而不是害怕工具,很多人担心 AI 会不会替代程序员的工作,与其整天担心害怕,不如好好利用工具充分的发挥自己的价值。

2023-03-27 16:14:08 4588

原创 这份Java面试八股文让1011人成功进入大厂,堪称2023最强

2023金三临近末尾,银四即将来临,很多同学还在问我Java面试八股文有必要背吗?很有必要。你可以讨厌这种模式,但你一定要去背,因为不背你就进不了大厂。国内的互联网面试,恐怕是现存的、最接近科举考试的制度。而且,我国的八股文确实是独树一帜。以美国为例,北美工程师面试比较重视算法(Coding),近几年也会加入Design轮(系统设计和面向对象设计OOD)和BQ轮(Behavioral question,行为面试问题)。那么为什么国内面试不采取这样的考察方式呢?

2023-03-27 16:06:39 163

原创 Spring 源码第一篇开整!配置文件是怎么加载的?

resolveURL 方法表示返回资源的 URL,返回的时候优先用 Class.getResource 加载,然后才会用 ClassLoader.getResource 加载,关于 Class.getResource 和 ClassLoader.getResource 的区别,又能写一篇文章出来,我这里就大概说下,Class.getResource 最终还是会调用 ClassLoader.getResource,只不过 Class.getResource 会先对路径进行处理。

2023-03-27 15:53:58 76

原创 「云原生」Redis on k8s 编排部署讲解与实战操作

集群模式可以说是sentinel+主从模式的结合体,通过cluster可以实现主从和master重选功能,所以如果配置两个副本三个分片的话,就需要六个Redis实例。Redis有三种集群模式:主从模式,Sentinel(哨兵)模式,Cluster模式,这三种模式环境编排部署都会在本文章介绍与实战操作。主从模式的弊端就是不具备高可用性,当master挂掉以后,Redis将不能再对外提供写入操作,因此sentinel应运而生。这里也重新构建镜像了,有不懂构建镜像的小伙伴可以在评论下方留言。

2023-03-27 15:53:26 203

原创 分布式存储系统 Ceph 介绍与环境部署

Ceph是当前非常流行的开源分布式存储系统,具有高扩展性、高性能、高可靠性等优点,同时提供块存储服务(rbd)、对象存储服务(rgw)以及文件系统存储服务(cephfs),Ceph在存储的时候充分利用存储节点的计算能力,在存储每一个数据时都会通过计算得出该数据的位置,尽量的分布均衡。Ceph 文件系统(CephFS),是建立在 Ceph 分布式对象存储的顶部, CephFS提供了最先进的、多用途、高度可用且高性能的文件存储在各种场景应用,包括共享home目录、FTP和NFS 共享存储等等。

2023-03-08 14:03:06 1658

原创 【云原生】k8s 一键部署(ansible)

一、概述前面我写了关于k8s环境部署的几篇文章,k8s部署还是比较麻烦的,所以是有必要考虑一键部署的方案,这里借助ansible playbook来实现k8s环境的一键部署,实现快速部署的目的。节点信息k8s 架构图:基于ansible部署k8s流程图:二、Ansible 部署1)开启记录日志配置文件:/etc/ansible/ansible.cfg2)去掉第一次连接ssh ask确认3)配置hosts配置文件:/etc/ansible/hosts测试连通性。

2023-03-08 13:40:11 1467

原创 微服务网关实战:网关加几个配置,一个分布式限流就做好了?

好了,今天的文章就是以上这些内容了,相关代码在这里,本篇主要的重点是网关限流的讲解,下一篇就要是第五讲了,将会献上本系列的重头戏:Nacos 动态配置网关路由。通过我在网上博客的搜索,这块的内容讲解可以说是少之又少,相信一定不会让大家失望。

2023-03-07 16:46:17 389

原创 SpringCloud微服务架构实战:微服务治理

但是到每个微服务的控制台上去查看日志是很不方便的,特别是微服务,不仅使用Docker发布,并且还分布在很多不同的服务器上,所以这里将使用一个日志分析平台,将所有微服务的日志收集起来,进行集中管理,并且提供统一的管理平台进行查询和分析。同时,结合日志分析平台的使用,对所有运行的微服务应用进行全面而有效的治理。经上述配置之后,如果服务中有请求发生,那么就可以在Zipkin的控制台中看到相关服务的调用记录,如调用过程中涉及的方法、服务之间的依赖关系等,如图5-11、图5-12和图5-13所示。

2023-03-07 16:22:32 479

原创 「Java面试」工作两年这题不会?Redis哨兵机制和集群有什么区别

遇到这类的问题,要学会用结构化的思维去整理自己的思路然后再根据提炼的结构去回答,既能够表达清晰,又有逻辑性。!!

2023-03-07 15:52:14 106

原创 全新问世!阿里内藏版的SpringBoot 2.5实战笔记,全面覆盖新特性

学习一门技术最好的方式就是理论 + 实践,学习网理论基础,直接上 Demo ,跑通 Demo ,在探究原理。今天给大家带来的这份阿里架构师亲笔的 SpringBoot 2.5 实战笔记;笔记全面覆盖了 Spring Boot 2.5 新特性、自动化配置原理、如何开发 REST API、 实战 MySQL 数据库、Redis 高并发缓存、MongoDB 数据库、MQ 消息队列、安全机制、 性能监控、高级面试题等热门知识点。Spring Boot 2.5 实战 – 应用程序性能监控Spring Boot 实战

2023-03-07 15:01:34 167

原创 「Java面试」看完高手的回答原来这么简单!Redis主从复制原理

这个问题还是有一定的深度,平时在工作中很少会涉及到这方面的内容。从这个问题的考察意图来看,很明显是考察求职者对于Redis底层原理的理解程度。另外,目标公司可能需要涉及到Redis中间件的日常运维。同时,面试官也是通过技术原理来达到筛选高级或者资深Java开发的目的。Redis主从复制,是指在Redis集群里面,Master节点和Slave节点数据同步的一种机制。简单来说就是把一台Redis服务器的数据,复制到其他Redis服务器中。其中负责复制数据的来源称为master,被动接收数据并同步的节点称为sla

2023-03-07 14:34:49 83

原创 「Java面试」Integer和int的区别,Java为什么要设计封装类?

这是一个典型的Java基础问题,本质上来说,这个问题是考察求职者对于面向对象的理解程度。也是在考察求职者的基本功,越是简单常见的东西,就越能体现求职者的基础扎实程度。这类问题一般是考察1~3年开发经验的同学。在回答这个问题的时候,尽量从封装类型的特性和功能全方位的去回答。Integer是基本数据类型int的封装类。在Java里面,有八种基本数据类型,他们都有一一对应的封装类型。基本类型和封装类型的区别有很多,比如要是真正列数出来,还可以挖掘更多的差异点。在Java里面,之所以要对基础类型设计一个对应的封装类

2023-03-07 14:31:46 169

原创 JDK19新特性使用详解

由于虚拟线程的功能还处于预览阶段,创建协程的时候无法自定义执行器(准确来说是运载线程),目前所有虚拟线程都是交由一个内置的全局ForkJoinPool实例执行,实现方式上和JDK8中新增的并行流比较接近。另外,目前来看虚拟线程和原来的JUC类库是亲和的,可以把虚拟线程替换原来JUC类库中的Thread实例来尝试使用(在生产应用建议等该功能正式发布)虚拟线程,就是轻量级线程,也就是俗称的协程,虚拟线程的资源分配和调度由VM实现,与平台线程(platform thread)有很大的不同。

2023-03-04 15:41:31 308

原创 Redis这个内存回收,确实有点牛逼

Redis 本身是一个典型的 key-value 内存存储数据库,因此所有的 key、value 都保存在之前学习过的 Dict 结构中。noeviction:默认策略,当内存达到设置的最大值时,所有申请内存的操作都会报错(如set,lpush等),只读操作如get命令可以正常执行;惰性删除:顾明思议并不是在 TTL 到期后就立刻删除,而是在访问一个 key 的时候,检查该 key 的存活时间,如果已经过期才执行删除。周期删除:顾明思议是通过一个定时任务,周期性的抽样部分过期的 key,然后执行删除。

2023-03-04 15:29:02 66

原创 一次 Netty 不健壮导致的无限重连分析

由于 OOM 导致不健壮的 Netty 一系列诡异的行为,这次的问题分析会比上次那个更有意思一点。(备注:本文 Netty 版本是上古时代的 3.7.0.Final)

2023-03-04 15:19:35 142

原创 5分钟实现用docker搭建Redis集群模式和哨兵模式

Docker Compose 可以理解为将多个容器运行的方式和配置固化下来!就拿最简单的例子来说吧,如果我们要为我们的应用容器准备一个 MySQL 容器和一个 Redis 容器,那么在每次启动时,我们先要将 MySQL 容器和 Redis 容器启动起来,再将应用容器运行起来。这其中还不要忘了在创建应用容器时将容器网络连接到 MySQL 容器和 Redis 容器上,以便应用连接上它们并进行数据交换。这还不够,如果我们还对容器进行了各种配置,我们最好还得将容器创建和配置的命令保存下来,以便下次可以直接使用。

2023-03-04 15:00:46 185

原创 SpringBoot2.x系列教程47:SpringBoot中整合测试详细实现步骤

接下来在本文中,壹哥会带大家结合SpringBoot,详细的学习如何在Java项目中进行测试。本文会从以下4个层面,讲解SpringBoot中的测试功能。Service层的单元测试;Controller层的单元测试;断言assertThat的使用;单元测试的事务回滚。在service层,封装关于用户的数据库操作方法。/*** @Author 一一哥Sun*/@Service@Autowired@Override@Override。

2023-03-04 14:46:48 406

原创 Elasticsearch:使用 runtime fields 探索你的数据

你可以从一个简单的示例开始,将 @timestamp 和 message 字段作为索引字段添加到 my-index-000001 映射中。2. {8. },11. }12. }13. }14. }在上面,我们有意使用 wildcard 字段来定义 message。这样它非常节省存储空间,并且会提高写入文档的速度。如果要检索包含 clientip 的结果,可以将该字段添加为映射中的运行时字段。以下运行时脚本定义了一个 grok 模式,该模式从文档中的单个文本字段中提取结构化字段。

2023-03-04 14:08:59 104

原创 SpringBoot:高频面试题

Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。spring-boot-starter-web启动器自动依赖其他组件,减少了maven的配置。

2023-03-03 15:42:24 166

原创 Spring学习「第三节」:Bean的作用域和生命周期

默认情况,Spring只为每个在IOC容器里面声明的bean创建唯一一个实例,整个IOC容器范围内都能共享该实例,所有后续的getBean()调用和bean引用都将返回这个唯一的bean实例,这个作用域被称为singleton,它是所有bean的默认作用域。bean后置处理器对IOC容器里面的所有bean实例逐一处理,而非单一实例,它的典型应用是:检查bean属性的正确性或根据特定的标准更改bean的属性。当bean的作用域是单例时,Spring会在IOC容器对象创建的时候就创建bean的对象实例。

2023-03-03 15:33:56 84

空空如也

空空如也

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

TA关注的人

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