6WINDGate-overview
6WINDGate Overview
Author:Once Day Date:2023年4月29日
本文是对6WIND官网文档的整理和翻译,仅供学习和研究之用,原始文章可参考下面文档:
- 6WINDGate Documentation - 6WIND
- 6WINDGate Modules — 6WINDGate Modules 5.6.2 documentation
1.概述
6WIND通过帮助客户从昂贵的专有硬件迁移到软件网络设备,引领技术创新。在过去的十年中,全球客户依靠6WIND的路由、安全和TCP网络堆栈来设计业内性能最高的网络设备。
6WINDGate是下一代网络应用的基础(The Foundation for Next-Generation Networking Applications)。
6WINDGate provides the foundation for next-generation networking applications. Deployed in Tier 1 networks, 6WINDGate delivers the much-needed software solutions that enable OEMs to build networking products for 5G, SD-WAN, and IoT markets. This includes IP backhaul solutions, Unified Threat Management (UTM) products, universal Customer Premises Equipment (uCPE), Radio Access Network (RAN) solutions, and much more.
Tier 1网络是指只通过无结算对等连接运营的互联网服务提供商。在美国,Tier 1网络提供商包括:AT&T、Verizon等等。Tier 1网络提供商之间的流量交换是免费的,因为它们都有自己的网络,而且它们的网络之间的流量交换是相互平衡的。
6WINDGate提供急需的软件解决方案,使OEM厂家能够为5G, SD-WAN和物联网市场构建网络产品。这包括IP回程解决方案、统一威胁管理(UTM)产品、通用客户端设备(uCPE)、无线接入网(RAN)解决方案等等。
6WINDGate架构采用基于解决方案的方法,提供了构建各种网络应用所需的灵活性,具有通用代码库,可在x86和ARM平台上无缝部署裸机或虚拟化(虚拟机或容器)。6WINDGate还通过标准化的插件API提供扩展功能,使oem厂家能够通过加载特定的增强功能来构建定制的网络解决方案。
6WINDGate主要的特性如下:
- A flexible design,灵活的设计
- Fully supported and maintained solution,得到充分支持和维护的解决方案
- Support for multiple architectures including Intel x86, AMD and ARM,支持多种架构,包括英特尔x86, AMD和ARM
- Rich set of features and a complete networking solution,丰富的功能集和完整的网络解决方案
- Hardware independence,硬件独立
- Performance & Scalability,性能和可扩展性
- Enhanced deployment capabilities (bare metal, virtual machines and containers),增强的部署功能(裸机、虚拟机和容器)
- Extensible management and monitoring capabilities (NETCONF/YANG based),可扩展的管理和监控功能(基于NETCONF/YANG)
6WINDGate主要的应用场景如下:
- Packet Inspection Applications (Next generation firewalls, UTM, DPI),下一代防火墙,威胁管理和内容审计。
- Telecom Applications (EPC, NG-Core, RAN, NG-RAN, Security Gateways),电信应用,4G、5G、无线接入和安全网关。
- Service Providers and Enterprise Applications (SDN/NFV, SD-WAN, SASE, VPN concentrators)服务提供商和企业应用程序。
6WINDGate官方问答网页如下:
- FAQ - 6WINDGate - 6WIND
1.2 有关信息总结
(1)6WINDGate暂只支持在Linux上运行。
(2)除了TCP/UDP终止IPv4快速路径模块及其IPv6扩展需要与应用程序特定集成外,所有其他6WINDGate快速路径模块都支持与Linux的同步机制。
(3)异常机制(Exception Mechanism),在6WINDGate基于快速路径的解决方案中,快速路径接收系统中所有传入的数据包。它的目标是提供非常高的包处理性能。因此,它不会处理复杂、耗时的数据包,这些数据包只占总流量的一小部分。例如,需要状态机计算转发信息(如ARP或路由协议)的报文不在快速路径中处理。
当接收到的报文过于复杂,无法通过快速路径进行处理时,会将其作为异常报文发送给Linux,由Linux网络栈或控制平面处理。然后,由于连续同步机制,Linux中计算出来的信息会自动配置到快速路径上,使得同一流的下一个数据包可以在快速路径上处理。
这种异常机制,结合Linux的连续同步和快速路径,使6WINDGate可以处理任何类型的数据包,保证了整个系统的一致性。
(4)在标准的Linux体系结构中,控制平面为静态和动态配置更新Linux网络堆栈。当使用像6WINDGate这样的快速路径时,它还必须与相同的信息同步以具有一致的系统。6WINDGate架构旨在使这种同步完全透明。
(5)6WINDGate包处理软件运行在专用内核上,与Linux操作系统隔离。该软件由高性能网络堆栈、快速路径组成,旨在提供最高的吞吐量和最低的延迟。数据包处理从Linux操作系统中卸载。
(6)由于FPN-SDK,我们的大多数6WINDGate快速路径软件是通用的。然而,使用特定于处理器的资源(如用于QoS的硬件队列)是与处理器相关的。wind还实现了一些特定的低级优化,以最大限度地利用处理器。
(7)6WIND是dpdk.org开源项目的创始人。6WIND是该项目的主要贡献者之一。windgate在Intel和IBM Power架构中使用DPDK,两种架构的FPN-SDK是DPDK的接口。
(8)6WINDGate FPN-SDK是快速路径模块的执行环境。FPN-SDK依赖于硬件,由硬件体系结构标识。我们目前支持Intel、Cavium和IBM Power架构。Mellanox NPS和Kalray MPPA处理器的支持计划在我们的路线图中。FPN-SDK包括:
-
通用抽象api用于实现独立于底层硬件的快速路径模块,开销为零,使用处理器SDK的服务。
-
Linux与快速路径的异常机制。
(9)由于连续同步机制,能够配置Linux内核路由(OSPF,BGP…)或IPsec信息的路由和IKE软件将明显受益于6WINDGate快速路径。
(10)RIP、RIPng、OSPFv2、OSPFv3和BGP支持虚拟路由。控制平面虚拟路由已与支持虚拟路由的快速路径转发模块集成并验证。
(11)6WINDGate管理架构非常灵活,可以为6WINDGate与现有管理系统的顺利集成提供不同的解决方案:
- 调用您的6WINDGate管理系统,使用NETCONF或CLI集成6WINDGate带来的新功能的管理
- 使用Linux直接调用
- 扩展6WINDGate管理系统为您服务
(12)提供了一个命令行接口来与6WINDGate交互。它可用于配置、监控和故障排除。它提供了帮助和完成,以及配置文件的管理,以便在一个命令中保存和恢复完整和一致的配置。CLI实际上是一个NETCONF客户端,它与6WINDGate的基于yang的配置引擎通信。
(14)在单一多核体系结构的情况下,Linux网络堆栈和快速路径之间的同步是通过共享内存处理的。在双多核处理器体系结构中,Linux运行在一个处理器上,而快路径运行在另一个处理器上。Linux网络栈和快速路径之间没有共享内存。
在这种体系结构中,需要快速路径1CP - 1FP模块,它允许通过两个处理器之间的网络连接将Linux网络堆栈与远程快速路径同步。
因此,6WINDGate架构可以平等地部署在:
-
一个多核处理器的共享核心,
-
两个不同的多核处理器(一个分配给Linux,另一个分配给快速路径),
-
一个多核处理器运行快速路径,另一个可能是非多核处理器运行Linux。
(15)我们大多数的6WINDGate软件都是通用的。然而,处理器特定资源(如以太网驱动程序、加密引擎)的使用依赖于处理器。为了实现一些特定的低级优化以充分利用处理器,6WIND使用周期级模拟器(当可用时)来优化周期的数量。处理器的性能计数器和分析工具也可以用来测量处理时间。
(16)与标准Linux相比,6WINDGate通常将数据包处理性能提高5到40倍。确切的值取决于不同的参数(哪个协议是加速的,数据包大小,硬件平台…)。为了得到更精确的答案,可以提供参考平台上详细的性能测试结果。
(17)6WINDGate具有流量检测/包捕获快速路径模块,可在快速路径中提供伯克利包过滤功能。它允许从控制平面监控快速路径流量。
2.具体介绍的文档
2.1 整体架构预览
相关参考文档:
-
6WINDGate Documentation - 6WIND
-
https://www.6wind.com/wp-content/uploads/resources/6windgate/6WINDGate-Architecture-Overview-v3.0.pdf
-
https://www.6wind.com/wp-content/uploads/resources/6windgate/white-papers/6WINDGate-Architecture-Overview-Whitepaper-v3.0.pdf
基于Linux平台,在主流的处理器上都能运行,原生支持多种网络协议,提供基于YANG和NETCONF的管理系统。
与Linux同步的加速层2-4堆栈:
高度兼容的运行环境:
整体实现的细节架构:
标准的管理面架构:
2.2 Linux同步和异常处理机制
有两种方法可以实现高性能隔离快速路径与Linux控制和管理平面的集成
- 重新设计控制和管理平面如何与数据平面交互,需要大量的工作来适应和验证大量复杂的协议
- 依赖于Linux友好型数据平面的设计,让Fast Path作为Linux的透明解决方案。没有改变现有的Linux控制和管理平面,需要Linux Networking Stack和Fast Path之间的智能协作。
第二个选项已经在6WINDGate中成功实现,使用Linux - Fast Path同步,利用Linux eBPF强大的网络功能。
异常处理的策略如下:
- 由FastPath接收所有的包,但是部分包被送到Linux内核去处理:
- Local destination,报文目的地址为设备本地接口地址
- Missing processing information in Shared Memory (ARP, IPsec SA, etc.),共享内存中无有效处理信息
- Unaccelerated protocol,无法加速的协议
- 一些特殊的异常包也会送到Linux中去:
- Basic exceptions for standard processing are sent to a TUN/TAP Linux driver。
- Special exceptions for packets that have been preprocessed by the Fast Path are injected at the right place into the Linux Networking Stack thanks to an eBPF program
异常的类型有如下几种可能:
- 准备送给控制面处理的报文:
- ICMP echo requests
- Control Plane daemons (BGP, OSPF, IKE, etc.)
- 无法处理的报文(缺失路由,邻居信息等等)
- No L3 route available
- No L2 address available for destination/gateway
- No IPsec info (SP/SA)(Security Parameter/Security Association)
- Missing conntrack info
- 在Linux处理的协议报文
- ARP/NDP
- ICMP stack (TTL expiration)
2.3 eBPF(Extension Berkeley Packet Filter)
eBPF现在比较热门,各类论坛上也有很多资料,用于内核调试和网络过滤,时间追踪等等。
在6WINDGate产品上,通常用来进行包过滤处理。
2.4 Linux和FastPath信息交换
主要依靠两个模块来实现:
- Cache Manager (CM): cmgrd executable
- Fast Path Manager (FPM): fpmd executable
- Local or remote communication between CM and FPM is done by the Fast Path Control API (FPC API)
同步的路径有下面三条:
- CM -> FPC -> FPM
- FPM -> Shared Memory
- FPM -> NETFPC -> Fast Path
缓存同步模块(Cache Manager(CM))主要的特性如下:
- Runs as a Linux userland application
- Listens to the Netlink socket, for kernel internal states (Control Plane and configuration updates)
- Transforms Netlink messages into FPC messages
- Control Plane modules (routing, IKE, PPP…) are not modified
FastPath管理模块的特性主要如下:
- Runs as a Linux userland application
- Translates FPC API messages to configure Fast Path modules using:
- Read / write Shared Memory
- Send / receive notifications to / from Fast Path through NETFPC
下面是共享内存的一些信息:
- Contains structures for Physical ports、Forwarding table、Statistics、IPsec databases、etc.
- Read/write access for:
- FPM: writes local information received from CM through FPC messages
- Fast Path: reads local information used for packet processing (L2/L3 entries, IPsec SAs, etc.) and writes statistics
- FPS: reads statistics
- Allocation is specific to processor architecture, contents are generic,POSIX shmem implementation。
NETFPC是一个RPC类的API调用,用于触发FastPath中来自Linux的事件,用于获取在快速路径执行环境中被调用的函数,通常用于通过快速路径的驱动更改网卡设置。
VRF(Virtual Routing and Forwarding)虚拟路由转发的相关情况如下:
- IP technology that allows multiple instances of a routing table to work simultaneously within the same router。
- In Linux, VRFs are configured using network namespaces (netns)。
- Userland API: libvrf,This library allows to manage and monitor 6WINDGate VRFs from any Linux userland process。
- Cache Manager makes use of libvrf to synchronize netns-VRF in Fast Path VRF
Fast Path Statistics (FPS)快速路径统计信息如下:
- Reports Fast Path statistics into the Linux Networking Stack
- Fast Path modules update the Shared Memory with statistics
- FPS daemon reads Shared Memory statistics periodically
- Statistics are updated in Linux Networking Stack via NETLINK e.g. XFRM family for IPsec
- 接口统计数据和IP MIB数据无法同步,当前无用户空间API可以实现。
- Well-known tools like iproute2, SNMP, bmon use NETLINK to get statistics,FPS provides a library transparently catching NETLINK requests for statistics (IFLA_STATS attribute) and updating the answer with Fast Path statistics。
一些常见的工具,如IP(iproute2)命令,SNMP简单网管协议等等都是通过netlink来获取数据,因此FPS通过捕获netlink请求来返回FastPath的统计数据。其他的一些命令,如ifconfig不走netlink,则无法获取数据。
Hitflags(命令标记)信息同步如下:
- 当数据包经过Fast Path时,内核对象状态不会更新:
- Fast path relies on Linux slow path for ARP, conntracks, 快速路径依赖于Linux,慢速路径用于ARP,连接
- When not used, these entries will expire and get removed by Linux, 当不使用时,这些条目将过期并被Linux删除
- The synchronization will raise periodic waves of packet exceptions, 同步将引发数据包异常的周期性波动
- Fast Path Hitflags守护进程负责更新内核状态
- Fast Path module writes the hitflag field into the Shared Memory when the entry is used, 当条目被使用时,快速路径模块将hitflag字段写入共享内存.
- Hitflags daemon scans the Shared Memory entries (ARP for example) periodically, Hitflags守护进程定期扫描共享内存项(例如ARP).
- Entries marked by Fast Path are updated in Linux Networking Stack via NETLINK, 标记为快速路径的条目通过NETLINK在Linux网络堆栈中更新.
- 数据包流现在保持稳定在快速路径,在Linux中,Fast Path中的使用项仍然存在
2.5 FPN-SDK快速路径软件开发工具包
FastPath所在的基础软件开发工具包,分成两类:
- 硬件抽象层,对FastPath提供硬件无关的抽象。
- 硬件依赖层,一般是DPDK需要特定的硬件依赖。
TCP Segmentation Offload (TSO)和Large Receive Offload (LRO)是一种网络卸载技术,用于卸载TCP/IP协议栈的工作,以减轻CPU的负担。TSO是一种由网卡卸载TCP数据包分段的技术,而LRO则将传入的网络数据包重新组装成更大的缓冲区,并将结果更大但更少的数据包传输到主机或虚拟机的网络堆栈。
2.6 报文处理和异常路径
参考文章:
- 5.1 GRO(Generic Receive Offload)_Remy1119的博客-CSDN博客
- 怎么提高网络应用性能?让DPDK GRO和GSO来帮你! - 腾讯云开发者社区-腾讯云 (tencent.com)
- Open vSwitch 入门实践(1)简介 - 知乎 (zhihu.com)
- OpenvSwitch(OVS)全面解读_lonely_geek的博客-CSDN博客
- 什么是MPLS?有何特点?与SD-WAN有何区别? - 知乎 (zhihu.com)
- MPLS的概念、原理与作用 - 知乎 (zhihu.com)
- Linux 虚拟网卡技术:Macvlan - 腾讯云开发者社区-腾讯云 (tencent.com)
- 什么是VXLAN - 华为 (huawei.com)
路径描述大概如下:
-
通过DPDK PMD驱动从网卡收包,然后送入
fp_process_input
处理。 -
在
fp_process_input
里面可以进行GRO处理,网络协议处理中的GRO是Generic Receive Offload的缩写,它的功能是将多个TCP数据包聚合在一个skb结构,然后作为一个大数据包交付给上层的网络协议栈,以减少上层协议栈处理skb的开销,提高系统接收TCP数据包的性能。GRO是一种在协议栈接收报文时进行减负的处理方式,它可以支持多种协议报文,如TCP/IPv4、VxLAN和GRE。 -
OVS(Open vswitch)是一个多层的虚拟交换机软件,可以作为第2层或第3层交换机,支持多种协议和功能,如OpenFlow、NetFlow、VXLAN、IPsec等。Linux Bridge是一个简单的第2层交换机软件,只支持基本的功能,如STP、VLAN、GRE等。
-
网络协议中的MPLS是多协议标签交换(Multi-Protocol Label Switching)的缩写,它是一种使用标签来指定数据转发决策的数据包转发技术,它可支持多种网络层协议(如IP、IPv6、IPX等)且兼容多种链路层技术(如ATM、帧中继、以太网、PPP等),一般在位于第二层(数据链路层)和第三层(网络层)网络之间的以太网交换机和路由器上进行运行。
MPLS的主要特点有以下几点:
- MPLS可以实现高效的数据包转发,提高网络性能,因为它只在网络边缘分析IP报文头,而不用在每一跳都分析IP报文头,节约了处理时间。
- MPLS可以实现灵活的流量工程,优化网络资源利用率,因为它可以根据流量需求和网络状况动态地建立和拆除标签交换路径(LSP),并且可以支持多路径负载均衡和快速重路由等功能。
- MPLS可以实现多种业务的集成和隔离,提高网络安全性和可靠性,因为它可以利用标签栈来构建虚拟专用网(VPN)、QoS(服务质量)、MPLS-TE(流量工程)等业务,并且可以保证不同业务之间的逻辑隔离。
- MPLS可以实现多种网络协议的互通,提高网络兼容性和扩展性,因为它可以支持多种网络层协议,并且可以使用任意二层介质传输网络分组。
-
MACVLAN 是 Linux 的一种虚拟网络接口。它允许您在主机的一个网络接口上配置多个虚拟的网络接口,这些网络接口有自己独立的 MAC 地址,也可以配置上 IP 地址进行通信。MACVLAN 下的虚拟机或者容器网络和主机在同一个网段中,共享同一个广播域。
-
SVTI 是 Cisco IOS 提供的一种解决方案,它推荐在 IOS 12.4 以后的路由器上配置。它可以直接采用 IPsec 创建 VTI 隧道接口,相比与 GRE 节省了 GRE 的带宽开销。VTI 相比与 GRE 节省了 GRE 的带宽开销
-
VXLAN(Virtual eXtensible Local Area Network,虚拟扩展局域网),是由IETF定义的NVO3(Network Virtualization over Layer 3)标准技术之一,是对传统VLAN协议的一种扩展。 VXLAN的特点是将L2的以太帧封装到UDP报文(即L2 over L4)中,并在L3网络中传输。 VXLAN本质上是一种隧道技术,在源网络设备与目的网络设备之间的IP网络上,建立一条逻辑隧道,将用户侧报文经过特定的封装后通过这条隧道转发。
2.7 FastPath虚拟接口
Interface Between Fast Path And Linux Networking Stack: FPVI
- Provides NIC representor in Linux for standard configuration (e.g. iproute2)
- Implemented using FPN-SDK
- For DPDK, it is using Linux tun/tap + DPDK PMD virtio-user
Fast path -> Linux : receive exception path
-
Basic exception: packets are sent unmodified to get a standard processing by the Linux Networking stack
-
Special exception: packets have been preprocessed by the Fast Path and are injected at the right place into the Linux
-
Networking Stack, thanks to an eBPF program
Linux -> Fast path : transmit exception path
- Packets are sent out the physical ports by the Fast Path which owns NIC drivers
2.8 FastPath插件
快速路径插件可以在不修改原始快速路径模块的情况下自定义快速路径应用程序的某些部分,有三类插件:
- Replace a Fast Path module with custom processing
- Replace input and output functions on specific interfaces
- Handle a new protocol on top of IP
2.9 TCP/UDP终端
实现机制:
- Redesigned and fully optimized for multi-core execution environments
- Highly scalable processing of parallel establishment / shutdown of TCP connections
- High performance data exchanges on a huge number of TCP/UDP sockets on established TCP connections
- Event driven notifications from the stack to the application
- Plugin support for custom TCP/UDP applications including bridged and routed transparent proxy support with configurable IP bypass lists
套接字API:
- Full support of TCP and UDP sockets over IPv4 and IPv6
- POSIX-compliant socket API and Zero-copy based socket APIs
- VRF-aware sockets
- Netstat like support to dump state and statistics of the sockets
2.10 管理面扩展
相关文章:
6WINDGate-overview
6WINDGate Overview Author:Once Day Date:2023年4月29日 本文是对6WIND官网文档的整理和翻译,仅供学习和研究之用,原始文章可参考下面文档: 6WINDGate Documentation - 6WIND6WINDGate Modules — 6WINDGate Modul…...
Java8新特性-流式操作
在Java8中提供了新特性—流式操作,通过流式操作可以帮助我们对数据更快速的进行一些过滤、排序、去重、最大、最小等等操作并且内置了并行流将流划分成多个线程进行并行执行,提供更高效、快速的执行能力。接下来我们一起看看Java8为我们新增了哪些便捷呢…...
Nautilus Chain Layer 3 圆桌会议圆满举办,超4.8K用户观看
在 4 月 21 日,Nautilus Chain 举办了以 “Layer 3 区块链的意义和发展以及Crypto的演变”为主题的线上圆桌会议,我们邀请了众多行业嘉宾包括 GitcoinDAO社区管理者Bob jiang、Whalers Community 发起者崔棉大师、Chatpuppy 联合创始人 古千峰、Whalers …...
本地elasticsearch中文分词器 ik分词器安装及使用
ElasticSearch 内置了分词器,如标准分词器、简单分词器、空白词器等。但这些分词器对我们最常使用的中文并不友好,不能按我们的语言习惯进行分词。 ik分词器就是一个标准的中文分词器。它可以根据定义的字典对域进行分词,并且支持用户配置自…...
Java 中的异常处理机制是什么?如何使用它来处理程序中的异常?(七)
Java 中的异常处理机制是一种重要的编程技术,它能够帮助程序员更好地管理程序中出现的异常情况。本文将详细介绍 Java 中的异常处理机制,并提供示例来说明如何使用异常处理机制来捕获和处理程序中的异常。 什么是异常? 在程序运行过程中&am…...
基于UDQ的并网单相逆变器控制【同步参考系下单相并网全桥正弦PWM逆变器闭环控制】(Simulink)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
JAVA开发——常用的注解
目录 spring spring MVC Spring Boot AOP MyBatis MyBatis-Plus JavaWeb开发 spring Autowired:自动安装,通过类匹配自动注册相应的Bean。 Component:将一个通用的 Java 类标记为 Bean,由 Spring 容器管理。 Controller&…...
【Java笔试强训 24】
🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥年终奖 …...
SpringCloud详解
SpringCloud是一个基于SpringBoot的分布式系统开发框架,它能够帮助我们快速、稳定地构建分布式系统。本篇博客将对SpringCloud进行详细解析,介绍SpringCloud的主要组件和相关应用场景,同时提供代码示例以帮助读者更好地掌握SpringCloud的实际…...
如何保障网络安全
网络安全是一个涵盖范围广、深入浅出的话题。随着互联网在现代社会中扮演的重要角色日益突出,网络安全问题成为各个领域所关注的焦点。在此,我们将从以下几个方面来阐述网络安全的重要性,并讨论几种保障网络安全的方式。 一、网络安全的重要性…...
网络基础:socket套接字
文章目录 1. 前导知识1.1 源MAC地址和目的MAC地址1.2 源IP地址和目的IP地址1.3 MAC地址和IP地址的配合1.4 源端口号和目的端口号1.5 Socket1.6 UCP协议和TCP协议1.7 网络字节序高低位高低地址大端和小端网络字节序常用转换函数 2. socket 网络编程2.1 socket 常见接口创建套接字…...
程序员如何学好PHP?做好这五个方面就够了
今天我想和大家分享一下程序员的第一份工作对自己的意义以及影响。首先,我们都知道第一份工作很重要,因为它决定了你以后的职业生涯的方向。你的第一份工作做的什么方向,很可能就是你以后职业生涯中最主要的方向。对我个人而言,我…...
【开源项目】Build your own X 构建自己的项目
【开源项目】Build your own X 构建自己的项目 简介 Build your own X 是一个精心收集了大量资源的项目指南,可以通过从头开始重新创建我们最喜爱的技术来掌握编程。 项目地址: https://github.com/codecrafters-io/build-your-own-x这些项目里的资源…...
在.NET Core中正确使用HttpClient的方式
HttpClient 是 .NET Framework、.NET Core 或 .NET 5以上版本中的一个类,用于向 Web API 发送 HTTP 请求并接收响应。它提供了一些简单易用的方法,如 GET、POST、PUT 和 DELETE,可以很容易地构造和发送 HTTP 请求,并处理响应数据。…...
【C++】位运算类题目总结
文章目录 一. 位运算符脑图二. 相关题目1. 统计二进制数中0的个数2. 数组中只出现一次的数字3. 数组中只出现一次的数字 II4. 不用加减乘除做加法 一. 位运算符脑图 二. 相关题目 1. 统计二进制数中0的个数 解题思路:x & (x-1);它的作用是每次循环…...
Node服务端开发【NPM】
文章目录 前言NPM使用NPM使用场景NPM的常用命令NPM命令使用介绍使用NPM安装模块下载三方包全局安装VS本地安装本地安装全局安装全局模块路径查看与路径修改 卸载模块更新模块搜索模块NPM服务器发布包 NPM换源nrm全局安装 nrm:nrm ls 列出来现在已经配置好的所有的原地址nrm use…...
Doris(21):Doris的函数—日期函数
1 CONVERT_TZ(DATETIME dt, VARCHAR from_tz, VARCHAR to_tz) 转换datetime值dt,从 from_tz 由给定转到 to_tz 时区给出的时区,并返回的结果值。 如果参数无效该函数返回NULL。 select convert_tz(2019-08-01 13:21:03, Asia/Shanghai, America/Los_Angeles); select co…...
和月薪5W的阿里程序员聊过后,才知道自己一直在打杂...
前几天和一个朋友聊面试,他说上个月同时拿到了腾讯和阿里的offer,最后选择了阿里。 阿里内部将员工一共分为了14个等级,P6是资深工程师,P7是技术专家。 其中P6和P7就是一个分水岭了,P6是最接近P7的不持股员工&#x…...
西门子PLC沿脉冲类指令汇总
S7-1200CPU提供了四种沿脉冲指令供用户使用,分别为:扫描操作数信号边沿指令、在信号边沿置位操作数的指令、扫描RLO的信号边沿指令以及检测信号边沿指令。 信号从0--1的时刻称为上升沿,信号从1--0的时刻称为下降沿,不管是上升沿还…...
软件多语言文案脚本自动化方案
开发高效提速系列目录 软件多语言文案脚本自动化方案 软件多语言文案脚本自动化方案 背景目标整体方案1. 创建文案资源文件2. python脚本开发3. Python脚本执行与管理4. 人员职责分配 PyCharm使用说明1. PyCharm下载2. PyCharm安装配置3. 异常情况解决 总结 博客创建时间&…...
C++017-C++文件读写应用
文章目录 C017-C文件读写应用C文件读写应用CSP-J目标1. 文件的基本概念、文本文件的基本操作2.文本文件类型与二进制文件类型文本文件类型二进制文件类型二进制查看工具 3.文件重定向、文件读写等操作关闭文件文件操作-写入文本文件文件操作-读取文本文件文件操作-写入二进制文…...
计算机网络 实验二
⭐计网实验专栏,欢迎订阅与关注! ★观前提示:本篇内容为计算机网络实验。内容可能会不符合每个人实验的要求,因此以下内容建议仅做思路参考。 一、实验目的 (1)掌握IP地址的基本结构(网络部分与主机部分的…...
Unity 3D 学习笔记(1)
文章目录 1.Unity 3D 概述2.Unity的安装过程3.Unity 3D 的项目管理4.Unity 3D 中的场景5.Unity 3D 的界面组成 1.Unity 3D 概述 Unity 3D简介:Unity 3D是虚拟现实行业中使用率较高的一款开发引擎,由Unity Technology公司开发。通过Unity,开发…...
P1050 [NOIP2005 普及组] 循环
题目描述 乐乐是一个聪明而又勤奋好学的孩子。他总喜欢探求事物的规律。一天,他突然对数的正整数次幂产生了兴趣。 众所周知,22 的正整数次幂最后一位数总是不断的在重复 2,4,8,6,2,4,8,6…2,4,8,6,2,4,8,6… 我们说 22 的正整数次幂最后一位的循环长度…...
软考算法-排序篇-上
数据排序 一:故事背景二:直接插入排序2.1 概念2.2 画图表示2.3 代码实现2.4 总结提升 三:希尔排序3.1 概念3.2 画图表示3.3 代码实现3.4 总结提升 四:直接选择排序4.1 概念4.2 画图表示4.3 代码实现4.4 总结提升 五:堆…...
总结836
学习目标: 4月(复习完高数18讲内容,背诵21篇短文,熟词僻义300词基础词) 学习内容: 暴力英语:背诵《keep your direction》,默写,英语语法 高等数学:刷题&a…...
ginbuilder 工具快速创建
ginbuilder github 地址 快速创建一个ginweb项目: 目前apps下只有http服务,如果后续有需要的话,会添加上rpc服务,websocket服务后边如果有需要会添加上swagger 创建完成的目录结构 ├── apps │ ├── apis // 所有的apis…...
【Java基础面试宝典】堆、栈、方法区分别都存储了那些内容?wait 和 sleep 方法的区别?
目录 堆、栈、方法区分别都存储了那些内容? 堆(heap) 栈(stack) 方法区(method) 在 java 中 wait 和 sleep 方法的区别? 堆、栈、方法区分别都存储了那些内容? 堆&a…...
古剑飞仙手游Linux系统服务器架设教程
安装宝塔直接运行命令即可。 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 搭建环境: centos 7以上系统服务器 宝塔面板安装应用如下: Nginx1.14 mysql5.7 php5.6 1…...
python实战应用讲解-【numpy数组篇】常用函数(十)(附python示例代码)
目录 Python Numpy MaskedArray.ravel()函数 Python Numpy MaskedArray.reshape()函数 Python Numpy MaskedArray.resize()函数 Python Numpy MaskedArray.std()函数 Python Numpy MaskedArray.sum()函数 Python Numpy MaskedArray.swapaxes()函数 Python Numpy MaskedA…...
程序员做兼职的网站/app拉新推广平台渠道
本文地址:https://www.cnblogs.com/maplefighting/p/8007456.html 没啥成绩,大二三拿过省赛银,然后大三大四总共打了两场ccpc和两场icpc,都是一轮游。(虽然已经超过往届师兄的记录,但是还是贼菜,主要没系统…...
西安网站设计/青岛关键词优化seo
猪年的不同,于我,并不在于它的金猪色彩。最大的不同,就是与自己的爱人一起度过两人世界,共享北京家的温馨!半月前,在QQ上写下了“公司,请给我一个留下的理由”的签名,不少的朋友的关…...
没备案的网站/网站推广优化外包公司
linux目录结构CentOS-8 目录结构/bin/存放系统命令的目录,普通用户和超级用户都可以执行。不过放在/bin下的命令在单用户模式下也可以执行/boot/系统启动目录,保存系统启动相关的文件,如内核文件和启动引导程序(grub)文…...
网络优化方案/惠州百度关键词优化
花了几个小时终于把Sublime的配置搞定了,能够在里面写vex和Python,同时另外设置了Python对houdini模块的以及其他扩展包的自动填充功能。 这里简单讲一下安装sublime,因为这个不是重点,所以只介绍他的基本步奏了,本来就…...
营销推广方法/宁波seo哪家好快速推广
前言 因为游戏开发在架构上要考虑性能和实际需求,在尽量不引入第三方库、框架的前提下进行开发,所以在编码时候会经常用到设计模式对代码进行复用,对业务逻辑架构解耦,尽量减少hard code。 单例模式(Singleton P…...
网页设计毕业设计开题报告/北京seo不到首页不扣费
整数类型数据的运算函数一、bitshift 函数bitshift函数实现数据位移操作。bitshift(A,B)函数第二个参数为正,则对A的二进制数左移。第二个参数为负,则右移。bitshift(A,n,N),N表示移位后的数据最多只有N为,若超过N位,多余的位将被…...