Let them eat cake

《晋书·惠帝纪》:帝尝在华林园,闻虾蟆声,谓左右曰:“此鸣者为官乎,私乎?”或对曰:“在官地为官,在私地为私。”及天下荒乱,百姓饿死,帝曰:“何不食肉糜?”其蒙蔽皆此类也。

报任少卿书

太史公牛马走司马迁再拜言。少卿足下:曩者辱赐书,教以慎于接物,推贤进士为务。意气懃懃恳恳,若望僕不相师,而用流俗人之言。僕非敢如是也。僕虽罢驽,亦尝侧闻长者之遗风矣。顾自以为身残处秽,动而见尤,欲益反损,是以独郁悒而无谁语。谚曰:“谁为为之?孰令听之?”盖鍾子期死,伯牙终身不复鼓琴。何则?士为知己者用,女为说己者容。若僕大质已亏缺矣,虽才怀随和,行若由夷,终不可以为荣,适足以发笑而自点耳。书辞宜答,会东从上来,又迫贱事,相见日浅,卒卒无须臾之间,得竭指意。今少卿抱不测之罪,涉旬月,迫季冬;僕又薄从上上雍,恐卒然不可讳。是僕终已不得舒愤懑以晓左右,则长逝者魂魄私恨无穷。请略陈固陋,阙然久不报,幸勿过。

僕闻之:修身者,智之符也;爱施者,仁之端也;取与者,义之表也;耻辱者,勇之决也;立名者,行之极也。士有此五者,然后可以託于世,列于君子之林矣。故祸莫憯于欲利,悲莫痛于伤心,行莫丑于辱先,而诟莫大于宫刑。刑馀之人,无所比数,非一世也,所从来远矣。昔卫灵公与雍渠同载,孔子适陈;商鞅因景监见,赵良寒心;同子参乘,爰丝变色。自古而耻之。夫以中才之人,事有关于宦竖,莫不伤气,而况于忼慨之士乎!如今朝虽乏人,柰何令刀锯之馀荐天下豪隽哉!

僕赖先人绪业,得待罪辇毂下,二十馀年矣。所以自惟,上之,不能纳忠效信,有奇策才力之誉,自结明主;次之,又不能拾遗补阙,招贤进能,显岩穴之士;外之,不能备行伍,攻城野战,有斩将搴旗之功;下之,不能累日积劳,取尊官厚禄,以为宗族交游光宠。四者无一遂,苟合取容,无所短长之效,可见于此矣。乡者,僕亦尝厕下大夫之列,陪外廷末议。不以此时引维纲,尽思虑。今以亏形为埽除之隶,在阘茸之中,乃欲卯首信眉,论列是非,不亦轻朝廷,羞当世之士邪!嗟乎!嗟乎!如僕,尚何言哉!尚何言哉!

且事本末未易明也。僕少负不羁之才,长无乡曲之誉,主上幸以先人之故,使得奉薄技,出入周卫之中。僕以为戴盆何以望天,故绝宾客之知,忘室家之业,日夜思竭其不肖之材力,务壹心营职,以求亲媚于主上。而事乃有大谬不然者。

