软件工程

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

2
大项目布局:在多个子项目上添加新功能
我想知道如何使用版本控制管理系统来管理具有许多组件的大型项目。 在我当前的项目中,有四个主要部分。 网页 服务器 管理控制台 平台。 Web和服务器部分使用了我编写的2个库。总共有5个git存储库和1个mercurial存储库。项目构建脚本位于平台存储库中。它使整个构建过程自动化。 问题是当我添加一个会影响多个组件的新功能时,我必须为每个受影响的存储库创建分支。实施功能。合并回去。我的直觉是“出事了”。 那么我应该创建一个单一的仓库,并将所有组件放置在那里吗?我认为在这种情况下分支会更容易。或者我只是做我现在正在做的事情。在那种情况下,我该如何解决在每个存储库上创建分支的问题?


2
响应式Web设计与用户代理嗅探
CSS3 media查询功能在开发可适应许多不同屏幕尺寸和设备的网站方面带来了许多有趣的可能性。 但是,实际上,我开始意识到CSS3 media查询功能以及整个“响应式Web设计”运动可能无法实现其承诺。 我看到的问题是,归根结底,Web开发人员最关心的是他们的用户是通过台式机,平板电脑还是移动设备查看内容。但是CSS3只提供一种检测屏幕分辨率的方法。从理论上讲,检测屏幕分辨率似乎是针对各种不同设备进行调整的好方法。但是实际上 假设我们有一个简单的Javascript函数,它仅输出屏幕宽度: function foo() { alert(screen.width); } 在我的Blackberry Touch上,输出: 768 在我的三星Galaxy上,输出: 800 所以...在这一点上,主流智能手机的分辨率已经非常接近台式机级别的分辨率。如果只需要屏幕分辨率,那么检测用户是否正在通过智能手机,平板电脑或台式机查看您的网站的能力似乎变得越来越困难。 这使我质疑基于媒体查询的整个CSS3“响应式Web设计”运动背后的全部智慧。似乎media查询功能更适合于适应桌面屏幕上调整大小的浏览器窗口,而不是各种移动设备。 用于检测移动设备或平板设备的另一种可能的技术是通过检查ontouchstart事件是否受支持来使用功能检测。但是,随着许多桌面屏幕开始支持触摸,即使这样也变得越来越不可靠。 问题:因此,作为一名Web开发人员,如果我不能依靠RWD或功能检测,用户代理嗅探(一如既往地不可靠)是否真的是检测移动设备的最佳选择?

1
如何编写可读的Clojure代码?
我是Clojure的新手。我可以理解我编写的代码,但是以后很难理解。 括号很难匹配。 在各种情况下,有关命名约定和缩进的通用约定是什么? 例如,我写了一个示例性的解构示例来理解,但是第二次看起来却完全不可读。 (defn f [{x :x y :y z :z [a b c] :coll}] (print x " " y " " z " " a " " b " " c)) 在进行解构的情况下,最好直接在参数级别执行此操作,还是启动一个let表格然后再继续执行?

2
Jenkins可以自动部署ASP.NET应用程序
是否有可能使用Jenkins自动/半自动部署ASP.NET Web应用程序。它可以在受控制或不受控制的环境中,因为不受控制的用户需要输入用户名和密码。我正在寻找将文件从目标复制到目标并在Web服务器场方案中运行sql脚本的方法。 编辑 当前,我们正在使用bat文件来xcopy /配置应用程序池/ sql cmd等,以部署应用程序。但是要使其正常工作,生产支持团队需要下载源代码,构建项目并运行bat文件以部署应用程序。 现在,我们希望自动化部署而不需要用户下载源代码,而最终用户只需访问url并填写用户ID和密码参数,然后选择svn标签即可部署。但是Jenkins在匿名登录下运行,因此现有的bat文件将无法运行,因为它没有运行脚本的权限。 因此,我想知道这种情况是否存在其他选择。如果使用输入的用户名和密码来模拟用户上下文,则可以运行现有批处理文件而无需进行进一步更改,那将是很好的选择。如果不可能,我们也想探索其他想法,但是我们没有灵活性来选择诸如puppet之类的自动化工具,我们应该坚持使用这些批处理文件。

1
什么是开发堆栈?
我正要从大学毕业,目前正在寻找工作。一位面试官问我当前的“发展栈”是什么? 我知道这可能是一个非常基本的问题。但是有人可以向我解释什么是“开发堆栈”?这不是在学校使用的术语。

