自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员麦冬的博客(公众号同名)

欢迎关注公众号:Java程序员聚集地,领取JAVA相关资料

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

原创 HarmonyOS 开发避坑指南

Harmony OS 开发避坑指南——源码下载和编译本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个目标平台的二进制文件。坑点总结:1.下载源码基本上没有太多坑,可以很顺利的进行2.编译源码主要的一个大坑是,默认版本的scons依赖python 3.7+,鸿蒙基础编译代码依赖python3,需要安装python 3.7+,并和当前系统上的python2.7/python3.6和谐共处!解决方法一般有两种

2020-09-18 22:00:52 8108 1

原创 华为资深架构师花数月整理:2021年最新版Java架构面试合集【Java基础+多线程+Mysql+Redis+JVM】

前言:现在已经十二月除,金九银十也已经过去了,很明显今年的面试季明显不如往年火热,对于求职者来说,也更难了一些。,综合来看今年确实不是面试的最佳时期,不过趁今年所剩的时间来好好准备,明年的金三银四或许会顺利得多。不过,对于今年的应届生来说,等到明年再去面试,竞争就更大了。不过,好在我们总能够找到一些好资源进行分享,今天分享的这份资料是2021年最新版Java架构面试合集,完整地看完之后,或许你就会觉得,应届生求职其实也没有那么难了。【注意,注意,文末获取答案】java基础八种基本数据

2020-12-08 19:50:27 582 1

原创 当面试官问你Spring Boot 中的监视器是什么?直接就这样回答稳拿offer

多年来,随着新功能的增加,spring 变得越来越复杂。只需访问https://spring.io/projects 页面,我们就会看到可以在我们的应用程序中使用的所有 Spring 项目的不同功能。如果必须启动一个新的 Spring 项目,我们必须添加构建路径或添加 Maven 依赖关系,配置应用程序服务器,添加 spring 配置。因此,开始一个新的 spring 项目需要很多努力,因为我们现在必须从头开始做所有事情。Spring Boot 是解决这个问题的方法。Spring Boot 已.

2020-12-01 21:59:25 697

原创 27岁,我在蚂蚁金服实现了我的财富自由

毕业快 5 年了,每当和人聊起自己的职场飞升之路,都不由得感激当初果断逃离舒适圈的自己。出身一所非 211、985 院校,毕业后入职了一家小型互联网公司,当着普普通通的入门工程师,工作期间虽然也时常遇到挑战,但手头的技术始终局限于表面,遇到稍微难点的实际问题就无从下手,也接触不到什么大型项目。这样的生活持续了 3 年,公司平台的局限性和自身能力的不足让一直怀抱着进大厂梦的我在这家公司逐渐失去了斗志,过着高不成低不就的日子,同时因不确定的未来感到非常不安。都说三年是程序员的一个坎,能否晋升或.

2020-12-01 17:16:34 897

原创 UDP ,你要耗子喂汁呀!

运输层位于应用层和网络层之间,是 OSI 分层体系中的第四层,同时也是网络体系结构的重要部分。运输层主要负责网络上的端到端通信。运输层为运行在不同主机上的应用程序之间的通信起着至关重要的作用。下面我们就来一起探讨一下关于运输层的协议部分运输层概述计算机网络的运输层非常类似于高速公路,高速公路负责把人或者物品从一端运送到另一端,而计算机网络的运输层则负责把报文从一端运输到另一端,这个端指的就是 端系统。在计算机网络中,任意一个可以交换信息的介质都可以称为端系统,比如手机、网络媒体、电脑、运营商等。在

2020-11-29 19:12:30 267

原创 硬核!15张图解Redis为什么这么快

作为一名服务端工程师,工作中你肯定和 Redis 打过交道。Redis 为什么快,这点想必你也知道,至少为了面试也做过准备。很多人知道 Redis 快仅仅因为它是基于内存实现的,对于其它原因倒是模棱两可。那么今天就和小莱一起看看:图注:- 思维导图 -基于内存实现这点在一开始就提到过了,这里再简单说说。Redis 是基于内存的数据库,那不可避免的就要与磁盘数据库做对比。对于磁盘数据库来说,是需要将数据读取到内存里的,这个过程会受到磁盘 I/O 的限制。而对于内存数据库来说,本身数据就存在于内存

