问题描述 三名商人各带一个随从乘船渡河,一只小船只能容纳两人,由于他们自己划行,随从密约,在和的任一岸,一旦随从的人数比商人多,就杀人越货,但是如何安排乘船的大权安排在商人们的手中,商人们怎样才能安全渡河? 模型假设 我们需要对问题做一些假设: 1. 每个商人和随从都会划船 2. 只有一条船,且每条船上最多只能乘坐两个人 3. 所有商人与随从之间没有矛盾,不会出现两人不愿意坐一条船的现象 4. 船在渡河的过程中不受外界环境的影响 模型构造 记第 k 次过河前此岸的商人数为 xk , 随从数为 yk , k = 1, 2, 3…, xk ,yk = 0, 1, 2, 3 定义状态: 将二维向量 sk = ( xk , yk ) 定义为状态 将安全渡河状态下的状态集合定义为允许状态集合, 记为 S = {(x,y) | x=0,y=0,1,2,3; x=y=1; x=y=2; x=3,y=0,1,2,3} 记第 k 次渡河船上的商人数为 uk , 随从数为 vk 定义决策: 将二维向量 dk = (uk , vk 继续阅读 >>


殷健翔 17/09/17 11:50:34
作为被面试官最喜欢问到的23种设计模式之一,我们不得不熟练掌握单例模式以及洞悉多线程环境下,单例模式所存在的非线程安全问题以及它的解决方式。 注:这篇文章主要讲述多线程环境下单例模式存在的非线程安全问题,并不详细讲述单例模式。 何为单例模式 首先我们先大概了解一下单例模式的定义: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 单例模式的应用非常广泛,例如在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。选择单例模式就是为了避免不一致状态。 单例模式的实现有三种方式:饿汉式(天生线程安全),懒汉式,登记式(可忽略)。 对于上面单例模式的实现方式我在这里不做过多介绍,我们着重来看一下懒汉式在多线程环境下出现的问题以及它的解决策略。 设计线程安全的单例模式 D 继续阅读 >>


董恒毅 17/08/29 14:14:58
最近一直在看《Java多线程编程核心技术》的第二章,主要讲的是线程共享变量与线程私有变量以及如何写出线程安全的代码。看这部分一开始没太注意,只是记住了一条规则,“类中的成员变量,也叫实例变量,也叫全局变量,它是非线程安全,是所有线程共享的变量,定义在方法中的私有变量是线程安全的,是每个线程私有的”。很好理解不是吗,然后一帆风顺的看到了关于volatile这部分的知识,看过之后我陷入了凌乱。。。关于这部分我之后进行总结,而现在我觉得你如果真的想写出线程安全的代码,那么Java的内存分配以及布局就是我们需要掌握的基础。为此,我粗略的看了一下《深入理解Java虚拟机》这本书的第二章,并且查阅了一些资料,现在汇总整理如下。 注:学习这部分内容之前如果你对进程的内存映像或数据在内存中的分配有大概的了解,建议你先忘记它们,因为这是讲Java虚拟机运行时的数据区,和之前的知识并不相同,所以学习的时候不要拿自己以前所了解的知识进行比较与衡量。 Java虚拟机运行时的数据区 先来看一张图片: 在这里我们只需要关注线程共享区中的堆,以及线程独占区中的虚拟机栈, 继续阅读 >>


董恒毅 17/08/08 14:26:58
HTTP+ 加密 + 认证 + 完整性保护 =HTTPS HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL(Secure SocketLayer)和 TLS(Transport Layer Security)协议代替而已。 HTTP 主要有这些不足,例举如下 通信使用明文(不加密),内容可能会被窃听 不验证通信方的身份,因此有可能遭遇伪装 无法证明报文的完整性,所以有可能已遭篡改 TCP/IP是可以被窃听的网络,按 TCP/IP 协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视,所以要通过加密来防止窃听。 通信的加密:通过和SSL或TSL的组合使用,加密HTTP的通信内容,与SSL组合使用的HTTP称为HTTPS。 内容加密:对报文主体加密后发送,客户端服务器必须同时具有加密解密过程。 至于通信双方的身份信息,在SSL中存在一个被称为证书的手段,只要确认对方的证书,伪装身份的危险大大减小。 公开密钥加密使用一对非对称的密钥。一 继续阅读 >>


卢晓丹 16/12/31 22:10:54
本篇博客主要讲解在采用机器学习的方法进行webshell检测的过程中的关键环节–有效特征的提取。因 […] 继续阅读 >>


郭遗欢 16/12/19 04:52:18
规则: 不要使用rand( ) 函数生成伪随机数,这个函数不保证不保证产生随机序列质量,比较好预测。使用ran […] 继续阅读 >>


张明瑞 16/08/30 13:17:50
规则: 不要访问已经释放的内存。使用引用被free( ) 或者 realloc( ) 函数调用释放的内存指针值 […] 继续阅读 >>


张明瑞 16/08/29 14:54:45
分享一个一键获取电脑上所有WiFi密码的powershell。源码如下: [crayon-57d411eb7f […] 继续阅读 >>


郭遗欢 16/08/29 12:52:26
规则: 确保无符号整数运算不产生回绕,如果底层整数表示无法表示无符号整数运算的结果,该值可能发生回绕。在808 […] 继续阅读 >>


张明瑞 16/08/28 08:33:01
这段时间看了一个Windows下权限维持的开源工具组件Empire,采用powershell来对目标主机进行操 […] 继续阅读 >>


郭遗欢 16/08/27 12:10:13