夫僕与李陵俱居门下,素非相善也。趣舍异路,未尝衔杯酒接殷勤之懽。然僕观其为人,自奇士,事亲孝,与士信,临财廉,取予义,分别有让,恭俭下人,常思奋不顾身以徇国家之急。其素所畜积也,僕以为有国士之风。夫人臣出万死不顾一生之计,赴公家之难,斯已奇矣。今举事壹不当,而全躯保妻子之臣随而媒孽其短,僕诚私心痛之。且李陵提步卒不满五千,深践戎马之地,足历王庭,垂饵虎口,横挑彊胡,卯亿万之师,与单于连战十馀日,所杀过当。虏救死扶伤不给,旃裘之君长咸震怖,乃悉徵其左右贤王,举引弓之民,一国共攻而围之。转鬭千里,矢尽道穷,救兵不至,士卒死伤如积。然陵一呼劳军,士无不起,躬自流涕,沬血饮泣,张空弮,冒白刃,北嚮争死敌者。陵未没时,使有来报,汉公卿王侯皆奉觞上寿。后数日,陵败书闻,主上为之食不甘味,听朝不怡。大臣忧惧,不知所出。僕窃不自料其卑贱,见主上惨凄怛悼,诚欲效其款款之愚,以为李陵素与士大夫绝甘分少,能得人之死力,虽古之名将,不能过也。身虽陷败,彼观其意,且欲得其当而报汉。事已无可柰何,其所摧败,功亦足以暴于天下矣。僕怀欲陈之,而未有路,适会召问,即以此指推言陵之功,欲以广主上之意,塞睚眦之辞。未能尽明,明主不深晓,以为僕沮贰师,而为李陵遊说,遂下于理。拳拳之忠,终不能自列。因为诬上,卒从吏议。家贫,财赂不足以自赎,交遊莫救;左右亲近不为壹言。身非木石,独与法吏为伍,深幽囹圄之中,谁可告诉者!此正少卿所亲见,僕行事岂不然邪?李陵既生降,𬯎其家声;而僕又茸以蚕室,重为天下观笑。悲夫!悲夫!事未易一二为俗人言也。

僕之先人,非有剖符丹书之功,文史星暦近乎卜祝之间,固主上所戏弄,倡优畜之,流俗之所轻也。假令僕伏法受诛,若九牛亡一毛,与蝼蚁何异?而世又不与能死节者比,特以为智穷罪极,不能自免,卒就死耳。何也?素所自树立使然也。人固有一死,死有重于泰山,或轻于鸿毛,用之所趋异也。太上不辱先,其次不辱身,其次不辱理色,其次不辱辞令,其次诎体受辱,其次易服受辱,其次关木索被棰楚受辱,其次剔鬄毛髮婴金铁受辱,其次毁肌肤断支体受辱,最下腐刑,极矣。传曰:“刑不上大夫。”此言士节不可不厉也。猛虎处深山,百兽震恐,及其在阱槛之中,摇尾而求食,积威约之渐也。故士有画地为牢势不入,削木为吏议不对,定计于鲜也。今交手足,受木索,暴肌肤,受榜棰,幽于圜墙之中。当此之时,见狱吏则头枪地,视徒隶则正惕息。何者?积威约之势也。及已至此,言不辱者,所谓彊颜耳,曷足贵乎!且西伯,伯也,拘于牖里;李斯,相也,具于五刑;淮阴,王也,受械于陈;彭越、张敖,南乡称孤,繫狱具罪;绛侯诛诸吕,权倾五伯,囚于请室;魏其,大将也,衣赭衣,关三木;季布为朱家钳奴;灌夫受辱居室。此人皆身至王侯将相,声闻邻国,及罪至罔加,不能引决自财,在尘埃之中,古今一体,安在其不辱也!由此言之,勇怯,势也;彊弱,形也。审矣!曷足怪乎?且夫人不能蚤自财绳墨之外,以稍陵夷至于鞭棰之间,乃欲引节,斯不亦远乎!古人所以重施刑于大夫者,殆为此也。

夫人情莫不贪生恶死,念亲戚,顾妻子,至激于义理者不然,乃有所不得已也。今僕不幸,蚤失二亲,无兄弟之亲,独身孤立,少卿视僕于妻子何如哉?且勇者不必死节,怯夫慕义,何处不勉焉!僕虽怯懦耎欲苟活,亦颇识去就之分矣,何至自湛溺累绁之辱哉!且夫臧获婢妾犹能引决,况若僕之不得已乎!所以隐忍苟活,函粪土之中而不辞者,恨私心有所不尽,鄙没世而文采不表于后也。

古者富贵而名摩灭,不可胜记,唯俶傥非常之人称焉。盖西伯拘而演周易;仲尼厄而作春秋;屈原放逐,乃赋离骚;左丘失明,厥有国语;孙子髕脚,兵法修列;不韦迁蜀,世传吕览;韩非囚秦,说难、孤愤。诗三百篇,大氐圣贤发愤之所为作也。此人皆意有郁结,不得通其道,故述往事,思来者。及如左丘明无目,孙子断足,终不可用,退论书策以舒其愤,思垂空文以自见。

