软件工程

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

3
我们可以从std :: string的c_str()获得什么性能?总是恒定的时间?
我最近一直在做一些必要的优化。我一直在做的一件事是更改一些ostringstreams-> sprintfs。我正在将一堆std :: strings冲刺到ac样式数组,ala char foo[500]; sprintf(foo, "%s+%s", str1.c_str(), str2.c_str()); 事实证明,Microsoft的std :: string :: c_str()实现在恒定时间内运行(它只返回一个内部指针)。看来libstdc ++也是一样。我意识到std不能保证c_str,但是很难想象另一种方式。例如,如果他们将其复制到内存中,要么不得不为缓冲区分配内存(将其留给调用方销毁,而不是STL合同的一部分),要么必须将其复制到内部静态对象中。缓冲区(可能不是线程安全的,并且您无法保证其寿命)。因此,仅返回指向内部维护的以null终止的字符串的指针似乎是唯一可行的解​​决方案。

6
只要任何推送工作中的最终提交都可以,那么中断中间的提交就可以了吗?
相关: 每个git commit都应该使项目处于工作状态吗? 假设我在本地进行了以下提交: 修改数据库架构,破坏应用程序。 更新应用程序,使其再次与数据库架构兼容。 只要我同时推送两个提交,master便会保持工作状态。但是,历史版本已损坏。 我知道我可以git rebase -i用来将提交压缩在一起。但是,生成的提交将很大且描述性较低。如果我需要搜索提交历史记录以找出更改原因的原因,我宁愿找到显示我所做的事情和原因的原始提交。 我的问题是: 有没有人遇到困难,由于打破历史的主人提交? 如果是这样,是否有一种简单的方法可以避免这些困难,而又不丢弃各个提交消息和更改?
13 git  dvcs 

3
使用错误跟踪/问题跟踪软件来讨论设计问题,新工具等
是否有人有使用bugzilla / mantis或JIRA之类的bug跟踪/问题跟踪软件的经验,不仅可以解决bug或任务,而且可以发起并维护最终导致决策的讨论? 例如,开发人员认为应废除所有受保护的字段,并使用访问它们的受保护方法更改为私有字段。这不是他的电话,他想讨论。通常,他在下一次开发人员会议上提出要点,然后在会议上做出决定。相反,我的想法是让他提出某种“决定”类型的问题并描述他的意图,就像通常描述一个错误或任务一样。 其他开发人员可以根据自己的意愿发表评论,最后,该问题以“已接受”或“被拒绝”结束。 我从中看到的优势: 异步通信:当他们还没有时间监督上述决定的所有后果时,没有人会被迫在会议上发表自己的意见。 导致决定的考虑因素的书面记录。如果后来有人再次提出这个问题,可以向他提出。 可以建立与其他问题的关系,例如可以将一项任务跟踪到一个决策。 与版本控制软件(例如提交)的集成可以追溯到决策。 缺点: 金锤味浓:通常使用问题跟踪软件来跟踪可操作的项目 组织的开销可能不成比例:与人之间无需进行简短的非正式演讲,就必须以书面形式交流自己的想法

3
如何定义和衡量代码的简单性?
在上一个有关与可读性相关的简单性的问题中,有很多答案可以帮助我看到我对代码简单性的定义和理解是不正确的。 如何定义代码的简单性?哪些软件度量和指标可用于度量代码的简单性?

8
单一责任原则-我是否过度使用它?
供参考-http://en.wikipedia.org/wiki/Single_responsibility_principle 我有一个测试场景,其中一个应用程序模块负责创建分类帐条目。可以执行三个基本任务: 以表格格式查看现有分类帐条目。 使用创建按钮创建新的分类帐条目。 单击表中的分类帐条目(第一个指针中提到),然后在下一页查看其详细信息。您可以在此页面中使分类帐条目无效。 (每页中有几个其他的操作/验证,但为了简洁起见,我将其限制为这些操作/验证) 因此,我决定创建三个不同的类- LedgerLandingPage CreateNewLedgerEntryPage ViewLedgerEntryPage 这些类提供了可以在那些页面中执行的服务,Selenium测试使用这些类将应用程序带入可以确定某些状态的状态。 当我和一位同事一起对它进行复习时,他感到不安,要求我为所有人开一门课。尽管我仍然觉得自己的设计很干净,但是我是否过度使用单一职责原则还是值得怀疑的

