免责声明,我来自Java背景.我没有做太多的C#.这两个世界之间存在大量的转移,但当然存在差异,其中一个是异常倾向于被考虑的方式.
我最近回答了一个C#问题,建议在某些情况下,这样做是合理的:
try {
some work
} catch (Exeption e) {
commonExceptionHandler();
}
Run Code Online (Sandbox Code Playgroud)
(原因不重要).我收到的答复我不太明白:
直到.NET 4.0,捕获异常非常糟糕.这意味着你可以捕获各种低级致命错误,从而掩盖错误.它还意味着如果某种类型的损坏触发了这样的异常,堆栈上的任何打开的finally块都将被执行,所以即使callExceptionReporter函数尝试记录并退出,它甚至可能无法到达那一点( finally块可能再次抛出,或导致更多损坏,或从磁盘或数据库中删除重要的东西).
我可能比我意识到的更困惑,但我不同意其中的一些.请其他人评论.
我知道有很多低级别的例外我们不想接受.我的commonExceptionHandler()函数可以合理地重新抛出那些.这似乎与对相关问题的答案一致.这说"根据你的上下文,使用catch(...)是可以接受的,只要重新抛出异常即可." 所以我总结使用catch(Exception)并不总是邪恶,默默地吞下某些例外.
短语"在.NET 4之前它对Catch Exception来说非常糟糕".NET 4中有哪些变化?这是对AggregateException的引用,它可能会给我们一些与我们捕获的异常有关的新事物,但我不认为更改是基本的"不要吞下"规则.
下一句话真的很麻烦.这可能是对的吗?
它还意味着如果某种类型的损坏触发了这样的异常,堆栈上的任何打开的finally块都将被执行(finally块可能再次抛出,或导致更多损坏,或从磁盘或数据库中删除重要的东西)
我的理解是,如果有一些低级代码
lowLevelMethod() {
try {
lowestLevelMethod();
} finally {
some really important stuff
}
}
Run Code Online (Sandbox Code Playgroud)
在我的代码中我调用lowLevel();
try {
lowLevel()
} catch (Exception e) {
exception handling and maybe rethrowing
}
Run Code Online (Sandbox Code Playgroud)
无论我是否捕获异常,这对于finally块的执行都没有任何影响.当我们离开lowLevelMethod()时,finally已经运行了.如果最终要做任何坏事,比如我的磁盘损坏,那么它会这样做.我捕捉异常没有任何区别.如果它到达我的异常块我需要做正确的事情,但我不能成为dmis执行最终的原因
Banker的算法用于确定是否可以满足所有资源请求而不会导致死锁.
m是资源类型的总数
n是进程总数
NEED是一个大小为m*n的数组,它定义了每种资源类型的待处理请求.例如:NEEDij = 2表示进程i请求2项资源j.
算法如下:
BOOLEAN function SAFESTATE is -- Determines if current state is safe
{ NOCHANGE : boolean;
WORK : array[1..m] of INTEGER = AVAILABLE;
FINISH : array[1..n] of boolean = [false, ..,false];
I : integer;
repeat
NOCHANGE = TRUE;
for I = 1 to N do
if ((not FINISH[i]) and
NEEDi <= WORK) then {
WORK = WORK + ALLOCATION_i;
FINISH[i] = true;
NOCHANGE = false;
}
until NOCHANGE;
return (FINISH == (true, .., true)); …Run Code Online (Sandbox Code Playgroud) 我正在研究一种在Windows XP和Windows Vista之间的所有Windows版本上运行的C++软件.在我的代码中,我开发了一个链接标准库(Qt库)的DLL .一旦部署了我的软件,用户在他的系统上没有完全相同的Qt构建,但配置略有不同并不罕见.可能存在禁用的功能(因此它们的Qt构建不会导出相同的符号集),或者甚至可能以使库二进制文件与原始文件不兼容的方式更改库.
在某些时候,我通过LoadLibrary()调用加载我的DLL.这可以吸引用户系统上的任何Qt库.如果我很幸运,他们的Qt构建与我在开发DLL时使用的内容兼容,因此LoadLibrary()成功.但是,根据他们对Qt构建所做的更改,LoadLibrary()调用有时会失败
我的问题是:我怎样才能优雅地捕捉到这些错误?对,我只是使用GetLastError(),然后打印上述两个消息之一.然而,这将是多少,如果我知道更多有用它的模块无法找到,或者它缺少的程序.我注意到,当在资源管理器中运行一个链接缺少DLL的应用程序时,资源管理器设法产生一个很好的'由于缺少所需的库blah.dll而无法加载应用程序foo'.是否有一些API可用于获取有关LoadLibrary()调用失败原因的更多信息?
这应该是一件相当简单的事情,但我正在努力.
我希望像这样生成一个表:
id organizationNumber name
但是,当我查看数据库时,我发现排序错误.有谁知道我如何强制hibernate/jpa生成正确排序的表?
desc Organization; +--------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------------+--------------+------+-----+---------+----------------+ | id | bigint(20) | NO | PRI | NULL | auto_increment | | name | varchar(255) | NO | | NULL | | | organizationNumber | varchar(255) | NO | UNI | NULL | | +--------------------+--------------+------+-----+---------+----------------+
这就是我的实体bean的样子:
@Entity
@NamedQuery(name = "allOrganizations", query = "SELECT org FROM Organization org order by name")
public class Organization {
private … 假设我在源代码管理中有一个带有很多子目录的项目,其中很多是我目前不需要的.
我想创建一个只包含整个树的一些工作副本,它仍然保持更改,提交和推送它们的能力.
这是可能的,如果是这样,我该怎么办?
我还在决定是否选择集市或mercurial,所以关于其中任何一个的答案都会有所帮助.
编辑:实际上,git的解决方案也很有用.
最近,客户需要在大型数据集上进行多次转换的复杂报表.
我聘请了Ruport--这是快速和肮脏报道的绝佳选择.然而,经过几次试验后,我意识到ruport嵌套分组和规范化数据并没有结合在一起.现在仍然包括的选择:
非规范化数据(可能在每晚更新的视图中)+在Ruby中执行一些格式化
使用完全不同的工具包(JasperReports?)
我害怕这两种可能性.有没有人有更好的想法(理想情况下仅限于ruby的工作范围)?
java中程序的入口点通常是这样的
// MyMain.java
public class MyMain{
//whatever
public static void main(String args[]){
System.out.println("balderdash");
}
}
Run Code Online (Sandbox Code Playgroud)
但是,由于main中只有一个SOP,因此上述类可能是这样的
// MyMain.java
public class MyMain{
//whatever
static {
System.out.println("balderdash");
}
}
使用main(...)的一个明显优点是参数可以传递给程序.另一个(我在这里猜测)可能与垃圾收集器有关,不同地处理在静态块中创建的对象.
使用语言定义的入口点还有其他好处 - public static void main(String args [])而不是使用静态初始化程序.
ps上述代码段仅供参考,可能无法编译
我正在研究我的操作系统项目的POSIX子系统,我已经达到了我想要在pthreads支持上工作的地步.但是,我不确定我应该在多大程度上实施它们.
什么是最常用的pthreads功能?有什么东西我现在可以安全地"存根"并在我们移植需要它的应用程序时实现它吗?到目前为止,我的研究指出了基本的线程操作(创建,连接等等) - 这是非常明显的 - 以及互斥支持.实际上,应用程序使用的远不止这些吗?
我想我只是想弄清楚,在仍然有一个有效的实现的情况下我可以逃脱多少.
$(this).parent().next().css('display','none');
Run Code Online (Sandbox Code Playgroud)
以上只隐藏了当前兄弟姐妹旁边的兄弟姐妹.
如果有多个,则会失败.
我正在编写一个报告工具来记录各种"合规性标准"的Excel文件,包括wkb.VBProject.Protection报告VBA是否被锁定.
但是,如何找到工作簿是否有任何项目?
如果我计算
wkb.VBProject.VBComponents.Count - wkb.Worksheets.Count - 1 '(for the workbook)
Run Code Online (Sandbox Code Playgroud)
这将给我模块+类模块+表单的数量,但我仍然可以在工作表后面有一些代码.
在Excel中有没有办法 - 比如Access frm.HasModule - 找出工作簿中是否有任何VBA代码?