目录

文章目录

开源项目仓库

[转]浅谈scatter-gather DMA

SR-IOV:网卡直通技术

[黑客入门] 连接公共WIFI有多危险(ARP欺骗)

DPDK ACL算法介绍


文章目录


Linux PCI驱动框架分析(一)https://www.cnblogs.com/LoyenWang/p/14165852.html

Linux PCI驱动框架分析(二)https://www.cnblogs.com/LoyenWang/p/14209318.html

Linux PCI驱动框架分析(三)https://www.cnblogs.com/LoyenWang/p/14255906.html

本站链接《Linux PCI驱动框架分析》

浅谈scatter-gather DMA:https://w.cnblogs.com/tubujia/p/11310208.html

《SR-IOV:网卡直通技术》https://www.cnblogs.com/liuhongru/p/11068460.html

《PCIe规范的扩展:SR-IOV(Single Root I/O virtual)网卡直通技术》https://rtoax.blog.csdn.net/article/details/114174511

《关于英特尔 以太网服务器适配器中 SR-IOV 的常见问题解答》https://www.intel.cn/content/www/cn/zh/support/articles/000005722/network-and-i-o/ethernet-products.html,本站:https://rtoax.blog.csdn.net/article/details/113820544

《Overview of Single Root I/O Virtualization (SR-IOV)》https://docs.microsoft.com/en-us/windows-hardware/drivers/network/overview-of-single-root-i-o-virtualization--sr-iov-

《vhost(vhost-user)网络I/O半虚拟化详解:一种 virtio 高性能的后端驱动实现》https://rtoax.blog.csdn.net/article/details/114175631

《[黑客入门] 连接公共WIFI有多危险(ARP欺骗)》https://mp.weixin.qq.com/s/mU-zLI3pSgvyZOQXCclKqQ

《程序员应如何理解高并发中的协程》https://mp.weixin.qq.com/s/sI9F4wacaaHrGWAF8cw01A

《Libco是一个C/C++协程库,在微信服务中广泛使用》

《协程到底是什么?》

《如何理解高并发中的协程?协程的实现和历史》

《函数运行时在内存中是什么样子?》

《18.基于Cortex-A9 SPI、MCP2515详解》https://mp.weixin.qq.com/s/sKTuWCkfCOcDsWKu42ea9g

《架构师看家功底-Linux性能观测与调优(四)》https://mp.weixin.qq.com/s/JNhEjsWwiybvvGy3sT4nHQ

《内存耗尽后Redis会发生什么》https://mp.weixin.qq.com/s/Q0zIPKlDFSoZljYiTnNASA

《国产CPU深度研究报告(110页)》https://mp.weixin.qq.com/s/qVNy-4EPKkg6rf6V0grI0g

《一文带你掌握Linux字符设备架构》https://mp.weixin.qq.com/s/-jDfpJJaiMdy2nqrWisiZQ

《一个端口号可以同时被两个进程绑定吗?》https://mp.weixin.qq.com/s/GLDUfkfH78t9F88kVtspYA

《[网友问答5]i2c的设备树和驱动是如何匹配以及何时调用probe的?》https://mp.weixin.qq.com/s/2XtjhwA33Zexk01i6xVYCA

《Linux设备模型(1)_基本概念》https://mp.weixin.qq.com/s/nFuNEj13b6mw12ItwR29tQ

《Linux内核网络设备驱动》https://mp.weixin.qq.com/s/LpAKeaECvcLA11ke1oemiA

DPDK ACL算法介绍: https://www.jianshu.com/p/0f71f814d73e?from=singlemessage

SIMD SSE/AVX API: https://software.intel.com/sites/landingpage/IntrinsicsGuide/#,本站地址:https://rtoax.blog.csdn.net/article/details/114177421

《0-博客笔记导读目录(全部)》 https://blog.csdn.net/weixin_42135087/article/details/107037145?utm_source=app&app_version=4.5.2

红帽性能调优指南:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/performance_tuning_guide/index

Linux 2.6 Completely Fair Scheduler 内幕:https://www.ibm.com/developerworks/cn/linux/l-completely-fair-scheduler/index.html?

本站:Linux进程调度:完全公平调度器 Completely Fair Scheduler 内幕| linux-2.6:https://rtoax.blog.csdn.net/article/details/114177540

