https://www.zhihu.com/question/24322387/answer/78947405

作者:郭无心
链接:https://www.zhihu.com/question/24322387/answer/78947405
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Netty是什么?

1)本质:JBoss做的一个Jar包

2)目的:快速开发高性能、高可靠性的网络服务器和客户端程序

3)优点:提供异步的、事件驱动的网络应用程序框架和工具

通俗的说:一个好使的处理Socket的东东

如果没有Netty?

远古:

java.net + java.io

近代:

java.nio

其他:

Mina,Grizzly

与Mina相比有什么优势?

1、都是Trustin Lee的作品,Netty更晚;

2、Mina将内核和一些特性的联系过于紧密,使得用户在不需要这些特性的时候无法脱离,相比下性能会有所下降,Netty解决了这个设计问题;

3、Netty的文档更清晰,很多Mina的特性在Netty里都有;

4、Netty更新周期更短,新版本的发布比较快;

5、它们的架构差别不大,Mina靠apache生存,而Netty靠jboss,和jboss的结合度非常高,Netty有对google protocal buf的支持,有更完整的ioc容器支持(spring,guice,jbossmc和osgi);

6、Netty比Mina使用起来更简单,Netty里你可以自定义的处理upstream events 或/和 downstream events,可以使用decoder和encoder来解码和编码发送内容;

7、Netty和Mina在处理UDP时有一些不同,Netty将UDP无连接的特性暴露出来;而Mina对UDP进行了高级层次的抽象,可以把UDP当成"面向连接"的协议,而要Netty做到这一点比较困难。

-----------------------------------------------------------------------------------------------------------------------------------------

Netty的特性

1)设计

统一的API,适用于不同的协议(阻塞和非阻塞)

基于灵活、可扩展的事件驱动模型

高度可定制的线程模型

可靠的无连接数据Socket支持(UDP)

2)性能

更好的吞吐量,低延迟

更省资源

尽量减少不必要的内存拷贝

3)安全

完整的SSL/TLS和STARTTLS的支持

能在Applet与Android的限制环境运行良好

4)健壮性

不再因过快、过慢或超负载连接导致OutOfMemoryError

不再有在高速网络环境下NIO读写频率不一致的问题

5)易用

完善的JavaDoc,用户指南和样例

简洁简单

仅信赖于JDK1.5

-------------------------------------------------------------------------------------------------------------------------------------------

Netty 在哪些行业得到了应用?

  • 互联网行业:随着网站规模的不断扩大,系统并发访问量也越来越高,传统基于 Tomcat 等 Web 容器的垂直架构已经无法满足需求,需要拆分应用进行服务化,以提高开发和维护效率。从组网情况看,垂直的架构拆分之后,系统采用分布式部署,各个节点之间需要远程服务调用,高性能的 RPC 框架必不可少,Netty 作为异步高性能的通信框架,往往作为基础通信组件被这些 RPC 框架使用。

  典型的应用有:阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用 Netty 作为基础通信组件,用于实现各进程节点之间的内部通信。它的架构图如下:

<img src="https://pic4.zhimg.com/50/0033448fdced8b3c3897e1a41b4dfa10_hd.jpg" data-rawwidth="533" data-rawheight="356" class="origin_image zh-lightbox-thumb" width="533" data-original="https://pic4.zhimg.com/0033448fdced8b3c3897e1a41b4dfa10_r.jpg">

其中,服务提供者和服务消费者之间,服务提供者、服务消费者和性能统计节点之间使用 Netty 进行异步/同步通信。

  除了 Dubbo 之外,淘宝的消息中间件 RocketMQ 的消息生产者和消息消费者之间,也采用 Netty 进行高性能、异步通信。

  除了阿里系和淘宝系之外,很多其它的大型互联网公司或者电商内部也已经大量使用 Netty 构建高性能、分布式的网络服务器。

  • 游戏行业:无论是手游服务端、还是大型的网络游戏,Java 语言得到了越来越广泛的应用。Netty 作为高性能的基础通信组件,它本身提供了 TCP/UDP 和 HTTP 协议栈,非常方便定制和开发私有协议栈。账号登陆服务器、地图服务器之间可以方便的通过 Netty 进行高性能的通信,架构示意图如下:

