Actor故障恢复是akka中非常重要的内容,在之前的博客中虽然有介绍,但都是杂糅在其他知识点的细节中,本博客将单独介绍这一部分的故障恢复。为了简化分析的单独,本文只研究用户的actor故障恢复的步骤,系统actor也基本差不多;另外,为了简化篇幅,不重要的源码将不再整段贴出来,感兴趣的读者可以去下载源码单独分析。

  上面是官方描述actor树形结构时用到的一个图,非常重要,希望读者一定要记住这个树形的层次概念。也就是说,actor一定会归属到某个父actor下面,而actor的故障恢复就是通过这种层级来实现的。这个图之所以重要,是因为如果你能够深刻理解这个图,大概就知道如何实现故障恢复了。

  有些爱钻研的读者可能会问,还有一个 / 这个actor没有父actor啊,这个actor如果失败,怎么恢复?其实吧,这算是一个好问题。这是akka设计的根基啊,如果akka本身动不动都需要故障恢复,别人还怎么用。你可以这样理解,akka设计的比较好,或者说root actor功能比较少,轻易不会出现故障。虽然这样解释有点勉强,哈哈。

  还记得Actor的调度模型吗,actor只有在收到消息时,才会去调用receive方法,此时actor才会被某个线程执行,也就是“活着”的。如果某个actor没有消息,那么它仅仅是一堆数据躺在内存,也就是“死的”。actor只有在“活着”的时候才可能出现故障。所以我们要从actor处理消息入手,来看看如何实现故障恢复。

//Memory consistency is handled by the Mailbox (reading mailbox status then processing messages, then writing mailbox status
final def invoke(messageHandle: Envelope): Unit = {
val influenceReceiveTimeout = !messageHandle.message.isInstanceOf[NotInfluenceReceiveTimeout]
try {
currentMessage = messageHandle
if (influenceReceiveTimeout)
cancelReceiveTimeout()
messageHandle.message match {
case msg: AutoReceivedMessage ⇒ autoReceiveMessage(messageHandle)
case msg ⇒ receiveMessage(msg)
}
currentMessage = null // reset current message after successful invocation
} catch handleNonFatalOrInterruptedException { e ⇒
handleInvokeFailure(Nil, e)
} finally {
if (influenceReceiveTimeout)
checkReceiveTimeout // Reschedule receive timeout
}
}

  上面是ActorCell里面处理用户消息的相关函数,这包括在一个try-catch里面,我们假设receiveMessage处理消息出现了异常。

final protected def handleNonFatalOrInterruptedException(thunk: (Throwable) ⇒ Unit): Catcher[Unit] = {
case e: InterruptedException ⇒
thunk(e)
Thread.currentThread().interrupt()
case NonFatal(e) ⇒
thunk(e)
}
/**
* Returns true if the provided `Throwable` is to be considered non-fatal, or false if it is to be considered fatal
*/
def apply(t: Throwable): Boolean = t match {
// VirtualMachineError includes OutOfMemoryError and other fatal errors
case _: VirtualMachineError | _: ThreadDeath | _: InterruptedException | _: LinkageError | _: ControlThrowable => false
case _ => true
}

  出现异常则会执行catch代码块,其实就是执行了handleNonFatalOrInterruptedException函数,这个函数会检查是不是InterruptedException或NonFatal类型的异常,如果是,则会执行thunk也就是handleInvokeFailure。简单来说就是如果receive处理消息出现异常,则会执行handleInvokeFailure。

