WEBULL

##重要链接
###TC技术事件API接口详解
###事件接入规则


简要描述
  • 查询ticker的活跃技术指标事件
请求URL
  • /api/analytics/events/active
    请求方式
  • POST
参数
参数名 必选 类型 说明
tickerId int32 标的id
version int32 版本号
fields string数组 需要返回的字段,枚举,目前有
summary - 牛熊统计
supportandresistance - 支撑线、压力线
返回示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
{
"version": 20220101, //版本号
"summary": { // 牛熊统计
"id": 913256135,
"intermediateTerm": {
"bearishCount": 2,
"bullishCount": 4,
"direction": "bullish",
"score": 2,
"stateCode": "predominantlyBullish"
},
"longTerm": {
"bearishCount": 0,
"bullishCount": 0,
"direction": "neutral",
"score": 0,
"stateCode": "noEvents"
},
"shortTerm": {
"bearishCount": 2,
"bullishCount": 4,
"direction": "bullish",
"score": 2,
"stateCode": "predominantlyBullish"
}
},
"supportandresistance": [
{ // 支撑线、压力线
"pricePeriod": "day" , // 日K、周K
"resistance": {
"length100": "137.152",
"length250": "137.285722",
"length500": "137.4481"
},
"support": {
"length100": "133.140311",
"length250": "133.503273",
"length500": "118.937022"
}
}
],
"events": [
{
"id": "CNvw3CAAoF8wAsgABAACAAAD6CQg", //事件id
"eventClass": "classic", // 形态,如classic,经典形态
"barType": "candlestick", //k线形态,枚举:candlestick ,bar
"chart": "cci", //展示的图表,枚举,如price
"additionalTimeseries": [ // 绘图使用的额外的时序,如布林线上轨、下轨
"string"
],
"label": "Hammer", // 展示标签(不支持多语言的)
"name": "Ascending Continuation Triangle", // 名称 (支持多语言)
"tradeType": "long", // 交易机会的类型,枚举 long - 长头寸,short、undefined
"beginDate": 1641282857561, //事件起始时间戳
"pricePeriod": "week",
"duration": 8, // 持续天数
"trendDuration": 10, // 趋势持续的天数
"deactivationPrice": 225.5, //事件失效的价格
"close": "229.4", // 收盘价
"volume": 2858495, // 成交量
"tradingHorizon": "long", //交易的周期级别,short表示短周期,2-6周,intermediate 表示中期,6-39周,long 表示长期,9个月到两年以上
"markUpGroup": {
"trendMarkUp": [ // 趋势线,灰色
{
"markupType": "line", // 类型,枚举line ,region ,curve
"points": [
{
"time": "string", //X轴上的日期时间戳
"value": 0 // Y轴上的点,这里需要特别注意,画在K线图上,这里的Value是指价格,画在指标图上,这里的Value是指指标的值。
}
],
"represents": "boundary" //markup展示的形态,枚举:boundary, region, pattern
}
],
"eventMarkUp": [
{
"markupType": "line", // 类型,枚举line ,region ,curve
"points": [
{
"time": 1641282857561, //X轴上的日期时间戳
"value": 0 // Y轴上的点,这里需要特别注意,画在K线图上,这里的Value是指价格,画在指标图上,这里的Value是指指标的值。
}
],
"represents": "boundary" //markup展示的形态,枚举:boundary, region, pattern
}
],
"targetPriceMarkUp": {
"beginDate": 1641282857561,
"trendDuration": "10", // 该形态预计还将持续的周期数量,注意该数值如果是周线,则表示多少周,可理解为有多少根对应的K线
"breakout": 225.01875, // 突破价格
"lower": 249, //下限
"upper": 255 //上限
}
}
}
]
}
返回参数说明

主体

字段名 类型 说明
version int32 版本号
summary Summary 牛熊统计,具体看事件牛熊统计
supportandresistance SupportAndResistance 支撑线、压力线,具体看支撑线压力线
events Event 技术事件

** Event**