<img src="https://pic2.zhimg.com/50/9adabad98edc4b4e9001e2fc63d6da87_hd.jpg" data-rawwidth="494" data-rawheight="196" class="origin_image zh-lightbox-thumb" width="494" data-original="https://pic2.zhimg.com/9adabad98edc4b4e9001e2fc63d6da87_r.jpg">

  图1-2 Netty 在游戏服务器架构中的应用

  • 大数据领域:经典的 Hadoop 的高性能通信和序列化组件 Avro 的 RPC 框架,默认采用 Netty 进行跨节点通信,它的 Netty Service 基于 Netty 框架二次封装实现。

  大数据计算往往采用多个计算节点和一个/N个汇总节点进行分布式部署,各节点之间存在海量的数据交换。由于 Netty 的综合性能是目前各个成熟 NIO 框架中最高的,因此,往往会被选中用作大数据各节点间的通信。

  • 企业软件:企业和 IT 集成需要 ESB,Netty 对多协议支持、私有协议定制的简洁性和高性能是 ESB RPC 框架的首选通信组件。事实上,很多企业总线厂商会选择 Netty 作为基础通信组件,用于企业的 IT 集成。

  • 通信行业:Netty 的异步高性能、高可靠性和高成熟度的优点,使它在通信行业得到了大量的应用。

37613 条评论

分享

收藏感谢收起

知乎用户
Good news everyone!
353 人赞同了该回答

作为一个学Java的,如果没有研究过Netty,那么你对Java语言的使用和理解仅仅停留在表面水平,会点SSH,写几个MVC,访问数据库和缓存,这些只是初等Java程序员干的事。如果你要进阶,想了解Java服务器的深层高阶知识,Netty绝对是一个必须要过的门槛。

有了Netty,你可以实现自己的HTTP服务器,FTP服务器,UDP服务器,RPC服务器,WebSocket服务器,Redis的Proxy服务器,MySQL的Proxy服务器等等。

如果你想知道Nginx是怎么写出来的,如果你想知道Tomcat和Jetty是如何实现的,如果你也想实现一个简单的Redis服务器,那都应该好好理解一下Netty,它们高性能的原理都是类似的。

我们回顾一下传统的HTTP服务器的原理

  1. 创建一个ServerSocket,监听并绑定一个端口
  2. 一系列客户端来请求这个端口
  3. 服务器使用Accept,获得一个来自客户端的Socket连接对象
  4. 启动一个新线程处理连接
    1. 读Socket,得到字节流
    2. 解码协议,得到Http请求对象
    3. 处理Http请求,得到一个结果,封装成一个HttpResponse对象
    4. 编码协议,将结果序列化字节流
    5. 写Socket,将字节流发给客户端
  5. 继续循环步骤3

HTTP服务器之所以称为HTTP服务器,是因为编码解码协议是HTTP协议,如果协议是Redis协议,那它就成了Redis服务器,如果协议是WebSocket,那它就成了WebSocket服务器,等等。

使用Netty你就可以定制编解码协议,实现自己的特定协议的服务器。

上面我们说的是一个传统的多线程服务器,这个也是Apache处理请求的模式。在高并发环境下,线程数量可能会创建太多,操作系统的任务调度压力大,系统负载也会比较高。那怎么办呢?

于是NIO诞生了,NIO并不是Java独有的概念,NIO代表的一个词汇叫着IO多路复用。它是由操作系统提供的系统调用,早期这个操作系统调用的名字是select,但是性能低下,后来渐渐演化成了Linux下的epoll和Mac里的kqueue。我们一般就说是epoll,因为没有人拿苹果电脑作为服务器使用对外提供服务。而Netty就是基于Java NIO技术封装的一套框架。为什么要封装,因为原生的Java NIO使用起来没那么方便,而且还有臭名昭著的bug,Netty把它封装之后,提供了一个易于操作的使用模式和接口,用户使用起来也就便捷多了。