深入理解 BPF:一个阅读清单:https://linux.cn/article-9507-1.html

第一个XDP BPF 程序:https://cloud.tencent.com/developer/article/1626925

Linux用户抢占和内核抢占详解(概念, 实现和触发时机)--Linux进程的管理与调度(二十):https://cloud.tencent.com/developer/article/1368153

内核必须懂(五): per-CPU变量:https://www.jianshu.com/p/f67517b3a150

ReschedulingInterrupts:https://help.ubuntu.com/community/ReschedulingInterrupts

《Interrupt Handling》https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch04s06.html

Linux 内核如何处理中断:https://linux.cn/article-12965-1.html

How the Linux kernel handles interrupts:https://opensource.com/article/20/10/linux-kernel-interrupts

《Linux 死锁检测模块 Lockdep 简介》http://kernel.meizu.com/linux-dead-lock-detect-lockdep.html

AIO 的新归宿:io_uring:https://zhuanlan.zhihu.com/p/62682475?utm_source=wechat_timeline

本站《Linux AIO的新归宿:io_uring(介绍,系统调用)》https://rtoax.blog.csdn.net/article/details/114180559

《Linux虚拟化KVM-Qemu分析(十)之virtio驱动》

开源项目仓库


openebs/vhost-user:https://github.com/openebs/vhost-user

[转]浅谈scatter-gather DMA


在正文开始之前需要先搞明白以下几个问题:
1. 什么是DMA?

DMA的中文名称叫做 直接内存访问,是一种不需要CPU参与,就能实现数据搬移的技术(从一个地址空间到另一个地址空间)。

2. DMA有什么用?

一定程度上解放CPU,对于实现  高效嵌入式系统 与  加速网络数据处理  有极其重要的作用。

3. DMA的实现简述

在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。

一个完整的DMA传输过程必须经过DMA请求、DMA响应、DMA传输、DMA结束 4个步骤。

scatter-gather DMA 与 block DMA

传统的block DMA 一次只能传输物理上连续的一个块的数据, 完成传输后发起中断。而scatter-gather DMA允许一次传输多个物理上不连续的块,完成传输后只发起一次中断。

传统的block DMA像这样:

先进的scatter-gather DMA像这样:

这样做的好处是直观的,大大减少了中断的次数,提高了数据传输的效率。

scatter-gather DMA的应用

dpdk在ip分片的实现中,采用了一种称作零拷贝的技术。而这种实现方式的底层,正是由scatter-gather DMA支撑的。

dpdk的分片包采用了链式管理,同一个数据包的数据,分散存储在不连续的块中(mbuf结构)。这就要求DMA一次操作,需要从不连续的多个块中搬移数据。附上e1000驱动发包部分代码:

uint16_t
eth_em_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,uint16_t nb_pkts)
{//e1000驱动部分代码...m_seg = tx_pkt;do {txd = &txr[tx_id];txn = &sw_ring[txe->next_id];if (txe->mbuf != NULL)rte_pktmbuf_free_seg(txe->mbuf);txe->mbuf = m_seg;/** Set up Transmit Data Descriptor.*/slen = m_seg->data_len;buf_dma_addr = rte_mbuf_data_iova(m_seg);txd->buffer_addr = rte_cpu_to_le_64(buf_dma_addr);txd->lower.data = rte_cpu_to_le_32(cmd_type_len | slen);txd->upper.data = rte_cpu_to_le_32(popts_spec);txe->last_id = tx_last;tx_id = txe->next_id;txe = txn;m_seg = m_seg->next;} while (m_seg != NULL);/** The last packet data descriptor needs End Of Packet (EOP)*/cmd_type_len |= E1000_TXD_CMD_EOP;txq->nb_tx_used = (uint16_t)(txq->nb_tx_used + nb_used);txq->nb_tx_free = (uint16_t)(txq->nb_tx_free - nb_used);...
}

版权声明:本文为CSDN博主「Alan. W」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38006908/article/details/87375404

SR-IOV:网卡直通技术


相关技术

IO虚拟化简介

全虚拟化

通过VMM来模拟IO设备实现,VMM截获GuestOS的IO请求,通过软件模拟真实的硬件。VMM必须处理所有虚机的IO请求,然后将所有的IO情况序列化为可以被底层硬件处理的单一IO流。好处是GuestOS不需要考虑硬件设备的情况。问题是效率相对较低。例如 qemu。

