懵懂的记得从前有个叫委托的东西是那么的高深难懂。 委托的使用 例一: ? 什么是委托? 个人理解:用来传递方法的类型。...(用来传递数字的类型有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 机制,定期扫描所以的应用保证设备的安全
目前热炒的“大数据”概念,其实也是“信息能”的体现之一,众多的中国公司都在此领域挖掘和耕耘,相信在不久的未来,我们的生活方式会有令人惊喜的变化。...文章内容 信息超新星的诞生 文/Michael Saylor 译/邹韬 移动技术将改变商业运作的方式,它将改变整个工业以及它们所推动的经济。...例如,某一年的总小麦产量是有价值的信息,但是10年来总小麦产量的信息,再加上10年来的降雨资料,以及10年来的施肥情况,这是30倍的信息水滴,但是它有可能蕴含了100倍的信息能量,因为它所呈现的趋势和相关效应会带来更多的决策...我们正在见证一颗超新星的诞生。移动计算技术有潜力让这个数据量变得更大。 在网络革命之前,即使最出色的商务数据库也只能跟踪购买交易。...我们需要一个无所不在的传送装置。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. 在拉链法实现的哈希表中,因为链表的存在,可以弹性地容纳键值对,而对于线性探测法实现的哈希表,其容纳键值对的数量是直接受到数组大小的限制的。...这种方式不易产生键簇聚集的现象, 但会增加计算的时间 什么是好的哈希函数 在介绍完了解决冲突的方式后,我们再回过头来看什么是“好”的哈希函数, 一个“好”的哈希函数应该是均匀的, 即对于键的集合中的任意一个键...,映射到哈希值集合中的的任意一个值的概率是相等的。
昨天,众多开发者聚集在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:两位昨晚休息的如何?...帝国内部再给自己的公司编个码,既然你说到公司会不断消亡和诞生,那这个号码就动态生成。
一、起源与创始团队 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,作为开发的我们更应该和测试配合打造更好的产品。
docker的诞生 Docker 公司起初是一家名为 dotCloud 的平台即服务(Platform-as-a-Service, PaaS)提供商。...底层技术上,dotCloud 平台利用了 Linux 容器技术。为了方便创建和管理这些容器,dotCloud 开发了一套内部工具,之后被命名为“Docker”。Docker 就是这样诞生的!...Linux包依赖问题 解决了传统开发,部署模式的问题,给DevOps带来了落地的实现方案 解决了传统虚拟机过于浪费资源的问题 更便捷的升级和扩缩容 物理机,虚拟机,容器 下图,简单描述了物理机,虚拟机,...我们常见的有VMware vSphere、微软Hyper-V,开源的KVM、Xen等。 而容器相对于虚拟机而言,就轻量得多。它通过Linux内核虚拟化的能力来管理多个容器。...不像虚拟机,需要额外的资源来支持多个操作系统的运行。
顾名思义,这个组件肯定是用来管理Activity的服务,其实不仅是Activity,它还负责四大组件相关的启动,切换,调度等等。 具体是怎么被启动的,又是怎么进行管理的呢?一起看看吧。...(代码基于Android9.0) 服务的启动 之前在SystemServer章节说过,系统的服务一般都是通过SystemServer进程启动的,AMS也不例外。...然后我们要使用相关服务的方法的时候,就通过Servermanager拿到对应服务的引用。...因为这些服务,包括我们今天说的AMS都是在SystemServer进程中的,而我们实际用到的时候是在我们自己的应用进程中,所以就涉及到进程间通信了,这里是用的Binder机制进行通信。...还有一些特殊状态的Activity对应的ActivityRecord,比如正在暂停的Activity,上一个暂停过的Activity。
在高通的设想中,Zeroth的终极目标就是形成标准化的新型处理架构,并且第一次提出了NPU的概念,这种芯片已经具备了AI芯片的雏形。...有了NPU之后,手机的AI性能就能得到大幅的提升。 从麒麟970的单核NPU、到最新的麒麟9000的2+1三核NPU,NPU的升级也伴着华为的AI技术的发展,最能直观体会到的就摄像功能带来的进步。...比如取景时的智能场景识别功能,可以让系统快速识别拍摄的物体和场景,并自动做出优化调教。再比如被广大消费者惊叹的“月亮模式”,以及强大的智能防抖功能,再包括最新的物体识别。...从整个市场上来看,目前AI芯片还处于算法主导到产品主导的过渡期,由于各家AI芯片的设计不同,AI方案架构方面都有不小区别,像寒武纪的“DIANNAO”、谷歌的TPU,再到华为的达芬奇架构,目前AI芯片的设计可谓百花齐放...所以,AI芯片只是提供了手机AI应用的基石,真正要挖掘出移动端AI的魅力,还需要开发者针对AI芯片的能力开发出合适的应用。
本文讲述了什么启发了 FastAPI 的诞生,它与其他替代框架的对比,以及从中汲取的经验。...Django REST Framework 是第一个自动生成 API 文档的框架,自动生成 API 的接口文档是 FastAPI 框架诞生的缘由之一。...在某个时候,Swagger 被授予 Linux Foundation,将其重命名为 OpenAPI。...Marshmallow 一个由 API 系统所需的主要功能是数据的序列化,就是把数据从编程语言中的对象转称成可以在网络上传输的对象,比如数据库中的数据转换为 JSON 对象。...这是一个伟大的工具,在 FastAPI 诞生之前,我一直在用它。 启发 FastAPI 地方: 对输入的请求数据的自动验证。 (未完待续)
作为一名正在岗位上的Android开发者,工作中常常需要我们使用自定义View去实现一些天马行空的效果,而作为一名正在寻找工作的Android开发者而言,面试过程中自定义View的相关知识点也是热门的面试题目之一哦...而对于api的灵活使用,可视为招式)。 本次我们将来探索自定义View的内功心法之自定义View的死亡三部曲:测量、布局、绘制。 在了解死亡三部曲之前,我们先从上层的视角看下死亡三部曲的执行流程。...Activity的布局文件是如何被加载的? 我们的activity中的视图是什么时候被加载的呢?...被调用,我们的资源文件不加载,但是此时还是不可见的,也就还没有进行侧脸之类的事情。...的源码: 我们继续看ViewRootImpl.setView方法的源码 setView完成的工作很多,如声明输入事件的管道,DisplayManager的注册,view的绘画,window的添加等等
领取专属 10元无门槛券
手把手带您无忧上云