那NIO究竟是什么东西呢?

NIO的全称是NoneBlocking IO,非阻塞IO,区别与BIO,BIO的全称是Blocking IO,阻塞IO。那这个阻塞是什么意思呢?

  1. Accept是阻塞的,只有新连接来了,Accept才会返回,主线程才能继
  2. Read是阻塞的,只有请求消息来了,Read才能返回,子线程才能继续处理
  3. Write是阻塞的,只有客户端把消息收了,Write才能返回,子线程才能继续读取下一个请求

所以传统的多线程服务器是BlockingIO模式的,从头到尾所有的线程都是阻塞的。这些线程就干等在哪里,占用了操作系统的调度资源,什么事也不干,是浪费。

那么NIO是怎么做到非阻塞的呢。它用的是事件机制。它可以用一个线程把Accept,读写操作,请求处理的逻辑全干了。如果什么事都没得做,它也不会死循环,它会将线程休眠起来,直到下一个事件来了再继续干活,这样的一个线程称之为NIO线程。

while true {
events = takeEvents(fds) // 获取事件,如果没有事件,线程就休眠
for event in events {
if event.isAcceptable {
doAccept() // 新链接来了
} elif event.isReadable {
request = doRead() // 读消息
if request.isComplete() {
doProcess()
}
} elif event.isWriteable {
doWrite() // 写消息
}
}
}

NIO的流程大致就是上面的伪代码描述的过程,跟实际真实的代码有较多差异,不过对于初学者,这样理解也是足够了。

Netty是建立在NIO基础之上,Netty在NIO之上又提供了更高层次的抽象。

在Netty里面,Accept连接可以使用单独的线程池去处理,读写操作又是另外的线程池来处理。

Accept连接和读写操作也可以使用同一个线程池来进行处理。而请求处理逻辑既可以使用单独的线程池进行处理,也可以跟放在读写线程一块处理。线程池中的每一个线程都是NIO线程。用户可以根据实际情况进行组装,构造出满足系统需求的并发模型。

Netty提供了内置的常用编解码器,包括行编解码器[一行一个请求],前缀长度编解码器[前N个字节定义请求的字节长度],可重放解码器[记录半包消息的状态],HTTP编解码器,WebSocket消息编解码器等等

Netty提供了一些列生命周期回调接口,当一个完整的请求到达时,当一个连接关闭时,当一个连接建立时,用户都会收到回调事件,然后进行逻辑处理。

Netty可以同时管理多个端口,可以使用NIO客户端模型,这些对于RPC服务是很有必要的。

Netty除了可以处理TCP Socket之外,还可以处理UDP Socket。

在消息读写过程中,需要大量使用ByteBuffer,Netty对ByteBuffer在性能和使用的便捷性上都进行了优化和抽象。

总之,Netty是Java程序员进阶的必备神奇。如果你知其然,还想知其所以然,一定要好好研究下Netty。如果你觉得Java枯燥无谓,Netty则是重新开启你对Java兴趣大门的钥匙。

35337 条评论

分享

收藏感谢收起

软件工程师
25 人赞同了该回答

Netty能用来做什么呢?
Netty是为了简化高性能网络应用程序的开发。如果你需要开发网络应用,有服务器,有客户端,有基于TCP或UDP的网络协议,Netty能提供高性能的网络通讯机制,提供基于事件和流水线的编程模型,提供一些协议的支持,比如HTTP,WebSockets,SSL等。用Netty,你可以容易地利用Java NIO来提高服务端的性能。

有什么Netty的例子吗?
你下载Netty,里面有很多例子可以学习。

哪些企业用到了Netty?
Netty本身只是个网络通讯框架,并不是像Oracle,Nginx,Hadoop那样企业可以直接安装使用。很多网络应用,RPC,分布式框架都有使用Netty进行网络通讯。