一个完整的数据包从虚拟机到物理机的路径是:虚拟机--QEMU虚拟网卡--虚拟化层--内核网桥--物理网卡。

半虚拟化

通过前端和后端模拟实现虚拟化。GuestOS中的半虚拟化驱动为前端,VMM 提供的与GuestOS 通讯的驱动程序为后端。前端驱动将GuestOS的请求通过与VMM之间的特殊通信机制发生给VMM后端需求,后端驱动处理完IO请求之后再发送给物理驱动。全虚拟化为了完成一次操作要涉及到多个寄存器的操作,使得VMM要截获每个寄存器访问并进行相应的模拟,就会导致多次上下文切换。这种方式能很大程度的减少上下文切换的频率,提供更大的优化空间。例如 virtio 。

全虚拟化网卡是虚拟化层完全模拟出来的网卡,半虚拟化网卡通过驱动对操作系统做了改造;

软件的共享IO虚拟化技术

硬件辅助的IO虚拟化主要包括英特尔VT-d, AMD的IOMMU(AMD-Vi)和PCI-SIG 的SR-IOV。前两种属于Directed I/O。物理设备直接分配给虚拟机使用,通过硬件芯片完成GPA到MA 的翻译。IOV 通过在硬件设备中增加一个PCIe 设备,用于呈现一个PF或多个VF,从而可以将每个VF单独分配给不同的虚机使用。

SR-IOV简介

SR-IOV 技术是一种基于硬件的虚拟化解决方案,可提高性能和可伸缩性。SR-IOV 标准将一个PCIe的网络控制器虚拟化成多个PCIe设备,并且每个设备可以直接分配给一个虚拟机,允许在虚拟机之间高效共享 PCIe(Peripheral Component Interconnect Express,快速外设组件互连)设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的 I/O 性能。SR-IOV 规范定义了新的标准,根据该标准,创建的新设备可允许将虚拟机直接连接到 I/O 设备,越过了hypervisor与虚拟交换机层,这样可以带来低延迟和接近线缆的速度。SR-IOV 规范由 PCI-SIG 在 http://www.pcisig.com上进行定义和维护。单个 I/O 资源可由许多虚拟机共享。共享的设备将提供专用的资源,并且还使用共享的通用资源。这样,每个虚拟机都可访问唯一的资源。因此,启用了 SR-IOV 并且具有适当的硬件和 OS 支持的 PCIe 设备(例如以太网端口)可以显示为多个单独的物理设备,每个都具有自己的 PCIe 配置空间。

SR-IOV 是PCI-SIG的一个IOV的规范,目的是提供一种标准规范,通过为虚拟机提供独立的内存空间,中断,DMA流,来绕过VMM实现数据移动。SR-IOV 架构被设计用于将单个设备通过支持多个VF,并减少硬件的开销。

SR-IOV 两种功能(function):

物理功能(Physical Functions,PF):包含完整的PCIe 功能,包括SR-IOV的扩张能力,该功能用于SR-IOV的配置和管理。PF 能像普通 PCI 设备那样被发现、管理和配置。
虚拟功能(Virtual Functions,VF):包含轻量级的PCIe 功能,它只能处理I/O, 包含数据移动所需要的最小的必要的资源。每个 VF 都是从 PF 中分离出来的。每个物理硬件都有一个 VF 数目的限制。一个 PF,能被虚拟成多个 VF 用于分配给多个虚拟机。
一旦在 PF 中启用了 SR-IOV,就可以通过 PF 的总线、设备和功能编号(路由 ID)访问各个 VF 的 PCI 配置空间。每个 VF 都具有一个 PCI 内存空间,用于映射其寄存器集。VF 设备驱动程序对寄存器集进行操作以启用其功能,并且显示为实际存在的 PCI 设备。创建 VF 后,可以直接将其指定给 IO 来宾域或各个应用程序(如裸机平台上的 Oracle Solaris Zones)。此功能使得虚拟功能可以共享物理设备,并在没有 CPU 和虚拟机管理程序软件开销的情况下执行 I/O。
支持SR-IOV的以太网适配器和控制器
详细清单参考:
https://www.intel.cn/content/www/cn/zh/support/network-and-i-o/ethernet-products/000005722.html;

