精华内容
下载资源
问答
  • 一、命令说明 mmc_go_idle  发送CMD0指令,GO_IDLE_STATE  使mmc card进入idle state。  虽然进入到了Idle State,但是上电复位过程并不一定完成了,这主要靠读取OCR的busy位来判断,而流程归结为下一步。 ...

    一、命令说明

    • mmc_go_idle 
      发送CMD0指令,GO_IDLE_STATE 
      使mmc card进入idle state。 
      虽然进入到了Idle State,但是上电复位过程并不一定完成了,这主要靠读取OCR的busy位来判断,而流程归结为下一步。

    • mmc_send_op_cond 
      发送CMD1指令,SEND_OP_COND 
      这里会设置card的工作电压寄存器OCR,并且通过busy位(bit31)来判断card的上电复位过程是否完成,如果没有完成的话需要重复发送。 
      完成之后,mmc card进入ready state。

    • mmc_all_send_cid 
      这里会发送CMD2指令,ALL_SEND_CID 
      广播指令,使card回复对应的CID寄存器的值。在这里就相应获得了CID寄存器的值了,存储在cid中。 
      完成之后,MMC card会进入Identification State。

    • mmc_set_relative_addr 
      发送CMD3指令,SET_RELATIVE_ADDR 
      设置该mmc card的关联地址为card->rca,也就是0x0001 
      完成之后,该MMC card进入standby模式。

    • mmc_send_csd 
      发送CMD9指令,MMC_SEND_CSD 
      要求mmc card发送csd寄存器,存储到card->raw_csd中,也就是原始的csd寄存器的值。 
      此时mmc card还是处于standby state

    • mmc_select_card & mmc_deselect_cards 
      发送CMD7指令,SELECT/DESELECT CARD 
      选择或者断开指定的card 
      这时卡进入transfer state。后续可以通过各种指令进入到receive-data state或者sending-data state依次来进行数据的传输

    • mmc_get_ext_csd 
      发送CMD8指令,SEND_EXT_CSD 
      这里要求处于transfer state的card发送ext_csd寄存器,这里获取之后存放在ext_csd寄存器中 
      这里会使card进入sending-data state,完成之后又退出到transfer state。

    • mmc_switch 
      发送CMD6命令,MMC_SWITCH 
      用于设置ext_csd寄存器的某些bit

    • mmc_send_status 
      发送CMD13命令,MMC_SEND_STATUS 
      要求card发送自己当前的状态寄存器

    • mmc_send_cid 
      发送CMD10命令,MMC_SEND_CID 
      要求mmc card回复cid寄存器

    • mmc_card_sleepawake 
      发送CMD5命令,MMC_SLEEP_AWAKE 
      使card进入或者退出sleep state,由参数决定。

    二、初始化顺序

    1.power up emmc

    2.设置电压,配置阶段为400khz

    3.设置位宽为1bit

    4.cmd0

    5.cmd1循环一直到检测到emmc返回的电源状态稳定

    6.cmd2获取cid

    7.cmd3 设置rca,如果获取到的数值不正确,可以手动设置为0x01

    8.cmd9 获取csd

    9.可以重新配置工作速率

    10.cmd7 设置为transfer mode

    11.cmd8获取额外的csd信息

    12.cmd 16设置block len

    13.cmd6 设置工作bit模式

    14读cmd17.18

    15.写cmd24.25

    三、EMMC的主机配置

    主机的配置最先要注意的就是IO的配置,很多复用的管脚,是否是EMMC的CMD和DATA功能配置

    展开全文
  • Swagger2常用注解说明

    万次阅读 多人点赞 2020-07-20 23:40:14
    文章目录Swagger2简介使用Swagger解决的问题Spring Boot集成Swagger2添加依赖添加Swagger2Config配置类编写接口用户DTO用户controller访问接口文档Swagger2常用注解说明Controller相关注解@Api接口相关注解@...

    Swagger2简介

    swagger官网 对 swagger 的描述如下:

    Swagger takes the manual work out of API documentation, with a range of solutions for generating, visualizing, and maintaining API docs.

    Simplify API development for users, teams, and enterprises with the Swagger open source and professional toolset.

    Swagger提供了用于生成,可视化和维护API文档的一系列解决方案,从而使API文档不再需要人工操作。

    借助Swagger开源和专业工具集,为用户,团队和企业简化API开发。

    我的总结:Swagger 是一套基于 OpenAPI 规范构建的开源工具,可以帮助我们设计、构建、使用和测试 Rest API。

    使用Swagger解决的问题

    现在大部分公司都采用前后端分离开发的模式,前端和后端工程师各司其职。这就要求有一份及时更新且完整的Rest API 文档来提高工作效率。Swagger 解决的问题主要有以下三点:

    1. 保证文档的时效性:只需要少量的注解,Swagger 就可以根据代码自动生成 API 文档,代码变文档跟着变
    2. 接口请求参数和返回结果不明确的问题
    3. 在线测试接口

    Spring Boot集成Swagger2

    这里通过构建一个简单的Spring Boot项目,并使用Swagger注解,来演示如何使用Swagger

    添加依赖

    这里没有添加springfox-swagger2和springfox-swagger2-ui依赖,而是使用knife4j-spring-boot-starter依赖,官网地址:https://doc.xiaominfo.com/knife4j/

    <!-- 一些校验的依赖,不然启动会报NoClassDefFoundError: javax/validation/constraints/Min -->
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>2.0.1.Final</version>
    </dependency>
    
    <!-- Spring Boot单服务架构使用最新版的knife4j依赖,已经继承swagger依赖,同时增强UI实现 -->
    <dependency>
        <groupId>com.github.xiaoymin</groupId>
        <artifactId>knife4j-spring-boot-starter</artifactId>
        <version>2.0.3</version>
    </dependency>
    
    <!-- lombok依赖 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    
    <!-- spring-boot-starter-web依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    添加Swagger2Config配置类

    注意:RequestHandlerSelectors.basePackage("com.jourwon.springboot.knife4j.controller") 为 Controller 包路径,不然生成的文档扫描不到接口,也可以使用RequestHandlerSelectors.any()配置

    /**
     * Swagger2配置类
     *
     * @author JourWon
     * @date 2020/6/1
     */
    @EnableKnife4j
    @EnableSwagger2
    @Configuration
    @Import(value = {BeanValidatorPluginsConfiguration.class})
    public class Swagger2Config {
    
        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    .apis(RequestHandlerSelectors.any())
                    .paths(PathSelectors.any())
                    .build();
        }
    
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    // 标题
                    .title("我的Swagger API文档")
                    // 描述
                    .description("使用Knife4j构建API文档")
                    // 作者信息
                    .contact(new Contact("ThinkWon", "https://thinkwon.blog.csdn.net/", "thinkwon@163.com"))
                    // 服务网址
                    .termsOfServiceUrl("https://thinkwon.blog.csdn.net/")
                    // 版本
                    .version("1.0.0")
                    .build();
        }
    
    }
    

    编写接口

    用户DTO

    /**
     * 用户
     *
     * @author JourWon
     * @date 2020/6/1
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @ApiModel(value = "用户", description = "查询用户")
    public class UserDTO implements Serializable {
    
        private static final long serialVersionUID = 78806598597025327L;
    
        @ApiModelProperty(value = "用户id")
        private Integer userId;
    
        @ApiModelProperty(value = "用户名")
        private String username;
    
    }
    

    用户controller

    
    /**
     * 用户controller
     *
     * @author JourWon
     * @date 2020/6/1
     */
    @RestController
    @RequestMapping(value = {"/user"})
    @Api(tags = {"用户controller"})
    public class UserController {
    
        private List<UserDTO> list = new ArrayList<>();
    
        @PostConstruct
        private void post() {
            list.add(new UserDTO(1, "JourWon"));
            list.add(new UserDTO(2, "Jobs"));
            list.add(new UserDTO(3, "JackMa"));
        }
    
        @GetMapping("/list")
        @ApiOperation(value = "查询用户列表")
        public List<UserDTO> list() {
            return list;
        }
    
        @GetMapping("/page")
        @ApiOperation(value = "分页查询用户列表")
        @ApiImplicitParams({
                @ApiImplicitParam(name = "pageNum", value = "当前页数"),
                @ApiImplicitParam(name = "pageSize", value = "每页记录数")
        })
        public List<UserDTO> page(
                @RequestParam(defaultValue = "1", required = false) Integer pageNum, @RequestParam(defaultValue = "10", required = false) Integer pageSize) {
            return list;
        }
    
        @GetMapping("/{userId}")
        @ApiOperation(value = "根据用户id查询用户")
        public UserDTO get(@PathVariable("userId") Integer userId) {
            for (UserDTO userDTO : list) {
                if (userDTO.getUserId().equals(userId)) {
                    return userDTO;
                }
            }
            return new UserDTO();
        }
    
        @PostMapping
        @ApiOperation(value = "新增用户")
        public Boolean insert(@RequestBody @ApiParam(name = "UserDTO", value = "新增用户参数") UserDTO userDTO) {
            list.add(userDTO);
            return true;
        }
    
        @DeleteMapping("/{userId}")
        @ApiOperation(value = "根据用户id删除用户")
        public Boolean delete(@PathVariable("userId") Integer userId) {
            Iterator<UserDTO> iterator = list.iterator();
            while (iterator.hasNext()) {
                if (iterator.next().getUserId().equals(userId)) {
                    iterator.remove();
                    return true;
                }
            }
            return false;
        }
    
        @PutMapping
        @ApiOperation(value = "更新用户信息")
        @ApiResponses({
                @ApiResponse(code = 400, message = "请求参数没填好"),
                @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")
        })
        public Boolean update(@RequestBody @ApiParam(name = "UserDTO", value = "更新用户参数") UserDTO userDTO) {
            Iterator<UserDTO> iterator = list.iterator();
            while (iterator.hasNext()) {
                UserDTO next = iterator.next();
                if (next.getUserId().equals(userDTO.getUserId())) {
                    next.setUsername(userDTO.getUsername());
                    return true;
                }
            }
            return false;
        }
    
    }
    

    这个controller有了六个接口,分别是:

    1. /user/list,get请求方式:查询用户列表
    2. /user/page,get请求方式:分页查询用户列表
    3. /user/{userId},get请求方式:根据用户id查询用户
    4. /user,post请求方式:新增用户
    5. /user,put请求方式:更新用户信息
    6. /user/{userId},delete请求方式:根据用户id删除用户

    访问接口文档

    启动一下项目,然后在浏览器中访问 http://localhost:8080/doc.html

    主页展示API文档基本信息,包括简介,作者,版本等信息

    在这里插入图片描述

    同时可以看到用户controller的所有接口

    在这里插入图片描述

    这里我们调试以下查询用户列表的接口

    在这里插入图片描述

    至此,Spring Boot集成Swagger2,构建API文档已经完成

    Swagger2常用注解说明

    Controller相关注解

    @Api

    用在请求的类上,表示对类的说明

    注解属性 类型 描述
    tags String[] 描述请求类的作用,非空时会覆盖value的值
    value String 描述请求类的作用
    非常用参数
    produces String 设置 MIME 类型列表(output),例:“application/json, application/xml”,默认为空
    consumes String 设置 MIME 类型列表(input),例:“application/json, application/xml”,默认为空
    protocols String 设置特定协议,例:http, https, ws, wss
    authorizations Authorization[] 获取授权列表(安全声明),如果未设置,则返回一个空的授权值
    hidden boolean 默认为 false,配置为 true 将在文档中隐藏
    description String 对 api 资源的描述,在 1.5 版本后不再支持
    basePath String 基本路径可以不配置,在 1.5 版本后不再支持
    position int 如果配置多个 Api 想改变显示的顺序位置,在 1.5 版本后不再支持

    示例

    @Api(tags = {"用户controller"})
    public class UserController {}
    

    接口相关注解

    @ApiOperation

    用在请求类的方法上,说明方法的用途和作用

    注解属性 类型 描述
    value String 方法的简要说明
    notes String 方法的备注说明
    非常用参数
    tags String[] 操作标签,非空时将覆盖value的值
    response Class<?> 响应类型(即返回对象)
    responseContainer String 声明包装的响应容器(返回对象类型)。有效值为 “List”, “Set” or “Map”
    responseReference String 指定对响应类型的引用。将覆盖任何指定的response()类
    httpMethod String 指定HTTP方法,“GET”, “HEAD”, “POST”, “PUT”, “DELETE”, “OPTIONS” and “PATCH”
    position int 如果配置多个 Api 想改变显示的顺序位置,在 1.5 版本后不再支持
    nickname String 第三方工具唯一标识,默认为空
    responseHeaders ResponseHeader[] 响应头列表
    code int 响应的HTTP状态代码。默认 200
    extensions Extension[] 扩展属性列表数组
    produces String 设置 MIME 类型列表(output),例:“application/json, application/xml”,默认为空
    consumes String 设置 MIME 类型列表(input),例:“application/json, application/xml”,默认为空
    protocols String 设置特定协议,例:http, https, ws, wss
    authorizations Authorization[] 获取授权列表(安全声明),如果未设置,则返回一个空的授权值
    hidden boolean 默认为 false,配置为 true 将在文档中隐藏

    示例

    @GetMapping("/list")
    @ApiOperation(value = "查询用户列表")
    public List<UserDTO> list() {
        return list;
    }
    

    @ApiParam

    可用在方法,参数和字段上,一般用在请求体参数上,描述请求体信息

    注解属性 类型 描述
    name String 参数名称,参数名称可以覆盖方法参数名称,路径参数必须与方法参数一致
    value String 参数的简要说明
    required boolean 参数是否必须传,默认为 false (路径参数必填)
    defaultValue String 参数的默认值
    非常用参数
    allowableValues String 限制参数的可接受值。1.以逗号分隔的列表 2.范围值 3.设置最小值/最大值
    access String 允许从API文档中过滤参数
    allowMultiple boolean 指定参数是否可以通过具有多个事件接受多个值,默认为 false
    example String 单个示例
    examples Example 参数示例。仅适用于 BodyParameters
    hidden boolean 默认为 false,配置为 true 将在文档中隐藏
    @PostMapping
    @ApiOperation(value = "新增用户")
    public Boolean insert(@RequestBody @ApiParam(name = "UserDTO", value = "新增用户参数") UserDTO userDTO) {
        list.add(userDTO);
        return true;
    }
    

    @ApiImplicitParams

    用在请求的方法上,表示一组参数说明,里面是@ApiImplicitParam列表

    @ApiImplicitParam

    用在 @ApiImplicitParams 注解中,一个请求参数的说明

    注解属性 类型 描述
    name String 参数名称,参数名称可以覆盖方法参数名称,路径参数必须与方法参数一致
    value String 参数的说明、解释
    required boolean 参数是否必须传,默认为 false (路径参数必填)
    paramType String 参数的位置,header 请求参数的获取:@RequestHeader;query 请求参数的获取:@RequestParam;path(用于 restful 接口)–> 请求参数的获取:@PathVariable;body(不常用);form(不常用)
    dataType String 参数类型,默认 String,其它值 dataType=“Integer”
    defaultValue String 参数的默认值
    非常用参数
    allowableValues String 限制参数的可接受值。1.以逗号分隔的列表 2.范围值 3.设置最小值/最大值
    access String 允许从API文档中过滤参数
    allowMultiple boolean 指定参数是否可以通过具有多个事件接受多个值,默认为 false
    example String 单个示例
    examples Example 参数示例。仅适用于 BodyParameters
    @GetMapping("/page")
    @ApiOperation(value = "分页查询问题列表")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "pageNum", value = "当前页数"),
        @ApiImplicitParam(name = "pageSize", value = "每页记录数")
    })
    public List<UserDTO> page(
        @RequestParam(defaultValue = "1", required = false) Integer pageNum, @RequestParam(defaultValue = "10", required = false) Integer pageSize) {
        return list;
    }
    

    @ApiResponses

    用在请求的方法上,表示一组响应

    @ApiResponse

    用在 @ApiResponses 中,一般用于表达一个错误的响应信息

    注解属性 类型 描述
    code int 响应状态码
    message String 信息,例如 “请求参数没填好”
    response Class<?> 抛出异常的类

    示例

    @PutMapping
    @ApiOperation(value = "更新用户信息")
    @ApiResponses({
        @ApiResponse(code = 400, message = "请求参数没填好"),
        @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")
    })
    public Boolean update(@RequestBody @ApiParam(name = "UserDTO", value = "更新用户参数") UserDTO userDTO) {}
    

    Model相关注解

    @ApiModel

    用在实体类(模型)上,表示相关实体的描述。

    注解属性 类型 描述
    value String 模型的备用名称
    description String 该类的详细说明

    示例

    @ApiModel(value = "用户", description = "查询用户")
    public class UserDTO implements Serializable
    

    @ApiModelProperty

    用在实体类属性上,表示属性的相关描述。

    注解属性 类型 描述
    value String 属性简要描述
    name String 重写属性名称
    dataType Stirng 重写属性类型
    required boolean 参数是否必传,默认为 false
    example Stirng 属性示例
    非常用参数
    hidden boolean 是否在文档中隐藏该属性,默认false
    allowEmptyValue boolean 是否允许为空,默认false
    allowableValues String 限制参数的可接受值。1.以逗号分隔的列表 2.范围值 3.设置最小值/最大值
    readOnly boolean 将属性设定为只读,默认false
    reference String 指定对相应类型定义的引用,覆盖指定的任何参数值

    示例

    @ApiModelProperty(value = "用户id")
    private Integer userId;
    
    @ApiModelProperty(value = "用户名")
    private String username;
    
    展开全文
  •  序号Sequence Number,有顺序的号码,如数字序号:1、2、3……,大写汉字也算数字序号,如:一、二、三……序号可以清晰的分清同一类事物,也可以用序号作文章的小标题。我们在写文章,特别是在写论文中经常会用...

     

    一.序号

      序号Sequence Number,有顺序的号码,如数字序号:1、2、3……,大写汉字也算数字序号,如:一、二、三……序号可以清晰的分清同一类事物,也可以用序号作文章的小标题。我们在写文章,特别是在写论文中经常会用一些数字序号,正确地运用序号,能使我们的文章层次清楚,逻辑分明,便于读者阅读和引述;目前较多论文在序号的写法上存在着不少的误区,如:层次大小不分、中文数字与阿拉伯数字混用、前后序号形式不统一,等等。用得不好,让人看着别扭,甚至会影响文章的质量,可见序号也是文章的一个重要组成部分,它的规范与否同样很重要。在评选论文时,常常会为一些文章感到惋惜,内容、文字很精彩,可数字序号的运用不规范或者混乱,让人看着不舒服。正文层次标题序号要注意大小分级,为此,我根据自己的使用习惯,并参考一些资料,在此谈谈有关数字序号的用法,对序号规范写法作一详细说明:

    、序号的结构层次顺序

    (一)数字序号的级别顺序为:

    第一层为汉字数字加顿号,例如:“一、”“二、”“三、”;

    第二层为括号中包含汉字数字,例如:“(一)”“(二)”“(三)”;

    第三层为阿拉伯数字加下脚点,例如:“1. ”“2.”“3.”;

    第四层为括号中包含阿拉伯数字,例如:“(1)”“(2)”“(3)”;

    第五层为带圈的阿拉伯数字,例如:“①”“②”“③”或者“1)”“2)”“3)”;

    第六层为大写英文字母,例如:“A.”“B.”“C.”或者“(A)”“(B)”“(C)”;

    第七层为小写英文字母,例如: “a.”“b.”“c.”或者“(a)”“(b)”“(c)”;

    ……

    数字序号级别一览表:

    第一层

    第二层

    第三层

    第四层

    第五层

    第六层

    第七层

    一、

    (一)

    1.

    (1)

    A.

    a.

    二、

    (二)

    2.

    (2)

    B.

    b.

    三、

    (三)

    3.

    (3)

    C.

    c.

     

     

     

     

     

    (A)

    (a)

     

     

     

     

     

    (B)

    (b)

     

     

     

     

     

    (C)

    (c)

     

     

    第一,

     

     

     

     

     

     

    第二,

     

     

     

     

     

     

    首先,

     

     

     

     

     

     

    其次,

     

     

     

     

    (二)理科类论文的正文层次标题序号

    理科类论文的各层次标题还可用阿拉伯数字连续编码,不同层次的2个数字之间用下圆点(.)分隔开,末位数字后面不加点号。如“1”,“1.2”,“1.2.1”等;各层次的标题序号均左顶格排写,最后一个序号之后空一个字距接排标题。如“5.3.2 测量的方法”,表示第五章第三节第二条的标题是“测量的方法”。

    注意:同一层次各段内容是否列标题应一致,各层次的下一级序号标法应一致,若层次较少可不用若干加括号的序号。

    (三)正文中图、表、公式、算式等的序号

    正文中的图、表、公式、算式等序号一律用阿拉伯数字分别依序连续编排序号,其标注形式应便于互相区别,如“图1、表2、式(5)”等;对长篇研究报告也可以分章(条)依序编码,如“图2.1、表4.2、式(3.3)”等,其前一个数字表示章(条)序号,后一个数字表示本章中图表、公式的序号。

    、文字材料中序号、标点的正确使用

    (一)“第一”、“第二”、“第三”或“首先”、“其次”等后面用顿号不规范,应该用逗号“,”,即“第一,”、“第二,”、“第三,”、“首先,”、“其次,”等。

    (二)“第一编”、“第一章”、“第一节”或“壹”的后面不用标点,与后面的文字之间空一个汉字位置即可。如“第一节 测量的方法”。

        (三)汉字数字“一”、“二”、“三”等后面用逗号不规范,应该用顿号“、”,即“一、”、“二、”、“三、”。

        (四)阿拉伯数字“1”、“2”、“3”和“A”、“B”、“C”等后面用顿号(“、”)或其它不规范,应该使用齐线墨点(实心小圆点“.”),即“ 1.”、“ 2.”、“ 3.” 或“ A.”、“ B.”、“ C.”。

    (五)带括号的序号和带圆圈的序号,如(一)(二)(三)、(1)(2)(3)、①②③等后面不再加顿号、逗号之类的标点符号。

    (六)用“一是”、“二是”、“三是”表示顺序时,可在“一是”、“二是”、“三是”之后分别用逗号。例如:“一是,”、“二是,”、“三是,”。也可以不用标点符号,直接连接下文。

    (七)用“甲”、“乙”、“丙”、“丁”表示顺序时,在“甲”、“乙”、“丙”、“丁”之后分别用顿号“、”。例如:“甲、”,“乙、”,“丙、”,“丁、”。

    (八)在“一方面”、“另一方面”之后,可以分别用逗号,也可以不用标点符号,直接连接下文。

    (九)数字序号前后一般不再用其他项目符号。

    、年份的正确书写

    (一)年份中“零”的正确使用:

    年份如用中文形式表示,如“二○○九年十月五日”,则中间的汉字数字“○”不能写成阿拉伯数字的长“0”或英语全角字符“O”,而应该用圆“○”(一般在电脑“插入”栏里“特殊符号”或“几何图形符”中选择)。“二○○九”是一串没有数位的数字,要用“○”,不宜用“零” ,例如公文中的错误写法:“二零零九”。“零”用于出现数位的一串汉字数字中,例如“三千一百零六”中,出现了数位“千”、“百”,此时应当用“零”。

    年份如用阿拉伯数字形式表示,则中间应该用长“0”表示,例如:“2009年10月5日”。但对于公文文末成文时间书写规范又有要求:《国家行政机关公文处理办法》(国务院国发〔2000〕23号)规定,公文文末的成文时间要用汉字数字来书写。例如:“2008年12月28日”应当写成“二○○八年十二月二十八日”。

    (二)公文的年份中“括号”的正确使用:

    《国家行政机关公文格式》(GB/T 9704—1999)规定,公文发文字号中的年分要写在六角括号内,而不应该用小括号“( )”或方括号“[ ]”。

    例如:潍教办字(2005)5号(不规范)

    潍教办字 [2005] 5号(不规范)

    潍教办字[2005]5号(不规范)

    潍教办字〔2005〕5号(规范)

    、汉语拼音注音字母的正确使用

    (一)大小写:句子的首字母大写;诗行的首字母大写;专有名词每个词首字母大字;标题、标语可以全部大写。

    (二)分连写:词内连写,词间分写。

    例如:“公共场所请勿吸烟”      GONG GONG CHANG SUO QING WU XI YAN(不规范)

     GONGGONG CHANGSUO QINGWU XIYAN(规范)

    例如:“中国井冈山经贸洽谈会”  ZHONGGUOJINGGANGSHANJINGMAOQIATANHUI(不规范)

     ZHONGGUO JINGGANGSHAN JINGMAO QIATANHUI(规范)

    、正确区分连接号和破折号

     (一)凡文中使用连接号的应使用“~”,而不使用“——”或者“―”。

    如:2008年3月~4月中的“~”(使用规范),而不使用“——”或者“―”。

     (二)凡文中使用破折号的应使用占两个空格的连线“——”,而不用“~”或只占一个空格的短线“―”或两个短线“――”表示。

    如:再接再厉,推进语言文字规范化工作——2009年语言文字工作总结(选取破折号,一般在电脑“插入”栏“标点符号”中查找)。

    、相邻的两个数字间顿号的使用

    (一)相邻的两个数字表示概数,要用汉字数码,中间也不要加顿号。

    例如:2、3个  5、6天   27、8岁   6、7点钟  (不规范)

    两三个   五六天   二十七八岁   六七点钟  (规范)

    (二)相邻两个数字连用,有时不是表示概数,而是一种缩略形式,中间要用顿号。

    例如:初中一、二年级    国棉六、七厂    八、九两个月    退居二、三线(规范)

    、文章正文文中标题

    一级标题:标题序号为“一、”,独占行,末尾不加标点;

    二级标题:标题序号为“(一)”,与正文字体字号相同,独占行,末尾不加标点符号;

    三级以下标题:三、四、五级标题序号分别为“1.”、“(1)”和“①”,与正文字体字号相同,可根据标题的长短确定是否独占行。若独占行,则末尾不使用标点;否则,标题后必须加句号。每级标题的下一级标题应各自连续编号。

    、注释和参考文献的序号

    文中注释极少量的可用“*”、“**”表示,一般用圆圈的阿拉伯数字依序标注,如“①、②、③……”,标在所注对象的右上角。页脚或文末注释中对于相同内容的注释条目可合并写,如“⑥⑨马斯洛,《存在心理学探索》,昆明:云南人民出版社,1987年,130、126页”。

    参考文献的序号标注一般用方括号的阿拉伯数字,如“[1]、[2]、[3]……”,也有不加括号的。文末参考文献与文中内容对应的,应在相应文字的右上角依序标出序号。

    、附录序号

    论文的附录序号一般用大写英文字母标示,如“附录A、附录B、附录C……”。附录中的图、表、式、参考文献等另行编序号,与正文分开,也一律用阿拉伯数字编码,但在数码前冠以附录序码,如:图A1、表B2、式(C3)、文献[D4]等。

    十一、页码序号

    页码标注由正文的首页开始,作为第1页,可以标注在页眉或页脚的中间或右边。封面、封二、封三和封底不编入页码。可以将扉页、序、目次页等前置部分单独编排页码。各页页码应标注在相同位置。

     

    十二常见不规范之序号有:

    1、

    A、

    (一)、

    (1)、

    ①、

    第一:

    第一、

    2、

    B、

    (二)、

    (2)、

    ②、

    第二:

    第二、

    3、

    C、

    (三)、

    (3)、

    ③、

    第三:

    第三、

    规范的序号用法如下:

    1.

    A.

    (一)

    (1)

    第一,

    首先,

    2.

    B.

    (二)

    (2)

    第二,

    其次,

    3.

    C.

    (三)

    (3)

    第三,

    再次,

    转载于:https://www.cnblogs.com/zhangj95/p/5020357.html

    展开全文
  • 算是温习吧。问题比较基础,但是也比较...但是这三个部分的执行顺序是什么,这是我们所关心的,也是本文所要讨论的。 下面先看一段简单的代码。 [cpp] view plaincopy #include   

    算是温习吧。问题比较基础,但是也比较重要。(虽然是C,但是很经典)

    for循环可以说在每个程序中都少不了的,语句头包括三个部分:初始化,判读条件,一个表达式。

    但是这三个部分的执行顺序是什么,这是我们所关心的,也是本文所要讨论的。

    下面先看一段简单的代码。

    1. #include <stdio.h>  
    2.   
    3. int main()  
    4. {  
    5.     int x, a;  
    6.       
    7.     for (x=0,a=0; a<=1 && !x++; a++)  
    8.     {  
    9.         a++;  
    10.     }  
    11.       
    12.     printf("%d", a);  
    13.     return 0;  
    14. }  

    代码很简单,可是打印结果呢?

    有的朋友可能会想当然的认为,  打印结果是1.

    可是,真的是1吗?   复制到编译器上跑跑,奇迹般的发现,其实是2.

    下面就分析下这简单代码。


    第一步:初始化定义,x = 0, a = 0;

    第二步:a小于1, x 的非为1,符合循环条件

    第三步:x++后x自增为1.

    第四步:进入循环体,a++,a自增为1.

    第五步:执行循环语句头中的a++,a自增为2.

    第六步:执行循环语句头的判读条件,a=2>1,故不满足,不执行循环语句。

    第七步:打印a的值为2.


    怎么样,现在豁然开朗了吧。(如果还是不懂...那就抱歉了。)


    从这个例子,我们可以得出如下结论:

    执行顺序是:初始化--判断--函数体——然后for循环的第3句--判断——函数体---for循环的第三句--判断……


    下面解答几点疑惑:

    1、第一次例如初始化i=0,是否还执行后面的i++或++i?

    第一次先初始化,然后判断,i++就不执行了

    2、第一次完了以后,初始化这句就不用了,是先执行i++还是限制性判断语句呢?

    先执行i++

    3、现在知道是先执行i++,再执行判断语句,i++不是后++吗,例如i为1,那i++后执行判断语句,i是几呢?

    i是2.

    4、好像i++和++i在for()里时结果都一样。

    都一样,for语句头的执行顺序决定了这两个写法都一样,都是i++或这++i这两句执行完了再进行判断,此时(两种情况)i已经加1了。


    分析了这么多,相信大家也都懂了。

    留个经典的例子,让大家自己去分析吧。

    1. #include <stdio.h>  
    2.   
    3. int main( )  
    4. {  
    5.     int i = 0, j = 10;  
    6.     for(i=0; i<j; i++,j--)  
    7.     {  
    8.         if(j==10)  
    9.         {  
    10.             printf("%d,%d ",i,j);  
    11.             j--;  
    12.         }  
    13.         j++;  
    14.     }  
    15.     printf("%d,%d ",i,j);  
    16.     return 0;  
    17. }  

    打印结果:

    0,10 9,9 

    如果不懂的,可以参照下面这个对上述例子逐句打印的例子,应该会有助于理解。

    1. #include <stdio.h>  
    2.   
    3. int print1(int i,int j)  
    4. {  
    5.     printf("执行判断条件,i=%d,j=%d \n",i,j);  
    6.     return 1;  
    7. }  
    8.   
    9. int main( )  
    10. {  
    11.     int i = 0, j = 10;  
    12.       
    13.     for(i=0;((print1(i,j)) && (i<j));  
    14.         i++,j--,printf("执行for()中的第三个语句,i=%d,j=%d \n",i,j))  
    15.     {  
    16.         if(j==10)  
    17.         {  
    18.             printf("%d,%d ",i,j);  
    19.             j--;  
    20.         }  
    21.         j++;  
    22.         printf("执行for循环体中的最后一句,i=%d,j=%d\n ",i,j);  
    23.     }  
    24.     printf(" %d,%d ",i,j);  
    25.     return 0;  
    26. }  

    打印结果:

    执行判断条件,i=0,j=10 

    0,10 执行for循环体中的最后一句,i=0,j=10

     执行for()中的第三个语句,i=1,j=9 

    执行判断条件,i=1,j=9 

    执行for循环体中的最后一句,i=1,j=10

     执行for()中的第三个语句,i=2,j=9 

    执行判断条件,i=2,j=9 

    执行for循环体中的最后一句,i=2,j=10

     执行for()中的第三个语句,i=3,j=9 

    执行判断条件,i=3,j=9 

    执行for循环体中的最后一句,i=3,j=10

     执行for()中的第三个语句,i=4,j=9 

    执行判断条件,i=4,j=9 

    执行for循环体中的最后一句,i=4,j=10

     执行for()中的第三个语句,i=5,j=9 

    执行判断条件,i=5,j=9 

    执行for循环体中的最后一句,i=5,j=10

     执行for()中的第三个语句,i=6,j=9 

    执行判断条件,i=6,j=9 

    执行for循环体中的最后一句,i=6,j=10

     执行for()中的第三个语句,i=7,j=9 

    执行判断条件,i=7,j=9 

    执行for循环体中的最后一句,i=7,j=10

     执行for()中的第三个语句,i=8,j=9 

    执行判断条件,i=8,j=9 

    执行for循环体中的最后一句,i=8,j=10

     执行for()中的第三个语句,i=9,j=9 

    执行判断条件,i=9,j=9 

     9,9 








    下面讲述for循环在遍历过程中的使用


    J2SE 1.5提供了另一种形式的for循环。借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象。本文介绍使用这种循环的具体方式,说明如何自行定义能被这样遍历的类,并解释和这一机制的一些常见问题。

    在Java程序中,要“逐一处理”――或者说,“遍历”――某一个数组或Collection中的元素的时候,一般会使用一个for循环来实现(当然,用其它种类的循环也不是不可以,只是不知道是因为for这个词的长度比较短,还是因为for这个词的含义和这种操作比较配,在这种时候for循环比其它循环常用得多)。

    对于遍历数组,这个循环一般是采取这样的写法:

    清单1:遍历数组的传统方式

    /* 建立一个数组 */

    int[] integers = {1, 2, 3, 4};

    /* 开始遍历 */

    for (int j = 0; j<integers.length; j++){

    int i = integers[j];

    System.out.println(i);

    }

    而对于遍历Collection对象,这个循环则通常是采用这样的形式

    清单2:遍历Collection对象的传统方式

    /* 建立一个Collection */

    String[] strings = {"A", "B", "C", "D"};

    Collection stringList = java.util.Arrays.asList(strings);

    /* 开始遍历 */

    for (Iterator itr = stringList.iterator(); itr.hasNext();) {

    Object str = itr.next();

    System.out.println(str);

    }

    而在Java语言的最新版本――J2SE 1.5中,引入了另一种形式的for循环。借助这种形式的for循环,现在可以用一种更简单地方式来进行遍历的工作。

    1. 第二种for循环

    不严格的说,Java的第二种for循环基本是这样的格式:

    for (循环变量类型 循环变量名称 : 要被遍历的对象) 循环体

    借助这种语法,遍历一个数组的操作就可以采取这样的写法:

    清单3:遍历数组的简单方式

    /* 建立一个数组 */

    int[] integers = {1, 2, 3, 4};

    /* 开始遍历 */

    for (int i : integers) {

    System.out.println(i);/* 依次输出“1”、“2”、“3”、“4” */

    }

    这里所用的for循环,会在编译期间被看成是这样的形式:

    清单4:遍历数组的简单方式的等价代码

    /* 建立一个数组 */

    int[] integers = {1, 2, 3, 4};

    /* 开始遍历 */

    for (int 变量名甲 = 0; 变量名甲<integers.length; 变量名甲++)="" {

    System.out.println(integers[变量名甲]);/* 依次输出“1”、“2”、“3”、“4” */

    }

    这里的“变量名甲”是一个由编译器自动生成的不会造成混乱的名字。

    而遍历一个Collection的操作也就可以采用这样的写法:

    清单5:遍历Collection的简单方式

    /* 建立一个Collection */

    String[] strings = {"A", "B", "C", "D"};

    Collection list = java.util.Arrays.asList(strings);

    /* 开始遍历 */

    for (Object str : list) {

    System.out.println(str);/* 依次输出“A”、“B”、“C”、“D” */

    }

    这里所用的for循环,则会在编译期间被看成是这样的形式:

    清单6:遍历Collection的简单方式的等价代码

    /* 建立一个Collection */

    String[] strings = {"A", "B", "C", "D"};

    Collection stringList = java.util.Arrays.asList(strings);

    /* 开始遍历 */

    for (Iterator 变量名乙 = list.iterator(); 变量名乙.hasNext();) {

    Object str = 变量名乙.next();

    System.out.println(str);/* 依次输出“A”、“B”、“C”、“D” */

    }

    这里的“变量名乙”也是一个由编译器自动生成的不会造成混乱的名字。

    因为在编译期间,J2SE 1.5的编译器会把这种形式的for循环,看成是对应的传统形式,所以不必担心出现性能方面的问题。

    不用“foreach”和“in”的原因

    Java采用“for”(而不是意义更明确的“foreach”)来引导这种一般被叫做“for-each循环”的循环,并使用“:”(而不是意义更明确的“in”)来分割循环变量名称和要被遍历的对象。这样作的主要原因,是为了避免因为引入新的关键字,造成兼容性方面的问题――在Java语言中,不允许把关键字当作变量名来使用,虽然使用“foreach”这名字的情况并不是非常多,但是“in”却是一个经常用来表示输入流的名字(例如java.lang.System类里,就有一个名字叫做“in”的static属性,表示“标准输入流”)。

    的确可以通过巧妙的设计语法,让关键字只在特定的上下文中有特殊的含义,来允许它们也作为普通的标识符来使用。不过这种会使语法变复杂的策略,并没有得到广泛的采用。

    “for-each循环”的悠久历史

    “for-each循环”并不是一个最近才出现的控制结构。在1979正式发布的Bourne shell(第一个成熟的UNIX命令解释器)里就已经包含了这种控制结构(循环用“for”和“in”来引导,循环体则用“do”和“done”来标识)。

    2. 防止在循环体里修改循环变量

    在默认情况下,编译器是允许在第二种for循环的循环体里,对循环变量重新赋值的。不过,因为这种做法对循环体外面的情况丝毫没有影响,又容易造成理解代码时的困难,所以一般并不推荐使用。

    Java提供了一种机制,可以在编译期间就把这样的操作封杀。具体的方法,是在循环变量类型前面加上一个“final”修饰符。这样一来,在循环体里对循环变量进行赋值,就会导致一个编译错误。借助这一机制,就可以有效的杜绝有意或无意的进行“在循环体里修改循环变量”的操作了。

    清单7:禁止重新赋值

    int[] integers = {1, 2, 3, 4};

    for (final int i : integers) {

    i = i / 2; /* 编译时出错 */

    }

    注意,这只是禁止了对循环变量进行重新赋值。给循环变量的属性赋值,或者调用能让循环变量的内容变化的方法,是不被禁止的。

    清单8:允许修改状态

    Random[] randoms = new Random[]{new Random(1), new Random(2), new Random(3)};

    for (final Random r : randoms) {

    r.setSeed(4);/* 将所有Random对象设成使用相同的种子 */

    System.out.println(r.nextLong());/* 种子相同,第一个结果也相同 */

    }

    3. 类型相容问题

    为了保证循环变量能在每次循环开始的时候,都被安全的赋值,J2SE 1.5对循环变量的类型有一定的限制。这些限制之下,循环变量的类型可以有这样一些选择:

    循环变量的类型可以和要被遍历的对象中的元素的类型相同。例如,用int型的循环变量来遍历一个int[]型的数组,用Object型的循环变量来遍历一个Collection等

    清单9:使用和要被遍历的数组中的元素相同类型的循环变量

    int[] integers = {1, 2, 3, 4};

    for (int i : integers) {

    System.out.println(i);/* 依次输出“1”、“2”、“3”、“4” */

    }

    清单10:使用和要被遍历的Collection中的元素相同类型的循环变量

    Collection< String> strings = new ArrayList< String>();

    strings.add("A");

    strings.add("B");

    strings.add("C");

    strings.add("D");

    for (String str : integers) {

    System.out.println(str);/* 依次输出“A”、“B”、“C”、“D” */

    }

    循环变量的类型可以是要被遍历的对象中的元素的上级类型。例如,用int型的循环变量来遍历一个byte[]型的数组,用Object型的循环变量来遍历一个Collection< String>(全部元素都是String的Collection)等。

    清单11:使用要被遍历的对象中的元素的上级类型的循环变量

    String[] strings = {"A", "B", "C", "D"};

    Collection< String> list = java.util.Arrays.asList(strings);

    for (Object str : list) {

    System.out.println(str);/* 依次输出“A”、“B”、“C”、“D” */

    }

    循环变量的类型可以和要被遍历的对象中的元素的类型之间存在能自动转换的关系。J2SE 1.5中包含了“Autoboxing/Auto-Unboxing”的机制,允许编译器在必要的时候,自动在基本类型和它们的包裹类(Wrapper Classes)之间进行转换。因此,用Integer型的循环变量来遍历一个int[]型的数组,或者用byte型的循环变量来遍历一个Collection< Byte>,也是可行的。

    清单12:使用能和要被遍历的对象中的元素的类型自动转换的类型的循环变量

    int[] integers = {1, 2, 3, 4};

    for (Integer i : integers) {

    System.out.println(i);/* 依次输出“1”、“2”、“3”、“4” */

    }

    注意,这里说的“元素的类型”,是由要被遍历的对象的决定的――如果它是一个Object[]型的数组,那么元素的类型就是Object,即使里面装的都是String对象也是如此。

    可以限定元素类型的Collection

    截至到J2SE 1.4为止,始终无法在Java程序里限定Collection中所能保存的对象的类型――它们全部被看成是最一般的Object对象。一直到J2SE 1.5中,引入了“泛型(Generics)”机制之后,这个问题才得到了解决。现在可以用Collection< T>来表示全部元素类型都是T的Collection。

    展开全文
  • JBPM4 常用表结构及其说明

    万次阅读 热门讨论 2014-06-16 17:31:53
    JBPM4 常用表结构 第一部分:表结构说明 Jbpm4 共有18张表,如下,其中红色的表为经常使用的表   一:资源库与运行时表结构 1. JBPM4_DEPLOYMENT 流程定义表 2. JBPM4_...
  • 直接上代码,代码中有详细注释,请自己领悟#...#include <stdlib.h>#define MAXLEN 100 //定义顺序表的最大长度typedef struct { char key[10]; //结点的关键字 char name[20]; int age; } DATA; //定义结点类型ty
  • 交互图有顺序图和协作图两形式。 时序图中描述对象按照时间顺序的消息交换。协作图着重描述系统成分如何协同工作。 时序图和协作图从不同角度表达了系统中的交互和系统行为,它们之间可以相互转化
  • 简单记录:maven 常用生命周期顺序: compile,package,install
  • java三排序算法 1.插入排序 插入排序,稳定(改变一部分数组数值的位置)(时间最坏复杂度 O(n^2)最优均为O(n)) 插入排序的算法核心为把当前插入的位置之前变为有序 2.冒泡排序 冒泡排序,不稳定(会改变大部分...
  • 因为一直觉得自己的文章序号很乱,遂在网上找了篇序号说明文档,以后自己写的文章将参照此标准。 一、序号 序号Sequence Number,有顺序的号码,如数字序号:1、2、3……,大写汉字也算数字序号,如:一、二、三……...
  • lua中的4 种常用遍历

    千次阅读 2016-06-13 17:41:57
    当我在工作中使用lua进行开发时,发现在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是: for key, value in pairs(tbtest) do XXX end for key, value in ipairs...
  • GridView事件说明及执行顺序

    千次阅读 2013-11-21 20:32:15
    作为c#开发人员,对于GridView应该是熟的不能再熟了,但是使用了这么就对于常用的事件和他们之间的关系还不是特别清楚,今天遇到了一个问题,跟踪之后才发现和GridView的执行顺序有很大的关系: 问题,页面有4个...
  • 接下来【20-27】篇将介绍CSS核心样式。 这篇继续介绍字体类样式(常用4种属性)
  • jieba 结巴分词 常用说明

    万次阅读 2017-02-26 14:23:46
    每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。 把中文词”世界经济论坛”、”达沃斯论坛”;英文词...
  • swagger常用注解说明

    千次阅读 2017-12-26 10:55:21
    常用到的注解有: Api ApiModel ApiModelProperty ApiOperation ...Api 用在类上,说明该类的作用。可以标记一个Controller类做为swagger 文档资源,使用方式: @Api(value = "/user", description
  • CreateProcessAsUser常用参数说明

    千次阅读 2017-07-31 21:32:47
    最近写代码,要把进程启到别的session下,要用到... 查阅了MSDN, 整理了参数说明供日后查阅。 先看函数原型 BOOL WINAPI CreateProcessAsUser( _In_opt_ HANDLE hToken, _In_opt_ LPCTSTR
  • wow常用宏及说明

    千次阅读 2019-09-11 17:02:17
    常用宏及说明 施放法术与物品使用 命令 说明 举例 /cast 施放法术 /cast 变形术 /p 我羊了%t!谁打谁扛着哈! /aftercast 在某技能后执行一条宏命令 /aftercast /p 请队友点门,把懒猪%t揪过来! /cast ...
  • web.xml加载顺序与web.xml常用节点解析

    千次阅读 2017-03-03 15:12:39
    web.xml加载顺序 应用服务器启动时web.xml加载过程,至于这些节点在xml文件中的前后顺序没有关系,不过有些应用服务器,我曾碰到过的 websphere就严格要求web.xml的节点顺序,否则部署不成功,所以还是赞成按照web.xml...
  • Gradle常用命令操作及配置说明

    万次阅读 2016-07-27 18:01:29
    这里顺序就应为:Venus、Earth、Mars、Jupiter 使用外部任务的属性 task myTask { ext.myProperty = "myValue" } task extraProps println myTask.myProperty } > gradle extraProps 使用ant任务 ...
  • Mysql切换调整字段顺序,不改变索引哦,完美解决方案! mysql> alter table student modify id int(10) unsigned auto_increment first; mysql> alter table student modify name varchar(10) after id; 修改...
  • 质控软件fastp常用参数说明

    千次阅读 2019-07-04 18:18:17
    常用参数说明 UMI去除 质量过滤 长度过滤 低复杂度过滤 adapter过滤 通过质量值过滤每条read ployG/ployX PE数据的碱基校正 整体切除 【global trimming】 输出文件切分 过表达序列分析 写在前面 fastp 是用于...
  • #linux# gcc常用命令行参数说明

    万次阅读 2020-06-19 11:33:10
    不同参数的先后顺序对执行结果没有影响,只有在使用同类参数时的先后顺序才需要考虑。如果使用了多个 -L 的参数来定义库目录,gcc会根据多个 -L 参数的先后顺序来执行相应的库目录。 因为很多gcc参数都由多个字母...
  • Flex Datagrid常用属性说明

    千次阅读 2010-10-12 16:18:00
    DataGrid组件常用的属性属 性说 明columns获取或设置一个DataGridColumn对象数组,每个可以显示的列为一个对象editable指示用户能否编辑数据提供者中的项目editedItemPosition获取或设置正在编辑的数据提供...
  • FFmpeg 常用选项功能说明 由于 FFmpe 功能太庞大了, 所以以下只节录一些常用选项的说明, 如果需要更详细的说明,请查询 ffmpeg Documentation。 基本用法 取得输入档案资讯 如果你要取得输入
  • 说明:本文主要介绍五最常见和最常用的图像格式:BMP,PNG,JPEG,JPEG200,以及GIF。在进行图像处理相关应用之前第一步首先是能够读取这些图像文件,虽然很多开发工具支持库比如OpenCV等已经帮助节省了这些工作的...
  • 前端对数组操作最常用的几方法

    千次阅读 多人点赞 2020-06-30 17:18:07
    所有js提供了几种常用的方法进行对数组操作,详解如下代码: 1.push() ①说明 push()方法可向数组的末尾添加一个或多个元素,并返回新的长度。 如果出现push()方法,那后边就必须跟一个参数,最少是一个,其他的可...
  • git常用命令之git push使用说明

    万次阅读 2016-03-24 16:40:12
    注意,分支推送顺序的写法是:,所以git pull是:,而git push是:。 如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 368,491
精华内容 147,396
关键字:

常用的说明顺序4种