final def handleInvokeFailure(childrenNotToSuspend: immutable.Iterable[ActorRef], t: Throwable): Unit = {
// prevent any further messages to be processed until the actor has been restarted
if (!isFailed) try {
suspendNonRecursive()
// suspend children
val skip: Set[ActorRef] = currentMessage match {
case Envelope(Failed(_, _, _), child) ⇒ { setFailed(child); Set(child) }
case _ ⇒ { setFailed(self); Set.empty }
}
suspendChildren(exceptFor = skip ++ childrenNotToSuspend)
t match {
// tell supervisor
case _: InterruptedException ⇒
// ➡➡➡ NEVER SEND THE SAME SYSTEM MESSAGE OBJECT TO TWO ACTORS ⬅⬅⬅
parent.sendSystemMessage(Failed(self, new ActorInterruptedException(t), uid))
case _ ⇒
// ➡➡➡ NEVER SEND THE SAME SYSTEM MESSAGE OBJECT TO TWO ACTORS ⬅⬅⬅
parent.sendSystemMessage(Failed(self, t, uid))
}
} catch handleNonFatalOrInterruptedException { e ⇒
publish(Error(e, self.path.toString, clazz(actor),
"emergency stop: exception in failure handling for " + t.getClass + Logging.stackTraceFor(t)))
try children foreach stop
finally finishTerminate()
}
}

  handleInvokeFailure会执行一个try语句,该语句第一句话就是执行suspendNonRecursive,从名称来看,就是要非递归的方式挂起当前actor,就是挂起mailbox对消息的处理,其实就是设置mailbox的状态。

private def suspendNonRecursive(): Unit = dispatcher suspend this
/**
* After the call to this method, the dispatcher mustn't begin any new message processing for the specified reference
*/
protected[akka] def suspend(actor: ActorCell): Unit = {
val mbox = actor.mailbox
if ((mbox.actor eq actor) && (mbox.dispatcher eq this))
mbox.suspend()
}
/**
* Increment the suspend count by one. Caller does not need to worry about whether
* status was Scheduled or not.
*
* @return true if the previous suspend count was zero
*/
@tailrec
final def suspend(): Boolean = currentStatus match {
case Closed ⇒
setStatus(Closed); false
case s ⇒
if (updateStatus(s, s + suspendUnit)) s < suspendUnit
else suspend()
}

  挂起当前出现异常的actor的mailbox对消息的处理之后,又通过suspendChildren挂起了子actor对消息的处理(流程跟上面差不多,都是设置子actor的mailbox状态),最后给父actor发送了Failed消息就结束了。

  总结一下当前处理逻辑,如果某个actor对消息的处理出现异常,就挂起当前actor的邮箱,然后递归地挂起所有子actor的邮箱,发送Failed消息给父actor。怎么样简单吧,就是这么简单。现在要看父actor如何处理这个消息了。

final protected def handleFailure(f: Failed): Unit = {
currentMessage = Envelope(f, f.child, system)
getChildByRef(f.child) match {
/*
* only act upon the failure, if it comes from a currently known child;
* the UID protects against reception of a Failed from a child which was
* killed in preRestart and re-created in postRestart
*/
case Some(stats) if stats.uid == f.uid ⇒
if (!actor.supervisorStrategy.handleFailure(this, f.child, f.cause, stats, getAllChildStats)) throw f.cause
case Some(stats) ⇒
publish(Debug(self.path.toString, clazz(actor),
"dropping Failed(" + f.cause + ") from old child " + f.child + " (uid=" + stats.uid + " != " + f.uid + ")"))
case None ⇒
publish(Debug(self.path.toString, clazz(actor), "dropping Failed(" + f.cause + ") from unknown child " + f.child))
}
}

  父actor异步收到Failed消息后会调用handleFailure方法。这个方法有两个主要逻辑,设置当前的currentMessage值,调用当前actor也就是抛异常actor的父actor的supervisorStrategy对象的handleFailure方法,如果handleFailure不处理当前异常,则通过throw继续抛出异常,这又进入了父actor的handleInvokeFailure处理逻辑。

