自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

沉浸式Study

一个工作60年的程序员

  • 博客(86)
  • 收藏
  • 关注

原创 深入理解常见应用级算法思想

1 概论1.1 概念1.1.1 数据结构1)概述数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。2)划分从关注的维度看,数据结构可以划分为数据的逻辑结构和物理结构,同一逻辑结构可以对应不同的存储结构。逻辑结构反映的是数据元素之间的逻辑关系,逻辑关系是指数据元素之间的前后间以什么形式相互关联,这与他们在计算机中的存储位置无关。逻辑结构包括:集合:只是扎堆凑在一起,没有互相之间的关联

2023-09-28 20:34:56 267

原创 领域驱动设计

随着业务的扩展,软件开发投资越来越大” 团队的规模也开始变得越来越大,软件系统的投资和维护的成本变得越来越高。“业务人员不懂架构,架构师不懂代码,开发人员不懂业务模型” 当团队中的关键角色谁也不懂谁的时候,问题来了“重构是好的,但什么时候要重构?重构到什么样的架构就是够⽤的了?” 每个有追求的团队都在做重构,但管理者更关心,什么时间必须要重构?重构的目标在哪。

2023-09-28 20:13:52 293

原创 开发模式-敏捷开发

随着软件开发技术的不断发展,现在出现了很多种不同的开发模式,其实敏捷开发已经成为现在很多企业开发应用程序都想要选择的开发方案,那么什么是敏捷开发呢?敏捷倡导的是用工作的软件即文档**(核心是代码即文档)**。整个项目用于产品开发的文档不是一开始准备好的(甚至都没有RP原型设计),而是在过程中”及时的“ just-in-time准备出来的,因此,我们看到的是非常简单的且常常被放在最后处理的文档(在项目中涉及到移交或问题分析时这一点显得尤其突出)

2023-09-28 20:02:24 3485 1

原创 阿里系常用代码规范及工具

可能有同学觉得代码需要突出个人的特点,需要特异化,但是这样就会造成别人阅读起来很困难代码不仅仅是交给机器来执行的,同时代码也是让其他同事来阅读的,如果代码不规范就会出现各种各样的问题,写多了代码只是觉得代码规范化是一件很自然的事,代码写多了,自然代码规范化咯,地球人都会。其实不然,我们是不是缺少了小时候,十万个为什么的那种精神,为什么要这样做?为什么要那样做?那么我们为什么要做代码规范化?

2023-09-19 09:31:28 1074

原创 Kubernetes(k8s)高级使用

ReplicaSet是取代早期版本中的控制器,其功能基本上与相同ReplicaSet(简称RS)是Pod控制器类型的一种实现,用于确保由其管控的Pod对象副本数在任意时刻都能精确满足期望的数量,ReplicaSet控制器资源启动后会查找集群中匹配器标签选择器的Pod资源对象,当前活动对象的数量与期望的数量不吻合时,多则删除,少则通过Pod模板创建以补足。Deployment为Pod和Replica Set(下一代Replication Controller)提供声明式更新。

2023-09-14 10:55:47 188

原创 Kubernetes(k8s)基础入门

K8S是Kubernetes的全称,官方称其是across multiple hosts. It provides basic mechanisms for deployment, maintenance, and scaling of applications. 用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。容器就是一个包,其中包含了应用及其所有依赖。容器中的应用与主机系统是隔离的,不关注环境。

2023-09-12 15:39:02 3284

原创 轻量容器引擎Docker基础使用

我们使用Docker完成一个微服务的搭建过程我们需要在总pom文件定义全局配置,例如nacosmysql等配置MySQL 是世界上最受欢迎的开源数据库。凭借其可靠性、易用性和性能,MySQL 已成为 Web 应用程序的数据库优先选择。“卷”是容器上的一个或多个“目录”,此类目录可绕过联合文件系统与宿主机上的某个目录“绑定(关联)”;在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中。