僕窃不逊,近自托于无能之辞,网罗天下放失旧闻,考之行事,综其终始,稽其成败兴坏之理,上计轩辕,下至于兹,为十表,本纪十二,书八章,世家三十,列传七十,凡百三十篇,亦欲以究天人之际,通古今之变,成一家之言。草创未就,适会此祸,惜其不成,是以就极刑而无愠色。僕诚已著此书,藏诸名山,传之其人通邑大都,则僕偿前辱之责,虽万被戮,岂有悔哉!然此可为智者道,难为俗人言也。

且负下未易居,下流多谤议,僕以口语遇遭此祸,重为乡党戮笑,污辱先人,亦何面目复上父母丘墓乎?虽累百世,垢弥甚耳!是以肠一日而九回,居则忽忽若有所亡,出则不知所如往。每念斯耻,汗未尝不发背霑衣也。身直为闺阁之臣,宁得自引深臧于岩穴邪?故且从俗浮湛,与时俯仰,以通其狂惑。今少卿乃教以推贤进士,无乃与僕之私指剌谬乎。今虽欲自雕瑑,曼辞以自解,无益,于俗不信,祗取辱耳。要之,死日然后是非乃定。书不能尽意,故略陈固陋,谨再拜。

Developer Weekly 8

Learning about JVM Garbage Collection and the mechanics behind each of the Collector Algorithms is as important as learning Java language features. High-level details of the algorithms give a perspective about the lifecycle of objects, the probable failures (like an out-of-memory exception, memory leaks etc.,) and how the failures can be averted.
JVM Garbage Collection Basics

HashMap is a dictionary data structure provided by java. It’s a Map-based collection class that is used to store data in Key & Value pairs. In this article, we’ll be creating our own hashmap implementation.
The benefit of using this data structure is faster data retrieval. It has data access complexity of O(1) in the best case.

HashMap Implementation for Java

某天晚上看到曹大在群里指点江山,折服。感叹为何曹大如此渊博,遂决定从头到尾研读完他所有的博文。
前后共花了一个月的时间,今天终于读完了(2020-11-24~2020-12-26),总共 118 篇。从 15 年 10 月 31 日开始的第一篇,到今天,总共写了 5 年多的时间。基本上每半个月产出一篇,非常稳定。
从最初讲具体的工作,例如将 MySQL 数据导入到 ES,到近期的《中台的末路》、《架构的腐化》、《工程师应该怎么学习》等名篇,水平一步步提高,视野也在一步步变大。
这些博文里很多内容都是从工作中提炼、总结出来的,这需要对自己所做的工作非常熟悉,并且需要做很多思考才行。这对我们而言,是有启发的。
还有一些是论文或文档的翻译,翻译它们而不是仅仅看一遍,对我们深刻理解内容是很有帮助的。连曹大都这样做了,我们有什么理由不做呢?

那些年曹大写过的博客

泊松分布的现实意义是什么,为什么现实生活多数服从于泊松分布?

Go 语言高性能编程

A useful introduction to Mixins in Vue, why they are important and how to use them in your workflow.

Understanding Mixins in Vue JS

Git and Git Flow Cheat Sheet

Gleam is a high performance and efficient distributed execution system, and also simple, generic, flexible and easy to customize.

