软件工程

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

24
带给编程面试什么?[关闭]
我刚刚完成计算机科学硕士学位,并以开发人员的身份进行了首次面试。我在大型开发项目中经验不足,但是我希望大学教育能有所作为。 我想知道,我应该带什么材料打动面试官?大多数面试官期望什么,尤其是对新毕业生而言? **编辑: 面试顺利,除了我忘了裤子。 感谢您提供的所有宝贵建议!
31 interview 

13
您最困难的错误搜寻是什么?如何找到并杀死它?
这是一个“共享知识”问题。我有兴趣从您的成功和/或失败中学习。 可能有用的信息... 背景: 上下文:语言,应用程序,环境等 错误是如何识别的? 谁或什么识别出该错误? 复制错误有多复杂? 狩猎。 你有什么计划? 您遇到了什么困难? 最终如何找到违规代码? 杀人。 解决方法有多复杂? 您如何确定修补程序的范围? 该修复程序涉及多少代码? 验尸。 技术上的根本原因是什么?缓冲区溢出等 30,000英尺的根本原因是什么? 该过程最终需要多长时间? 该修复程序是否有不利影响的功能? 您发现哪些方法,工具,动机特别有用?...非常没用? 如果你能再做一遍吗?............ 这些示例是通用示例,不适用于所有情况,并且可能无用。请根据需要调味。
31 experience  bug 

5
当不需要属性之一时实现接口
很简单。我正在实现一个接口,但是该类没有一个属性是必需的,实际上,不应使用该属性。我最初的想法是做一些类似的事情: int IFoo.Bar { get { raise new NotImplementedException(); } } 我想这本身没有错,但是感觉并不“正确”。有人遇到过类似情况吗?如果是这样,您是如何处理的?

10
您通常将对象或其成员变量发送到函数中吗?
这两种情况之间普遍接受的做法是: function insertIntoDatabase(Account account, Otherthing thing) { database.insertMethod(account.getId(), thing.getId(), thing.getSomeValue()); } 要么 function insertIntoDatabase(long accountId, long thingId, double someValue) { database.insertMethod(accountId, thingId, someValue); } 换句话说,通常是将整个对象传递给您,还是只传递所需的字段,这更好吗?

5
在同一个文件中定义多个类是否被认为是Pythonic?
在第一次使用python时,我发现我最终在同一文件中编写了多个类,这与Java之类的其他语言(每个类使用一个文件)相反。 通常,这些类由1个抽象基类组成,其中1-2个具体实现的用法略有不同。我在下面发布了一个这样的文件: class Logger(object): def __init__(self, path, fileName): self.logFile = open(path + '/' + filename, 'w+') self.logFile.seek(0, 2) def log(self, stringtoLog): self.logFile.write(stringToLog) def __del__(self): self.logFile.close() class TestLogger(Logger): def __init__(self, serialNumber): Logger.__init__('/tests/ModuleName', serialNumber): def readStatusLine(self): self.logFile.seek(0,0) statusLine = self.logFile.readLine() self.logFile.seek(0,2) return StatusLine def modifyStatusLine(self, newStatusLine): self.logFile.seek(0,0) self.logFile.write(newStatusLine) self.logFile.seek(0,2) class GenericLogger(Logger): def …

10
为什么Math.Sqrt()是静态函数?
在讨论静态和实例方法时,我总是认为,这Sqrt()应该是数字类型的实例方法,而不是静态方法。这是为什么?显然,它对一个值有效。 // looks wrong to me var y = Math.Sqrt(x); // looks better to me var y = x.Sqrt(); 值类型显然可以具有实例方法,就像在许多语言中一样,有一个实例方法ToString()。 从评论中回答一些问题:为什么1.Sqrt()不合法?1.ToString()是。 某些语言不允许对值类型使用方法,但是某些语言可以。我正在谈论这些,包括Java,ECMAScript,C#和Python(已__str__(self)定义)。这同样适用于其他功能,例如ceil(),floor()等等。


12
将您在工作中生成的代码重新用于个人项目是错误的吗?
在我的各种工作场所中,我总是写代码,这使我认为“在其他情况下这将非常有用”。的确,即使我花了更长的时间写代码,我还是故意写的,我知道这会在将来对我有所帮助(例如自定义SubString()函数)。这些摘录的一个不错的选择是各种“助手”类。 我确定这些片段可能会在网上其他地方找到,但重点是,我写了它们,以后将在其他工作或个人项目中再次使用它们。目前,我没有维护个人代码库,但问题是,将您在工作中产生的代码用于(a)用于个人项目,(b)用于其他工作是否是错误的?

