Java

平时多流汗,战时少流血!

使用 Spring Boot 和 Spring Data JPA 整合时,重复的 bean 被定义了

规范

真正解决方案: A bean with that name has already been defined in null and overriding is disabled. 问题描述 在使用 Spring Boot 和Spring Data JPA 整合的时候,新手很可能会看到这样的错误 *************************** APPLICATION FAILED...

统一开发工具配置

规范

为什么要统一开发工具 理论上无论使用哪个工个都可以,但是之前遇到过这样的情况,有人习惯使用 Eclipse 的自动格式化代码,每次提交代码都有一大堆的变化,仔细对比过后才发现仅是格式变化了,或是 improt 顺序变化了等等,多人提交代码时产生冲突,其实只是格式风险不一样,为了排除类似这样的困扰,使大家编码风格统一,所以,统一使用 IDEA 作为开发工具,代码格式和注释格式统一化。 统一编码...

RabbitMQ消息100%投递的解决方案

一、前言 现在大多都使用 MQ 来做系统的异构,来做系统的解耦,系统的的模块相当于寄信者与收信者,MQ 则扮演者邮局的角色。作为一个中转的角色,就需要确保消息的100%投递。 今天我们就来研究一下如何确保消息的100%的投递。 二、先谈谈 RabbitMQ 的特性 RabbitMQ 所做的确保是:只要你把消息投递到 Broker 中,那么我就确保这个消息会送达到消费者的手中。 当然这是有前提...

RabbitMQ 的核心概念

概述 RabbitMQ 是采用 Erlang 语言实现 AMQP (Advanced Message Queuing Protocol,高级消息队列协议)的消息中间件,它最初起源于金融系统,用于在分布式系统中存储转发消息,RabbitMQ 凭借其高可靠、易扩展、高可用及丰富的功能特性受到越来越多企业的青睐。 RabbitMQ特性 可靠性 RabbitMQ 使用一些机制来保证可靠性, 如持...

合理设置RabbitMQ的并发参数,防止消息堆积

RabbitMQ消息堆积优化方案

版本信息: JDK:8 SpringBoot 2.1.3.RELEASE RabbitMQ消费端配置 spring: rabbitmq: host: localhost port: 5672 username: guest password: guest listener: simple: # acknowledge-...

JVM垃圾收集器

对象搜索算法与回收算法 垃圾回收(GC)是JVM的一大杀器,它使程序员可以更高效地专注于程序的开发设计,而不用过多地考虑对象的创建销毁等操作。 但是,当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,如果对GC不了解,很可能会成为个人的发展瓶颈。 学习垃圾收集需要完成以下三件事情: 哪些内存需要回收? 什么时候回收? 如何回收? 对象已死?——GC对象搜索...

认识长轮询:配置中心是如何实现推送的?

用了这么久配置中心,还不知道长轮询是什么?

前言 传统的静态配置方式想要修改某个配置时,必须重新启动一次应用,如果是数据库连接串的变更,那可能还容易接受一些,但如果变更的是一些运行时实时感知的配置,如某个功能项的开关,重启应用就显得有点大动干戈了。配置中心正是为了解决此类问题应运而生的,特别是在微服务架构体系中,更倾向于使用配置中心来统一管理配置。 配置中心最核心的能力就是配置的动态推送,常见的配置中心如 Nacos、Apollo 等...

用了SpringBoot+RabbitMQ消息确认机制,我感觉掉坑里了

RabbitMQ消息堆积与消息丢失优化方案

原文地址:https://www.cnblogs.com/chengxy-nds/p/13217828.html 最近部门号召大伙多组织一些技术分享会,说是要活跃公司的技术氛围,但早就看穿一切的我知道,这 T M 就是为了刷KPI。不过,话说回来这的确是件好事,与其开那些没味的扯皮会,多做技术交流还是很有助于个人成长的。 于是乎我主动报名参加了分享,咳咳咳~ ,真的不是为了那点KPI,就...

从0到1编写一个RPC框架(基于Zookeeper)

原文地址:http://www.iloveqyc.com/2019/04/06/air-rpc/ 零、前言 这是我很久之前造的一个RPC轮子,名叫AirRPC,它基于zookeeper,和阿里dubbo、美团pigeon等框架比较类似(毕竟RPC框架原理都一样)。源码在github上,有兴趣的同学可以看看:https://github.com/qiuyongchen/AirRPC。 下面...

如何从0到1构建一个稳定、高性能的Redis集群?

