金融系统中正确的金额计算及存储方式

金融系统中正确的金额计算及存储方式

经典的精度丢失问题

Java中的类型float、double用来做计算会有精度丢失问题,下面来看下面的示例。

1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) {
test1();
test2();
}

private static void test1() {
double totalAmount = 0.09;
double feeAmount = 0.02;
double tradeAmount = totalAmount - feeAmount;
System.out.println(tradeAmount);
}

上面的程序输出结果是多少?

0.07?非也!

正确的结果是:

1
0.06999999999999999

为什么是这样?


Nginx配置经验

1. Nginx 会导致 带下划线命名的Header参数丢失

nginx对下划线的头信息做了限制

  1. 不用下划线

  2. 配置nginx 参数

    underscores_in_headers on; (默认 underscores_in_headers 为off)

2. nginx proxy_pass后的url加不加/的区别

第一种:proxy_pass后缀不加斜杠

1
2
3
location /abc/ {
proxy_pass http://172.16.1.38:8080;
}

第二种:proxy_pass后缀加斜杠

1
2
3
location /abc/ {
proxy_pass http://172.16.1.38:8081/;
}

上面两种配置,区别只在于proxy_pass转发的路径后是否带/


JVM8的启动参数

1. JVM版本

本文所描述的启动参数在如下JVM版本测试通过,

1
2
3
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)

启动参数的推荐值主要针对的场景为:4核CPU + 4G内存的机器配置,部署单应用,应用的堆内存使用量在1-2GB。

2. 服务器配置

参数名 说明 默认值 推荐值 备注
server Java Hotsport Server VM 64位机器默认为server选项 启用 -

Git 合并多个Commit

Git 合并多个Commit

在使用 Git 作为版本控制的时候,我们可能会由于各种各样的原因提交了许多临时的 commit,而这些 commit 拼接起来才是完整的任务。那么我们为了避免太多的 commit 而造成版本控制的混乱,通常我们推荐将这些 commit 合并成一个。

首先你要知道自己想合并的是哪几个提交,可以使用git log命令来查看提交历史,假如最近4条历史如下:


git push提交成功后如何撤销回退

git push提交成功后如何撤销回退

我们在使用Git进行版本控制时,有可能会出现这种情况。git push后发现提交的内容不是想要的,这时候我们怎么做呢,提交上去的内容是没有删除按钮的(比如github,或码云)。所以我们需要一些手段将提交上去内容撤销下来。

首先将本地的内容回退到自己想要的版本。回退版本我一般使用

git reset


GIT FORK 相关操作

GIT FORK 相关操作

fork 了别人的仓库后,原作者又更新了仓库,如何将自己的代码和原仓库保持一致?

假设远程源仓库为A,自己fork后的远程仓库为B,自己本地的代码仓库为C

  1. 给 fork下来的仓库 配置一个 remote源

    一般来说从自己远程仓库B去拉代码后就会有remote

    使用 git remote -v 查看远程状态。

    git remote -v
    origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
    origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)

SpringBoot集成Mongodb

SpringBoot集成Mongodb

1. SpringBoot集成

pom.xml

1
2
3
4
5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>${spring.boot.version}</version>
</dependency>

application.properties

1
spring.data.mongodb.uri=mongodb://user:pwd@ip:27017/database

集群版mongodb

1
spring.data.mongodb.uri=mongodb://user:pwd@ip1:port1,ip2:port2/database

2. 下划线转驼峰


令人惊讶的网页动画效果工作流介绍

The Ultimate Workflow of Creating Scroll-Based Animations

原文地址

Why Scroll?
Scrolling is the fundamental interaction of the Internet. Having animated elements triggered on scroll is a common practice, but what if you want to take it to another level? For example, websites like r2d3 — A visual introduction to machine learning and NASA: Prospect all features full-scale animations that users can control and interact with through scrolling.

I was really drawn to this form of interaction, which has inspired me to create OKAI — An Interactive Introduction to Artificial Intelligence(AI). Every chapter (except Chapter 0) features full-scale scroll-based animations that visualize and break down complicated concepts in AI. Allowing users to control the pace of the animations give them a sense of control and security when exploring the unknown world of AI principles.

https://okai.brown.edu/chapter1.html

In this article, I am presenting the workflow of how these animations are created and controlled through scrolling.


Linux上的常用文件传输方式介绍与比较

Linux 上的常用文件传输方式介绍与比较

  • ftp 作为最常用的入门式的文件传输方法,使用简单,易于理解,并且可以实现脚本自动化;
  • rcp 相对于 ftp 可以保留文件属性并可递归的拷贝子目录;
  • scp 利用 ssh 传输数据,并使用与 ssh 相同的认证模式,相对于 rcp 提供更强的安全保障;
  • wget,实现递归下载,可跟踪 HTML 页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构,适合实现远程网站的镜像;
  • curl 则适合用来进行自动的文件传输或操作序列,是一个很好的模拟用户在网页浏览器上的行为的工具;
  • rsync 更适用于大数据量的每日同步,拷贝的速度很快,相对 wget 来说速度快且安全高效。

各项对比


Linux 挂载新硬盘

为Linux 挂载新硬盘

最近新购入一块3T硬盘,准备划给Linux 系统2T,用来玩数据分析。开始新硬盘的挂载之旅

1.fdisk -l 查找新硬盘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@sloong sloong]# fdisk -l

磁盘 /dev/sda:3000.6 GB, 3000592982016 字节,5860533168 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节

WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

磁盘 /dev/sdb:240.1 GB, 240057409536 字节,468862128 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: A3B5CB97-6552-486A-8323-77AFD94DC178


# Start End Size Type Name
1 2048 1023999 499M Windows recover Basic data partition
2 1024000 1226751 99M EFI System EFI system partition
......

可以看到新磁盘为 /dev/sda, 3000G, 扇区 0.5k/4k ,IO大小 4k/4k


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×