当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。...很多诸如select, add, delete, modify等操作我们都使用一种特殊的URI来进行,这种URI由3个部分组成, “content://”, 代表数据的路径,和一个可选的标识数据的ID。...content://contacts/people/45 这个URI返回单个结果(联系人信息中ID为45的联系人记录) 尽管这种查询字符串格式很常见,但是它看起来还是有点令人迷惑。...(name, phoneNo)的方式来向联系人信息簿中添加联系人姓名和电话号码。...第五种: 网络存储数据 前面介绍的几种存储都是将数据存储在本地设备上,除此之外,还有一种存储(获取)数据的方式,通过网络来实现数据的存储和获取。
当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。...很多诸如select, add, delete, modify等操作我们都使用一种特殊的URI来进行,这种URI由3个部分组成, “content://”, 代表数据的路径,和一个可选的标识数据的ID。...将返回设备上的所有联系人信息 content://contacts/people/45 这个URI返回单个结果(联系人信息中ID为45的联系人记录) 尽管这种查询字符串格式很常见,但是它看起来还是有点令人迷惑...(name, phoneNo)的方式来向联系人信息簿中添加联系人姓名和电话号码。...第五种: 网络存储数据 前面介绍的几种存储都是将数据存储在本地设备上,除此之外,还有一种存储(获取)数据的方式,通过网络来实现数据的存储和获取。
例如: MyEnum 枚举内常量值名称:全大写字母,多个字母之间用 _ 连接。...Any类型 一、介绍 protobuf 中的 Any 类型提供了一组接口来帮助我们方便地序列化、反序列化以及操作不同类型的消息。...这里我们主要对 2.1 版本新增联系人的地址信息,该地址信息使用 Any 类型来存储! ...<< endl; } } // 新增内容:家庭地址和公司地址字段添加,需要使用PackFrom()来序列化存储 cout 联系人的家庭地址:";...通常我们 使用 _case 方法来获取当前设置了哪个字段,然后进行 if 判断即可! 二、通讯录升级版2.3 下面我们通过对项目的推进,演示如何使用 oneof 类型!
目标组件一般要通过Intent来声明自己的条件,一般通过组件中的元素来过滤。...Intent在寻找目标组件的时候有两种方法:第一,通过组件名称直接指定;第二,通过Intent Filter过滤指定 Intent启动不同组件的方法 组件名称 方法名称 Activity...被删除 Intent的Action和Data属性匹配 Action属性 Data属性 说明 ACTION_VIEW content://contacts/people.../1 显示id为1的联系人信息 ACTION_DIAL content://contacts/people/1 将id为1的联系人电话号码显示在拨号界面中 ACITON_VIEW tel...2,data/type,你可以用Uri 来做为data,比如Uri uri = Uri.parse(http://www.google.com); Intent i = new Intent(Intent.ACTION_VIEW
搜索引擎中的步骤 在Elasticsearch中,搜索引擎的进度基于分析器,该分析器包含三个较低级别的构建块:字符过滤器,标记器和令牌过滤器。...通过Elasticstatic文档,定义是: 甲字符过滤器接收原始文本字符的流,并且可以通过添加,移除,或改变字符变换流。...您可以手动安装和通过Docker安装。最简单的方法是使用Docker执行以下步骤: 安装Docker 请参阅此处。...要同时使用标准文档行为和Elasticsearch API,程序员需要使用Elasticsearch扩展。...Elasticsearch可以通过NoSQL文档和搜索引擎帮助Java EE世界。
联系人管理器web API是一个Asp.net web api示例程序,演示了通过ASP.NET Web API 公开联系信息,并允许您添加和删除联系人,示例地址http://code.msdn.microsoft.com...本文主要介绍OData的查询和分页支持。...OData开放数据协议是微软针对Google的GData推出的,旨在推广Web程序数据库格式标准化的开放数据协议,微软将 OData 定义为基于 HTTP、AtomPub 和 JSON 的协议,增强各种网页应用程序之间的数据兼容性...Open Data Protocal (OData) 指定查询字符串参数让 Client 能使用它去排序与过滤结果。...$filter=substringof(Name, 'Ed') eq true $orderby 指定的属性来排序结果 http://localhost:port/api/contacts?
抛开性能因素,这些操作已经严重影响了代码的整洁,这种代码也没有几个人愿意来读。 那么,有没有什么好的办法来解决这种现状呢?毕竟集合最为最常用的操作,难道Java语言的设计者没有意识到这一点吗?...中的新成员,它允许你以声明的方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现),你可以把它看成是遍历数据集的高级迭代器。...更重要的是,在复杂业务中你用不着为了让某些数据处理任务并行而去操心线程和锁了,Stream API都替你做好了!...通过上面Stream操作流水线、实例,Stream操作大体上分为两种:中间操作符和终止操作符。 1. 中间操作符 对于数据流来说,中间操作符在执行指定处理逻辑后,数据流依然可以传递给下一级的操作符。...下一篇,将会提到Stream的终极操作——Collectors,让集合也能像数据库SQL一样,来完成复杂的分组、连接、汇总等,真正让你好用到飞起来。
对于某些存储引擎,例如MyISAM甚至可以通过OPTIMIZE命令使得索引完全顺序排列,这让简单的范围查询能使用完全顺序的索引访问。...mysql5.5和更早的版本也总是会回表获取数据行,尽管并不需要这一行且最终会被过滤掉。...这是底层存储引擎API的限制。MySQL5.5和更早的版本只允许在索引中做简单的比较操作(等于、不等于及大于)。...也有办法解决上面所说的两个问题,需要重写查询并巧妙设计索引。...例如,people表中last_name字段有一个二级索引,虽然该索引的列不包括主键id,但也能够用于对id做覆盖查询: select id,last_name from people where last_name
Web SQL Database 存储机制提供了一组 API 供 Web App 创建、存储、查询数据库。 下面通过简单的例子,演示下 Web SQL Database 的使用。...Android 也提供了 API 来操作 SQLite。Web SQL Database 存储机制就是通过提供一组 API,借助浏览器的实现,将这种 Native 的功能提供给了 Web App。...一般 Value 都是通过 Key 来存取的。 IndexedDB 提供了一组 API,可以进行数据存、取以及遍历。这些 API 都是异步的,操作的结果都是在回调中返回。...File System API 提供了一组文件与文件夹的操作接口,有同步和异步两个版本,可满足不同的使用场景。下面通过一个文件创建、读、写的例子,演示下简单的功能与用法。...任何需要通过文件来管理数据,或通过文件系统进行数据管理的场景都比较适合。 到目前,Android 系统的 Webview 还不支持 File System API。
经常有同学问我,我的一个SQL语句使用了索引,为什么还是会进入到慢查询之中呢?今天我们就从这个问题开始来聊一聊索引和慢查询。...语句执行过程中有没有用到表的索引,可以通过explain一个语句的输出结果来看KEY的值不是NULL。 我们看下 explain select * from t;的KEY结果是NULL ?...我们再来看一个例子: 如果你的执行语句是 select * from t_people where name='张三' and age=8 t_people表上有一个索引是姓名和年龄的联合索引,那这个联合索引的过滤性应该不错...但是查询的过滤性和索引的过滤性可不一定是一样的,如果现在你的需求是查出所有名字的第1个字是张,并且年龄是8岁的所有小朋友,你的语句会怎么写呢? 你的语句要怎么写?...我们可以考虑把名字的第一个字和age来做一个联合索引。这里可以使用MySQL5.7引入的虚拟列来实现。
联系人列表只更新存储收发双方的最新一条消息,不存储两人所有的历史消息 消息索引表的使用场景一般用于查询收发双方的历史聊天记录,是聊天会话维度 联系人表的使用场景用于查询某一个人最近的所有联系人,是用户全局维度...联系人的对方UID为李四的UID,和这个联系人最新的一条消息ID是1001 有过聊天记录 则只需更新张三和李四的最新的一条聊天消息ID为1001,同样的办法再更新一次李四的联系人列表 2 消息收发通道...API接口,客户端需发送消息时,调用该接口把消息发给IM服务端 客户端和IM服务端维护一个TCP长连接,客户端有消息发送时,以私有协议封装这条要发送的消息,然后通过TCP长连接把消息发给IM服务端...IM服务端提供消息发送的API,发送方可通过任意方式调用到这个API,把消息发出去。...IM服务端进行完消息存储和未读变更后,会通过接收通道把消息推送给接收方,接收通道一般是通过IM服务端和消息接收方之间维护的长连接来实现,还会使用第三方操作系统级别的辅助通道,来提升“自建的长连接不可用“
据悉,这个BUG的本质是Google+ People API允许用户访问自己和朋友的个人资料数据,这无意中也允许第三方应用程序删除未被标记为公开的个人资料,包括姓名、电子邮件地址、职业和性别等。...这些年来,我们一直在加强和完善我们的权限控制和政策条款来应对定期的内部审核,用户反馈以及日益增长的对于数据隐私和安全的关注。...需要强调的是,作为我们Project Strobe审核的一部分,我们在其中一个Google+ People API中发现了一个错误: 用户可以通过API向Google+应用授予对其个人资料数据及其朋友的公开个人资料信息访问权限...这不包括你发布或连接在Google+或任何其他服务的任何其他数据,例如Google+信息,消息,Google帐户数据,电话号码或G Suite内容。 我们在2018年3月发现并立即修补了此错误。...措施 4:我们会对应用程序获取 Android 设备上通话记录和短信记录的权限做一些限制,并且不再允许通过 Android Contacts API 获取到通话交互数据。
今天我们就从这个问题开始来聊一聊索引和慢查询。 另外插入一个题外话,个人认为团队要合理的使用ORM。...语句执行过程中有没有用到表的索引,可以通过explain一个语句的输出结果来看KEY的值不是NULL。...我们再来看一个例子: 如果你的执行语句是 select * from t_people where name='张三' and age=8 t_people表上有一个索引是姓名和年龄的联合索引,那这个联合索引的过滤性应该不错...但是查询的过滤性和索引的过滤性可不一定是一样的,如果现在你的需求是查出所有名字的第1个字是张,并且年龄是8岁的所有小朋友,你的语句会怎么写呢? 你的语句要怎么写?...我们可以考虑把名字的第一个字和age来做一个联合索引。这里可以使用MySQL5.7引入的虚拟列来实现。
经常有同学问我,我的一个SQL语句使用了索引,为什么还是会进入到慢查询之中呢?今天我们就从这个问题开始来聊一聊索引和慢查询。...语句执行过程中有没有用到表的索引,可以通过explain一个语句的输出结果来看KEY的值不是NULL。...我们再来看一个例子:如果你的执行语句 select * from t_people where name='张三' and age=8 t_people表上有一个索引是姓名和年龄的联合索引,那这个联合索引的过滤性应该不错...但是查询的过滤性和索引的过滤性可不一定是一样的,如果现在你的需求是查出所有名字的第1个字是张,并且年龄是8岁的所有小朋友,你的语句会怎么写呢?...我们可以考虑把名字的第一个字和age来做一个联合索引。这里可以使用MySQL5.7引入的虚拟列来实现。
今天我们就从这个问题开始来聊一聊索引和慢查询。 另外插入一个题外话,个人认为团队要合理的使用ORM,可以参考 ORM的权衡和抉择。...语句执行过程中有没有用到表的索引,可以通过explain一个语句的输出结果来看KEY的值不是NULL。...你可以用全表扫描来表示一个查询遍历了整个主键索引树; 也可以用全索引扫描,来说明像select a from t;这样的查询,他扫描了整个普通索引树; 而select * from t where id...我们再来看一个例子: 如果你的执行语句是 select * from t_people where name='张三' and age=8 t_people表上有一个索引是姓名和年龄的联合索引,那这个联合索引的过滤性应该不错...我们可以考虑把名字的第一个字和age来做一个联合索引。这里可以使用MySQL5.7引入的虚拟列来实现。
所以 ProtoBuf 就是以 message 的⽅式来⽀持我们定制协议字段,后期帮助我们形成类和⽅法来使⽤。在通讯录 1.0 中我们就需要为 联系⼈ 定义⼀个 message。...字段类型分为:标量数据类型 和 特殊类型(包括枚举、其他消息类型等)。 字段唯⼀编号:⽤来标识字段,⼀旦开始使⽤就不能够再改变。...people.SerializeToString(&msg)) { std::cerr 联系人失败!"...people_result.ParseFromString(msg)) { std::cerr 联系人失败!"...总的来说:ProtoBuf 是需要依赖通过编译⽣成的头文件和源文件来使用的。
今天我们就从这个问题开始来聊一聊索引和慢查询。...语句执行过程中有没有用到表的索引,可以通过explain一个语句的输出结果来看KEY的值不是NULL。 我们看下 explain select * from t;的KEY结果是NULL ? ...我们再来看一个例子: 如果你的执行语句是 select * from t_people where name='张三' and age=8 t_people表上有一个索引是姓名和年龄的联合索引,那这个联合索引的过滤性应该不错...但是查询的过滤性和索引的过滤性可不一定是一样的,如果现在你的需求是查出所有名字的第1个字是张,并且年龄是8岁的所有小朋友,你的语句会怎么写呢? 你的语句要怎么写?...我们可以考虑把名字的第一个字和age来做一个联合索引。这里可以使用MySQL5.7引入的虚拟列来实现。
列裁剪和分区裁剪 Hive在读数据的时候,只读取查询中所需要用到的列,而忽略其它列。...例如,若有以下查询: SELECT age, name FROM people WHERE age > 30; 在实施此项查询中,people表有3列(age,name,address),Hive只读取查询逻辑中真正需要的两列...但就算设置成more,也只有部分sql语句会不走MapReduce程序,那有没有什么办法可以优化这个问题呢?这就不得不提本地模式了。...,或者无效的on连接条件,Hive只能使用1个reducer来完成笛卡尔积。...可以通过配置参数mapred.job.reuse.jvm.num.tasks来进行JVM重用。
通过创建一个简单的示例应用程序,它向你展示了如何: 在.proto中定义消息格式 使用protocol buffer编译器 使用Go protocol buffer API读写消息 这并不是protocol...为什么使用Protocol Buffer 我们要使用的例子是一个非常简单的“通讯录”应用程序,它可以从文件中读写联系人的信息。通讯录中每个人都有一个姓名、ID、邮箱和练习电话。...消息只是一个包含一组类型化字段的聚合。许多标准简单数据类型都可用作字段类型,包括bool、int32、float、double和string。...你也可以通过使用其他消息类型作为字段类型来为消息添加更多结构。...Protocol Buffer API 生成的addressbook.pb.go为你提供了下面这些有用的类型: 包含People字段的AddressBook结构体 包含Name、Id、Email和Phones
前言 经常有同学问我,我的一个SQL语句使用了索引,为什么还是会进入到慢查询之中呢?今天我们就从这个问题开始来聊一聊索引和慢查询。...读者福利:整理好的MySQL实战笔记 语句执行过程中有没有用到表的索引,可以通过explain一个语句的输出结果来看KEY的值不是NULL。...你可以用全表扫描来表示一个查询遍历了整个主键索引树; 也可以用全索引扫描,来说明像select a from t;这样的查询,他扫描了整个普通索引树; 而select * from t where id...我们再来看一个例子: 如果你的执行语句是 select * from t_people where name='张三' and age=8 t_people表上有一个索引是姓名和年龄的联合索引,那这个联合索引的过滤性应该不错...我们可以考虑把名字的第一个字和age来做一个联合索引。这里可以使用MySQL5.7引入的虚拟列来实现。
领取专属 10元无门槛券
手把手带您无忧上云