软件工程

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

5
Web服务器如何执行同源策略?
我正在更深入地开发RESTful API,到目前为止,已经与一些不同的框架合作来实现这一目标。当然,我遇到了同源策略,现在我想知道Web服务器(而不是Web浏览器)如何实施它。据我了解,浏览器端似乎发生了一些强制执行(例如,遵守从服务器收到的Access-Control-Allow-Origin标头)。但是服务器呢? 例如,假设一个Web服务器托管了一个访问API的Javascript Web应用程序,该API也托管在该服务器上。我假设服务器将执行同源策略---以便仅允许该服务器上托管的javascript访问API。这样可以防止其他人为该API编写JavaScript客户端并将其托管在另一个网站上,对吗?那么,Web服务器如何能够阻止恶意客户端,该客户端试图声称对其API端点发出AJAX请求,同时声称正在运行源自同一Web服务器的javascript?最受欢迎的服务器(Apache,nginx)如何防御这种攻击?还是我对此的理解不合时宜? 还是跨域策略仅在客户端实施?

3
对node.js的新手来说,使用回调比事件有什么好处?
我是JavaScript新手,对V8引擎内部发生的事情一无所知。 话虽这么说,我真的很喜欢在node.js环境中的早期尝试,但是我发现自己一直在使用events.EventEmitter()作为发出全局事件的一种方式,以便我可以构造程序以适应通知者-观察者模式类似于我将要写的Objective-C或Python程序。 我发现自己一直在做这样的事情: var events = require('events'); var eventCenter = new events.EventEmitter(); eventCenter.on('init', function() { var greeting = 'Hello World!'; console.log('We're in the init function!); eventCenter.emit('secondFunction', greeting); }); eventCenter.on('secondFunction', function(greeting) { console.log('We're in the second function!); console.log(greeting); eventCenter.emit('nextFunction'); }); eventCenter.on('nextFunction', function { /* do stuff */ }); eventCenter.emit('init'); 因此,实际上,我只是将“异步” node.js代码结构化为按预期顺序执行操作的代码,如果可以的话,我有点“向后编码”。在性能上或哲学上以大量回调的方式执行此操作会有所区别吗?使用回调而不是事件来做相同的事情更好吗?