Netty学习难度大吗?
难度大不大都是相对而言,小马过河的例子大家都知道。

Netty本身只是提供一种方便网络编程(特别是NIO)的工具,如果你熟悉TCP/IP,网络编程和NIO,那么Netty难度并不大,一个helloworld半天就能上手,也许一周就可以使用了。

如果你不熟悉TCP/IP,网络编程和NIO,那么就先熟悉这些技术。

252 条评论

分享

收藏感谢

知乎用户
TerarkDB, 高压缩高随机访问的存储引擎
26 人赞同了该回答

相对于Tomcat这种Web Server(顾名思义主要是提供Web协议相关的服务的),Netty是一个Network Server,是处于Web Server更下层的网络框架,也就是说你可以使用Netty模仿Tomcat做一个提供HTTP服务的Web容器。

简而言之,Netty通过使用NIO的很多新特性,对TCP/UDP编程进行了简化和封装,提供了更容易使用的网络编程接口,让你可以根据自己的需要封装独特的HTTP Server活着FTP Server等.

261 条评论

分享

收藏感谢

前阿里郎-现创业狗
20 人赞同了该回答

谢邀.netty是一套在java NIO的基础上封装的便于用户开发网络应用程序的api. 应用场景很多,诸如阿里的消息队列(RocketMQ),分布式rpc(Dubbo)通信层都使用到了netty(dubbo可以用服务发现自由选择通信层). 主要优点个人总结如下:

1. netty是非阻塞事件驱动框架, 并结合线程组(group)的概念,可以很好的支持高并发,慢连接的场景。

2. 编程接口非常容易,并且也较好的解决了TCP粘包/拆包的问题.netty提供了自己的ByteBuf和channel,相比于jdk的ByteBuffer和channel来说更简便灵活操作, 并提供了pipeline的概念,并针对每个contextHandler都可以由用户定义, 方便直接.

3. 有一些web框架已经开始直接使用netty做为底层通信服务,诸如play. 这样play就不用依赖于容器去进行部署,在没有nginx做反向代理的情况下也能支持高并发.编解码器可以随意扩展,今天是个web,明天就可以是一个ftp或email服务器,个人觉得比较灵活。

204 条评论

分享

收藏感谢

13 人赞同了该回答
netty是优秀的JAVA网络应用程序框架,关键词是NIO和异步。它提供了对JAVA网络编程API的封装,屏蔽了繁杂的编程细节,让开发者可以更加专注于业务逻辑的实现。很多中间件都是基于netty来实现的,你可以用来实现一个web容器,也能写一个游戏服务器。学习netty能够让你更加熟悉网络编程,对个人好处还是比较大的。至于学习时间,看个人而言,有JAVA NIO编程经验和网络编程经验上手会更加快。
13添加评论

分享

收藏感谢

你沉默着倾听着那一首歌
10 人赞同了该回答

简单来说,netty做了jdk应该做的事儿。
jdk强迫你必须用socket来写服务器,实际上是很繁琐的。缺乏一个高层次的api。
netty说,我来写jdk的socket,并给你一个新的更简洁的api,你傻瓜式的就能写好一个网络服务器(而且是event-driven/proactor/reactor等等)。

当然,netty通过jni,引入了epoll这样的linux系统调用,使得它不单单是jdk的一个简单包裹,的确也加了些东西进去。

p.s. event-driven/proactor/reactor这些概念请看这里:
I/O多路复用技术(multiplexing)是什么? - 赵老师的回答

10添加评论

分享

收藏感谢

匿名用户
10 人赞同了该回答
普通的服务器10000个连接需要10000个线程,服务器可能就直接卡住了,但对于netty服务器可能几个线程就够了
104 条评论

分享

收藏感谢

5 人赞同了该回答

netty 是对 socket 网络编程的优秀包装

原来用手动工具做木工,现在全套电动工具,省力省时还精准,价格便宜量又足,

用了netty后,腰不酸了,脖子也不疼了,想啥啥来,吃嘛嘛香:-)

