摘要:
spring架构 按照图中的流程,一定要自己使用idea工具配合着debug,慢慢去看里面源码,除了花费一点时间,不会很难,绝对可以理解的 spring测试用例: maven依赖: <dependencies> <dependency> <groupId>org.projectlombok</gro 阅读全文
摘要:
基本数据类型反射 // 利用函数的参数定义为空接口 func testRefect(i interface{}) { // 调用TypeOf函数,返回reflect.Type类型的数据 reType := reflect.TypeOf(i) fmt.Println(reType) // int // 阅读全文
摘要:
创建客户端 func main() { // 所需的网络编程全都在net包下 conn, err := net.Dial("tcp", "127.0.0.1:8888") fmt.Println("客户端启动") if err != nil { // 连接失败 fmt.Println("客户端连接失 阅读全文
摘要:
协程概念 又称微线程,纤程,协程是一种用户态的轻量级线程 作用:在执行A函数时候,可以随时中断,去执行B函数,然后中断继续执行A函数(可以自动切换),这一切换过程并不是函数调用(没有调用语句),过程很像多线程,然而协程中只有一个线程在执行(一个线程中有多个协程) 代码案例:开启一个协程非常简单,调用 阅读全文
摘要:
文件 创建一个测试文件 代码测试: func main() { // 打开文件 file, err := os.Open("E:/test/Test.txt") if err != nil { // err不为空,说明报错 fmt.Println("文件打开出错:", err) } fmt.Prin 阅读全文
摘要:
结构体 结构体的定义 // 定义结构体,老师的结构体,各个属性统一放入结构体管理 type Teacher struct { // 变量名大写开头外界可以访问 Name string Age int School string } func main() { // 创建老师的实例对象 var t1 阅读全文
摘要:
map引入 func main() { // 定义map var a map[int]string // 只声明map内存是没有分配空间的,必须通过make函数进行初始化 a = make(map[int]string, 10) // 如果不指定大小,map会默认分配大小的 a[1] = "张三" 阅读全文
摘要:
切片的理解 func main() { // 切片是构建在数组之上 // 定义数组 var intarr [6]int = [6]int{1, 4, 7, 3, 6, 9} // 定义切片,从下标1位置截取到下标2的位置,不包含下标3的位置 slice := intarr[1:3] fmt.Prin 阅读全文
摘要:
数组引入使用 func main() { // 给五个学生的成绩,求出总和、平均数 var scores [5]int scores[0] = 96 scores[1] = 91 scores[2] = 39 scores[3] = 60 scores[4] = 21 // 求和 sum := 0 阅读全文
摘要:
先看正常的出现异常情况 func main() { test() // 上面方法执行有报错,所以下面代码不会执行 fmt.Println("上面方法执行成功...") fmt.Println("正常执行下面代码逻辑...") } func test() { num1 := 10 num2 := 0 阅读全文
摘要:
函数写法 func main() { sum := cal(1, 1) fmt.Println(sum) // 2 } // 函数名首字母如果大小,可以在其他包中引用 // 函数语法:参数列表(可以0个或多个),返回值类型列表(可以0个或多个) func cal(num1 int, num2 int 阅读全文
摘要:
if单分支 var count int = 20 if count < 30 { fmt.Println("库存不足") } // 另一种写法: if后面可以并列加入变量定义, 使用分号;隔开 if a := 20; a < 30 { fmt.Println("库存不足a") } if双分支 var 阅读全文
摘要:
算数运算符 // 1. 整数 var n1 int = +10 fmt.Println(n1) // 2. 相加操作 var n2 int = 4 + 7 fmt.Println(n2) // 3. 字符串拼接 var s string = "abc" + "def" fmt.Println(s) 阅读全文
摘要:
指针概念 比如如下代码,其实它是在内存中分配了一个空间,也可以打印出这个变量的地址 var age int = 18; // &符号 + 变量名,也就是&age,就是这个age变量的值的内存地址 fmt.Println(&age) // 0xc00000a0c8 在内存大概位置这样:有个名叫age的 阅读全文
摘要:
golang分基本数据类型和复杂数据类型 数值型 整数类型 有符号整数类型 无符号整数类型 其他整数类型 这么多的整数类型,如果定义时候没有给int类型赋值,默认是0 var a int fmt.Println(a) // 0 默认0 fmt.Println(unsafe.Sizeof(a)) // 阅读全文
摘要:
测试demo: import io.netty.bootstrap.Bootstrap; import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBuf; import io.netty.buffer.PooledB 阅读全文
摘要:
<dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.49.Final</version> </dependency> 测试demo: import io.netty.boot 阅读全文
摘要:
测试demo: public class MainThread { public static void main(String[] args) { // 这里不错io和业务的事情 // 创建IO Thread 一个或多个 // SelectorThreadGroup stg = new Selec 阅读全文
摘要:
测试POLL 测试代码: import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.*; import java.util.H 阅读全文
摘要:
NIO的问题: 优势: 通过1个或几个线程,来解决N个IO连接的处理。 问题: 虽然NIO一个线程可以处理所有事情,但每个操作都要出发系统调用,每个操作都是客户端主动的,无论是接收客户端,还是调用每一个客户端的是否读取到,都是程序向内核调用,然后内核给程序反馈。 这就出现了C10K,当io连接达到一 阅读全文