protobuf语法指南

protobuf语法指南
protobuf语法指南

1. 概述
前两篇文章,我们概括介绍《Google Protocol Buffers 概述》以及带领大家 简单的《Google Protocol Buffers 入门》,接下来,再稍微详细一点介绍 Protocol Buffers 书写语言。该篇文章主要讲解如何使用 PB 语言构建数据,包 括.proto 文件语法及如果使用.proto 文件生成数据存取类。 本篇主要包括:
? ? ? ? ? ? ?
定义一个 PB message 类型 介绍 PB 数据类型 Optional 字段及其默认值 枚举类型 使用其他 Message 类型作为 filed 类型 嵌套类型 更新 Message
2. 定义一个 PB message 类型
假如现在需要定义搜索请求的 message 格式,每条 message 包含三个字段: 搜索语句(query string),需要的返回结果页数(page_number),以及该页上 的结果数。可如下定义.proto 文件。 message SearchRequest { required string query = 1; optional int32 page_number = 2; optional int32 result_per_page = 3; } 该 message 定义声明三个字段(name/value pairs),每个字段有一个名字和 类型。 2.1 声明字段类型 上例中,所有的字段类型均为标准类型:两个整型和一个字符串类型。当然,也 可以指定复合类型:枚举类型和其他自定义 message 类型。 2.2 给字段赋值数字标签 从上例中可以发现,message 中定义的每个字段都有一个唯一的数字标签。该 标签的作用是在二进制 message 中唯一标示该字段, 一旦定义该字段的值就不 能够再更改。有一点需要强调:1~15 的数字标签编码后仅占一个字节(byte), 包括数字标签和字段类型。16~2047 的数字标签占两个字节(byte)。因此, 1~15 的数字标签应该用于最频繁出现的元素。设计时要考虑到不要一次用完 1~15 的标签,要考虑到将来也可能出现频繁出现的元素。

最小的数字标签是 1, 最大的数字标签是 2 的 29 次方-1, 也即 536,870,911。 但是并不是这之间所有的数字标签你都能用,例如 19000~19999。这个区间 的数字标签就像是 java 中的保留字一样,他们是 PB 的保留数字标签。如果该 区间的数字标签出现在.proto 文件中,PB 编译器会出错。 2.3 字段标示符 字段标示符有三个: message 的没一个字段,都要用如下的三个修饰符(modifier)来声明: 1. required: 必须赋值, 不能为空, 否则该条 message 会被认为是“uninitialized”。 build 一个“uninitialized” message 会抛出一个 RuntimeException 异常, 解析一条“uninitialized” message 会抛出一条 IOException 异常。 除此之外, “required”字段跟“optional”字段并无差别。 2. optional: 字段可以赋值, 也可以不赋值。 假如没有赋值的话, 会被赋上默认值。 对于简单类型,默认值可以自己设定,例如上例的 PhoneNumber 中的 PhoneType 字段。如果没有自行设定,会被赋上一个系统默认值,数字类型会 被赋为 0,String 类型会被赋为空字符串,bool 类型会被赋为 false。对于内 置的 message,默认值为该 message 的默认实例或者原型,即其内所有字段 均为设置。当获取没有显式设置值的 optional 字段的值时,就会返回该字段的 默认值。 3. repeated:该字段可以重复任意次数,包括 0 次。重复数据的顺序将会保存在 protocol buffer 中, 将这个字段想象成一个可以自动设置 size 的数组就可以了。 由于一些历史原因,数字类型的 repeated 字段性能有些不尽人意,但是,PB 已经做了改进,但是需要再添加一点改动,即在声明后添加[packed=true]例 如: repeated int32 samples = 4 [packed=true]; Notice:应该格外小心定义 Required 字段。当因为某原因要把 Required 字 段改为 Optional 字段是,会有问题,老版本读取器会认为消息中没有该字段不 完整, 可能会拒绝或者丢弃该字段(Google 文档是这么说的, 但是我试了一下, 将 required 的改为 optional 的,再用原来 required 时候的解析代码去读,如 果字段赋值的话, 并不会出错, 但是如果字段未赋值, 会报这样错误: Exception in thread “main” com.google.protobuf.InvalidProtocolBufferException: Message missing required fields:fieldname)。在设计时,尽量将这种验证 放在应用程序端的完成。Google 的一些工程师对此也很困惑,他们觉得, required 类型坏处大于好处,应该尽量仅适用 optional 或者 repeated 的。但 也并不是所有的人都这么想。 2.4 同一.proto 文件定义多个 message

PB 支持同一.proto 文件定义多个 message。这在需要定义相关 message 的 时候非常有用, 例如: 除了搜索请求 message, 还需要定义搜索响应 message, 可以再同一.proto 文件中定义: message SearchRequest {
required string query = 1;
optional int32 page_number = 2;
optional int32 result_per_page = 3;
}
message SearchResponse {
...
} 2.5 添加评论 使用 C/C++风格的注释 // syntax,如下例子: message SearchRequest {
required string query = 1;
optional int32 page_number = 2;// Which page number do we want?
optional int32 result_per_page = 3;// Number of results to return per page.
} 2.6 编译.proto 文件后产生了什么?

用 PB 编译器运行.proto 文件后,会按照定义的格式,生成指定语言的一系列 代买,这些代码的功能包括:字段值的 getter,setter,序列化 message 并 写入到输出流,从输入流接写成 message 等。 对于 Java,编译器生成一个.java 文件,该 java 文件内包含几个内部类,分别 对应.proto 文件中定义的 message 类型,以及将来用于创建 message 类实 例的 Builder 类。
3. 标准值类型
.proto Type double float int32 使用可变长 编码. 对于 负数比较低 效,如果负 数较多,请 使用 sint32 int64 使用可变长 编码. 对于 负数比较低 效,如果负 数较多,请 使用 sint64 uint32 使用可变长 编码 使用可变长 编码 使用可变长 编 uint32 int int/long int64 long int/long Notes C++ Type double float int32 Java Type double float int Python Type[2] float float int
uint64
uint64
long
int/long
sint32
int32
int
int

码. Signed int value. 编码负数比 int32 更高 效 sint64 使用可变长 编 码. Signed int value. 编码负数比 int64 更高 效 fixed32
恒定四个字节。 如果数值几乎总 是大于 2 的 28 次方,该类型比 unit32 更高效。
int64
long
int/long
uint32
int
int
fixed64
恒定四个字 节。如果数 值几乎总是 大于 2 的 56 次方, 该 类型比 unit64 更 高效。 恒定四个字 节 恒定八个字 节
uint64
long
int/long
sfixed32
int32
int
int
sfixed64
int64
long
int/long
bool string A string must always
bool string
boolean String
boolean str/unicode

