1970年代发展迅速的十年,BASIC和C高级编程语言在这十年中被广泛采用,大规模集成芯片(LSI)、ASIC等也被广泛应用到电子游戏中,同时经典游戏《吃豆人》和《星际迷航》也在这个时期诞生的,接下来让我们看看这十年的电子游戏和...1970年代 大型电脑游戏 ? Will Crowther 1976 年的游戏Colossal Cave Adventure的屏幕说明。...然而,到了70年代末,情况发生了巨大变化。...虽然1970年代的大型机比当时的街机和控制台硬件更强大,但通过分时将计算资源分配给几十个同时使用的用户的需要大大限制了他们的能力。...首款掌上液晶游戏机 加上廉价的微处理器,手持电子游戏为 1970 年代后期最早的手持视频游戏系统铺平了道路。
懵懂的记得从前有个叫委托的东西是那么的高深难懂。 委托的使用 例一: ? 什么是委托? 个人理解:用来传递方法的类型。...(用来传递数字的类型有int、float、double,用来传递方法的就有委托) 例二: ? 又经过了很久很久... 匿名方法 很多时候委托接收的方法是一次性的或者方法体是非常简单的......细心的朋友可能看到了,Func相对于AddDelegate多定义了一个int。多出了的那个是指的是返回类型。我们F12看对应的定义: ?...C#4中的Action和Func有16个参数,足够你用了。 我们等了又等,又过了好久好久... Lambda的诞生 ? 我XX,这TM就是亲兄弟啊。...关于第2点,我们使用扩展方法的链式编程来解决。 如:(用链式来解决第二点) ? 从此,我们过上了幸福的生活... 借《深入理解C#》中的一图: ?
接口的诞生 接口其实就是一种标准一种规范。 先从生活中的例子讲起,理解含义和概念后,再去理解程序会更容易理解一些。...生活中的例子讲完,我们来延申到程序。 每项技术的产生,肯定是有其原因的。理解了技术的诞生经过,一般也就理解了技术本身。 那接口是如何诞生的呢?...这时候我们就可以将,父类的方法抽象出来,抽象类就这么诞生了,这里的抽象类其实已经有了标准和规范的意思,抽象方法就可以理解为一个对外的标准,子类就是这些标准的实现方,然后我们会发现,抽象类还不算彻底的抽象...在接口诞生中说过,这种类是没有必要创建实例对象的,所以第二个相同点就是不能创建本类对象,只能由子类去实例化子类对象。...在接口的诞生我们说过,抽象类更进一步地抽象后就诞生了接口,接口比抽象类更纯粹,因为它没有成员属性,只有方法,子类实现接口后,唯一能做的就是重写方法,不像抽象类,子类继承抽象类后,连带父类的成员属性一起继承了
这里向大家推荐一篇文章,本文转载自「码农翻身」的「JDBC的诞生」 网络访问 随着 Oracle, Sybase, SQL Server, DB2, Mysql 等人陆陆续续住进数据库村,这里呈现出一片兴旺发达的景象...外部的花花世界一下全部打开,很多程序开始离开这个拥挤的城镇,住到更加宜居的地方去。 可是他们的工作还是要读写数据库, 大家都在想办法能不能通过网络来访问数据库镇的数据库。...更让人恶心的是,每套代码都得处理非常多的协议细节,每个使用Java进行数据库访问的程序都在喋喋不休的抱怨:我就想通过网络给数据库发送SQL语句,怎么搞的这么麻烦?...SQL返回的结果也得有个抽象的概念:ResultSet。 他们之间的关系如图所示: ?...无论是任何数据库,只要正确实现了 Driver,Connection 等接口,就可以轻松的纳入到JDBC框架下了。 Java终于可以高兴的宣布: “JDBC正式诞生了!”
这一篇大致说一下进程的创建,有兴趣的可以参考之前的一些文章或者直接上代码https://github.com/theanarkh/read-linux-0.11。 系统有一个GDT表。...该表保存了系统和所有进程的tss和ldt描述符信息。tss就是我们平时说的进程上下文。每个进程有一个ldt数组,里面保存了代码段和数据段的描述符信息。 首先,从一个进程的诞生说起。...下面我们来看一下fork的过程都做了什么事情。先通过find_empty_process获取一个可用的进程id和pcb。pid是进程id。pcb是管理进程的结构体。...在这里插入图片描述 进程创建的本质就是申请一个新的pcb,里面保存了该进程的相关信息,假设现在轮到该进程执行。系统会根据tss选择子到gdt表中找到tss结构体的地址。...cs寄存器里存的是代码段的选择子。是0x17。即ldt的第二项,和数据段一样。从ldt第二项中找出基地址和限长。基地址+ip得到线性地址的值。然后再根据页目录和页表就能得到物理值。
在科技界的浩瀚星空中,有那么一颗星星,它以一种近乎“恶作剧”的方式,悄然点亮了整个世界——这就是Linux的诞生故事,一场由Linus Torvalds这位“代码界的魔术师”亲手策划的“惊天一敲”。...Linus没有选择抱怨或等待,他拿起键盘,就像是一位勇敢的探险家,踏入了未知的编程领域。他心中只有一个念头:“我要创造一个更好的操作系统!”于是,Linux内核的雏形,就在这一连串的敲击声中诞生了。...Linux内核的“首秀”:一场低调而华丽的盛宴当Linus完成了他的杰作,并决定将它公之于众时,他或许并没有意识到,自己即将成为科技史上的一个重要人物。...他们被Linux的开源、免费和高效所吸引,纷纷加入到这个项目中来,共同为Linux添砖加瓦。很快,Linux就不再是Linus一个人的作品,而是成为了全球开发者共同的心血结晶。...Linux内核以其卓越的性能和无限的潜力,赢得了无数人的青睐。它就像是一位初出茅庐的明星,一出场就光芒四射,让人无法忽视。
Lucene 的诞生 故事发生于 1997 年的某个下午,Doug Cutting 在电脑上敲下 Lucene 第一个版本的代码。 Apache Lucene 是一款搜索引擎,可以理解为百度。...Cutting 开始了新的工作,也就是给互联网上的网页增加索引,华盛顿大学的研究生 Mike Cafarella 也加入了他的工作。...这个新系统的主要目的是抽象集群的存储,使其呈现为一个可靠的文件系统,从而向用户隐藏所有操作的复杂性。...与以前的分布式编程模型相比,这证明了 API 的优雅程度。 MapReduce 的贡献的一个很核心的思路是不应该为了处理数据而被迫移动数据。相反,应该将程序发送到数据所在的位置。...Facebook 贡献了 Hive,它是基于 MapReduce 的 SQL 引擎。 2008 年,也是第一家专注于 Hadoop 的专业系统集成商诞生的一年。
”的甜品来命名。...发布会的时间只有短短的55秒,可以说比一个简单的自我介绍时间还要短。不如说是全球最短的发布会了。之所以确定为“奥利奥”,个人认为最大的攻城还是这次日全食。因为日全食的过程更像奥利奥的生产过程。 ?...1.关于通知:以前通知都是一大串的,现在我们可以设置重要通知,拦截那些无关紧要的通知信息。相当于我们的垃圾短信拦截把。...这样的好处是在一款设备上,播放影片的同时不影响其他工作。 ? 当然,这几个只是比较突出的。...,除了几个功能上的更新,Android 8.0 还加强了限制后台应用运行来提升设备的续航能力,同时还改进了蓝牙音频,并新增了 Google Play Protect 机制,定期扫描所以的应用保证设备的安全
上世纪80年代内地宣扬的“知识大爆炸”,其实也是“信息能”的体现形式之一。中国抓住了这次机会,经过三十余年的励精图治,一跃成为世界第二大经济体,未被开除“球籍”(这可是当年有识之士最担忧的问题)。...文章内容 信息超新星的诞生 文/Michael Saylor 译/邹韬 移动技术将改变商业运作的方式,它将改变整个工业以及它们所推动的经济。...然而,直到20世纪60年代商务计算机信息处理技术出现,信息革命才找到它自己的“蒸汽机”。 image.png 每一次新的计算技术浪潮都带来提高生产率的新应用。...我们正在见证一颗超新星的诞生。移动计算技术有潜力让这个数据量变得更大。 在网络革命之前,即使最出色的商务数据库也只能跟踪购买交易。...我们需要一个无所不在的传送装置。20世纪90年代出现的台式电脑的网络浏览界面是最常见和应用最广泛的界面,于是它成为大规模应用软件所采纳的最主要的界面。
前言 最近家里宽带申请到了公网IP,并且上传可以在短暂时间内超过80Mpbs(10秒)(稳定50Mpbs),下载为200Mpbs,准备开启私有云,着手搭建自己的NAS,这里也分享点经验和踩坑。...我ssh的时候改密码会出现权限BUG,无法更改,这里我后来用3寸显示屏看树莓派连接键盘改密的,不知道这不是软件问题 环境搭建 建议下载宝塔,这是最简单最可视化的一种方案 https://bt.cn 选择...bt合适的版本,用root运行脚本,第一次可能会失败,安装提示配置安装一些基本的软件包就行了 安装过程我大概花了5~10分钟,挺慢的,树莓派单核编译能力即使是4B也是很差。...可道云部署 https://kodcloud.com/ 这里用这个私有云程序进行演示,当然你也可以用owncloud或他们团队做的另一个nextcloud,也可用其他的 下载源码 宝塔官方已经支持一键部署可道云了...(未写完) 我的公网私有云地址 https://fnas.cc:1334
以查找为例:在数组实现的查找表中,需要用二分等查找方式进行一系列的比较后,才能找到给定的键值对的位置。而二叉树的实现中也存在着一个向左右子树递归查找的过程。...相比起哈希表,其他的查找表中并没有特定的“键”和“键的位置”之间的对应关系。所以需要在键的查找上付出较大的开销。...及时调整数组大小的必要性 1. 在拉链法实现的哈希表中,因为链表的存在,可以弹性地容纳键值对,而对于线性探测法实现的哈希表,其容纳键值对的数量是直接受到数组大小的限制的。...这种方式不易产生键簇聚集的现象, 但会增加计算的时间 什么是好的哈希函数 在介绍完了解决冲突的方式后,我们再回过头来看什么是“好”的哈希函数, 一个“好”的哈希函数应该是均匀的, 即对于键的集合中的任意一个键...,映射到哈希值集合中的的任意一个值的概率是相等的。
docker的诞生 Docker 公司起初是一家名为 dotCloud 的平台即服务(Platform-as-a-Service, PaaS)提供商。...底层技术上,dotCloud 平台利用了 Linux 容器技术。为了方便创建和管理这些容器,dotCloud 开发了一套内部工具,之后被命名为“Docker”。Docker 就是这样诞生的!...Linux包依赖问题 解决了传统开发,部署模式的问题,给DevOps带来了落地的实现方案 解决了传统虚拟机过于浪费资源的问题 更便捷的升级和扩缩容 物理机,虚拟机,容器 下图,简单描述了物理机,虚拟机,...我们常见的有VMware vSphere、微软Hyper-V,开源的KVM、Xen等。 而容器相对于虚拟机而言,就轻量得多。它通过Linux内核虚拟化的能力来管理多个容器。...不像虚拟机,需要额外的资源来支持多个操作系统的运行。
一、起源与创始团队 Go语言(也称为Golang)的诞生可以追溯到2007年,由谷歌的三位资深工程师——罗伯特·格里斯莫(Robert Griesemer)、罗布·派克(Rob Pike)和肯·汤普逊(...肯·汤普逊:Unix操作系统的共同创始人,同时也是C语言的共同发明人之一。 二、为什么需要Go语言? 在Go语言诞生之前,谷歌主要使用C++和Java进行系统编程和后端服务开发。...部署的简化:Go语言编译生成的单一二进制文件,简化了应用程序的部署过程,不需要复杂的依赖管理。...Google Invented Go 通过这些信息,希望大家对Go语言的诞生背景和设计理念有了更深的了解。...这种现代化的编程语言在当今的软件开发中扮演着越来越重要的角色。
一、概念Bug,指软件中的缺陷,它可能会引发软件失效。二、bug由来Bug一词的原意是“昆虫”或“虫子”;而在电脑系统或程序中隐藏着的一些未被发现的缺陷或问题,人们也叫它“bug”。...而代表电脑程序出错的“bug” 这名字,正是由赫柏所取的。1945年9月9日,下午三点。哈珀中尉正领着她的小组构造一个称为“马克二型”的计算机。...这还不是一个完全的电子计算机,它使用了大量的继电器,一种电子机械装置。第二次世界大战还没有结束。哈珀的小组日以继夜地工作。机房是一间第一次世界大战时建造的老建筑。...:不影响产品的运行、不会成为故障的起因、但对产品外观和下道工序影响较大的缺陷1、次要功能不能正常实现2、操作界面错误(包括数据窗口内列名的定义,含义不一致)例如:列名与列名下的内容不一致3、查询错误、数据错误显示...等等,这个直接关系到个人利益和前途,另外测试的存在也是为了让程序没有bug,作为开发的我们更应该和测试配合打造更好的产品。
昨天,众多开发者聚集在28年前的Linux“诞生贴”下面,向Linux之父Linus Torwalds致谢,这个1991年的帖子下,全是满满的温暖与感激。 Linux 28岁了!...今天回过头来看,这些特征描述和后来的Linux很不一样,很多在当时认为肯定做不到的事情,Linux不仅后来一一实现,而且完成的很出色。...今天看来,这些论断最后都被Linux后来突飞猛进的现实“打了脸”。...这种矛盾曾经在去年Linux维护者大会上集中爆发,导致他从Linux社区暂时休假,并公开为自己的言论道歉。...不过,因暴脾气离开社群也好,自省后回归也罢,Linus Torwalds作为Linux之父的地位仍然是不可动摇的,他对于社区建设和Linux内核维护更新的巨大贡献更是有目共睹。
这样效率太低了,如果一条线路给你们占用了,别人要经过这条线的是不是得一直等着? Linux:说的有道理,那你有什么好主意?...Linux:你的问题怎么这么多,快说! Windows:帝国之内有许多的公司都需要经贸合作,如何能进一步区分是哪家公司的信息呢?...Windows:这恐怕不太现实,帝国的公司经常在变化,每天诞生消亡不计其数,还有些公司根本不做国际化贸易,不需要网络通信,这种办法不好操作。...Linux:这,,, Unix:今天时间也不早了,要不明天继续讨论这个议题如何,今天的收获已经不少了。 Linux:好的,我回去再琢磨琢磨。 ☆ 第二天 ☆ Unix:两位昨晚休息的如何?...帝国内部再给自己的公司编个码,既然你说到公司会不断消亡和诞生,那这个号码就动态生成。
存活区(Survivor) Survivor的存在意义,就是减少被送到老年代的对象,进而减少Full GC的发生。...如果 Survivor的空间不足或经历16次Minor GC还能在新生代中存活的对象会通过分配担保机制被送入老年代。 老年代负责分配担保让Survivor无法容纳的对象直接进入老年代。...如果剩余空间小于转移对象大小,将直接进行 FullGc 进入老年代的对象 大对象会直接进入老年代(避免频繁复制) 在程序中长期持有了对象的引用(对象年龄达到指定阈值也会进入老年代) survivor 区太小...,只能进入老年代 FullGC 执行 Minor GC(年轻代GC) 的时候,JVM 会检查老年代中最大连续可用空间是否大于了当前新生代所有对象的总大小 如果大于,则直接执行 Minor GC(年轻代GC...年轻代=eden+2survivor 年轻代和老年代的最优比例为1:2。
JVM在程序运行过程当中,会创建大量的对象,这些对象,大部分是短周期的对象,小部分是长周期的对象,对于短周期的对象,需要频繁地进行垃圾回收以保证无用对象尽早被释放掉,对于长周期对象,则不需要频率垃圾回收以确保无谓地垃圾扫描检测...年轻代的垃圾回收算法使用的是复制算法,复制算法的基本思想就是将内存分为两块,每次只用其中一块,当这一块内存用完,就将还活着的对象复制到另外一块上面。复制算法不会产生内存碎片。 ?...-XX:InitialTenuringThreshol和-XX:MaxTenuringThreshold 用于设置晋升到老年代的对象年龄的最小值和最大值,每个对象在坚持过一次Minor GC之后,年龄就加...heap区又分:Eden Space(伊甸园)、Survivor Space(幸存者区)、Tenured Gen(老年代-养老区)。...GC会逐一问清楚每个对象的情况,有没有钱(此对象的引用)啊,因为GC想赚钱呀,有钱的才可以敲诈嘛。然后富人就会进入Survivor Space(幸存者区),穷人的就直接kill掉。
顾名思义,这个组件肯定是用来管理Activity的服务,其实不仅是Activity,它还负责四大组件相关的启动,切换,调度等等。 具体是怎么被启动的,又是怎么进行管理的呢?一起看看吧。...(代码基于Android9.0) 服务的启动 之前在SystemServer章节说过,系统的服务一般都是通过SystemServer进程启动的,AMS也不例外。...然后我们要使用相关服务的方法的时候,就通过Servermanager拿到对应服务的引用。...因为这些服务,包括我们今天说的AMS都是在SystemServer进程中的,而我们实际用到的时候是在我们自己的应用进程中,所以就涉及到进程间通信了,这里是用的Binder机制进行通信。...还有一些特殊状态的Activity对应的ActivityRecord,比如正在暂停的Activity,上一个暂停过的Activity。
领取专属 10元无门槛券
手把手带您无忧上云