netty 满足了过去用 socket 进行网络编程时的几乎所有美好愿景:

易用,健壮,高性能,安全

感谢 netty 的贡献者们,感谢开源世界

当然,前提是至少得了解 socket 网络编程原理,及其面临的问题,才更容易理解netty为什么让网络编程美好许多

5添加评论

分享

收藏感谢

6 人赞同了该回答
非常喜欢的框架,如果比较一下 c++的一些网络框架,更加会觉得在简单易用上 Netty 设计的多么好。符合直觉的 apI 设计,同时不失灵活和功能强大。在性能上由于在设计和细节上优化掉了非常多的不必要开销,不输甚至过若干c++框架。如果想用 java 高性能处理网络 io ,目前Netty 绝对是首远。
6添加评论

分享

收藏感谢

4 人赞同了该回答
  1. 无论是BIO还是NIO,无论是Tomcat还是Netty,支持的连接数是有限的,意味着工作线程也是有限的。因此每个工作线程的效率,就很关键。如何提高工作效率?
  2. 传统Blocking IO,每请求每线程。IO线程作为生产者,串行接受请求,不断向队列中发送消息(任务),线程池作为消费者,从队列中接收消息(任务),分配给工作线程处理(执行)。而每个请求都离不开IO的读写阻塞,这也直接导致工作线程跟着阻塞。
  3. 新Netty采用的New IO,同样是每请求每线程。同样也是IO线程作为生产者,线程池作为消费者。唯一的区别是,相对BIO,每线程的服务时间缩短了。因为在队列和消费者中间,插入一个轮询线程Selector,它会不断去询问每个请求,是否读写操作准备就绪,只有操作就绪,才开启工作线程,从而减少了单个线程的无谓等待时间,提高工作线程的整体执行效率。

4添加评论

分享

收藏感谢

知乎用户
4 人赞同了该回答

线程io模型框架。用来提升线程和io的资源利用率。

netty核心概念是channel和eventloop前者抽象了io模型如tcp http 等,后者抽象了线程资源。

这两者速率是不一样的,在一起仺做任务(hanhler)的时候一定有一方会浪费。于是采用异步事件通知的方式 来提高利用绿。

至于nio 非阻塞 网络框架什么的,那只是这个核心概念的实现方式之一,用neety完全可以做老io和阻塞实现,以机非网络的本地资源调肚实现 看你昨扩展

学习难肚很小。完全叁透源码有难肚

48 条评论

分享

收藏感谢

《Netty 实战》《反应式设计模式》译者
5 人赞同了该回答

当然是Java高性能网络编程了,可以做很多东西,剩下的就是您的想象力了

比如Spring5 、Spark、Cassandra,还有阿里的HSF这些都是基于Netty的。

您可以购买我翻译的《Netty实战》这本书。

如何评价《Netty实战》这本书? - 知乎

京东预售链接(优先发货):《Netty实战》([美]诺曼·毛瑞尔(Norman Maurer),马文·艾伦·沃尔夫泰尔(Marvin Allen Wolfthal))

5添加评论

分享

收藏感谢

1 人赞同了该回答

netty是tcp/udp层的NIO框架。

你可以用netty在单台服务器上实现K级别的并发连接,而同样的事情用传统的Thread/Select来做就等着机器崩溃吧。

netty的作用是将并发应用中开销最大的I/O给干掉了(实现的原理是用boss-worker的模式,自己看源码),但是业务逻辑代码的计算量并没有,所以原则上你还需要再连接若干个线程池来负责后面的功能实现。

学习netty两本书建议深入去看,java并发编程实践和netty实战。异步只是并发的一个很薄的环节,更多关于数据一致性和锁的概念需要深入理解。实际用起来至少得有一个场景,然后实际的模拟一下业务流程,要有数据库的参与,这样你才能看到NIO在整个系统当中起到的和没有起到的作用。

1添加评论

分享

收藏感谢

1 人赞同了该回答

