Ritchie

再现神人!仅仅只花4天半就解开了史上最难密码,这下整个圈子都炸开了.........

浪尽此生 提交于 2020-09-28 18:11:14
全世界只有 3.14 % 的人关注了 爆炸吧知识 鲁迅先生曾说, 记录这东西,就是用来打破的。 前阵子程序员圈子一定热呼的不可开交,咋回事?还不是因为有个程序员妹子 捅出了一个大篓子 。 事情是这样的,在德国慕尼黑有一个名叫 Leah Neukirchen 的程序员妹子,她厌倦了日复一复的解决小儿科程序代码。 直到 2015 年的一天,闲来无事的 Leah 在 BSD3 源码树的文件转储中发现了一个 /etc/passwd 文件,其中包含了计算机领域中一些传奇工程师的旧密码,令人惊讶的是, 这些密码竟然已经存放了39年之久。 Leah找到的部分旧密码名单 Leah 对他们使用的密码非常感兴趣,加上此刻鲁迅先生的名言在她耳边萦绕不散。她相信,再古老的密码都会有被破译的一天。 因此,Leah 展开了一段 暴力 破解密码之旅 。 计算机大师用的都是些小儿科密码? 她这一破就是破了5年,您别说,大部分密码还真就都被她破解了。 但其实在大多数情况下, leah的成功是因为用户的密码比较容易猜到 。 毕竟大部分计算机大师以前使用的密码保护程序是 Unix 早期的版本——BSD,这是一个古老的操作系统,因此从今天的密码保护标准来衡量,它们的安全保障措施确实不敢恭维。 首先, 保护密码的哈希函数虽然在40年前是最先进的技术,但现在要破解它并不难 。更奇怪的是

MIT 6.828

谁说胖子不能爱 提交于 2020-08-17 04:07:58
目录 实验总结 0. 实验准备 1. sleep 2. pingpong 3. primes 4. find 5. xargs 实验总结 本次实验用时约五个小时,足证我代码能力之退化。 对于实验三中难懂的 redirect() , twd2 认为可以往 xv6 中加一个 dup2 函数,我表示同意。需要进一步研究 xv6 结构,确定如何添加。 遇到的其他问题包括: 突然间发现 gcc 不认 uint 类型了。经检查发现用户态程序需要手动 #include "kernel/types.h" ,不然会爆炸。 测试结果: $ make grade # ... lines omitted Score: 100/100 0. 实验准备 实验指导连接 上来直接: $ cd xv6-riscv-fall19 $ git checkout util 实验指导简要介绍了如何把 xv6 跑起来( make then make qemu ),如何交作业( make handin ),如何测试成绩( make grade )。 下面介绍各个子任务如何写。 1. sleep 顾名思义写一个 sleep 例程,休眠一定的 tick 数,tick 的定义是时间中断。 Hints: Look at some of the other programs in user/ to see how you can

Github即将破百万的PDF:编写高质量代码改善JAVA程序的151个建议

非 Y 不嫁゛ 提交于 2020-08-14 02:48:08
在通往"Java技术殿堂"的路上,本书将为你指点迷津!内容全部由Java编码的最佳 实践组成,从语法、程序设计和架构、工具和框架、编码风格和编程思想等五大方面,对 Java程序员遇到的各种棘手的疑难问题给出了经验性的解决方案,为Java程序员如何编写 高质量的Java代码提出了151条极为宝贵的建议。对于每一个问题,不仅以建议的方式从 正反两面蛤出了被实践证明为十分优秀的解决方案和非常精糕的解决方案,而且还分析了 问题产生的根源,犹如醍醐灌顶,让人豁然开朗。 全书-共12章,第1~ 3章针对Java语法本身提出了51条建议,例如覆写变长方法 时应该注意哪些事项、final 修饰的常量不要在运行期修改、匿名类的构造函数特殊在什么 地方等:第4~9章重点针对JDK API的使用提出了80条建议,例如字符串的拼接方法该 如何选择、枚举使用时有哪些注意事项、出现NullPointerException该如何处理、泛型的多 重界限该如何使用、多线程编程如何预防死锁,等等r第10~ 12章针对程序性能、开源 的工具和框架、编码风格和编程思想等方面提出了20条建议。 希望本文能让你少走一些弯路 您是否曾经为了提供一个"One Line"的解决方案而彻夜地查看源代码?现在您不用了。 您是否曾经为了理解某个算法而冥思苦想、阅览群书?现在您不用了。 您是否曾经为了提升0

世界上著名的操作系统是用什么语言编写的?

