分享一个关于 Int 占几位的真实优化案例, 顺便发个广告: 招大数据实习生! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
RangerWolf
V2EX    程序员

分享一个关于 Int 占几位的真实优化案例, 顺便发个广告: 招大数据实习生!

  • &nsp;
  •   RangerWolf 2015-10-16 21:04:28 +08:00 3894 次点击
    这是一个创建于 3696 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不撕逼,只描述一个自己遇到的事情而已。 大概描述一下吧~

    搞一个 Cassandra 集群,第一次玩,数据类型用的 Long/BigInt. 因为还在项目验证阶段,所以机器配置参差不齐。 有两台机器最搓, 只有 2G 的内存,泪崩。
    聊胜于无,也把环境搭建起来了。
    然后塞了几十 GB 的数据进去之后,就开始用 spark 去计算了~

    不出所料,很快就 Cassandra 奔溃了。。。。

    于是乎想起 long 的长度肯定要大于 int ,如果没有记错,应该是 32bit , 4 字节?

    其中一张表需要全部 load 到内存之中进行进行计算,根据数量级进行估算之后, 2G 内存应该足够。 改完之后,确实如此, 至少这个地方不再导致 Cassandra 集群奔溃了~

    所以个人感觉那个得罪人的帖子,还是有一些道理的~ 如果只是写业务代码,在遇到一些性能瓶颈的时候,了解一些底层的知识感觉还是会比较有帮助~

    最后打一个广告:

    南京趋势科技 个人消费者部门 招聘 3 个想玩大数据的实习生~ 最好是南京本地的,外地的每个月出勤够一定天数之后是有住宿补贴的~

    只要基础好,最好有 java/python 的基础,如果已经玩过 spark/hadoop 就最好不过啦!

    联系方式: 135 1511 7373 AT 163dotCom

    放假我就不看公司邮箱啦 呵呵

    23 条回复    2015-10-18 10:13:57 +08:00
    msg7086
        1
    msg7086  
       2015-10-16 21:33:27 +08:00   1
    C 在 32 位环境下 long 和 int 是一样长的。
    Cassandra 下的 BigInt 是 64 位长度。
    我觉得这是比较基础的知识吧。
    数据类型应该根据实际需求来定,哪有因为内存小了就把类型改改小跑的。
    tracyone
        2
    tracyone  
       2015-10-16 21:36:01 +08:00   3
    一晚下班回家,一民警迎面巡逻而来。
    突然对我大喊:“站住!”
    民警:“ int 类型占几个字节?”我:“ 4 个。”
    民警:“你可以走了。 ”
    我感到很诧异:“为什么问这样的问题?”
    民警:“深夜还在街上走,幸苦又寒酸的样子,不是小偷就是程序员!”
    我:“……”
    dqh3000
        3
    dqh3000  
       2015-10-16 21:40:32 +08:00   1
    标准:

    int 建议和机器字长相同
    long >= int

    (如果我没记错的话……
    dqh3000
        4
    dqh3000  
       2015-10-16 21:41:18 +08:00
    @tracyone 所以这个段子里面问 int 几个字节,是不好的,因为没有平台限定

    不过可以问 double 和 float 多少字节,因为是 IEEE 规定的~~~
    m8syYID5eaas8hF7
        5
    m8syYID5eaas8hF7  
       2015-10-16 21:50:19 +08:00
    相对较少吧~只是拿一条知识就否定一个人的能力是不是有点太偏激了~
    dqh3000
        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
    XianZaiZhuCe
        7
    XianZaiZhuCe  
       2015-10-16 22:05:25 +08:00 via Android
    你看你也是碰到问题才想起这个事,说明你不太合格。我要报告你上级开除你
    juxingzhutou
        8
    juxingzhutou  
       2015-10-16 22:50:04 +08:00   1
    这种例子非常多,今天刚碰到一个,阿里悟空的 iOS SDK 中的某个方法参数类型是无符号整型,结果我传了补码表示的最大无符号整型(全 1 二进制串)之后报了个参数不能为 Negative 的错误。

    很多人说某些知识没用,原因也许是他们不会用,那对他们来说这些知识自然就是“没用的”。
    raincious
        9
    raincious  
       2015-10-16 22:58:26 +08:00
    而且还有比如拿 int 存时间戳然后到了 2038 年就各种问题之类的。

    其实我也挺同意原帖的某些观点。毕竟基础知识,至少得有个印象。
    raincious
        10
    raincious  
       2015-10-16 23:01:50 +08:00
    @juxingzhutou

    > 很多人说某些知识没用,原因也许是他们不会用,那对他们来说这些知识自然就是“没用的”。

    比较同意这一点。

    我刚开始写程序的时候 int => uint casting 根本不知道为了安全得判断下 int 是不是处于负值的范围,于是一直直接就(uint)好了,直到某一天出了个异常奇怪的问题才想到这样做是不是不对,于是 Google 了下一身冷汗就来了。

    所以有的时候“无知者无畏”(贬义)真的会发生。
    RangerWolf
        11
    RangerWolf  
    OP
       2015-10-17 06:05:29 +08:00
    @msg7086 不得已而为之~ 虽然只有鸟枪,但是也要上啊~ 哈哈 这就是我自己当时的想法,只有把这个东西做好了才有可能鸟枪换炮
    RangerWolf
        12
    RangerWolf  
    OP
       2015-10-17 06:08:42 +08:00
    @dqh3000 java 里面 ini 的长度不是定好的么? 求科普

    @LINEX 是的,我也感觉要多问一些问题全面掌握一个人的水平,高考还能错,面试不记得某些知识点应该可以理解~
    @XianZaiZhuCe 求放过。。。。
    @juxingzhutou 说的太好了!!!
    paledream
        13
    paledream  
       2015-10-17 08:46:34 +08:00 via Android
    情报学研一,想玩大数据,不过这学期是实习不了,不知道以后有没有机会。
    CRVV
        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 这些类型
    sorra
        15
    sorra  
       2015-10-17 15:23:28 +08:00   1
    有符号数的第一个位是符号位,无符号数没有符号位。 Java 没有无符号数。
    16 位只有 65536 个值,极易溢出。 32 位是-21 亿~21 亿,也可能溢出。 64 位很大很大,事物的数量很难超越它。
    浮点数(double, float)做十进制运算有不可避免的误差,不能用于精确计算。

    所以数据库里主键一般用 64 位或以上的整数。内存中如果能压缩掉多余的位,就节省了内存,这个帖子就是好例子。

    还有一项重要知识是常见硬件的性能范围, CPU 、内存、磁盘、 SSD 、网卡,等等。多知道一些无疑是有好处的。
    znoodl
        16
    znoodl  
       2015-10-17 16:44:33 +08:00 via iPhone
    我一般在不需要负数的时候都用 size_t ,前几天因为用 long 读一个大文件溢出了
    RangerWolf
        17
    RangerWolf  
    OP
       2015-10-17 19:47:07 +08:00
    @sorra 是的, 很同意你的观点~ 当然除了 java ,其他语言的知识我知道的就很少了。。。
    RangerWolf
        18
    RangerWolf  
    OP
       2015-10-17 19:48:30 +08:00
    @paledream 情报学! 看起来以后要进国安局的节奏? 以前还见过一个 图书馆情报学。。。 不知道是什么,看起来很厉害的样子~
    不知道为什么现在不能出来实习呢?
    paledream
        19
    paledream  
       2015-10-17 21:34:32 +08:00
    @RangerWolf 我就是图书情报的,其实就是信息管理的上级学科,搞数据挖掘之类的,研一有专业课所以不好出去
    RangerWolf
        20
    RangerWolf  
    OP
       2015-10-18 07:28:15 +08:00
    @paledream 看来专业比较对口,一周来四天就好了,有兴趣啊?
    paledream
        21
    paledream  
       2015-10-18 08:58:13 +08:00 via Android
    @RangerWolf 要是研二还有机会的话就去,现在确实去不了
    RangerWolf
        22
    RangerWolf  
    OP
       2015-10-18 09:36:15 +08:00
    @paledream ok 了解了~ 不知道有推荐的师兄师姐吗?
    paledream
        23
    paledream  
       2015-10-18 10:13:57 +08:00
    @RangerWolf 师兄师姐的情况不是很熟悉,不过都有自己的事情在忙。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1038 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 23:36 PVG 07:36 LAX 15:36 JFK 18:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86