5
Java是跨平台游戏的不错选择吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 我正在寻找用Java创建游戏,并希望它可以在Windows,Linux和Mac上运行。我很确定C#是一个不好的选择,并且我没有足够的C或C ++经验。我想远离Flash。因此,Java对我来说是一个不错的选择吗?通常,我使用C#,并认为Java是相似的,因此我认为学习起来并不难。但是足够快吗?有没有比Java更适合我需要的语言?

3
插值搜索与二进制搜索
什么时候应该使用插值搜索而不是二进制搜索? 例如,我有一个排序的数据集,在什么情况下我应使用二进制搜索在此数据集中查找项目,或者在什么情况下应使用插值搜索? 数据集的哪些属性将是决定因素?
13 algorithms 

1
Acid3测试已经变得多么重要,应该用什么代替?
长期以来,针对浏览器的最新标准支持的默认指南是Acid 3 Test。我刚刚在适用于Chrome 15.0,Firefox 7.0,Safari 5.1和IE 9.0的Windows 7(x64)上运行了该程序,它们的得分均为100。某些动画可能会更流畅,但总体而言,它们之间并没有太多区别。 然后,我查看了html5test.com的得分,这些得分表现出更大的差异: 343/450:Chrome 15.0 298/450:Firefox 7.0 293/450:Safari 5.1 141/450:IE 9.0 还有其他测试对浏览器功能支持有用吗?HTML5测试的最低分数是“好”分数? HTML5测试分数有多重要,它真的可以正确测试所有新功能吗?它可以很好地替代Acid 3测试吗? 现在的现代浏览器是否足够合规,以使最终用户可以不了解标准支持级别?

4
回溯我的“教育”
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 前一段时间,我决定开始编程。我真的,只是跳入一种语言(Perl),然后从那里去了。我感到遗憾的是,我刚刚加入: 我没有学习基础知识(如果您将其称为基础知识)。 我没有学习计算机科学。 我认为,这个问题使我无法发挥自己的真正潜力。我应该在哪里“重启”?我应该阅读任何书籍,文章等吗?有经验的程序员应该知道什么主题吗?您有什么建议?

4
没有Spring,Ruby,Python,PHP如何管理?
我为副项目编写了工作中的企业Java应用程序和Web服务(Spring,Hibernate,Maven,RESTEasy)以及PHP(CakePHP)和Python(Django)。 虽然我确实看到了Spring带来的控制反转,面向方面编程等的价值,但是我不确定如果没有像Spring这样的框架,不在Java堆栈上的大量Web应用程序将如何管理。 那么,开发人员是否只需要“克服” Spring消除的紧密耦合的组件和其他抱怨,还是我错过了什么? 对于那些不熟悉Spring的人,我们最常使用的功能是: 控制容器的反转:应用程序组件的配置和Java对象的生命周期管理, 面向方面的编程:可以实现跨领域的例程, 事务管理:统一多个事务管理API并协调Java对象的事务。