2023-09-08 14:52:56 487

原创 Tomcat架构设计&源码剖析

Context 确定后,Mapper 再根据web.xml中配置的 Servlet 映射路径来找到具体的 Wrapper 和 Servlet。

2023-09-07 15:48:39 388

原创 JDK源码解析-ConcurrentHashMap

Java7 中 ConcurrentHashMap 使用的分段锁,也就是每一个 Segment 上同时只有一个线程可以操作,每一个 Segment 都是一个类似 HashMap 数组的结构,它可以扩容,它的冲突会转化为链表。但是 Segment 的个数一但初始化就不能改变。Java8 中的 ConcurrentHashMap 使用的 Synchronized 锁加 CAS 的机制。结构也由 Java7 中的Segment 数组 + HashEntry 数组 + 链表进化成了。

2023-09-06 19:07:00 90

原创 JDK源码解析-HashMap&面试题

HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。数组 + 链表数组 + 链表 / 红黑树思考:为什么1.8之后,HashMap的数据结构要增加红黑树?

2023-09-05 10:42:30 60

原创 JDK源码解析-LinkedList

LinkedList是一种可以在任何位置进行高效地插入和移除操作的有序序列,它是基于双向链表实现的。

2023-09-01 15:07:06 90

原创 JDK源码-Synchronized

如果某一个资源被多个线程共享,为了避免因为资源抢占导致资源数据错乱,需要对线程进行同步,那么synchronized就是实现线程同步的关键字synchronized的作用是保证在同一时刻, 被修饰的代码块或方法只会有一个线程执行,以达到保证并发安全的效果。

2023-08-31 15:44:10 78

原创 JDK源码解析-ArrayList

在介绍 ArrayList 时,知道该类实现了 List 接口,而 List 接口又继承了 Collection 接口,Collection 接口又继承了 Iterable 接口,该接口有个 Iterator iterator() 方法,能获取 Iterator 对象,能用该对象进行集合遍历,为什么能用该对象进行集合遍历?如上所示,在通过调用 add 方法添加元素之前,要首先调用 ensureCapacityInternal 方法来确定集合的大小,如果集合满了,则要进行扩容操作。当小于0时,抛出异常。

2023-08-29 21:53:00 188

原创 JDK源码解析-Object

通过分析虚拟机源码证明了hashCode不是直接用的内存地址,而是采取一定的算法来生成hashcode值的存储在mark word里,与锁共用一段bit位,这就造成了跟锁状态相关性如果是偏向锁:一旦调用hashcode,偏向锁将被撤销,hashcode被保存占位mark word,对象被打回无锁状态那偏偏这会就是有线程硬性使用对象的锁呢?对象再也回不到偏向锁状态而是升级为重量级锁。hash code跟随mark word被移动到c的object monitor,从那里取。

2023-08-29 21:50:40 164

原创 SpringBoot源码剖析

SpringBoot概念什么是SpringBootspring官方的网站:https://spring.io/翻译:通过Spring Boot,可以轻松地创建独立的,基于生产级别的基于Spring的应用程序,并且可以“运行”它们其实Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。以下内容来自百度百科SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.

2023-08-26 14:53:28 2333 2

原创 Spring源码深度解析三 (MVC)

SpringMVC是基于Servlet和Spring容器设计的Web框架Servlet 接口及其实现类结构:ServletConfig 是一个和 Servlet 配置相关的接口:在配置 Spring MVC 的 DispatcherServlet 时,会通过 ServletConfig 将配置文件的位置告知 DispatcherServlet。

2023-08-22 21:31:25 179

原创 Spring源码深度解析二(AOP)

AOP(Aspect Orient Programming):面向切面编程;用途:用于系统中的横切关注点,比如日志管理,事务管理;实现:利用代理模式,通过代理对象对被代理的对象增加功能。所以,关键在于AOP框架自动创建AOP代理对象,代理模式分为静态代理和动态代理;框架: AspectJ使用静态代理,编译时增强,在编译期生成代理对象;SpringAOP使用动态代理,运行时增强,在运行时,动态生成代理对象;

