程序设计

专业和发烧友程序员的问答


30
接口vs抽象类(通用OO)
最近,我接受了两次电话采访,有人问我接口和抽象类之间的区别。我已经解释了我可以想到的各个方面,但是似乎他们正在等我提及一些特定的内容,我不知道它是什么。 根据我的经验,我认为以下是对的。如果我缺少要点,请告诉我。 接口: 接口中声明的每个方法都必须在子类中实现。接口中只能存在事件,委托,属性(C#)和方法。一个类可以实现多个接口。 抽象类: 子类仅必须实现Abstract方法。Abstract类可以具有实现的常规方法。抽象类在事件,委托,属性和方法旁边也可以具有类变量。由于C#中不存在多重继承,一个类只能实现一个抽象类。 毕竟,面试官提出了一个问题:“如果您有一个仅包含抽象方法的Abstract类,该怎么办?与接口有什么不同?” 我不知道答案,但我认为这是上面提到的继承对吗? 另一个面试官问我,如果接口内有一个Public变量,那和Abstract Class有什么不同?我坚持认为,接口内不能有公共变量。我不知道他想听什么,但他也不满意。 另请参阅: 何时使用接口代替抽象类,反之亦然 接口与抽象类 您如何决定使用抽象类和接口? 接口和抽象类之间有什么区别?

7
vim“使用sudo编写”技巧如何工作?
许多人可能已经看到了允许您在需要root权限的文件上写命令的命令,即使您忘记使用sudo打开vim时也是如此: :w !sudo tee % 问题是我不明白这里到底发生了什么。 我已经想通了: w为此 *:w_c* *:write_c* :[range]w[rite] [++opt] !{cmd} Execute {cmd} with [range] lines as standard input (note the space in front of the '!'). {cmd} is executed like with ":!{cmd}", any '!' is replaced with the previous command |:!|. 因此它将所有行作为标准输入传递。 该!sudo tee零件tee具有管理员权限。 为了使所有人都有意义,%应该输出文件名(作为的参数tee),但是我找不到关于此行为的帮助参考。 tl; dr有人可以帮我剖析此命令吗?
1410 vim  sudo 


30
如何从主机获取Docker容器的IP地址
创建新容器后,是否可以运行命令以从主机获取容器的IP地址? 基本上,一旦Docker创建了容器,我就想推出自己的代码部署和容器配置脚本。
1407 docker 


30
JavaScript是按引用传递还是按值传递语言?
基本类型(数字,字符串等)按值传递,但是对象是未知的,因为它们都可以按值传递(如果我们认为保存对象的变量实际上是对该对象的引用) )和按引用传递(当我们认为对象的变量包含对象本身时)。 尽管最后并没有什么大不了,但我想知道呈现通过惯例的参数的正确方法是什么。是否有JavaScript规范的摘录,该摘录定义了与此相关的语义?

25
从其他文件夹导入文件
我有以下文件夹结构。 application/app/folder/file.py 我想从位于另一个Python文件中的file.py导入一些功能 application/app2/some_folder/some_file.py 我试过了 from application.app.folder.file import func_name 和其他一些尝试,但到目前为止,我无法正确导入。我怎样才能做到这一点?




27
为什么不继承List <T>?
在计划程序时,我通常会像这样思考: 足球队只是足球运动员的名单。因此,我应该用: var football_team = new List&lt;FootballPlayer&gt;(); 该列表的顺序代表了球员在名单中的排列顺序。 但是后来我意识到,除了仅列出球员名单以外,球队还具有其他属性,必须加以记录。例如,本赛季的总得分,当前预算,统一的颜色,string代表球队名称的a 等。 所以我想: 好的,足球队就像一个球员名单,但另外,它还有一个名称(a string)和一个总得分(an int)。.NET没有提供用于存储足球队的课程,因此我将创建自己的课程。最相似,最相关的现有结构是List&lt;FootballPlayer&gt;,因此我将从中继承: class FootballTeam : List&lt;FootballPlayer&gt; { public string TeamName; public int RunningTotal } 但事实证明,指南指出您不应继承List&lt;T&gt;。我对该指南在两个方面完全感到困惑。 为什么不? 显然List在某种程度上针对性能进行了优化。为何如此?如果我扩展,会导致什么性能问题List?到底会破裂什么? 我看到的另一个原因List是Microsoft提供的,并且我无法控制它,因此在公开“公共API”之后,以后不能更改它。但是我很难理解这一点。什么是公共API,我为什么要关心?如果我当前的项目没有并且不太可能拥有此公共API,那么我可以安全地忽略此指南吗?如果我确实继承自我,List 而事实证明我需要一个公共API,我会遇到什么困难? 为什么如此重要?列表就是列表。有什么可能改变?我可能要更改什么? 最后,如果Microsoft不希望我从那里继承List,他们为什么不上课sealed? 我还应该使用什么? 显然,对于自定义集合,Microsoft提供了一个Collection应该扩展而不是的类List。但这个类是非常裸露,并没有多少有用的东西,比如AddRange,例如。jvitor83的答案提供了该特定方法的性能原理,但是慢AddRange不是没有总比没有更好AddRange? 从Collection继承比从继承进行的工作量更大List,我看不出任何好处。毫无疑问,Microsoft不会无缘无故地告诉我做额外的工作,所以我不禁会觉得自己在某种程度上误解了某些东西,而继承Collection实际上并不是解决我的问题的正确方法。 我已经看到了诸如实施的建议IList。就是不行。这是几十行样板代码,对我毫无帮助。 最后,有些人建议将包裹起来List: class FootballTeam { public List&lt;FootballPlayer&gt; Players; } 这有两个问题: 它使我的代码不必要地冗长。我现在必须打电话,my_team.Players.Count而不仅仅是my_team.Count。幸运的是,使用C#,我可以定义索引器以使索引透明化,并转发内部的所有方法List……但这就是很多代码!我能从所有工作中得到什么? 只是没有任何意义。一支足球队没有“拥有”球员名单。这是球员名单。您不会说“ John McFootballer已加入SomeTeam的球员”。您说“约翰加入了SomeTeam”。您没有在“字符串的字符”中添加字母,而是在字符串中添加了字母。您没有将书添加到图书馆的书中,而是将书添加到图书馆。 …
1398 c#  .net  list  oop  inheritance 

30
在哪里可以找到有关在JavaScript中格式化日期的文档?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 2年前关闭。 我注意到JavaScript的new Date()功能非常聪明,可以接受多种格式的日期。 Xmas95 = new Date("25 Dec, 1995 23:15:00") Xmas95 = new Date("2009 06 12,12:52:39") Xmas95 = new Date("20 09 2006,12:52:39") 在调用new Date()函数时,我找不到任何显示所有有效字符串格式的文档。 这是用于将字符串转换为日期。如果我们从相反的角度来看,也就是将日期对象转换为字符串,直到现在,我仍然觉得JavaScript没有内置的API将日期对象格式化为字符串。 编者注:以下方法是提问者的企图是工作在一个特定的浏览器,但确实不是一般的工作; 请参阅本页上的答案以查看一些实际解决方案。 今天,我在toString()date对象上使用了该方法,令人惊讶的是,它用于将日期格式化为字符串的目的。 var d1 = new Date(); d1.toString('yyyy-MM-dd'); //Returns "2009-06-29" in Internet Explorer, but not Firefox or Chrome d1.toString('dddd, …



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.