- 博客(1514)
- 资源 (33)
- 收藏
- 关注
原创 22.循环控制.rs
fn main() { //while 循环 let mut number = 1; while number != 4 { println!("{}", number); number += 1; } //Rust 语言到此教程编撰之日还没有 do-while 的用法,但是 do 被规定为保留字,也许以后的版本中会用到。 // Rust 中没有for循环使用三元语句控制循环,需要用 while 循环来代替 /.
2021-03-08 12:40:18 154
原创 21.println输出打印.rs
fn main() { let a = 12; println!("a is {0}, a again is {0}", a); println!("{{}}"); }
2021-03-08 12:39:44 211
原创 20.if条件语句.rs
fn main() { // if else let number = 7; if number < 5 { println!("值小于5"); } else if number >5 { println!("值大于5"); } else { println!("值为5"); } //Rust 中的条件表达式必须是 bool 类型,例如下面的程序是错误的 /...
2021-03-08 12:38:50 254
原创 19.函数的使用.rs
fn main() { another_function(5, 6); println!("{}",test_return()); println!("{}",test_return2());}// Rust不在乎您在何处定义函数,只需在某个地方定义它们即可。// Rust 中定义函数如果需要具备参数必须声明参数名称和类型:fn another_function(x: i32, y: i32) { println!("x 的值为 : {}", x); ...
2021-03-08 12:38:16 352
原创 18.self关键字.rs
#[derive(Debug)]struct MyType { name: String}impl MyType { fn do_something(self, age: u32) { //等价于 fn do_something(self: Self, age: u32) { //等价于 fn do_something(self: MyType, age: u32) { println!("name = {}", self.name); .
2021-03-05 11:31:19 162
原创 17.默认值Default.rs
fn test_1() { //没有初始化会编译报错.use of possibly-uninitialized `i` let i: i8 = Default::default(); let (x, y): (Option<String>, f64) = Default::default(); let (a, b, (c, d)): (i32, u32, (bool, bool)) = Default::default(); println!("{}.
2021-03-05 11:30:05 419
原创 16.枚举中的option和result.rs
fn test_option() { //Option 是 Rust 标准库中的枚举类,这个类用于填补 Rust 不支持 null 引用的空白 /* enum Option<T> { Some(T), None, } */ let opt = Option::Some("Option_Some_str"); match opt { Option::Some(s.
2021-03-05 11:28:21 370 1
原创 15.枚举enum.rs
//枚举类在 Rust 中并不像其他编程语言中的概念那样简单,但依然可以十分简单的使用#[derive(Debug)]enum Book { Papery, Electronic,}//如果你现在正在开发一个图书管理系统,你需要描述两种书的不同属性(纸质书有索书号,电子书只有 URL),你可以为枚举类成员添加元组属性描述enum Book2 { Papery(u32), Electronic(String),}//如果你想为属性命名,可以用结构体语法e.
2021-03-05 11:27:36 157
原创 14.结构体struct.rs
//Rust 里 struct 语句仅用来定义,不能声明实例,结尾不需要 ; 符号,而且每个字段定义之后用 , 分隔#[derive(Debug)]struct Site { domain: String, name: String, nation: String, found: u32}fn main() { let runoob = Site { domain: String::from("www.runoob.com"), .
2021-03-05 11:24:57 231
原创 13.迭代器.rs
/*在Rust中,迭代器共分为三个部分:迭代器、适配器、消费者。_迭代器_给你一个值的序列_适配器_操作迭代器,产生一个不同输出序列的新迭代器_消费者_操作迭代器,产生最终值的集合迭代器本身提供了一个惰性的序列,适配器对这个序列进行诸如筛选、拼接、转换查找等操作,消费者则在前两者的基础上生成最后的数值集合更多请看https://blog.csdn.net/guiqulaxi920/article/details/78823541*/use std::collections::Has.
2021-03-05 11:23:31 154
原创 12.映射表map.rs
/* 映射表*/use std::collections::HashMap;fn test_1() { println!("-------------------------test_1-------------------------"); let mut map = HashMap::new(); //这里没有声明散列表的泛型,是因为 Rust 的自动判断类型机制。 map.insert("color", "red"); map.insert("size",.
2021-03-05 11:20:41 176
原创 11.向量vector.rs
/*向量(Vector)是一个存放多值的单数据结构,该结构将相同类型的值线性的存放在内存中。向量是线性表,在 Rust 中的表示是 Vec<T>。向量的使用方式类似于列表(List),我们可以通过这种方式创建指定类型的向量:*/fn test_1() { let vector: Vec<i32> = Vec::new(); // 创建类型为 i32 的空向量 let vector = vec![1, 2, 4, 8]; // 通过数组创建向量 .
2021-03-05 11:20:09 205
原创 10.切片slice.rs
//切片(Slice)是对数据值的部分引用。//..y 等价于 0..y//x.. 等价于位置 x 到数据结束//.. 等价于位置 0 到结束fn main() { //最简单、最常用的数据切片类型是字符串切片(String Slice)。 let s = String::from("broadcast"); let len = s.len(); let part1 = &s[0..5]; let part2 = &s[5..len];.
2021-03-05 11:19:37 211
原创 9.整型安全操作.rs
fn main() { //值得注意的是他们返回的都是Option类型 let t = 0x12345678u32.checked_mul(15); println!("{:?}",0x12345678u32.checked_mul(15));//乘法 println!("{:?}",0x12345678u32.checked_add(15));//加法操作 println!("{:?}",100u32.checked_div(1)); println!.
2021-03-04 11:37:57 152 1
原创 8.元组tup.rs
//元组用一对 ( ) 包括的一组数据,可以包含不同种类的数据fn main() { let tup:(i32,f64,&str) = (123,0.456,"abcd"); println!("{}-{}-{}",tup.0,tup.1,tup.2); let (x,y,z) = tup; println!("{}-{}-{}",x,y,z);}
2021-03-04 11:37:21 165 1
原创 7.字符串.rs
/**/fn test_1() { //新建字符串: let string = String::new(); //字符串长度: let len = string.len(); //基础类型转换成字符串: let one = 1.to_string(); // 整数到字符串 let float = 1.3.to_string(); // 浮点数到字符串 let slice = "slice".to_string();.
2021-03-04 11:36:40 234 1
原创 6.变量的使用.rs
fn main() { let mut a = 123; // a = "abc"; 错误在于当声明 a 是 123 以后,a 就被确定为整型数字,不能把字符串类型的值赋给它。 // a = 4.56; 错误在于自动转换数字精度有损失,Rust 语言不允许精度有损失的自动数据类型转换。 //不带mut也可以改变值,变量的值可以"重新绑定" let b = 123; let b = 456; // 虽然 Rust 有自动判断类型的功能,但...
2021-03-04 11:35:53 192 1
原创 5.注释.rs
/////////////////////////////////////// 这种事第二类注释,用于说明本模块的功能。一般置于模块文件的头部。(好像必须放在头部)/////////////////////////////////////////! note: inner doc comments like this (starting with `//!` or `/*!`) can only appear before items//! # The Rust Standard Library/..
2021-03-04 11:35:10 207 1
原创 4.extern关键字.rs
/*在rust中有两种用法1.导入外部的包 extern crate mylib 。在最新的rust2018中已经可以不在声明2.extern "C" 目测和C语言完全一致每一个crate就是一个根模块。如:exp, lip, lip1, lip2, lip3。独立的一个文件就是一个mod,文件名就是mod名;但是main.rs, lib.rs, mod.rs除外,mod.rs的模块名就是其所在目录的名字; 而main.rs, lib.rs 的目录结构,如:exp/src/main.rs或 .
2021-03-04 11:34:20 1119 1
原创 3.type关键字.rs
/*你可以使用 type 关键字声明另一类型的别名(用法和C++一样一样的)类型别名:type aliasestype Name = String;type 也可以用来声明trait的关联类型,详细请看“特性trait”章节更多详细信息请看:https://github.com/rooat/RustLearn/blob/master/src/ch19-04-advanced-types.md*/fn test_1() { type Name = String; l.
2021-03-04 11:33:37 295 1
原创 2.static关键字.rs
/*Rust 全局变量(static): 1.定义如下 static NUM: i32 = 100; 2.全局变量和常量类似,但是一个重要的区别就是,全局变量不会被内联,在整个程序中,全局变量只有一个实例,也就是说所有的引用都会指向一个相同的地址。 3.定义全局变量使用关键字static,而定义常量使用const,定义普通变量使用let 4.和常量不同,全局变量可以定义为可变的(mut) 5.因为全局变量可变,就会出现被多个线程同时访问的情况,因而引发内存不安全..
2021-03-04 11:32:09 185 1
原创 1.const关键字.rs
/*定义常量与定义普通变量的区别: 1.关键字是const而不是let 2.常量声明时候必须指明类型,编译器不会进行自动推导 3.定义常量时变量的命名规则一般是全部大写(如NUM),非强制,但是会有warning。 4.常量可以在任意作用域进行定义,而定义的常量贯穿整个程序的生命周期。在编译的时候,编译器会尽 可能将其内联到代码中,所以在不同地方对同一常量的引用并不能保证引用到相同的内存地址。 5.常量的赋值只能是常量表达式/数学表达式,也就是说必须是.
2021-03-04 11:30:28 240 1
原创 Rustup 管理工具
Rustup 是一个命令行应用,能够下载并在不同版本的 Rust 工具链中进行切换 —— 如编译器 rustc 和标准库,该应用所支持的平台数量不少。事实上,rustc 本身就支持大约 56 个平台,而 rustup 实际上能够为其中14个平台管理编译器,为30个平台管理标准库。一般安装不会只安装rust编译器,而是下载rustup工具,它是rust的安装器(安装编译器、标准库、Cargo等)和rust的版本管理工具(可切换rust版本)安装rustup:curl https://sh.rustup
2021-03-04 11:19:18 1408 1
原创 Rust学习资料大全
2021年接触了区块链,接触了波卡,接触了rust,接触了一个全新的世界,愿自己可以有一个好的发展,加油!!!rust语言是一门新兴起的编程语言,作为一个编程爱好者很想把他学精学透。但是一门编程语言没有个一年两载很难学精了,但是如果不进行总结就会进入到驴拉磨或者狗熊掰棒子的境地,所以稍稍做一些总结吧,但是大体上以后以学习区块链为主,以学习编程语言为辅,语言只是一门工具(小组长说的,想想还蛮有道理的)学习网站集合1.https://www.runoob.com/rust/rust-tutorial.h
2021-03-02 19:01:25 708 1
转载 gRPC简介及简单使用(C++)
原文连接:https://blog.csdn.net/fengbingchun/article/details/100626030gRPC是一个现代的、开源的、高性能远程过程调用(RPC)框架,可以在任何平台运行。gRPC使客户端和服务器端应用程序能够透明地进行通信,并简化了连接系统的构建。gRPC支持的语言包括C++、Ruby、Python、Java、Go等。gRPC默认使用Google的Protocol Buffers,关于Protocol Buffers的介绍可以参考:https://blog
2020-12-25 20:12:03 3018 1
转载 HTTP 2.0 协议
1.HTTP/2较HTTP/1.1优化亮点HTTP/2是一个二进制协议,其基于“帧”的结构设计,改进了很多HTTP/1.1痛点问题。下面列举一些最常被津津乐道的改进之处:多路复用的流 头部压缩 资源优先级和依赖设置 服务器推送 流量控制 重置消息以上列举的每一项都值得做深入细致的研究,这里就只针对“多路复用”功能的实现进行深入的学习。2.“多路复用”的原理解析2.1 什么是多路复用?网络上有一张图能清晰的解释这个问题:HTTP/1.1协议的请求-响应模型大家都是熟悉的,我们
2020-12-25 20:09:35 363
转载 QUIC协议初探
1、QUIC介绍(1)QUIC(Quick UDP Internet Connections)协议是一种全新的基于UDP的web开发协议。可以用一个公式大致概括:TCP + TLS + HTTP2 = UDP + QUIC + HTTP2’s API从公式可看出:QUIC协议虽然是基于UDP,但它不但具有TCP的可靠性、拥塞控制、流量控制等,且在TCP协议的基础上做了一些改进,比如避免了队首阻塞;另外,QUIC协议具有TLS的安全传输特性,实现了TLS的保密功能,同时又使用更少的R.
2020-12-25 20:05:40 608
转载 QUIC 协议产生的背景和核心特性
作者介绍:罗成,腾讯资深研发工程师。目前主要负责腾讯 stgw(腾讯安全云网关)的相关工作,整体推进腾讯内部及腾讯公有云,混合云的七层负载均衡及全站 HTTPS 接入。对 HTTPS,SPDY,HTTP2,QUIC 等应用层协议、高性能服务器技术、云网络技术、用户访问速度、分布式文件传输等有较深的理解。本文主要介绍 QUIC 协议产生的背景和核心特性。写在前面如果你的 App,在不需要任何修改的情况下就能提升 15% 以上的访问速度。特别是弱网络的时候能够提升 20% 以上的访问速度..
2020-12-25 20:03:44 620
转载 TCP Fast Open知识
TCP Fast Open定义TCP Fast Open(TFO)是用来加速连续TCP连接的数据交互的TCP协议扩展,原理如下:在TCP三次握手的过程中,当用户首次访问Server时,发送SYN包,Server根据用户IP生成Cookie(已加密),并与SYN-ACK一同发回Client;当Client随后重连时,在SYN包携带TCP Cookie;如果Server校验合法,则在用户回复ACK前就可以直接发送数据;否则按照正常三次握手进行。起源由Google于2011年的论文(http:/.
2020-12-25 20:01:58 1069
转载 TCP的拥塞控制
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做网络拥塞。在计算机网络中数位链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。当输入的负载到达一定程度 吞吐量不会增加,即一部分网络资源会丢失掉,网络的吞吐量维持在其所能控制的最大值,转发节点的缓存不够大这造成分组的丢失是拥塞的征兆。TCP的四种拥塞控制算法1.慢开始2.拥塞控制3.快重传4.快恢复假定:1.数
2020-12-13 12:02:33 231
转载 TCP滑动窗口
TCP窗口机制#TCP header中有一个Window Size字段,它其实是指接收端的窗口,即接收窗口。用来告知发送端自己所能接收的数据量,从而达到一部分流控的目的。其实TCP在整个发送过程中,也在度量当前的网络状态,目的是为了维持一个健康稳定的发送过程,比如拥塞控制。因此,数据是在某些机制的控制下进行传输的,就是窗口机制。窗口缩放因子(Window Scaling)#以前,window size最大为2的16次方,为65535,随着宽带不断提高,65535字节已经小了,为了突破限制
2020-12-13 12:00:51 592
转载 TIME_WAIT简介
在TCP断开的过程中会有四个状态变化过程,如下图所示:在连接撤销过程中,有如下过程:1.HOST1上的应用程序关闭己方的连接导致TCP发送一个FIN消息给HOST2。2.HOST2发送一个确认消息给HOST1,并且HOST2把FIN作为EOF递交给HOST2上的应用程序。3.一段时间过后,HOST2上的应用程序关闭它那边的连接,引发一个FIN消息给HOST1。4.HOST1给HOST2发送一个确认消息...
2020-12-13 11:57:28 611
转载 MTU介绍
数据链路层:用于俩个设备(同一种数据链路节点)之间进行传递一、认识以太网“以太网”不是一种具体的网络,而是一种技术标准,包含了数据链路层的内容,也包含了一些物理层的内容 以太网必须使用双绞线 以太网是当前最广泛的局域网技术以太网的帧格式:目的地址:6字节,网卡中的硬件地址,固定在网卡上的 源地址:6字节,网卡中的硬件地址(MAC) 类型:协议类型:IP,ARP,RARP 数据:46~1500字节, CRC:循环冗余验证认识MTU:MTU,最大传输单元,相当于发快递时对包裹
2020-12-13 11:55:08 5057
转载 TCP的ACK原理和延迟确认机制
原文地址:https://blog.csdn.net/gamekit/article/details/53898802一、ACK定义TCP协议中,接收方成功接收到数据后,会回复一个ACK数据包,表示已经确认接收到ACK确认号前面的所有数据。ACK字段长度为32位,能表示0~2^32-1之间的值。二、ACK作用发送方在一定时间内没有收到服务端的ACK确认包后,就会重新发送TCP数据包。发送方收到了ACK,表明接收方已经接收到数据,保证了数据的可靠达到。三、ACK机制接收方在接收到数
2020-12-13 11:52:40 2200
转载 golang tcp keepalive实践
前文中已经介绍了TCP keep alive的做了详尽说明,本文结合golang,介绍如何使用TCP keep alive。目前golang net包不提供TCP keep alive空闲多长时间开始探测、探测总次数直接设置。可以使用第三方包。1.下载第三方包git clone git@github.com:felixge/tcpkeepalive.git注意放到GOPATH目录下。2.例子2.1 serverserver端,接受client连接请求,建立连接后,设置..
2020-07-02 21:45:42 1092
转载 TCP keepalive的详解(解惑)
TCP是面向连接的,一般情况,两端的应用程序可以通过发送和接收数据得知对端的存活。当两端的应用程序都没有数据发送和接收时,如何判断连接是否正常呢?这就是SO_...
2020-07-02 21:41:07 1434
转载 Go的自动化测试
自动化测试,是在预设条件下运行系统或应用程序,评估运行结果,预先条件包括正常条件和异常条件。Go本身提供了一套轻量级的测试框架,相对低级,但不过还是有效的。它依赖...
2020-07-01 22:33:49 923
转载 Go语言初探gRPC服务
原文链接:https://www.jianshu.com/p/20ed82218163环境:2018-05-12 protoc 3.5.1 go1.10.1 windowsgRPC: Google主导开发的RPC框架,这里不再赘述。准备工作先安装Protobuf 编译器 protoc,下载地址:https://github.com/google/protobuf/releases我的是windows,将压缩包bin目录下的exe放到环境PATH目录中即可。然后获取插件支持库 //
2020-06-27 18:32:31 1305
转载 go使用kafka
原文链接:https://www.cnblogs.com/angelyan/p/10800739.htmlwindows上kafka的安装1.安装jdk下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html下载需要注册oracle添加环境变量JAVA_HOME=C:\Program Files\Java\jre1.8.0_2112.安装Zookeeper下载
2020-06-26 13:09:33 929
转载 golang 使用 redis 的教程
原文链接:https://blog.csdn.net/wangshubo1989/article/details/75050024/生命不止,继续 go go go !!!以前介绍过golang中如何使用sqlite3:《Go实战–go语言操作sqlite数据库(The way to go)》今天跟大家分享的是如何在golang中使用redis数据库。##何为redis官网:https://redis.io/Redis is an in-memory database open-s
2020-06-25 12:37:38 706
SSDTHook实现进程保护
2017-06-09
SkinSharp开发库+百款皮肤+皮肤编辑器
2017-05-24
minhook-1.3.2
2017-05-09
python2.7.8 32
2016-05-25
AStar 算法实例
2015-07-18
Visual Assist X补丁
2015-06-18
cmake-3.14.3-win64-x64.zip
2019-09-05
跨平台高性能TCP服务器框架 &boost;
2018-06-25
网狐IOCP压缩版
2018-06-22
用C++实现的壳
2017-09-14
像加载DLL一样加载EXE
2017-09-10
protobuf-2.61最新版
2017-08-28
Gh0stVC6到VS2010迁移所有问题的解决方法
2017-08-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人