2023-08-19 14:33:04 105

原创 Spring源码深度解析一(IOC&DI)

1. Spring架构设计Spring框架是一个分层架构,他包含一系列的功能要素,并被分为大约20个模块2. 设计理念Spring是面向Bean的编程(BOP:Bean Oriented Programming),Bean在Spring中才是真正的主角。Bean在Spring中作用就像Object对OOP的意义一样,没有对象的概念就像没有面向对象编程,Spring中没有Bean也就没有Spring存在的意义。Spring提供了IoC 容器通过配置文件或者注解的方式来管理对象之间的依赖关系。控制反转

2023-08-16 21:08:48 129

原创 MyBatis源码解析&手写持久层框架

JDBC API 允许应用程序访问任何形式的表格数据,特别是存储在关系数据库中的数据代码示例:1.2 JDBC问题分析&解决思路剖开代码,逐个分析:(1)加载驱动,获取链接:存在问题1:数据库配置信息存在硬编码问题。存在问题2:频繁创建、释放数据库连接问题。(2)定义sql、设置参数、执行查询:存在问题3:SQL语句、设置参数、获取结果集参数均存在硬编码问题 。(3)遍历查询结果集:存在问题4:手动封装返回结果集,较为繁琐针对JDBC各个环节中存在的不足,现在,整理出对应的优化思路,统一汇总:JDBC是

2023-08-12 13:50:18 313

原创 lvs+keepAlived高可用部署

高可用集群(High Availability Cluster,简称HA Cluster),是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外部不间断的提供服务,把因为软件,硬件,认为造成的故障对业务的影响降低到最小程度。总而言之就是保证公司业务7*24小时不宕机LVS是Linux Virtual Server的简写,在1998年5月由章文嵩博士成立。工作在OSI模型的四层,基于IP进行负载均衡。在linux2.2内核时,IPVS就已经以内核补丁的形式出现。

2023-08-08 21:52:14 150

原创 Linux葵花宝典-无需自宫版

Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统Linux 一般是指 Linux 内核、 Linux 系统、 Linux 发行版。严格意义上说 Linux 是指由 Linus Torvalds 维护的并发布的内核。它的代码只包括内核而不包括其它方面的应用。

2023-08-05 14:33:42 535

原创 【有趣的设计模式】23 种设计模式详解和场景分析

前言七大设计原则1、单一原则:一个类只负责一个职责2、开闭原则:对修改关闭,对扩展开放3、里氏替换原则:不要破坏继承关系4、接口隔离原则:暴露最小接口,避免接口过于臃肿5、依赖倒置原则:面向抽象编程6、迪米特 法则:尽量不跟陌生人讲话7、合成复用原则:多使用组合、聚合、少用继承一、创建型模式1. 单例模式(Singleton Pattern)⭐单例模式(Singleton Pattern)是 Java中最简单的设计模式之一。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时

2023-08-02 22:26:01 2203

原创 大促之前全链路压测监控

Skywalking 是一个APM系统,即应用性能监控系统,为微服务架构和云原生架构系统设计它通过探针自动收集所需的指标,并进行分布式追踪,通过这些调用链路以及指标,Skywalking APM会感知应用间关系和服务间关系,并进行相应的指标统计,目前支持链路追踪和监控应用组件如下,基本涵盖主流框架和容器,如国产PRC Dubbo和motan等,国际化的spring boot,spring cloud都支持了。

2023-07-30 19:48:26 204

原创 大促之前全链路压测原理解析

