自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1837)
  • 资源 (1)
  • 论坛 (1)
  • 收藏
  • 关注

转载 JAVA线上故障排查全套路

线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。一、CPU一般来讲我们首先会排查cpu方面的问题。cpu异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用js

2020-09-22 17:45:24 60

转载 图解+代码|常见限流算法以及限流在单机分布式场景下的思考

大家好,我是 yes。今天来说说限流的相关内容,包括常见的限流算法、单机限流场景、分布式限流场景以及一些常见限流组件。当然在介绍限流算法和具体场景之前我们先得明确什么是限流,为什么要限流?。任何技术都要搞清它的来源,技术的产生来自痛点,明确痛点我们才能抓住关键对症下药。限流是什么?首先来解释下什么是限流?在日常生活中限流很常见,例如去有些景区玩,每天售卖的门票数是有限的,例如 2000 张,即每天最多只有 2000 个人能进去游玩。题外话:我之前看到个新闻,最不想卖门票的景区“

2020-09-22 13:06:08 47

转载 springboot实现定时任务,异步操作,统一结果返回,全局异常处理,拦截器及事务处理

本文都是springboot的常用和实用功能,话不多说开始吧定时任务1.启动类开启注解@EnableScheduling //开启基于注解的定时任务@MapperScan("com.pdzx.dao")@SpringBootApplicationpublic class VideoApplication { public static void main(String[] args) { SpringApplication.run(VideoApplicatio

2020-08-26 20:22:41 159

原创 聊聊微服务架构及分布式事务解决方案

分布式事务场景如何设计系统架构及解决数据一致性问题,个人理解最终方案把握以下原则就可以了,那就是:大事务=小事务(原子事务)+异步(消息通知),解决分布式事务的最好办法其实就是不考虑分布式事务,将一个大的业务进行拆分,整个大的业务流程,转化成若干个小的业务流程,然后通过设计补偿流程从而考虑最终一致性。什么是事务事务(Transaction)及其ACID属性事务是由一组SQL语句组成的逻...

2020-04-21 22:34:45 128

转载 Java线程池实现原理及其在美团业务中的实践

随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理使用线程池,是一个开发人员必修的基本功。本文开篇简述线程池概念和用途,接着结合线程池的源码,帮助读者领略线程池的设计思路,最后回归实践,通过案例讲述使用线程...

2020-04-03 14:58:43 117

转载 Synchronized 和 Lock 锁在JVM中的实现原理以及代码解析

一、深入JVM锁机制:synchronizedsynrhronized关键字简洁、清晰、语义明确,因此即使有了Lock接口,使用的还是非常广泛。其应用层的语义是可以把任何一个非null对象作为"锁",当synchronized作用在方法上时,锁住的便是对象实例(this);当作用在静态方法时锁住的便是对象对应的Class实例,因为Class数据存在于永久带,因此静态方法锁相当于该类的一个全局锁...

2020-04-01 16:00:25 108

转载 一文带你理解Java中Lock的实现原理

当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题。java提供了两种方式来加锁,一种是关键字:synchronized,一种是concurrent包下的lock锁。synchronized是java底层支持的,而concurrent包则是jdk实现。关于synchronized的原理可以阅读再有人问你synchronized是什么,就把这篇文章发给他。在这里...

2020-04-01 15:04:40 129

转载 业务复杂=if else?刚来的大神竟然用策略 工厂彻底干掉了他们!

对于业务开发来说,业务逻辑的复杂是必然的,随着业务发展,需求只会越来越复杂,为了考虑到各种各样的情况,代码中不可避免的会出现很多if-else。一旦代码中if-else过多,就会大大的影响其可读性和可维护性。首先可读性,不言而喻,过多的if-else代码和嵌套,会使阅读代码的人很难理解到底是什么意思。尤其是那些没有注释的代码。其次是可维护性,因为if-else特别多,想要新加一个分...

2019-10-24 13:41:06 304

原创 23 种设计模式的分类和功能

设计模式的分类1. 根据目的来分根据模式是用来完成什么工作来划分,这种方式可分为创建型模式结构型模行为型模式创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。 行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎

2020-11-24 23:25:33 24

原创 设计模式

