软件工程

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

1
加速对两个数据仓库的数据访问的最佳方法?
我正在进行一个商业智能项目,该项目将要求抽象地访问两个现有数据仓库。我需要设计一个应用程序体系结构,以允许自助服务业务智能合并数据并提供两个现有仓库的单一视图。我想出了这样的东西: 我在虚拟化/缓存方面苦苦挣扎,想知道是否有任何企业设计模式可以解决我的问题。这样的体系结构是否可以抽象数据仓库中的星型模式?我正在研究诸如Red Hat JBoss数据虚拟化和Red Hat JBoss数据网格等产品。 我们目前不使用Hibernate,而我对数据网格的理解是它们是键值存储或对象存储,因此不适合缓存关系模型。我还应该提到,我们热衷于在自助服务仪表板部分使用供应商产品,但是如果供应商无法为我们提供所需的一切,我们最终可能会在此区域中进行一些自定义构建。

4
访客模式在这种情况下有效吗?
我任务的目标是设计一个可以运行计划的定期任务的小型系统。重复执行的任务类似于“星期一至星期五,从上午8:00到下午5:00,每小时发送一封电子邮件给管理员”。 我有一个名为RecurringTask的基类。 public abstract class RecurringTask{ // I've already figured out this part public bool isOccuring(DateTime dateTime){ // implementation } // run the task public abstract void Run(){ } } 我有几个从RecurringTask继承的类。其中之一称为SendEmailTask。 public class SendEmailTask : RecurringTask{ private Email email; public SendEmailTask(Email email){ this.email = email; } public override void Run(){ …

3
将接口用于数据类型是否是反模式?
假设我的模型中有多个实体(使用EF),例如用户,产品,发票和订单。 我正在编写一个用户控件,该控件可以在我的应用程序中打印实体对象的摘要,其中这些实体属于预先确定的集合,在这种情况下,我说可以概括用户和产品的摘要。 这些摘要都只有一个ID和一个描述,因此我为此创建了一个简单的接口: public interface ISummarizableEntity { public string ID { get; } public string Description { get; } } 然后,对于有问题的实体,我创建一个实现此接口的局部类: public partial class User : ISummarizableEntity { public string ID { get{ return UserID.ToString(); } } public string Description { get{ return String.Format("{0} {1} is from {2} and is …

3
我们是否已经全面采用微服务,又回到了非常古老的方法?
在软件架构和设计方面,微服务如何与中间件“堆叠”(双关语意)?我来自Java,似乎当您摆脱作为API的直接REST并抽象出不同的层和连接参数时,至少在Java中,您几乎已经完全回到了一些非常古老的想法。我们已经回到虚拟化……而JVM 已经是虚拟的。 以一种不可知论的方式,您可以并且我会争论将RESTful API抽象到CORBA的优点。或者,以Java为中心的方式,使用JMS或MDB。 EJB在Java上曾经是一个大问题,但在某种程度上它被认为是集群效果,但是现在,我们又回到了起点吗? 还是微服务提供了CORBA甚至更好的MDB所缺少的功能?当我读(TLDR)Martin Fowler解释微服务时,如果可以的话,它是解决一个严重问题的很好的解决方案。更确切地说,是一种封闭的方法,它引入了一定程度的复杂性,只能解决问题。如果这些服务确实是微服务,并且数量众多,则每个服务的运行和维护成本都为一美元。 此外,如果许多微服务中的一个微服务更改了其API,那么依赖该服务的所有内容都会中断。它并不显得松散连接,它似乎敏捷的对立面。还是我滥用这些话? 当然,在这些极端之间有很多不确定的选择。 鲨鱼与大猩猩...走吧! (对于书呆子来说,这具有讽刺意味,完全不是我的意图。这个问题是从表面上考虑的。如果这个问题可以改善,请这样做,或者发表评论,我会解决的。 ) 设想在docker上运行的多个微服务都在一台机器上互相交谈...疯狂。难以维护或管理,几乎不可能更改任何东西,因为任何更改都会级联并导致不可预见的错误。这些服务分散在不同的计算机上如何更好?而且,如果它们是分布式的,那么肯定可以解决某些非常非常古老的技术,至少在一定程度上解决了分布式计算的问题。 为什么水平缩放如此普遍,或者至少是可取的?

1
如何通知WebStorm自动完成有关WebGLRenderingContext的信息
我正在从事一个涉及WebGL的项目,并使用WebStorm进行开发。 开发流程中的一个问题是WebStorm无法自动完成与WebGL相关的事情。特别是如果我将值注释为类型WebGLRenderingContext /** @type {!WebGLRenderingContext} */ var gl; WebStorm抱怨WebGLRenderingContext是一个未解决的变量。它还抱怨on上方法的用法gl,警告它找不到这些方法,因此它们可能不存在。 我当前的解决方法(除了关闭警告)是指定记录类型,如下所示: * @type {{ * texParameteri: function, * TEXTURE_WRAP_T: *, * ... * }} var gl; 但是,每次我要使用渲染上下文时,像这样亲自列出数十个标准化成员显然很傻。有没有更简单的方法?
9 webgl 

5
当if else构造可以在更好的时间内完成工作时,为什么要在函数中使用HashMap确定要返回哪个值(对于键)?
当我最近在一家大公司工作时,我注意到那里的程序员遵循这种编码风格: 假设我有一个函数,如果输入为A,则返回12;如果输入为B,则返回21;如果输入为C,则返回45。 所以我可以将函数签名写为: int foo(String s){ if(s.equals("A")) return 12; else if(s.equals("B")) return 21; else if(s.equals("C")) return 45; else throw new RuntimeException("Invalid input to function foo"); } 但是在代码审查中,我被要求将功能更改为以下内容: int foo(String s){ HashMap<String, Integer> map = new HashMap<String, Integer>(); map.put("A", 12); map.put("B", 21); map.put("C", 45); return map.get(s); } 我不能说服自己为什么第二个代码比第一个更好。第二个代码肯定会花费更多的时间来运行。 使用第二个代码的唯一原因可能是它提供了更好的可读性。但是,如果该函数被多次调用,那么第二个函数会不会减慢该实用程序调用它的运行时间? 你怎么看待这件事?

3
字符串数,每个字符必须出现偶数次
我已经为此问题problem了一段时间,这真的开始让我感到沮丧。问题是: 我有一个字符集,A,B,C,和D。我必须说出从这些字符中构建字符串的方式,长度是多少n,每个字符必须出现偶数次。 例如,答案为n = 24: AA BB CC DD 答案n = 4是40。其中一些有效的字符串是: AAAA AABB CACA DAAD BCCB 我坚持提出一个逻辑。我觉得可能会有一个DP解决方案。解决这个问题的方法是蛮横的:解决方案的数量迅速增长到巨大数量。 我试图在纸上画出各种想法,但没有成功。我几乎不得不放弃所有这些想法,因为它们的复杂性太大。该解决方案应有效n = 10^4。 我的想法之一是永远不要跟踪实际的字符串,而只能跟踪每个字符出现的是偶数还是奇数次。我无法提出一种应用此逻辑的方法。 谁能帮我?

1
缓存行与内存页之间的关系
如果我是对的,则主存储器中的页面是在主存储器与外部存储设备(例如硬盘)之间传输数据的最小单位。主存储器的缓存行是在主存储器和cpu缓存之间传输数据的最小单位。 我想知道页面大小是否总是或最好是缓存行大小的自然数?如果缓存行大小为64字节,而内存页面大小为4KB,则每个页面中有4KB / 64字节== 64个缓存行。 页面和缓存行都是内存中的固定对象吗?还是它们只是某个大小的连续内存块,可以在内存中的任何位置启动和浮动? 高速缓存行是否总是不能跨越一个以上的页面,也就是说,高速缓存行的一部分在一个页面中,而另一部分在另一个页面中? 谢谢。
9 memory  caching 

8
面向对象与算法之间的关系
当我阅读一些算法教科书时,它们充满了解决某些问题(排序,最短路径)或某些常规方法(递归算法,除以征服,动态编程等)的巧妙程序。我在那里发现了很少的面向对象编程的痕迹。(为什么它们更面向过程?)。 然后我在想: 算法和OOP之间有什么关系?他们是两个独立的主题吗? 是否存在一些只能由OOP提出和解决的问题? OOP如何帮助算法?或会在哪个方向影响它?

5
OOP语言和类型的类
在编程语言理论中,类型是一组值。例如,类型“ int”是所有整数值的集合。 在OOP语言中,类是类型,是吗? 当一个类定义了一个以上的成员时,例如 class myclass{ int a; double b; } 当我们谈论课程时,我们的意思是 “ (a,b)哪里a是一个整数,并且b是一个双精度数”,或者 “ { (x,y)| x是整数,y是双精度}”吗? 实例myclass是什么意思? “ (a,b)哪里a是一个整数,并且b是一个双精度数”,或者 一个对象,该对象占用一个内存空间,并且可以(不一定是空)可以存储对象(x,y),xint 在哪里,ydouble在哪里?

4
生成树中所有节点的所有后代的最有效方法
我正在寻找获取树的最有效算法(存储为边列表;或存储为从父节点到子节点列表的映射列表);并为每个节点生成从其派生的所有节点的列表(叶级和非叶级)。 由于规模的原因,实现必须通过循环而不是撤回。理想情况下应为O(N)。 该SO问题涵盖了一个合理合理的标准解决方案,用于为树中的一个节点找到答案。但是很明显,在每个树节点上重复该算法都是非常低效的(在我的脑海中,O(NlogN)至O(N ^ 2))。 树的根是已知的。该树具有绝对任意的形状(例如,不是N元,没有以任何方式平衡,形状或形式,深度也不统一)-有些节点有1-2个子节点,有些节点有30K个子节点。 在实际水平上(尽管它不应该影响算法),该树具有约100K-200K节点。

4
为什么需要空函数
我开始学习python,我想知道为什么编程语言中需要空函数 例如在python中: def empty_func(): pass 即使在shell脚本中,也可以使用空函数空函数。 我的理解和问题: 为什么编程语言需要空函数?它是只是在玩编程语言还是真正重要的其他事情? 如果这是有目的的,那么谁能描述用例或给出使用空函数的真实示例? 还是有编程语言允许空函数的传统? 编辑(我从阅读答案中得到的信息): 用于草绘算法或抽象函数 对于提交表单,无需执行任何操作 某些强制性操作的占位符

2
String [] args与(String。。。args)
在为android编程时,每当我使用AsyncTask时,doInBackground方法都将如下所示。 protected String doInBackground(String... args) 但是当在那个块中的任何地方使用参数时,我可以像在程序中一样使用普通的String数组来访问它们 @Override protected String doInBackground(String... args) { String details = ""; try { details = facade.getRecipeDetails(args[0]); } catch(Exception ex) { ex.printStackTrace(); } return details; } 哪个工作正常,我没有问题。但是我想知道为什么他们使用(String。。。args)而不是普通的String数组。仅仅是因为在调用方法中您可以编写如下内容: new AsyncHandler.execute("argument1","argument2","argument3",...) 而不是创建一个新的数组来传递参数?虽然我们可以写 new AsyncHandler().execute(new String[]{"Argument1","Argument2"}); 这有点冗长。 (String ...)和String []在它们的工作方式上是否是同义词,但是使用参数前者更容易传递参数,因为无需创建数组?据我所知,前者还会在后台转换为字符串数组,因此它们是否都可以编译为相同的代码,而只是“语法糖”?
9 java  android 

7
精通C ++的知识是否可以帮助您更快/更轻松地学习其他语言?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 学习过C ++所有关键方面并且非常了解该语言基础知识的人是否有可能更快,更轻松地学习其他语言(例如Python,Perl,Java)?
9 c++ 

2
不使用Java在Android上进行开发[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 就像这个问题的标题所暗示的那样,我期待在不使用Java的情况下在Android平台上开发应用程序。这并不意味着我对这种美丽的语言有些仇恨,也不知道我该如何用Java开发应用程序。但是我正在考虑只能使用XML,JavaScript和Ajax来开发我的应用程序。 那我还必须依靠Java吗? 不使用Java是否会有任何不利之处? 将来我仍然可以扩展我的应用程序吗? 我在这里问一个非常愚蠢的问题吗? 请帮我。 编辑: 我正在使用的应用程序(仍在白板上,需要有关此方法的专家意见)将仅从不同的新闻来源获取新闻并将其显示给用户。

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.