/**
* This is the main entry point: in case of a child’s failure, this method
* must try to handle the failure by resuming, restarting or stopping the
* child (and returning `true`), or it returns `false` to escalate the
* failure, which will lead to this actor re-throwing the exception which
* caused the failure. The exception will not be wrapped.
*
* This method calls [[akka.actor.SupervisorStrategy#logFailure]], which will
* log the failure unless it is escalated. You can customize the logging by
* setting [[akka.actor.SupervisorStrategy#loggingEnabled]] to `false` and
* do the logging inside the `decider` or override the `logFailure` method.
*
* @param children is a lazy collection (a view)
*/
def handleFailure(context: ActorContext, child: ActorRef, cause: Throwable, stats: ChildRestartStats, children: Iterable[ChildRestartStats]): Boolean = {
val directive = decider.applyOrElse(cause, escalateDefault)
directive match {
case Resume ⇒
logFailure(context, child, cause, directive)
resumeChild(child, cause)
true
case Restart ⇒
logFailure(context, child, cause, directive)
processFailure(context, true, child, cause, stats, children)
true
case Stop ⇒
logFailure(context, child, cause, directive)
processFailure(context, false, child, cause, stats, children)
true
case Escalate ⇒
logFailure(context, child, cause, directive)
false
}
}

  handleFailure会根据当前actor也就是父actor的监督策略,判断当前的指令,然后调用processFailure方法。请注意processFailure方法的第一个参数是当前父actor的context值,第三个参数是出现异常的子actor的ActorRef。

/**
* Applies the fault handling `Directive` (Resume, Restart, Stop) specified in the `Decider`
* to the child actor that failed, as opposed to [[akka.actor.AllForOneStrategy]] that applies
* it to all children.
*
* @param maxNrOfRetries the number of times a child actor is allowed to be restarted, negative value means no limit,
* if the limit is exceeded the child actor is stopped
* @param withinTimeRange duration of the time window for maxNrOfRetries, Duration.Inf means no window
* @param decider mapping from Throwable to [[akka.actor.SupervisorStrategy.Directive]], you can also use a
* [[scala.collection.immutable.Seq]] of Throwables which maps the given Throwables to restarts, otherwise escalates.
* @param loggingEnabled the strategy logs the failure if this is enabled (true), by default it is enabled
*/
case class OneForOneStrategy(
maxNrOfRetries: Int = -1,
withinTimeRange: Duration = Duration.Inf,
override val loggingEnabled: Boolean = true)(val decider: SupervisorStrategy.Decider)
extends SupervisorStrategy

  默认情况下,每个actor的监督策略是OneForOneStrategy。也就是遇到异常会执行Restart分支的代码。

def processFailure(context: ActorContext, restart: Boolean, child: ActorRef, cause: Throwable, stats: ChildRestartStats, children: Iterable[ChildRestartStats]): Unit = {
if (restart && stats.requestRestartPermission(retriesWindow))
restartChild(child, cause, suspendFirst = false)
else
context.stop(child) //TODO optimization to drop child here already?
}

  其实就是会执行restartChild方法,当然我们还可以设置重试次数以防止无限重启。(默认是没有次数限制的)

/**
* Restart the given child, possibly suspending it first.
*
* <b>IMPORTANT:</b>
*
* If the child is the currently failing one, it will already have been
* suspended, hence `suspendFirst` must be false. If the child is not the
* currently failing one, then it did not request this treatment and is
* therefore not prepared to be resumed without prior suspend.
*/
final def restartChild(child: ActorRef, cause: Throwable, suspendFirst: Boolean): Unit = {
val c = child.asInstanceOf[InternalActorRef]
if (suspendFirst) c.suspend()
c.restart(cause)
}

  restartChild比较简单,就是执行了子actor的restart函数。那么restart函数在哪里实现呢?还记得这个ActorRef的实际类型是什么吗?没错就是RepointableActorRef

def restart(cause: Throwable): Unit = underlying.restart(cause)

  上面是RepointableActorRef的restart定义,就是调用了ActorCell的restart方法。

final def restart(cause: Throwable): Unit = try dispatcher.systemDispatch(this, Recreate(cause)) catch handleException

  上面是ActorCell的restart方法的实现(在akka.actor.dungeon.Dispatch里面),就是又给自己发送了一个Recreate方法。读者可能会有疑问,之前不都把邮箱给suspend了么,怎么还收消息,但请注意这里发送的是系统消息。所以系统消息还是可以被路由的。