contain UTF-8 encoded or 7-bit ASCII text. bytes 包含任意数 量顺序的字 节 string ByteString str
4. Optional 字段及其默认值
上面提到, PB 允许设置可选字段(optional)。 顾名思义, 在一条 message 中, 该字段可设值也可不设。假如没有设置,那么在解析该字段的时候,会根据该字 段类型,给其赋一个类型默认值。除此之外,也可以在定义 message 格式的时 候,就为 optional 字段设置一个默认值,如下: optional int32 result_per_page = 3 [default = 10]; 假如没有赋值的话,会被赋上默认值。对于简单类型,默认值可以自己设定,例 如上例的 PhoneNumber 中的 PhoneType 字段。如果没有自行设定,会被赋 上一个系统默认值, 数字类型会被赋为 0, String 类型会被赋为空字符串, bool 类型会被赋为 false。对于枚举类型,默认值是枚举列表中第一个值。
5. 枚举类型
在定义 message 类型的时候,也许会有这样一种需求:其中的一个字段仅需要 包含预定义的若干个值即可。比如,对于每一个搜索请求,现需要增加一个分类 字段, 分类包含: UNIVERSAL, WEB, IMAGES, LOCAL, NEWS, PRODUCTS or VIDEO。要实现该功能,仅需要增加一个枚举类型字段。如下: message SearchRequest { required string query = 1; optional int32 page_number = 2; optional int32 result_per_page = 3 [default = 10]; enum Corpus { UNIVERSAL = 0; WEB = 1; IMAGES = 2;

LOCAL = 3; NEWS = 4; PRODUCTS = 5; VIDEO = 6; } optional Corpus corpus = 4 [default = UNIVERSAL]; } 还可以给枚举值设置别名, 仅需将相同的数字标签设置给不同的名称即可。 这里, 必须得设置 allow_alias 为 true,否则 PB 编译器会报错。 enum EnumAllowingAlias { option allow_alias = true; UNKNOWN = 0; STARTED = 1; RUNNING = 1; }
enum EnumNotAllowingAlias { UNKNOWN = 0; STARTED = 1; // RUNNING = 1; // Uncommenting this line will cause a compile error inside Google and a warning message outside. } 可以定义枚举在一个 message 内部, 如上例。 也可以定义在 message 的外部, 这样的枚举可以被其他任何.proto 文件内的 message 复用。
6. 使用其他 Message 类型作为 filed 类型
PB 允许使用 message 类型作为 filed 类型。例如,在搜索相应 message 中, 包含一个结果 message。 此时, 只需要定义一个结果 message, 然后再.proto 文件中,在搜索结果 message 中新增一个字段,该字段的类型设置为结果 message 即可。如下: message SearchResponse { repeated Result result = 1;

}
message Result { required string url = 1; optional string title = 2; repeated string snippets = 3; } 6.1 导入定义 在上例中, Result message 类型与 SearchResponse 定义在同一个文件中, 假如有这么一种情况,这里所要使用的 Resultmessage 已经在其他的.proto 文件中定义了呢? 可以通过导入其他.proto 文件来使用其内的定义。 为达此目的, 需要在现.proto 文件前增加一条 import 语句: import "myproject/other_protos.proto";
7. 嵌套类型
PB 支持 message 内嵌套 message,如下例子中,Result message 定义在 了 SearchResponse 内: message SearchResponse { message Result { required string url = 1; optional string title = 2; repeated string snippets = 3; } repeated Result result = 1; } 如果想要在父 Message 外复用该 message 的话,可以用 Parent.Type 格式 来引用。 message SomeOtherMessage { optional SearchResponse.Result result = 1; }

PB 支持无限深层次的 message 嵌套: message Outer { message MiddleAA { message Inner { // Level 1 // Level 2 // Level 0
required int64 ival = 1; optional bool } } message MiddleBB { message Inner { // Level 1 // Level 2 booly = 2;
required int32 ival = 1; optional bool } } } booly = 2;
8. 更新 Message 类型
如果现有 message 类型不能在满足业务需求,例如,需要新增一个字段,但是 我们却希望依然能够使用原来的.proto 生成的代码。完全没有问题,仅需记住 如下规则: 1. 千万不要修改现有字段后边的数值标签 2. 只能新增 optional 或者 repeated 字段 3. 可以删除非必须字段, 但是他们的数字标签不能再被使用。 最好的方法是不删除, 而是修改名字,比如在前缀上加 OBSOLETE_,这样就可以避免后人尽量少的 出错。 4. 非 required 字段可以转化成 extension 字段, 反之亦然, 同时保留原类型和数 字标签 5. int32, uint32, int64, uint64, 和 bool 是兼容的。 即这些字段可以相互切换, 在代码处理的时候, 不会出错, 但是小心范围小的数据接收范围大的数据会发生 截断 6. sint32, sint64 是相互兼容的,但是不与其他整型类型兼容 7. string 和 bytes 是兼容的,因为 bytes 也是合法的 UTF-8 8. Embedded messages are compatible with bytes if the bytes contain an encoded version of the message(不知道怎么翻译了) 9. fixed32 与 sfixed32 兼容, fixed64 与 sfixed64 兼容

10. optional 与 repeated 兼容,也存在数据截断,假如讲一个 repeated 的序列化后的数据作为输入给客户端,客户端会截取最后一个原子类型的字节。 或者,如果是一个 message 类型的字段的话,合并所有的元素。 11. 可以修改字段默认值
9. Package
PB 建议在.proto 文件开头添加一个 package 说明符来避免不同 message 类 型的名字冲突: package foo.bar;
message Open { ... } 这样,就可以使用该 package 标示符来定义该 message 类型的字段: message Foo {
...
required foo.bar.Open open = 1;
...
} 不同语言,因为添加 package 标示符,生成的代码也会有所不同,Java 中, 该 package 将会被用作 java 文件的 package。如果不想这样的话,也可 在.proto 文件中显式指明 package,该字段是:java_package。

薄冰英语语法

薄冰英语语法 薄冰英语语法书里面讲的语法知识比较全面也比较系统,非常适合大家打基础。下面是小编给大家整理的薄冰英语语法的相关知识,供大家参阅! 薄冰英语语法:句子成分句子成分共有六种: 1)主语(subject)是一句的主体,是全句述说的对象,常用名词或相当于名词的词担任,一般置于句首。如: (2)The sun is shining in our faces. 阳光正照射在我们脸上。 shine [ain] vi. 发出光;反射光,闪耀;出类拔萃,表现突出;露出;照耀;显露;出众vt. 照射,擦亮;把的光投向;(口)通过擦拭使变得有光泽或光n. 光亮,光泽;好天气;擦亮;晴天;擦皮鞋;鬼把戏或诡计shining [aini] v. 闪烁(shine的ing形式);发亮adj. 光亮的; (3)I respect his privacy. 我尊重他的隐私权。 respect [rispekt] n. 尊敬,尊重;方面;敬意vt. 尊敬,尊重;遵守privacy [privsi; prai-] n. 隐私;秘密;隐居;隐居处 2)谓语或谓语动词(predicate or predicate verb)是说明主语的动作或状态的,常用动词担任,置于主语之后。如:当马丁离开水果店时,黄昏开始降临。 twilight [twailait] n. 黎明,黄昏;薄暮;衰退期;朦胧状态adj. 昏暗的,微明的;暮年的 (5)The play began [biɡn] at eight, so they must dine at

