在单个 .proto ⽂件中可以定义多个消息体,且⽀持定义嵌套类型的消息(任意多层)。...,由于PB序列化之后是二进制文件,所以从文件中读取数据使用ios::binary,读取成功之后,通过contacts.pb.h中提供的解析二进制序列方法,将通讯录数据序列化为二进制文件,并保存在 contacts.bin...向通讯录中添加一个联系人 AddPeopleInfo(contacts.add_contacts()); return 0; } 使用 cin.ignore(256, '\n') 接口,目的是为了不让...v选项: 显示所有字节,包括重复的字节。...当然,如果你观看别人用PB写的C++程序,可能会看到这样一句宏定义在main函数开头: GOOGLE_PROTOBUF_VERIFY_VERSION; GOOGLE_PROTOBUF_VERIFY_VERSION
服务1(service):负责序列化通讯录对象,并写⼊⽂件中 服务2(client):负责读取⽂件中的数据,解析并打印出来 ⼀段时间后,service 更新了⾃⼰的 .proto ⽂件,更新内容为:删除了某个字段...未知字段:解析结构良好的 protocol buffer 已序列化数据中的未识别字段的表示方式。...类定义在 google 提供的 message.h 中。...5.1 选项分类 选项的完整列表在google/protobuf/descriptor.proto中定义。...由此可见,选项分为文件级、消息级、字段级等等, 但并没有一种选项能作用于所有的类型 5.2 optimize_for(文件级选项) 作用:控制 protoc 生成代码的优化侧重点(不影响消息的线格式,跨端
三.proto3语法解析之oneof类型 用途:用于消息中有多个可选字段,但同一时间只能设置其中一个字段的场景。 核心作用:强制约束同一时刻仅允许一个字段有值,避免逻辑冲突。...特定语言检测方法:在C++和Java语言中,对于消息字段、oneof字段和any字段,有has_方法来检测当前字段是否被设置。...八.前后兼容性 向前兼容:老模块(未做变动的 client )能够正确识别新模块(增加了“生日”属性的 service )生成或发出的协议,新增加的属性(如“生日”)会被当作未知字段( pb 3.5 版本及之后...九.proto3语法解析之option类型 在.proto文件中可通过option标注声明许多选项,这些选项能影响**proto**编译器的某些处理方式。... 选项分类: 选项的完整列表在google/protobuf/descriptor.proto中定义。
第二种: 文件存储数据 关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。...因此,Android 提供了一些新的 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用这些 API。...update() 根据条件,更新指定列的值,所以用 execSQL() 方法可以达到同样的目的。 WHERE 条件和其参数和用过的其他 SQL APIs 类似。...content://contacts/people/45 这个URI返回单个结果(联系人信息中ID为45的联系人记录) 尽管这种查询字符串格式很常见,但是它看起来还是有点令人迷惑。...(name, phoneNo)的方式来向联系人信息簿中添加联系人姓名和电话号码。
但是,在某些内容区域中,边框或背景是表示交互性所必需的。在“电话”应用程序中,带边框的数字键增强了拨打电话的传统模式,“通话”按钮的背景提供了易于击中的醒目的目标。...通过提供特定于应用程序的其他命令来增加菜单的选项,与标准命令一样,任何自定义命令都可以对选择的文本或对象进行操作。 在系统提供的命令之后显示自定义命令。...在正在编辑的字段的下方或附近显示选择器效果很好。选择器通常显示在屏幕底部或弹出窗口中。 日期选择器 日期选择器是用于使用触摸屏,键盘或定点设备选择特定日期,时间或两者的有效界面。...您可以使用以下样式之一显示日期选择器: 日期选择器是用于使用触摸屏,键盘或鼠标选择特定日期、时间的有效界面。...将进度条用于持续时间明确的任务。进度条非常适合显示任务的状态,尤其是当它帮助传达任务需要完成多长时间时。 在导航栏和工具栏中隐藏轨道的未填充部分。默认情况下,进度条的轨道包含已填充和未填充的部分。
表 * contact_id:联系人id * data表:存放联系人的详细的信息,每行数据是单独的一条联系人信息 * data1:联系人的具体的信息 * raw_contact_id...:该行信息属于哪个联系人 * mimetype_id:该行信息属于什么类型 * mimetypes表:mimetype_id对应的类型的字符串 ###UriMatcher * 用于判断一条uri...,把数字提取出来的api int id = (int) ContentUris.parseId(uri); 01项目的MyOpenHelper: package com.itheima.customcontentprovider...与匹配器定义好的uri中,哪条匹配 static { um.addURI("com.itheima.people", "person", 1);//content://com.itheima.people.../person";//表示请求的是person的单条数据 } return null; } //此方法供其他应用调用,用于往people数据库里插数据
通过创建一个简单的示例应用程序,它向你展示了如何: 在.proto中定义消息格式 使用protocol buffer编译器 使用Go protocol buffer API读写消息 这并不是protocol...为什么使用Protocol Buffer 我们要使用的例子是一个非常简单的“通讯录”应用程序,它可以从文件中读写联系人的信息。通讯录中每个人都有一个姓名、ID、邮箱和练习电话。...syntax = "proto3"; package tutorial; import "google/protobuf/timestamp.proto"; go_package选项定义了包含此文件中所有生成代码的包的导入路径...Protocol Buffer API 生成的addressbook.pb.go为你提供了下面这些有用的类型: 包含People字段的AddressBook结构体 包含Name、Id、Email和Phones...但请记住,旧消息中不会包含新字段,因此你需要合理地处理默认值。使用类型特定的默认值:对于字符串,默认值是空字符串。对于布尔值,默认值是false。对于数值类型,默认值是零。
谷歌的担心是对的,在接下来的日子,我们可以想象的到,谷歌会淹没在翻天覆地的审查中,会有越来越多的呼声针对它,以及会不断的在国会作证。 华尔街日报披露消息之后,谷歌的回应。...当应用请求访问您消费者版Google帐户中的任何数据时,这就是现在所见的过程(您始你可以选择是否授予该权限请求): ? 发现3:当用户授予应用其Gmail的访问权限时,他们会考虑某些特定情况。...发现 4 :当用户授予 Android 应用 短信、联系人和通话权限的时候,他们这样做是具有特定使用场景的。...在未来几个月内,我们将对更多 Android 的 API 增添额外的控制并进行政策和条款的更新。...与此同时,我们也会和我们的开发者伙伴们积极沟通,确保在合适的时间内依据新的方案调整和更新他们的应用和服务。 我们的目标是在为用户提供一系列有用的应用程序的同时,确保用户对数据安全的信心。
by Li.zhu 随着6月份google的Android N preview 4版本的发布,笔者也借着东风在N6P上体验了一把新系统,试玩之后认为有几点新的感受特记录之。...此外,谷歌还扩展了ConnectivityManager API的能力,使得应用可以检测系统是否开启了流量保护模式,或者检测自己是否在白名单中。...Doze休眠机制是当设备处于空闲状态时,通过推迟应用的 CPU 和网络活动以实现省电目的的系统模式。 在 Android N 中,Doze休眠机制又前进了一步。...只要屏幕关闭了一段时间,且设备未插入电源,Doze休眠机制开启,系统会尝试通过限制网络访问以及CPU密集的服务来保存电量,这意味着用户即使将设备放入口袋里也可以省电。...”(quick path),能够大大加快应用安装和系统更新的速度,即便是那些大型的应用程序如游戏,在安卓6.0中需要几分钟时间才能安装和优化完成的,在安卓7.0中仅仅需要几秒钟就可以搞定。
4.3.2 添加联系人按钮 添加联系人按钮让用户将现有联系人添加到文本框或者其它文字视图中。 ? API注释 想要了解如何在代码中定义添加联系人按钮,请参考UIButton....详情展开按钮以一个单独的视图展示特定项目的更多详情信息与功能。 当详情展开按钮在表格行中出现时,点击表格行的其它区域不会激活此按钮,只会选中该行,或者触发app中其它自定义的行为。...API注释 想要了解如何在代码中定义信息按钮,可以参考UIButton. iOS包含了两种信息按钮样式:适用于浅色内容上的深色按钮,以及适用于深色内容上的浅色按钮。...进度条(Bar).此样式比默认样式细,适合用在工具栏中。 ? 当一个任务存在明确的进程,可以使用进度条来给与用户反馈,尤其在需要明确告诉用户这个任务大约需要多少时间完成的时候。...4.3.18文本框 开关按钮展示了两个互斥的选项或状态。 ? API提示: 想要了解如何在代码中定义文本框,以及在文本框中支持图片和按钮,可以参考UITextField.
注意,AWS和Azure在Windows操作系统中为实例类型列出了不同的价格,而谷歌云在基本实例成本的基础上增加了每核许可费用。 上表代表了默认的按需定价选项。...购买选项 由于选项繁杂,对于购买选项的比较需要好几篇文章来讨论,在这里不再累述。不过用于节约成本的选项,下面会列举一些。 ?...Google Cloud的程序在资源方面更灵活一些,因为客户只需选择一些vCPU和内存,不必选择特定的实例大小和类型。 如果您改变主意怎么办?...Spot实例和可抢占实例 还有一些折扣选项,如AWS中的Spot实例、Azure的低优先级VM和谷歌的可抢占VM。这些选项允许用户以极低的折扣购买未使用的容量。...不过用户也需注意,一般给出的GCP价格可能会产生误导,因为如果用户使用了整月谷歌云平台,GCP的价格中已经包含了持续使用折扣选项。 ? 合约 最后一种“购买选择权”与合同协议有关。
在 Android 11 中,Android 平台变得更加以人为本,并且拥有更为丰富的展现方式,在反复探究用户在移动设备上的交流方式之后,我们会将 Android 打造为一款更加人性化的操作系统,使其可以识别并优先推送您生活中人际关系密切相关的信息...Android 11 和会话 在 Android 11 中,还有很多更新强调了人际交往相关功能的重要性。例如在下拉通知栏中为 消息风格的通知 增加了专门的区域。 ...专门的会话区域和气泡提升了用户的专注体验 您可以看一下 Android 开发者文档中会话 (Conversation API) 页面中的相关介绍,只要通过遵循特定的指南,就可以使会话浮现在系统的各个位置...People first 文中所提到的 Android 11 中的更新表明了平台未来的发展趋势,和对人际交往相关的体验的持续提升。...如果想要了解更多关于 Android 11 的更新内容和 API 指南,请参考 Android 开发者文档的 会话 页面。
在CRM系统中,作为销售管理,他管辖的地区在指定时间生成的机会是他所关注的。...在CRM系统中,作为销售管理,经常需要统计每个销售业绩情况,用于他们的业绩考核指标。...在CRM系统中,作为一名销售,经常需要拜访客户,拜访完成之后需要在机会中填写相应的跟进记录,所以对于他们来说需要完整的客户地址信息,用于日后的拜访使用。...在CRM系统中,作为一名刚入职的销售,可以通过查看别人的赢单的跟单机会来学习如何跟单。这时候他就可以根据状态是赢单且拥有者是张三的筛选条件,找出别人最近赢单的50条销售机会来进行学习。...在CRM系统中,我们习惯把数据的完整性和成单概率挂钩,如果销售机会关联的联系人和客户信息缺失,往往代表这是一条成单率较低的机会。
通过创建一个简单的示例应用程序,它向你展示了如何: •在.proto中定义消息格式•使用protocol buffer编译器•使用Go protocol buffer API读写消息 这并不是protocol...为什么使用Protocol Buffer 我们要使用的例子是一个非常简单的“通讯录”应用程序,它可以从文件中读写联系人的信息。通讯录中每个人都有一个姓名、ID、邮箱和练习电话。...syntax = "proto3"; package tutorial; import "google/protobuf/timestamp.proto"; go_package选项定义了包含此文件中所有生成代码的包的导入路径...Protocol Buffer API 生成的addressbook.pb.go为你提供了下面这些有用的类型: •包含People字段的AddressBook结构体•包含Name、Id、Email和Phones...字段的People•包含Number和Type字段的Person_PhoneNumber•自定义枚举类型的Person.PhoneType 你可以在Go 生成的代码指南[10]中详细了解生成的代码的细节
不再询问』的选项,如果用户这里再继续拒绝,或者勾选『不再询问』,那么第二条命就 Game Over 了,只能让用户去 Setting 中手动去管理这个权限了。...Google 在它的官方文档中,给我们提供了四种权限交互的设计方式,我们可以来参考下: Educate before asking:这种就是类似于在闪屏页提示用户『我们需要哪些权限哦,这些权限是干嘛的哦...Direct Share 一个小的功能点,App 可以实现 Android 提供的 API,在分享的时候,直接将分享内容分享到更加精细的目标,例如联系人中的某个联系人,这样可以节省用户重新打开...菜单选项定制 在 Android N 上,用户可以通过『Edit』按钮来定制自己的快捷菜单,是的,这也是很多厂商的ROM都已经有的功能,Google 再一次养肥了杀了。 ?...,官方给出的例子比较复杂,如图所示。
消息内容表用于存储消息维度的一些基本信息,比如: 消息ID 消息内容 消息类型 消息产生时间 收发双方的两个索引表通过同一个消息ID和这个内容表关联。...联系人列表只更新存储收发双方的最新一条消息,不存储两人所有的历史消息 消息索引表的使用场景一般用于查询收发双方的历史聊天记录,是聊天会话维度 联系人表的使用场景用于查询某一个人最近的所有联系人,是用户全局维度...最近联系人表 张三给李四发完消息后,除在内容表和索引表插入记录,还会更新各自的最近联系人表。 比如更新张三的最近联系人表,如果和李四之前 无聊天记录 则新插入一条联系人记录。...联系人的对方UID为李四的UID,和这个联系人最新的一条消息ID是1001 有过聊天记录 则只需更新张三和李四的最新的一条聊天消息ID为1001,同样的办法再更新一次李四的联系人列表 2 消息收发通道...上面通过未读提醒来查看消息的环节中涉及了两个概念:一个是我有多少条未读消息,另一个是我和某个联系人有多少条未读消息。
c语言通讯录 前言 C语言通讯录是一个使用C语言编写的简单程序,用于存储和管理联系人信息。该程序允许用户添加、删除、查找和显示通讯录中的联系人。...它的主要作用是根据用户提供的关键词或条件,快速定位到通讯录中的特定联系人。在这个信息时代,人们的社交圈不断扩大,通讯录中的联系人数量也随之增长,因此,一个高效、准确的查找函数显得尤为重要。...最简单的方式是将所有联系人的信息按照一定格式连续打印出来,例如按姓名排序或按添加时间排序。然而,在实际应用中,用户可能希望根据不同的条件筛选联系人,或者对联系人信息进行分组和排序。...还可以添加搜索功能,允许用户快速找到特定的联系人。 在实现这些功能时,需要注意程序的性能和效率。如果通讯录中包含大量的联系人信息,打印函数可能会消耗大量的计算资源和时间。...在编程领域,枚举函数不仅提高了代码的可读性和可维护性,还有助于减少错误和增强代码的安全性。 在日常的软件开发中,枚举函数常常被用于处理那些具有固定、有限且明确值集合的数据类型。
之后,由于每一方都确信它存储在各自另一方的地址簿中,因此他们可以安全地透露他们的联系标识符和验证记录。在下文中,将通过系统地分析所有可能的设计选项来详细说明如何配置 PSI 执行以实现所描述的结果。...图片表中列出的设计选项 (DO)的不同之处在于(a)AirDrop 发送方和接收方的 PSI 输入,即联系人标识符和地址簿,(b)各方在 PSI 中扮演的角色,以及(c)执行 DO 的顺序。...在整个 AirDrop 执行过程中避免用户跟踪是未来工作的一个重要领域。然而,在更长的时间内重复使用地址簿条目的预计算加密允许跟踪联系人组成的变化,即自上次协议执行以来添加或删除了多少联系人。...出于评估目的,使用随机生成的联系人。 (d) 目前没有集成 BLE 发现,因为 iOS 在扫描响应中隐藏了 Apple 特定的广播,并禁止向第三方应用程序发出它们。...随着时间的推移,可用带宽的增加也解释了为什么第一条消息的中间传输延迟 (StartPSI) 明显大于第二条消息 (FinishPSI)。
第二种: 文件存储数据 关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。...因此,Android 提供了一些新的 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用这些 API。...update() 根据条件,更新指定列的值,所以用 execSQL() 方法可以达到同样的目的。 WHERE 条件和其参数和用过的其他 SQL APIs 类似。...将返回设备上的所有联系人信息 content://contacts/people/45 这个URI返回单个结果(联系人信息中ID为45的联系人记录) 尽管这种查询字符串格式很常见,但是它看起来还是有点令人迷惑...(name, phoneNo)的方式来向联系人信息簿中添加联系人姓名和电话号码。
然后,它向所有联系人发送一条消息,包含个性化的问候语、恶意文件和后续消息。它使用waitForAck: false来加速传递并避免检测。图10. 用于恶意软件分发的脚本。...如果仍未找到,则使用备用C2地址(在此样本中为“domimoveis1.com.br”)。在调查过程中,我们观察到一些样本与未启用双重验证的电子邮件账户相关联,仅使用硬编码凭据即可访问。...恶意软件等待来自C2的传入消息并解析它们以确定要运行哪个函数。它实现了多个套接字,每个套接字专用于特定功能。...它发送此覆盖层以及特定参数(取决于受害者正在访问的窗口),以在合法的银行窗口上创建虚假的密码输入字段和提交按钮。这样,受害者不知不觉地在覆盖层字段中输入凭据,并将其外传到C2服务器。...在“配置”选项卡中,面板显示了重定向设置、允许的国家/地区和每个IP的连接数。