基于实际的生产业务场景、生产环境,模拟海量的用户请求和数据对整个业务链(通常是核心业务链)进行压力测试,并持续调优的过程。整体架构如下主要是对压测客户端的压测数据染色,全链路中间件识别出染色数据,并将正常数据和压测数据区分开,进行数据隔离,这里主要涉及到mysql数据库,RabbitMQ,Redis,还需要处理因为hystrix线程池不能通过传递染色表示的问题。@Conditional表示仅当所有指定条件都匹配时,组件才有资格注册。作为任何@Bean方法的方法级注释。

2023-07-29 15:04:08 218

原创 MySQL索引优化分析和锁详解

索引(index)是帮助MySQL高效获取数据的数据结构(有序)1、前导模糊查询不能使用索引,  如name like ‘%涛’2、Union、in、or可以命中索引,建议使用in。3、负条件查询不能使用索引,可以优化为in查询,其中负条件有!=、、not in、not exists、not like等4、联合索引最左前缀原则,又叫最左侧查询,如果在(a,b,c)三个字段上建立联合索引,那么它能够加快a|(a,b)|(a,b,c)三组的查询速度。

2023-07-26 21:44:30 627

原创 JAVA-零拷贝技术

磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。​ 这次,我们就以「文件传输」作为切入点,来分析 I/O 工作方式,以及如何优化传输文件的性能。

2023-07-24 21:03:33 465

原创 RocketMQ深入分析

RocketMQ基于主题订阅模式实现消息的消费,消费者关心的是主题下的所有消息,但是由于不同的主题的消息不连续的存储在commitlog文件中,如果只是检索该消息文件可想而知会有多慢,为了提高效率,对应的主题的队列建立了索引文件,为了加快消息的检索和节省磁盘空间,每一个consumequeue条目存储了消息的关键信息commitog文件中的偏移量、消息长度、tag的hashcode值。故当 Master 的机器故障后,消息仍可从 Slave 中被消费。

2023-07-21 21:45:36 542

原创 RocketMQ高阶使用

发送方式发送 TPS发送结果反馈可靠性适用场景同步发送一般有不丢失重要的通知场景异步发送快有不丢失比较注重 RT(响应时间)的场景单向发送最快无可能丢失可靠性要求并不高的场景通过这段源码很明显可以看出以下几点如果是异步发送默认重试次数是两次,通过递归的方式进行重试对于同步而言,超时异常也是不会再去重试。同步发送重试是在一个for 循环里去重试,所以它是立即重试而不是隔一段时间去重试。

2023-07-15 23:35:36 851

原创 RocketMQ快速使用&基础

RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等前身是MetaQ,是阿里研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目,具有高性能、高可靠、高实时、分布式特点。

2023-07-15 15:18:22 915

原创 Kafka 深度剖析

Kafka最初是由LinkedIn公司采用Scala语言开发,基于ZooKeeper,现在已经捐献给了Apache基金会。目前Kafka已经定位为一个分布式流式处理平台,它以 高吞吐、可持久化、可水平扩展、支持流处理等多种特性而被广泛应用。Apache Kafka能够支撑海量数据的数据传递。在离线和实时的消息处理业务系统中,Kafka都有广泛的应用。(1)日志收集:收集各种服务的log,通过kafka以统一接口服务的方式开放 给各种consumer,例如Hadoop、Hbase、Solr等;

2023-07-14 21:43:14 1796 1

原创 RabbitMQ高阶使用

在当前时间往后延迟多少时间执行的任务顾名思义就是无法被消费的消息一般来说,producer将消息投递到broker或者直接到queue里了,consumer从queue取出消息进行消费,但某些时候由于特定的原因导致queue中的某些消息无法被消费,这样的消息如果没有后续的处理,就变成了死信,有死信,自然就有了死信队列;失败通知和发送方确认结合使用, 确保消息发送成功就表示开启手动ack,该配置项的其他两个值分别是none和autoauto:消费者根据程序执行正常或者抛出异常来决定是提交ack或者nack。

2023-07-13 22:32:41 172

原创 消息中间件选型&RabbitMQ基础入门