原文地址:https://mp.weixin.qq.com/s/q79ji-cgfUMo7H0p254QRg 这篇文章我想和你聊一聊 Redis 的架构演化之路。 现如今 Redis 变得越来越流行,几乎在很多项目中都要被用到,不知道你在使用 Redis 时,有没有思考过,Redis 到底是如何稳定、高性能地提供服务的? 你也可以尝试回答一下以下这些问题: 我使用 Redis 的场景...

微服务使用RESTful时遇到的坑

RESTfulAPI序列化和反序列化遇到的坑

微服务架构 概念 一个大型复杂的业务系统由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。每个任务代表着一个小的业务能力,组合或者复用这些微服务的能力,支撑上层大型复杂的业务系统。 解决方案 目前流行的微服务架构是基于开源的 Spring Cloud 实现,它提供了一整套的解决方案——服务注册与发现,服务消费,...

谨慎使用ArrayList中的subList方法

原文地址:http://cmsblogs.com/?p=1239 subList 的缺陷 我们经常使用 subString 方法来对 String 对象进行分割处理,同时我们也可以使用 subList、subMap、subSet 来对 List、Map、Set 进行分割处理,但是这个分割存在某些瑕疵。 subList 返回仅仅只是一个视图 首先我们先看如下实例: public stati...

数据脱敏-Jackson-Fastjson-Logback

原文地址:https://blog.csdn.net/qq_26418435/article/details/103620548 学习思路 分析脱敏场景 基于 Fastjson、Jackson、Logback 的各种实现 总结 文末有代码实现 git 地址、小星星 一、分析脱敏场景 生产数据,为了保护用户信息,防止用户信息泄露,我们通常需要对数据进行脱敏主要有(手机号、身份证、姓名等...

Java几种常用JSON库性能比较

原文地址:https://www.xncoding.com/2018/01/09/java/jsons.html 本篇通过 JMH 来测试一下 Java 中几种常见的 JSON 解析库的性能。 每次都在网上看到别人说什么某某库性能是如何如何的好,碾压其他的库。但是百闻不如一见,只有自己亲手测试过的才是最值得相信的。 JSON 不管是在 Web 开发还是服务器开发中是相当常见的数据传输格式...

Arrays.asList注意事项

Array 转 ArrayList 当需要把 Array 转成 ArrayList 的时候,经常这样做 String[] arr = new String[]{"aa","bb"}; List<String> list = Arrays.asList(arr); Arrays.asList() 会返回一个 ArrayList,但是要特别注...

Java的POJO类为什么要实现Serializable接口

