软件工程

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

7
Scrum中是否允许随机重构代码
背景 我的团队使用Scrum 我目前没有分配任务 积压中没有其他待处理任务 今天是我的客户的劳动节。 今天没有很多事情要做,我想开始重构一些代码,我一直在我正在处理的项目中看到这些代码,但是目前我没有分配给任何sprint任务来进行任何大规模重构。 如果我开始随机重构已经拥有的代码并且一直没有写出总是困扰我但又没有时间因为其他日子的分配而修复它的代码,在Scrum中可以吗? 那我在两次冲刺之间有空闲时间的其他日子呢? 实际上,我确实相信连续重构。我总是在分配故事时使用我正在工作的代码段,但是我看到的其他一些当前与当时正在处理的代码无关的代码又如何呢?

2
内部使用网站:是否有针对SQLite的令人信服的案例?
许多Web框架(例如Flask或Django)都使用SQLite作为其默认数据库。 SQLite之所以引人注目,是因为它包含在python中,并且管理开销非常低。 但是,大多数高流量的公共生产站点最终都使用更重的数据库:mySQL,Oracle或postgresql。 问题: 假设: 站点流量适中,并且将同时进行对数据库的读/写访问 我们将结合使用SQLAlchemy和SQLite写锁(尽管此注释使我有些紧张) 该数据库可能包含60,000条记录 数据结构不需要在较重的数据库中发现的高级功能 对于作为中等流量内部公司工具的网站,是否存在令人信服的反对SQLite并发的案例?如果是这样,什么条件将导致SQLite出现并发问题? 我正在寻找已知的特定根本原因,而不是普遍的恐惧/未经证实的指责。

