计算机算法

一网打尽!每个程序猿都该了解的黑客技术大汇总

混江龙づ霸主 提交于 2020-03-23 10:28:22
目录 [一网打尽!每个程序猿都该了解的黑客技术大汇总](https://www.cnblogs.com/xuanyuan/p/12529598.html) 网络安全 SQL注入 XSS攻击 反射型 存储型 CSRF攻击 DDoS攻击 DNS劫持 TCP劫持 端口扫描技术 系统安全 栈溢出攻击 整数溢出攻击 空指针攻击 释放后使用攻击 HOOK 权限提升 可信计算 密码学 对称加密 & 非对称加密 秘钥交换技术 信息摘要算法 数据编码技术 多因子认证技术 总结 一网打尽!每个程序猿都该了解的黑客技术大汇总 上面这个段子估计很多朋友都看过,程序员被黑过无数次,在其他人眼中,仿佛我们需要写得了木马,翻得了围墙,修得了电脑,找得到资源,但凡是跟计算机沾点边的,咱都得会才行。 段子归段子,言归正传,对于咱们程序员来说,多多少少了解一些信息安全的技术知识还是大有裨益的,不仅能了解一些计算机和网络的底层原理,也能反哺我们的开发工作,带着安全思维编程,减少漏洞的产生。 本文内容: - 网络安全 - SQL注入 - XSS攻击 - CSRF攻击 - DDoS攻击 - DNS劫持 - TCP劫持 - 端口扫描技术 - 系统安全 - 栈溢出攻击 - 整数溢出攻击 - 空指针攻击 - 释放后使用攻击 - HOOK - 权限提升 - 可信计算 - 密码学 - 对称加密 & 非对称加密 - 秘钥交换技术 -

[转]程序员必读书单(转)

拈花ヽ惹草 提交于 2020-03-09 16:39:14
作者: Lucida 微博: @peng_gong 豆瓣: @figure9 原文链接: http://lucida.me/blog/developer-reading-list/ 关于 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读。旨在成为最好最全面的程序员必读书单。 前言 Reading makes a full man; conference a ready man; and writing an exact man. Francis Bacon 优秀的程序员应该具备两方面能力: 良好的 程序设计 能力: 掌握常用的数据结构和算法(例如链表,栈,堆,队列,排序和散列); 理解计算机科学的核心概念(例如计算机系统结构、操作系统、编译原理和计算机网络); 熟悉至少两门以上编程语言(例如C++,Java,C#,和Python); 专业的 软件开发 素养: 具备良好的编程实践,能够编写可测试(Testable),可扩展(Extensible),可维护(Maintainable)的代码; 把握客户需求,按时交付客户所需要的软件产品; 理解现代软件开发过程中的核心概念(例如面向对象程序设计,测试驱动开发,持续集成,和持续交付等等)。 和其它能力一样, 程序设计 能力和 软件开发 素养源自项目经验和书本知识

C++从入门开始讲算法(1)

China☆狼群 提交于 2020-03-09 12:12:57
以下内容来自于洛谷网站 本文章仅是讲一个目录,细节会在之后的文章中出现 大家请拿起手中的纸和笔,认真做笔记! 文章目录 1.顺序结构 2.分支结构 3.循环结构 4.数组 5.字符串 6.函数与结构体 7.排序 8.高精度算法与模拟 9暴力枚举 10 递归递推 11.贪心 12.二分 13。搜索 14.线性表 15.二叉树 16.集合 17.图的基本应用 1.顺序结构 千里之行,始于足下。程序设计虽然花样繁多,但还是要从最简单的地方开始学习,由浅入深,直至掌握。毕竟任何复杂的工程代码都是由一行行简单的代码组成的。 我们编写计算机程序,将一个任务分解成一条一条的语句,计算机会按照顺序一条一条的执行这些语句,这就是顺序结构程序设计。 2.分支结构 人们在人生中需要做出许多选择,小到考虑晚上吃什么,大到决定高考志愿填报的学校。只有一次次选择后才能带来无限可能,我们要根据自己掌握的情况,做出最佳的选择。 程序的执行也不是一成不变的,往往会要求程序能够在不同的场合下有不同的动作。这时就需要在代码中使用条件语句来做出不同的选择。比如说,登录洛谷网时,网站后台会将你提交的用户名和密码在后台数据库中看看是否匹配,如果能够匹配就登陆成功,否则就登陆失败。这一章就来介绍如何让程序做出选择。 3.循环结构 虽然计算机可以在短时间批量处理成千上万条指令,但是不少问题中有许多规律性的重复操作

1、算法初识

痴心易碎 提交于 2020-03-05 12:42:10
1.什么是 算法 ? 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。 也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。 如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。 不同的算法可能用不同的时间、空间或效率来完成同样的任务。 一个算法的优劣可以用空间复杂度与时间复杂度来衡量。 算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。 一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。 1.1特征 一个算法应该具有以下五个重要的特征: 有穷性 (Finiteness) 算法的有穷性是指算法必须能在执行有限个步骤之后终止; 确切性 (Definiteness) 算法的每一步骤必须有确切的定义; 输入项 (Input) 一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件; 输出项 (Output) 一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的; 可行性 (Effectiveness) 算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步

数据结构与算法基础------计算时间复杂度

三世轮回 提交于 2020-02-28 23:26:01
算法效率从以下两个方面考虑: 时间效率:指的是算法所耗费的时间 空间效率:指的是算法执行过程中所耗费的存储空间 时间 效率和空间效率有时候是矛盾的。 在这里我们只讨论事前分析法,因为事后分析法也和计算机的软硬件等其他客观条件有关。 事前分析法 一个算法的运行时间大致等于计算机执行一种 简单操作 (如赋值,比较,移动等)所需的时间与算法中进行的 简单操作的次数的乘积 。 以矩阵为例: for ( i = 1 ; i <= n ; i ++ ) //n+1次 for ( j = 1 ; j <= n ; j ++ ) //n*(n+1)次 { c [ i ] [ j ] = 0 ; //n*n次 for ( k = 0 ; k <= n ; k ++ ) //n*n*(n+1)次 c [ i ] [ j ] = c [ i ] [ j ] + a [ i ] [ k ] * b [ k ] [ j ] ; //n*n*n次 } 那么上述算法所消耗的时间是该算法中每条语句的执行次数之和,则消耗的时间T(n)=2n 3 +3n 2 +2n+1。 为了便于比较不同算法的时间效率,我们仅比较他们的数量级。 若某个辅助函数f(n)(即只包含最高数量级的函数),使得当n趋近于无穷大时,T(n)/f(n)的极限值为 不等于零的常数 ,则称f(n)是T(n)的同数量级函数。记作 T(n)=O(f(n)

【软工热身作业】我与计算机:昨天、今天、明天

六月ゝ 毕业季﹏ 提交于 2020-02-27 03:01:25
我与计算机:昨天、今天、明天 项目 内容 课程:北航2020春软件工程 博客园班级博客 作业:阅读并撰写博客回答问题 第一次作业-热身! 个人课程目标 补全自己在软件开发方面的能力和经验 这个作业在哪个具体方面帮助我实现目标 从计算机大专业的角度进一步认识自己、行业和未来 结缘计算机 大学前的生涯 我可能从小就对计算机和图形用户界面有某种“天赋”。“天赋”的一个体现是,对我来说新鲜的软硬件,无论是电脑、手机还是电子词典,我都很快就能上手。很多中小学设置了“电教委员”来帮助老师设置、连接那些对于中年人复杂的投影设备,而我就是一下就能读懂各项设置并思路清晰地解决问题的那个人。 身处全国课外班文化最浓郁的地区之一,北京海淀黄庄,我自小学开始就在各个课外培训机构上“班”。那时候大多都是奥数、英语课。之后看到培训机构“科技部”的招生简章,看到了有一门新课叫做“信息学奥赛”。当时有人对我说,学了“信息学奥赛”可能对数学竞赛也有帮助,于是我就被忽悠进了OI,在小学五年级。 那时,我拥有了我的第一任电脑,一台联想家用“影音娱乐本”,就是中低配啥都不全能的意思。我淘了一本古老的QuickBASIC教材影印版,利用光盘装好了那个长得像DOS的丑陋的环境,跟着教材一句一句敲了代码,运行起来做实验,和教材对比看“对不对”。那时候完全没有编程的意识和概念,基本是基于模仿学习——甚至在一开始我以为“累加器

计算机网络 第五章:传输层

元气小坏坏 提交于 2020-02-26 11:58:53
第五章 传输层 ->传输层协议UDP和TCP ->网络安全 ->TCP可靠传输的实现 ->TCP的流量控制 ->TCP的拥塞控制 ->TCP的运输连接管理 5.1 OSI和DoD模型 下图必须背下来。尤其是传输层和网络层的协议。 传输层最大数据包是65535字节,而网络层数据最大只有1480字节。所以需要分段,但是只要分段,就有可能丢包,因为网络层不负责可靠传输。所以要求服务器和客户端保持会话,直到数据传输完成。 ->TCP(Transmission Control Protocol)传输控制协议 应用场景:需要将要传输的文件分段传输时;就需要TCP协议来建立会话实现可靠传输;同时也有流量控制功能。(例如QQ传文件) 查看会话 netstat -n 查看建立会话的进程 netstat -nb ->UDP(User Data Protocol)用户数据报协议 应用场景:一个数据包就能完成数据通信;不需要建立会话和流量控制;多播/广播;是一种不可靠传输。(例如QQ聊天,屏幕广播) 5.2 传输层协议和应用层协议的关系 (1)TCP和UDP协议和不同的端口即可对应一个应用层的协议。注意,53大部分是与UDP相连。 (2)熟知数值一般为0-1023,登记端口号数值1024-49151,客户端口号数值为49152-65535. (3)常用的应用层协议使用的端口(号): http = TCP

程序员内功修炼(四)计算机网络之网络层

元气小坏坏 提交于 2020-02-26 01:27:21
1、网络层功能 2、路由算法与路由协议 3、IP数据报格式 4、IP数据报分片 5、IPV4地址 6、网络地址转换NAT 7、子网划分与子网掩码 8、无分类编址CIDR(构成超网) 9、ARP协议 10、DHCP协议 11、ICMP协议 12、IPV6 13、RIP协议与距离向量算法 14、OSPF协议及链路状态算法 15、BGP协议 16、IP组播 17、移动IP 18、网络层设备 本文参考 https://www.bilibili.com/video/av70228743 来源: oschina 链接: https://my.oschina.net/u/4451096/blog/3166059

准备2020实习工作的准备

只愿长相守 提交于 2020-02-05 08:11:26
今天是回到家的第二天,也是开始我闭关学习的第一天,我认为努力才会和可能有结果,我的学姐这样和我讲,在2020你秋招中要学会以下五点: **一、数据结构和算法 二、一门编程语言 三、计算机网络 四、操作系统 五、数据库** 在这个寒假的44天里要复习数据结构和算法,学习java,学习计算机网络,Linux操作系统,数据库系统概论。 希望通过自己的努力改变自己,成为自己喜欢的人。最后附上一句我特别喜欢的话:**世上没有白走的路,每一步都算数!** 来源: CSDN 作者: weixin_45948372 链接: https://blog.csdn.net/weixin_45948372/article/details/103988636

浅析求素数算法

那年仲夏 提交于 2020-02-01 04:09:26
浅析求素数算法 转载: http://www.linuxsir.org/bbs/showthread.php?t=278294 注意: 如果没有特殊说明, 以下讨论的都是针对n为素数时的时间复杂度 1. 根据概念判断: 如果一个正整数只有两个因子, 1和p,则称p为素数. 代码: 1 bool isPrime(int n)2 {3 if(n < 2) return false;4 for(int i = 2; i < n; ++i)5 if(n%i == 0) return false;6 return true;7 } 时间复杂度O(n). 2. 改进, 去掉偶数的判断 代码: bool isPrime(int n) { if(n < 2) return false; if(n == 2) return true; for(int i = 3; i < n; i += 2) if(n%i == 0) return false; return true;} 时间复杂度O(n/2), 速度提高一倍. 3. 进一步减少判断的范围 定理: 如果n不是素数, 则n有满足1<d<=sqrt(n)的一个因子d. 证明: 如果n不是素数, 则由定义n有一个因子d满足1<d<n. 如果d大于sqrt(n), 则n/d是满足1<n/d<=sqrt(n)的一个因子. 代码: bool isPrime