5
函数调用中的多个参数与单个数组
我有一个函数,它接受一组参数,然后将它们作为条件应用于SQL查询。但是,尽管我赞成包含条件本身的单个参数数组: function searchQuery($params = array()) { foreach($params as $param => $value) { switch ($param) { case 'name': $query->where('name', $value); break; case 'phone': $query->join('phone'); $query->where('phone', $value); break; } } } 我的同事更喜欢显式列出所有参数: function searchQuery($name = '', $phone = '') { if ($name) { $query->where('name', $value); } if ($phone) { $query->join('phone'); $query->where('phone', $value); …

5
为什么在谈论兼容性时,Internet Explorer是唯一要被版本引用的浏览器?
每当我读到的东西或听到有人在谈论HTML5,CSS和JavaScript的支持,他们总是引用的Internet Explorer使用的版本号,如Internet Explorer 6和Internet Explorer 9,但他们只是指谷歌浏览器,火狐,Safari浏览器等没有版本号。 他们是否还应该指定某些Web技术与其他浏览器而不是Internet Explorer不兼容的版本号?

2
我们有一个大型的Ruby on Rails应用程序(每月有2500万用户),我们的管理层决定在Node.js中重写,我疯了吗?
请告诉我是否: Node.js将使我们的网站更快! Node.js将消耗更少的服务器资源,我们可以节省金钱! Node.js将使我们的生产力更高! Node.js意味着我们可以共享客户端和服务器端JavaScript代码。 为了澄清起见,我们正在重写前端服务器,该前端服务器将作为API与我们现有的Ruby on Rails应用程序通信。同时,我们将Ruby on Rails应用程序重构为服务。 现有架构的更多详细信息: Memcached用于HTML部分缓存 Redis用于会话和一些结构化数据缓存 MySQL单主机,多从机 有一张大桌子可以接受大量写操作(想象一个民意测验) 否则大多读。 MongoDB中的一些元数据 Ruby on Rails 3.0 Nginx和独角兽

7
过程编程时代的设计模式是什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 相似:20年前编程是如何完成的? OOP如今非常流行,其起源于1960年代的Simula 67,后来被Smalltalk和C ++所流行。我们有DRY,SOLID,以及许多有关面向对象世界中的设计模式的书籍。 但是在广泛采用OOP范式之前,编程的主要原则是什么?主要的设计模式是什么?

3
静态工厂vs单身工厂
在我的某些代码中,我有一个类似于以下内容的静态工厂: public class SomeFactory { // Static class private SomeFactory() {...} public static Foo createFoo() {...} public static Foo createFooerFoo() {...} } 在代码审查期间,建议将其作为一个单例并注入。因此,它应如下所示: public class SomeFactory { public SomeFactory() {} public Foo createFoo() {...} public Foo createFooerFoo() {...} } 需要强调的几件事: 两个工厂都是无状态的。 方法之间的唯一区别是它们的范围(实例与静态)。实现是相同的。 Foo是没有接口的bean。 我要静态化的参数是: 该类是无状态的,因此不需要实例化 能够调用静态方法比必须实例化工厂似乎更自然。 工厂作为单例的参数是: 注入一切都很好 尽管工厂是无状态的,但使用注入进行测试还是比较容易的(易于模拟) 测试消费者时应该嘲笑它 …

5
如何巧合地克服编程问题?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 在《实用程序员》一书中,作者提到了巧合概念编程。它解释了它的原因,原因,可能遇到的危险,并将其与战争中的地雷场进行了比较。 您是否曾经看过黑白战争电影?疲倦的士兵谨慎地从灌木丛中驶出。前面有一个清理工作:是否有地雷,或者可以安全穿越?没有任何迹象表明它是雷区-没有迹象,铁丝网或陨石坑。士兵用刺刀猛扑着他的脚向前扑地,期待爆炸。没有一个。因此,他在田野上辛苦地前进了一段时间,并在前进时刺探和戳戳。最终,他确信场地是安全的,他站起身来,骄傲地向前迈进,结果被炸成碎片。 士兵最初对地雷的探测没有发现任何东西,但这只是幸运。他被误认为是一个错误的结果。 作为开发人员,我们还在雷区工作。每天都有数百个陷阱在等着我们。记住士兵的故事,我们应该警惕得出错误的结论。我们应该避免碰巧进行编程(依靠运气和偶然的成功),而要刻意进行编程... 但是我对他们描述“如何克服它”问题的方式并不满意。是的,您必须在编写代码之前先思考,但是如何实践呢?我唯一能想到的就是在现有的开放源代码项目中添加功能,您必须在这些知识上既了解“我现在正在做什么”又了解“其他代码段如何工作”,但这并不适用当您编写自己的项目时。 编辑: 您的帖子摘要: 不要猜测您的下一步行动,证明它是正确的 必要时尽可能进行单元测试和重构 添加功能-编译-经常测试 如果您无法向菜鸟解释代码,则可能是巧合。 顺便说一句,很难接受答案,这真的很难。所有答案都非常棒:)

3
为什么应该在IEnumerable <T>上使用List <T>?
在我的ASP.net MVC4 Web应用程序中,我使用IEnumerables,试图遵循这一口头禅来编程接口,而不是实现。 Return IEnumerable(Of Student) 与 Return New List(Of Student) 人们告诉我使用List而不是IEnumerable,因为列表会强制执行查询,而IEumerable不会。 这真的是最佳做法吗?有没有其他选择?我对使用可以使用界面的具体对象感到奇怪。我的奇怪感觉合理吗?


1
什么是开发人员无政府状态?
我一直在阅读有关开发人员(或程序员)无政府状态的信息,该技术似乎被认为是后敏捷开发方法。我发现它(一些资源1,2),但它似乎并没有很多在那里。 我想知道是否有人有什么好的资源可以在其中找到更多信息-如何实现,优缺点,与其他方法的比较等。


5
许多小类与逻辑(但)复杂的继承
我想知道在良好的OOP设计,干净的代码,灵活性以及将来避免代码异味方面有什么更好的选择。图像情况,您需要将很多非常相似的对象表示为类。这些类没有任何特定的功能,只是数据类,而只是名称(和上下文)不同而已。示例: Class A { String name; string description; } Class B { String name; String count; String description; } Class C { String name; String count; String description; String imageUrl; } Class D { String name; String count; } Class E { String name; String count; String imageUrl; String age; …

5
性能:JavaScript中的递归与迭代
我最近阅读了一些有关Javascript的功能方面以及Scheme与Javascript之间关系的文章(例如http://dailyjs.com/2012/09/14/functional-programming/)(后者受前者的影响,是一种功能性语言,而OO方面则继承自Self(一种基于原型的语言)。 但是我的问题更具体:我想知道是否有关于Java递归与迭代性能的指标。 我知道在某些语言中(通过设计迭代执行得更好),差异很小,因为解释器/编译器将递归转换为迭代,但是我猜可能不是Javascript的情况,因为它至少部分是功能语言。

6
为什么计算机不将小数存储为第二个整数?
当分母不是2 ^ x的解时,计算机很难存储分数。这是因为小数点后的第一个数字为1/2,第二个为1/4(或1 /(2 ^ 1)和1 /(2 ^ 2))等。 当计算机将数字的小数部分存储为另一个整数(因此是准确的)时,为什么要处理各种舍入错误? 我唯一想到的就是处理重复的小数(以10为基数),但是可能有一个边缘解决方案(就像我们目前使用无穷大)。

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.