对象存储

day24_Stream流、方法引用

南楼画角 提交于 2020-02-11 22:28:07
Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定“流”就一定是“IO流”呢? 在Java 8中 ,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念, 用于解决已有集合类库既有的弊端。 由来 传统集合的多步遍历代码 几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作。而当我们需要对集合中的元素进行操作的时候,除了必需的添加、删除、获取外,最典型的就是集合遍历。例如: package demo01; import java.util.ArrayList; import java.util.List; public class Demo01ForEach { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("张无忌"); list.add("周芷若"); list.add("赵敏"); list.add("张强"); list.add("张三丰"); for (String name : list) { System.out.println(name); } } } 这是一段非常简单的集合遍历操作:对集合中的每一个字符串都进行打印输出操作。 循环遍历的弊端 Java

理解numpy中ndarray的内存布局和设计哲学

核能气质少年 提交于 2020-02-10 22:31:51
目录 ndarray是什么 ndarray的设计哲学 ndarray的内存布局 为什么可以这样设计 小结 参考 博客: 博客园 | CSDN | blog 本文的主要目的在于理解 numpy.ndarray 的内存结构及其背后的设计哲学。 ndarray是什么 NumPy provides an N-dimensional array type, the ndarray , which describes a collection of “items” of the same type . The items can be indexed using for example N integers. —— from https://docs.scipy.org/doc/numpy-1.17.0/reference/arrays.html ndarray是numpy中的 多维数组 ,数组中的元素具有 相同的类型 ,且可以被 索引 。 如下所示: >>> import numpy as np >>> a = np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11]]) >>> a array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> type(a) <class 'numpy.ndarray'> >

.Net 应用框架设计系列(三)

时光毁灭记忆、已成空白 提交于 2020-02-10 05:00:41
几乎每个应用程序都需要某种格式的配置信息。这些信息可以像数据库连接字符串一样简单,也可以像多部分、分层的用户首选信息一样复杂。作为一名开发人员,如何存储应用程序的配置数据以及将它们存储在何处是您经常面临的问题。典型的解决方案包含以下内容: • 使用配置文件(例如 XML 文件或 Windows .ini 文件) • 使用 Windows 注册表 • 使用诸如 Microsoft SQL Server 这样的数据库 其中每个选择都有其各自的优点和缺点;没有一种解决方案可以适合所有情况。在一个应用程序中,您可能需要采用多种方法来协调应用程序所需的不同类型的配置数据。例如,如果您的应用程序运行在不同的环境中,您可能需要支持多种配置存储解决方案。要考虑的其他重要因素包括:确保应用程序配置数据的安全性和完整性,以及将存储解决方案对应用程序性能的影响降到最低程度。 Enterprise Library Configuration Application Block 1.0 版解决了这些问题,并提供了一种可以在所有应用程序中管理配置数据的解决方案。具体地说,配置应用程序块提供了一种灵活的数据模型、一种检索配置数据的简单方法和可扩展性。 配置应用程序块将读/写配置数据的能力与基础数据存储的细节相分离。通过利用存储提供程序和转换器在应用程序和物理存储之间传输数据,可以实现这一点。存储提供程序是可以读

设计模式——迭代器模式

ⅰ亾dé卋堺 提交于 2020-02-09 20:42:02
20世纪80年代,那时我家有一台“古老的”电视机,牌子我忘了,只记得是台黑白电视机,没有遥控器,每次开关机或者换台都需要通过电视机上面的那些按钮来完成,我印象最深的是那个用来换台的按钮,需要亲自用手去旋转(还要使点劲才能拧动),每转一下就“啪”的响一声,如果没有收到任何电视频道就会出现一片让人眼花的雪花点。当然,电视机上面那两根可以前后左右移动,并能够变长变短的天线也是当年电视机的标志性部件之一,我记得小时候每次画电视机时一定要画那两根天线,要不总觉得不是电视机,。随着科技的飞速发展,越来越高级的电视机相继出现,那种古老的电视机已经很少能够看到了。与那时的电视机相比,现今的电视机给我们带来的最大便利之一就是增加了电视机遥控器,我们在进行开机、关机、换台、改变音量等操作时都无须直接操作电视机,可以通过遥控器来间接实现。我们可以将电视机看成一个存储电视频道的集合对象,通过遥控器可以对电视机中的电视频道集合进行操作,如返回上一个频道、跳转到下一个频道或者跳转至指定的频道。遥控器为我们操作电视频道带来很大的方便,用户并不需要知道这些频道到底如何存储在电视机中。电视机遥控器和电视机示意图如图1所示: 标题 在软件开发中,也存在大量类似电视机一样的类,它们可以存储多个成员对象(元素),这些类通常称为聚合类(Aggregate Classes),对应的对象称为聚合对象