字段名 类型 说明
id string 事件id
eventClass string 形态,取值有classic, shortterm, oscillator, indicator, elliottwave
barType string 主图K线表现形式,枚举:
candlestick-棒形图 ,
bar-实心或空心K线图
chart string 事件关联图表,chart=price关联主图,其他为相应指标的附图
additionalTimeseries string 数组 主图需叠加的指标,比如BOLL,MA,EMA ,可为空
label string 事件标签(不支持多语言的)
name string 事件名称 (支持多语言)
tradeType string 交易机会的类型,枚举 long - 长头寸,shortundefined
beginDate int64 事件起始时间戳
pricePeriod string 价格的周期类型,日K、周K事件分别是dayweek
duration int32 该形态形成的周期数量,注意该数值如果是周线,则表示多少周,可理解为有多少根对应的K线
trendDuration int32 该形态预计还将持续的周期数量,注意该数值如果是周线,则表示多少周,可理解为有多少根对应的K线
deactivationPrice double 事件失效的价格
close double 事件首发日期当天的收盘价
volume int64 事件首发日期当天的成交量
tradingHorizon string 交易的周期级别
short表示短周期,2-6周,
intermediate 表示中期,6-39周,
long 表示长期,9个月到两年以上
markUpGroup MarkUpGroup 画线数据

MarkUpGroup

字段名 类型 说明
trendMarkUp Markup数组 趋势线
eventMarkUp Markup数组 形态线
targetPriceMarkUp TargetPriceMarkUp 目标价 色块

Markup

字段名 类型 说明
markupType string 类型,枚举lineregioncurve
points MarkupPoint 数组 具体的点位
represents string markup展示的形态,枚举:boundary, region, pattern

MarkupPoint

字段名 类型 说明
time int64 X轴上的日期时间戳
value int64 Y轴上的点,这里需要特别注意,画在K线图上,这里的Value是指价格,画在指标图上,这里的Value是指指标的值。

TargetPriceMarkUp

字段名 类型 说明
beginDate int64 事件起始时间戳,左边界
trendDuration int32 趋势持续数,日K为天,周K为周,右边界=左边界+TrendDuration对应的时长
breakout double 突破价格
lower double 下限
upper double 上限

备注

京东POP平台模式

POP 平台下公分为四大模式 ————FBP/LBP/SOPL/SOPL


各大模式下卖家在京东销售商品时,京东承担的职责如下:

仓储 打包 分拣 订单配送 订单收款 开具发票
FBP
LBP × ×
SOPL × × ×
SOP × × × 可选择京东 可选择京东货到付款 ×

  • FBP(Fulfillment By POP):卖家在京东销售商品,京东提供仓储来管理所销售商品,京东完成购物订单配送和收款,京东开具发票给消费者
  • LBP (Logistics By POP):卖家在京东销售商品,卖家每日将消费者订单打包送京东分拣中心,京东完成购物订单配送和收款,京东开具发票给消费者
  • Sopl(Sale On POP&Logistics By POP):卖家在京东销售商品,卖家每日将消费者订单打包送京东分拣中心,京东完成购物订单配送和收款,卖家开发票给消费者。
  • SOP(Sale On pop):卖家在京东销售商品,卖家每日将消费者订单打包并自行或采用快递完成购物订单配送,卖家开发票给消费者(卖家可在众多快递中,选择京东快递做货到付款业务并享受专业的配送服务体验)

Docker 介绍(一)

关于Docker

首先Docker是一个开源的应用容器引擎,可以将应用程序和依赖打包到一个可移植的容器中,然后发布到Linux服务器,可用于实现虚拟化.
容器与其他容器共享内核,作为独立的进程在主机操作系统的用户空间中运行。

github  
官方介绍

概念
  • 容器(container) 相当于一个轻量的主机,应用程序和其依赖都在其中
  • 镜像(image) 容器的模板文件,相当于容器的安装文件
  • 仓库(repository) 镜像的版本管理库,类似Git,官方镜像库
  • Dockerfile 用于构建镜像,主要描述镜像构建过程和容器启动时的命令
安装docker(Ubuntu)
1
sudo apt install docker.io
运行第一个镜像
1
2
docker run -it ubuntu echo "hello world"
>hello world

在第一次运行的过程中,Docker engine会根据镜像名称(这里我使用的Ubuntu)和tag(默认为latest,即最新版)在本地寻找镜像,如果没有则向远程仓库中寻找并pull到本地,然后启动此镜像

