软件工程

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

2
视障人士使用CSS?
因此,当我学习HTML时,我遇到了CSS。有趣的是,有了CSS,您可以使网页更酷或更漂亮。但是,由于它更多地与颜色,设计,样式等有关,所以我不知道CSS代码的结果。作为视力障碍的人,如果有视力的人总是可以设计比我更好的网页,因为他们可以看到,那么我为什么应该学习CSS? 这里有盲人程序员编写CSS吗?你是怎么做到的? 我是否应该一起忽略CSS并将其留给有眼光的程序员使用?或者在CSS中有些事情我可以做而无需要求人们查看我的页面来知道它是否具有良好的设计?
17 css 

4
为什么使用接口(例如Map)而不是实现(HashMap)来定义Java对象
在大多数Java代码中,我看到人们这样声明Java对象: Map<String, String> hashMap = new HashMap<>(); List<String> list = new ArrayList<>(); 代替: HashMap<String, String> hashMap = new HashMap<>(); ArrayList<String> list = new ArrayList<>(); 为什么偏爱使用接口而不是实际使用的实现来定义Java对象?

6
计算上不可能的业务问题的例子是什么?
我有一位同事拒绝接受图灵机(以及扩展的冯·诺伊曼机)无法解决其自身的停机问题这一事实,他指出: 您可以花足够的时间和金钱来做任何事情。 他还不喜欢以下理论问题: 在我们的领域中,我们永远不会遇到这些问题。我们是应用程序开发人员,而不是理论科学家。 是否有一个很好的例子说明我无法用计算机来使他信服的商业问题?

4
为什么Java String没有静态字符串操作方法?
Java设计人员为什么不在类中创建字符串操作方法的静态版本java.lang.String?我指的是以下方法,但是问题也可以扩展到该类中的其他非静态方法。 concat(String) substring(int, int) replace(char, char) toLowerCase() replace(CharSequence, CharSequence) toLowerCase(Locale) replaceAll(String, String) toString() replaceFirst(String, String) toUpperCase() split(String) toUpperCase(Locale) split(String, int) trim() substring(int) 仅使用这些方法的非静态版本会在必须调用此方法的任何地方强制进行显式 null检查。例如,简单的调用example = example.trim()会导致NullPointerException异常如果String example = null。因此,程序员必须执行以下样板空检查: if (example != null) example = example.trim(); // OR: example = (example==null) ? null : example.trim(); example = (example==null) ? null …
17 java  api-design  null 

7
如果我不使用软件设计模式怎么办?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 如果不使用软件设计模式,我可能会遇到什么样的问题?您能告诉我使用标准的面向对象技术进行设计的问题吗?

3
在Java中串联字符串时,在内存中创建了多少个字符串?
有人问我有关Java中的不可变字符串。我的任务是编写一个将多个“ a”连接到一个字符串的函数。 我写的是: public String foo(int n) { String s = ""; for (int i = 0; i < n; i++) { s = s + "a" } return s; } 然后我被问到这个程序将生成多少个字符串,假设不会发生垃圾回收。我对n = 3的想法是 ” “一种” “一种” “ aa” “一种” “啊!” “一种” 在循环的每次迭代中,基本上都会创建2个字符串。但是,答案是n 2。此函数将在内存中创建哪些字符串,为什么呢?
17 java  strings  object 

3
如何测试数据访问层?
我有一个DAO方法,该方法利用Spring进行JDBC访问。它计算出卖家出售商品的成功率。 这是代码: public BigDecimal getSellingSuccessRate(long seller_id) { String sql = "SELECT SUM(IF(sold_price IS NOT NULL, 1, 0))/SUM(1) FROM transaction WHERE seller_id = ?"; Object[] args = {seller_id}; return getJdbcTemplate().queryForObject(sql, args, BigDecimal.class); } 我应该如何使用JUnit测试此方法或任何DAO方法?有哪些最佳实践来测试数据访问逻辑?我正在考虑针对加载了一些数据的可嵌入数据库进行测试,但是就RDBMS和架构而言,我们不应该进行类似于生产环境的集成测试吗?