2
我对演员模型的描述正确吗?
据我了解,参与者模型就像对象模型一样,但是有一些区别: 每个对象都产生它自己的单独线程,即使有成千上万个对象,也不是问题。 参与者不是通过调用函数和获取返回值来进行交互,而是通过发送和接收消息来进行交互。 如果您不违反该模型,则您的应用将充分利用并发功能,而不会出现竞争状况的风险。 在OO中可以执行的所有操作都可以使用actor来完成,但更好的是,问题在于最近几年我们编写的所有内容都是基于OO的-但即将进行过渡。 因此,举例来说,假设我必须定义3d向量类/角色,创建两个实例,并对它们调用求和运算。 面向对象: class V3d { constructor V3d(x,y,z) //bla float x,y,z; function sum(V3d b) { return V3d(x+b.x,y+b.y,z+b.z); } } //using: mySum = V3d(1,2,3).sum(V3d(3,2,1)) //creates 2 instances, sum, returns instantly drawPoint(mySum) //uses the result 演员模型: actor V3d { constructor V3d(x,y,z) //bla float x,y,z; loop { receive 'sum',b:V3d …

12
我在面试中一直失败,建议吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 因此,我的投资组合中有几个软件/站点。他们赚钱,但不是很多。 因此,我决定获得一些工作经验,主要是在Java / PHP初级开发职位上应聘。 问题是我正确回答了所有技术问题,我们计划进行编码“测试”,即面试的最后阶段。我永远无法放松,过分思考,最终做得很慢。有时,我只是碰了个障碍,觉得很难思考。 我不明白这一点,因为我写的其他东西正在解决更复杂的问题,而“测试”实际上却很简单,例如编写和测试回文。 有时,他们会给我一个逻辑测试,涉及到数学运算的流程,同样,我将无法在他们分配的时间内进行测试。 我知道我可以编写可销售的软件/网站,这些软件/网站可以产生很小的收入并找到解决问题的方法,但是在面试中使用简单的编码测试很难。 有什么建议么?
13 interview 

5
如何改善错误检查和处理能力?
最近,我一直在努力了解什么是正确的检查量以及什么是正确的方法。 我对此有一些疑问: 检查错误(错误的输入,错误的状态等)的正确方法是什么?显式检查错误,还是使用可以从最终代码中优化的断言之类的函数,更好?我感觉像是用很多额外的代码来明确地检查程序是否杂乱,无论如何在大多数情况下都不应该执行这些代码,更不用说大多数错误都以中止/退出失败而告终。为什么将具有显式检查的功能弄乱只是为了中止?我一直在寻找断言而不是显式检查错误,却很少能真正解释什么时候做。 大多数人说“使用断言检查逻辑错误,并使用显式检查检查其他故障”。但这似乎并没有使我们走的太远。我们可以说这是可行的: Malloc returning null, check explictly API user inserting odd input for functions, use asserts 这会使我在错误检查方面变得更好吗?我还可以做些什么?我真的很想改进和编写更好的“专业”代码。
13 c  testing  assertions 

14
我不记得学习5分钟后编程吗?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 8年前关闭。 我正在学习Java,并且找到了一位很棒的老师。他完美地解释了一切。我明白一切。我的问题是,在学习了一小段内容后,例如“嵌套的if语句”或“许多方法和实例”,我可以很好地键入所有内容,但是在5分钟后,进入新的部分(当我进入对上一节感到满意)我忘记了为上一节键入的代码。你们用来记住代码的任何技巧或技术吗?
13 java  javascript 

8
在考虑支持问题的同时,我们如何切实可行地计划项目?
我们在工作中遇到了问题:我们正在尝试安排工作时间,以便我们可以评估时间范围并获取截止日期。 问题在于,在不知道将要发生的所有事情的情况下很难计划一个项目。 例如,现在我们已经计划了到12月初的所有项目,但是到那时,我们将进行各种内部和外部会议,电话会议和额外的工作。最好说一个项目需要三个星期,但是如果这段时间有一个星期值得中断,那么完成日期将推迟一周。 问题是三折: 当我们计划项目时,时间尺度是按字面意义计算的。如果告诉我们,如果我们估计三个星期,则将截止日期定为三个星期的时间,并且没有延期的余地。 临时工作等意味着我们在项目上浪费了生产时间。 有时客户没有我们需要的时间去做工作,所以有时他们会来找我们,说他们需要在月底之前完成一个项目,即使我们认为工作需要两个月-更不用说我们已经有工作要做。 我们有一个甘特图,我们试图将其包含在我们拥有的所有项目中,并填写了时间表,但它们根本没有与甘特图进行比较。这很难说“嗯,我们为这个项目计划了3个星期,但是我们在这里已经损失了一个星期,所以截止日期必须推迟一周。” 错过我们与客户沟通的最后期限也是不专业的。 其他人如何处理这种情况?您如何管理项目计划?您将多少“额外”时间安排到一个项目中,以说明在项目期间发生的非项目工作?您如何处理支持问题以及错误和问题?您在计划期间无法解释的事情? 更新 很多好的答案,谢谢。

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.