根据自己程序自定义镜像

自定义镜像主要依赖于Dockerfile和docker-compose.yaml(可选)

一个简单的Dockerfile 文件如下

1
2
3
4
FROM nginx #父镜像
COPY ./ /usr/share/nginx/html/ #拷贝Dockerfile 所在的目录下的内容到容器中的目录
EXPOSE 80 #对主机暴露的端口
CMD ["nginx", "-g", "daemon off;"] #启动时执行的指令

根据Dockerfile 构建镜像

1
$ docker build -f /path/to/a/Dockerfile .

关于Dockerfile的详细介绍请见:传送门

推送镜像到Docker Hub或是其他远程镜像库

1
$ docker push yourname/newimage
未完待续

京东JMQ的学习(1)

JMQ

JMQ是系统技术部消息组自主研发的,提供可靠传递消息及数据的消息中间件平台,具有高的可用性、扩展性和运维性。

架构

JMQ架构图

特点

1.技术标准
  • 自定义协议规范
  • zookeeper作为分布式协调器
2.高可用
  • 采用Master/Slave模式部署,支持Failover
  • 采用同步发送、消息持久化,防止数据丢失
  • 消息异步归档到云存储,便于故障跟踪
  • 统一的异常消息重试服务,便于容错
3.高性能
  • 自定义消息序列化,默认开启压缩
  • 批量发送和接收
  • 基于Netty4,采用NIO,EPOLL模型
  • 更轻量级的数据存储模型,消息存储一份,减少拷贝,支持组提交,更快的索引,消息积压不影响写入速度
  • 内存镜像文件,更少的内存拷贝操作
    测试数据:
    • 同步刷盘,1K消息体生产TPS为21000,响应时间为0.004秒
    • 异步刷盘,1K消息体生产TPS为53894,响应时间为0.004秒
4. 轻客户端
  • 只和Broker通信
  • 内置管理和性能采集协议
  • 较合理的超时时间设置
  • 批量发送和消费,消费者为拉模式
  • 支持二阶段事务
  • 支持业务ID顺序消费(服务端BROKER数量调整或网络异常容错会破坏顺序)
  • 支持机房部署,就近发送和消费
5. 更完善集群
  • 一组支持多个节点,主、从、备份类型
  • 主从默认同步复制,可以降级为异步复制,备份节点异步复制
  • 更完善的主从选举,从节点可以从Agent同步主节点数据,防止数据不一致
  • 支持从节点和备份节点消费
6. 管理监控
  • 管理端配置消费策略,生产策略,消息回放
  • 更丰富的监控图表

在京东的学习之JIMDB(一)

项目简介

1 项目背景

1.1 当前缓存的使用现状及问题

缓存云(统一Redis平台)来源于对缓存资源进行统一管理的需求,该需求最初从自动部署解决方案的讨论中衍生出来,解决运维的问题。目前,公司内部对缓存的使用存在如下问题和特点:

  • 各个项目组单独部署缓存系统,有些项目组资源利用率不高;
  • 各个项目组需要专人维护缓存系统的正常运行,这些人需要对缓存有很深的了解才能维护好这些系统;
  • 各个项目组对缓存的使用方式不尽相同,往往需要自己开发某些程序来达到应用目的。

而JimDB则是缓存云的进一步技术创新 - 完全管理的分布式缓存与高速key/value存储服务。

1.2 如何解决这些问题

搭建缓存资源池,实施平台化的统一管理。解决缓存各自申请,缺少统一管理、统一监控、failover的功能等问题,通过统一化提高主机资源的利用率,便于运维管理。

JimDB后期规划对外提供公有云服务,支持ISV或普通开发者的应用。

2 JimDB的功能特性

2.1 支持大容量缓存

采用“pre-sharding”技术,将缓存数据分摊到多个分片(每个分片上具有相同的构成,比如:都是一主一从两个节点)上,从而可以创建出大容量的缓存。将来会利用集群技术创建大容量的缓存。

支持2种存储类型
  • Jimdb M(纯内存)
  • Jimdb S(内存+SSD两级存储)

选择Jimdb S版,可以存储10倍于内存容量的数据,并且提供更加可靠的持久性。

2.2 缓存数据的高可用性

