软件工程

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

8
我失败了FizzBu​​zz,您会雇用我吗?[关闭]
我是一名拥有CS学位的开发人员,并且具有将近3年的使用多种语言进行开发的工作经验。 今天,我接受了一次采访,总体来说进行得很好,我为大多数问题做好了准备,并为任何事情做好了准备。在面试结束时,他们给了我一个编程问题……一个像FizzBu​​zz的问题(没有打印出数字部分)。我相信我犯了太多错误,因此“失败”了。所有的希望都对我失去了吗? 这是我的代码: void FizzBuzz() { for(int i = 0; i <= 100; i++) { bool isThree = i % 3; bool isFive = i % 5; if (isThree) { print "Fizz\n"; } else if(isFive) { print "Buzz\n"; } else { print "FizzBuzz\n"; } } } 如您所见,我搞砸了应该具有语法i%3 == 0;的布尔值;如果我没记错的话,我还用isThree && …
27 interview 


4
正则表达式是一种编程语言吗?
从学术意义上讲,正则表达式是否可以用作编程语言? 我好奇的动机是我刚刚看了一个SO问题,问“正则表达式可以X吗?”。这让我想知道,对于使用它们的可能解决方案,可以从一般意义上说什么。 我基本上是在问,“图灵正则表达式是否完整”?

6
单元和集成测试:如何成为反射
我们团队中的所有程序员都熟悉单元测试和集成测试。我们都与之合作。我们都对其进行了书面测试。我们中有些人甚至对他/她自己的代码感到更加信任。 但是,由于某种原因,编写单元/集成测试尚未成为团队任何成员的反思。当不与实际代码同时编写单元测试时,我们所有人实际上都不会感到难过。结果,我们的代码库大部分没有被单元测试发现,并且项目未经生产就进入生产。 当然,这样做的问题是,一旦您的项目投入生产并且已经正常运行,就几乎不可能获得时间和/或预算来添加单元/集成测试。 我的团队和成员自己已经熟悉了单元测试的值(1,2),但它似乎并没有帮助将单元测试到我们的工作流程自然不会。根据我的经验,强制执行单元测试和/或目标覆盖范围只会导致质量测试不佳,并且会降低团队成员的速度,这仅仅是因为没有自发产生这些测试的动力。同样,一旦压力减轻,就不再编写单元测试。 我的问题是:您是否尝试过任何方法来帮助团队内部建立动力/动力,导致人们自然地希望创建和维护这些测试?

4
我是否必须从应用商店中删除我的应用?(侵犯版权)
我刚刚收到一份版权侵权通知,说我的应用违反了我的应用使用的服务的使用政策。 但是,此邮件不是直接来自运行我从中提取信息的网站的公司。邮件来自一家公司,该公司在应用程序商店中有相同类别的某些付费应用程序(我的是免费的),因此他们显然希望我离开。 我的问题是,在我直接收到运营该网站的公司的消息之前,我是否可以忽略此邮件?从他们(与我联系的公司)的网站上判断,他们与我从中获取信息的公司之间没有任何联系。

6
空指针与空对象模式
归因:这源于一个相关的P.SE问题 我的背景是C / C ++,但是我在Java中工作了很多,目前正在编写C#。由于我的C语言背景,检查传递的指针和返回的指针是二手的,但是我承认这偏颇了我的观点。 最近,我提到了空对象模式,其中的想法是始终返回对象。正常情况下返回预期的填充对象,错误情况下返回空对象而不是空指针。前提是调用函数将始终具有某种要访问的对象,因此避免了空访问内存冲突。 那么,与使用Null Object Pattern相比,Null Check的利弊是什么? 我可以看到带有NOP的更干净的调用代码,但是我还可以看到它将在何处创建隐藏的失败,否则这些失败将不会引发。我宁愿让我的应用程序在开发过程中严重失败(又称异常),而不愿让无声的错误逃脱。 空对象模式不能像不执行空检查一样具有类似的问题吗? 我使用过的许多对象都拥有自己的对象或容器。似乎我必须有一个特殊情况,才能保证所有主要对象的容器都有自己的空对象。多层嵌套似乎会使这种情况变得难看。

4
调解员与观察员?
有人能给我提供上的差异的规范答案Observer和Mediator,以及什么时候应该使用一个模式比其他的总结? 我不确定什么样的情况下需要一个Observer什么样的将需要Mediator

