定义 策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 Strategy 模式典型的结构图为: 大家肯定看着很懵逼,其实第一次接触类图的时候我自己也是这样。 那么咱们举个例子来解释一下。 假设我们要实现一个角色游戏,context为所有角色的基类(例子的代码后面会实现,此处只是拿context举例,此处的context并不是基类),一个角色可以切换不同的武器。然后strategy则为不同的武器的基类,而不同的武器的攻击方式是不同的,斧头的攻击为砍,剑的攻击为刺,弓箭的话为射击。乍一看感觉好麻烦啊。难不成得给一个角色类把所有的武器类都包含进去,然后切换武器的时候删除掉之前的武器,然后再重新开辟一个新的武器类。这样子的话给我们设计会带来非常大的不方便。而且假如我们有了新的武器,比如魔法棒,那么我们不是应该给角色类里面再添加魔法棒类,这样的话会让角色类变得非常庞大,而且非常不利于后期的维护,我们不能每增加一个武器就给角色类添加一个武器类吧。所 继续阅读 >>


李佳灏 18/06/22 23:47:23
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。示例:babad输出:bab(注意aba也是有效答案)思路:1、可以枚举出所有的子串,然后每次都判断该子串是否是回文,若是回文便更新最大长度,并且记录子串的开始位置和结束位置。2、可以从第一个字符为中心向两边检查,若以k为中心 ,那么i往K的左边检测,j往右边检测。若s[i]==s[j]那么说明从i-j的子串为回文,接下来只需要判断s[i-1],s[j+1]是否相同,若相同则也是子串,并更新长度,并更新最长子串的开始位置和结束位置,直到当条件不满足s[i]==s[j]的时候,将中心点k往后移动。方法一(暴力求解)class Solution { public: bool judge(string &s, int star, int end)//判断子串是否是回文,分为奇偶两种情况 { int median; int length = end-star;; 继续阅读 >>


胡佳露 18/06/22 19:44:46
1.MAC地址 MAC地址长48字节。在使用网卡的情况下,一般会将MAC地址烧入到ROM中,任何一个网卡的MAC地址都是唯一的。例如 00:10:5A:70:33:61 MAC地址的3~24位表示厂商识别码,每个NIC厂商都有特定唯一的识别数字。25~48位是厂商内部为识别每个网卡而用。因此,保证MAC地址的唯一性。 2.共享介质网络 从通信介质的使用方法上看,网络可分为共享介质型和非共享介质型。 共享介质型网络指多个设备共享一个通信介质的一种网络。设备之间使用同一个载波信道进行发送和接收。采用半双工通信方式,并对介质进行访问控制。 共享介质型网络中有两种介质访问控制方式:争用方式和令牌传递方式。 - 争用方式 指争夺数据传输的权力。通常令每个站采用先到先得的方式占用信道发送数据,若多个站同事发送帧,会导致冲突,造成网络拥堵与性能下降。 有一部分以太网使用CSMA/CD方式,要求每个站提前检查冲突,一旦发生冲突,今早释放信道。工作原理: - 如果载波信道上没有数据流动,则都 继续阅读 >>


王良 18/06/21 14:13:04
注:本篇文章内容借鉴自:浅入浅出BitTorrent协议,其中加入了博主的部分原创,感谢,侵删~ 对等网络的概念 以下定义主要摘抄自维基百科与中科院计算技术研究所: 对等式网络(peer-to-peer,简称P2P),又称点对点技术,是无中心服务器、依靠用户群(peers)交换信息的互联网体系。它的作用在于,网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源通过网络提供服务和内容,能被其它对等节点(Peer)直接访问而无需经过中间实体,减低以往网路传输中的节点,以降低资料遗失的风险。与有中心服务器的中央网络系统不同,对等网络中的每个用户端既是资源(服务和内容)提供者(Server),又是资源获取者(Client),任何一个节点无法直接找到其他节点,必须依靠其用户群进行信息交流。 对等网络的模型 P2P网络的简易模型图如下: 如图,我们可以总结出P2P网络的一些特征: 非中心化:P2P是全分布式系统,网络中的资源和服务 继续阅读 >>


董恒毅 18/06/21 11:15:10
也是看了一篇很好的博客,思路很清晰,只是有些地方感觉博主没有详细解释,后来理解了,做了一个小总结。原博客链接:点击打开链接题目还是昨天的那道题目:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。示例 1:nums1[1,3]nums2[2]中位数:2.0示例 2:nums1[1,2]nums2[2,3]中位数:(2+2)/2=2.0其中要求算法时间复杂度,也可以利用分治法来解决。此时的分治法,需要将两个有序数组合并看作一个新的数组。然后进行分割。思路总结(具体思路原创博主更为详细,可以参照):1、因为是两个有序数组,所以需要两个割点C1,C2。若将两个数组(都是升序排序的数组)分别在一个割点处分为两半,那么L1(数组前半部分的最右边的元素)一定是小于R1(数组后半部分最左边的元素),同理L2<R2。 因为要找两个有序数组的中位数(为了方便奇偶性的区分,我们将两个数组分别虚拟设置为奇数,所以两个数 继续阅读 >>


胡佳露 18/06/20 22:47:58
为期两周的课设终于结束了,我们组选择的题目当然是我邮软件祖传的课设项目TTMS(Theater Ticket Management System 剧院票务管理系统),说来也很惭愧,整个项目自打三月份人机界面课程大作业时候就已经开始,直到现在六月份,开发周期长达三个月,然而功能上还有很多欠缺。 项目首页: https://github.com/fujie-xiyou/TTMS_2.0 那就先从项目的界面说起 界面部分采用JAVAFX开发,JAVAFX是JAVA8主推的图形库,相比Swing有很多方便的特性,比如对css的支持,就让我们的项目在美化过程中变得非常轻松。 而JAVAfx的缺点在于官方文档不够全面,网上的资料也相对比较少,做很多东西都要查资料查很久或者自己慢慢摸索。 说几个界面开发过程中的坑点 Javafx时间选择器 在开发 演出计划管理 用例时,需要给用户提供一个选择时间日期的工具,而javafx也自带了日期选择器,令人不解的是却没有提供时间选择器!!! 如果直接让用 继续阅读 >>


刘付杰 18/06/20 21:19:58
Ajax对于表单提交来说,是一个很好的工具,他提供了异步提交的效果,这使得用户提交表单时不需要刷新页面就可获知提交成功与否,但一直以来,网上的示例大都是JQuery上传的教程,原生Ajax似乎并不受大家热爱,更别提原生Ajax上传图片的教程了,本篇将为你讲述JavaScript中使用FormData上传文件的教程 FormData FormData对象用以将数据编译成键值对,以便用XMLHttpRequest来发送数据。比起早先的Ajax,发送FormData的Ajax不仅可以发送图片,更好的一点是我们无需设置RequestHeader,也无需担心自己粗心写错xhr.send()中的参数。 用法 我们可以使用表单来构造一个FormData对象,也可以创建一个空的FormData对象,之后手动添加一些数据进去。 使用表单构造FormData对象。 做法很简单,使用getElementById()或querySelector()这类选择器获取表单对象,将其传入FormData的构造方 继续阅读 >>


李余通 18/06/20 20:29:20
install ZSH To install the very mystery and legendary “ZSH” , the first thing u have to do is install the same legendary “homebrew” management. If u use the MacBook Pro just like what I used , I strongly recommend install the item2 first.Just go to the website of Item2 download and install (that’s pretty easy) easy_install homebrew okay , done.(pretty easy right?) Now, we can install the “ZSH” sh -c "$(curl -fsSL https://raw.github.com/robbyrussel 继续阅读 >>


陈苏扬 18/06/20 15:26:12
1.数据包首部 每个分层中都会对所发送的数据附加一个首部,其中包含了该层必要的信息,如发送端地址、接收端地址以及协议等相关信息。 2.发送数据包 1)应用程序处理 进行编码处理(相当于表示层功能),管理何时建立通信何时发送数据等功能(相当于会话层功能)。建立连接后将数据发送给下一层的TCP,再做实际的转发处理。 2)TCP模块的处理 TCP根据应用的提示,负责建立连接、发送数据以及断开连接。提供可靠传输。 在数据前端附加一个TCP首部,包括源端口号、目标端口号(用以识别发送主机跟接收主机上的应用)、序号以及校验和(判断数据是否被损坏)。再将数据发送给IP。 3)IP模块的处理 IP在TCP传过来的数据前附加IP首部,包括接收端IP、发送端IP、上层协议等信息。 IP包生成后,参考路由控制表决定接收此IP包的路由或主机。随后将数据发送给连接这些路由器或主机网络接口驱动程序,以实现真正的数据发送。 如果不知道接收端MAC地址,则通过ARP查找。 4)网络接口( 继续阅读 >>


王良 18/06/19 21:58:12
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。示例 1:nums1[1,3]nums2[2]中位数:2.0示例 2:nums1[1,2]nums2[2,3]中位数:(2+2)/2=2.0思路:因为是两个已经有序的数组,要求中位数,只需要将两个数组合并成一个有序数组,然后根据数组元素个数的奇偶性,分开来便可以求出中位数,若最后合并成功的数组名为K的话,(偶数的话中位数=K[(N/2)]+K[(N/2-1)]/2)(奇数的话中位数=K[(N/2)])。并且题目要求时间复杂度为O(log(M+N)),所以在排序的时候,要考虑时间复杂度。代码实现(c++):class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { 继续阅读 >>


胡佳露 18/06/19 15:44:30