[每日短篇] 17 - 正确使用随机数 Random

news/2024/7/5 22:02:48

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

随机数在系统开发中几乎是不可避免的一个需求,在大多数面试宝典一定会告诉你所谓的随机数其实是“伪”随机数,除此之外也就没有什么别的了。实际上这条知识本身已经是非常落后了,更不用说当它还是正确的时候,用处也并不是很大。本篇要提到的正确使用随机数的要点,是一个比较常见的错误,甚至某不只是世界500强公司也曾经在其产品中出现过这种问题,还改了 2 次才解决问题。

从根本上说,一个非常容易犯的错误出在对随机数种子的认识上,指定随机数种子一种用途是重复产生相同的随机数序列,另外更常用的是希望随机数序列可以更随机一点,避免产生相近的随机数。实际上现在常用的伪随机数序列是用线性同余算法生成的,给定一个种子连续计算产生的伪随机数是均匀分布的,如果不断指定新的随机数种子,会影响到序列的分布。从随机数生成算法和种子作用,很容易推导出几个常犯的错误:

  1. 不断指定随机数种子导致随机数序列质量不高
  2. 并发编程中并发指定与时间相关的随机数种子导致多个随机数发生器产生相同的随机数序列
  3. 不指定随机数种子依赖随机数发生器缺省初始化的随机数种子,又频繁创建随机数发生器,导致随机数序列质量不高
  4. 不指定随机数种子依赖随机数发生器缺省初始化的随机数种子,缺省初始化的随机数种子又与时间相关,又频繁或者并发创建随机数发生器,导致产生重复的随机数序列
  5. 并发使用非线程安全的随机数发生器导致多次获取到同一个随机数

要正确使用随机数,需要注意以下几点:

  1. 随机数发生器一旦初始化后应长期重复使用,避免临时创建随机数发生器
  2. 如果有并发使用的场景,注意检查随机数发生器是否是线程安全的,如果不是则要避免并发或者额外加锁
  3. 如果希望将来通过相同的随机数种子重放随机数序列,从而实现重放业务的目的,要考虑避免并发使用随机数发生器以免无法完全重复业务处理过程

转载于:https://my.oschina.net/u/1762727/blog/2934081


http://lihuaxi.xjx100.cn/news/236744.html

相关文章

模拟器抓取https方法

说明:为了解决安卓手线上不能抓取https请求,以下整理通过模拟器抓取https请求方法如下:前置条件:安卓模拟器1、夜神抓包工具:fiddler、charles不要安装证书 第一步安装模拟器 可以按照夜神模拟器步骤省略 第二步de.rob…

区块链分享

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链行业现状 政府关注 企业极力研究 学术取得共识 学校和培训机构设立学科 资方积极参与 争先恐后炒币 技术不完善 借区块链热点的传销和骗局横…

[转] vuewebpack多页面配置

前言 最近由于项目需求,选择使用vue框架,webpack打包直接使用的vue-cli,因为需要多页面而vue-cli只有单页面,所以就决定修改vue-cli的配置文件来满足开发需求。 html-webpack-plugin 实现需求需要用到这个插件, 具体信…

VBA注释临时

Sub shishi() 按ABCDE为多选题定义答案; A.沙利度胺 B.异烟肼 C.利福平 d.氯法齐明 E.氨苯砜 46.各型麻风病的首选药物为(D) A.沙利度胺 B.异烟肼 C.利福平 d.氯法齐明 E.氨苯砜 45&#xf…

ABS是啥,为什么区块链可以与它完美结合?

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 房地产市场在各方调控下终于进入新的平稳期,但租房市场近日来却是水涨船高。抛开传统的租售比概念不谈,今天小编想和大家谈…

预告 · Flutter Live 2018 全球同步直播

Flutter Live 2018 是 Google 在伦敦线下举办,并面向全球线上直播的一次 Flutter 庆祝活动。在 2018 年已经过去的这段时间里,Flutter 有着非常大的进展: 2 月底在世界移动大会 (MWC) 上宣布了第一个 Beta 版发布;5 月的 Google I/O 大会上发…

区块链+5G=智慧城市?

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 智慧城市是一个非常大的产业范畴,同时包括面向政府的智慧治理、面向市民的智慧民生和面向产业的智慧经济三大板块,涵盖了智…

阿里巴巴连任 Java 全球管理组织席位

百度智能云 云生态狂欢季 热门云产品1折起>>> 11 月 23 日,阿里巴巴宣布连任 Java 全球管理组织 JCP 最高执行委员会委员,任期从 2018 年 12 月 4 号开始,为期两年。阿里表示,这意味将有更多中国开发者的声音被引入 Ja…