设计模式 | 享元模式及典型应用

寵の児 提交于 2020-02-08 14:03:44
👨 前言 本文的主要内容: 介绍享元模式 示例-云盘 总结 源码分析享元模式的典型应用 String中的享元模式 Integer中的享元模式 Long中的享元模式 Apache Common Pool2中的享元模式 享元模式 享元模式(Flyweight Pattern) : 运用共享技术有效地支持大量细粒度对象的复用 。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式。享元模式结构较为复杂,一般结合工厂模式一起使用。 ↘️ 角色 Flyweight(抽象享元类) :通常是一个接口或抽象类,在抽象享元类中声明了具体享元类公共的方法,这些方法可以向外界提供享元对象的内部数据( 内部状态 ),同时也可以通过这些方法来设置外部数据( 外部状态 )。 ConcreteFlyweight(具体享元类) :它实现了抽象享元类,其实例称为享元对象;在具体享元类中为内部状态提供了存储空间。通常我们可以结合单例模式来设计具体享元类,为每一个具体享元类提供唯一的享元对象。 UnsharedConcreteFlyweight(非共享具体享元类) :并不是所有的抽象享元类的子类都需要被共享,不能被共享的子类可设计为非共享具体享元类

WEB端缓存机制

早过忘川 提交于 2020-02-08 13:28:51
WEB端缓存机制 什么是WEB缓存 Web缓存是指一个Web资源(如html页面,图片,js,数据等)存在于Web服务器和客户端(浏览器)之间的副本。缓存会根据进来的请求保存输出内容的副本;当下一个请求来到的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求。比较常见的就是浏览器会缓存访问过网站的网页,当再次访问这个URL地址的时候,如果网页没有更新,就不会再次下载网页,而是直接使用本地缓存的网页。只有当网站明确标识资源已经更新,浏览器才会再次下载网页 数据库数据缓存 数据库数据缓存的实质就是将频繁使用的数据从数据库(硬盘)存到内存中,而内存的读取速度远远快于直接在磁盘读取的速度。至于为什么会有明显的速度差异,浅显的理解是因为内存是电存储,硬盘存储是磁存储。电的速度远远大于磁盘(相当于磁带转动的速度)的速度。即使现在出现了固态硬盘但还仅仅只是在磁盘的基础上有所提高。 服务器端缓存 代理服务器缓存 代理服务器是浏览器和源服务器之间的中间服务器,浏览器先向这个中间服务器发起Web请求,经过处理后(比如权限验证,缓存匹配等),再将请求转发到源服务器。代理服务器缓存的运作原理跟浏览器的运作原理差不多,只是规模更大。可以把它理解为一个共享缓存,不只为一个用户服务,一般为大量用户提供服务,因此在减少相应时间和带宽使用方面很有效

java day07【Scanner类、Random类、ArrayList 类】