和mysql相同,采用的也是异步复制,目前可以达到等同于mysql级别的数据可用性。

Jimdb S版支持命令级的同步复制,超过mysql级别的数据可用性。

可设置为自动的failover

2.3 支持多种I/O策略

支持读写分离、双写等I/O策略;针对读操作可分为“主优先”、“从优先”、“随机挑选”等方式;针对写操作可分为“同步写”和“异步写”。不同的I/O策略,对数据一致性的影响也不同,应用可以根据自身对数据一致性的需求,选择不同的I/O策略。

2.4 支持动态扩容

动态扩容有两种支持两种形式的动态扩容。第一种形式,通过在单个节点上预留内存,然后需要扩容时直接使用预留内存的方法达到扩容的目的;第二种形式,通过增加分片数并结 合数据迁移来达到扩容的目的。第一种形式和第二种形式可以结合使用。第一种方式对应用的影响最小,但扩容效果有限;第二种方式扩容效果好,但由于会引发数 据迁移,从而挤占网络带宽,会对应用有一定的影响。

2.5 支持特殊的命令及应用(spring-cache等)

目前已经支持了spring-cache与缓存的结合使用。将来会增加若干其他的特殊命令和应用。

3 如何使用

使用之前应申请JIMDB集群,拿到jimURL或者(configId,和token)

3.1 JAVA如何使用JIMDB
3.1.1 通过MAVEN引如JIMDB java客户端
1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>com.jd.jim.cli</groupId>
<artifactId>jim-cli-jedis</artifactId>
<version>1.4.5-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.jd.jim.cli</groupId>
<artifactId>jim-cli-api</artifactId>
<version>1.4.5-SNAPSHOT</version>
</dependency>
3.1.2 Spring环境下配置使用JIMDB CLIENT

注意:在系统退出时,要确保销毁spring容器上下文
spring 配置文件

1
2
3
<bean id="jimClient" class="com.jd.jim.cli.ReloadableJimClientFactoryBean">
<property name="jimUrl" value="jim://1803528671997086613/2" />
</bean>

java代码:

1
2
3
4
5
6
@Resource(name = "jimClient")
private Cluster jimClient;

public String getByKey(String key){
return jimClient.get(key);
}
3.1.3 非Spring环境下使用JIMDB CLIENT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.jd.jim.cli.demo;

import com.jd.jim.cli.Cluster;
import com.jd.jim.cli.ReloadableJimClientFactory;


public class JimClientDemo {
public void close() {
JimClientFactory.close();
}

public String getByKey(String key) {
return JimClientFactory.getJimClient().get(key);
}

private static class JimClientFactory {
private static final ReloadableJimClientFactory clientFactory;
private static final Cluster CLIENT_INSTANCE;

static {
clientFactory = new ReloadableJimClientFactory();
clientFactory.setJimUrl("jim://1803528671997086613/2");

CLIENT_INSTANCE = clientFactory.getClient();
}

public static Cluster getJimClient() {
return CLIENT_INSTANCE;
}

public static void close() {
if (clientFactory != null) {
clientFactory.clear();
}
}
}
}
3.1.4 Spring-cache 注解方式

spring.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<bean id="configClient" class="com.jd.jim.cli.config.client.ConfigLongPollingClientFactoryBean">
<property name="serviceEndpoint" value="http://cfs.jim.jd.local"></property>
</bean>

<bean id="jimClient" class="com.jd.jim.cli.ReloadableJimClientFactoryBean">
<property name="configClient" ref="configClient"></property><!-- configured to your needs -->
<property name="jimUrl" value="jim://1803528818953446384/1" />
</bean>

<bean id="cacheManager" class="com.jd.jim.cli.springcache.JimCacheManager">
<property name="caches">
<list>
<bean class="com.jd.jim.cli.springcache.JimStringCache">
<!-- key前缀 -->
<property name="keyPrefix" value="cachetest_" />
<!-- 客户端对象 -->
<property name="jimClient" ref="jimClient" />
<!-- TTL时间(以'秒'为单位) -->
<property name="entryTimeout" value="60" />
<!-- 值的序列化器 -->
<property name="valueSerializer">
<bean class="com.jd.jim.cli.serializer.DefaultStringSerializer" />
</property>
</bean>
</list>
</property>
</bean>