彼得·林奇

  • 不要相信各种理论。多少世纪以前,人们听到公鸡叫后太阳升起,于是认为太阳之所以升起是由于公鸡打鸣。今天,鸡叫如故。但是每天为解释股市上涨的原因及华尔街产生影响的新论点,却总让人困惑不已。比如:某一会议赢得大酒杯奖啦,日本人不高兴啦,某种趋势线被阻断啦,”每当我听到此类理论。我总是想起那打鸣的公鸡”。
  • 不要相信专家意见。专家们不能预测到任何东西。虽然利率和股市之间确实存在着微妙的相互联系,我却不信谁能用金融规律来提前说明利率的变化方向。
  • 不要相信数学分析。“股票投资是一门艺术,而不是一门科学”。对于那些受到呆板的数量分析训练的人,处处都会遇到不利因素,如果可以通过数学分析来确定选择什么样的股票的话,还不如用电脑算命。选择股票的决策不是通过数学做出的,你在股市上需要的全部数学知识是你上小学四年级就学会了的。
  • 不要相信投资天赋。在股票选择方面,没有世袭的技巧。尽管许多人认为别人生来就是股票投资人,而把自己的失利归咎为悲剧性的天生缺陷。我的成长历程说明,事实并非如此。在我的摇篮上并没有吊着股票行情收录机,我长乳牙时也没有咬过股市交易记录单,这与人们所传贝利婴儿时期就会反弹足球的早慧截然相反。
  • 你的投资才能不是来源于华尔街的专家,你本身就具有这种才能。如果你运用你的才能,投资你所熟悉的公司或行业,你就能超过专家。
  • 每支股票后面都有一家公司,了解公司在干什么!你得了解你拥有的(股票)和你为什么拥有它。“这只股票一定要涨”的说法并不可信。
  • 拥有股票就像养孩子一样–不要养得太多而管不过来。业余选股者大约有时间跟踪8-12个公司,在有条件买卖股票时,同一时间的投资组合不要超过5家公司。
  • 当你读不懂某一公司的财务情况时,不要投资。股市的最大的亏损源于投资了在资产负债方面很糟糕的公司。先看资产负债表,搞清该公司是否有偿债能力,然后再投钱冒险。
  • 避开热门行业里的热门股票。被冷落,不再增长的行业里的好公司总会是大赢家。
  • 对于小公司,最好等到他们赢利后再投资。
  • 公司经营的成功往往几个月,甚至几年都和它的股票的成功不同步。从长远看,它们百分之百相关。这种不一致才是赚钱的关键,耐心和拥有成功的公司,终将得到厚报。
  • 如果你投资1000美元于一只股票,你最多损失1000美元,而且如果你有耐心的话,你还有等到赚一万美元的机会。一般人可以集中投资于几个好的公司,基金管理人却不得不分散投资。股票的只数太多,你就会失去集中的优势,几只大赚的股票就足以使投资生涯有价值了。
  • 在全国的每一行业和地区,仔细观察的业余投资者都可以在职业投资者之前发现有增长前景的公司。
  • 股市下跌就象科罗拉多一月的暴风雪一样平常,如果你有准备,它并不能伤害你。下跌正是好机会,去捡那些慌忙逃离风暴的投资者丢下的廉价货。
  • 每人都有炒股赚钱的脑力,但不是每人都有这样的肚量。如果你动不动就闻风出逃,你不要碰股票,也不要买股票基金。11月17日之每日名言
  • 事情是担心不完的。避开周末悲观,也不要理会股评人士大胆的最新预测。卖股票得是因为该公司的基本面变坏,而不是因为天要塌下来。
  • 没有人能预测利率、经济或股市未来的走向,抛开这样的预测,注意观察你已投资的公司究竟在发生什么事。
  • 你拥有优质公司的股份时,时间站在你的一边。你可以等待–即使你在前五年没买沃玛特,在下一个五年里,它仍然是很好的股票。当你买的是期权时,时间却站在了你的对面。
  • 如果你有买股票的肚量,但却没有时间也不想做家庭作业,你就投资证券互助基金好了。当然,这也要分散投资。你应该买几只不同的基金,它们的经理追求不同的投资风格:价值型、小型公司、大型公司等。投资六只相同风格的基金不叫分散投资。
  • 资本利得税惩罚的是那些频繁换基金的人。当你投资的一只或几只基金表现良好时,不要随意抛弃它们。要抓住它们不放。
  • 买进有盈利能力企业的股票,在没有极好的理由时不要抛掉。
  • 投资股市绝不是为了赚一次钱,而是要持续赚钱。如果想靠一“博”而发财,你大可离开股市,去赌场好了。
  • 我从来不在我不懂的事情上投入大量的金钱。
  • 一个钟情于计算,沉迷于资产负债表而不能自拔的投资者,多半不能成功。
  • 某只股票比以前便宜不能成为买进的理由,同样仅仅因为它比以前贵就卖掉也不是理性的方式。
  • 人们宁愿承认是一个瘾君子,也不愿承认是一个短期投资者。
  • 我投资组合最好的公司往往是购股三五年才利润大增而不在三五个星期之后。
  • 要投资于企业,而不要投机于股市。
  • 想赚钱的最好方法,就是将钱投入一家成长中小公司,这家公司近几年内一直都出现盈利,而且将不断地成长。
  • 个别投资人的优势在于他没有时间压力,可以仔细思考,等待最好时机。如果要他每星期或每个月都要买卖股票,他肯定会发疯的。
  • 一般消息来源者所讲的与他实际知道的有很大的差异,因此,在对投资方向作出选择之前,一定深入了解并考察公司,做到有的放矢。
  • 为了赚钱,我们可以这样假设,他敢买进必定是对他所看到事物有信心。而一个面临内部人员大量收购压力的公司很少会倒闭。
  • 投资人不必坚持投资拥有神奇管理系统、并处在激烈竞争环境中顶尖公司的股票,只要选择经营成效还不错,股价低的股票,一样可以赚钱。
  • 最恐怖的陷阱就是买到令人振奋却没有盈余的公司股票,以及便宜的统计数字。
  • 在股市赔钱的原因之一,就是一开始就研究经济情况,这些观点直接把投资人引入死角。
  • 购买股票的最佳时段是在股市崩溃或股价出现暴跌时。
  • 不相信理论、不靠市场预测、不靠技术分析,靠信息灵通,靠调查研究。
  • 试图跟随市场节奏,你会发现自己总是在市场即将反转时退出市场,而在市场升到顶部时介入市场。人们会认为碰到这样的事是因为自己不走运,实际上,这只是因为他们想入非非。没有人能够比市场精明,人们还认为,在股市大跌或回调时投资股票是很危险的。其实此时只有卖股才是危险的,他们忘记了另一种危险,踏空的危险,即在股市飞涨的时候手中没有股票。
  • 这个简单的道理,股票价格与公司赢利能力直接相关,经常被忽视,甚至老练的投资人也忽视而不见。观看行情接收器的人开始认为股票价格有其自身的运动规律,他们跟随价格的涨落,研究交易模式,把价格波动绘成图形,在本应关注公司收益的时,他们却试图理解市场在做什么。如果收益高,股价注定要涨,可能不会马上就涨,但终究会涨。而如果收益下降,可以肯定股价一定会跌。
  • 投资成功的关键之一: 把注意力集中在公司上而不是股票上。
  • 我不能说我有先见之明,知道股灾将要降临。市场过份高估,早已有潜在千点暴跌的祸根,事后来看,这是多么明显。但我当时没有发现,我当时全部满仓,手边几乎没有现金; 对市场周期的这种认识相当于对股东的背叛。
  • 关注一定数量的企业,并把自己的交易限制在这些股票上面,是一种很好的策略。每买进一种股票,你应当对这个行业以及该公司在其中的地位有所了解,对它在经济萧条时的应对、影响收益的因素都要有所了解。
  • 你不会被不属于你的东西的价格上涨所伤害,而你真正拥有的东西才会毁灭你。
  • 如果尝试避开下跌,那么很可能会错失下次上涨的机会。这就是试图预测价格的最大风险。以美国股市为例,如果在过去25年的时间中一直坚守岗位,则投资的年平均报酬率超过11%;如果喜欢进进出出,又不幸刚好错过这当中表现最好的40个月,年平均报酬率就会跌至1%。股市反弹往往在最出乎人意料的时候,只有长期投资才能避免风险。
  • 如果有我不愿买的股票,那它一定是最热门行业中最热门的股票。
  • 难怪人们在房地产市场上赚钱而在股票市场上赔钱。他们选择房子时往往要用几个月的时间,而选择股票只用几分钟。事实上,他们在买微波炉时花的时间也比选择股票时多。
  • 股票投资和减肥一样,决定最终结果的是耐心,而不是头脑。
  • 在过去70多年历史上发生的40次股市暴跌中,即使其中39次我提前预测到,而且在暴跌前卖掉了所有的股票,我最后也会后悔万分。因为即使是跌幅最大的那次股灾,股价最终也涨回来了,而且涨得更高。
  • 安抚自己那颗有些恐惧的心
  • 你了解的细节越多,你对公司的分析就越透彻。
  • 让时间和金钱去工作,你只需坐下来等待结果。
  • 持有股票就像养育孩子,不要超出力所能及的范围。业余选股人大概有时间追踪8~12家公司。不要同时拥有5种以上的股票。
  • 观察你的朋友,你可以知道他买什么牌子的计算机,喝什么牌子的饮料,喜欢穿什么样的拖鞋以及去看什么类型的电影,这些都是有益的线索,可以引导你发现合适的股票。
  • 某只股票比以前便宜不能成为买进的理由,同样仅仅因为它比以前贵就卖掉也不是理性的方式。
  • 要在股市上投资成功,你必须押上你对股票的忠诚度。基本上你应该把它看待成一桩婚姻,也就是你的金钱及投资的结合。否则,即使你是一个选股高手,如果你缺少执着及勇气,恐怕也很难赚到大钱。
  • 如果人们长期在股市赔钱,其实该怪的不是股票,而是自己。一般而言,股票的价格长期是看涨的,但是100个人中有99个人却老是成为慢性输家。这是因为他们的投资没有计划,他们买在高位,然后失去耐心或者心生恐惧,急着把赔钱的股票杀出。他们的投资哲学是“买高卖低”。
  • 要抄底买入一只下跌的股票,就如同想抓住一把迅速下落的飞刀。
  • 一定要有耐心。不越等越不开,股票越急越不涨。
  • 股市下跌就像科罗拉多一月的暴风雪一样平常,如果你有准备,它并不能伤害你。下跌正是机会,去捡那些慌忙逃离风暴的投资者丢下的廉价货。每个人都有炒股赚钱的脑力,但不是每个人都有这样的胆量。如果你动不动就闻气而逃,你不要碰股票,也不要买股票基金。
  • 在手上的牌变得更差之前,就应该及早摊牌认输出局,还不至于输得太惨,我当时一定是趴在牌桌上睡着了。
  • 只是根据股价上涨,并不能说明你是对的;只是根据股价下跌,并不能说明你是错的。
  • 决定投资者投资成败的关键在于投资者的耐心、独立精神、基本常识、对痛苦的忍耐力、坦率、超然、坚持不懈、脑袋灵活、主动承认错误的精神,以及不受别人慌乱的影响,坚持到投资获得成功的能力。至关重要的是要能够抵抗得了你人性的弱点。

