Dubbo支持dubbo、rmi、hessian、http、webservice、thrift、redis等多种协议,可是Dubbo官网是推荐咱们使用Dubbo协议的。html

目录

1、9种协议

一、dubbo 协议 (默认)

二、rmi 协议

三、hessian 协议

四、http 协议

五、webservice 协议

六、thrift 协议

七、memcached 协议

八、redis 协议

九、rest ( 就是 RestFull)

2、多协议配置

不一样服务使用不一样协议

同时使用多种协议

3、面试题:


下面咱们就针对Dubbo的每种协议详解讲解,以便咱们在实际应用中可以正确取舍。java

1、9种协议

一、dubbo 协议 (默认)

一、dubbo 缺省协议 采用单一长链接和NIO异步通信,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的状况
二、不适合传送大数据量的服务,好比传文件,传视频等,除非请求量很低。web

缺省协议,使用基于mina1.1.7+hessian3.2.1的tbremoting交互。面试

特性redis

  • 链接个数:单链接
  • 链接方式:长链接
  • 传输协议:TCP
  • 传输方式:NIO异步传输
  • 序列化:Hessian 二进制序列化
  • 适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者没法压满提供者,尽可能不要用dubbo协议传输大文件或超大字符串。
  • 适用场景:常规远程服务方法调用

配置spring

<!--配置协议: -->
<dubbo:protocol name="dubbo" port="20880" /><!--设置默认协议: -->
<dubbo:provider protocol="dubbo" /><!-- 设置服务协议: -->
<dubbo:service protocol="dubbo" /><!-- 多端口 -->
<dubbo:protocol id="dubbo1" name="dubbo" port="20880" />
<dubbo:protocol id="dubbo2" name="dubbo" port="20881" /><!-- 配置协议选项: -->
<dubbo:protocol name=“dubbo” port=“9090” server=“netty” client=“netty” codec=“dubbo” serialization=“hessian2” charset=“UTF-8” threadpool=“fixed” threads=“100” queues=“0” iothreads=“9” buffer=“8192” accepts=“1000” payload=“8388608” />

三、Dubbo协议缺省每服务每提供者每消费者使用单一长链接,若是数据量较大,可使用多个链接。apache

<dubbo:protocol name="dubbo" connections="2" />

<dubbo:service connections=”0”><dubbo:reference connections=”0”>表示该服务使用JVM共享长链接。(缺省)
<dubbo:service connections=”1”><dubbo:reference connections=”1”>表示该服务使用独立长链接。
<dubbo:service connections=”2”><dubbo:reference connections=”2”>表示该服务使用独立两条长链接。json

四、为防止被大量链接撑挂,可在服务提供方限制大接收链接数,以实现服务提供方自我保护api

<dubbo:protocol name="dubbo" accepts="1000" />

常见问题浏览器

为何要消费者比提供者个数多?
因dubbo协议采用单一长链接,假设网络为千兆网卡(1024Mbit=128MByte),根据测试经验数据每条链接最多只能压满7MByte(不一样的环境可能不同,供参考),理论上1个服务提供者须要20个服务消费者才能压满网卡

为何不能传大包?
因dubbo协议采用单一长链接,若是每次请求的数据包大小为500KByte,假设网络为千兆网卡(1024Mbit=128MByte),每条链接最大7MByte(不一样的环境可能不同,供参考),单个服务提供者的TPS(每秒处理事务数)最大为:128MByte / 500KByte = 262。单个消费者调用单个服务提供者的TPS(每秒处理事务数)最大为:7MByte / 500KByte = 14。若是能接受,能够考虑使用,不然网络将成为瓶颈。

为何采用异步单一长链接?
由于服务的现状大都是服务提供者少,一般只有几台机器,而服务的消费者多,可能整个网站都在访问该服务,好比Morgan的提供者只有6台提供者,却有上百台消费者,天天有1.5亿次调用,若是采用常规的hessian服务,服务提供者很容易就被压跨,经过单一链接,保证单一消费者不会压死提供者,长链接,减小链接握手验证等,并使用异步IO,复用线程池,防止C10K问题。