SR-IOV的优点

SR-IOV 标准允许在 IO 来宾域之间高效共享 PCIe 设备。SR-IOV 设备可以具有数百个与某个物理功能 (Physical Function, PF) 关联的虚拟功能 (Virtual Function, VF)。VF的创建可由PF通过设计用来开启SR-IOV功能的寄存器以动态方式进行控制。缺省情况下,SR-IOV 功能处于禁用状态,PF 充当传统 PCIe 设备。
性能提升(从虚拟机环境直接访问硬件),成本降低(节能、减少了适配器的数量、简化了布线、减少了交换机端口)。
SR-IOV适用的场景
KVM虚拟机在传统网桥模式下,网络稳定是没有问题的,但它和SR-IOV一个本质的区别是,网桥模式本身会消耗宿主机的CPU,在实际场景下,当宿主机的CPU压力(>60%)比较大时,虚拟机内部网卡的发包率(PPS)性能会下降,极端情况会出现丢包。SR-IOV最适合的应用场景:

  • 1. 宿主机CPU压力大(>60%)+虚拟机网卡发包率压力大(pps >5w)
  • 2. 虚拟机网卡发包率压力非常大(pps>10w)

KVM虚拟机中使用SR-IOV

硬件与软件需求

硬件需求

  • 1. CPU必须支持IOMMU(比如英特尔的 VT-d 或者AMD的 AMD-Vi,Power8 处理器默认支持IOMMU),并且在BIOS中已开启。支持PCI-SIG* Single Root I/O Virtualization and Sharing(SR-IOV),并且在BIOS中已开启。
  • 2. 支持SR-IOV的网卡必须插在总线带宽X8以上的扩展槽中。

软件需求

  • 1. VF驱动程序必须与物理网卡兼容,必须安装在虚拟机操作系统内
  • 2. 宿主机安装PF驱动程序

[黑客入门] 连接公共WIFI有多危险(ARP欺骗)

https://mp.weixin.qq.com/s/mU-zLI3pSgvyZOQXCclKqQ


注意:本文只用于技术交流,请勿用于恶意用途。

平时我们都喜欢连接公共的免费 WIFI,其实公共 WIFI 是非常危险的,因为黑客可以连接到公共 WIFI,然后使用 ARP欺骗 的攻击手法来获取到你所有的上网数据。本文主要介绍怎么使用 ARP欺骗 来入侵公共 WIFI,让大家知道使用公共 WIFI 的危险。

上网的过程

一般来说,我们使用手机上网都需要连接无线路由器(WIFI),如下图:

从上图看出,我们上网都需要连接到路由器,而且所有的数据都需要经过路由器。

那么,手机是怎样通过路由器把数据发送出去呢?

手机要把数据发送到互联网,首先需要把要发送的数据打包成 以太网帧,然后再把 以太网帧 发送给路由器,路由器收到 以太网帧 后,会把此 以太网帧 发送出去。以太网帧 由 以太网头部 和 数据 部分组成,如下图:

从上图可以看到,以太网协议 的头部由 源MAC地址目标MAC地址 和 上层协议类型 组成,MAC地址 就是指机器(手机)网络接口的物理地址,比如手机可以从无线局域网信息中查看,如下图所示:

源MAC地址 就是我们手机的 MAC 地址,而 目标MAC地址 就是路由器的 MAC 地址。如下图所示:

但通常来说,路由器的 MAC 地址我们是不知道的,需要通过 ARP协议 来获取路由器的 MAC 地址。ARP协议 的功能就是通过目标机器的 IP地址 来获取其 MAC地址,所以我们只需要知道路由器的 IP地址 即可通过 ARP协议 来获取其 MAC地址

ARP协议 在之前的文章介绍过:ARP协议,所以这里就不再作介绍。

ARP欺骗原理

从上面的分析可知,手机要上网首先要连接到路由器,然后把要发送的数据包打包成 以太网帧,再把 以太网帧 发送给路由器。

以太网帧 需要知道路由器的 MAC地址,但通常来说我们只知道路由器的 IP地址(通常路由器的 IP地址 为 192.168.1.1),所以需要通过 ARP协议 把 IP地址 转换成 MAC地址