seven. 戏8点钟开演,所以他们必须7点钟吃饭。 begin at 几点开始;从开始 dine [dain] vi. 进餐,用餐vt. 宴请 谓语或谓语动词专指动词部分(包括动词短语)。它与谓语部分不同,二者不可混淆。 3)宾语(object)是表示及物动词的动作对象和介词所联系的对象的,常由名词或相当于名词的词担任。置于及物动词或介词之后。如: (6)One must endorse a cheque before one cashes it. 支票兑现前必须先签字。 endorse [inds; en-] vt. 背书;认可;签署;赞同;在背面签名cheque [tek] n. 支票 cash [k] n. 现款,现金vt. 将兑现;支付现款托马斯收到了一张超速行车警告单。 receive [risiv] vt. 收到;接待;接纳vi. 接收 received [risivd] v. 收到;接受;迎接(receive的过去分词) adj. 被一般承认的;被认为标准的 warning [wni] n. 警告;预兆;预告v. 警告(warn的ing形式) adj. 警告的;引以为戒的 speeding [spidi] n. 超速行驶v. 促进(speed的ing形式) adj. 高速行驶的 (8)She gave [ɡeiv] a roar of pain. 她发出一声痛苦的吼叫。roar [r]n. 咆哮;吼;轰鸣vi. 咆哮;吼叫;喧闹

drozer使用详解

Mercury(Android APP 应用安全评估) Mercury 是一款优秀的开源Android APP应用安全评估框架,它最赞的功能是可以动态的与android设备中的应用进行IPC(组件通信)交互。 一、安装与启动 1. 安装 (1)windows安装 第一步:下载Mercury 2.2.2 (Windows Installer) 第二步:在Android设备中安装agent.apk adb install agent.apk (2)*inux安装(Debian/Mac) apt-get install build-essential python-dev python-setuptools #以下步骤mac也适合 easy_install --allow-hosts https://www.360docs.net/doc/b615925867.html, protobuf==2.4.1 easy_install twisted==10.2.0 (为了支持Infrastructure模式) wget https://www.360docs.net/doc/b615925867.html,/assets/415/mercury-2.2.2.tar.gz tar zxvf mercury-2.2.2.tar.gz easy_install mercury-2.0.0-py2.7.egg 2. 启动 有三种方式 (1)USB方式的 第一步:在PC上使用adb进行端口转发,转发到Mercury使用的端口31415 adb forward tcp:31415 tcp:31415 第二步:在Android设备上开启Mercury Agent 选择embedded server-enable

zheng-环境搭建及系统部署文档20170213(三版)

1Een 项目描述 基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构:内容管理系统(门户、博客、论坛、问答等)、统一支付中心(微信、支付宝、在线网银等)、用户权限管理系统(RBAC细粒度用户权限、统一后台、单点登录、会话管理)、微信管理系统、第三方登录系统、会员系统、存储系统 https://www.360docs.net/doc/b615925867.html,/zhengAdmin/src/ 2项目组织结构

3项目模块图 4项目使用到的技术4.1后端技术 Spring Framework SpringMVC: MVC框架

Spring secutity|Shiro: 安全框架 Spring session: 分布式Session管理MyBatis: ORM框架 MyBatis Generator: 代码生成 Druid: 数据库连接池 Jsp|Velocity|Thymeleaf: 模板引擎ZooKeeper: 协调服务 Dubbo: 分布式服务框架 TBSchedule|elastic-job: 分布式调度框架Redis: 分布式缓存数据库 Quartz: 作业调度框架 Ehcache: 缓存框架 ActiveMQ: 消息队列 Solr|Elasticsearch: 分布式全文搜索引擎FastDFS: 分布式文件系统 Log4J: 日志管理 Swagger2: 接口文档 sequence: 分布式高效ID生产 https://www.360docs.net/doc/b615925867.html,/yu120/sequence AliOSS|Qiniu: 云存储 Protobuf|json: 数据传输 Jenkins: 持续集成工具 Maven|Gradle: 项目构建管理

薄冰初中英语语法之1· 名词

薄冰初中英语语法之 名词 主编薄冰 执行主编秦桂枝王璐孙晓芳 山西教育出版社 2014年第四版 出版人雷俊林 出版策划苗补坤 责任编辑仇小燕 ISBN 978-7-5440-5629-8 语法学习交流微平台纸介图书京东旗舰店纸介图书天猫旗舰店百度阅读手持媒体免费读