创新&信息

重新定义公司 阅读记录

创新

创新到底是什么。在我们看来,创新不只是创造新奇实用的想法,还包括实践。“新奇”往往会被当成“新颖”的近义词,因此我们有必要指出,创新的东西不仅需要新的功能,还需要出人意料。如果你的产品只是满足了消费者提出的需求,那么你就不是创新,而只是做出回应。回应是好的,但毕竟不是创新。另外,用“实用”这个形容词来描述高大上的“创新”,实在有点黯然,因此,让我们在前面加上一个副词,把“实用”变成“非常实用”:创新的东西不仅要新颖、出人意料,还要非常实用。将这个概念套用在谷歌的无人驾驶汽车项目上恰如其分:这款车不仅新颖、出人意料,而且非常实用。

信息

我们可以这样思考企业中的沟通问题:想象一栋 20 层高的大楼,你站在中间楼层(比如第 10 层)的阳台上。每层的人数随着楼层的升高而递减。大楼的最高层只有一个人,而大楼的底层(也就是“入门级”)则是人头攒动。现在,想象你正站在室外的阳台上,你上层的人(暂且称作你的“上级”)对你喊了些什么,还扔下来几份文件。你接住文件,小心不让文件被风吹散,并把文件拿到屋里阅读。内容中的确有些可圈可点之处,依照为9 楼工作人员确定的分工细则,你小心翼翼地批注了几个你觉得他们需要注意的重点。之后,你重新回到阳台,向你楼下的团队丢下几张表格和几段文字。楼下的人如饥似渴地阅读着你的文件,好像这文件就是《圣经· 箴言》中供给口渴之人的凉水。楼下的人看完之后,转而又会将这个“批注”仪式重复一遍,以便为 8 楼的人“解渴”。与此同时,你 11 楼的上司又在重复刚才的工序了。至于20 楼嘛……哎,天知道他老人家在干什么呢。这就是绝大多数公司信息流动的传统模式。管理中的上层收集信息,并审慎地决定该将哪些信息分发给在他们底下辛苦工作的人。在这样的世界中,信息作为权力和控制的手段被人们囤积。正如管理学学者詹姆斯· 奥图尔及沃伦· 本尼斯所说,许多商业人士之所以能升至管理者位置,“靠的并不是他们所表现出的团队合作精神,而是因为他们深谙与同事们的竞争之道。而这样的风气,只会助长人们对信息的霸占”。这让我们想起了苏联的做法,他们把办公室中所有的复印机都关在双锁钢板门后,以防有人在未经批准的情况下使用机器的神力将有关粮食生产的五年计划泄漏出去。 当今,绝大多数管理者的思维方式依然与苏联时期的官僚大同小异。他们觉得,自己的任务就是批注信息、谨慎地把小部分信息散布出去,原因很简单:你怎么能将关系企业帝国命脉的信息交给底层那些年轻无知的人。

