有许多类型的外部依赖项.与外部应用程序,组件或服务连接(例如,Outlook用于发送电子邮件,TWAIN或WIA用于扫描,ActiveX对象和Web服务用于各种目的,等等).
您确保应用程序是健壮的,并且即使这些外部依赖项(由于无数原因)不可用时也可以运行的策略是什么?
注意:您自己的源代码中包含的外部源代码是另一种外部依赖项,但这主要不是我在这里所关注的.
language-agnostic defensive-programming robustness external-dependencies
在 Android 平台上(已在 ICS 上确认),如果客户端在查询过程中(即具有打开的游标)内容提供者死亡,则框架会决定终止持有打开游标的客户端进程。
这是当我使用下载管理器查询尝试此操作时的 logcat 输出,该查询在执行查询后会休眠。“睡眠”是为了重现问题。您可以想象当提供者在正确/错误的时间死亡时,它会发生在常规用例中。然后杀死 com.android.media(托管 downloadProvider)。
“杀死 com.example (pid 12234),因为提供程序 com.android.providers.downloads.DownloadProvider 正处于死亡进程 android.process.media”
我在 ActivityManagerService::removeDyingProviderLocked 中跟踪了此代码
10203 private final void removeDyingProviderLocked(ProcessRecord proc,
10204 ContentProviderRecord cpr) {
10205 synchronized (cpr) {
10206 cpr.launchingApp = null;
10207 cpr.notifyAll();
10208 }
10210 mProvidersByClass.remove(cpr.name);
10211 String names[] = cpr.info.authority.split(";");
10212 for (int j = 0; j < names.length; j++) {
10213 mProvidersByName.remove(names[j]);
10214 }
10215
10216 Iterator<ProcessRecord> cit = cpr.clients.iterator();
10217 while (cit.hasNext()) {
10218 ProcessRecord capp = cit.next();
10219 …Run Code Online (Sandbox Code Playgroud) 几周前我开始使用异常,现在我想知道是否有一种方法可以抛出警告。如果未捕获此警告,则不应强制应用程序退出。我会给你一个例子,在什么情况下我想使用它。
有一个系统可以将属性附加到唯一的 ID 上。当我以某种方式尝试向尚不存在的 id 添加属性时,系统应该在内部为我创建该 id,然后向其中添加属性并返回结果。当然,这不能悄然进行。但由于应用程序可以保持运行,我不想抛出异常。
我怎样才能通知某些事情不太正确,但系统仍在运行?
编写健壮代码的最佳方法是什么,以便可以检查变量是否为null和空白.
例如
string a;
if((a != null) && (a.Length() > 0))
{
//do some thing with a
}
Run Code Online (Sandbox Code Playgroud) 在外壳程序脚本set -e中,当从脚本执行的某些命令以非零退出代码退出时,通常通过停止脚本来使脚本更健壮。
通常很容易指定您不关心|| true最后添加的某些命令是否成功。
当您实际上关心返回值但不希望脚本在非零返回码上停止时,会出现问题,例如:
output=$(possibly-failing-command)
if [ 0 == $? -a -n "$output" ]; then
...
else
...
fi
Run Code Online (Sandbox Code Playgroud)
在这里,我们既要检查退出代码(因此不能|| true在命令替换表达式内部使用)并获取输出。但是,如果命令替换中的命令失败,则由于导致整个脚本停止set -e。
有没有一种干净的方法可以防止脚本在此之前停止而无需取消-e设置然后重新设置呢?
为了在多 Pod 系统上进行一些稳健性测试,我需要以某种方式模拟 Pod 故障。我不想在部署中使用缩小规模,因为它不太现实。在我的情况下,删除 pod 也不是很有用,因为 pod 很快就会回来。
我已经检查了有关以下内容的回复: How to Analog Power Failure In Kubernetes 并且不符合我的需求。有什么建议吗?
Krzysztof的建议是否适用于构造函数?如果是这样,你如何正确实施?
我们建议对输出和属性使用Collection,ReadOnlyCollection或KeyedCollection,并使用IEnumerable,ICollection,IList作为输入.
例如,
public ClassA
{
private Collection<String> strings;
public Collection<String> Strings { get { return strings; } }
public ClassA(IEnumerable<String> strings)
{
this.strings = strings; // this does not compile
this.strings = strings as Collection<String>; // compiles (and usually runs?)
}
}
Run Code Online (Sandbox Code Playgroud) (define (nth n lst)
(if (= n 1)
(car lst)
(nth (- n 1)
(cdr lst) )))
Run Code Online (Sandbox Code Playgroud)
是一个不安全的部分功能,n可能会超出范围.一个error可以帮助,
(define (nth n lst)
(if (null? lst)
(error "`nth` out of range")
(if (= n 1)
(car lst)
(nth (- n 1)
(cdr lst) ))))
Run Code Online (Sandbox Code Playgroud)
但是,与Haskell 数据类型类似的强大 Scheme Maybe类似于什么呢?
data Maybe a = Nothing | Just a
nth :: Int -> [a] -> Maybe a
nth _ [] = Nothing
nth 1 (x : _) = …Run Code Online (Sandbox Code Playgroud) 我有一个简单LinkedList的Java,有10个元素.在那个州,我得到一个普通的ListIterator,说.listIterator(3).如果我然后插入/删除其他元素到列表中,而不触及我拥有的元素ListIterator(也不是迭代器),它ListIterator仍然有效吗?
我正在考虑构建一个使用raid(磁盘)算法的程序.如果一台电脑死了.接下来将介入.在它的位置.它需要从1到1000台计算机扩展.
我需要一些建议.
我需要学习什么算法的名称?
有一次我认为可以在git之上构建它.
我有一个我在java应用程序中使用的正则表达式.有时候它可以正常工作,有时则不然.
<!-- <editable name=(\".*\")?> -->(.*)<!-- </editable> -->
Run Code Online (Sandbox Code Playgroud)
有时我会在它之前/之后有空格,有时候会有文字.标签内的区域也是如此.
主要问题是name =(\".*\")?>有时匹配的次数超过预期.我不确定这是否是明显可以解决的问题,只需查看此代码即可.
robustness ×11
.net ×2
java ×2
algorithm ×1
android ×1
ashmem ×1
c# ×1
c++ ×1
constructor ×1
distributed ×1
exception ×1
generics ×1
interface ×1
kubernetes ×1
linked-list ×1
lisp ×1
listiterator ×1
maybe ×1
option-type ×1
regex ×1
shell ×1
validation ×1
warnings ×1