2
单个Visual Studio解决方案中的多个应用程序
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我正在一家公司工作,该公司希望将所有.Net应用程序(Web应用程序,Windows应用程序和控制台应用程序)整合到一个Visual Studio解决方案中。 我正在从开发人员那里寻找经验,他们要么以这种方式构造自己的应用程序,要么在一家从事此工作的公司工作。这是一个好主意吗? 将您的所有应用程序放在一个解决方案中,而不是为每个应用程序使用单独的解决方案,优点/缺点是什么? 带有20多个项目的解决方案的Visual Studio有多快? 具有源代码控制的并发开发的解决方案文件的稳定性如何?

1
我的github拉取请求已合并,现阶段的约定是什么?
我在Github上创建了一个项目,进行了一些小改动,并向原始维护者发送了一个拉取请求,后者将其拉入。现在的最后一个提交是Merged pull request #11 from my_username/master。 这是我第一次这样做,所以我不确定现在的礼节是什么:我做了 git pull upstream master然后then git push origin master,现在我自己存储库中的最后一次提交读起来Merged pull request #11 from my_username/master对我来说很奇怪。这是人们通常使用的方式吗?我需要做些什么来“清理历史”吗? 注意:由于这是一个很小的文档更改,所以我没有创建任何分支,我只是在master分支中进行了更改并发送了请求请求。因此,该部分没有任何清理工作。

3
为什么没有函数的类型类?
在一个我一直在纠缠的学习问题中,我意识到我需要一个具有用于应用,编写等操作的函数的类型类。原因... 将函数的表示形式视为函数本身就是方便的,因此隐式应用函数将使用解释器,而组成函数会得出新的描述。 一旦有了函数的类型类,就可以为特殊类型的函数派生类型类-就我而言,我想要可逆函数。 例如,应用整数偏移量的函数可以由包含整数的ADT表示。应用这些功能仅意味着将整数相加。通过添加包装的整数来实现合成。逆函数的整数取反。身份函数包装零。无法提供常量函数,因为没有合适的表示形式。 当然,它不需要像值是真正的Haskell函数那样拼写事物,但是一旦我有了主意,我认为这样的库必须已经存在,甚至可以使用标准拼写。但是我在Haskell库中找不到这样的类型类。 我找到了Data.Function模块,但是没有类型类-只有一些常见的函数也可以从Prelude中获得。 那么-为什么没有函数的类型类?是“仅仅是因为没有”还是“因为它没有您想象的那么有用”?还是这个想法存在根本性的问题? 到目前为止,我想到的最大可能的问题是,实际功能上的功能应用程序可能必须由编译器进行特殊处理,以避免出现循环问题-为了应用此功能,我需要应用功能应用程序功能,为此,我需要调用函数应用程序函数,然后执行此操作... 更多线索 示例代码显示我的目标... {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} -- In my first version, Doable only had the one argument f. This version -- seemed to be needed to support the UndoableOffset type. -- -- It seems …

8
在UnitTesting之外值得依赖注入吗
给定一个构造函数,它永远不必使用初始化它的几个对象的任何不同实现,使用DI仍然可行吗?毕竟,我们可能仍要进行单元测试。 有问题的类在其构造函数中初始化了其他一些类,并且使用的类非常特定。它永远不会使用其他实现。我们有理由避免尝试对接口进行编程吗?