ARP欺骗 就是通过使用 ARP协议 把路由器的 IP地址 转换成 中间人机器 的 MAC地址,如下图所示:

从上图可以看出,电脑A发送了一个 ARP消息 给手机A,告诉它 IP地址 为 192.168.1.1 的 MAC地址 为 AE:12:BD:8C:92,也就是电脑A的 MAC地址

这样,手机A就误以为路由器的 MAC地址 是 AE:12:BD:8C:92,从而每次发送数据到互联网时,都需要先把数据发送给电脑A,从而电脑A成为了 中间人,所以这个攻击也叫 中间人攻击。数据流向如下图:

这样,电脑A就可以截获手机A发送的所有数据。电脑A截获到手机A的数据后,就可以修改手机A发送的数据,从而达到攻击的效果。试想一下,如果当手机使用支付宝支付时,把收款的账号改为攻击人的账号,那就会把钱转到攻击人的账号。

ARP欺骗实验

本来我想自己写个程序来实现 ARP欺骗 攻击的,但是这样可能会导致这篇文章变得枯燥,所以这里直接使用开源的 ARP欺骗 工具来做试验,这个工具就是 arpspoof,下载地址在:https://github.com/alandau/arpspoof

首先,我们把 arpspoof 下载到本机,然后确认要攻击的目标机器的 IP地址,如:192.168.1.13,然后使用 arpspoof 开始攻击,如下:

C:\> arpspoof.exe 192.168.1.13
Resolving victim and target...
Redirecting 192.168.1.13 (00:11:22:33:44:55) ---> 192.168.1.1 (AE:12:BD:8C:92)and in the other direction
Press Ctrl+C to stop

看到上面的输出说明 arpspoof 已经开始工 (攻) 作 (击)。

然后,我们打开 wireshark 抓包攻击来查看手机A的上网数据包,如下图:

从抓包工具的结果可以看出,IP地址 为 192.168.1.13 的数据包都经过了我们的机器,如果这时对这些数据包稍作修改,就可能会导致很严重的问题。

所以,使用公共 WIFI 是非常危险的行为,有以下几个风险:

  • 泄露账号密码。

  • 数据可能被恶意修改。

  • 收到一些奇怪的消息(如广告)。

那么,怎么杜绝这个问题呢?很简单,就是使用手机卡流量上网(笑...)。

其实,除了 中间人攻击 外,ARP欺骗 还能让连接同一个路由器的所有机器都不能上网,就是通过 ARP欺骗 将路由器的 IP地址 映射为一个不存在的 MAC地址,这样就会导致内网的机器因为把数据发送给不存在的路由器而丢包,从而导致其不能上网。

总结

这篇文章主要通过 ARP欺骗 这种攻击手段来说明,使用公共 WIFI 是一种危险的行为,所以在使用公共 WIFI 时最好不要使用移动支付,否则就可能会被盗取账号或者钱财等。

当然,看完这篇文章也不要做恶意的用途,否则后果自负(当然做恶意用途也需要点技术含量的)。

DPDK ACL算法介绍

https://www.jianshu.com/p/0f71f814d73e?from=singlemessage


DPDK提供了三种classify算法:最长匹配LPM、精确匹配(Exact Match)和通配符匹配(ACL)。

其中的ACL算法,本质是步长为8的Multi-Bit Trie,即每次可匹配一个字节。一般来说步长为n时,Trie中每个节点的出边为2^n,但DPDK在生成run-time structures时,采用DFA/QRANGE/SINGLE这几种不同的方式进行数据结构的压缩,有效去除了冗余的出边。本文将为大家介绍ACL算法的基本原理,主要内容包括:trie树的构造、运行时的node array生成和匹配原理。对于ACL接口的使用,参考DPDK的官方文档即可。