遇到过的问题 在分布式架构中,项目结构一般会把公用的部分抽取到一个单独的项目中,比如,与数据库映射的类 User 放到 xx-core 工程中,对 User 的操作(CRUD)封装成一个服务,如 xx-service,在这个 service 中引入 xx-core 依赖,然后对外提供接口服务能力。下面看一下 User 类的代码: public class User { privat...

在抖音推荐算法组工作的体验怎么样?

原文地址:https://www.zhihu.com/question/285747864/answer/1260550639 主要说了在抖音推荐算法组工作的体验 之前在 Snapchat 工作了2年,去年回国加入了抖音的推荐算法团队。我先列一下主要的工作内容,针对每一项说说我个人的体验;再说一些不具体到哪项工作内容的、general 的体验吧。去年选择换工作加入抖音主要是冲着更好的锻炼...

TCP协议面试灵魂12问,收藏收藏~

原文地址:https://blog.csdn.net/weixin_45132238/article/details/106526007 先亮出这篇文章的思维导图 TCP 作为传输层的协议,是一个软件工程师素养的体现,也是面试中经常被问到的知识点。在此,我将 TCP 核心的一些问题梳理了一下,希望能帮到各位。 001: 能不能说一说 TCP 和 UDP 的区别? 首先概括一下基本的区别...

Java的BigDecimal里方法应该这样用

预测一下运行的结果 在运行下面的代码之前,先把自己预测的结果写下来,看看能对几个 System.out.println(BigDecimal.ZERO.equals(BigDecimal.ZERO)); System.out.println(BigDecimal.ZERO.equals(new BigDecimal(0))); System.out.println(BigDecimal.ZE...

Java中的使用BigDecimal就不会丢失精度了吗?

作者:LanceToBigData 原文地址:https://www.cnblogs.com/zhangyinhua/p/11545305.html 一、BigDecimal 概述 Java 在 java.math 包中提供的 API 类 BigDecimal,用来对超过 16 位有效位的数进行精确的运算。双精度浮点型变量 double 可以处理 16 位有效数,但在实际应用中,可能需要...

如何健壮你的后端服务?

怀疑第三方,防备使用方,做好自己

作者:zhanlijun 原文地址:https://www.cnblogs.com/LBSer/p/4753112.html 对每一个程序员而言,故障都是悬在头上的达摩克利斯之剑,都唯恐避之不及,如何避免故障是每一个程序员都在苦苦追寻希望解决的问题。对于这一问题,大家都可以从需求分析、架构设计 、代码编写、测试、code review、上线、线上服务运维等各个视角给出自己的答案。本人结合...

HTTP 缓存机制及原理

作者:魑魅魍魉_killer 原文地址:https://www.cnblogs.com/chenlei987/p/11383242.html 1、前言 作为一个前端,了解 HTTP 缓存是非常必要,它不仅是面试的必要环节,也更是实战开发中必不可少需要了解的知识点,本文作者将从缓存的概念讲到如何在业务中设计一个合理的缓存架构,带你一步一步解开 HTTP 缓存的神秘面纱。 2、HTTP 缓存...

使用 MySQL 里的 OR 还是 IN?

异常日志 org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.StackOverflowError at org.springframework.web.servlet.DispatcherServlet.doDispatch(...

大话微服务中的边车模式

作者:孤独烟 原文地址:https://www.cnblogs.com/rjzheng/p/10390827.html (以下故事纯属虚构,如有雷同纯属巧合) 概念 自从微服务的浪潮席卷了烟哥的公司之后,烟哥的领导内心蠢蠢欲动,指派烟哥去将公司的传统服务架构改成微服务架构!于是烟哥就喊上了小刘到了一个僻静的角落探讨如何实施! 烟哥:"小刘啊,去把公司那套天霸动霸Tua系统整整,...

知乎千万级高性能长连接网关是如何搭建的

作者:@faceair @安江泽 原文:https://zhuanlan.zhihu.com/p/66807833 实时的响应总是让人兴奋的,就如你在微信里看到对方正在输入,如你在王者峡谷里一呼百应,如你们在直播弹幕里不约而同的 666,它们的背后都离不开长连接技术的加持。 每个互联网公司里几乎都有一套长连接系统,它们被应用在消息提醒、即时通讯、推送、直播弹幕、游戏、共享定位、股票行情等...

冒着挂科的风险也要给你们看的 Spring Cloud 入门总结

来源:https://juejin.im/post/5de2553e5188256e885f4fa3 写在前面的话 马上要考试了!!! 作为一个苦逼的在读大学生,又要面临半年一度的期末考试了,因为上课没听,我啥都不会,什么通信原理,单片机。。。饶了我吧!!! 给你们看看我上课在干啥你就知道我为啥啥都不会了。 上课笔记。。 emmm,字比较丑 😑。我还记得那是一堂英语课,老师不让用电子设...

1分钟系列-在 Kibana 自定义仪表盘

背景 上一篇中已经分享了使用 Filebeat 安装和使用 Nginx 的日志仪表盘,除了使用提供仪表盘之外,我们自己也可以根据需要进行自定义 自定义图表 点击左侧菜单 Visualize, 如下图: 柱状图示例 从下图中选择要创建的图表类型,下面选择柱状图 下一步,选择索引 默认情况下,Y 轴显示总数数据 在 X 轴选择时间,如下图 点击右上角的 小三角 图标 然后,访问 N...

深度剖析如何实现事务消息

链接 https://juejin.im/post/5e0d56b2e51d4540f462f0b2 1.背景 分布式事务一直是一个老生常谈的一个话题,在我的公众号下面下面已经写过很多篇分布式事务相关的文章了,但是依旧没有将其完全剖析。在之前的文章中我也多次提到我们可以使用消息队列来实现我们的分布式事务,但是大多都是一笔带过,很多读者都对这一块产生了很多疑问,希望读完这篇文章能让你理解如...

MacTalk:怎么减少编程中的bug?

链接: http://macshuo.com/?p=1361 为什么要编程?因为代码没在那里。创造一个世界是如此让人着迷,Linux 的创始者 Linus 这样表述对编程的喜爱之情: 对于喜爱编程的人来说,编程是世界上最有趣的事,比下棋有趣得多!因为你可以自己制订游戏规则,而你制定什么样的规则,也就会随之出现与此规则相符合的结果。 在电脑世界中,你就是创世者,你对所发生的一切拥有最终的...

1分钟系列-在 Kibana 安装和使用 Nginx 的日志仪表盘

配置 Filebeat # filebeat 安装在 192.168.111.238 服务器上 cd /usr/local/filebeat-6.6.1-linux-x86_64 vi filebeat-nginx-es-dashboard.yml # 将以下内容拷贝到 filebeat-nginx-es-dashboard.yml 文件中 filebeat.inputs: - type...

1分钟系列-Kibana 简介与数据探索

在 Elasticsearch 查看数据 在数据浏览查看索引数据,如下图: 下面分享在 Kibana 中查看数据,一张图片胜过千万行日志 Kibana 简介 Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作...

1分钟系列-Filebeat 模块之 Nginx 配置使用

背景 在上一篇分享中,我们发现数据采集到的日志数据都在 message 属性里,本次分享如何利用模块格式化日志信息 Filebeat Module Filebeat 内置提供了许多开箱即用的 modules ,对日志文件做简单的收集和解析处理,可以简化我们的配置,直接使用就可以 cd /usr/local/filebeat-7.6.2-linux-x86_64 # 查看支持哪些模块 ./f...

1分钟系列-Filebeat 采集数据保存到 Elasticsearch

Filebeat 采集日志到架构 从上面的架构图中,我们可以看到 Beats 与 Nginx 部署在同一台机器上,目的是收集 Nginx 上的访问日志进行分析 读取 Nginx 日志文件 读取文件配置 # 配置读取日志文件 filebeat-log.yml filebeat.inputs: - type: log enabled: true paths: - /usr/l...

1分钟系列-Filebeat简介与安装

Beats 轻量型数据采集器 Beats 平台集合了多种单一用途数据采集器。它们从成百上千或成千上万台机器和系统向 Logstash 或 Elasticsearch 发送数据。 Beats 系列 全品类采集器,搞定所有数据类型。 Beats 可以直接将数据发送到 Elasticsearch 或通过 Logstash,在Kibana 中可视化之前,可以进一步处理和增强数据。 Filebea...

1分钟系列-Nginx 安装,准备访问日志

Nginx 简介 Nginx 是一款轻量级的 Web 服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。而 Nginx 的访问日志不管是做用户行为分析还是安全分析都是非常重要的数据源之一。如何有效便捷的采集 Nginx 的日志进行有效的分析成为大家关注的问题(下一节分享 Filebeat 进行日志采集)。 Nginx 互联网架构 高可用 Nginx ...

1分钟系列-Elasticsearch 集群安装与常见问题

集群安装 Elasticsearch 简介请参考上篇 配置文件修改 配置文件位置 config/elasticsearch.yml 集群的名称 通过 cluster.name 可以配置集群的名称,集群是一个整体,因此名称都要一致,所有主机都配置成相同的名称,配置示例: cluster.name: my-es-application 节点的名称 通过 node.name 可以...

1分钟系列-Elasticsearch 简介与单机版安装

Elasticsearch 简介 Elasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,以其简单的 RESTful API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件。 Elasticsearch 使...

1分钟系列-Elastic Stack(ELK)简介

Elastic Stack 简介 Elastic Stack 是 ELK Stack 的更新换代产品,那么,ELK 到底是什么呢? “ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。 Elasticsearch 是开源的分布式搜索引擎基于 JSON 开发而来,具有 RESTful 风格。它使用简单,可缩放规模,十分灵...

掌门1对1微服务体系Solar第1弹:全链路灰度蓝绿发布智能化实践

原文链接:https://mp.weixin.qq.com/s/o_BYQ8Gz_YIykgTVR8yO9A 掌门教育自 2014 年正式转型在线教育以来,秉承“让教育共享智能,让学习高效快乐”的宗旨和愿景,经历云计算、大数据、人工智能、AR/VR/MR 以及现今最火的 5G,一直坚持用科技赋能教育。掌门教育的业务近几年得到了快速发展,特别是今年的疫情,使在线教育成为了新的风口,也给掌门...

使用 Spring 到底怎么实现策略模式

原文:https://segmentfault.com/a/1190000020836393 前言 我们都知道设计模式好,可以让我们的代码更具可读性,扩展性,易于维护,但大部分程序猿一开始都学过至少一遍设计模式吧,实战中不知用到了几成。接下来让我介绍一个结合 SpringBoot 的策略模式套路,让你的代码少些 if-else 开撸 废话不多说,直接告诉你今天的核心是 @Autowire...

关于需求评审和讲解的一些思考

背景 上图为[产品迭代开发协作流程],上次聊了一下关于 Code Review 的一些思考。 在上面的流程中,需求评审通过后,要产出最终的需求文档、原型等交付物,还要对本次需求封版;在测试阶段的补充需求的处理方式;上线后记录或反馈的问题列入下一版的迭代。 可是,流程中都是比较理想的状态,现实工作中并没有达到设想的目标。作为一个开发人员,分别站在产品经理的角度和开发人员的角度分析一下问题的可...

关于CodeReview的一些思考

背景 上图为[产品迭代开发协作流程],其中我们在 Demo 本次迭代之前会对开发人员的代码进行评审,所以今天就聊一下关于CodeReview的一些思考。 Code Review 的主要目标 Code Review,也就是我们常说的代码评审。Code Review 主要是在软件开发的过程中,对源代码进行评审,其目的是找出并修正软件开发过程中出现的错误,保证软件质量,同时也能提高开发者自身水...

RESTful API 最佳实践

源文:http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html 背景 RESTful 是目前最流行的 API 设计规范,用于 Web 数据接口的设计。 它的大原则容易把握,但是细节不容易做对。本文总结 RESTful 的设计细节,介绍如何设计出易于理解和使用的 API。 一、URL 设计 1.1 动词 ...

HTTP POST 四种常见的提交数据方式

背景 今天在与第三方联调接口的时候,发现一些问题:对 HTTP 协议的请求方法使用不合理(本来以为这些对工程师来说已经是常识了),协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据,也可用来与第三方交互数据。 用 Content-Type : applicatio...

JMeter进行WebSocket压力测试

背景 之前两篇内容介绍了一下 WebSocket 和 SocketIO 的基础内容。之后用 Netty-SocketIO 开发了一个简单的服务端,支持服务端主动向客户端发送消息,同时也支持客户端请求,服务端响应方式。本文主要想了解一下服务端的性能怎么样,选择使用 JMeter 对 WebSocket 应用进行性能测试。 JMeter 扩展实现 WebSocket 支持 JMeter 是目前最...

Socket.IO

Socket.IO 是一个为实时应用提供跨平台实时通信的库。目标是使实时应用在每个浏览器和移动设备上成为可能,模糊不同的传输机制之间的差异。它使用了浏览器支持并采用的 HTML5 WebSocket 标准。以下内容为翻译官网 https://socket.io/docs/ 。 聊天应用程序 demo 地址 https://socket.io/demos/chat/ What Socket.I...

WebSocket 主动推送

背景 最近,公司在开发一款主动服务机器人,将产生的消息数据通过服务端推送到客户端(H5、iOS、Android);同时支持用户进行提问,通过 NLP 识别用户意图,然后找到答案并回答用户。本次仅记录在进行部署主动服务通信服务时遇到的问题。 服务器向 Web 页面推送消息的方式 非阻塞轮询(短轮询):客户端以固定的频率(比如10秒钟一次)向服务端发送请求,如果服务端没有数据响应,就直接响应一...

MySQL执行计划 Extra 中的vusing index 和 using where using index 的区别

原文地址:http://www.cnblogs.com/wy123/p/7366486.html 背景 MySQL 执行计划中的 Extra 列中表明了执行计划的每一步中的实现细节,其中跟索引有关的 Using index 在不同的情况下会出现 Using index, Using where Using index,Using index condition 等,那么 Using in...

MySQL执行计划 Extra 中的vusing index 和 using where using index 的区别

原文地址:http://www.cnblogs.com/wy123/p/7366486.html 背景 MySQL 执行计划中的 Extra 列中表明了执行计划的每一步中的实现细节,其中跟索引有关的 Using index 在不同的情况下会出现 Using index, Using where Using index,Using index condition 等,那么 Using in...

使用Java 8 Stream像操作SQL一样处理数据(下)

原文出自:https://my.oschina.net/liuyatao19921025/blog/1609539 背景 在上一篇文章中,我们介绍了 Stream 可以像操作数据库一样来操作集合,但是我们没有介绍 flatMap 和 collect 操作。这两种操作对实现复杂的查询是非常有用的。比如你可以结果 flatMap 和 collect 计算 Stream 中的单词的字符数,像下...

使用Java 8 Stream像操作SQL一样处理数据(上)

原文出自:https://my.oschina.net/liuyatao19921025/blog/1608232 背景 几乎每个 Java 应用都要创建和处理集合。集合对于很多编程任务来说是一个很基本的需求。举个例子,在银行交易系统中你需要创建一个集合来存储用户的交易请求,然后你需要遍历整个集合才能找到这个客户这段时间总共花费了多少金额。尽管集合非常重要,但是在 Java 中对集合的操...

如何“干掉”if…else

原文出自:https://www.jianshu.com/p/1db0bba283f0 前言 if...else 是所有高级编程语言都有的必备功能。但现实中的代码往往存在着过多的 if...else。虽然 if...else 是必须的,但滥用 if...else 会对代码的可读性、可维护性造成很大伤害,进而危害到整个软件系统。现在软件开发领域出现了很多新技术、新概念,但 if...els...

转:基于 GitLab 的 Code Review 教程

本文由 ken.io 创作 本文原文链接:https://ken.io/note/gitlab-code-review-tutorial 一、前言 1、本文主要内容 GitLab Code Review 机制说明 Git Workflow 与 Git Code Review Workflow GitLab Code Review 配置说明 GitLab Code Review 流程演示...

Git Flow 插件使用

创建一个 demo 在本地目录新创建项目 使用集成开发环境 IDEA 的向导(Spring Initializr)创建一个 Spring Boot 的项目,然后将其初始化为一个 Git Repository (VCS -> Import into Version Control -> Create Git Repository),这时在新项目上右键就可以看到 Git 菜单了,这样...

Git Flow 工作流程

关于分支分类 主分支 master 分支,存储官方发布历史,始终都是稳定状态。 develop 分支,作为功能集成历史的分支。 辅助分支 feature 分支,一个功能特性的开发分支。 release 分支,进行测试发布。 hotfix 分支,快速修复 master 分支的 bug。 分支的生命周期 master 分支与 develop 分支与项目的生命周期共存亡 feature ...

是时候将日志框架升级到Log4j2了

为什么要升级 现在维护的公司项目,在不同的时期使用了不同的日志框架,最早的 Log4j,前两年开始使用 Spring Boot ,日志使用了 Logback,最近看到一些介绍 Log4j2 的文章和官方的性能测试对比。所以计划在未来的新项目中使用 Log4j2,及旧项目的日志升级为 Log4j2 。在实践的过程中也遇到了一些问题,下面做一个简单的记录。 旧项目的日志使用的Log4j 一...

Java应用程序读取外部配置文件

背景 当我们在服务器上安装一些软件服务时,如 MySQL、Kafka、ES 等,在启动服务的时候,脚本会读取默认路径下的配置文件,如果配置文件没有放到默认的路径下,我们也可以通过参数的方式指定,通过这个配置文件,可以灵活方便的开始某些功能或调整某些参数,不用重新对源码进行修改、编译和发布了。 所以,我们工作当中有时希望可以把配置文件放在程序外,这样的话就可以做到配置与业务分离,在项目中使用...

ContiPerf轻量级的测试工具

ContiPerf 介绍 In order to assure software performance, software needs to be tested accordingly as early as possible - only weaknesses diagnosed early can be assessed quickly and cheaply. ContiPerf ...

Redis实现分布式锁

常用的分布式锁实现方式 分布式锁一般有三种实现方式: 数据库乐观锁; 基于 Redis 的分布式锁; 基于 ZooKeeper 的分布式锁。 分布式锁的可靠性 为了确保分布式锁可用,至少要确保锁的实现同时满足以下四个条件: 互斥性:在任意时刻,只有一个客户端能持有锁。 不会发生死锁:即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁(设置超时)。 具有容错性...

MySQL的四种事务隔离级别

事务的基本要素(ACID) 原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。 一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用...

JPA和MyBatis如何进行技术选型

背景 在我们平时的项目中,大家都知道可以使用JPA或者Mybatis作为ORM 层。对JPA和Mybatis如何进行技术选型?(http://www.spring4all.com/question/112) 我将从以下几个方面进行总结。 MySQL数据库使用规范 核心规范 不在数据库中做运算,复杂运算移到程序端进行。 控制单表数据量,建议单库不超300-400个表,单表不超过50个纯INT...

微信支付退款异常处理过程

PKIX path building failed

异常信息 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid cert...

Java编码规范

OOP 类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外:DO / BO / DTO / VO / AO。 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。 抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾;测试类 命名以它要测试的类的名称开始,以 Test 结尾。 POJO...