4
在Web开发项目中将后端和前端分成两个位置是否常见?
在网络启动时,让工程师处理功能的前端和后端(主要负责整个功能)是否更常见?还是让工程师在后端和前端分开? 哪些更有益,哪些情况适合? 我已经注意到,由一位工程师来负责整个功能的缺点是,该人可能只在前端或后端开发方面特别强大,但不能同时兼顾两者,因此有时速度和质量都会下降。 前端和后端开发人员使用一项功能可以提高功能的速度和质量,并鼓励协作。但是我担心要有2位工程师在一个功能上工作,这可能会浪费资源,因为1位工程师可以放在另一个功能上进行工作。 在小型早期启动阶段分配后端/前端工程资源的常用/最佳实践是什么?然后随着它的增长它将如何变化?


5
功能语言中的异步编程
我主要是C / C ++程序员,这意味着我的大部分经验都涉及过程和面向对象的范例。但是,正如许多C ++程序员所知道的那样,多年来,C ++的重点已转移到具有功能的风格,最终在C ++ 0x中增加了lambda和闭包。 无论如何,尽管我在使用C ++ 进行功能样式编码方面有丰富的经验,但是我对诸如Lisp,Haskell等实际功能语言的经验却很少。 我最近开始研究这些语言,因为纯功能语言中的“无副作用”的想法一直吸引着我,特别是在将其应用于并发和分布式计算方面。 但是,出于C ++的背景,我对于这种“无副作用”的哲学与异步编程的工作方式感到困惑。异步编程是指可以分发用户提供的事件处理程序以处理异步发生的事件(程序流之外)的任何框架/ API /编码样式。这包括异步库,例如Boost.ASIO,甚至只是普通的C语言。信号处理程序或Java GUI事件处理程序。 所有这些共同点是,异步编程的性质似乎需要创建副作用(状态),以使程序的主要流程意识到已调用了异步事件处理程序。通常,在Boost.ASIO之类的框架中,事件处理程序会更改对象的状态,从而使事件的影响传播到事件处理程序功能的生存期之外。真的,事件处理程序还能做什么?它不能“返回”值到调用点,因为没有调用点。事件处理程序不是程序主流程的一部分,因此它对实际程序有任何影响的唯一方法是更改​​某些状态(或更改longjmp为另一个执行点)。 因此,似乎异步编程是关于异步产生副作用的。这似乎与函数式编程的目标完全矛盾。这两种范例在功能语言中如何进行协调(实际上)?


5
何时在Python中使用字典和元组
想到的特定示例是文件名及其大小的列表。我不能决定列表中的每个项目是否应该是这样的形式{"filename": "blabla", "size": 123},或者只是("blabla", 123)。字典对我来说似乎更合乎逻辑,因为例如访问大小file["size"]比file[1]... 更具解释性,但是我不确定。有什么想法吗?

5
覆盖具体方法是否有代码气味?
重写具体方法是否确实有代码异味?因为我认为您需要重写具体方法: public class A{ public void a(){ } } public class B extends A{ @Override public void a(){ } } 可以重写为 public interface A{ public void a(); } public class ConcreteA implements A{ public void a(); } public class B implements A{ public void a(){ } } 如果B要在A中重用a(),则可以重写为: public class …

4
魔术字符串/数字的用法
这是一个颇具争议的话题,我想与程序员一样多。但是,为此,我想知道业务(或您的工作场所)中的常见做法。 在我的工作场所,我们有严格的编码准则。其中一部分专门用于魔术字符串/数字。它指出(对于C#): 除了定义符号常量外,请勿在代码中使用数字或字符串的文字值。使用以下模式定义常量: public class Whatever { public static readonly Color PapayaWhip = new Color(0xFFEFD5); public const int MaxNumberOfWheels = 18; } 有例外:几乎可以始终安全地使用值0、1和null。通常,值2和-1也可以。用于记录或跟踪的字符串不受此规则的限制。当文字的含义在上下文中很清楚且不受将来的更改时,允许使用文字。 mean = (a + b) / 2; // okay WaitMilliseconds(waitTimeInSeconds * 1000); // clear enough 理想的情况是在以下情况下一些官方研究论文对代码的可读性/可维护性产生影响: 魔术数字/字符串无处不在 魔术字符串/数字会被常量声明合理地替换(或在不同程度的覆盖范围内)-请不要因为使用“合理地”而对我大喊大叫,我知道每个人都有不同的想法,“合理地”是什么 魔术字符串/数字被多余地替换在不需要的地方(请参见下面的示例) 在与一位同事争论时,我希望这样做具有一些基于科学的论据,而后者将要声明常量,例如: private const char SemiColon = ';'; private …

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.