为什么要学设计模式?面试经常被问到 以前总觉得设计模式是“花拳绣腿”,实际开发中没什么卵用,其实有好多种设计模式自己在无形中就使用了,只是自己不知道 设计模式是软件开发人员的“标准词汇”,学习设计模式是个人技术能力提高的捷径 设计模式包含了面向对象的精髓,“懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要”软件设计模式概述软件设计模式的产生背景“设计模式”这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1987 年,肯特·贝克(Kent B..

2020-11-24 23:19:53 28

转载 Java Servlet API中文说明文档

1 Servet资料1.1 绪言 这是一份关于2.1版Java Servlet API的说明文档,作为对这本文档的补充,你可以到http://java.sun.com/products/servlet/index.html下面下载Javadoc格式的文档。1.2 谁需要读这份文档 这份文档描述了Java Servlet API的最新版本2.1版。所以,这本书对于Servlet的开发者及servlet引擎的开发者同样适用。1.3 Java Servlet A...

2020-11-20 16:49:47 18

原创 kafka详解【四】

Kafka producer拦截器(interceptor)一、拦截器原理Producer拦截器(interceptor)是在Kafka 0.10版本被引入的,主要用于实现clients端的定制化控制逻辑。对于producer而言,interceptor使得用户在消息发送前以及producer回调逻辑前有机会对消息做一些定制化需求,比如修改消息等。同时,producer允许用户指定多个interceptor按序作用于同一条消息从而形成一个拦截链(interceptor chain)。Interc

2020-11-17 14:20:34 13

原创 kafka详解【三】

Kafka API实战一、环境准备1)启动zk和kafka集群,在kafka集群中打开一个消费者[atguigu@hadoop102 kafka]$ bin/kafka-console-consumer.sh \--zookeeper hadoop102:2181 --topic first2)导入pom依赖<dependencies> <!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka

2020-11-17 14:10:53 19

原创 kafka详解【二】

一、kafka核心组成二、Kafka工作流程分析1、Kafka生产过程分析写入方式producer采用推(push)模式将消息发布到broker,每条消息都被追加(append)到分区(patition)中,属于顺序写磁盘(顺序写磁盘效率比随机写内存要高,保障kafka吞吐率)。分区(Partition)消息发送时都被发送到一个topic,其本质就是一个目录,而topic是由一些Partition Logs(分区日志)组成,其组织结构如下图所示:我们可以看到,每个Pa

2020-11-17 13:47:30 21

原创 kafka详解【一】

一、消息队列消息队列内部实现原理:图例说明:(1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除)点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息推送到客户端。这个模型的特点是发送到队列的消息被一个且只有一个接收者接收处理,即使有多个消息监听者也是如此。(2)发布/订阅模式(一对多,数据生产后,推送给所有订阅者)发布订阅模型则是一个基于推送的消息传送模型。发布订阅模型可以有多种不同的订阅者,临时订阅者只在主动监听主题时才接收消

2020-11-17 13:28:18 16

原创 Hutool-poi是针对Apache POI的封装,操作Excel【三】

package com.example.demo.hutool;import cn.hutool.core.collection.CollUtil;import cn.hutool.core.date.DateUtil;import cn.hutool.poi.excel.ExcelUtil;import cn.hutool.poi.excel.ExcelWriter;import cn.hutool.poi.excel.StyleSet;import lombok.Data;import.

2020-11-16 00:04:05 38

原创 Hutool-poi是针对Apache POI的封装,操作Excel【二】