<cache:annotation-driven cache-manager="cacheManager" />

java 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Cacheable(value = "cachetest_", key = "#key")
public String getMessage(String key) {
System.out.println("miss, get from db...");
return "msg";
}

@CachePut(value = "cachetest_", key = "#key")
public String setMessage(String key, String message) {
return message;
}

@Caching(evict = { @CacheEvict(value = "cachetest_", key = "#key") })
public boolean delete(String key) {
return true;
}

在linux下安装Redis

Redis是一个开源的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,在高并发的应用系统中有很多应用场景.简单介绍一下在linux 下如何安装redis.

下载源码编译和安装

3.2版本下载地址 
Redis官网

1
root@iZ25j7qhlyuZ:/usr/lib# wget -c http://download.redis.io/releases/redis-3.2.0.tar.gz

下载完成之后在当前目录下会得到一个压缩包redis-3.2.0.tar.gz,解压

1
root@iZ25j7qhlyuZ:/usr/lib# tar -xzvf redis-3.2.0.tar.gz redis-3.2.0/

编译和安装

1
2
root@iZ25j7qhlyuZ:/usr/lib# cd redis-3.2.0/
root@iZ25j7qhlyuZ:/usr/lib/redis-3.2.0# make && make install

接下来输出了一大堆日志,好难懂,应该没有ERROR就行

修改配置文件

首先修改内存分配策略

1
root@iZ25j7qhlyuZ:/usr/lib/redis-3.2.0# vi /etc/sysctl.conf

在尾部添加

1
vm.overcommit_memory=1

0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存。
保存

1
:wq

使其生效

1
root@iZ25j7qhlyuZ:/usr/lib/redis-3.2.0# sysctl vm.overcommit_memory=1

拷贝redis.conf到etc目录下

1
root@iZ25j7qhlyuZ:/usr/lib/redis-3.2.0# cp -rvf redis.conf /etc/

然后编辑etc目录下的redis.conf

1
root@iZ25j7qhlyuZ:/usr/lib/redis-3.2.0# vi /etc/redis.conf

daemonize yes #转为守护进程,否则启动时会每隔5秒输出一行监控信息
save 60 1000 #保存快照的频率,这里表示每分钟1000次改变的话保存到磁盘
maxmemory 256000000 #分配内存
rdbcompression:是否使用压缩
dbfilename:数据快照文件名(只是文件名,不包括目录)
dir:数据快照的保存目录(这个是目录)
requirepass yangkui 客户端访问时的密码(当前密码是yangkui)
…其他配置请参照官方文档 官方文档配置部分
保存

1
:wq

启动Redis和测试连接
启动Redis服务

1
root@iZ25j7qhlyuZ:/usr/lib/redis-3.2.0# redis-server /etc/redis.conf

查看Redis服务进程看是否正常启动

1
2
3
root@iZ25j7qhlyuZ:/usr/lib/redis-3.2.0# ps -ef|grep redis
root 17896 1 0 17:22 ? 00:00:00 redis-server 127.0.0.1:6379
root 17903 14451 0 17:24 pts/0 00:00:00 grep --color=auto redis

启动正常,使用客户端工具连接

1
2
root@iZ25j7qhlyuZ:/usr/lib/redis-3.2.0# redis-cli -h 127.0.0.1
127.0.0.1:6379>

连接正常,输入密码

1
2
3
127.0.0.1:6379> AUTH yangkui
OK
127.0.0.1:6379>

然后Redis 就可以用起来了

1
2
3
4
5
127.0.0.1:6379> set myblog yangkui.net
OK
127.0.0.1:6379> get myblog
"yangkui.net"
127.0.0.1:6379>