全国优秀畅销书,薄冰、张道真系列语法图书销售突破220万册! 丨学英语,凭什么让我学语法吗??? 不时听到一些青年问道:学英语一定要学语法吗?语法应该怎么学呢?我们 就这两个问题简单地谈一点个人意见。 对中国学生来说,尤其是成年人,我看是学点语法好。语法,顾名思义,乃是语 言的法则和规律。学习语法,尤其是一些基本法则,至少有下列几个好处: 第一 可以使你学得快些,因为已有现成的前人总结的法则,用不着你从 头摸索。 第二 可以使你学得透些,因为通过语法对语言现象不仅可以知其然,而 且可以知其所以然。 第三 可以使你学得准些,因为语法法则就是一条条准绳,可以用以衡量 一句话是否正确。 第四 语法不但可以引你入门,更可以引你入胜,使你逐渐眼界开阔,语 感加深,从而使你的英语水平不断提高。 丨那么应该如何学习语法呢? 我认为在学习语法过程中,应该注意下面几点: 第一 基本概念最重要。在学习每个语法项目时,一定要把它的基本概念 搞清,牢记在心。 第二 要大量地实践,大量地练习。实践要包括听、说、读、写四个方面, 练习要着重说和写。 第三 学习语法时,应多用比较法。如对动词时态、冠词、介词、名词的 单、复数等较难的语法项目进行相互比较,效果就比较好。 第四 要将语法法则与习惯用法分开。碰到习惯用法,就不必钻牛角尖, 进行徒劳的分析。而习惯用法在英语中则是大量地存在着的。 第五 将一本语法书通读一遍,当然也不无好处。但最好将它作为工具书, 像词典一样地经常查阅,始能学得比较细致牢靠。 第六 实用英语语法只应是入门的向导,像一根拐棍一样。英语达到一定 水平之后,就应将它扔掉。起码不要让许多语法条条充斥头脑,影响你说和写的 流利性。 最后 可能还会有人说,语法应该学,就是太枯燥。我的感觉是:开头有 点枯燥,过些时候,就会像嚼橄榄似的,越学越有味了。如若不信,请试试看。 薄冰初中英语语法之·名词

GoogleProtoBuf开发者指南