随机取样的实现

程序的输入包含两个整数m和n,其中 m <n 。输出是 0~n-1 范围内 m 个随机整数的有序列表,不允许重复。
从概率的角度说,我们希望得到没有重复的有序选择,其中每个选择出现的概率相等。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class RandomSample {

    /**
     * 随机取样
     *
     * @param bound 样本总数
     * @param count 需要抽取的样本数
     * @return 返回一个有序数组
     */
    public static int[] getRandomSamples(int bound, int count) {
        if (count < 1 || bound <= count) {
            return null;
        }

        boolean[] fillArray = new boolean[bound];
        for (int i = 0; i < bound; i++) {
            fillArray[i] = false; //用false标示未填充,true表示已填充。
        }

        Random random = new Random();
        int fillCount = 0;
        final int randomNumCount = Math.min(count, bound - count); //随机填充的数目不超过一半
        while (fillCount < randomNumCount) {
            int num = random.nextInt(bound);
            if (!fillArray[num]) {
                fillArray[num] = true;
                fillCount++;
            }
        }

        int[] samples = new int[count];
        //如果随机抽取的数量与所需相等,则取该集合;否则取补集。
        int index = 0;
        if (randomNumCount == count) {
            for (int i = 0; i < bound; i++) {
                if (fillArray[i]) {
                    samples[index++] = i;
                }
            }
        } else {
            //取补集
            for (int i = 0; i < bound; i++) {
                if (!fillArray[i]) {
                    samples[index++] = i;
                }
            }
        }
        return samples;
    }

    /**
     * 通过洗牌的方式随机取样
     */
    public static int[] getRandomSamples2(int bound, int count) {
        if (count < 1 || bound <= count) {
            return null;
        }
        List<Integer> list = new ArrayList<>(bound);
        for (int i = 0; i < bound; i++) {
            list.add(i);
        }
        Collections.shuffle(list);
        int[] samples = new int[count];
        for (int i = 0; i < count; i++) {
            samples[i] = list.get(i);
        }
        return samples;
    }

    public static void main(String[] args) {
        int[] r1 = getRandomSamples(100, 10);
        int[] r2 = getRandomSamples2(200, 10);
        System.out.println(Arrays.toString(r1));
        System.out.println(Arrays.toString(r2));
    }

}

作者:DreamWinter
链接:https://www.jianshu.com/p/32902050f7dd
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。