- 博客(104)
- 收藏
- 关注
原创 Go语言Web项目搭建
Web论坛搭建(后端部分)需求罗列根据前端提供的基础,实现业务逻辑的开发,主要包括:用户的登陆注册功能登陆后,用户具有撰写帖、修改帖子、阅读帖子以及删除帖子的需求提供一个相册,用户可以上传图片、展示图片实现一个分页机制,使得可以限定每页展示的帖子数量(即上一页,下一页)提供一个社区阅读排行榜,统计文章点击的数量,并且进行显示(类似于微博热搜)注意:项目需要提供一个配置组件,提供一个配置文件,减少后期代码的改动项目需要提供一个日志组件,便于记录/调试项目需要提供一个Session,
2021-01-20 21:54:06 7413 24
原创 Go语言Web基础总结
现代Web服务Web⼯作⽅式浏览器本身是⼀个客户端,当你输⼊URL的时候,⾸先浏览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP,然后通过IP地址找到IP对应的服务器后,要求建⽴TCP连接,等浏览器发送完HTTP Request(请求)包后,服务器接收到请求包之后才开始处理请求包,服务器调⽤⾃身服务,返回HTTP Response(响应)包;客户端收到来⾃服务器的响应后开始渲染这个Response包⾥的主体(body),等收到全部的内容随后断开与该服务器之间的TCP连接。简单归纳为:
2020-07-19 23:56:42 606
原创 Golang 中高级工程师学习笔记
闭包(Closure)是一种函数值,它可以引用在其外部定义的变量。闭包允许这些变量保持在函数内部,而不是被每次调用时重新创建。闭包的作用主要体现在以下几个方面。
2024-01-20 23:52:42 582
原创 Python基础
关键字import keyword # 导包, keyword是系统中已经定义好的内容,想要使用就需要导入print(keyword.kwlist)[‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘async’, ‘await’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’
2022-01-02 22:19:42 500
原创 ubuntu一键安装docker
ubuntu安装dockercurl -sSL https://get.daocloud.io/docker | sh
2021-11-09 10:28:39 1143
原创 【leetcode】字符串全排列
package mainimport ( "fmt")func permutation(s string) []string { index := 0 data := []byte(s) result := []string{} TraceBack(index, data, &result) return result}// 回溯算法func TraceBack(x int, data []byte, res *[]string) { // 所有位置均有值了,则添加.
2021-10-27 12:29:52 228
原创 狂神redis笔记
Redis入门Redis是什么?Redis(Remote Dictionary Server ),即远程字典服务,数据都是缓存在内存中。redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步特性 多样的数据类型 持久化 集群 事务基础知识redis默认有16个数据库默认使用的第0个;16个数据库为:DB 0~DB 15默认使用DB 0 可以使用select n切换到DB ndbs
2021-08-13 19:35:35 216
原创 狂神Docker基础笔记,全网最全!
课程链接官方文档仓库地址Docker安装与卸载安装#1.卸载旧版本yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \
2021-08-06 17:55:19 372
原创 Go协程超时退出的三种方式
主要介绍如何实现超时控制,主要有三种1、context.WithTimeout/context.WithDeadline + time.After2、context.WithTimeout/context.WithDeadline + time.NewTimer3、channel + time.After/time.NewTimercontext.WithTimeout + time.Afterfunc AsyncCall() { ctx, cancel := context.WithTime
2021-07-23 14:41:15 2797
原创 进程、线程以及Goroutine的区别
进程、线程、协程从内存、执行单元以及切换成本三个角度来考虑内存进程 操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。 进程的安全性比较⾼ 通信成本就比较⼤(通过IPC): 信号 管道 共享内存 socket⽹络通信 共享⽂件线程 操作系统调度(CPU调度)执⾏的最小单位。 共享资源,隔离性差 通信成本比较小 通过同步机制访问共享资源即可完成通信 线程是寄生在进程之上的执行
2021-07-02 15:44:16 211
原创 Mysql的索引笔记
索引我们分为四类:单列索引(普通索引,唯一索引,主键索引)、组合索引、全文索引、空间索引。单列索引一个索引只包含单个列,但一个表中可以有多个单列索引。 这里不要搞混淆了。普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。唯一索引:索引列中的值必须是唯一的,但是允许为空值。主键索引:是一种特殊的唯一索引,不允许有空值。组合索引一个的索引包含多个列,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左
2021-06-18 12:23:49 123
原创 计算机网状态码
http状态码常见状态码200(“OK”)一切正常。实体主体中的文档(若存在的话)是某资源的表示。400(“Bad Request”)客户端方面的问题。实体主题中的文档(若存在的话)是一个错误消息。希望客户端能够理解此错误消息,并改正问题。500(“Internal Server Error”)服务期方面的问题。实体主体中的文档(如果存在的话)是一个错误消息。该错误消息通常无济于事,因为客户端无法修复服务器方面的问题。301(“Moved Permanently”)当客户端触
2021-06-08 10:59:29 195 2
原创 Redis的5种数据类型
redis的5种数据类型:string 字符串(可以为整形、浮点型和字符串,统称为元素)list 列表(实现队列,元素不唯一,先入先出原则)set 集合(各不相同的元素)hash hash散列值(hash的key必须是唯一的)sort set 有序集合string 字符串可以为整形、浮点型和字符串,统称为元素string类型的常用命令 自加:incr 自减:decr 加: incrby 减: decrbylist 列表实现队列,元素不唯一,先入先出原则
2021-04-20 18:25:31 311
原创 Docker
Docker是什么Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。Docker的三个概念镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。
2021-04-09 10:58:34 374
原创 Mysql笔记
事务的基本要素(ACID)事务的并发问题脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。MySQL事务隔离级别m
2021-04-07 23:24:09 97
原创 数据库SQL调优的几种方式
创建索引尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引索引太多会降低 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑避免在索引上使用计算在where字句中,如果索引列是计算或者函数的一部分,DBMS的优化器将不会使用索引而使用全表查询,函数属于计算的一种,同时在in和exists中通常情况下使用EXISTS,因为in不走索引效率低: select * from user w
2021-04-01 10:23:23 187
原创 两个栈实现一个队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )package mainimport ( "fmt")func main() { obj := Constructor() obj.AppendTail(3) obj.AppendTail(2) val := obj.DeleteHead() fmt.Printl
2021-03-30 20:47:20 110
原创 分布式从ACID、CAP、BASE的理论推进
事务及ACID事务要么什么都不做,要么做全套(All or Nothing)ACID理论⼀体式的数据库,都应该满⾜ACID特性原⼦性(Atomicity)⼀致性(Consistency)在事务开始之前和事务结束以后,数据库数据的⼀致性约束没有被破坏隔离性(Isolation)隔离性可以防⽌多个事务并发执⾏时由于交叉执⾏而导致数据的不⼀致持久性(Durability)事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失CAP理论⼀致性Consisten
2021-03-25 19:14:34 111 1
原创 Go语言复习回顾
数据定义函数返回值问题在函数有多个返回值时,只要有⼀个返回值有名称,那么其他返回值也⼀定要有名称结构体的比较问题规则⼀: 只有相同的类型的结构体才可以⽐较(1 结构体的属性类型, 2 属性的顺序)规则⼀: 即使两个结构体的属性类型和顺序相同,但是⾥⾯存在不可⽐较类型,依然是不可以直接==⽐较的。 ⽐如 map,slice 可以参考⽤reflect.DeepEqual⽅法来进⾏⽐较string与nil类型的问题nil空值的赋值空值, 空指针,所有Golang中的引⽤类型
2021-03-18 15:22:35 167
原创 Golang中如何进行项目模块及依赖管理
什么是Go ModulesGo modules 是 Go 语⾔的依赖解决⽅案发布于 Go1.11成⻓于 Go1.12丰富于 Go1.13正式于 Go1.14 推荐在⽣产上使⽤。解决了什么问题 Go 语⾔⻓久以来的依赖管理问题 “淘汰”现有的 GOPATH 的使⽤模式。 统⼀社区中的其它的依赖管理⼯具(提供迁移功能)。GOPATH的弊端⽆版本控制概念⽆法同步⼀致第三⽅版本号⽆法指定当前项⽬引⽤的第三⽅版本号Go Modules模式go mod命令go mod init
2021-03-10 16:41:43 483
原创 Defer知识点
defer 的执行顺序/* 知识点一: defer 的执行顺序*/package mainimport "fmt"func func1() { fmt.Println("A")}func func2() { fmt.Println("B")}func func3() { fmt.Println("C")}func main() { defer func1() defer func2() defer func3()}输出:CBAdefer和retu
2021-03-09 09:13:47 159
原创 Go协程的小发现
package mainimport ( "fmt" "time")type myString stringfunc (v *myString) myMethod() { fmt.Println(*v)}// 理解为启动协程所耗时间比for循环结束时间要长,所以都是打印出不固定// go的时候对象已经被篡改了func bad1(values []myString) { for _, v := range values { go func() { fmt.Printl
2021-02-27 22:23:37 103
原创 Golang的⾯向对象思想
Golang的面向对象思想interface接口特点interface 是⽅法声明的集合任何类型的对象实现了在interface 接⼝中声明的全部⽅法,则表明该类型实现了该接⼝注意interface⼀定要和多态的特性结合面向对象的开闭原则平铺式的模块设计开闭原则的设计面向对象的依赖倒转原则耦合度极高的设计方式接口的意义多态的思想调用未来...
2021-02-26 08:35:55 119 1
原创 epoll的理论与IO复⽤及阻塞机制
流、 I/O操作及阻塞概念流可以进⾏I/O操作的内核对象⽂件、管道、套接字……流的⼊⼝:⽂件描述符(fd)I/O操作所有对流的读写操作,我们都可以称之为IO操作阻塞阻塞等待 不占⽤CPU宝贵的时间⽚⾮阻塞忙轮询 占⽤CPU,系统资源在处理意⻅数据的接收场景时, 我们建议优先选择阻塞等待的⽅式, 不浪费性能资源阻塞等待缺点不能够很好的处理 多个(I/O)请求的问题同⼀个阻塞,同⼀时刻只能处理⼀个流的阻塞监听多路IO复用既能够阻塞等待,不浪费资源也能够同⼀时刻监
2021-02-22 16:10:04 197
原创 Golang中的GC垃圾回收机制
Go V1.3 之前的标记清除(mark and sweep)流程第⼀步,暂停程序业务逻辑, 找出不可达的对象,和可达对象第⼆步, 开始标记,程序找出它所有可达的对象,并做上标记第三步, 标记完了之后,然后开始清除未标记的对象第四步, 停⽌暂停,让程序继续跑。然后循环重复这个过程,直到process程序⽣命周期结束缺点Go V1.5 三色标记法Go V1.8 混合写屏障机制总结...
2021-02-21 20:36:45 271
原创 Golang的GMP学习笔记
Golang“调度器”由来单进程时代的两个问题单⼀执⾏流程、计算机只能⼀个任务⼀个任务处理进程阻塞所带来的的CPU浪费时间多进程、多线程的问题设计变得复杂 进程/线程的数量越多,切换成本就越⼤,也就越浪费 多线程 随着 同步竞争(如 锁、竞争资源冲突等多进程、多线程的壁垒 ⾼内存占⽤:进程占⽤虚拟内存4GB+线程占⽤内存约4MB ⾼CPU调度消耗协程(co-routine), 引发的问题N:1 ⽆法利⽤多个CPU、出现阻塞的瓶颈1:1 跟多线程/多进程
2021-02-15 15:52:11 546
原创 Golang中逃逸现象-变量何时 栈何时堆
变量的逃逸现象-将⼀个局部变量的地址返回给上层函数,依然能够访问,那么这个局部变量产⽣的了逃逸现象,当前变量应该并没有分配到栈上。package main//inline内联函数func foo(arg_val int) *int { var foo_val1 int = 11 var foo_val2 int = 12 var foo_val3 int = 13 var foo_val4 int = 14 var foo_val5 int = 15 //目的是防止编译器优化,优化成
2021-02-12 21:57:23 812
原创 Golang内存调试与CPU性能分析
如何分析程序的运行时间time指令time go run main.goreal 从程序开始到结束,实际上度过的时间user 程序在⽤户态度过的时间程序在内核态度过的时间 ⼀般情况下 real>= user + sys/usr/bin/time指令可以看到CPU占⽤率、内存的使⽤情况、进程的切换情况、⽂件系统IO、socket情况等如何分析Golang程序的内存使用情况内存的占用情况top -p $(pidof 进程名)mem 总体内存情况f
2021-02-11 22:56:32 815
原创 Gorm学习笔记
Go语言ORM框架:gorm/xormORM框架解决了对象/实例 与关系型数据库的映射,解决了程序员不想写数据库语句的问题对应关系数据表 <–> 类、结构体数据行 <–> 对象、实例数据字段 <–> 属性、结构体字段gorm中文文档:http://gorm.io/zh_CN/docs/github地址:https://github.com/jinzhu/gorm例子package mainimport
2021-02-11 22:55:45 262
原创 Go使用Redis
Redis简介NoSQL(Not Only SQL),指的是非关系型的数据库。随着Web2.0的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。redis是一个key-value存储系统,类似还有Memcached。它支持存储的value类型相对更多,包括字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、带范围查
2021-01-26 21:26:49 388
原创 Go语言的中间件
Go语言的中间件Gin框架下的中间件Go的net/http设计的⼀⼤特点就是特别容易构建中间件。gin也提供了类似的中间件。需要注意的是中间件只对注册过的路由函数起作⽤。对于分组路由,嵌套使⽤中间件,可以限定中间件的作⽤范围。中间件分为全局中间件,单个路由中间件和群组中间件。中间件和我们普通的 HandlerFunc 没有任何区别。我们怎么写 HandlerFunc 就可以怎么写⼀个中间件。例子1package mainimport ( "fmt" "github.com/gin-g
2020-12-30 09:36:04 704 2
原创 GoMod的使用
开启 Go module 功能Go module 功能需要您的 Go 版本在 Go 1.11 及以上GoMod用于管理依赖包配置 Goproxy 环境变量由于GitHub需要科学上网,故如下设置:go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct即设置环境变量:GOPROXY=“https://goproxy.io”如果包被屏蔽(墙),可以使用这个命令,随后使用g
2020-12-30 09:31:09 222 1
原创 Gin框架
Gin框架数据绑定简单来说,,就是根据Body数据类型,将数据赋值到指定的结构体变量中 (类似于序列化和反序列化) 。Must bind⽅法:Bind , BindJSON , BindXML , BindQuery , BindYAML如果存在绑定错误,则⽤c终⽌请求,使⽤ c.AbortWithError (400) .SetType (ErrorTypeBind) 即可。如果想更好地控制⾏为,可以考虑使⽤ShouldBind等效⽅法.Should bind方法:ShouldBind
2020-12-21 21:04:59 952
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人