❶ 不同星座的程序员写起代码来分别是什么样子的
水瓶座
(1.20--2.18)
水瓶座的人都非常聪明(深井冰),特立独行、追求创新,充满了各种奇思妙想,有时候真的怀疑他们是不是从外星系来的。水瓶座的程序员写的代码乍一看平平无奇,再看第二眼,这是什么鬼?看不懂!这是阿斯塔纳星球的语言吗? 水瓶os:天才一般的代码岂是尔等凡人能看懂的!恕我直言,在座的各位都是渣渣!
双鱼座
(2.19--3.20)
双鱼座是天生的诗人,感情至上,一身的艺术细胞,还有重度自恋倾向。据说,ta们修改bug前也必须欣赏bug十秒。因为太过浪漫,ta们还容易多愁善感,有时候无法完全理性地思考问题,在写代码时也会不由自主的受到情绪的影响。代码写成什么样,全看心情。相比于代码的可运行速度,双鱼座更关注的是代码中的哲学意味。什么?写的不好?没逻辑?你跟诗人要什么逻辑!世界知名双鱼男:乔布斯老师。双鱼os:黑夜给了我黑色的眼睛,我却用它来敲代码……
白羊座
(3.21--4.19)
白羊座的人有火一般的热情,具有强大的执行力和进攻意识。他们做事情必须充满斗志,打好鸡血再上路,不然就会觉得没意思。但美中不足的是,ta们往往停留在三分钟热度,代码写到一半就写不下去了。所以他们的代码通常都有一个极其美妙的开头,然后……就没有然后了。那句话怎么说来着:一顿操作猛如虎,bug瞬间多十组。不过,在任何时候,白羊都是冲在最前面的那个人(也可能是最经常背锅的那个人)。 白羊os:别爱我(的代码),没结果。
金牛座
(4.20--5.20)
金牛逻辑思维缜密,人也稳重不浮躁,非常适合写代码!又宅又高薪,不用跟太多人打交道,程序员简直就是金牛的理想工作!金牛座程序员写起代码来就跟他的性格一样,清晰、简洁,没有半句废话,多一个符号都不行。但遗憾地是,不爱写注释也是他们代码的典型风格。 金牛os:要啥注释!写注释多废纸啊!
双子座
(5.21--6.21)
都说双子座有双重精分性格,ta们爱好新鲜事物,爱抖机灵,但做事情难免不专一。工作时也是一样的,A面B面随意切换,写的代码时而好的不像话,时而……额……一言难尽。 双子os:人家不是一个人在战斗!
巨蟹座
(6.22--7.22)
巨蟹除了对自己不温柔,对全世界都温柔的要命!性格好,有耐心,善于体贴和照顾别人(虽然有时候很啰嗦)。巨蟹座程序员在写代码的时候就将这种体贴发挥到极致,要么就不写,要么就写得很细致!担心别人读不懂程序,还会乖乖的把注释摘录下来。巨蟹os:我这么体贴又迷人,谁会不爱呢!
狮子座
(7.23--8.22)
狮子座天生王者气息,热情似火,乐于助人,责任感强。然而,他们身上又散发着迷之自信和中二气息,他们很在意别人对自己的看法,所以在写代码时,会绞尽脑汁的让代码变得更加独特,独特到让别人跪舔的那种。 狮子os:跟我比代码?哼!简直弱爆了!
处女座
(8.23--9.22)
处女座的人天生要强,追求完美,心思细腻,对细节的把控做到了极致。别人发现不了的问题,ta都能在第一时间找出来。处女座程序员对细节非常苛刻,并追求代码的流畅、整洁,连改个bug都要对齐行间距。但正是这种“精益求精、逼死自己造福人类”的代码龟毛症,才能推动IT界健康可持续发展! 处女os:我那是精益求精好嘛!
天秤座
(9.23--10.23)
大写的颜控!天秤座的人对审美有很高的要求,如果你身边有天秤座的朋友,那恭喜你!你已经被纳入高颜值的范畴了!在天秤座程序员眼里,【代码的好看程度】比【代码的好用程度】更重要,毕竟是自己写出来的东西,如果自己都看不下去,又怎么能给别人去看呢?不管这串代码好不好用,只要好看就行了!天秤os:能把代码写得这么美的也就只有我了。
天蝎座
(10.24--11.22)
天蝎座的人多半随性且佛系,决定天蝎座程序员编程风格的只有三个字:看心情。代码对于天蝎座程序员来说虽然很重要,但毕竟每天朝夕相处,便没有了“距离产生美”的感觉,所以他们很容易受其他事物影响。听说菜价涨了?来吧,换代码!人民币汇率又升了?来吧,换代码! 天蝎os:代码千千万,不行咱就换!做人,开心就好~
射手座
(11.23--12.21)
射手座天性爱玩,就像一个长不大的孩子。新鲜感大概是他们毕生的追求,同样的事情不喜欢做第二遍。虽然编程是一项很严谨的工作,但射手座程序员仍然喜欢把自己的奇思妙想加进去。于是他们的代码中总是混杂着最流行的思路和最前沿的理念,虽然不一定有什么用,但看上去奔放洋气有深度,简约时尚国际范就够了! 射手os:我就是我,颜色不一样的烟火!
摩羯座
(12.22--1.19)
摩羯座被公认为最严谨认真的星座,甚至有轻微的强迫症。这个星座的程序员工作起来有板有眼,他们写的代码非常工整规范,犹如教科书般完美。 摩羯os:头可断!血可流!代码不能乱!
不过话说回来,星座这事儿吧,如果笃信的话,多半要交智商税,咱捡好的信就行。最好的态度是:适当信仰,逆天改命 。
❷ MySQL之KEY分区引发的血案
业务表tb_image部分数据如下所示,其中id唯一,image_no不唯一。image_no表示每个文件的编号,每个文件在业务系统中会生成若干个文件,每个文件的唯一ID就是字段id:
业务表tb_image的一些情况如下:
根据上面对业务的分析,分库分表完全没有必要。单库分表的话,由于要根据image_no和id查询,所以,一种方案是冗余分表(即一份数据以image_no为分片键保存,另一份数据以id为分片键保存);另一种方案是只以image_no为分片键,而基于id的查询需求,业务层进行结果归并或者引入第三方中间件。
考虑到单库分表比较复杂,所以决定使用分区特性,而且容量评估分区表方案128个分区(每个分区数据量kw级别)完全能保证业务至少稳定运行15年(图中橙色部分是比较贴合自身业务实际增长情况):
另外,由于RANGE, LIST, HASH分区都不支持VARCHAR列,所以决定采用KEY分区,官方介绍它的原理是以MySQL内置hash算法然后对分区数取模。
选定分片键为image_no,并且决定分区数为128后,就要灌入数据进行可行性和性能测试了。分区数选择128的原因是:11亿/1kw=110≈128,另外程序员情节,喜欢用2的N次方,你懂的。然而, 这个分区数128就是一切噩梦的开始 。
我尝试先插入10w数据到128个分区中,插入后,让我惊讶的现象出现了: 所有奇数编号分区(p1, p3, p5, ... , p2n-1)中居然没有一条数据 ,同时,任何一个偶数编号分区却有很多的数据,而且还不是很均匀。如下图所示:
说明 :奇数编号分区的ibd文件大小都是112k,这是创建分区表时初始化大小,实际并没有任何数据。我们可以通过SQL: select partition_name, partition_expression, table_rows from information_schema.partitions where table_schema = schema() and table_name='image_subpart' 验证,其部分结果如下图所示:
难道10w条数据还不够说明问题?平均下来每个分区可是有近800条数据!好吧,来点猛的:我再插入990w条数据,总计1kw数据。结果还是一样,奇数编号分区没有数据,偶数编号都有分区。
我们再来回想一下KEY分区的原理: 通过MySQL内置hash算法对分片键计算hash值后再对分区数取模 。这个原理也可以从MySQL官网找到,请戳链接: 22.2.5 KEY Partitioning: https://dev.mysql.com/doc/refman/5.7/en/partitioning-key.html ,截取原文如下:
这个世界上不会有这么渣渣的hash算法吧? 随便写个什么算法也不至于这么不均匀吧?这时候我怀疑是否有一些什么配置引起的。但是 show variables 中并没有任何与partition相关的变量。
这个时候,一万匹马奔腾而过。会不会是文档和源码不同步导致的?好吧,看MySQL的源码,毕竟, 源码才是最接近真相的地方 。KEY分区相关源码在文件 sql_partition.cc 中,笔者截取部分关键源码,如下所示,初略观察,并没有什么不妥,先计算分区字段的hash值然后对分区数取模:
怀着绝望的心情,请出搜索引擎搜索:"KEY分区数据不均匀",搜索结果中的CSDN论坛( https://bbs.csdn.net/topics/390857704 )里有个民间高手 华夏小卒 回答如下:
这个时候,又是一万匹马奔腾而过。不过F**K的同时,心里也是有点小激动,因为可能找到解决办法了(虽然还不知道MySQL内置hash算法为毛会这样),最后笔者再次对KEY分区测试并总结如下:
如下图所示,是笔者把分区数调整为127并插入100w数据后的情况,通过SQL证明每个分区的数据量几乎一样:
MySQL的KEY分区这么大的使用陷阱,居然在官方上没有任何说明,这让笔者感到非常震惊。笔者还尝试Google搜索 mysql partition key uneven ,也有很多结果,例如 stackoverflow:https://stackoverflow.com/questions/38454354/mysql-uneven-distribution-of-data-into-partitions-when-using-key-partitioning ,此外还有MySQL bug: Bug #72428 Partition by KEY() results in uneven data distribution
正在看此文并有很强烈兴趣的同学,可以尝试更深入这个问题。笔者接下来也会找个时间,根据MySQL源码深入挖掘其hash算法的实现为什么对分区数如此敏感。
❸ 程序员写100万行代码,到底是什么感觉
内心是自豪的,头发是掉光的。
一般来讲程序员写代码,写了几万行代码都已经很不错了,当然,一些工作时间长的是可以达到这个数量的。
搞开发这个东西虽然是创造的过程,但是实际工作还是比较辛苦的。
吃饭不准时,加班家常事,所以,还是以身体为重。