消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ,消息中间件到底该如何使用,何时使用这是一个问题,胡乱地使用消息中间件增加了系统的复杂度,如果用不好消息中间件还不如不用。

2023-07-12 21:21:20 316

原创 【高性能、高并发】页面静态化解决方案-OpenResty

OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

2023-07-08 14:38:22 1102

原创 软负载Nginx详细配置及使用案例

Nginx 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。处理响应请求很快高并发连接低的内存消耗具有很高的可靠性高扩展性热部署master 管理进程与 worker 工作进程的分离设计,使得 Nginx 具有热部署的功能,可以在 7 × 24 小时不间断服务的前提下,升级 Nginx 的可执行文件,也可以在不停止服务的情况下修改配置文件,更换日志文件等功能。

2023-07-07 21:28:24 844 2

原创 TiDB-亿级订单数据亚秒响应查询方案

TiDB 是一个分布式 NewSQL 数据库,它支持水平弹性扩展、ACID 事务、标准 SQL、MySQL 语法和 MySQL 协议,具有数据强一致的高可用特性,是一个不仅适合 OLTP 场景还适合 OLAP 场景的混合数据库。

2023-07-04 22:00:00 737

原创 ElasticSearch 索引设计

创建索引就像创建表结构一样,必须非常慎重的,索引如果创建不好后面会出现各种各样的问题在创建索引时,可以预先定义字段的类型(映射类型)及相关属性数据库建表的时候,DDL依据一般都会指定每个字段的存储类型,例如:varchar、int、datetime等,目的很明确,就是更精确的存储数据,防止数据类型格式混乱,在Elasticsearch中也是这样,创建索引的时候一般也需要指定索引的字段类型,这种方式称为映射(Mapping)分词器的主要作用将用户输入的一段文本,按照一定逻辑,分析成多个词语的一种工具。

2023-07-02 16:46:11 716

原创 高性能分布式缓存Redis(三) 扩展应用

布隆过滤器(英语:Bloom Filter)是 1970 年由Burton Howard Bloom提出的,是一种空间效率高的概率型数据结构。本质上其实就是一个很长的二进制向量和一系列随机映射函数。专门用来检测集合中是否存在特定的元素。

2023-07-01 12:35:43 586

原创 高性能分布式缓存Redis(二) 高级应用

RDB:在指定的时间间隔能对你的数据进行快照存储。RDB持久化是将当前进程中的数据生成快照保存到硬盘(因此也称作快照持久化),保存的文件后缀是rdb;当Redis重新启动时,可以读取快照文件恢复数据。在我们安装了redis之后,所有的配置都是在redis.conf文件中,里面保存了RDB和AOF两种持久化机制的各种配置。优势执行效率高,适用于大规模数据的备份恢复。自动备份不会影响主线程工作。备份的文件占用空间小。其备份的是数据快照,相对于AOF来说文件大小要小一些。劣势可能会造成部分数据丢失。

2023-06-30 21:50:37 358

原创 高性能分布式缓存Redis(一) 快速实战

简单来说Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是Redis 的数据是存在内存中的,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。另外,Redis 除了做缓存之外,Redis 也经常用来做分布式锁,甚至是消息队列。Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。Redis应用场景缓存使用,减轻DB压力DB使用,用于临时存储数据(字典表,购买记录)

2023-06-30 21:49:29 224

原创 无限容量分布式文件存储解决方案

FastDFS 是一个轻量级、开源的、高性能、分布式的文件系统。文件存储文件同步文件访问(文件上传和文件下载)解决了大容量存储和负载均衡的问题FastDFS 非常适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制。并注重高可用、高性能等指标。使用FastDFS很容易搭建一套高性能的文件服务器集群,提供文件上传、下载等服务。FastDFS是一种轻量级对象存储解决方案。

2023-06-28 21:23:20 980 2

空空如也

空空如也

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

TA关注的人

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