╄→гoц情女王★ 提交于 2020-08-13 06:44:21
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! Unix 与 C 语言的关系 在服务器领域,最著名的系统莫过于Unix了,即便Linux也是类Unix的操作系统。Unix 是用 C 语言编写的,而且是世界上第一个用 C 语言编写的操作系统。但是 Unix 是怎么产生的?C 语言又是怎么产生的?Unix 为什么要用 C 语言来编写?相信看完这篇文章你很快就会有了答案。 Multics 和 Unix 1964年,在 Unix 诞生之前,美国贝尔实验室、通用电气、和麻省理工学院联合开发了一个项目,叫做 Multics操作系统。Multics 在当时取得了巨大的成功,因为它给了人们一个真正可用并且很稳定的操作系统。当时从学校到政府机关,到处都在安装 Multics。 但是时间到了 1969年,因为种种原因,贝尔实验室的 Ken Thompson 和 Dennis Ritchie 决定放弃Multics,于是贝尔实验室退出了这个项目。Ken Thompson 和 Dennis Ritchie 决定开发一个更为简单并且高效的操作系统,并把它命名为 Unix,于是他们俩就成为了 Unix 之父。 和 Unix 相比,Multics 有两个比较致命的缺点,一是需要安装在非常昂贵的机器上,普通的计算机没有办法安装。二是设计非常复杂

MIT 6.828

点点圈 提交于 2020-08-13 06:42:49
目录 实验总结 0. 实验准备 1. sleep 2. pingpong 3. primes 4. find 5. xargs 实验总结 本次实验用时约五个小时,足证我代码能力之退化。 对于实验三中难懂的 redirect() , twd2 认为可以往 xv6 中加一个 dup2 函数,我表示同意。需要进一步研究 xv6 结构,确定如何添加。 遇到的其他问题包括: 突然间发现 gcc 不认 uint 类型了。经检查发现用户态程序需要手动 #include "kernel/types.h" ,不然会爆炸。 测试结果: $ make grade # ... lines omitted Score: 100/100 0. 实验准备 实验指导连接 上来直接: $ cd xv6-riscv-fall19 $ git checkout util 实验指导简要介绍了如何把 xv6 跑起来( make then make qemu ),如何交作业( make handin ),如何测试成绩( make grade )。 下面介绍各个子任务如何写。 1. sleep 顾名思义写一个 sleep 例程,休眠一定的 tick 数,tick 的定义是时间中断。 Hints: Look at some of the other programs in user/ to see how you can

Google 出品的 Java 编码规范,强烈推荐,既权威又科学

六眼飞鱼酱① 提交于 2020-08-10 02:03:56
这份文档是 Google Java 编程风格规范的完整定义。当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格。原文:google.github.io/styleguide/javaguide.html 译者:Hawstein 来源:hawstein.com/2014/01/20/google-java-style/ 与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准。然而,这份文档主要侧重于我们所普遍遵循的规则, 对于那些不是明确强制要求的,我们尽量避免提供意见。 在逆锋起笔微信公众号后台回复关键字:规范,可获取高清 PDF 版的下载地址《Google Java编程风格指南/规范》 如果你想获取阿里巴巴最新的《Java开发手册》,请关注逆锋起笔微信公众号,在后台回复关键字:java手册,既可获取。 1.1 术语说明 在本文档中,除非另有说明: 1、术语class可表示一个普通类,枚举类,接口或是annotation类型( @interface) 2、术语comment只用来指代实现的注释(implementation comments),我们不使用“documentation comments”一词,而是用Javadoc。 其他的术语说明会偶尔在后面的文档出现。 1.2 指南说明

C语言探索之旅 | 第二部分第八课:动态分配

半世苍凉 提交于 2020-08-06 13:53:13
>作者 谢恩铭,公众号「程序员联盟」(微信号:coderhub)。 转载请注明出处。 原文: https://www.jianshu.com/p/bbce8f04faf1 > 《C语言探索之旅》 全系列 内容简介 前言 变量的大小 内存的动态分配 动态分配一个数组 总结 第二部分第九课预告 1. 前言 上一课是 C语言探索之旅 | 第二部分第七课:文件读写 。 经历了第二部分的一些难点课程,我们终于来到了这一课,一个听起来有点酷酷的名字: 动态分配 。 >“万水千山总是情,分配也由系统定”。 到目前为止,我们创建的变量都是系统的编译器为我们自动构建的,这是简单的方式。 其实还有一种更偏手动的创建变量的方式,我们称为“动态分配”(Dynamic Allocation)。dynamic 表示“动态的”,allocation 表示“分配”。 动态分配的一个主要好处就是可以在内存中“预置”一定空间大小,在编译时还不知道到底会用多少。 使用这个技术,我们可以创建大小可变的数组。到目前为止我们所创建的数组都是大小固定不可变的。而学完这一课后我们就会创建所谓“动态数组”了。 学习这一章需要对指针有一定了解,如果指针的概念你还没掌握好,可以回去复习 C语言探索之旅 | 第二部分第二课:进击的指针,C语言的王牌! 那一课。 我们知道当我们创建一个变量时,在内存中要为其分配一定大小的空间。例如:

计算机界10位顶尖人物,看看谁是你的偶像

无人久伴 提交于 2020-07-27 10:09:24
今天主要想和大家一起来了解一下计算机界那些为开源做出巨大贡献大佬们! 吃水不忘挖井人,我们每天用着别人写的开源操作系统、编程语言、工具、应用框架,是时候该好好感谢和致敬一波大佬们了! 林纳斯·托瓦兹 英文名:Linus Torvalds 主要开源贡献:Linus Torvalds发明了 Linux 操作系统,是Linux内核的缔造者,这也是当今全球最流行的操作系统之一。除此之外,Linus Torvalds 本人同样也是Git的缔造者,Git可以说是目前世界上最牛批的分布式版本控制系统(没有之一)! 吉多·范罗苏姆 英文名:Guido van Rossum 主要开源贡献: Guido van Rossum是一位荷兰籍程序员,1982年在阿姆斯特丹大学获得数学和计算机科学硕士学位。他是Python编程语言的创建者,被称为Python之父!2005年12月,吉多·范罗苏姆加入Google,在那里他把一半的时间用来维护 Python 的开发。 肯·汤普逊 英文名:Ken Thompson 主要开源贡献: Ken Thompson在贝尔实验室工作期间设计并实现了Unix操作系统,同时他也是B编程语言和UTF-8编码的创造者(UTF-8编码使计算机能够以多种语言显示和交换数据),而且他也与下文要讲的丹尼斯·里奇共同设计了C语言,同时他也是编程语言Go的共同作者,肯

Go语言学习札记-Day01

烈酒焚心 提交于 2020-04-26 19:27:15
编程语言发展历程 一、B语言 Ken Thompson(肯.汤普森) 1969年 该语言得名于汤姆森的妻子Bonnie。 二、C语言 Dennis Ritchie(丹尼斯·里奇)。1969-1973年期间发明了C语言和Unix操作系统。 三、C++语言 Bjarne Stroustrup(本贾尼·斯特劳斯特卢普)于1982年在C语言的基础上引入并扩充了面向对象的概念。 四、Python语言 Guido van Rossum(吉多.范.罗苏姆)在1989年,为了打发圣诞节假期,Guido开始写Python语言的编译/解释器。1994年发布1.0版本。1995年9月发布了Python3.5版。 五、Java语言 James Gosling(詹姆斯.高斯林)。1991年开发Oak,1994年更名为Java。1995年5月正式发布。 五、Go语言 Robert Griesemer, Rob Pike, Ken Thompson在2007年末由主持开发于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。 GO上手体验 安装过程移步:https://www.runoob.com/go/go-environment.html 一、项目结构 1.1 gopath目录 存储源代码。该目录下往往要有3个子目录:src,bin,pkg src ---- 里面每一个子目录,就是一个包

程序设计语言发展史

点点圈 提交于 2020-04-13 09:11:34
【今日推荐】:为什么一到面试就懵逼!>>> 目录 文章目录 目录 程序设计语言发展史 程序设计语言发展史 1950 年代末期,大量新的计算机编程语言涌现,而这些新语言大都围绕单个体系结构,如 UNIVAC 计算机、IBM700 系列计算机等进行开发,这种情况使得不同系统间的用户交流变得困难。美国一些主要的计算机用户组建议研究与开发适用于与计算机硬件设备无关的科学用程序设计语言。1958 年 5 月 27 日至 6 月 1 日,德国的应用数学和力学学会(Gesellschaft für Angewandte Mathematik und Mechanik,GAMM)和 ACM 派人出席在苏黎世举行第一次设计会议,为新语言定下目标。新语言先被命名为国际代数语言(International Algebraic Language,IAL),后定名为 ALGOL,即算法语言(ALGOrithmic Language)的简称。后来改称 Algol 58,成为 ALGOL 家族的第一个成员。 在高级编程语言的进化历史中,最重要的里程碑就是 ALGOL 的推出。ALGOL 是在计算机发展史上首个清晰定义的高级语言,国际计算机学会(Association for Computing Machinery,ACM)将 ALGOL 模式列为算法描述的标准,启发了 ALGOL 家族的 Pascal、Ada