原文
How to store UTF8 characters in MySQL - Ubiq BI
引言
关于 《如何在MySQL中存储UTF8字符》 的一篇英文博客阅读和个人实战笔记。注意个人实验过程中使用了docker的Mysql 5.7 版本,读者可以根据自身情况调整。
https://ubiq.co/database-blog/how-to-increase-max-connections-in-mysql/
有时候连接Mysql时候我们会遇到“Too many connections”这样的报错,当然更多可能是在生产过程中碰到这样的问题,默认情况下Mysql的整体服务器连接数设置过低。
Sometimes MySQL server may give “Too many connections” error message when you try to connect to a MySQL database. Here’s how to increase max connections in MySQL to fix this problem.
2018年9 月 26 日,Oracle 官方宣布 Java 11 正式发布。这个版本中一共包含 17 个 JEP(JDK Enhancement Proposals,JDK 增强提案)。
JDK 11 是一个长期支持版本(LTS, Long-Term-Support),在编写本文的时间节点下和JDK17一样被用于编写项目代码的主流版本。
本文结合了各方资料整理出JDK11的新特性,工作上使用高版本JDK的机会确实不多,但是自己体验的过程中确实切身体会到JDK升级的好处。
https://www.baeldung.com/swagger-apioperation-vs-apiresponse
本文内容讨论的是 @ApiOperation 和 @ApiResponse 注解的优劣。
一个RestFul最重要的是具备“自描述能力”,所谓的自描述能力是能在返回结果的同时,告知客户端调用下
一步的行为,Swagger在一定程度上封装和规范了这些操作。
什么是Swagger?
Swagger represents a set of open-source tools built around OpenAPI Specification. It can help us design, build, document, and consume REST APIs.
Swagger代表了一套围绕OpenAPI规范建立的开源工具。它可以帮助我们设计、构建、记录REST APIs接口。其中最为常用的注解便是 @ApiOperation 和 @ApiResponse。
1 | @RestController |
下面分别介绍这两个注解的使用,最后是进行对比。
Best coding practices every java developer should follow
把标题翻译成中文在国内也是一个老生常谈的问题:编程习惯和编码规范。
这篇文章大部分观点和国内的规范习惯类似,令我好奇的是外国人是如何理解这些内容的?
注意本文的Tips排序是打乱的,个人把感兴趣放到了前面来了。这篇文章的评论区非常精彩,这里一并整合了评论区的读者观点。
不管是学习还是了解老外的思考方式,或是在评论区当中看读者的讨论和纠正错误,阅读本文都是值得推荐的。
抱着半信半疑的态度学习这些内容,你会得到比单纯的了解和接受建议更多的收获。
How to Use the Stdin, Stderr, and Stdout Streams in Bash – Linux Consultant
当Linux操作系统启动时,将会有三个流被打开。它们是stdin、stdout和stderr。
stdin 的全称是标准输入,用于接受用户的输入。
stdout 的完整形式是标准输出,用于将命令的输出存储到stdout流中。
stderr 的完整形式是标准错误,用于将任何命令产生的错误信息存储到数据流中。
stdin、stdout 和 stderr 的相应数字标识符值为0、1和2。
#rocketmq
首先注意本次讨论的RokcetMq源码版本为 4.9.4,距离5.0发布 的没有多久。
这一节针对RocketMq的生产者请求发送的部分细节进行阐述,主要包含了下面的内容:DefaultMQProducer 为生产者默认对象,这个对象继承自 ClientConfig,里面包含了请求者的通用配置,所以可以拆分为两个部分进行理解,第一部分为ClientConfig,第二部分为DefaultMQProducer。
ClientConfig 定义了一些配置的获取方法,定义了命名空间等参数。无论是消息的发送者还是消费者都是通用的。
下面根据本次的版本的源代码介绍相关参数。
名称 | 描述 | 参数类型 | 默认值 | 有效值 | 重要性 |
---|---|---|---|---|---|
namesrvAddr | NameServer的地址列表 | String | 从-D系统参数rocketmq.namesrv.addr或环境变量。NAMESRV_ADDR | ||
instanceName | 客户端实例名称 | String | 从-D系统参数rocketmq.client.name获取,否则就是DEFAULT | ||
clientIP | 客户端IP | String | RemotingUtil.getLocalAddress() | ||
namespace | 客户端命名空间 | String | |||
accessChannel | 设置访问通道 | AccessChannel | LOCAL | ||
clientCallbackExecutorThreads | 客户端通信层接收到网络请求的时候,处理器的核数 | int | Runtime.getRuntime().availableProcessors() | ||
pollNameServerInterval | 轮询从NameServer获取路由信息的时间间隔 | int | 30000,单位毫秒 | ||
heartbeatBrokerInterval | 定期发送注册心跳到broker的间隔 | int | 30000,单位毫秒 | ||
persistConsumerOffsetInterval | 作用于Consumer,持久化消费进度的间隔 | int | 默认值5000,单位毫秒 | ||
pullTimeDelayMillsWhenException | 拉取消息出现异常的延迟时间设置 | long | 1000,单位毫秒 | ||
unitName | 单位名称 | String | |||
unitMode | 单位模式 | boolean | false | ||
vipChannelEnabled | 是否启用vip netty通道以发送消息 | boolean | 从-D com.rocketmq.sendMessageWithVIPChannel参数的值,若无则是true | ||
useTLS | 是否使用安全传输。 | boolean | 从-D系统参数tls.enable获取,否则就是false | ||
mqClientApiTimeout | mq客户端api超时设置 | int | 3000,单位毫秒 | ||
language | 客户端实现语言 | LanguageCode | LanguageCode.JAVA |
在阿里云的官方网站提供了RocketMq的商用版本,但是个人在项目应用上发现和SpirngBoot以及Spring Cloud(Alibaba)等开源的RocketMQ依赖虽然可以正常兼容,但是依然出现了注解失效、启动报错,商用和开源版本的不兼容导致部分代码要重复编写的蛋疼问题。
这样的兼容问题不是简单加个SDK依赖,切换到商用配置就可以直接使用的(因为个人起初真就是这么想),为了避免后面再遇到这种奇葩的开发测试用开源RocketMq,生产环境需要使用商用集群的RocketMq的混合配置的业务场景,个人花了小半天时间熟读阿里云的接入文档,加上各种尝试和测试,总结出一套可以快速使用的兼容模板方案。
如果不了解阿里云商用RocketMq,可以看最后一个大节的【阿里云商用RocketMq介绍】介绍。个人的兼容方案灵感来自于官方提供的这个DEMO项目:springboot/java-springboot-demo。
注意本方案是基于SpringBoot2.X和 Spring cloud Alibaba 的两个项目环境构建项目基础,在SpringBoot上只做了生产者的配置,而在Spring Cloud Alibaba的Nacos上进行了生产者和消费者的完整兼容方案。
最后注意兼容集成的版本为商用RocketMq使用4.x版本,最近新出的5.X 的版本并未进行测试,不保证正常使用。
Best coding practices every java developer should follow
把标题翻译成中文在国内也是一个老生常谈的问题:编程习惯和编码规范。
这篇文章大部分观点和国内的规范习惯类似,令我好奇的是外国人是如何理解这些内容的?
注意本文的Tips排序是打乱的,个人把感兴趣放到了前面来了。这篇文章的评论区非常精彩,这里一并整合了评论区的读者观点。
不管是学习还是习老外的思考方式,或是大在评论区当中看读者的讨论和纠正错误,阅读本文都是值得推荐的。
抱着半信半疑的态度学习这些内容,你会得到比单纯的了解和接受建议更多的收获。