接口增长方法,对客户端无影响,若是该方法不是客户端须要的,客户端不须要从新部署;
输入参数和结果集中增长属性,对客户端无影响,若是客户端并不须要新属性,不用从新
部署;

输入参数和结果集属性名变化,对客户端序列化无影响,可是若是客户端不从新部署,无论输入仍是输出,属性名变化的属性值是获取不到的。

总结:服务器端 和 客户端 对 领域对象 并不须要彻底一致,而是按照最大匹配原则。

若是不是集成Spring,单独配置以下:

dubbo.service.protocol=dubbo

二、rmi 协议

一、RMI协议采用JDK标准的java.rmi.*实现,采用阻塞式短链接JDK标准序列化方式 。

注:
若是正在使用RMI提供服务给外部访问(公司内网环境应该不会有攻击风险),同时应用里依赖了老的common-collections包(dubbo不会依赖这个包,请排查本身的应用有没有使用)的状况下,存在反序列化安全风险。
请检查应用:
将commons-collections3 请升级到3.2.2版本:
https://commons.apache.org/proper/commons-collections/release_3_2_2.html

将commons-collections4 请升级到4.1版本:
https://commons.apache.org/proper/commons-collections/release_4_1.html

新版本的commons-collections解决了该问题 。

特性

  • 链接个数:多链接
  • 链接方式:短链接
  • 传输协议:TCP
  • 传输方式:同步传输
  • 序列化:Java标准二进制序列化
  • 适用范围:传入传出参数数据包大小混合,消费者与提供者个数差很少,可传文件。
  • 适用场景:常规远程服务方法调用,与原生RMI服务互操做

接口
若是服务接口继承了java.rmi.Remote接口,能够和原生RMI互操做,即:
提供者用Dubbo的RMI协议暴露服务,消费者直接用标准RMI接口调用,或者提供方用标准RMI暴露服务,消费方用Dubbo的RMI协议调用。

若是服务接口没有继承java.rmi.Remote接口,缺省Dubbo将自动生成一个com.xxx.XxxService$Remote的接口,并继承java.rmi.Remote接口,并以此接口暴露服务,

但若是设置了<dubbo:protocol name="rmi" codec="spring" />,将不生成$Remote接口,而使用Spring的RmiInvocationHandler接口暴露服务,和Spring兼容。

配置

<!-- 定义 RMI 协议: -->
<dubbo:protocol name="rmi" port="1099" /><!--设置默认协议: -->
<dubbo:provider protocol="rmi" /><!-- 设置服务协议: -->
<dubbo:service protocol="rmi" /><!--多端口: -->
<dubbo:protocol id="rmi1" name="rmi" port="1099" />
<dubbo:protocol id="rmi2" name="rmi" port="2099" />
<dubbo:service protocol="rmi1" /><!--Spring 兼容性:-->
<dubbo:protocol name="rmi" codec="spring" />

三、hessian 协议

Hessian 协议用于集成 Hessian 的服务,Hessian 底层采用 Http 通信,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 做为服务器实现。

Dubbo 的 Hessian 协议能够和原生 Hessian 服务互操做,即:

  • 提供者用 Dubbo 的 Hessian 协议暴露服务,消费者直接用标准 Hessian 接口调用
  • 或者提供方用标准 Hessian 暴露服务,消费方用 Dubbo 的 Hessian 协议调用。

Hessian 是 Caucho 开源的一个 RPC 框架,其通信效率高于 WebService 和 Java 自带的序列化。

特性

  • 链接个数:多链接
  • 链接方式:短链接
  • 传输协议:HTTP
  • 传输方式:同步传输
  • 序列化:Hessian二进制序列化
  • 适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件。
  • 适用场景:页面传输,文件传输,或与原生hessian服务互操做