系统需要实现多进程通信,只有两种方式:内存共享、消息传递;分布式的系统间通信只有消息传递,Netty可作为应用间消息传递实现的基础组件,Netty位于OSI协议栈的会话层、表示层、应用层都有涉及,这样你可以方便的扩展实现,处理会话层以上的协议和业务;

Netty封装了java nio的api,使之成为一个非常方便是用框架;提供了提供处理IO的线程池,最重要的一点保证了一个socket处理在一个线程中完成,一个线程可以同时处理多个socket,这个比较好玩;

1添加评论

分享

收藏感谢

java
2 人赞同了该回答

netty等视频www.it448.com教程

2添加评论

分享

收藏感谢

网络服务都可以考虑用netty来实现
0添加评论

分享

收藏感谢

java程序员
m一下
0添加评论

分享

收藏感谢

Java的网络操作库,像C++中有ACE一样的东西。比框架轻两一些,如果实在要想象不出来的话,就把它当JDBC驱动。
0添加评论

分享

收藏感谢

十年磨一键,敲敲代码又一年

Netty提供异步的、事件驱动的网络应用程序框架和工具,其实就是一个框架,难度不大,具体的学习可以加群523916260,找老师要具体的视频教程。

希望我的回答能帮助到你!

0添加评论

分享

收藏感谢

郑州市国立西郊公园计科在读。

比如你想写个tomcat一样的Server,可以用netty。

你想写一个即时通讯的应用,可以用netty。

你想实现一个高性能Rpc框架,可以用netty。

只要是和网络有关,基本都可以用netty。

0添加评论

分享

收藏感谢

众多的java一个工具包之一。懂了io模型,没啥难的。
0添加评论

分享

收藏感谢

高中党……懒癌晚期,中二病危。
netty可以让你方便的,高效的,灵活的,处理原始的socket,实现自己的协议;一些难以自己实现的部分,比如tls等,可以直接套用别人的encoder/decoder。
0添加评论

分享

收藏感谢

知乎用户
户外运动
以前页游服务器用mina,现在手游服务器用netty
0添加评论

分享

收藏感谢

架构师
简单概括可认为它是NIO框架,封装众多协议如tcp/udp。最知名的阿里开源的SOA治理框架dubbo中就是使用Netty。Netty是Mnia作者后又另起新作。学习时,核心要掌握它的线程模型。我使用Netty3.6搭建了公司移动推送服务器使用Netty搭建APP推送服务器 - 博客频道 - CSDN.NET 推荐阅读《Netty权威指南》
0添加评论

分享

收藏感谢

软件工程师

通信,我本身也想好好学习一下,现在项目正好需要,看了你的文章讲述的很详细,之前没有接触过NIO IO开发,一下看完还需要消化一下。总之谢谢啦,但是文章里的一些图片完全看不见不知道怎么回事。

0添加评论

分享

收藏感谢

南国秀丽,其佳人多杏目柳腰、清艳妩媚;北国苍莽,其仕女多雪肤冰姿、妆淡情深。

netty连个官方混淆指导都没有,网上也i查不到相关的资料。