3
我应该使用WADL描述我的RESTful API吗?
我将着手进行一个广泛使用正确的RESTful方法的项目。也就是说,它使用HATEOAS并以允许客户端进行常规探索的方式提供资源。 我想确保以一种允许以多种语言自动生成客户端应用程序的方式提供对端点的描述。我了解对于基于SOAP的Web服务,我可以使用WSDL,并且显然有WSDL2提供了与REST一起使用的HTTP动词的更大定义。但是,我看到许多关于它的实用程序的文章来回摆动。 因此,我应该使用WADL来允许外部代码生成器快速为我的Web应用程序构建客户端,还是期望有更好的标准?

3
具有验证检查的控制流样式
我发现自己在写很多这样的代码: int myFunction(Person* person) { int personIsValid = !(person==NULL); if (personIsValid) { // do some stuff; might be lengthy int myresult = whatever; return myResult; } else { return -1; } } 它可能会变得非常混乱,特别是如果涉及多个检查。在这种情况下,我尝试了多种样式,例如: int netWorth(Person* person) { if (Person==NULL) { return -1; } if (!(person->isAlive)) { return -1; } int …

6
“消息传递”系统与“基于事件”系统的优点
我的问题来自一个没有受过教育的观点。 “ 消息传递 ”系统与“ 基于事件 ”系统的相对优点是什么? 为什么一个选择另一个?他们的优缺点是什么? 我不仅想知道“理论上”,而且想知道“实践中”。 编辑: 具体问题: 我想构建可充当小型服务(每个执行一些小任务或提供一些信息)的可插入组件的系统。 服务可以: 分层,以便一项服务的输出可以充当另一项服务的输入之一 具有包含层次结构,因此一个服务可以由另一服务包含,而无需前面句子中提到的特定输入/输出关系 该系统的目标是将另一个系统中的单个低级事件流转换为更高级别的信息和功能,并另外提供一个返回到另一个提供单个事件系列的系统的通道。 如果还不够,我可以提供更多详细信息。 环顾四周后。这和这可能更好地描述我的情况。 看来这很适合我的情况:http : //akka.io/

4
我应该更改WTFPL的名称吗?
我在GitHub上发布的个人项目中使用了WTFPL。 目前,我正在逐字使用许可证,但我怀疑我不应该离开第三行: Copyright (C) 2004 Sam Hocevar <sam@hocevar.net> 在那儿,应该用我的名字代替山姆的名字。 但是许可证对此非常混乱。 WTFPL网站的一半是关于WTFPL本身的,所以我认为版权声明可能是指许可文本本身的版权,而不是使用许可的项目的版权。 但是,该网站还说: 允许每个人复制和分发此许可证文档的逐字记录或经修改的副本,并且只要名称更改,就可以进行更改。 因此,我是否必须将名称从“ WTFPL”更改为“ WTFPL-Domenic”?
27 licensing 

3
WebStorm包含哪些功能,而RubyMine不包含?
我正在购买Rubymine,因为我正在做少量的红宝石,但是却做大量的html5 / javascript。 我准备使用Webstorm,因为我确实有很多基于html5 / js的框架/应用程序正在工作,但是随后我读到WebStorm / PhpStorm / Rubymine等都基于其IDEA框架,并且看起来像每个框架都包含WebStorm的功能,除了一些不是立即可用但可以通过插件添加的功能。 我对WebStorm感兴趣的主要功能是: 来自IDE的JS单元测试 UI中的JS皮棉/提示覆盖率 DOM / JS重构/智能感知 Coffeescript支持 SVN / Git集成 FTP和远程同步(尽管不如其他重要) 因此,鉴于以上所述,Rubymine也会提供上述功能吗?我宁愿拥有1个可以同时使用的IDE,也不愿拥有2个具有很多重叠功能的IDE。 是否只有Webstorm内有任何特定功能,而其他任何IDE中都没有?
27 javascript  ide  ruby 

11
服务器是否应该“宽容”它所接受的内容并“静默丢弃错误的输入”?
我的印象是,到现在为止,每个人都同意这句话是错误的。但是我最近看到了这个答案,其中有一个“宽容”的评论被投票了137次(截止到今天)。 在我看来,宽容浏览器的原因是HTML和其他一些Web标准在几年前就完全混乱的直接原因,并且直到最近才开始从该混乱中明确体现出来。我的看法是,宽容您所接受的东西会导致这种情况。 格言的第二部分是“以静默方式丢弃错误的输入,除非规范要求,否则不返回错误消息”,这使人感到不快。任何在某些问题无声地失败时撞墙的程序员都会知道我的意思。 那么,我对此完全不对吗?我的程序是否应该宽容它所接受的内容并默默地吞下错误?还是我误解了这意味着什么? 最初的问题是“程序”,我对此表示赞同。宽大处理程序是有意义的。但是,我真正的意思是API:暴露给其他程序而非人的接口。HTTP就是一个例子。该协议是仅其他程序使用的接口。人们从不直接提供诸如“ If-Modified-Since”之类的标题中的日期。 因此,问题是:除标准实际要求的格式外,实施一项标准的服务器是否应宽松,并允许采用其他几种格式的日期?我认为,“宽容”应该适用于这种情况,而不是人机界面。 如果服务器是宽松的,这似乎是一个整体的改进,但是我认为在实践中,它只会导致客户端实现最终依赖宽大处理,因此无法以稍有不同的方式与另一台宽松的服务器一起工作。 那么,公开某些API的服务器应该宽容还是一个非常糟糕的主意? 现在开始宽大处理用户输入。考虑使用YouTrack(错误跟踪软件)。它使用的文字输入语言让人联想到Markdown。除了“宽大”。例如写 - foo - bar - baz 是不是创建一个项目符号列表的文档的方式,但它的工作。因此,它最终在我们的内部Bugtracker中被大量使用。下一个版本问世了,这个宽大的功能开始工作时略有不同,打破了一堆(误用)此(非)功能的列表。当然,创建项目符号列表的文档化方法仍然有效。 那么,我的软件应该宽容接受的用户输入吗?

9
单例模式的替代方案
我对单例模式有不同的看法。一些人主张应不惜一切代价避免使用它,而另一些人则认为在某些情况下它可能是有用的。 我使用单例的一种情况是当我需要一个工厂(假设类型F的对象f)来创建某个类A的对象时。工厂使用一些配置参数创建一次,然后每次使用类型A被实例化。因此,要实例化A的代码的每个部分都获取单例f并创建新实例,例如 F& f = F::instance(); boost::shared_ptr<A> a = f.createA(); 所以我的一般情况是 出于优化原因(不需要多个工厂对象)或共享公共状态(例如,工厂知道仍可以创建A的实例),我只需要一个类的实例即可 我需要一种方法可以在代码的不同位置访问F的此实例f。 我对讨论此模式的好坏不感兴趣,但是假设我想避免使用单例,我还可以使用其他什么模式? 我的想法是(1)从注册表获取工厂对象,或(2)在程序启动期间的某个时候创建​​工厂,然后将工厂作为参数传递。 在解决方案(1)中,注册表本身是一个单例,因此我刚刚将不使用单例的问题从工厂转移到了注册表。 在情况(2)中,我需要工厂对象来自的一些初始源(对象),因此恐怕我会再次落入另一个单例(提供我的工厂实例的对象)。通过跟踪此单身人士链,我可以将问题简化为一个单身人士(整个应用程序),通过它 可以直接或间接管理所有其他单身人士。 最后一种选择(使用一个初始单例创建所有其他唯一对象并将所有其他单例注入正确的位置)是否可以接受?当有人建议不要使用单例时,这是隐式建议的解决方案,还是其他解决方案,例如在上述示例中? 编辑 由于我认为我的问题的重点已经被某些人误解了,因此这里提供了更多信息。如所解释的,例如这里,词语 单可指示(a)中的一类具有单个实例对象和(b)用于创建和访问这样的对象的设计模式。 为了使事情更清楚,让我们对(a)使用术语唯一对象, 对(b)使用术语单例模式。因此,我知道单例模式和依赖项注入是什么(顺便说一句,最近我一直在大量使用DI从我正在处理的某些代码中删除单例模式的实例)。 我的观点是,除非整个对象图都是从位于main方法堆栈上的单个对象实例化的,否则始终需要通过singleton模式访问一些唯一的对象。 我的问题是,完整的对象图创建和连接是否取决于主要方法(例如,通过一些不使用模式本身的强大DI框架)是唯一的无 单例模式解决方案。

14
可以合并编程语言吗?
我已经编程了一段时间,已经编写了一些基本程序,而且我想继续学习。我已经到达了一个点,您不知道接下来要学什么,我想问一个自己的好奇心问题。 简而言之,问题是,是否可以将多种编程语言组合成一个结果?例如,此代码可以吗? <html> cout << "Hello world!"; </html> 要么 import java.util.Scanner; cout << "Insert a number from 1 to 10"; Scanner n = new Scanner(System.in); System.out.println("The value you entered was" +n.newLine()); 这似乎是一个愚蠢的问题,但我不知道是否可能,所以这就是为什么我要问这个问题。在这个问题中,我注意到他在html代码中使用Python代码,如果上面的示例不可行,他做了什么?

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.