/**
* Do re-create the actor in response to a failure.
*/
protected def faultRecreate(cause: Throwable): Unit =
if (actor == null) {
system.eventStream.publish(Error(self.path.toString, clazz(actor),
"changing Recreate into Create after " + cause))
faultCreate()
} else if (isNormal) {
val failedActor = actor
if (system.settings.DebugLifecycle) publish(Debug(self.path.toString, clazz(failedActor), "restarting"))
if (failedActor ne null) {
val optionalMessage = if (currentMessage ne null) Some(currentMessage.message) else None
try {
// if the actor fails in preRestart, we can do nothing but log it: it’s best-effort
if (failedActor.context ne null) failedActor.aroundPreRestart(cause, optionalMessage)
} catch handleNonFatalOrInterruptedException { e ⇒
val ex = PreRestartException(self, e, cause, optionalMessage)
publish(Error(ex, self.path.toString, clazz(failedActor), e.getMessage))
} finally {
clearActorFields(failedActor, recreate = true)
}
}
assert(mailbox.isSuspended, "mailbox must be suspended during restart, status=" + mailbox.currentStatus)
if (!setChildrenTerminationReason(ChildrenContainer.Recreation(cause))) finishRecreate(cause, failedActor)
} else {
// need to keep that suspend counter balanced
faultResume(causedByFailure = null)
}

  上面是收到Recreate时调用的函数,简单来说就是调用aroundPreRestart函数,和clearActorFields、finishRecreate。从此也可以看出aroundPreRestart、preRestart是actor实例出现异常最后执行的函数,此时actor的状态还是出现异常时候的值。

final protected def clearActorFields(actorInstance: Actor, recreate: Boolean): Unit = {
setActorFields(actorInstance, context = null, self = if (recreate) self else system.deadLetters)
currentMessage = null
behaviorStack = emptyBehaviorStack
}

  clearActorFields设置了context/self/currentMessage/behaviorStack几个字段为默认值或者说空值。setChildrenTerminationReason这个函数不再分析,简单来说就是递归设置子actor的失败原因,然后返回false。这实现逻辑其实也挺扯的,不返回true,返回false,简直反人类。

  其实吧,setChildrenTerminationReason一般都会成功。所以会执行finishRecreate方法。

private def finishRecreate(cause: Throwable, failedActor: Actor): Unit = {
// need to keep a snapshot of the surviving children before the new actor instance creates new ones
val survivors = children try {
try resumeNonRecursive()
finally clearFailed() // must happen in any case, so that failure is propagated val freshActor = newActor()
actor = freshActor // this must happen before postRestart has a chance to fail
if (freshActor eq failedActor) setActorFields(freshActor, this, self) // If the creator returns the same instance, we need to restore our nulled out fields. freshActor.aroundPostRestart(cause)
if (system.settings.DebugLifecycle) publish(Debug(self.path.toString, clazz(freshActor), "restarted")) // only after parent is up and running again do restart the children which were not stopped
survivors foreach (child ⇒
try child.asInstanceOf[InternalActorRef].restart(cause)
catch handleNonFatalOrInterruptedException { e ⇒
publish(Error(e, self.path.toString, clazz(freshActor), "restarting " + child))
})
} catch handleNonFatalOrInterruptedException { e ⇒
clearActorFields(actor, recreate = false) // in order to prevent preRestart() from happening again
handleInvokeFailure(survivors, PostRestartException(self, e, cause))
}
}

  首先调用resumeNonRecursive,这个好像是恢复mailbox的状态的,此时就可以正常的接收消息了。重点来了:newActor。这里通过Props创建了actor的一个新的实例,一般情况下创建的actor实例与原来的都不同,不过读者是不是觉得,这里可以优化一下,弄个参数让开发者自己定义是不是重用以前的actor实例?嗯,没错,恭喜你,这就是SupervisorStrategy.Resume的作用,其实就是简单的忽略此次异常,actor实例不会有任何变化。

  重建之后调用了新actor实例的aroundPostRestart、postRestart,也就是说postRestart是新实例创建成功后执行的第一个方法。新的actor实例创建成功后,后面的survivors foreach代码块就是在递归的重启子actor了。这里不再具体分析。

  再总结一下,父actor收到子actor异常的消息后,根据当前的策略判断是恢复、重启、还是重用什么的,一般都是重启。如果是重启就是调用子actor的restart函数,就会给出现异常的子actor,发送Recreate系统消息,子actor收到该消息后,会执行一系列重启的操作,最后创建新的actor实例,重启成功。当然这个过程中,子actor的所有子actor也会被重启,也就是一个递归的处理过程。

  其实简单的说,如果某个子actor出现异常,挂起自己的邮箱和递归子actor的邮箱,发消息通知父actor,父actor根据当前策略判断能够重启,如果能够重启,则该子actor完成重启动作,并负责递归重启它的子actor。当然还有其他策略,不同的策略这个处理逻辑会有不同。