至此,一个Redis单机安装完成.
补充,设置Redis开机启动

  1. 编写开机自启动脚本
    1
    2
    root@iZ25j7qhlyuZ:/usr/lib/redis-3.2.0# cp ./utils/redis_init_script /etc/init.d/redis
    root@iZ25j7qhlyuZ:/usr/lib/redis-3.2.0# vi /etc/init.d/redis
  2. 修改配置文件中注释位置的路径
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #!/bin/sh
    #
    # Simple Redis init.d script conceived to work on Linux systems
    # as it does use of the /proc filesystem.
    REDISPORT=6379
    EXEC=/usr/local/bin/redis-server
    CLIEXEC=/usr/local/bin/redis-cli
    PIDFILE=/var/run/redis.pid
    CONF="/etc/redis.conf"
    case "$1" in
    start)
    if [ -f $PIDFILE ]
    then
    echo "$PIDFILE exists, process is already running or crashed"
    else
    echo "Starting Redis server..."
    $EXEC $CONF
    fi
    ;;
    stop)
    if [ ! -f $PIDFILE ]
    then
    echo "$PIDFILE does not exist, process is not running"
    else
    PID=$(cat $PIDFILE)
    echo "Stopping ..."
    $CLIEXEC -p $REDISPORT -a yangkui shutdown
    while [ -x /proc/${PID} ]
    do
    echo "Waiting for Redis to shutdown ..."
    sleep 1
    done
    echo "Redis stopped"
    fi
    ;;
    *)
    echo "Please use start or stop as first argument"
    ;;
    esac
  3. 通过VI保存好之后,赋给它可执行的权限和设置开机启动
    1
    2
    root@iZ25j7qhlyuZ:/usr/lib/redis-3.2.0# chmod 777 /etc/init.d/redis
    root@iZ25j7qhlyuZ:/usr/lib/redis-3.2.0# vi /etc/rc.local #非Ubuntu系统的话通过 chkconfig redis on来设置开机启动
  4. 在exit 0 前面添加service redis start保存
    1
    2
    3
    service redis start
    exit 0
    ~
  5. 测试下脚本是不是好使
    先杀掉redis进程,然后
    1
    2
    3
    root@iZ25j7qhlyuZ:/usr/lib/redis-3.2.0# service redis start
    Starting Redis server...
    root@iZ25j7qhlyuZ:/usr/lib/redis-3.2.0#
    大功告成了

markdown语法的学习(1)

最近有学习到一个开源的博客工具Hexo,了解到它利用Markdown来编写博客内容然后生成静态的网页,而Markdown的结构比较简单,编写起来非常的方便.

现在是我在学习Markdown时做的笔记

首先编写工具的选择,最近在玩Atom,貌似该开发工具对Markdown支持的不错,各种预览功能和语法提示等等,同时Atom也是一个很强大的编辑工具,所以选择它来编写Markdown

Atom相关介绍和各版本下载地址https://github.com/atom/atom

标题设置

标题主要用==、–和#来表示,#数量越多表示标题字体越小

1
2
一级标题
==

结果预览:
一级标题
==

1
2
二级标题
--

结果预览:
二级标题

#

1
2
3
4
5
6
# title 1
## title 2
### title 3
#### title 4
##### title 5
###### title 6

结果预览:

title 1

title 2

title 3

title 4

title 5
title 6
1
*斜体*

斜体

1
**粗体**

粗体

有序列表

1
2
3
4
5
6
7
1.  item1
2. item2
3. item3
或者
2. item1
1. item2
3. item3

预览结果
2. item1

  1. item2
  2. item3

无序列表

1
2
3
* item1
* item2
* item3

结果预览

  • item1
  • item2
  • item3

嵌套

1
2
3
4
1.  第一级别1
1. 第二级别1
2. 第二级别2
2. 第一级别
  1. 第一级别1
  2. 第二级别1
  3. 第二级别2
  4. 第一级别

链接

引用式

1
2
3
4
5
I get 10 times more traffic from [Google][1] than from [Yahoo][2] or [MSN][3].  

[1]: http://google.com/ "Google"
[2]: http://search.yahoo.com/ "Yahoo Search"
[3]: http://search.msn.com/ "MSN Search"

I get 10 times more traffic from Google than from Yahoo or MSN.

内联式

1
[Google](http://www.google.com "Google")

Google

表格

1
2
3
4
5
| Tables        | Are           | Cool  |
| ------------- |:-------------:| -----:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
Tables Are Cool
col 3 is right-aligned $1600
col 2 is centered $12
zebra stripes are neat $1
1
2
3
4
5
dog | bird | cat
----|------|----
foo | foo | foo
bar | bar | bar
baz | baz | baz
dog bird cat
foo foo foo
bar bar bar
baz baz baz
未完待续