2
编写自己的语音识别代码
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 问题描述 我想将语音识别用作硬件项目的一部分,我想完全将其包含在内(我使用的是低功耗,低速的小型设备,例如Arduino和Raspberry Pi,Kinects等,而不能运行具有涉及到一个操作系统(因此是一个封闭/自包含的项目)。 语音识别可能非常复杂,具体取决于您所需的复杂程度。我有一套相对简单的要求。我只想识别自己的声音,并且有一个小词典,我想识别20个左右的单词。因此,我不需要复杂的语音到文本和语音识别库,也不需要通过互联网搜索引擎找到的任何出色的第三方软件(不乏这些!)。我认为我的要求“足够简单”(在一定程度上),我可以编写自己的解决方案。我想知道是否有人编写了这样的自己的流程,我的方法是否存在严重缺陷?有没有更好的方法可以做到这一点,而无需高水平的数学知识或不必编写复杂的算法? 这就是我尝试在下面考虑的解决方案。 解决方案说明 我将使用C语言编写此文档,但我希望讨论语言不可知的过程,重点是其自身的过程。因此,如果可以的话,让我们忽略它。 1。我将预先录制我的单词词典,以使其与口语相匹配。我们可以想象我有20个录音,记录了20个不同的单词,或者说是短短语或两个或三个单词的句子。我相信,这比实际将音频转换为文本并比较两个字符串要容易,比较两个录音文件的过程更容易。 2。麦克风已连接到运行我的代码的硬件设备。[1]。该代码连续获取固定长度的样本(例如长度为10毫秒),并以循环记录方式存储例如10个连续的样本。[2]。(我是在脑海中发明这些数字的,因此它们只是描述过程的示例)。 [1]这很可能通过带通滤波器和运算放大器进行连接,就像进行字典录音一样,以保持较小的存储和收集的音频样本。 [2]我不确定要如何采样,我需要制定一种方法,尽管我会产生一个表示10毫秒采样音频(也许是CRC值)的数字(整数/浮点/双精度)或音频样本的MD5和等)或数字流(可能是频率的音频读数流)。最终,“样本”将是一个或多个数字。这部分将涉及更多的硬件,因此这里不作讨论。 3。该代码查看它存储的10个连续样本,并寻找增加的音量以指示正在说一个单词或短语(从沉默中休息),然后增加连续样本的收集量,例如说500个样本。这意味着它将在10毫秒的样本中捕获5秒的音频。 这些样本或“片段”在存储的声音和捕获的声音之间进行比较。如果捕获的样本中有足够高的百分比与存储的等效样本匹配,则代码将采用相同的词。 The start of a store recording of the world "hello" for example, stored words are split into 10 msec samples also Stored Sample No | 1| 2| 3| 4| 5| 6| 7| 8| Stored …

7
将对象传递到更改对象的方法中,这是常见的(反)模式吗?
我正在阅读Martin Fowler的《重构》一书中的常见代码气味。在这种情况下,我想知道我在代码库中看到的一种模式,并且可以客观地将其视为一种反模式。 模式是一种将对象作为参数传递给一个或多个方法的模式,所有这些方法都会更改对象的状态,但是没有一个返回对象。因此,它依赖于C#/。NET(在这种情况下)的按引用传递特性。 var something = new Thing(); // ... Foo(something); int result = Bar(something, 42); Baz(something); 我发现(尤其是方法名称不正确时),我需要研究此类方法以了解对象状态是否已更改。由于我需要跟踪调用堆栈的多个级别,因此这会使代码理解更加复杂。 我想建议改进此类代码,以返回具有新状态的另一个(克隆的)对象,或在调用站点更改该对象所需的任何操作。 var something1 = new Thing(); // ... // Let's return a new instance of Thing var something2 = Foo(something1); // Let's use out param to 'return' other info about the operation …

4
如果可以按日期标识记录,我是否需要数据库中的ID?
我正在为Android编写我的第一个应用程序,它将使用SQLite数据库,因此将尝试尽可能限制大小,但是我认为这个问题通常适用于数据库设计。 我打算存储将包含文本和创建日期的记录。该应用程序是一个独立的应用程序,即它不会链接到互联网,只有一个用户将对其进行更新,因此,在给定的日期,将不会有多个条目。 我的表格还需要一个ID列吗?如果是这样,使用ID作为记录标识符而不是日期有什么好处?
17 database 

4
为什么mod(%)是许多编程语言中的基本数学运算符?
有某种历史原因或其他原因,为什么模数运算符是一小套标准运算符的一部分,而这似乎是许多语言的一部分呢?(+, -, *, /和%,对于Java和C,以及**在Ruby和Python中的)。 将mod包含为“基本的”似乎很奇怪(不要敲它,我经常使用它,但是我也使用幂运算,绝对值,下限/上限或其他-它们似乎同样有用且必要)。这是某个规范中做出的一个旧决定,即遵循Java,C,Ruby和Python还是它们都衍生自某种语言?据我所知,大多数Lisp方言仅包括+, -, /和*。 刚开始,我想知道mod是否在二进制级别上特别容易实现(关于决定什么是“基本”运算符,什么不应该?)甚至会有所作为),但似乎并非如此。它只是比我想的更常用于编程中吗?

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.