【发布时间】:2010-09-18 11:54:43
【问题描述】:
我注意到许多开源项目不再使用 BITWISE 标志,即使它完全被 web 通用编程环境 (php/Mysql) 支持。 对于一些有效的问题,这是一种“丢失的做法”,还是只是很多 php 程序员不知道如何处理这种类型的实现?
没什么太重要的,只是很好奇:) 谢谢大家
【问题讨论】:
标签: php mysql open-source
我注意到许多开源项目不再使用 BITWISE 标志,即使它完全被 web 通用编程环境 (php/Mysql) 支持。 对于一些有效的问题,这是一种“丢失的做法”,还是只是很多 php 程序员不知道如何处理这种类型的实现?
没什么太重要的,只是很好奇:) 谢谢大家
【问题讨论】:
标签: php mysql open-source
我会直截了当地说,每个技术职位都需要对位运算有充分的了解。
我有一则轶事间接解决了这个话题。
2007 年 1 月,我在印度科钦招聘长期开发人员。由于我没有参与候选人的初步筛选,所以我不知道应该期待什么标准,所以我准备了一系列问题和主题,从对二进制和十六进制的简单理解到架构、设计和项目管理。
当我与印度人力资源部的人讨论我的方法时,我(温和地)因为投球太低而受到责备。他明确表示,我关于 hex 的问题可能会被视为对候选人经验或教育的侮辱。
但是,我在英国面试数百名候选人的经历让我坚信,不可能把调得太低。我的观点过去和现在仍然是,如果候选人很合格,那么调整讨论水平就很简单了。我从来没有人表达过被侮辱的感觉,相反,我认为一个合格的候选人可能会在面试的飞速开始时感到如释重负。它还有助于打破僵局并建立有意义的采访所需的融洽关系。另一方面,不合格的候选人通常会遇到这些较低的障碍。
但不想完全忽视当地的建议,我谨慎地决定将我的基本采访主题包括在内,并准备好在它们不起作用时放弃它们。
随着面试的进展,我很高兴我从那个级别开始。它没有冒犯任何人,不合适的候选人很容易被识别出来。
这并不是说我希望应聘者每天都在处理一些琐碎的事情,但无论是哪种语言,对编程基础知识的充分理解都是必不可少的。即使是更高抽象级别的开发人员也会定期接触十六进制(例如 RGB 值)。鹦鹉学舌 stuff you find on the net 只会在第一次完美运行的情况下有所帮助。
但对于在过去五年中起步的开发人员来说,我认为掩饰基础知识太容易了,因为它们受到善意的 IDE 和“无代码”编程的迷因的宠爱。 Visual Studio 安装闪屏吹嘘无需编写代码即可进行开发。确实,does Visual Studio rot the mind?
【讨论】:
如今,许多程序员似乎只是脑子里装满了足够的知识来暴力破解代码,然后在没有被教导过“按位”之类的词是什么意思的情况下被送入工作岗位。
我告诉你,这是一门垂死的艺术......
【讨论】:
按位运算不仅仅是为了节省内存。它们对于编写清晰的代码非常有用。你更想看哪个?
OpenFile("...", true, false)
或
OpenFile("...", writeonly | append)
这是一个荒谬/琐碎的例子,但你明白了。
【讨论】:
如果您有一个已经很复杂的应用程序,为什么还要使用按位标志使其更复杂。如果没有更多的好处,我个人不会使用这种标志,然后只是很酷。而且凭经验,写起来还是挺容易的,以后调整就更难了,更别说自己没写了。
哦,为了记录,我确实知道如何使用它们。
【讨论】:
在内存管理至关重要的嵌入式编程之外,它们的成本超过了它们的最低价值。特别是,查询包含按位标志的 db 列会产生神秘的 SQL,它需要引用应用程序的代码来确定每个按位操作引用的值。
WHERE (ISNULL(flags, 0) & 4096 = 0 -- What does this bit refer to?
如果必须以这种方式查询您的数据库不会吓到您,那就应该这样做。
【讨论】:
如果您对内存和速度有非常严格的要求,或者在进行低级硬件编程时,位域非常有用。
除非您正在做嵌入式编程或类似的事情,否则您不需要它们。执行相同任务的机制更易读、更强大、更可扩展。例如,Java 的 EnumSets。
我希望优秀的程序员了解它们而不是使用它们:-p
【讨论】:
“Plenty”很笼统,我们想要名字! ;-)
说真的,我来自汇编语言和 C 语言,并且非常精通按位运算。 但我不会用它们来替换,比如说一个类中的 10 个不相关的布尔值,而二进制标志是一个整数...... 除非,也许,我有这个类的数百万个实例!
如果我必须处理大量布尔实例,我会使用一些 bitset 类来优化和抽象这些位数组。
现在,位操作 fu 在编程中几乎是强制性的,如果你想访问 RGB[A] 值的组件,如果你想调用一些 API(即使这只是 ORing 多个命名标志)等等。
简而言之,我不会在我做的每个项目中都使用它,但你不能忽略如何去做(有点像正则表达式......)。
【讨论】:
我仍然使用按位运算符,尽管由于我选择的主要语言(和专业)是 C#,我经常使用 Flag 枚举 :) 但是,是的,我认为很多编写 PHP 之类的代码的人都是自学成才的,而且不知道按位运算或它们的用法。
自学成才,在开始编写 C 和 C++ 代码之前,我对它们了解不多。现在我在有意义的地方使用它们:)
【讨论】:
它们总是有一个地方可以在很小的空间中存储大量布尔标志;
想想如果你有 32 个标志(例如);您可以将它们全部存储在一个“长整数”中并且只使用 4 个字节,现在假设您选择为每个标志使用 long(只是因为代码更易于维护 - 您现在有 128 个字节要处理。
我的背景主要是 C/C++,所以我从小就学习它们,所以我肯定会在我使用的每种语言中使用它们;但我同意;新手程序员往往甚至都不在乎 - 所有这些内存都在周围 - 谁在乎?
【讨论】: