软件工程

针对在系统开发生命周期中工作的专业人士,学者和学生的问答

10
为什么没有基于高级语言的操作系统?低级语言是否更有效?
在不冒昧的情况下,我想请您考虑一下这种可能性。如今,大多数操作系统都基于相当低级的语言(主要是C / C ++),即使是新的操作系统(例如Android)也使用JNI,底层实现也使用C语言 实际上,(这是一个个人观察),许多用C编写的程序的运行速度比其高级程序要快得多(例如:传输(Ubuntu上的bittorrent客户端)比Vuze(Java)或Deluge(Python)快很多。 )。即使PyPy是一个例外,即使python编译器也是用C编写的。 那么,这是否有特定原因?为什么我们所有具有出色的“ OOP”概念的所谓“高级语言”都不能用于构建可靠的OS? 所以我基本上有两个问题。 为什么用低级语言编写的应用程序比HLL同行更有效?低级语言是否会由于低级语言和更容易转换为机器代码的简单原因而表现更好? 为什么我们没有完全基于高级语言的成熟操作系统?

2
NaN拳击的目的是什么?
阅读21世纪C时,我到达了第6章的“用NaNs标记异常数值”一节,其中解释了使用尾数中的位来存储一些任意位模式,将它们用作标记或指针的方法(书中提到WebKit使用了这种技术)。 我不确定我是否了解这种技术的效用,我认为这是一种hack(它依赖于硬件而不是NaN中尾数的值),但是来自我不习惯的Java背景C的粗糙度 这是在NaN中设置和读取标记的代码段 #include <stdio.h> #include <math.h> //isnan double ref; double set_na(){ if (!ref) { ref=0/0.; char *cr = (char *)(&ref); cr[2]='a'; } return ref; } int is_na(double in){ if (!ref) return 0; //set_na was never called==>no NAs yet. char *cc = (char *)(&in); char *cr = (char *)(&ref); for …

7
初级开发人员应该从他们的高级团队领导那里得到什么?
免责声明:所表达的观点仅是我自己的,并不代表雇主的观点。 我在一家小型公司工作,其中很少有人是开发人员,其他人是质量检查/测试人员,而1人是经理。我1.5年前加入了这家公司。3名资深开发人员拥有8年以上的经验。 这些是我对团队领导所做的观察。(考虑到我是一个新鲜事物,与各个方面相比,他们的经验更少) 他们从不讨论1:1,或者从不考虑初级建议(我同意,由他们决定,是否接受,至少他们应该考虑意见)。 作为高级团队负责人,他们可以尝试使用新技术重构代码库(包括可能推出新技术的因素以及其他开发人员和基础架构也已准备就绪),但是这些团队负责人认为使用新技术的安全性降低了,他们不是最新的。(原因是我告诉他们,他们不知道当前的编程趋势是什么(例如流行的开源项目,如modernizr,bootstrap等)。 在我们的代码库中,重复了10000多行,所以我告诉了他们有关DRY: Don't Repeat yourself。他们的回答是:“这是一篇引人入胜的文章,但在实践中从未奏效”。我只是告诉他们,如果我们不将其设为100%DRY,则至少可以使用接口,但是也没有考虑。*(如果尚未准备好重构,则可以添加新功能的接口,而无需接触以前的代码库) 所有高级开发人员都进行补丁的维护和热修复。其余时间,他们只是在娱乐网站上度过。他们很高兴完成任务。 引进新技术不好吗?*(包括可行性因素在内)。 经理也最不关心我在说什么。 Junior希望他们可以从团队领导中学到很多东西。*(不向他们寻求帮助或高级编码)。 我的问题是: 我是否对提议的更改过于激进? 我对拥有8年以上经验的高级开发主管有什么期望? 我期望从公司学习并获得经验是错误的吗? 更新: 为什么他们觉得DRY是不切实际的:因为他们不想参与OOP概念。他们对重复的任务很满意。 我提出的新技术: CSS,JS,SPrite图片的缩小用法 接口和.net Framework 4,泛型等的用法。 客户端库,例如modernizr,剔除js,用于响应的引导程序,

8
有哪些方法可以避免递归算法中的堆栈溢出?
题 解决由递归算法引起的堆栈溢出的可能方法是什么? 例 我正在尝试解决Project Euler问题14,并决定尝试使用递归算法。但是,该程序以java.lang.StackOverflowError停止。可以理解 该算法确实使堆栈溢出,因为我尝试为大量生成Collat​​z序列。 解决方案 所以我想知道:假设您的递归算法编写正确,并且最终会导致堆栈溢出,那么有什么标准方法可以解决堆栈溢出的问题呢?我想到了两个概念: 尾递归 迭代 想法(1)和(2)是否正确?还有其他选择吗? 编辑 最好查看一些代码,最好使用Java,C#,Groovy或Scala。 也许不要使用上面提到的Project Euler问题,这样它就不会被其他人宠坏,而是采用其他算法。阶乘可能,或类似的东西。


4
Python宽恕与权限和鸭子输入
在Python中,我经常听到“乞求宽恕”(捕获异常)比“询问许可”(类型/条件检查)更好。关于在Python中强制鸭子输入,这是 try: x = foo.bar except AttributeError: pass else: do(x) 胜过或坏于 if hasattr(foo, "bar"): do(foo.bar) else: pass 在性能,可读性,“ pythonic”或其他重要因素方面?

3
在MVC设计中将业务逻辑放在哪里?
我创建了一个简单的MVC Java应用程序,该应用程序通过数据表单将记录添加到数据库中。 我的应用程序收集数据,还对其进行验证和存储。这是因为数据是从其他用户在线获取的。数据本质上大部分是数字。 现在,在要存储到数据库(SQL Server)中的数字数据上,我希望我的应用执行计算并显示结果。用户对如何完成计算不感兴趣,因此必须将其封装。用户必须只能查看简单的计算数据(例如,A列数据减去B列数据除以C列数据)。我知道如何编写存储过程,但是我想要一个三层应用程序。 我希望通过对数据库进行计算来处理作为记录放入数据库中的数据。原始数据应保持不受影响,而新数据(计算后)必须作为新实体记录存储到数据库中。 我应该在哪里编写该后台计算代码?因为它是规则和业务逻辑,所以我应该将其放在新的JavaBeans文件中吗?

4
github维护者是否应该在pull请求中重写作者的?
我不是专业的程序员,但是我做了一些编码,并使用了github。我遇到了令人惊讶的情况。我对git非常熟悉。 我有一个项目发现一个(小)错误影响了我。我花了一个下午找到并修复它。我分叉了存储库,提交了更改,并发出了请求请求。看到它关闭为“合并到开发部门”后,我发现一切都很好。 我今天正在浏览存储库,准备删除分支,但根本找不到提交合并到维护者存储库中的位置。一段时间后,我意识到它已被添加为提交,但作者不再是我。 据我所知,唯一的方法是专门使用重新基准,修改或其他历史记录重写来删除原始作者。 我觉得这很不对劲。充其量是令人困惑的,最糟糕的是,此回购协议的作者会为每个人的贡献表示赞赏,然后失去了原始贡献者的历史。再次,这是一个小错误,我不会在专业简历中使用它,这似乎是不诚实的。 这正常吗?我应该说些什么吗? 编辑:总体感觉似乎是我应该去问问,所以今天早上我就去做。 按照下面的要求。我检查了一下,发现我的代码存在,并在编写它时(包括注释)被完全应用了。我确认提交者和作者均已更改。我的更改同时也添加了另一项更改。这是一行,可能会影响补丁程序以及之前的其他代码。IE浏览器的单行添加与我正在修复的错误无关。 更新 似乎答案是作者维护了一个开发分支,并且不想将其主分支合并到该分支中。他重新撰写了我的承诺以避免合并。我并不关心原始分支b / c git是否足够强大,可以根据需要进行选择,重新设置基础和合并提交。 这在github上是典型的吗? 我是否应该联系项目的维护者以询问向哪个分支应用补丁?
44 git  github 

6
用字符串字面量来初始化char []是不好的做法吗?
我在CodeGuru上读了一个标题为“ strlen vs sizeof”的线程,其中一个答复指出“ char用字符串文字初始化数组仍然是[sic]不好的做法”。 这是真的吗?还是他的观点(尽管是“精英成员”)? 这是原始问题: #include <stdio.h> #include<string.h> main() { char string[] = "october"; strcpy(string, "september"); printf("the size of %s is %d and the length is %d\n\n", string, sizeof(string), strlen(string)); return 0; } 对。大小应为长度加1是? 这是输出 the size of september is 8 and the length is 9 大小一定是10。就像在计算strcpy改变字符串长度之前计算它的sizeof字符串一样。 我的语法有问题吗? …

15
语言如何影响CPU设计?[关闭]
人们经常被告知,硬件并不在乎用哪种语言编写程序,因为它只能看到编译后的二进制代码,但这并不是全部。例如,考虑一下不起眼的Z80;它对8080指令集的扩展包括CPIR之类的指令,可用于扫描C样式(以NULL结尾的)字符串,例如执行strlen()。设计人员必须已经确定,运行C程序(与Pascal相反,在Pascal中,字符串的长度位于标头中)是他们的设计可能会使用的东西。另一个经典的例子是Lisp Machine。 还有什么其他例子?例如,使特定处理器偏爱特定语言约定的指令,寄存器的数量和类型,寻址模式?我对同一家庭的修订特别感兴趣。

10
在没有要求的情况下编写软件是应该具备的技能还是应该避免的情况?
我发现一些软件开发人员非常擅长此事,并且经常以其提供具有抽象要求的有效概念的能力而倍受赞誉。坦白说,这让我发疯,而且我不喜欢随便“弥补”。我曾经以为这是有问题的,但是我已经开始感觉到了转变,而且我想知道在很少给与指导的情况下是否需要调整我的思想(和编程)过程。我应该开始学习这种技能吗?还是坚持将需求的收集和业务规则放在首位的想法?

15
用单个下划线命名未使用的变量是不好的做法吗?
通常,当语言的语法要求我命名一个从未使用过的变量时,我将其命名为_。 在我看来,这减少了混乱,让我专注于代码中有意义的变量。我发现它不引人注目,因此可以产生“视线之外,头脑混乱”的效果。 我执行此操作的一个常见示例是在SQL中命名子查询。 SELECT * FROM ( SELECT * FROM TableA JOIN TableB ON TableA.ColumnB = TableB.ColumnB WHERE [ColumnA] > 10 ) _ --This name is required, but never used here ORDER BY ColumnC 另一个示例是未使用的循环变量。 array = [[] for _ in range(n)] # Defines a list of n empty lists …

7
在面试中如何评估应试者对HTML / CSS的了解?[关闭]
我正在尝试确定一些不错的面试问题,以评估人们从事Html / CSS工作的能力,但是该主题涉及面非常广泛,我不确定我可以问什么样的问题来正确评估某人的HTML / CSS知识。 在面试过程中,我可以问什么样的问题来评估候选人的HTML / CSS能力? 理想情况下,我想问几个问题,然后给他们一个真实的场景来应对。

13
设计模式-您使用它们吗?
作为一名IT专业学生,我们的一位老师最近给了我一些有关设计模式的概述。我了解它们的用途,但某些方面仍然困扰着我。 它们是大多数程序员真正使用的吗? 说到经验,我在编程时遇到了一些麻烦,但我暂时无法解决,但是Google和一些小时的研究解决了我的问题。如果在网络中某个地方找到解决问题的方法,这是一种设计模式吗?我在用吗? 而且,您(程序员)在开始开发时是否发现自己正在寻找模式(顺便问一下,我应该在哪里寻找?)?如果是这样,那肯定是我必须开始接受的习惯。 更新:我想当我问程序员是否使用它们时,我是在问是否有问题要解决时,您会认为“哦,我应该使用该模式”。

1
什么是未分类的错误?
我是本科生,学习计算机科学。当我尝试向多个项目报告错误时,我遇到了很多未经分类的分类。网络搜索并没有真正解释这意味着什么。 你能告诉我什么是未分类的错误吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.