- 博客(26)
- 问答 (2)
- 收藏
- 关注
原创 More Effective C++——2. 操作符
c++允许编译器在不同类型之间执行隐式转换。但是部分隐式转换存在安全性问题,例如 int–>short,然而,自己设计类型时可以尝试提供特定的 “函数” 来作为隐式类型转换使用,并保证安全性。tip]尽管如此,最好不要提供任何类型转换函数。实现定制的类型转换函数有两种方案。
2023-03-13 09:55:36
266
1
原创 暴力递归转向动态规划
你可以看到上面有很多 sbeg + 1, pbeg + 2 这种运算,这些值算出来很有可能相等,那么对于同一个 helper(s, 4, p, 5) 这种函数,可能会调用了多次。这里我的 map 使用 vector 来代替,大小是 (s.size() + 1) * (p.size() + 1) 的大小,每次取值时,通过 getIndex 来找出 vector 中对应的位置下标。逆着遍历,因为你看到了,我们的终止条件在 dp[s.size()][p.size()] 处。这样,我们就得到了完整的动态规划代码。
2023-03-08 18:33:53
301
原创 Effective c++——9. 杂项讨论
许多程序员会忽略编译器警告,但是有时候警告会产生运行时异常。编译器可能会说 warning: D::f() hides virtual B::f(),看上去这是理所应当的事情,但是实际上它想告诉你,这并非是重写操作,这种名称掩盖会导致最终结果与期望不一的情况。尽管写出一个完全没有警告的代码是十分困难的,但是你应该去理解这些警告的含义,并在完全理解后来判断是否应该忽略这些警告,否则造成错误后很有可能就是警告造成的。
2023-03-08 10:28:09
190
原创 Effective c++——8. 定制的 new 和 delete
当 operator new 无法满足某一内存分配需求时,它会抛出异常。对于旧式操作,该行为会返回一个 null指针。我们可以通过修改错误处理函数来改变这种默认行为,从而获得旧式操作体验。当 operator new 的行为无法被满足时,它会先调用一个客户指定的错误处理函数,所谓的 new-handler。客户可以通过调用 set_new_handler 来指定函数。你可以这样设置 new-handler。
2023-03-07 13:00:03
151
原创 Effective c++——7. 模板与泛型编程
当我们编写一个 class template,而它所提供之 “与此 template 相关的” 函数支持 “所有参数之隐式类型转换” 时,请将那些函数定义为 “class template 内部的 friend 函数”。在条款24中讨论了为什么只有 non-member 函数才有能力 在所有实参身上实施隐式类型转换。但是在模板化过程中,条款24似乎就不再适用了。public :上述代码无法通过编译,它并没有像非模板那样按照预期运行。这主要是因为,模板的运行过程是先根据传。
2023-03-06 13:41:49
225
2
原创 Effective c++——6. 继承和面向对象设计
pb -> mf();pd -> mf();上面的代码中,两次调用结果不一样。这主要是因为 non-virtual 函数是 静态绑定 的,这也就意味着使用 B pointer 来调用就会调用 B::mf,而用 D pointer 力调用则是 D::mf。另一方面 virtual却是 动态绑定 的,所以 virtual function 并不会产生这个问题。
2023-03-03 09:21:02
151
原创 Effective c++——5. 实现
只要你定义一个变量,而其类型带有一个构造函数或者析构函数,那么当程序控制流到达这个位置时,就会产生构造成本。离开作用域时你又需要承受析构成本。甚至你从未使用过这个变量。上述代码就可能产生一个完全没有被使用的变量 encrypted。通过修改顺序,将 encrypted 的定义式向后移动,可以避免这种事情的发生。但是上述代码效率仍旧不高,因为 encrypted 并没有初始化,这意味着它会先调用 default constructor,然后再调用 operator=。
2023-03-02 10:20:39
157
原创 Effective c++——4. 设计与声明
设计接口的理想原则是,如果客户企图使用某个接口而没有获得他所预期的行为,这个代码就不应该通过编译;如果代码通过了编译,它的作用就该是客户想要的。这就要求首先必须考虑客户可能做出的错误。可以通过导入新类型而获得预防。这样做就起到了警示作用,同时又限定了传递顺序。限定了传递顺序后,我们可以进一步对使用的值进行限定。简单的方法是使用 enum 来限定,但是 enum 并不具备类型安全性,例如enums 可以被用来当作一个 ints 使用。因此可以重新设计一个类。
2023-03-01 09:27:58
125
原创 More Effective C++——1. 基础议题
因此,应当谨慎的提供 default constructors,非必要,不要提供无意义的 default constructors。如果实现的对象不能进行 “从无到有” 的转变,则不应该提供一个 default constructor。的情况在 数组的删除过程中 也同样会存在,因为实际执行的是循环调用每个对象的 destructor。上述代码会出现问题,因为“指针算术表达式”的含义是对指针进行后移,而后移的距离与数组中对象的大小有。因为这意味着,使用者需要对某些内容进行测试以确定对象的合法性。
2023-02-28 11:07:45
120
原创 Effective-c++——3. 资源管理
在程序编写过程中需要面对大量资源的管理问题,包括内存、文件描述符、互斥锁、图形界面中的字型和笔刷、数据库连接、网络sockets。经过训练后,基于对象的资源管理办法,几乎可以消除资源管理问题。
2023-02-28 09:30:39
332
原创 Effective-c++——2. 构造/析构/赋值运算
编译器创建的这些函数中 default constructor/destructor 主要用来给编译器用来防止 “幕后” 代码,例如调用 baseclasses 和 non-static 成员变量的构造函数和析构函数。至于 copy 构造函数 和 copy assignment 操作符,编译器创建的版本只是简单的将每一个 non-static 成员变量拷贝到目标对象。当编译器无法产生合适的 copy assignment 时,它会放弃产生。
2023-02-27 12:31:48
134
原创 Effective-c++——1. 让自己习惯c++
如果你能够按照上面的这些约束进行编码,那么只剩最后一件值得关心的事情 “不同编译单元内定义之 non-local static对象” 的初始化次序。static 对象是指 global 对象,定义于 namespace 作用域内的对象,在 class 内、函数内、以及在 file 作用域内被声明为 static 的对象。他们的寿命从构造出来直至程序结束为止。其中在函数内的 static 对象被称为 local static 对象。而其他则都被称为 non-local static 对象。
2023-02-22 14:23:05
109
原创 计算机病毒与恶意代码学习笔记 1.恶意代码概述(一)
文章目录@[toc]恶意代码概念恶意代码的发展历史恶意代码的种类恶意代码的传播方式恶意代码概念定义:运行在目标计算机上,使系统按照攻击者医院执行任务的一组指令。包括哪些:计算机病毒(Computer Virus)蠕虫(worm)特洛伊木马(Trojan Horses)Rootkit间谍软件(Spyware)恶意广告(Dishonest Adware)流氓软件(Crimew...
2019-05-27 22:08:16
3187
原创 密码学学习笔记 3.传统加密技术——代替技术(三)置换技术
Hill密码用连续的m个密文字母取代原有的m个连续的明文,而且这m个密文是用m个线性方程来决定的。这里就用例子来演示。首先我们先为26个字母进行定义,a=0,b=1,......,z=25。然后我们来看一下公式: ...
2019-05-26 18:16:37
1148
1
原创 kali linux 渗透技术学习笔记 7.信息收集——其他的信息收集手段(二)
NetdiscoverNetdiscover用来主动或被动的继续ARP侦查。次工具在不使用DHCP的无线网络中非常有用。(如果不清楚DHCP的话可以自己查一下,或者可以和我在接下来的博客中学习网络工程相关内容)。首先我们来看一下它的语法格式:netdiscover: invalid option -- '-'Netdiscover 0.5.1 [Active/passive A...
2019-05-26 00:44:34
559
原创 密码学学习笔记 2.传统加密技术——代替技术(一)
所有加密技术都使用两种方法,替代和置换;替代技术就是将明文字母替换成为其他字母、数字或符号。Caesar密码规则:将每个字母替换成为字母表中对应的后面的第三个字母。明文 a b c d e f g h i j k l m n 密文 D E F G H I ...
2019-05-17 02:43:32
1386
原创 kali linux 渗透技术学习笔记 6.信息收集——其他的信息收集手段(一)Recon-NG框架
Recon-NG框架Recon-NG框架是用python编写的开源web工具,主要用于信息收集和网络侦查。源代码位置:https://bitbucket.org/LaNMaSteR53/recon-ng/src/master/fxy@kali ~ ...
2019-05-16 00:08:19
1611
1
原创 密码学学习笔记 1.传统加密技术——对称密码模型简介
从这周开始,我制定了一些学习计划,所有这些计划会陆续进行,本篇就是其中之一,关于密码学的学习。在书的第一章简单介绍了安全框架,但是无论是密码学,系统安全还是网络安全都会涉及安全框架,所以就不写进来了,而是直接开始密码学的内容。对称密码模型对称密码也称为传统密码或者单密钥密码,即加密密钥和解密密钥是同一个密钥。优点就是简单,容易实现。密码体制(密码): 从明文到密文的转变过程和从密...
2019-05-09 00:45:38
3234
原创 kali linux 渗透技术学习笔记 5.信息收集——网络映射器工具Nmap (三) 系统指纹与服务指纹识别
系统指纹识别在书中这样描述系统指纹识别,指纹识别是识别系统的一个典型模式,包括指纹图像获取、处理、特征提取和对等模块(这里就是把系统识别比作了指纹识别)。也就是通过获取到的数据包特征来推测目标主机使用的系统。在Nmap官网中提到“Nmap将一系列TCP和UDP数据包发送到远程主机,并检查响应中的每一位。在执行了TCP ISN采样,TCP选项支持和排序,IP ID采样以及初始窗口大小检查等数十...
2019-05-08 02:26:27
1263
原创 kali linux 渗透技术学习笔记 4.信息收集——网络映射器工具Nmap (二) 端口扫描
使用Nmap端口扫描的基础Nmap将端口分为六种状态:open、closed、filtered、unfiltered、open | filtered、closed | filtered。open:表示端口打开,并且主动接受TCP链接、UDP数据报和SCTP关联,这种开放端口都可以是被攻击的地方。所以有些人会使用防火墙保护或关闭它们。closed:表示可以访问的关闭的端口,即接收和响应...
2019-04-26 21:49:21
474
原创 kali linux 渗透技术学习笔记 3.信息收集——网络映射器工具Nmap (一) 识别活跃主机
识别活跃的主机在进行渗透测试之前,必要的就是识别目标网络中的活跃主机。当然最简单的方式就是ping一下主机,这里将使用Nmap工具来识别活跃主机。网络映射器工具 NmapNmap工具的三个基本功能分别是,一. 探测主机是否在线,二. 扫描主机端口,嗅探网络服务,三. 推断主机所用的操作系统。Nmap使用TCP/IP协议栈指纹可以准确的判断目标主机的操作系统类型。运行过程:...
2019-04-23 01:03:34
540
原创 kali linux 渗透技术学习笔记 2.信息收集——测试网络范围
测试网络范围通过测试网络范围内地IP地址或域名,可以确定是否有人入侵自己的网络并损害系统。kali提供了DMitry和Scapy工具,DMitry工具用来查询目标网络中的IP地址或域名信息Scapy用来扫描网络及修谈数据包。域名查询工具DMitryDMitry是一个用来查询IP或域名WHOIS信息的。WHOIS是用来查询域名是否已经被注册以及注册域名的详细信息的数据库。使用此...
2019-04-12 23:26:48
828
1
原创 kali linux 渗透技术学习笔记 1.信息收集——枚举服务
枚举服务枚举主要用来从一个网络中收集某一类的所有相关信息DNS枚举DNSenum DNSenum是一款域名信息收集工具,它能够通过谷歌或字典文件猜测可能存在的域名,并对网段进行反向查询。它不仅可以获取主机地址信息、域名服务器、邮件交换记录、还可以在域名服务其上执行axfr请求,然后通过谷歌脚本得到扩展域名信息,提取子域名并查询,然后使用whois查询,执行反向查询,把...
2019-04-07 02:19:09
2832
空空如也
学习笔记,web制作时Apps aren't loaded yet.
2018-06-01
ython.pygal/reuqests学习范例-爬取github上Python热度
2018-05-31
TA创建的收藏夹 TA关注的收藏夹
TA关注的人