2
如何避免在包装器中编写大量传递函数?
我有一个类,它包装了一个通用基本类型的另一个类。由于基本类型的接口很大,因此需要编写许多传递函数。我正在寻找避免这种情况的方法。 让我们举个例子: Car / \ Volvo VolvoWithTrailer 现在,我必须在VolvoWithTrailer的car接口中实现每个函数,并在包装​​好的Volvo对象上调用适当的函数,但GetMaxSpeed()可能会返回更低的值。基本上我将有很多功能,例如 int VolvoWithTrailer::GetNumSeats() { return mVolvo.GetNumSeats() } 解决此问题的一个明显方法是使VolvoWithTrailer成为Volvo的子类。 Car | Volvo | VolvoWithTrailer 但这似乎违反了主张组成优先于继承的原则。 我还要如何避免编写所有这些包装器(语言是C ++)?或者-如果那是您的职位-为什么我应该只写它们/只使用继承?有没有模板魔术可以帮助解决这个问题?


1
最佳实践是不轮询...但是当线程调用wait()时,轮询是否不会在内部进行?
假设我们有一些线程想要检查另一个线程何时完成其任务。我已经读到我们应该调用一个wait()类型的函数,该函数将使该线程等待,直到它收到另一个线程完成的通知。这样做很好,因为这意味着我们不会执行昂贵的轮询。 但是反正不是在内部进行较低级别的轮询吗?也就是说,如果我们使线程wait()是内核不执行轮询来检查另一个线程何时完成,以便它可以随后通知第一个线程? 我想我在这里错过了什么,有人可以启发我吗?

3
为什么编译器不能避免自己两次导入头文件?
C ++的新手!因此,我正在阅读以下内容:http : //www.learncpp.com/cpp-tutorial/110-a-first-look-at-the-preprocessor/ 护头板 因为头文件可以包含其他头文件,所以有可能最终导致头文件被多次包含的情况。 因此,我们制定了预处理程序指令来避免这种情况。但是我不确定-为什么编译器不能 ... 不能两次导入相同的东西? 鉴于标头保护符是可选的(但显然是一种很好的做法),几乎让我认为在某些情况下您确实想导入两次。尽管我根本无法想到任何这种情况。有任何想法吗?
13 c++  compiler 

4
如何从头开始重写我拥有版权的代码,这样我就可以在工作中使用它而又不会失去第一版的权利?
好吧,我不想使其开源!那就是问题所在。但是我确实想在当前工作中使用它。公司不同意与我签署任何其他许可,并告诉我从头开始重写所有内容,以便他们拥有它。:( 因此,我如何以安全的方式做到这一点,以便公司以后不要再回头告诉我,我正在使用为他们编写的代码,该代码与我编写并拥有版权的第一个版本相似,在我的个人项目上还是在其他工作上? 您如何在不使其看起来像第一个版本的情况下重写第二个版本的哈希图?这对我来说听起来有点困难。:(

1
为什么瑞沙珀更喜欢“原样”而不是“原样”?
当我编写这样的代码时,其中obj是局部变量: if (obj is IMyInterface) { var result = (IMyInterface)obj; // .... } Resharper提议将其更改为如下代码: var result = obj as IMyInterface; if (result != null) { // ... } 我更喜欢前者,因为它没有提供偶然的空引用异常的机会。有什么理由偏爱其他形式? 为什么Resharper建议这样做?
13 c#  resharper 

3
“再许可”实际上是什么意思?
首先,很明显,再许可的权利并不赋予您再许可的权利。 假设我们有一个具有MIT许可证(1个文件)的库,有人向该库添加了一些功能,但将它们放在GPL下(在同一1个文件中)。或者,如果有人想再许可,他们必须将代码分开? 如果有人要使用该库,如何处理许可证? 假设开发人员仅使用MIT许可下的功能,即使文件中包含GPL下的某些功能。 由于GPL许可代码,他是否必须对GPL进行申请? 他是否必须删除GPL代码以摆脱GPL限制,或者只要他不使用GPL代码,就可以在MIT权限/限制下使用该库?

1
分叉代码库的最佳实践
我有一个关于分叉代码的最佳实践的问题。 我已经获得了Creative Commons Attribution-NonCommercial-ShareAlike 3.0许可的代码库,并对其进行了重大更改以适合我的需求。我觉得我的版本可以使其他人受益,并希望重新分发它。 我不确定再分配有哪些自由或可以接受的自由。我可以重命名项目吗?我应该启动新的v.1还是从原始版本号继续?对原始作者应有什么适当的归属?在发布之前,我是否应该咨询作者并寻求许可(尽管他已经知道了)?

7
有没有一种方法可以支持开发团队中的不同编码风格
问题:两个开发人员=>对缩进有三点意见,是否在换行符上加上大括号等等。 我们通常在项目中与三到四个人一起工作,每个人都有自己的代码风格。我知道,常见的解决方案是在每个人都必须使用的代码风格上达成共识,但是我不想强迫有创造力的程序员穿着不适合他们的西装。 所以问题是:有没有办法让每个程序员都保持自己的风格,但是在存储库中有一个通用的代码库?我想到了一些git / svn / whatever插件,它们在签出和提交时在个人样式和通用样式之间变化。在我看来,此方法中的棘手部分是支持文件版本之间的正确差异

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.