不撕逼,只描述一个自己遇到的事情而已。 大概描述一下吧~
搞一个 Cassandra 集群,第一次玩,数据类型用的 Long/BigInt. 因为还在项目验证阶段,所以机器配置参差不齐。 有两台机器最搓, 只有 2G 的内存,泪崩。
聊胜于无,也把环境搭建起来了。
然后塞了几十 GB 的数据进去之后,就开始用 spark 去计算了~
不出所料,很快就 Cassandra 奔溃了。。。。
于是乎想起 long 的长度肯定要大于 int ,如果没有记错,应该是 32bit , 4 字节?
其中一张表需要全部 load 到内存之中进行进行计算,根据数量级进行估算之后, 2G 内存应该足够。 改完之后,确实如此, 至少这个地方不再导致 Cassandra 集群奔溃了~
所以个人感觉那个得罪人的帖子,还是有一些道理的~ 如果只是写业务代码,在遇到一些性能瓶颈的时候,了解一些底层的知识感觉还是会比较有帮助~
最后打一个广告:
南京趋势科技 个人消费者部门 招聘 3 个想玩大数据的实习生~ 最好是南京本地的,外地的每个月出勤够一定天数之后是有住宿补贴的~
只要基础好,最好有 java/python 的基础,如果已经玩过 spark/hadoop 就最好不过啦!
联系方式: 135 1511 7373 AT 163dotCom
放假我就不看公司邮箱啦 呵呵
1
msg7086 2015-10-16 21:33:27 +08:00 1
C 在 32 位环境下 long 和 int 是一样长的。
Cassandra 下的 BigInt 是 64 位长度。 我觉得这是比较基础的知识吧。 数据类型应该根据实际需求来定,哪有因为内存小了就把类型改改小跑的。 |
2
tracyone 2015-10-16 21:36:01 +08:00 3
一晚下班回家,一民警迎面巡逻而来。
突然对我大喊:“站住!” 民警:“ int 类型占几个字节?”我:“ 4 个。” 民警:“你可以走了。 ” 我感到很诧异:“为什么问这样的问题?” 民警:“深夜还在街上走,幸苦又寒酸的样子,不是小偷就是程序员!” 我:“……” |
3
dqh3000 2015-10-16 21:40:32 +08:00 1
标准:
int 建议和机器字长相同 long >= int (如果我没记错的话…… |
4
dqh3000 2015-10-16 21:41:18 +08:00
|
5
m8syYID5eaas8hF7 2015-10-16 21:50:19 +08:00
相对较少吧~只是拿一条知识就否定一个人的能力是不是有点太偏激了~
|
6
dqh3000 2015-10-16 21:51:02 +08:00
Plain ints have the natural size suggested by the architecture of the execution environment
ISO IEC 14882 2003 (C++03) p53 |
7
XianZaiZhuCe 2015-10-16 22:05:25 +08:00 via Android
你看你也是碰到问题才想起这个事,说明你不太合格。我要报告你上级开除你
|
8
juxingzhutou 2015-10-16 22:50:04 +08:00 1
这种例子非常多,今天刚碰到一个,阿里悟空的 iOS SDK 中的某个方法参数类型是无符号整型,结果我传了补码表示的最大无符号整型(全 1 二进制串)之后报了个参数不能为 Negative 的错误。
很多人说某些知识没用,原因也许是他们不会用,那对他们来说这些知识自然就是“没用的”。 |
9
raincious 2015-10-16 22:58:26 +08:00
而且还有比如拿 int 存时间戳然后到了 2038 年就各种问题之类的。
其实我也挺同意原帖的某些观点。毕竟基础知识,至少得有个印象。 |
10
raincious 2015-10-16 23:01:50 +08:00
@juxingzhutou
> 很多人说某些知识没用,原因也许是他们不会用,那对他们来说这些知识自然就是“没用的”。 比较同意这一点。 我刚开始写程序的时候 int => uint casting 根本不知道为了安全得判断下 int 是不是处于负值的范围,于是一直直接就(uint)好了,直到某一天出了个异常奇怪的问题才想到这样做是不是不对,于是 Google 了下一身冷汗就来了。 所以有的时候“无知者无畏”(贬义)真的会发生。 |
11
RangerWolf OP @msg7086 不得已而为之~ 虽然只有鸟枪,但是也要上啊~ 哈哈 这就是我自己当时的想法,只有把这个东西做好了才有可能鸟枪换炮
|
12
RangerWolf OP @dqh3000 java 里面 ini 的长度不是定好的么? 求科普
@LINEX 是的,我也感觉要多问一些问题全面掌握一个人的水平,高考还能错,面试不记得某些知识点应该可以理解~ @XianZaiZhuCe 求放过。。。。 @juxingzhutou 说的太好了!!! |
13
paledream 2015-10-17 08:46:34 +08:00 via Android
情报学研一,想玩大数据,不过这学期是实习不了,不知道以后有没有机会。
|
14
CRVV 2015-10-17 10:48:18 +08:00 1
@RangerWolf
这个问题, int 占多少字节,必须指定语言才有答案 C 和 C++是 至少 2 字节,指定编译器和指令集才有具体答案 Java 是 4 字节 Go 是 4 或者 8 字节 Python 我不知道最少占多少,最多应该是没有上限 如果单纯地问“ int 占几个字节”,还希望回答的人说 4 ,那我觉得这面试官应该下岗了 如果是 C/C++程序员,知道 C 语言的数据类型占几个字节是必须的 如果是 Python 程序员,管这玩意干啥 当在 C/C++里声明一个 int 类型的变量,意思就是随意来一个 16 或者 32 或者 64 位的有符号整数,需要指定长度的何不用 int32_t 这些类型 |
15
sorra 2015-10-17 15:23:28 +08:00 1
有符号数的第一个位是符号位,无符号数没有符号位。 Java 没有无符号数。
16 位只有 65536 个值,极易溢出。 32 位是-21 亿~21 亿,也可能溢出。 64 位很大很大,事物的数量很难超越它。 浮点数(double, float)做十进制运算有不可避免的误差,不能用于精确计算。 所以数据库里主键一般用 64 位或以上的整数。内存中如果能压缩掉多余的位,就节省了内存,这个帖子就是好例子。 还有一项重要知识是常见硬件的性能范围, CPU 、内存、磁盘、 SSD 、网卡,等等。多知道一些无疑是有好处的。 |
16
znoodl 2015-10-17 16:44:33 +08:00 via iPhone
我一般在不需要负数的时候都用 size_t ,前几天因为用 long 读一个大文件溢出了
|
17
RangerWolf OP @sorra 是的, 很同意你的观点~ 当然除了 java ,其他语言的知识我知道的就很少了。。。
|
18
RangerWolf OP @paledream 情报学! 看起来以后要进国安局的节奏? 以前还见过一个 图书馆情报学。。。 不知道是什么,看起来很厉害的样子~
不知道为什么现在不能出来实习呢? |
19
paledream 2015-10-17 21:34:32 +08:00
@RangerWolf 我就是图书情报的,其实就是信息管理的上级学科,搞数据挖掘之类的,研一有专业课所以不好出去
|
20
RangerWolf OP @paledream 看来专业比较对口,一周来四天就好了,有兴趣啊?
|
21
paledream 2015-10-18 08:58:13 +08:00 via Android
@RangerWolf 要是研二还有机会的话就去,现在确实去不了
|
22
RangerWolf OP @paledream ok 了解了~ 不知道有推荐的师兄师姐吗?
|
23
paledream 2015-10-18 10:13:57 +08:00
@RangerWolf 师兄师姐的情况不是很熟悉,不过都有自己的事情在忙。
|