依赖:

<dependency><groupId>com.caucho</groupId><artifactId>hessian</artifactId><version>4.0.7</version>
</dependency>

约束
一、参数及返回值需实现Serializable接口
二、参数及返回值不能自定义实现List, Map, Number, Date, Calendar等接口,只能用JDK自带的实现,由于hessian会作特殊处理,自定义实现类中的属性值都会丢失。

配置

<!-- 定义 hessian 协议: -->
<dubbo:protocol name="hessian" port="8080" server="jetty" /><!--设置默认协议: -->
<dubbo:provider protocol="hessian" /><!-- 设置 service 协议: -->
<dubbo:service protocol="hessian" /><!-- 多端口:-->
<dubbo:protocol id="hessian1" name="hessian" port="8080" />
<dubbo:protocol id="hessian2" name="hessian" port="8081" /><!--直连:-->
<dubbo:reference id="helloService" interface="HelloWorld" url="hessian://10.20.153.10:8080/helloWorld" />

web.xml 配置:

<servlet><servlet-name>dubbo</servlet-name><servlet-class>com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>dubbo</servlet-name><url-pattern>/*</url-pattern>
</servlet-mapping>

注意:若是使用servlet派发请求
协议的端口<dubbo:protocol port="8080" />必须与servlet容器的端口相同,
协议的上下文路径<dubbo:protocol contextpath="foo" />必须与servlet应用的上下文路径相同。

四、http 协议

基于http表单的远程调用协议。参见:[HTTP协议使用说明]

特性

  • 链接个数:多链接
  • 链接方式:短链接
  • 传输协议:HTTP
  • 传输方式:同步传输
  • 序列化:表单序列化 ,即 json
  • 适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件。
  • 适用场景:需同时给应用程序和浏览器JS使用的服务。

配置

<!-- 配置协议:-->
<dubbo:protocol name="http" port="8080" /><!-- 配置 Jetty Server (默认):-->
<dubbo:protocol ... server="jetty" /><!-- 配置 Servlet Bridge Server (推荐使用): -->
<dubbo:protocol ... server="servlet" />

配置 DispatcherServlet:

<servlet><servlet-name>dubbo</servlet-name><servlet-class>org.apache.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>dubbo</servlet-name><url-pattern>/*</url-pattern>
</servlet-mapping>

注意:若是使用 servlet 派发请求 :

  • 协议的端口<dubbo:protocol port="8080" />必须与servlet容器的端口相同,
  • 协议的上下文路径<dubbo:protocol contextpath="foo" />必须与servlet应用的上下文路径相同。

五、webservice 协议

基于 WebService 的远程调用协议,基于 Apache CXF的 frontend-simple 和 transports-http 实现。

能够和原生 WebService 服务互操做,即:

  • 提供者用 Dubbo 的 WebService 协议暴露服务,消费者直接用标准 WebService 接口调用,
  • 或者提供方用标准 WebService 暴露服务,消费方用 Dubbo 的 WebService 协议调用。

依赖

<dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-simple</artifactId><version>2.6.1</version>
</dependency>
<dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>2.6.1</version>
</dependency>

特性

  • 链接个数:多链接
  • 链接方式:短链接
  • 传输协议:HTTP
  • 传输方式:同步传输
  • 序列化:SOAP文本序列化
  • 适用场景:系统集成,跨语言调用

一、基于CXF的 frontend-simple 和 transports-http 实现。
二、CXF是Apache开源的一个RPC框架:http://cxf.apache.org,由Xfire和Celtix合并而来 。

能够和原生WebService服务互操做,即:
提供者用Dubbo的WebService协议暴露服务,消费者直接用标准WebService接口调用,或者提供方用标准WebService暴露服务,消费方用Dubbo的WebService协议调用。

约束
参数及返回值需实现Serializable接口
参数尽可能使用基本类型和POJO。

配置

<!-- 配置协议: -->
<dubbo:protocol name="webservice" port="8080" server="jetty" /><!-- 配置默认协议:-->
<dubbo:provider protocol="webservice" /><!-- 配置服务协议:-->
<dubbo:service protocol="webservice" /><!--多端口: -->
<dubbo:protocol id="webservice1" name="webservice" port="8080" />
<dubbo:protocol id="webservice2" name="webservice" port="8081" /><!-- 直连: -->
<dubbo:reference id="helloService" interface="HelloWorld" url="webservice://10.20.153.10:8080/com.foo.HelloWorld" /><!-- WSDL -->
http://10.20.153.10:8080/com.foo.HelloWorld?wsdl<!-- Jetty Server: (默认) -->
<dubbo:protocol ... server="jetty" /><!-- Servlet Bridge Server: (推荐) -->
<dubbo:protocol ... server="servlet" />

配置 DispatcherServlet:

<servlet><servlet-name>dubbo</servlet-name><servlet-class>com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>dubbo</servlet-name><url-pattern>/*</url-pattern>
</servlet-mapping>

注意:若是使用servlet派发请求:
协议的端口<dubbo:protocol port=“8080” />必须与servlet容器的端口相同,
协议的上下文路径<dubbo:protocol contextpath=“foo” />必须与servlet应用的上下文路径相同。

六、thrift 协议

当前 dubbo 支持的 thrift 协议是对 thrift 原生协议 [2] 的扩展,在原生协议的基础上添加了一些额外的头信息,好比 service name,magic number 等。

使用 dubbo thrift 协议一样须要使用 thrift 的 idl compiler 编译生成相应的 java 代码,后续版本中会在这方面作一些加强。

依赖

<dependency><groupId>org.apache.thrift</groupId><artifactId>libthrift</artifactId><version>0.8.0</version>
</dependency>

配置

<dubbo:protocol name="thrift" port="3030" />

常见问题
Thrift不支持null值,不能在协议中传null

七、memcached 协议

基于 memcached实现的 RPC 协议。

注册 memcached 服务的地址

RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:2181"));
registry.register(URL.valueOf("memcached://10.20.153.11/com.foo.BarService?category=providers&dynamic=false&application=foo&group=member&loadbalance=consistenthash"));

在客户端引用

在客户端使用 :

<dubbo:reference id="cache" interface="http://10.20.160.198/wiki/display/dubbo/java.util.Map" group="member" />

或者点对点直连:

<dubbo:reference id="cache" interface="http://10.20.160.198/wiki/display/dubbo/java.util.Map" url="memcached://10.20.153.10:11211" />

自定义接口:

<dubbo:reference id="cache" interface="com.foo.CacheService" url="memcached://10.20.153.10:11211" />

方法名建议和memcached的标准方法名相同,即:get(key), set(key, value), delete(key)。

若是方法名和memcached的标准方法名不相同,则须要配置映射关系:(其中”p:xxx”为spring的标准p标签)

<dubbo:reference id="cache" interface="com.foo.CacheService" url="memcached://10.20.153.10:11211" p:set="putFoo" p:get="getFoo" p:delete="removeFoo" />

八、redis 协议

基于 Redis实现的 RPC 协议。

注册 redis 服务的地址

能够经过脚本或监控中心手工填写表单注册redis服务的地址:

RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:2181"));
registry.register(URL.valueOf("redis://10.20.153.11/com.foo.BarService?category=providers&dynamic=false&application=foo&group=member&loadbalance=consistenthash"));

在客户端引用

在客户端使用:

<dubbo:reference id="store" interface="http://10.20.160.198/wiki/display/dubbo/java.util.Map" group="member" />

或者,点对点直连:

<dubbo:reference id="store" interface="http://10.20.160.198/wiki/display/dubbo/java.util.Map" url="redis://10.20.153.10:6379" />

也可使用自定义接口:

<dubbo:reference id="store" interface="com.foo.StoreService" url="redis://10.20.153.10:6379" />

方法名建议和redis的标准方法名相同,即:get(key), set(key, value), delete(key)。

若是方法名和redis的标准方法名不相同,则须要配置映射关系:(其中”p:xxx”为spring的标准p标签)

<dubbo:reference id="cache" interface="com.foo.CacheService" url="memcached://10.20.153.10:11211" p:set="putFoo" p:get="getFoo" p:delete="removeFoo" />

九、rest ( 就是 RestFull)

基于标准的Java REST API——JAX-RS 2.0(Java API for RESTful Web Services的简写)实现的REST调用支持

参考: http://dubbo.apache.org/zh-cn/docs/user/references/protocol/rest.html

2、多协议配置

Dubbo 容许配置多协议,在不一样服务上支持不一样协议或者同一服务上同时支持多种协议。

不一样服务使用不一样协议

不一样服务在性能上适用不一样协议进行传输,好比大数据用短链接协议,小数据大并发用长链接协议

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <dubbo:application name="world" /><dubbo:registry id="registry" address="10.20.141.150:9090" username="admin" password="hello1234" /><!-- 多协议配置 --><dubbo:protocol name="dubbo" port="20880" /><dubbo:protocol name="rmi" port="1099" /><!-- 指定使用 dubbo协议 --><dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" protocol="dubbo" /><!-- 指定使用 rmi协议 --><dubbo:service interface="com.alibaba.hello.api.DemoService" version="1.0.0" ref="demoService" protocol="rmi" /> </beans>

同时使用多种协议

须要与 http 客户端互操做

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"><dubbo:application name="world" /><dubbo:registry id="registry" address="10.20.141.150:9090" username="admin" password="hello1234" /><!-- 多协议配置 --><dubbo:protocol name="dubbo" port="20880" /><dubbo:protocol name="hessian" port="8080" /><!-- 使用多个协议暴露服务 --><dubbo:service id="helloService" interface="com.alibaba.hello.api.HelloService" version="1.0.0" protocol="dubbo,hessian" /></beans>

3、面试题:

一、dubbo推荐用什么协议?
默认使用 dubbo 协议。

二、dubbo 默认使用什么序列化框架,你知道的还有哪些?
dubbo 有多种协议,不一样的协议默认使用不一样的序列化框架。好比:

dubbo 协议 默认使用 Hessian2 序列化。(说明:Hessian2 是阿里在 Hessian 基础上进行的二次开发,起名为Hessian2 )
rmi协议 默认为 java 原生序列化,
http 协议 默认为 为 json 。

此外补充,
hessian 协议,默认是 hessian 序列化;
webservice 协议,默认是 soap 文本序列化 。

上面说的是 协议默认使用的序列化,也能够指定使用第三方的序列化框架,如 Kryo 、 FST等序列化框架,详情参考:
https://blog.csdn.net/xiaojin21cen/article/details/90269659
https://blog.csdn.net/xiaojin21cen/article/details/90269952

dubbo 支持的9种协议相关推荐

  1. dubbo 支持的7种协议

    dubbo 支持的7种协议 建议看原文 转自:https://blog.csdn.net/xiaojin21cen/article/details/79834222 1.dubbo 协议 (默认) 2 ...

  2. dubbo协议_Dubbo框架支持多少种协议?各有什么特点?文中一一为你揭晓

    概述 Dubbo 允许配置多协议,在不同服务上支持不同协议或者同一服务上同时支持多种协议. 除了dubbo协议外, Dubbo框架还支持另外8种服务暴露协议,如rmi协议. hessian协议. ht ...

  3. 中dubbo所需要的依赖_Dubbo介绍、dubbo架构图、dubbo运行和执行流程、dubbo支持的协议以及支持的注册中心...

    第67次(Dubbo) 学习主题:Dubbo 学习目标: 掌握Dubbo的作用,理解Dubbo的架构图 掌握Dubbo支持的协议以及支持的注册中心 1. Dubbo介绍 1.1 什么是Dubbo? D ...

  4. Dubbo支持的协议

    注册中心做好了,那是先有provider还是先有consumer,肯定是provider,然后这里面我们知道,这些东西都可以单独的安装在不同的计算机中,他们之间通信的时候都是通过什么进行通信的,他们之 ...

  5. dubbo几种协议_Dubbo面试(简)

    Dubbo分布式系统详解:https://zhuanlan.zhihu.com/p/84506139 什么是Dubbo? Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来 ...

  6. 为什么都说Dubbo不适合传输大文件?Dubbo支持的协议

    背景 之前公司有一个 Dubbo 服务,内部封装了腾讯云的对象存储服务 SDK,是为了统一管理这种三方服务的SDK,其他系统直接调用这个对象存储的 Dubbo 服务.用来避免因平台 SDK 出现不兼容 ...

  7. 精通Dubbo——Dubbo支持的协议的详解

    Dubbo支持dubbo.rmi.hessian.http.webservice.thrift.redis等多种协议,但是Dubbo官网是推荐我们使用Dubbo协议的.下面我们就针对Dubbo的每种协 ...

  8. Dubbo 支持哪些序列化协议? Hessian 的数据结构?什么是PB ?为什么 PB 的效率是最高的?

    面试题 dubbo 支持哪些通信协议?支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的? 面试官心理分析 上一个问题,说说 dubbo 的基本工作原理 ...

  9. 【RPC Dubbo】各大开源rpc 框架 比较(dubbo支持的各种协议)

    文章目录 1. 前言 2. 服务 2.1 为什么要做服务 2.2 服务带来的挑战 2.3 服务未来的趋势 3. 框架 3.1 服务框架对比 3.1.1 Dubbo 3.1.2 Dubbox 3.1.3 ...

最新文章

  1. mysql没法安装_mysql没法使用、没法启动服务的解决方法
  2. linux 文件权限 rwt,linux 文件权限
  3. python文字识别库_python做文字识别一行代码都不用!
  4. jQuery DataTables
  5. 十三、制作 iVX音乐分享小程序
  6. 图书馆管理系统怎么做_亚马逊erp管理系统有免费的吗?亚马逊erp管理系统怎么免费做...
  7. “字节云”火山引擎正式发布,对外开放推荐算法等核心技术!
  8. networkx edge 属性_python图算法库Networkx笔记-第一章
  9. (1)安装vagrant和virtualbox
  10. 面向对象之多态、多态性
  11. java坦克大战图片素材包,坦克大战素材包
  12. 中国哲学书电子化计划
  13. 维护设备的库存信息-SERIAL_EQBS_POST
  14. “快乐宝宝”风波始末 (三)
  15. Python Network(三)案例(无向图,有向图,权重,点线分类与大小粗细)
  16. 《让子弹飞》系列——不输的汤师爷
  17. 英文有声读物网站(转贴)
  18. python可视化编程(pyQT designer)安装及入门教程
  19. 智能驾驶整车在环实验室SYNO解决方案
  20. Linux中的火墙策略

热门文章

  1. 雷塞DMC1380的使用:常用编程函数
  2. PyQGIS插件开发经验
  3. sql中函数、符号大全
  4. python英语词频_【我爱背单词】从300万单词中给你一份3000英语新闻高频词汇
  5. php表单转json对象,将表单数据转化为json数据
  6. 美林证券的「投资时钟理论」
  7. 基于单片机的液体流量检测系统设计(#0464)
  8. 迅雷创始人程浩:AI 创业必知 6 大核心问题:如何选择赛道、搭配团队和应对巨头挑战
  9. 用c语言设计交通咨询系统,交通咨询系统设计课程设计.doc
  10. 一阶电路暂态响应的结果分析。_【每日电路赏析】过流保护电路