package com.example.demo.hutool;import cn.hutool.poi.excel.ExcelReader;import cn.hutool.poi.excel.ExcelUtil;import lombok.Data;import org.junit.Test;import java.util.List;import java.util.Map;/** * @Description Hutool-poi是针对Apache POI的封装 * * .

2020-11-16 00:01:27 39

原创 Hutool-poi是针对Apache POI的封装,操作Excel【一】

package com.example.demo.hutool;import cn.hutool.core.io.FileUtil;import cn.hutool.poi.excel.ExcelReader;import cn.hutool.poi.excel.ExcelUtil;import org.junit.Test;import java.util.List;import java.util.Map;/** * @Description Hutool-poi是针对Apach.

2020-11-15 23:59:27 18

转载 MyBatis动态批量插入、更新Mysql数据库的通用实现方案

一、业务背景  由于需要从A数据库提取大量数据同步到B系统,采用了tomikos+jta进行分布式事务管理,先将系统数据源切换到数据提供方,将需要同步的数据查询出来,然后再将系统数据源切换到数据接收方,进行批量的插入和更新操作,关于数据源的切换可以参考之前的文章《spring+springMVC+Mybatis架构下采用AbstractRoutingDataSource、atomikos、JTA实现多数据源灵活切换以及分布式事务管理》二、批量插入的具体实现  1.查询需要同步的数据:@

2020-11-12 16:24:52 25

原创 mybatis对mysql进行插入或者更新(含批量)

一、插入或更新(insertOrUpdate) 单条记录使用ON DUPLICATE KEY UPDATE,如果主键存在,即更新表mybatis xml文件写法如下:<insert id="insertOrUpdate" parameterType="xxxxx"> INSERT into case_warning_rule ( case_definition_dept_id, commitment_day, legal_period, ap

2020-11-12 13:24:57 33

转载 Java 3种批量插入更新操作的效率横向比较

以前总是说批量插入和更新的效率比非批量的要高,但是到底高多少,没有评估过,今天我就具体的测试下一、三种插入操作的方法1、利用for循环的批量插入xml:<insert id="insertUser"> insert into test_user (u_name,create_date) value (#{userName},SYSDATE())</insert>Java:for (int i = 1; i <= num; i++) {

2020-11-12 13:03:08 21

原创 Linux中xsync的作用

Linux中xsync的作用是将文件同步到所有的虚拟机上

2020-11-10 17:13:49 32

转载 Windows下使用NotePad++连接Linux服务器

如果要修改的文件内容比较多可使用NotePad++文本编辑器进行修改1)、2)、3)、安装成功后,在插件导航处可看到 NppFTP 选项 --->鼠标悬浮-->点击Show NppFTP Window4)、屏幕右边出现NppFTP窗口5)、6)、新建配置7)、选择连接配置8)、点击指定的配置文件即可进行连接9)、第一次连接会询问--->选择 “是” 即可...

2020-11-10 17:03:40 26

转载 Java工程师该如何编写高效代码?

阿里妹导读:世界上只有两种物质:高效率和低效率;世界上只有两种人:高效率的人和低效率的人。——萧伯纳同理,世界上只有两种代码:高效代码和低效代码;世界上只有两种人:编写高效代码的人和编写低效代码的人。如何编写高效代码,是每个研发团队都面临的一个重大问题。本文作者根据实际经验,查阅了大量资料,总结了"Java高效代码50例",让每一个Java程序员都能编写出"高效代码"。1.常量&变量1.1.直接赋值常量值,禁止声明新对象直接赋值常量值,只是创建了一个对象引用,而这个对象引用指向常.

2020-11-09 19:28:02 22

转载 手写一个线程池

前言和设计模式一样,打算花三个月的时间,结合《Java并发编程实战》一书,来总结下并发方面的知识。第一章从线程池的原理开始总结,希望自己能坚持下来,加油!1. 如何实现一个线程池?线程池的概念这里不多说,在讲它的原理前,我们先自己想一下,如果我来写,那如何实现一个线程池?1.1 线程池的重要变量首先要定义一个存放所有线程的集合;另外,每有一个任务分配给线程池,我们就从线程池中分配一个线程处理它。但当线程池中的线程都在运行状态,没有空闲线程时,我们还需要一个队列来存储提交给线程池的任务。

2020-11-09 18:04:30 21

转载 Simple Java—Collections(一)Java高效计数器

Translate from Efficient Counter in JavaJava中的高效计数器你可能经常需要统计一段文本或数据库中某些东西(例如单词)的出现频率。在Java中,使用HashMap可以很简单的实现这么一个计数器。这篇文章将会比较几种实现计数器的方法,最后,得出最有效率的一个。1. 简单计数器String s = "one two three two three three";String[] sArr = s.split(" "); //naive appro

2020-11-09 17:58:48 15

转载 如何避免新代码变包袱?阿里通用方法来了!

阿里妹导读:什么是设计?什么是架构?从零开始建立一个新的系统,新写的每行代码都可能成为明天的历史包袱?如何能有效的在遗留代码上工作?今天,阿里资深技术专家辉子为我们带来NBF框架下软件工程架构设计通用方法论,值得细细品读。Note:本文讨论的是基于服务化前提下的通用软件工程架构方法论,并未涉及到微观设计或架构的具体细节。前言即使代码多年的人都会对这两个问题有点蒙圈:什么是设计?什么是架构?从单词上看:设计是Software Design,架构是Software Architecture;.

2020-11-09 15:41:20 30

转载 初创公司5大Java服务困局,阿里工程师如何打破?

简介:阿里妹导读:初创公司遇到的每一个问题都可能攸关生死。创业之初更应该总结行业的常见问题,对比方案寻找最优解。阿里巴巴地图技术专家常意在技术圈摸爬滚打数年,接触了各式各样的Java服务端架构。服务端问题见得多了,也就更能分辨出各种方案的优劣。1.系统不是分布式1.1.单机版系统抢单案例// 抢取订单函数public synchronized void grabOrder(Long orderId, Long userId) { // 获取订单信息 OrderDO or..

2020-11-09 15:39:08 133

转载 哪种人是软件设计中的稀缺型人才?

简介:阿里妹导读:好的系统架构离不开好的接口设计,因此,真正懂接口设计的人往往是软件设计队伍中的稀缺型人才。为什么在接口制定标准中说:一流的企业做标准,二流的企业做品牌,三流的企业做产品?依赖倒置到底是什么意思?什么时候使用接口才算合理?今天,阿里匠人——张建飞将为你详细解读。接口有什么好处(Why)在我看来,接口在软件设计中主要有两大好处:1. 制定标准标准规范的制定离不开接口,制定标准的目的就是为了让定义和实现分离,而接口作为完全的抽象,是标准制定的不二之选。这个世界的运转离不..

2020-11-09 15:30:55 52

转载 快速入门数据结构和算法

简介:有哪些常见的数据结构?基本操作是什么?常见的排序算法是如何实现的?各有什么优缺点?本文简要分享算法基础、常见的数据结构以及排序算法,给同学们带来一堂数据结构和算法的基础课。一 前言1 为什么要学习算法和数据结构?解决特定问题。 深度优化程序性能的基础。 学习一种思想:如何把现实问题转化为计算机语言表示。2 业务开发要掌握到程度?了解常见数据结构和算法,沟通没有障碍。 活学活用:遇到问题时知道要用什么数据结构和算法去优化。二 数据结构基础1 什么是数据结构?数据结..

2020-11-09 15:21:26 51

转载 EasyCode(代码神器)

Easycode是idea的一个插件,可以直接对数据的表生成entity,controller,service,dao,mapper,无需任何编码,简单而强大。1、安装(EasyCode)我这里的话是已经那装好了。建议大家在安装一个插件,叫做Lombok。 Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。出现的神奇就是在源码中没有getter和setter方法,但是在编译生成的字节码文件中有get

2020-11-09 14:57:46 22

转载 如何降低 young gc 时间

基础知识young gc 主要采用的是copying GC算法;copying GC算法主要有以下两个步骤: Root Scanning Object Copy copying Gc的执行过程大概是从 Gc roots开始扫描其引用,扫描到的就是认为是存活的对象,其他的就是不需要的对象,然后把存放对象进行移动就OK了。young gc 的耗时也基本上都在这两个步骤上。要想减少一次young gc的时间,必须想办法减少上面两步耗时。根据官方文档可以知道,GC roots 包

2020-11-09 14:39:10 39

转载 面试时说 Redis 是单线程的,被喷惨了!

Redis是单线程的,这话搁以前,是横着走的,谁都知道的真理。现在不一样,Redis变了。再说这句话,多少得有质疑的语气来跟你辩驳一番。意志不坚定的,可能就缴械投降,顺着别人走了。到底是什么样的,各位看官请跟小莱一起往下:图注:思维导图Reactor模式反应器模式,你可能不太认识,如果看过上篇文章的话应该会有点印象。涉及到 Redis 线程它是一个绕不过去的话题。1、传统阻塞IO模型在讲反应器模式前,这里有必要提一下传统阻塞IO模型的处理方式。在传统阻塞IO模型中,由...

2020-11-09 14:32:21 18

转载 Mysql 中,这 21 个写 SQL 的好习惯,你值得拥有呀

前言每一个好习惯都是一笔财富,本文分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯。1. 写完SQL先explain查看执行计划(SQL性能优化)日常开发写SQL的时候,尽量养成这个好习惯呀:写完SQL后,用explain分析一下,尤其注意走不走索引。explain select * from user where userid =10086 or age =18;2、操作delete或者update语句,加个limit(SQL后悔药)在执行

2020-11-06 19:59:19 27

原创 领域驱动设计(DDD)靠谱吗?

怎么感觉在国内没什么人用啊由于公司领导的要求,所有的软件开发都要将DDD作为指导思想,并且要接受敏捷的思想;"迫不得已"下拜读了《实现领域驱动设计》这本书,将会在公司的内部系统上全面实践DDD。DDD把领域模型的重要性提高到了数据模型之上,在传统的MVC分层架构下。我们将项目结构分为Controller,Service,DAO 这三个主要的层,所有的业务逻辑都在Service中体现,而我们的实体类Entity却只是充当一个与数据库做ORM映射的数据容器而已,它并没有反映出模型的业务价值。所以又把.

2020-11-06 19:18:26 48

转载 啪啪打脸!领导说:try-catch要放在循环体外!

今天给大家带来的是关于try-catch 应该放在循环体外,还是放在循环体内的文章,我们将从性能和业务场景分析这两个方面来回答此问题。很多人对 try-catch有一定的误解,比如我们经常会把它(try-catch)和“低性能”直接画上等号,但对 try-catch 的本质(是什么)却缺少着最基础的了解,因此我们也会在本篇中对 try-catch 的本质进行相关的探索。小贴士:我会尽量用代码和评测结果来证明问题,但由于本身认知的局限,如有不当之处,请读者朋友们在评论区指出。性能评测..

2020-11-06 17:47:19 33

转载 二进制究竟有什么用?齐姐带你看看那些好玩儿的「位操作」

本篇终于讲到了齐姐文章里常常出现的分割线!计算机说到底就是 0 和 1,所有的数在内存中都是以二进制的形式储存的。而位操作,或者说位运算,就是直接对内存中的二进制位进行操作。位运算可以说是我们的基本功,今天这篇文章就从以下角度和大家一起玩转位运算。二进制究竟有什么用? 原码 反码 补码 7种位运算当然了,位运算还有很多奇技淫巧,如果大家还想看进阶篇,记得给我点赞或者留言告诉我哦~二进制的作用在实际生产中,二进制是用来优化时间和空间的。二进制的运算,可能并不会降低复杂度的等.

2020-11-06 16:35:55 50

原创 mysql数据库在建表的时候,这个表最合理是建多少个字段合适?也就是说最好有多少列最合理?

本文关于字段、记录、行大小的数量限制和合理取值。字段数量以mysql为例,实践经验是不超过20的字段。字段首先符合设计范式要求,自然就有合理的字段数量了,其次假设当某表的字段仍然太多时,可以根据业务情况进行拆分,比如根据常用字段和非常用字段将一张表拆分成两张。Row Size单条记录的大小不应超过硬盘的扇区大小,一般是4k单张表多少个字段其实没有什么定论,只要不超过数据库限定的个数就好,但是表的单条记录的大小是有合理空间的,也就是需要根据具体硬件和操作系统来确定单条记录(row si

2020-11-06 16:31:16 200

转载 阿里高级技术专家方法论:如何写复杂业务代码?

简介:面对零售通如此复杂的业务场景,如何在架构和代码层面进行应对,是一个新课题。阿里妹导读:张建飞是阿里巴巴高级技术专家,一直在致力于应用架构和代码复杂度的治理。最近,他在看零售通商品域的代码。面对零售通如此复杂的业务场景,如何在架构和代码层面进行应对,是一个新课题。结合实际的业务场景,Frank 沉淀了一套“如何写复杂业务代码”的方法论,在此分享给大家,相信同样的方法论可以复制到大部分复杂业务场景。一个复杂业务的处理过程业务背景简单的介绍下业务背景,零售通是给线下小店供货的B..

2020-11-06 16:15:49 33

转载 面对复杂业务,if-else coder 如何升级?

简介:针对业务在不同场景下的差异,我们常常会习惯性地使用 if-else 来实现不同的业务逻辑,久而久之代码越来越难以维护。那么如何消除这些 if-else?面对复杂业务应如何思考和分析?本文分享阿里高级技术专家张建飞(Frank)关于复杂业务治理的方法论,介绍一种多维度分析问题的方法:矩阵分析法。作者 | 张建飞 阿里巴巴高级技术专家导读:针对业务在不同场景下的差异,我们常常会习惯性地使用 if-else 来实现不同的业务逻辑,久而久之代码越来越难以维护。那么如何消除这些 if-e...

2020-11-06 14:57:53 28

Java8 新特性.rar

Java8新特性,包含代码实例与技术文档。

2020-03-29

AlbenXie的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

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

TA关注的人 TA的粉丝

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