4
面向数据的设计-不超过1-2个结构“成员”不切实际?
数据导向设计的常见示例是Ball结构: struct Ball { float Radius; float XYZ[3]; }; 然后他们提出了一种迭代std::vector<Ball>向量的算法。 然后它们给您同样的东西,但是在面向数据的设计中实现: struct Balls { std::vector<float> Radiuses; std::vector<XYZ[3]> XYZs; }; 这样做很好,而且如果您要先迭代所有半径,然后遍历所有位置,依次类推,那么一切都很好。但是,如何移动矢量中的球?在原始版本中,如果您有std::vector<Ball> BallsAll,则可以将任何移动BallsAll[x]到任何一个BallsAll[y]。 但是,对于面向数据的版本,要对每个属性执行相同的操作(对于Ball,则必须执行两次(半径和位置)。但是,如果您拥有更多的属性,情况会变得更糟。您必须为每个“球”保留一个索引,并且在尝试移动它时,必须在每个属性向量中进行移动。 这不会破坏面向数据设计的任何性能优势吗?

6
设计用于在Android中同步数据
我已经看到在大多数应用程序上,用于在服务器和客户端之间同步数据的两种实现。假设未设置GCM:- 定期运行意向服务,该意向服务从网络下载数据并存储在数据库中。 实现一个定期运行的同步适配器。 您建议在应用程序中包含以上哪一项?为什么?

4
与将字符串连接在一起并一次调用相比,经常调用println()有多糟糕?
该问题是从Code Review Stack Exchange 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 5年前。 我知道输出到控制台是一项昂贵的操作。出于代码可读性的考虑,有时最好调用一个函数两次输出文本,而不是将一长串文本作为参数。 例如,效率降低多少 System.out.println("Good morning."); System.out.println("Please enter your name"); 与 System.out.println("Good morning.\nPlease enter your name"); 在该示例中,区别仅在于一个呼叫,println()如果更多,该怎么办? 与此相关的是,如果要打印的文本很长,则在查看源代码时,涉及打印文本的语句可能看起来很奇怪。假设文本本身不能简短,该怎么办?是否应该出现多次println()通话的情况?曾经有人告诉我,代码行不应超过80个字符(IIRC),那么您将如何处理 System.out.println("Good morning everyone. I am here today to present you with a very, very lengthy sentence in order to prove a point about how …
23 java  c++  performance  c  io 

4
当我有JSON时,Odata有什么需求?
我试图了解Odata的意义以及何时才有意义。现在,我的工作方式是使用ASP.NET和MVC / WebApi控制器将对象序列化/反序列化为JSON,并让javascript对其进行处理。 据我所知,OData的优点是能够直接从URL查询...但是由于我正在编写客户端和服务器代码,因此不需要这样做。 有人会用JavaScript解析ODaya查询的结果吗? 也许OData更多地是为所有客户端提供通用终结点,以便从JSON不提供的查询中获取详细信息?因此,如果我是数据提供者,那么我想那是odata的作用吗? 帮助我了解REST / JSON / ODATA的目的和用途。
23 javascript  rest  json 

4
比文档更喜欢示例。这是行为问题吗?
每当我遇到新的API或编程语言,甚至是简单的Linux 手册页时,我总是(从我记得以来)就避免使用它们,而是懒惰地依靠示例来理解新概念。 在潜意识中,无论文档/ API不是简单明了,晦涩难懂还是无聊,我都会避免使用它。自从我开始编程已经有好几年了,现在我觉得我需要修正自己的方式,因为我现在意识到我要避免阅读晦涩难懂的文档,从而造成更大的损失,因为它仍然比官方示例高一百万倍文档的覆盖面比那里的任何示例都多。即使意识到这一点,示例也应被视为“附加”价值,而不是“主要”学习资源。 我该如何改掉作为程序员的这种坏习惯?

4
如何在Python库模块中处理数据库连接
我已经在Python中创建了一个库,其中包含用于访问数据库的函数。这是一个围绕第三方应用程序数据库的包装库,由于第三方应用程序未提供像样的API的事实而编写。现在,我最初让每个函数在正常的函数调用期间打开数据库连接,直到我的程序逻辑对函数使用嵌套调用为止,然后我将调用特定函数数千次。这不是很出色。分析这表明开销在数据库连接设置中-每个函数调用一次。因此,我将打开的连接从函数内部移动到模块本身,以便在导入库模块时将打开数据库连接。这给了我令人满意的表现。 现在我有两个问题。首先,我是否需要担心我不再显式关闭数据库连接,并且如何通过此设置显式地进行操作?其次,我所做的工作是否接近良好实践的领域?否则我将如何处理呢?
23 python 

2
RESTful API中的用户权限级别
假设我有一家公司对互联网上最可爱的猫进行排名。 我提供的资源/cats/可为用户提供最新,最可爱的可爱猫咪。 如果他们根本没有付款或没有注册,用户可以只获得排名前三的猫。如果付款的话,排名前10的猫是337美元,如果登录的话,排名前100位的猫是1。 简而言之,的消费者/cats/会根据其“用户排名”获得不同数量的猫。我在消费端确实有一个用户标识符,但是在消费端没有明确表示用户级别。我想通知用户他们可以在提出请求时升级其订阅。也就是说,我需要区分3只猫,因为我只提供3只猫和3只猫,因为这是用户级别所允许的。 区分由于消费者没有足够的特权而限制资源和因为消费者具有足够的特权而对其进行区分的最佳实践是什么? 客户如何知道他们是否可以提高排名?也就是说,他们只有有限的资源,因为他们没有权限。最佳做法是什么? 注意,这是实际情况的粗略简化。另外,为了澄清-感谢阅读。 更新: 我们考虑了以下选项: 仅在客户端上存储一次用户权限对象,仅在执行帐户登录或升级时对其进行查询。 null在JSON中传递值表示存在,但实际上什么也没有转移。因此,对于有3只猫的用户来说,这可能是10只猫["Garfield","Sylvester","Puss in Boots",null*7] 传递资源许可对 {cats:["Whiskers","Fluffy","Socks"],authCount:3} 我想在第一时间做到这一点,以可能的最佳方式运送最可爱的猫,我们也希望
23 rest  http  url  http-response 

4
为什么许多设计会忽略RDBMS中的规范化?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 我看到很多设计都认为标准化不是决策阶段的首要考虑。 在许多情况下,这些设计包括超过30列,主要方法是“将所有内容放置在同一位置” 根据我记得,归一化是最重要的第一件事,那么为什么有时它这么容易掉下来? 编辑: 好的建筑师和专家选择非规范化的设计,而没有经验的开发人员选择相反的设计,这是真的吗?反对着手规范化设计的观点是什么?

7
垃圾回收的演示比手动内存管理更快
我已经在很多地方读取(赫克,我甚至写了那么我自己),垃圾回收可能(理论上)比手工内存管理更快。 但是,展示要比讲讲难得多。 我从未真正看到过任何代码可以证明这种效果。 是否有人拥有(或知道在哪里可以找到)证明这种性能优势的代码?

6
如何解决嵌套评论的问题
不能嵌套注释的语言不只是一种。您对此问题有很好的解决方案吗?在C / C ++和Java中,一种解决方法是仅使用单行注释,但是注释掉较大的块将变得不可能。我正面临着这样的事情: </li><!-- <li><!-- Save --> 因此,我必须手动浏览并编辑评论。您能以多种语言建议我们应该如何处理吗?我不确定,但是python '''可能为此提供了解决方案,可以#在python中添加注释?`
23 java  c++  python  c  comments 

2
SQL IN()与OR
我正在处理我今天编写的查询,必须将WHERE子句中的代码更改为使用IN(东西列表)过滤器,而不是使用类似 item_desc = 'item 1' OR item_desc = 'item 2' OR item_desc = 'item 3' OR item_desc = 'item 4' 上面的内容运行了15分钟,什么也没有返回,但是下面的内容在1.5分钟内给了我我的结果 item_desc IN ( 'item 1' ,'item 2' ,'item 3' ,'item 4' ) 我在SQL中执行此操作,并且想知道为什么IN(项列表)执行的速度比OR语句快得多。 -编辑-SQL Server 2008,我很抱歉没有将这些信息放在第一位。 这是使用OR语句的全部查询: DECLARE @SD DATETIME DECLARE @ED DATETIME SET @SD = '2013-06-01'; SET @ED …
23 sql  speed 

7
安全修复生产数据库数据
会发生错误,有时必须在生产中修复数据。从大公司的角度来看,最安全的方法是什么?有没有可以帮助的工具?以下是推动此要求的一些注意事项... 我们需要记录谁运行了查询以及他们运行了什么 理想情况下,我们需要授予该人员访问权限,使其只能在短时间内针对感兴趣的表运行查询 无论正在运行什么查询,都需要对此有一些技巧,以防止长时间运行和锁定SQL未经明确许可而运行 此过程需要与DB无关,或者至少了解DB2,Oracle和SQL Server。 我们正在努力减少因执行“错误的事情”而进行临时产品修正查询的风险,同时在此过程中增加一些安全性/听觉性。有想法还是想法?
23 database  risk 

6
在函数式编程中,没有副作用的局部可变变量是否仍被视为“不良习惯”?
在一个仅在内部使用的函数中具有可变的局部变量(例如,该函数没有副作用,至少不是故意的)是否仍被视为“非函数”? 例如,在“使用Scala进行功能编程”课程样式检查中,将任何var用法视为错误 我的问题是,如果函数没有副作用,是否仍然不鼓励编写命令式代码? 例如,如果不更改输入,而不是对累加器模式使用尾递归,那么执行局部for循环并创建局部可变ListBuffer并将其添加到本地怎么了? 如果答案是“是的,即使没有副作用,也总是劝阻他们”,那是什么原因呢?

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.