aaarticlea/jpeg;base64,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Dw8PDw8PDw//2wBDAQICAgQEBAcEBAcQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/3QAEADf/2gAMAwEAAhEDEQA/AP38ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//Q/fyiiigAooooAKrTnbt6/hVmq83mbf3dAHxTfftK/FPxP4v8WaB8B/hUfHWneC9Qn0jUNUu9dg0WF9UtVQzWtpHJBcyTeVvVJJJNib619O/a98EXfwiHxT1bR9Q0q4h19PC19o8vkm9sdbNylobaT955f7uR9+//AJ5/PsrxzQPhZoXxX8VeO/iX+yx8VNd+FviNdfvLXxBpn2e2v9PbVrZvInmn0e4J2SS7Pv8AmR7/AL9fOfxg8U6n8cvgFqGkfF/TdG8R658N/idpHhttUsId1hfI91bJPMnmeZ5LyxzbLmPzNmaAP2cn1WxtbVb69u4ooX+7I0mxDVn7ZAdmyRXV13L833q/Lvx74P8AAHjv48eIvh74D+EVp8T77wBoui6VPb+INRtbHwz4dguYfPtUsbQ29zJ5kkG3zHSPhESNHTpXy14a8P2fjr4EfB34ba7KJtEj+NWoaG9vYXM0tsmn7L/zLK3n/dzvayQu8fmHY/ltQB+yMnxk8Kr8V9H+E0MjXOo61o91rMNwjJ9m8i2nht9m/wD56SPL9z/Zr2SLpX5h6f8As8/BLwP+3L4F0Twr4J0zTbWy8FanqkEccKfur6HU7YRTDPz7498mH/2q/TmH503/AN+gCxRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRUUvSgCWivl1f2yv2U3kWP/hbnhnd/tapAn/s9e/+HvEGheK9Httf8N6h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kkgevozwz8R/2l/G/inwfoV38OX+HdjYSmfxTf6hd2V/DPshf/Q9LFtPJI/mSbX8ySOMoi/czX2cVU9RTdif3aAPyW8GfBT9oPw98LvBelWPgtU8T/BHxlf6zYwT39l9m8Safql1fvOlrOkn7iSOG7X/AF8cfzr/AN8epa34M+L37QPxMsviT4i8CXPgbRfBHhzxDYaTZaneWb3+o6n4igS3feLOeWOGCONP45PM3tX6NbRSbRu3UAfPf7MPg3xH8P8A9nz4d+BPF9idM1jQdDsbK8t2kSXZPFCkciF4zJGfnH8D4r6GoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/0/38ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//ZAA==" alt="" />

  关于Actor的生命周期,上面的图画的比较清楚,读者可以自行理解。但需要注意,Instance 1和Instance 2是两个“不同”的Actor实例,这里的不同,是指Actor内部的用户状态(即开发者自定义的字段)全部丢失,都会被重建。但两个不同实例的UID相同,这就意味着用相同的ActorRef可以跟后面重新建立的Instance 2发消息。

Akka in action: actor model