ProtoBuf开发指南 - 非官方不完整版 这个文档用于指导开发的,属于非官方发布版本进行选译的,并不完整。供参考使用。 1 概览 欢迎来到protocol buffer的开发者指南文档,一种语言无关、平台无关、扩展性好的用于通信协议、数据存储的结构化数据串行化方法。 本文档面向希望使用protocol buffer的Java、C++或Python开发者。这个概览介绍了protocol buffer,并告诉你如何开始,你随后可以跟随编程指导 ( https://www.360docs.net/doc/b615925867.html,/apis/protocolbuffers/docs/tutorials.html )深入了解protocol buffer编码方式 ( https://www.360docs.net/doc/b615925867.html,/apis/protocolbuffers/docs/encoding.html)。API 参考文档 ( https://www.360docs.net/doc/b615925867.html,/apis/protocolbuffers/docs/reference/overview .html )同样也是提供了这三种编程语言的版本,不够协议语言 ( https://www.360docs.net/doc/b615925867.html,/apis/protocolbuffers/docs/proto.html )和样式( https://www.360docs.net/doc/b615925867.html,/apis/protocolbuffers/docs/style.html )指导都是编写 .proto 文件。 1.1 什么是protocol buffer ProtocolBuffer是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。 1.2 他们如何工作 你首先需要在一个 .proto 文件中定义你需要做串行化的数据结构信息。每个ProtocolBuffer信息是一小段逻辑记录,包含一系列的键值对。这里有个非常简单的 .proto 文件定义了个人信息: message Person { required string name=1; required int32 id=2; optional string email=3; enum PhoneType {

薄冰、张道真语法语法大全(推荐文档)

泛谈英语语法学习 语法——是语言的三大要素之一,是语言的骨架。语言中缺少了语法,就等于语言失去了应有的尊严。 英语语法学家张道真语法学习的必要性和意义已毋庸置疑,要积极参与课堂内外的英语时间活动,在大量听、说的基础上,抓住各种机会开口讲英语、动笔用英语,一定能学有所获,最终形成综合语言运用能力。诚如Leibniz所言: A language is acquired through practice; it is perfected thr ough grammar. 学英语一定要学语法吗? 不时听到一些青年问道:学英语一定要学语法吗?语法应该怎么学呢?我们就这两个问题简单地谈一点个人意见。 对中国学生来说,尤其是成年人,我看是学点语法好。语法,顾名思义,乃是语言的法则和规律。学习语法,尤其是一些基本法则,至少有下列几个好处: 第一,可以使你学得快些,因为已有现成的前人总结的法则,用不着你从头摸索。 《薄冰、张道真英语语法大全》百度文库免费阅读

第二,可以使你学得透些,因为通过语法对语言现象不仅可以知其然,而且可以知其所以然。 第三,可以使你学得准些,因为语法法则就是一条条准绳,可以用以衡量一句话是否正确。 第四,语法不但可以引你入门,更可以引你入胜,使你逐渐眼界开阔,语感加深,从而使你的英语水平不断提高。 那么应该如何学习语法呢?我认为在学习语法过程中,应该注意下面几点: 第一,基本概念最重要。在学习每个语法项目时,一定要把它的基本概念搞清,牢记在心。第二,要大量地实践,大量地练习。实践要包括听、说、读、写四个方面,练习要着重说和写。 第三,学习语法时,应多用比较法。如对动词时态、冠词、介词、名词的单、复数等较难的语法项目进行相互比较,效果就比较好。 第四,要将语法法则与习惯用法分开。碰到习惯用法,就不必钻牛角尖,进行徒劳的分析。而习惯用法在英语中则是大量地存在着的。 第五,将一本语法书通读一遍,当然也不无好处。但最好将它作为工具书,像词典一样地经常查阅,始能学得比较细致牢靠。 第六,实用英语语法只应是入门的向导,像一根拐棍一样。英语达到一定水平之后,就应将它扔掉。起码不要让许多语法条条充斥头脑,影响你说和写的流利性。 最后,可能还会有人说,语法应该学,就是太枯燥。我的感觉是: 《薄冰、张道真英语语法大全》百度文库免费阅读

Ubuntu14.04的caffe编译及安装

Caffe Caffe CaffecuDNNAlexNetK40 1.17ms. Caffe BSD-2

sudo apt-get install build-essential # sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libop encv-dev libhdf5-serial-dev protobuf-com sudo apt-get install --no-install-recommends libboost-all-dev CUDA7.5 Nvidia Ubuntudeb , sudo dpkg -i cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb sudo apt-get update

sudo apt-get install cuda sudo ldconfig /usr/local/cuda/lib64 660 sudo apt-get install nvidia-cuda-toolkit sudo apt-get install nvidia-352 sudo reboot Atlas sudo apt-get install libatlas-base-dev pythonpipeasy_install wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py sudo python ez_setup.py --insecure wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py python sudo apt-get install libblas-dev liblapack-dev libatlas-base-dev gfortr an python-numpy

薄冰实用英语语法详解

被动语态 现在范畴一般现在时am/is/are made 现在进行时am / is /are being made 现在完成时has/have been made 过去范畴一般过去时was/were made 过去进行时was/werebeingmade 过去完成时had been made 将来范畴一般将来时shall/will be made 将来完成时shall/will have been made 过去将来时should/would be made 过去将来完成时should/would have been made 1. 被动语态的各种时态 被动语态(The Passive Voice)是动词的一种形式,表示主语是谓语动词的承受者。被动 语态便于论述客观事实,故常用于科技文章、新闻报道、书刊介绍以及景物描写。被动语态没有将来进行时、过去将来进行时和完成进行时形式。 (1) 一般现在时的被动语态 I am not so easily deceived. 我不会轻易上当受骗的。 Computers are widely used in the world. 计算机在世界范围内得到广泛应用。 (2) 一般过去时的被动语态 The car was seriously damaged. 汽车受到严重损坏。 Printing was introduced into Europe from China. 印刷术是由中国传入欧洲的。 (3) 现在进行时的被动语态 The question is being discussed at the meeting. 这个问题现在正在会上讨论。 The children are being taken care of by their aunt. 孩子们现在正由其姑妈照看。 (4) 过去进行时的被动语态 When I called, tea was being served. 当我来访时,正值上茶之际。 When they arrived,the experiments were being made. 他们到达时,实验正在进行。

《薄冰实用英语语法详解》连载合集

《薄冰实用英语语法详解》连载之一:名词 第一章、名词的数 1. 名词复数的规则变化形式 词尾字母变化方式例词 通常情况加-s bird-birds, shop-shops, lake-lakes -ch,-sh,-s,-x,- z 加-es church-churches, dish-dishes, class-classes, box-boxes 辅音字母+y 变-y为-i 再加-es factory-factories, fly-flies, family-families, baby-babies -o 加-es tomato-tomatoes, hero-heroes -f或-fe 变-f或-fe 为-v 再加-es leaf-leaves, thief-thieves, shelf-shelves, knife-knives, life-lives, half-halves 有些以-f或-fe结尾的名词复数只加-s,读作/ s /。如: gulf - gulfs 海湾chief - chiefs 首领proof - proofs 证据roof - roofs 屋顶 有些以-y结尾的专有名词的复数直接加-s。如: Henry - Henrys亨利Mary - Marys 玛丽 有些以辅音字母+o 结尾的名词的复数直接加-s。如: piano - pianos 钢琴memo - memos 备忘录photo - photos 照片solo - solos 独唱 有些以字母-o结尾的名词有两种复数形式,可以加-s,也可以加-es。如: motto - mottos/mottoes 箴言 halo - halos/haloes 光环cargo - cargos/cargoes 货物grotto - grottos/grottoes 洞穴 以-oo或元音字母加-o结尾的名词只加-s。如: bamboo - bamboos 竹子kangaroo - kangaroos 袋鼠video - videos 电视radio - radios 收音机

comake使用详解

Comake2使用详解 1、适用用户范围: 第一次使用comake2工具 使用comake2搭建环境:这时用户不需要关心COMAKE文件细节,和第一次使用comake2工具时的情形差不多,第一次使用comake2工具初始化环境 $mkdir --parent ps/se/ac/make $cd ps/se/ac/make $comake2 -S $comake2 -UB comake2 -S //初始化COMAKE文件 comake2 -S表示从平台最新基线版本获取依赖列表;comake2 -S -r 1.0.1.0表示从平台1.0.1.0版本获取依赖列表友情提示:如果你的代码库里已有COMAKE文件,可跳过这一步;如果你的模块路径是ps/se/ac/make,请cd ps/se/ac/make再执行comake2 -S命令 comake2 -UB //下载并编译依赖代码 2、comake2命令 $ comake2 -h comake[com make]能够自动帮助用户搭建环境,并且生成Makefile工具. 程序会读取目录下面的COMAKE文件,产生Makefile和环境.用户需要提供这个COMAKE文件. 参数: -h --help 查看帮助 -D --debug 开启debug选项[默认不打开].-D -D可以查看更多调试信息. -S --scratch 创建一个默认的COMAKE文件 -r --revision 从平台检出模块cvspath指定的TAG对应的依赖列表,配合-S使用,如-S -r 1.0.0.0 -E --export-configs 导出模块的4位版本依赖,存放在COMAKE.CONFIGS下面.比如-E public/ub@1.0.0.0 -W --watch-configs 查看本地依赖模块.-W -W可以查看模块引入来源.-W -W -W可以查看依赖模块的依赖. -I --import-files 在解释COMAKE文件之前导入模块 -C --change directory 切换到directory下面执行[默认当前目录] -Q --quiet 安静模式[默认不打开] -U --update-configs 更新环境 -B --build-configs 构建环境 -F --force 构建环境时强制进行[默认不进行] -e --export-local-configs 导出本地环境到CONFIGS.SCM文件 -f --scmfile= 重现编译环境 -d --devdiff 存在本地修改的共同开发依赖列表(多模块共同开发时适用) -J --make-thread-number= 如果模块使用COMAKE生成的Makefile的话,编译线程数[默认是4] -j --modules-thread-number= 并发下载、编译模块的线程数[默认是1] -K --keep-going 构建/更新环境中途出错的话,忽略错误继续[已废弃] -P --pretreatment 生成Makefile时不进行预处理[默认进行预处理] -O --quot-all-deps 生成Makefile时引用所有头文件依赖[默认过滤目录外依赖]

【pdf完整版】薄冰大学英语语法

catalogue 2 8 14 25 30 36 39 47 55 64 70 76 80 89 94 98 102 108 117 121 126 130 132 134

第一章名词 名词的数 1.名词复数的规则变化形式 有些以-f或-fe结尾的名词复数只加-s,读作/s/。如: gulf-gulfs海湾 chief-chiefs首领 proof-proofs证据 roof-roofs屋顶 有些以-y结尾的专有名词的复数直接加-s。如: Henry-Henrys亨利Mary-Marys玛丽 有些以辅音字母+o结尾的名词的复数直接加-s。如: piano-pianos钢琴 memo-memos备忘录photo-photos照片 solo-solos独唱 有些以字母-o结尾的名词有两种复数形式,可以加-s,也可以加-es。如:motto-mottos/mottoes箴言 halo-halos/haloes光环cargo-cargos/cargoes货物 grotto-grottos/grottoes洞穴 以-oo或元音字母加-o结尾的名词只加-s。如: banboo-bamboos竹子 kangaroo-kangaroos袋鼠video-videos电视 radio-radios收音机

只有一个/s/音结尾的名词,复数形式读/ziz/。如:house房子 2.名词复数的不规则变化形式 沿用古英语复数形式的名词。如: tooth-teeth牙齿 foot-feet脚 英尺goose-geese鹅 ox-oxen牛mouse-mice老鼠 woman-women妇女 child-children孩子 louse-lice虱子 外来词的复数形式来自拉丁语、希腊语、法语等的名词。如: 希腊语analysis-analyses分析 crisis-crises危机phenomenon-phenomena现象 thesis-theses论文 拉丁语datum-data数据 medium-media媒介formula-formulae公式 radius-radii半径 法语bureau-bureaux/bureaus局;司;处 madam-mesdames/madams夫人;女士 3.复合名词的复数形式 将主要成分变为复数形式。如: looker-on—lookers-on旁观者 passer-by—passers-by过路人runner-up—runners-up亚军 editor-in-chief—editors-in-chief总编辑 将最末一个构成部分变为复数形式。如: breakfast—breakfasts早餐 afternoon—afternoons下午gentleman—gentlemen绅士 go-between—go-betweens中间人 将两个组成部分均变为复数(这种复合名词中的第一个名词须是man或woman)。如:man doctor—men doctors男医生woman singer—women singers女歌手 4.单复数同形的名词 cattle牛 deer鹿 Chinese中国人 fish鱼 species种类 aircraft飞机buffalo水牛 giraffe长颈鹿

Protobuf编码详解

prtotocol buffer是google于2008年开源的一款非常优秀的序列化反序列化工具,它最突出的特点是轻便简介,而且有很多语言的接口(官方的支持C++,Java,Python,C,以及第三方的Erlang, Perl等)。本文从protobuf如何将特定结构体序列化为二进制流的角度,看看为什么Protobuf如此之快。 一,示例 从例子入手是学习一门新工具的最佳方法。下面我们通过一个简单的例子看看我们如何用protobuf 的C++接口序列化反序列化一个结构体。 1,编辑您将要序列化的结构体描述文件Hello.proto 每个结构体必须用message来描述,其中的每个字段的修饰符有required, repeated和optional 三种,required表示该字段是必须的,repeated表示该字段可以重复出现,它描述的字段可以看做C语言中的数组,optional表示该字段可有可无。 同时,必须人为地为每个字段赋予一个标号field_number,如上图中的1,2,3,4所示。更详细的proto文件的编写规则见这里。 2,用protoc工具“编译”Hello.proto protoc工具使用的一般格式是: protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/xxx.proto 其中SRC_DIR是proto文件所在的目录,DST_DIR是编译proto文件后生成的结构体处理文件的目录 之后会生成对结构体Hello.proto中描述的各字段做序列化反序列化的类 3, 编写序列化进程https://www.360docs.net/doc/b615925867.html,

我们用set方法为结构体中的每个成员赋值,然后调用SerializeToOstream将结构体序列化到文件log中。 并编译它: 4,编写反序列化进程https://www.360docs.net/doc/b615925867.html, 用ParseFromIstream将文件中的内容序列化到类Hello的对象msg中。 并编译它: , 5,做序列化和反序列化操作 上面只是一个简单的例子,并没有对protobuf的性能做测试,protobuf的性能测试详见这里。

薄冰实用英语语法详解介绍

薄冰实用英语语法详解介绍 薄冰实用英语语法详解这本书的语法比较好,而且条分缕析。下面是给大家整理的薄冰实用英语语法详解,供大家参阅! 薄冰实用英语语法详解内容简介《薄冰实用英语语法详解(4版》语法很简单,只要三步学: 1.理解语法现象的定义; 2.对照比较例句; 3.分析曾考过的对应试题 例:助动词和情态动词(本书147页) 薄冰实用英语语法详解作者简介薄冰,山西应县人,1947年毕业于国立浙江大学外国语文系,毕业后担任北京外国语大学教授,著名的英语语法专家,对英汉翻译造诣较深。从事英语教学与研究50多年,为我国的英语教育事业作出过卓越贡献,桃李满天下。主要著作有《英语语法手册》、《英语时态详解》、《高级英语语法》等。近年来致力于英语咨询方面工作,现主持《大学英语》、《英语世界》、《英语沙龙》等刊物的咨询。 薄冰实用英语语法详解图书信息出版社: 山西出版集团,山西教育出版社; 第4版(2014年6月1日) 平装: 446页 正文语种: 简体中文, 英语 开本: 16

ISBN: 978-7-5440-2697-0 条形码: 978-7-5440-2697-0 尺寸: 18.5x 23 x 3cm 重量: 240 g 薄冰实用英语语法详解目录Prelude前奏 一、中学英语课程标准“简读 二、英语课程标准“总体”目标 三、英语课程标准“语言知识”目标 四、英语课程标准“语言技能”目标Unit 1 英语语法概要 1-1 英语语言的起源 1-2 英美语言的差异 1 词汇区别 2 拼写区别 3 读音区别 4 语法区别 1-3词法 1 实词 2 虚词 3 词组 4 词类的转化

Ubuntu下安装Caffe

Ubuntu下安装Caffe 安装需要的软件: 1. Ubuntu14.0.4 2. cuda-repo-ubuntu1504-7-5-local_7.5-18_amd64 3. caffe-master 安装Ubuntu的过程在这里不做介绍。系统安装好了之后,执行下面的操作。 在线安装的步骤,在此之前将更新源换成163的,下载速度会快很多: 1. sudo apt-get update 2. sudo apt-get upgrade 以上更新系统相关软件 3. sudo apt-get install build-essential 4. sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev 5. sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler 6. sudo apt-get install libatlas-base-dev python-dev vim 以上为在线安装的依赖项需要按顺序执行 7. 切换到cuda安装包的目录下,执行sudo dpkg -i cuda-repo-ubuntu1504-7-5- local_7.5-18_amd64 8. sudo apt-get update 9. sudo apt-get install -y cuda 以上为安装CUDA驱动。(Nvidia驱动在这个过程也会自动装好) 10. vim ~/.bashrc 11. 按i进入编辑状态,将光标移到最下面一行。输入export PATH=/usr/local/cuda- 7.5/bin:$PATH 12. 输入export LD_LIBRARY_PATH=/usr/local/cuda- 7.5/lib64:$LD_LIBRARY_PATH,按:wq保存并退出 13. source ~/.bashrc 以上为配置环境变量 14. 将下载好的caffe源文件解压缩,即caffe-master然后切到那个目录中执行cp Makefile.config.example Makefile.config 15. vim Makefile.config 16. 按i进入编辑状态,修改:CUDA_DIR :=/usr/local/cuda-7.5 17. 如果使用了MATLAB或者Python需要按照Makefile.config文件中的提示在 Makefile.config进行相应的路径修改即可。 以上为配置Caffe相关路径 18. make all 19. make test 20. make runtest

薄冰实用英语语法之10

薄冰实用英语语法详解之十 虚拟语气 主编薄冰 编著王兰明陈静 山西出版传媒集团·山西教育出版社 2014年6月第4版第46次印刷 出版人雷俊林 出版策划苗补坤 责任编辑潘峰 ISBN 978-7-5440-3553-8 更加深入学习英语语法请加微平台bbzdzyyyf 语法学习交流微平台纸介图书京东旗舰店纸介图书天猫旗舰店百度阅读手持媒体免费读

丨学英语,凭什么让我学语法吗??? 不时听到一些青年问道:学英语一定要学语法吗?语法应该怎么学呢?我们就这两个问题简单地谈一点个人意见。 对中国学生来说,尤其是成年人,我看是学点语法好。语法,顾名思义,乃是语言的法则和规律。学习语法,尤其是一些基本法则,至少有下列几个好处: 第一可以使你学得快些,因为已有现成的前人总结的法则,用不着你从头摸索。 第二可以使你学得透些,因为通过语法对语言现象不仅可以知其然,而且可以知其所以然。 第三可以使你学得准些,因为语法法则就是一条条准绳,可以用以衡量一句话是否正确。 第四语法不但可以引你入门,更可以引你入胜,使你逐渐眼界开阔,语感加深,从而使你的英语水平不断提高。 丨那么应该如何学习语法呢? 我认为在学习语法过程中,应该注意下面几点: 第一基本概念最重要。在学习每个语法项目时,一定要把它的基本概念搞清,牢记在心。 第二要大量地实践,大量地练习。实践要包括听、说、读、写四个方面,练习要着重说和写。 第三学习语法时,应多用比较法。如对动词时态、冠词、介词、名词的单、复数等较难的语法项目进行相互比较,效果就比较好。 第四要将语法法则与习惯用法分开。碰到习惯用法,就不必钻牛角尖,进行徒劳的分析。而习惯用法在英语中则是大量地存在着的。 第五将一本语法书通读一遍,当然也不无好处。但最好将它作为工具书,像词典一样地经常查阅,始能学得比较细致牢靠。 第六实用英语语法只应是入门的向导,像一根拐棍一样。英语达到一定水平之后,就应将它扔掉。起码不要让许多语法条条充斥头脑,影响你说和写的流利性。 最后可能还会有人说,语法应该学,就是太枯燥。我的感觉是:开头有点枯燥,过些时候,就会像嚼橄榄似的,越学越有味了。如若不信,请试试看。 全国优秀畅销书,薄冰、张道真系列语法图书销售突破220万册!

Unity3D客户端和Java服务端使用Protobuf

Unity3D客户端和Java服务端使用Protobuf 本文测试环境: 系统:WINDOWS 7(第3、6步)、OS X 10.9(第4步)软件:VS 2012(第3、6步)、Eclipse(第5、6步) 硬件:iPad 2(第4步)、Macbook Pro Mid 2012(第4步)文章目录: 1、关于Protobuf的C#实现 2、为什么有些Protobuf发布到iOS就用不了,甚至有些在PC都用不了? 3、手动处理C#版本的Protobuf 3.1、创建一个C#工程,先手动创建每一个要通过Protobuf序列化或反序列化的数据模型类,然后导出dll 3.2、创建一个用于序列化的C#工程,然后运行生成dll 3.3、将上面两个工程生成的dll拖到unity中 4、在Unity中反序列化Protobuf 5、服务端Java也用Protobuf 6、太烦了?!客户端也要自动处理Protobuf1、关于Protobuf 的C#实现 首先,U3D里面Protobuf使用的是C#的实现,那么目前有几个可选的C#实现:

C#: https://www.360docs.net/doc/b615925867.html,/p/protobuf-csharp-port C#: https://www.360docs.net/doc/b615925867.html,/p/protosharp/ C#: https://https://www.360docs.net/doc/b615925867.html,/protobuf/ C#/.NET/WCF/VB: https://www.360docs.net/doc/b615925867.html,/p/protobuf-net/我这里选用的是https://www.360docs.net/doc/b615925867.html,/p/protobuf-net/(你可以在 https://https://www.360docs.net/doc/b615925867.html,/p/protobuf-net/downloads/list 这里下载到他的代码和工具),它比较好的一点是,提供了各种平台的支持,解压后在“Full”目录中可以看到各个平台的支持看到里面的unity了吗,它里面的protobuf-net.dll将是我们准备用到的。2、为什么有些Protobuf发布到iOS就用不了,甚至有些在PC都用不了? a、Protobuf使用了JIT,即在运行时动态编译,而这个特性在Unity发布到iOS时候是不支持的。因此,会导致你在PC 上可以正常运行,发布到iOS就有问题。 b、Protobuf是基于.net 2.0以上框架写的,而Unity仅支持.net 2.0,或者有些使用2.0中比较多的特性,而你在Unity 中发布设置了.net 2.0的子集。后者你只需要在Player setting中修改设置就可以了。 上面两项也可适用于其它第三方类库,如果你自己下载了一个在PC上或C#里面能正常使用的类库,在U3D里面就不能用了,那么请检查是否是上面两条原因导致的。3、手动

薄冰高中英语语法之22·倒装

薄冰高中英语语法之 倒装 主编薄冰 执行主编庄志琳葛炳芳田绍慧 山西教育出版社2014年最新版 出版人雷俊林 出版策划苗补坤 责任编辑张荣荣 ISBN 978-7-5440-5630-4 语法学习交流微平台纸介图书京东旗舰店纸介图书天猫旗舰店百度阅读手持媒体免费读

全国优秀畅销书,薄冰、张道真系列语法图书销售突破220万册! 丨学英语,凭什么让我学语法吗??? 不时听到一些青年问道:学英语一定要学语法吗?语法应该怎么学呢?我们 就这两个问题简单地谈一点个人意见。 对中国学生来说,尤其是成年人,我看是学点语法好。语法,顾名思义,乃是语 言的法则和规律。学习语法,尤其是一些基本法则,至少有下列几个好处: 第一 可以使你学得快些,因为已有现成的前人总结的法则,用不着你从 头摸索。 第二 可以使你学得透些,因为通过语法对语言现象不仅可以知其然,而 且可以知其所以然。 第三 可以使你学得准些,因为语法法则就是一条条准绳,可以用以衡量 一句话是否正确。 第四 语法不但可以引你入门,更可以引你入胜,使你逐渐眼界开阔,语感加深,从而使你的英语水平不断提高。 丨那么应该如何学习语法呢? 我认为在学习语法过程中,应该注意下面几点: 第一 基本概念最重要。在学习每个语法项目时,一定要把它的基本概念 搞清,牢记在心。 第二 要大量地实践,大量地练习。实践要包括听、说、读、写四个方面, 练习要着重说和写。 第三 学习语法时,应多用比较法。如对动词时态、冠词、介词、名词的 单、复数等较难的语法项目进行相互比较,效果就比较好。 第四 要将语法法则与习惯用法分开。碰到习惯用法,就不必钻牛角尖, 进行徒劳的分析。而习惯用法在英语中则是大量地存在着的。 第五 将一本语法书通读一遍,当然也不无好处。但最好将它作为工具书, 像词典一样地经常查阅,始能学得比较细致牢靠。 第六 实用英语语法只应是入门的向导,像一根拐棍一样。英语达到一定 水平之后,就应将它扔掉。起码不要让许多语法条条充斥头脑,影响你说和写的 流利性。 最后 可能还会有人说,语法应该学,就是太枯燥。我的感觉是:开头有 点枯燥,过些时候,就会像嚼橄榄似的,越学越有味了。如若不信,请试试看。

分布式数据库原理及应用实验10-redis与hbase安装

《分布式数据库原理及应用》 实验报告 实验10:redis与hbase安装

一、实验目的 1.掌握redis与hbase的特点。 2.掌握redis与hbase的安装。 二、实验环境 操作系统自定 三、实验内容与实验过程及分析(写出详细的实验步骤,并分析实验结果) 实验内容: 1.梳理mongodb,neo4j,memcache,redis,hbase的异同 2.完成redis的安装与测试 3.完成hbase的安装与测试 实验步骤: 1.梳理mongodb,neo4j,memcache,redis,hbase的异同 Redis 所用语言:C/C++ 特点:运行异常快使用许可: BSD 协议:类 Telnet 有硬盘存储支持的内存数据库 Master-slave复制 虽然采用简单数据或以键值索引的哈希表,但也支持复杂操作。 Redis支持事务,支持哈希表,支持排序sets,支持队列(阻塞/非阻塞),支持将数据设置成过期数据(类似快速缓冲区设计) Pub/Sub允许用户实现消息机制。最佳应用场景:适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。 例如:股票价格、数据分析、实时数据搜集、实时通讯。 Master-slave复制:如果同一时刻只有一台服务器处理所有的复制请求,这被称为Master-slave复制,通常应用在需要提供高可用性的服务器集群。 MongoDB 所用语言:C++ 特点:保留了SQL一些友好的特性(查询,索引) 使用许可: AGPL(发起者: Apache)协议: Custom binary( BSON) Master/slave复制(支持自动错误恢复,使用 sets 复制)内建分片机制 支持javascript表达式查询可在服务器端执行任意的 javascript函数 update-in-place支持比CouchDB更好。在数据存储时采用内存到文件映射对性能的关注超过对功能的要求建议最好打开日志功能(参数–journal) 最佳应用场景:适用于需要动态查询支持;需要使用索引而不是 map/reduce功能;需要对

薄冰初中英语语法之· 动词

薄冰初中英语语法之 动词 主编薄冰 执行主编秦桂枝王璐孙晓芳 山西教育出版社 2014年第四版 出版人雷俊林 出版策划苗补坤 责任编辑仇小燕 ISBN 978-7-5440-5629-8 语法学习交流微平台纸介图书京东旗舰店纸介图书天猫旗舰店百度阅读手持媒体免费读

全国优秀畅销书,薄冰、张道真系列语法图书销售突破220万册! 丨学英语,凭什么让我学语法吗??? 不时听到一些青年问道:学英语一定要学语法吗?语法应该怎么学呢?我们 就这两个问题简单地谈一点个人意见。 对中国学生来说,尤其是成年人,我看是学点语法好。语法,顾名思义,乃是语 言的法则和规律。学习语法,尤其是一些基本法则,至少有下列几个好处: 第一 可以使你学得快些,因为已有现成的前人总结的法则,用不着你从 头摸索。 第二 可以使你学得透些,因为通过语法对语言现象不仅可以知其然,而 且可以知其所以然。 第三 可以使你学得准些,因为语法法则就是一条条准绳,可以用以衡量 一句话是否正确。 第四 语法不但可以引你入门,更可以引你入胜,使你逐渐眼界开阔,语 感加深,从而使你的英语水平不断提高。 丨那么应该如何学习语法呢? 我认为在学习语法过程中,应该注意下面几点: 第一 基本概念最重要。在学习每个语法项目时,一定要把它的基本概念 搞清,牢记在心。 第二 要大量地实践,大量地练习。实践要包括听、说、读、写四个方面, 练习要着重说和写。 第三 学习语法时,应多用比较法。如对动词时态、冠词、介词、名词的 单、复数等较难的语法项目进行相互比较,效果就比较好。 第四 要将语法法则与习惯用法分开。碰到习惯用法,就不必钻牛角尖, 进行徒劳的分析。而习惯用法在英语中则是大量地存在着的。 第五 将一本语法书通读一遍,当然也不无好处。但最好将它作为工具书, 像词典一样地经常查阅,始能学得比较细致牢靠。 第六 实用英语语法只应是入门的向导,像一根拐棍一样。英语达到一定 水平之后,就应将它扔掉。起码不要让许多语法条条充斥头脑,影响你说和写的 流利性。 最后 可能还会有人说,语法应该学,就是太枯燥。我的感觉是:开头有 点枯燥,过些时候,就会像嚼橄榄似的,越学越有味了。如若不信,请试试看。

相关文档
最新文档