倾然丶 夕夏残阳落幕 提交于 2020-02-06 16:39:21
第1章 API 概述   API(Application Programming Interface),应用程序编程接口。Java API是一本程序员的 字典 ,是JDK中提供给 我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学 习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。 API使用步骤 1. 打开帮助文档。 2. 点击显示,找到索引,看到输入框。 3. 你要找谁?在输入框里输入,然后回车。 4. 看包。java.lang下的类不需要导包,其他需要。 5. 看类的解释和说明。 6. 学习构造方法。 7. 使用成员方法。 第2章 Scanner类   了解了API的使用方式,我们通过Scanner类,熟悉一下查询API,并使用类的步骤。 2.1 什么是Scanner类   一个可以解析基本类型和字符串的简单文本扫描器。 例如,以下代码使用户能够从 System.in 中读取一个数:   Scanner sc = new Scanner(System.in);    int i = sc.nextInt(); 备注:System.in 系统输入指的是通过键盘录入数据。 2.2 引用类型使用步骤 导包   使用import关键字导包,在类的所有代码之前导包,引入要使用的类型

vertica数据库权限

六眼飞鱼酱① 提交于 2020-02-06 04:28:00
创建数据库对象(例如模式,表或视图)时,将为该对象分配所有者(即执行CREATE语句的用户)。默认情况下,数据库管理员(超级用户)及对象所有者是唯一可以对对象执行任何操作的用户。 为了允许其他用户使用对象,或取消用户使用对象的权限,授权用户必须授予其他用户对该对象的权限。vertica通过GRANT/REVOKE语句授予(或撤消)权限。 Vertica在V_CATALOG.GRANTS系统表中记录数据库对象权限的信息 。 下表显示出vertica数据库针对不同对象可授予或撤销的权限类型: 权限继承 可以在三个级别上管理特权的继承: 数据库 schema 表格和视图 默认情况下,继承的特权在数据库级别启用,而在schema级别禁用。如果两个级别都启用了特权继承,则表和视图在创建时会自动继承这些特权。也可以从特定的表和视图中排除继承。 数据库继承 启用数据库继承: ALTER DATABASE [ database name ] SET disableinheritedprivileges = 0 ; 终止数据库继承: ALTER DATABASE [ database name ] SET disableinheritedprivileges = 1 ; schema继承 默认情况下,schema级别的权限继承是被禁止的。必须先启用数据库的继承,才能使用schema的继承

iOS开发之block解析

故事扮演 提交于 2020-02-05 22:04:57
1. block的本质是一个Objective-C的对象,为什么这么说? 在Objective-C中,runtime会在执行时依据对象的isa指针的指向,来度额定这个对象的类型,也能够觉得一个对象,它具有isa指针,就是一个OC对象 2. 你怎么知道block有isa指针呢,我们能够通过clang命令将来看block的实现 //測试代码 int main(int argc, const char * argv[]) { @autoreleasepool { void(^blk)(void)=^{ NSLog(@"hello lx"); }; } return 0; } 转化后:block语法被编译器转化成了以下的结构 struct __main_block_impl_0 { struct __block_impl impl;//block实现的相关信息 struct __main_block_desc_0* Desc;//block的描写叙述信息 __main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags=0) { impl.isa = &_NSConcreteStackBlock; impl.Flags = flags; impl.FuncPtr = fp; Desc = desc; } };

Cracking Digital VLSI Verification Interview 第三章

大憨熊 提交于 2020-02-05 21:49:51
目录 Programming Basics Basic Programming Concepts Object Oriented Programming Concepts UNIX/Linux Programming in C/C++ Programming in PERL Programming Basics Basic Programming Concepts [68] 在任何一种编程语言中,静态(static)变量和自动(automatic)变量,局部(local)变量和全局(global)变量之间有什么区别? 区分这些名词需要两个概念,作用域(scope)和存储持续时间(storage duration),前者定义了在何处可以访问变量,后者定义了在何时可以访问变量。 按照变量的作用域可以区分局部(local)和全局(global)变量。局部变量的作用范围有限,尽在声明它们的代码块中可见。而全局变量在声明后在程序的任何位置都可见。 存储持续时间可以区分自动(automatic)变量和静态(static)变量。静态变量的生命周其一直持续到程序结束,因此可以始终访问。自动变量具有有限的生命周期,只能持续到程序离开定义的块或者作用域为止。 例如:在以下的systemverilog代码中,global_int被声明为类成员,并且在整个类中具有全局作用域,而当取消引用该类的对象时