Akka源码分析-故障恢复的更多相关文章

  1. Akka源码分析-Cluster-Singleton

    akka Cluster基本实现原理已经分析过,其实它就是在remote基础上添加了gossip协议,同步各个节点信息,使集群内各节点能够识别.在Cluster中可能会有一个特殊的节点,叫做单例节点. ...

  2. Akka源码分析-Akka Typed

    对不起,akka typed 我是不准备进行源码分析的,首先这个库的API还没有release,所以会may change,也就意味着其概念和设计包括API都会修改,基本就没有再深入分析源码的意义了. ...

  3. Akka源码分析-Akka-Streams-概念入门

    今天我们来讲解akka-streams,这应该算akka框架下实现的一个很高级的工具.之前在学习akka streams的时候,我是觉得云里雾里的,感觉非常复杂,而且又难学,不过随着对akka源码的深 ...

  4. Akka源码分析-Cluster-Metrics

    一个应用软件维护的后期一定是要做监控,akka也不例外,它提供了集群模式下的度量扩展插件. 其实如果读者读过前面的系列文章的话,应该是能够自己写一个这样的监控工具的.简单来说就是创建一个actor,它 ...

  5. Akka源码分析-Cluster-Distributed Publish Subscribe in Cluster

    在ClusterClient源码分析中,我们知道,他是依托于“Distributed Publish Subscribe in Cluster”来实现消息的转发的,那本文就来分析一下Pub/Sub是如 ...

  6. Akka源码分析-Persistence

    在学习akka过程中,我们了解了它的监督机制,会发现actor非常可靠,可以自动的恢复.但akka框架只会简单的创建新的actor,然后调用对应的生命周期函数,如果actor有状态需要回复,我们需要h ...

  7. Akka源码分析-local-DeathWatch

    生命周期监控,也就是死亡监控,是akka编程中常用的机制.比如我们有了某个actor的ActorRef之后,希望在该actor死亡之后收到响应的消息,此时我们就可以使用watch函数达到这一目的. c ...

  8. Akka源码分析-Cluster-ActorSystem

    前面几篇博客,我们依次介绍了local和remote的一些内容,其实再分析cluster就会简单很多,后面关于cluster的源码分析,能够省略的地方,就不再贴源码而是一句话带过了,如果有不理解的地方 ...

  9. Akka源码分析-CircuitBreaker(熔断器)

    熔断器,在很多技术栈中都会出现的一种技术.它是在分布式系统中提供一个稳定的阻止嵌套失败的机制. 该怎么理解呢?简单来说,在分布式环境中,如果某个计算节点出现问题,很容易出现失败的逆向传到或整个系统的雪 ...

随机推荐

  1. apache 添加虚拟机

    <VirtualHost *:80> DocumentRoot "E:/UPUPW_AP7.0/htdocs/xd.local/public" ServerName a ...

  2. 08.C语言:特殊函数

    C语言:特殊函数 1.递归函数: 与普通函数比较,执行过程不同,该函数内部调用它自己,它的执行必须要经过两个阶段:递推阶段,回归阶段: 当不满足回归条件,不再递推: #include <stdi ...

  3. MySQL Connector/Python 接口 (二)

    连接数据库 本文参见这里,示例如何连接MySQL 数据库. import mysql.connector from mysql.connector import errorcode # 连接数据库需要 ...

  4. 数位dp备忘录

    hdu 4734:把限制值化为数组形式,逐位求解 hdu 4507:类似于上题,其中求平方和的方法很妙 SPOJ  BALNUM Balanced Numbers:经典数位dp,注意两点,1,不要把前 ...

  5. Modify MySQL dump file the fatest way

    使用mysql命令导入mysqldump生成的sql文件时,为了提高导入速度,往往需要修改dump文件,但是面对一个几十GB的文件,这事儿就太崩溃了,最快速的方法是这么做: ( echo " ...

  6. 转载 - JSONObject简介

    出处: http://www.cnblogs.com/java-pan/archive/2012/04/07/JSONObject.html JSONObject简介   本节摘要:之前对JSON做了 ...

  7. UVa - 12617 - How Lader

    先上题目:   How Lader  Lader is a game that is played in a regular hexagonal board (all sides equal, all ...

  8. SSH三种框架及表示层、业务层和持久层的理解(转)

    Struts(表示层)+Spring(业务层)+Hibernate(持久层) SSH:Struts(表示层)+Spring(业务层)+Hibernate(持久层) Struts:Struts是一个表示 ...

  9. 如何取消codeblocks对msvcr100.dll的依赖?

    用VS2010或是codeblocks开发的程序,在开发之外的机器上,可能会提前缺少msvcr100.dll之类的文件. 可以用如何设置,取消其对库文件的依赖. 当然,还要注意创建程序的类型.(补) ...

  10. B. Code For 1 分治

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...