Java中关于货币金额的计算
BigDecimal的由来 由于互联网金额的高发达和高统一性,关于货币的金额基本都是精确到分,因此double在货币计算中可以说用武之地比较小,Java提供了一个非常强大的货币金额计算工具:BigDecimal BigDecimal的基本使用==如果需要进行精确计算,务必将对应数字转化为String来构造BigDecimal== 123456789101112131415161718192021222324252627282930313233public static void main(String[] args) { double a = 10.1234; double b = 5.3134; BigDecimal bigDecimalA = new BigDecimal(String.valueOf(a)); BigDecimal bigDecimalB = new BigDecimal(String.valueOf(b)); /** * 使用BigDecimal做加法运算 ...
Linux远程拒绝服务漏洞
漏洞详情 Linux 以及 FreeBSD 等系统内核上存在严重远程DoS漏洞,攻击者可利用该漏洞构造并发送特定的 SACK 序列请求到目标服务器导致服务器崩溃或拒绝服务。 风险等级高风险->远程发送特殊构造的攻击包,导致目标 Linux 或 FreeBSD 服务器崩溃或服务不可用。 影响版本 目前已知受影响版本如下: FreeBSD 12(使用到 RACK TCP 协议栈) CentOS 5(Redhat 官方已停止支持,不再提供补丁) CentOS 6 CentOS 7 Ubuntu 18.04 LTS Ubuntu 16.04 LTS Ubuntu 19.04 Ubuntu 18.10 安全版本 各大Linux发行厂商已发布内核修复补丁,详细内核修复版本如下: CentOS 6 :2.6.32-754.15.3 CentOS 7 :3.10.0-957.21.3 Ubuntu 18.04 LTS:4.15.0-52.56 Ubuntu 16.04 LTS:4.4.0-151.178 修复建议 请参照上述安全版本升级 Linux 服务器内核,参考操作如下...
线上问题-long型数据复现
起因因线上long型数据丢失精度问题未解决彻底,本地线上app端出现了该问题,探索新一步的解决方案。 经过因线上获取该字段的接口数量较多,改动起来代价比较高,所以经过多方验证,讨论出了一套解决方案,因框架为Spring boot,所以新建了以下方法注入,来解决该问题,初见成效。 123456789101112131415161718192021222324252627282930313233import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.module.SimpleModule;import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;import org.springframework.context.annotation.Configuration;import org.springframework.http.converter.HttpMessageConverter...
使用 SCF 自动刷新被 CDN 缓存的 COS 资源
背景当静态内容需要更新时,通常会往 COS 覆盖上传一个更新版本的资源或删除该资源。当重新部署时,则 CDN 的某些边缘节点可能会仍然缓存旧资源。缓存过期时间太短,则会影响到加速的效果。 根据上述情况,需要使用 CDN 控制台上的 缓存刷新 功能,对指定 URL 进行手动刷新操作,实现删除无效缓存文件或者更新资源。 在此将结合 COS 和 SCF 的功能特性,在 COS 文件更新时,实现自动刷新 CDN 缓存的效果。 准备工作 腾讯云账户,需具备 COS、CDN、SCF 等产品的访问权限。 创建存储桶,并在该存储桶上绑定了 CDN 加速域名。 确保 COS 的存储桶的所属地域支持 SCF 产品功能,暂不支持跨地域调用。 准备好可调用 CDN 刷新接口的云 API 密钥,以及下载 SCF 刷新 CDN 示例代码。 工作步骤创建SCF函数 登录 SCF 控制台,单击函数服务,选择与静态内容相同的地域并创建函数。如下图所示: 在 “新建函数” 页面,选择 “空白函数”,输入函数名称(如 refresh_cdn),设置运行环境(示例代码使用 Node.js 语言,因此运行环境设置...
搭建ipsec VPN 服务器
前言使用 Linux 脚本一键快速搭建自己的 IPsec VPN 服务器。支持 IPsec/L2TP 和 Cisco IPsec 协议,可用于 Ubuntu/Debian/CentOS 系统。你只需提供自己的 VPN 登录凭证,然后运行脚本自动完成安装。 IPsec VPN 可以加密你的网络流量,以防止在通过因特网传送时,你和 VPN 服务器之间的任何人对你的数据的未经授权的访问。在使用不安全的网络时,这是特别有用的,例如在咖啡厅,机场或旅馆房间。 我们将使用 Libreswan 作为 IPsec 服务器,以及 xl2tpd 作为 L2TP 提供者。 安装 Docker首先,在你的 Linux 服务器上 安装并运行 Docker。 注: 本镜像不支持 Docker for Mac 或者 Windows。 下载预构建的可信任镜像可在 Docker Hub registry 下载: 1docker pull hwdsl2/ipsec-vpn-server 如何使用本镜像环境变量这个 Docker 镜像使用以下几个变量,可以在一个 env 文件中定...
Java常用工具类集锦
NumberUtils工具类判断字符串是否是数字NumberUtils.isNumber(“5.96”);//结果是true NumberUtils.isNumber(“s5”);//结果是false NumberUtils.isNumber(“0000000000596”);//结果是true 判断字符串中是否全为数字NumberUtils.isDigits(“0000000000.596”);//false NumberUtils.isDigits(“0000000000596”);//true 字符串转换为整数NumberUtils.toInt(“5”); NumberUtils.toLong(“5”); NumberUtils.toByte(“3”); NumberUtils.toFloat(“3.2”); NumberUtils.toDouble(“4”); NumberUtils.toShort(“3”); 找出最大的一个NumberUtils.max(newin...
hexo持续集成
申请注册coding,然后通过coding升级至腾讯云开发者平台 https://feedback.coding.net/topics/7257 新建仓库后开通持续集成功能将hexo的源代码提交至coding仓库,然后选择持续集成,进行配置,简单配置如下: 1234567891011121314151617181920212223242526272829303132333435363738394041424344pipeline { agent { label "node-8" } stages { stage("检出") { steps { sh 'ci-init' checkout( [$class: 'GitSCM', branches: [[name...
SpringCloudEureka源码详解
概述Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。 由于微服务概念的引入,使大型服务在一定程度上彻底的解耦,当服务集群足够庞大的时候,服务治理成为了微服务的痛点之一。 Eureka是Spring Could中服务发现的推荐组件,保证服务的高可用性,它有着丰富的API,使得Eureka作为服务发现与治理都比较方便。 架构与原理 Eureka Server:服务的注册中心,负责维护注册的服务列表。 Service Provider:服务提供方,作为一个Eureka Client,向Eureka Server做服务注册、续约和下线等操作,注册的主要数据包括服务名、机器ip、端口号、域名等等。 Service Consumer:服务消费方,作为一个Eureka Client,向Eureka Server获取Service Provider的注册信息,并通过远程调用与Service Provider进行通信 Eureka Server作为一个独立的部署单元,以REST API的形式为服务实例提供了注册、管理和查询等操作。同时,...
mysql主从同步带来的影响及部分解决方案
前因 场景1:线上的数据异步同步使用的是rabbitmq,当对数据库数据进行增删改时候会发送一条mq消息到同步服务,同时进行查库写入es。 场景2:线上redis数据读取mysql中数据写入,由于该数据为访问量巨大的数据,所以未设置过期时间,有增删改操作时,会读库重新写入redis。 场景3:线上数据库实时读取,当修改为某项后异步刷新列表,发现该数据未进行修改,重新刷新后才显示正确数据 排查过程以上问题,我们排查过程比较迅速,第一时间对比es,redis,mysql中数据,发现了数据不同步的情况,然后查看代码,发现未有对数据进行代码层改动,我们已知数据库为主从模式,由此主从延时故障找到。 解决方案方案1:发mq消息时,直接将整条数据发送并且写入。但是一旦数据量过大,会造成压力,并且有删改的情况出现时,我们一般不会去获取整条数据,还是得查询数据库后发送 方案2:redis设置有效期,过完有效期redis会重新加载数据入库,但是有效期内的数据是不正确的 方案3:增加主库数据库读,在写mq,写redis这些场景下直接读取主库,避免了碰到主从延时的问题,数据也能及时更新,但是此种方案有...
线上long型数据丢失精度问题
前因 在dev和qa环境正常获取到用户的userId,dev和qa环境的userId长度都不长,通过userId查询数据,显示数据完全正常。 但是上线之后,很快有运营反馈使用userId查询不出结果,经过验证发现确实这样,开始排查问题 排查过程由于我们项目后端使用的是接口层与业务层隔离的架构,所以先在业务层加上日志,拿到日志之后和web层获取到的数据进行对比。对比结果发现该userId在较长时候确实出现了不一致的情况,但是业务层的数据和数据库中的数据完全一致,哪一步操作导致精度丢失了呢? 进一步排查,在接口层打输入输出日志,发现接口层的输入输出与业务层完全一致,在此种情形下,我们有点摸不着头脑,还以为是我们读错了库的原因。 验证数据库后发现,库没读错,数据完全和库一致,那只能是传输过程中出现问题了。 我们使用的是chrome浏览器,接口层数据是直接使用network扩展里面的preview,经过仔细排查发现,preview的数据和response里面的数据不一致,至此问题找到: 前端接受json数据时,精度丢失。 解决方案因为字段固定的缘故,我们不准备从后端进行更改,准备web...