通俗地讲,Netty 能做什么?的更多相关文章

  1. 通俗的讲,就是高层模块定义接口,低层模块负责实现。 Bob Martins对DIP的定义: 高层模块不应依赖于低层模块,两者应该依赖于抽象。 抽象不不应该依赖于实现,实现应该依赖于抽象。

    通俗的讲,就是高层模块定义接口,低层模块负责实现. Bob Martins对DIP的定义: 高层模块不应依赖于低层模块,两者应该依赖于抽象. 抽象不不应该依赖于实现,实现应该依赖于抽象. 总结出使用D ...

  2. 【Netty】通俗地讲,Netty 能做什么?

    作者:郭无心链接:https://www.zhihu.com/question/24322387/answer/78947405来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  3. Netty 能做什么

    作为一个学Java的,如果没有研究过Netty,那么你对Java语言的使用和理解仅仅停留在表面水平,会点SSH,写几个MVC,访问数据库和缓存,这些只是初等Java程序员干的事.如果你要进阶,想了解J ...

  4. 直接抱过来dd大牛的《背包九讲》来做笔记

    P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 基本思路 这是最 ...

  5. 怎么通俗的理解Netty呢?

    目录 Netty(3.X) 简单体验 Netty的事件驱动机制 Netty的源码阅读 Netty(3.X) 有了Netty,你可以实现自己的HTTP服务器,FTP服务器,UDP服务器,RPC服务器,W ...

  6. 第一讲 从头开始做一个web qq 机器人,第一步获取smart qq二维码

    新手教程: 前言:最近在看了一下很久很久以前做的qq机器人失效了,最近也在换工作目前还在职,时间很挺宽裕的.就决定从新搞一个web qq机器人 PC的协议解析出来有点费时间以后再做. 准备工作: 编译 ...

  7. netty同时做http和websocket(netty入门)

    ---恢复内容开始--- http://www.jianshu.com/p/5c29c6c6d28c ---恢复内容结束--- http://www.jianshu.com/p/5c29c6c6d28 ...

  8. 通俗地讲Node.js是什么

    前后端分离,使得后台只需关注服务即可,但有时候开发的不同步,前台往往需要等待后台的接口,通俗的说,“node.js就是一个前端觉得写个功能还要等后端捣鼓半天,然后干脆就自己用javascript把后端 ...

  9. linux中的挂载是什么意思?通俗点讲

    mount /dev/sda1 /mnt解释:mount 就是挂载命令,/dev/sda1是要挂载的磁盘分区,/mnt是要绑定的目录挂载后就能到目录/mnt去访问磁盘分区/dev/sda1里面的资料了 ...

随机推荐

  1. HDU 1533 Going home

    Going Home Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  2. A股牛蹄板块轮动迹象

    2018年10月熊市末期牛市初期 1.券商 2.中小银行 3.稀土永磁 4.铁路基建 5.人工智能 6.电器仪表 7.保险 8.非进金融.供热供气

  3. 用eclipse写xml文件

    1. 2.把写好的xml文件粘贴到src文件夹中.

  4. C++(十)— 字符串进行插入、替换、查找、删除操作、substr

     1.C++中对字符串进行插入.替换.删除操作 #include<iostream> #include<algorithm> #include<stdio.h> # ...

  5. Python基础之列表操作

    列表的常用操作包括但不限于以下操作: 列表的索引,切片,追加,删除,切片等 这里将对列表的内置操作方法进行总结归纳,重点是以示例的方式进行展示. 使用type获取创建对象的类 type(list) 使 ...

  6. PL/SQL学习笔记_03_存储函数与存储过程

    ORACLE 提供可以把 PL/SQL 程序存储在数据库中,并可以在任何地方来运行它.这样就叫存储过程或函数. 存储函数:有返回值,创建完成后,通过select function() from dua ...

  7. (转)通过汇编语言实现C协程

    转自:http://www.cnblogs.com/sniperHW/archive/2012/06/19/2554574.html 协程的概念就不介绍了,不清楚的同学可以自己google,windo ...

  8. 菜单栏(QMenuBar)与菜单(QMenu)

    之前一直搞不清楚什么是菜单栏,后来看了文档才知道是怎么一回事,下面是我本人对菜单栏和菜单的理解,可能存在理解错误. 一.菜单栏 菜单栏是容纳菜单的一个容器,里面可以存放菜单列表,用菜单栏的目的就是为了 ...

  9. urllib,urlib2与httplib,urllib3

    urllib:编码参数离不开urllib,urllib.urlencode, urllib.urlopen(URL,[,data]) 支持POST,根据参数区分post或者get urllib2:发送 ...

  10. CodeForces Gym 100228 Graph of Inversions

    题目大意 对于一个长为$N$的序列$A$,定义它所对应的逆序图: 有$N$个点组成,标号为$1...N$的无向图,对于每一组$i,j(i<j)$若存在$A_i>A_j$则在新图中就存在一条 ...