2021年二月下旬文章导读与开源项目仓库 | scatter-gather DMA,SR-IOV,ARP欺骗,中断,Lockdep,virtio,vhost相关推荐

  1. 2021年度GitHub Top 10 的Java 开源项目

    先来看一张编程语言图谱,了解一下 Java 最近20 年到底有多火. 从趋势图可以看出,Java 在最近 20 年里一直处于前三的位置,可见受欢迎的程度还是很高的. 好了,废话不多,直接上干货项目,如 ...

  2. 01 将狼才鲸的嵌入式开源项目仓库链接

    将狼才鲸空闲时间的嵌入式开源项目工作计划 作者 将狼才鲸 创建时间 2022-11-26 更新时间 -- 文章Markdown源文件Gitee仓库地址:才鲸嵌入式 / 将狼才鲸空闲时间的嵌入式开源项目 ...

  3. 聊聊 2020 的 dotnet 各大开源项目仓库的情况

    现在是 2020.06.21 我来聊聊我所关注的 dotnet 的几个大开源项目的活跃以及定位情况.包括 WPF 和 WinForms 和 Xamarin 和 ASP.NET Core 和 Blazo ...

  4. 2.4K Star!450 个重磅前端开源项目合集推荐

    大家好,我是你们的 猫哥,还是那个不喜欢吃鱼.又不喜欢喵 的超级猫 ~ 不知不觉,公众号:前端GitHub 和 GitHub 上的仓库 FrontEndGitHub 都已经更新并运营超过半年了呀, 前 ...

  5. 请查收,您有一份阿里先锋开源项目清单

    前段时间,开源社<2021中国开源年度报告>发布,阿里蝉联中国企业开源活跃度No.1:在中国活跃开源项目 Top 30 榜单中,阿里开源的 Ant Design.Nacos.element ...

  6. .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来

    从该系列的第一篇文章 .NET平台开源项目速览(1)SharpConfig配置文件读写组件 开始,不知不觉已经到第17篇了.每一次我们都是介绍一个小巧甚至微不足道的.NET平台的开源软件,或者学习,或 ...

  7. 开源项目cardslib简单介绍和导入eclipse并运行的方法

    本文转自http://blog.csdn.net/a396901990/article/details/25158223,仅供学习使用,所有权力归原作者所有. 开源项目里有两个关于Crad类型的自定义 ...

  8. 新手如何在Git Hub上学习开源项目+社交

    文章目录 背景 前提条件 搜索相应主题的开源项目 步骤 从Git Hub上下载项目源码并编译执行 步骤 Fork别人的项目并申请Pull Request 步骤 Git Hub社交 步骤 关于我 背景 ...

  9. Android开源项目分类

    之前转载了一个开源项目的文章,发现那些都是没有系统的总结,这里又转载一篇有系统总结的文章. Android开源项目系列汇总已完成,包括: Android开源项目第一篇--个性化控件(View)篇 An ...

最新文章

  1. 一文了解人脸识别:从实现方法到应用场景都讲明白了
  2. C++ Error: no appropriate default constructor available
  3. python猜年龄代码_python入门教程NO.7用python来写一个猜数字游戏
  4. 中粮国际对话国际农民丰收节贸易会 谋定国际农贸现代化
  5. python的flask实现第三方登录怎么写_关于qq和新浪微博的第三方登陆|python|flask
  6. 王淮经验谈:我的码农原则
  7. c# 窗体启动后自动执行 Form_Load事件注册及调用
  8. C#基础系列——语法
  9. saas系统是什么_什么是灵活用工智能财税SaaS系统?有什么好处?
  10. Java-接口第一篇认识Interface
  11. 【数字信号处理】基于matlab数字信号离散序列短时傅里叶变换【含Matlab源码 1545期】
  12. (笔记) SpringCloud之Hystrix断路器 属性详解
  13. ag-grid 设置行高
  14. xp系统怎样安装传真服务器,XP系统传真服务怎么安装?配置传真教程
  15. Java不生成 xml注解_java注解生成xml和包含CDATA
  16. 操作系统七种寻址方式
  17. 【b站雅思笔记】Charlie有好好学习 - 雅思机经8-14
  18. ORCID以及ResearcherID注册
  19. 小狐狸VF的一些命令及技巧
  20. KODI 电视版本以及字母插件的安装

热门文章

  1. MySQL高级-SQL优化
  2. 题解 BZOJ1026 luogu P2657 [SCOI2009]windy数 数位DP
  3. Filter过滤器除去部分URL链接
  4. RabbitMQ小结
  5. Python 第十一篇:开发堡垒机
  6. 教程视图Android教程(十三)-- Activity间的切换
  7. POJ 3667 hotel(shǎ崽大神的模板|区间合并)
  8. 实例1.1:通过HWND获得CWnd指针
  9. 手机程序开发和测试关注点整理
  10. android studio android 测试