2020-11-29 14:05:31 235

原创 腾讯一面!说说ArrayList的遍历foreach与iterator时remove的区别,我一脸懵逼

1 简介ArrayList作为最基础的集合类,其底层是使用一个动态数组来实现的,这里“动态”的意思是可以动态扩容(虽然ArrayList可以动态扩容,但却不会动态缩容)。但是与HashMap不同的是,ArrayList使用的是1.5的扩容策略,而HashMap使用的是2的方式。还有一点与HashMap不同:ArrayList的默认初始容量为10,而HashMap为16。有意思的一点是:在Java 7之前的版本中,ArrayList的无参构造器是在构造器阶段完成的初始化;而从Java 7开始,改为了在ad

2020-11-28 21:18:29 329

原创 宕机了,Redis数据丢了怎么办?

前言Redis作为内存型的数据库,虽然很快,依然有着很大的隐患,一旦「服务器宕机」重启,内存中数据还会存在吗?很容易想到的一个方案是从后台数据恢复这些数据,如果数据量很小,这倒是一个可行的方案。但是如果数据量过大,频繁的从后台数据库访问数据,压力很大;另外一方面恢复数据的时间极慢。对于Redis来说,实现数据的持久化和快速恢复是至关重要。什么是 AOF 日志?AOF(Append Only File)日志称之为「写后日志」,即是命令先执行完成,把数据写入内存,然后才会记录日志。AOF日志(文本形

2020-11-27 19:13:49 523

原创 年轻人不讲武德,竟然重构出这么优雅后台 API 接口

最近偶然间在看到 Spring 官方文档的时候,新学到一个注解 @ControllerAdvice,并且成功使用这个注解重构我们项目的对外 API 接口,去除繁琐的重复代码,使其开发更加优雅。展示具体重构代码之前,我们先来看下原先对外 API 接口是如何开发的。这个 API 接口主要是用来与我们 APP 交互,这个过程我们统一定义一个交互协议,APP 端与后台 API 接口统一都使用 JSON 格式。另外后台 API 接口对 APP 返回时,统一一些错误码,APP 端需要根据相应错误码,在页面弹出一些

2020-11-27 13:36:08 1006

原创 不懂分布式事务,别说你懂微服务!

1. 传统应用的事务管理1.1 本地事务再介绍微服务下的数据一致性之前,先简单地介绍一下事务的背景。传统单机应用使用一个RDBMS作为数据源。应用开启事务,进行CRUD,提交或回滚事务,统统发生在本地事务中,由资源管理器(RM)直接提供事务支持。数据的一致性在一个本地事务中得到保证。1.2 分布式事务1.2.1 两阶段提交(2PC)当应用逐渐扩展,出现一个应用使用多个数据源的情况,这个时候本地事务已经无法满足数据一致性的要求。由于多个数据源的同时访问,事务需要跨多个数据源管理,分布式事务应运而生

2020-11-26 19:32:51 219

原创 关于 TCP/IP,必知必会的十个问题

本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养。TCP/IP十个问题一、TCP/IP模型TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议。基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层和应用层。下图表示TCP/IP模型与OSI模型各层的对照关系。TCP/IP协议族按照层次由.

2020-11-26 13:46:51 446

原创 单线程的Redis慢动作你知道多少

前言现在一提到Redis的第一反应就是快、单线程,但是Redis真的快吗?真的是单线程吗?你有没有深入了解一下Redis,看看它的底层有哪些"慢动作"呢?为什么 Redis 这么火?Redis作为一个内存数据库,它接收一个key到读取数据几乎是微妙级别,一个字快诠释了它火的原因。另一方面就归功于它的数据结构了,你知道Redis有哪些数据结构吗?很多人可能会说不就是String(字符串)、List(列表)、Hash(哈希)、Set(集合)和 Sorted Set(有序集合)这五种吗?我想大家可能有一

2020-11-25 20:57:10 601

原创 这次一定让你记住 TCP 三次握手、四手挥手!

TCP协议全称为:Transmission Control Protocol,是一种面向链接、保证数据传输安全、可靠的数据传输协议。为了确保数据的可靠传输,不仅需要对发出的每个字节进行编号确认,还需要验证每一个数据包的有效性。每个TCP数据包是封闭在IP包中的,每个一IP包的后面紧跟着的是TCP头,TCP报文格式如下:源端口和目的端口字段TCP源端口(Source Port):源计算机上的应用程序的端口号,占 16 位。TCP目的端口(Destination Port):目标计算机的应用程序端口号

2020-11-24 19:10:34 299

原创 架构设计:微服务模式下,实现灰度发布模式

一、基本逻辑请求通过8001服务,在灰度规则中,会读取下次请求的服务列表,根据版本号参数规则,选中路由的服务。配置版本号,区分灰度版本和默认正常版本;自定义拦截器,管理版本号或其他标识参数在请求中传递;自定义服务选中策略,基于版本标识路由服务;如果灰度服务不存在,则基于规则选中默认服务;二、版本配置在node12-server集群配置两个服务:在8002端口配置版本v7.0.0,在8003端口配置版本v7.0.1,用来测试灰度版本选择。8002服务eureka: metadata

2020-11-24 13:36:40 316

原创 new一个对象到底占了多少内存

一.对象的创建当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到 一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。1.空间分配指针碰撞假设Java堆中内存是绝对规整的,所有被使用过的内存都被放在一 边,空闲的内存被放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那 个指针向空闲空间方向挪动一段与对象大小相等的距离(Serial、ParNew使用)空间列表但如果Jav

2020-11-23 19:13:46 2040

原创 面试遇到MyBatis不要慌,看看这篇文章

MyBatis的实现逻辑在 MyBatis 的初始化过程中,会生成一个 Configuration 全局配置对象,里面包含了所有初始化过程中生成对象根据 Configuration 创建一个 SqlSessionFactory 对象,用于创建 SqlSession “会话”通过 SqlSession 可以获取到 Mapper 接口对应的动态代理对象,去执行数据库的相关操作动态代理对象执行数据库的操作,由 SqlSession 执行相应的方法,在他的内部调用 Executor 执行器去执行数据库的相

2020-11-23 15:28:53 1331

原创 Javaer 进阶必看的 RocketMQ ,就这篇了

RocketMQ 整体架构设计整体的架构设计主要分为四大部分,分别是:Producer、Consumer、Broker、NameServer。为了更贴合实际,我画的都是集群部署,像 Broker 我还画了主从。Producer:就是消息生产者,可以集群部署。它会先和 NameServer 集群中的随机一台建立长连接,得知当前要发送的 Topic存在哪台 Broker Master上,然后再与其建立长连接,支持多种负载平衡模式发送消息。Consumer:消息消费者,也可以集群部署。它也会先和 Na

2020-11-22 19:25:32 306

原创 MySQL 连接为什么挂死了?

一、背景近期由测试反馈的问题有点多,其中关于系统可靠性测试提出的问题令人感到头疼,一来这类问题有时候属于“偶发”现象,难以在环境上快速复现;二来则是可靠性问题的定位链条有时候变得很长,极端情况下可能要从 A 服务追踪到 Z 服务,或者是从应用代码追溯到硬件层面。本次分享的是一次关于 MySQL 高可用问题的定位过程,其中曲折颇多但问题本身却比较有些代表性,遂将其记录以供参考。架构首先,本系统以 MySQL 作为主要的数据存储部件。整一个是典型的微服务架构(SpringBoot + SpringClo

2020-11-22 15:54:07 692 1

原创 【干货】连肝7个晚上,总结了关于Java基础的16个问题!

说说进程和线程的区别?进程是程序的一次执行,是系统进行资源分配和调度的独立单位,他的作用是是程序能够并发执行提高资源利用率和吞吐率。由于进程是资源分配和调度的基本单位,因为进程的创建、销毁、切换产生大量的时间和空间的开销,进程的数量不能太多,而线程是比进程更小的能独立运行的基本单位,他是进程的一个实体,可以减少程序并发执行时的时间和空间开销,使得操作系统具有更好的并发性。线程基本不拥有系统资源,只有一些运行时必不可少的资源,比如程序计数器、寄存器和栈,进程则占有堆、栈。知道synchronized原

2020-11-20 16:44:39 254

原创 Java泛型中的通配符 T,E,K,V,? 你了解吗?

前言Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。泛型带来的好处在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是本身就是一

2020-11-20 13:52:38 337

原创 一文了解RPC框架原理

1.RPC框架的概念RPC(Remote Procedure Call)–远程过程调用,通过网络通信调用不同的服务,共同支撑一个软件系统,微服务实现的基石技术。使用RPC可以解耦系统,方便维护,同时增加系统处理请求的能力。上面是一个简单的软件系统结构,我们拆分出来用户系统和订单系统做为服务存在,让不同的站点去调用。只需要引入各个服务的接口包,在代码中调用RPC服务就跟调用本地方法一样,我刚接触到这种调用方式的时候颇为惊奇,我明明调用的就是java语言方法啊(以java为例,现在RPC框架一般都支持多

2020-11-19 19:17:08 580

原创 一篇文章带你学会注册Nacos 配置中心和服务

Nacos配置中心在项目中使用Nacos做配置中心还是比较简单的,我们先创建SpringBoot项目,然后引入nacos-config的jar包,具体如下:<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>

2020-11-19 13:51:47 555 1

原创 深入理解 relocating 对Elasticsearch集群的影响

rebalance 用于将集群中的分片进行均衡,保持各个节点的分片数量大致相等,当集群扩容或缩容,掉一个节点的时候,这过程会自动完成。直观的感觉他应该是在后台默默干活的过程,最多占用带宽和磁盘 io 资源,应该感受不到他的存在,但实际情况是,他可能引起一些意想不到的问题。这篇文章主要思考分片 relocating 对集群会有哪些影响(基于 v7.7),有下面几个。shard-started RPC 会抢占较多的 master 处理时间分片移动结束后,target 节点会向 master 发起一个 sh

2020-11-18 22:10:45 3315 1

原创 Spring bean 加载顺序导致的 bug 问题

一、问题描述今天启动 spring boot 项目的时候,有时候会报加载不到配置文件的属性。配置文件的属性是用 @Value 获取的,属性有时候会是 null 。程序经过简化,是这样的,有一个 InitConfig 类,用来让静态工具类能获取到配置文件的属性值。内容是这样的:在静态工具类中,通过 InitConfig.load(); 来获取配置文件中的属性值,这是没问题的,因为 @Configuration 类会在 spring 程序启动过程中就执行了。但如果在 @Service 修饰的类中,调用

2020-11-18 14:10:13 1021

原创 springboot + rabbitmq 用了消息确认机制,感觉掉坑里了

一、准备环境1、引入 rabbitmq 依赖包<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency>2、修改 application.properties 配置配置中需要开启 发送端和 消费端 的消息确认。spring.rab

2020-11-17 22:07:38 362

原创 Java中List的五种去重方法及效率对比,你都用对了吗?

01、使用两个for循环实现List去重(有序)/**使用两个for循环实现List去重(有序) * * @param list * */public static List removeDuplicationBy2For(List<Integer> list) { for (int i=0;i<list.size();i++) { for (int j=i+1;j<list.size();j++) {

2020-11-17 17:02:03 663 2

原创 Kubernetes 中如何保证优雅地停止 Pod

一直以来我对优雅地停止 Pod 这件事理解得很单纯: 不就利用是 PreStop hook 做优雅退出吗? 但这周听了组里大哥的教诲之后,发现很多场景下 PreStop hook 并不能很好地完成需求,这篇文章就简单分析一下”优雅地停止 Pod”这回事儿.何谓优雅停止?优雅停止(Graceful shutdown)这个说法来自于操作系统,我们执行关机之后都得 OS 先完成一些清理操作,而与之相对的就是硬中止(Hard shutdown),比如拔电源。到了分布式系统中,优雅停止就不仅仅是单机上进程自己的

2020-11-14 20:38:59 925

原创 CTO:不要在代码中写 set/get 方法了,逮一次罚款...

CTO:what?你的 Java 代码中还充斥着大量的 set/get 方法于是公司出了规定:不要在代码中写 set/get 方法了,逮一次罚款。刚开始学习 Java 语言的时候,面向对象的三大特征就是封装,继承,和多态。在 Java 中,要保证封装性,需要将成员变量私有化,对外提供 set/get 方法来访问,虽然现在的 IDE,像 eclipse,IDEA都提供了快捷键,来生成 set/get 方法,但是在做项目的时候,一个 JavaBean 往往会有很多的成员变量,一个变量对应两个方法,如果有10

2020-11-14 15:20:32 256

原创 这篇 MySQL 索引和 B+Tree 讲的太通俗易懂!

正确的创建合适的索引,是提升数据库查询性能的基础。在正式讲解之前,对后面举例中使用的表结构先简单看一下:create table user( id bigint not null comment 'id' primary key, name varchar(200) null comment 'name', age bigint null comment 'age', gender int null comment 'ge

2020-11-13 22:45:05 278

原创 你知道Redis可以实现延迟队列吗?

Redis在队列中如何实现延时的情况:在我们日常生活中,我们可以发现:在淘宝、京东等购物平台上下单,超过一定时间未付款,订单会自动取消。打车的时候,在规定时间没有车主接单,平台会取消你的单并提醒你暂时没有车主接单。点外卖的时候,如果商家在10分钟还没接单,就会自动取消订单。收快递的时候,如果我们没有点确认收货,在一段时间后程序会自动完成订单。在平台完成订单后,如果我们没有在规定时间评论商品,会自动默认买家不评论。…这时,我们可以想想为什么要这样做?因为这样可以保证商品的库存可以释放给其

2020-11-13 15:04:20 612

原创 真正理解Mysql的四种隔离级别

什么是事务事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作。事务的 ACID事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特

2020-11-12 17:19:38 385

原创 MySQL中悲观锁和乐观锁到底是什么?

索引和锁是数据库中的两个核心知识点,隔离级别的实现都是通过锁来完成的按照锁颗粒对锁进行划分 ?锁用来对数据进行锁定,我们可以从锁定对象的粒度大小来对锁进行划分,分别为行锁、页锁和表锁。行锁就是按照行的粒度对数据进行锁定。锁定力度小,发生锁冲突概率低,可以实现的并发度高,但是对于锁的开销比较大,加锁会比较慢,容易出现死锁情况。页锁就是在页的粒度上进行锁定,锁定的数据资源比行锁要多,因为一个页中可以有多个行记录。当我们使用页锁的时候,会出现数据浪费的现象,但这样的浪费最多也就是一个页上的数据行。页锁的

2020-11-12 13:51:18 240

原创 SQL 优化极简法则,还有谁不会?

SQL 作为关系型数据库的标准语言,是 IT 从业人员必不可少的技能之一。SQL 本身并不难学,编写查询语句也很容易,但是想要编写出能够高效运行的查询语句却有一定的难度。查询优化是一个复杂的工程,涉及从硬件到参数配置、不同数据库的解析器、优化器实现、SQL 语句的执行顺序、索引以及统计信息的采集等,甚至应用程序和系统的整体架构。本文介绍几个关键法则,可以帮助我们编写高效的 SQL 查询;尤其是对于初学者而言,这些法则至少可以避免我们写出性能很差的查询语句。以下法则适用于各种关系型数据库,包括但不限于:M

2020-11-11 22:01:08 230

原创 “12306”的架构到底有多牛逼?

12306抢票,极限并发带来的思考?每到节假日期间,一二线城市返乡、外出游玩的人们几乎都面临着一个问题:抢火车票!虽然现在大多数情况下都能订到票,但是放票瞬间即无票的场景,相信大家都深有体会。尤其是春节期间,大家不仅使用12306,还会考虑“智行”和其他的抢票软件,全国上下几亿人在这段时间都在抢票。“12306服务”承受着这个世界上任何秒杀系统都无法超越的QPS,上百万的并发再正常不过了!笔者专门研究了一下“12306”的服务端架构,学习到了其系统设计上很多亮点,在这里和大家分享一下并模拟一个例子:如何在

2020-11-11 15:21:30 449

原创 网易云音乐基于 Flink + Kafka 的实时数仓建设实践

一、背景介绍(一)流平台通用框架目前流平台通用的架构一般来说包括消息队列、计算引擎和存储三部分,通用架构如下图所示。客户端或者 web 的 log 日志会被采集到消息队列;计算引擎实时计算消息队列的数据;实时计算结果以 Append 或者 Update 的形式存放到实时存储系统中去。目前,我们常用的消息队列是 Kafka,计算引擎一开始我们采用的是 Spark Streaming,随着 Flink 在流计算引擎的优势越来越明显,我们最终确定了 Flink 作为我们统一的实时计算引擎。(二)为什么选

2020-11-10 16:44:20 248

原创 记一次使用 Lombok 翻车造成的事故

序言去年在项目当中引入了Lombok插件,着实解放了双手,代替了一些重复的简单工作(Getter,Setter,toString等方法的编写)。但是,在使用的过程当中,也发现了一些坑,开始的时候并没有察觉到是Lombok的问题,后来跟踪了对应的其他组件的源码,才发现是Lombok的问题!Setter-Getter方法的坑问题发现我们在项目当中主要使用Lombok的Setter-Getter方法的注解,也就是组合注解@Data,但是在一次使用Mybatis插入数据的过程当中,出现了一个问题,问题描述

2020-11-10 14:43:19 248

原创 高质量的缺陷分析:让自己少写 bug

导读:缺陷分析做得好,bug 写得少。阿里资深技术专家和你分享如何进行高质量的缺陷分析,总结了 5个要点,通过缺陷分析消除开发中的各种盲点,打造一个学习型的团队。软件开发中的缺陷隐含着极高的价值,但是许多组织都仅仅忍受了缺陷带来的成本和后果,却让价值白白溜掉了。缺陷的价值是其触发的学习和成长的机会。把握缺陷带来的学习机会,可以快速提高组织的能力,未来的缺陷更少,成本更低,更容易成功。但同时,有效的缺陷分析和跟踪行动需要有效的方法和相应的组织的支持。缺陷隐含着极高的价值最近我们做了一次关于缺陷分析.

2020-11-09 16:37:01 436 1

原创 一次打包引发的思考,原来maven还可以这么玩

前言昨天有一个读者找我的交流工作心得,偶然间提到一个有趣的问题,如下:「大致的意思」:公司最近在整多模块开发,由于模块之间相互依赖,每次打包都很烦,必须根据依赖关系逐一进行打包,有没有省事的办法呢?其实玩转Maven的朋友都知道,只需要一条命令即可解决问题。依赖关系假设有一个多模块项目,父工程P中含有三个子模块A、B、C,三个模块有如下的依赖关系:A 依赖 B、CB 依赖 C依赖关系图父工程P的pom.xml如下:.....<modules> <module

2020-11-09 14:30:11 233

原创 架构的三个维度和六个层面

三个维度IT 架构IT 架构其实就是计算,网络,存储。这是云架构师的基本功,也是最传统的云架构师应该首先掌握的部分。良好设计的 IT 架构,可以降低 CAPEX 和 OPEX,减轻运维的负担。数据中心,虚拟化,云平台,容器平台都属于 IT 架构的范畴。应用架构随着应用从传统应用向互联网应用转型,仅仅搞定资源层面的弹性还不够,常常会出现创建了大批机器,仍然撑不住高并发流量。因而基于微服务的互联网架构,越来越成为云架构师所必需的技能。良好设计的应用架构,可以实现快速迭代和高并发。数据库,缓存,消息

2020-11-08 21:05:39 959 1

原创 你还在用Swagger?试试这个神器

今天给大家安利一款接口文档生成器——JApiDocs。Swagger想必大家都用过吧,非常方便,功能也十分强大。如果非要说Swaager有什么缺点,想必就是注解写起来比较麻烦。如果我说有一款不用写注解,就可以生成文档的工具,你心动了吗?他就是我们今天的主角——JApiDocs。下面我们一起来看看如何使用!一、添加依赖<dependency> <groupId>io.github.yedaxia</groupId> <artifactId>jap

2020-11-08 14:03:30 265

空空如也

空空如也

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

TA关注的人

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