自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 go使用logrus日志中间件

go使用logrus日志中间件package mainimport ( "fmt" "github.com/gin-gonic/gin" "github.com/sirupsen/logrus" "os" "path" "time")func Logger() *logrus.Logger { now := time.Now() logFilePath := "" if dir, err := os.Getwd(); err

2021-12-29 14:57:10 398

原创 go 优雅的重启或停止web服务器

我们可以使用 fvbock/endless 来替换默认的 ListenAndServe。更多详细信息,请参阅 issue #296。router := gin.Default()router.GET("/", handler)// [...]endless.ListenAndServe(":4242", router)

2021-12-29 14:54:47 629

原创 python 压力测试

python 压力测试自己写了个压力测试。测试以下go的接口,提高并发请求,然后去改进go的代码,在go中使用多线程,提高并发性能import datetimeimport randomimport stringfrom queue import Queueimport fakerfrom locust import HttpUser, TaskSet, between, taskq = Queue()f = faker.Faker(locale='zh-CN')# 计时d

2021-11-18 16:00:15 2500

原创 django 使用celery(异步/定时)发送邮件

使用celery(异步/定时)发送邮件项目结构myproject apps app1 views.py app2 views.py project settings.py celery_tasks celery.py config.py email tasks.pysettings.py# settings.py# 配置邮件发送EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBacken

2021-11-09 18:03:47 1367 2

原创 git PR 流程

git PR1.首先Fork本项目,把它变成你自己GitHub下的项目。如果你没有设置好Git,可参照GitHub指引。成功后可在自己GitHub账户下看到notes项目。将项目用命令行clone到本地后创建新分支。$ git clone https://github.com/你自己GitHub用户名/notes.gitcd notesgit checkout -b learn/add-my-name然后用文本编辑器打开github-pull-request.md这个文件,在末尾加上你的名字。

2021-10-28 15:37:50 4308

原创 MongoDB Map Reduce 聚合

MongoDB Map ReduceMap-Reduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE)。MongoDB提供的Map-Reduce非常灵活,对于大规模数据分析也相当实用。MapReduce 命令以下是MapReduce的基本语法:>db.collection.mapReduce( function() {emit(key,value);}, //map 函数 function(key,values

2021-10-28 15:18:47 428

原创 MongoDB 索引

MongoDB 索引索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构ensureIndex() 方法MongoDB使用 ensureIndex() 方法来创建索引。语法ensureIn

2021-10-28 15:16:20 265

原创 MongoDB 索引

MongoDB 索引索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构ensureIndex() 方法MongoDB使用 ensureIndex() 方法来创建索引。语法ensureIn

2021-10-28 15:14:59 72

原创 MongoDB 排序

MongoDB 排序MongoDB sort()方法在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。语法sort()方法基本语法如下所示: >db.COLLECTION_NAME.find().sort({KEY:1}) 实例col 集合中的数据如下: { "_id" : ObjectId("56066542ade2f21f36b0313a

2021-10-28 15:14:12 466

原创 MongoDB操作符, $type ,Limit与Skip方法

MongoDB $type ,操作符,Limit与Skip方法描述在本章节中,我们将继续讨论MongoDB中条件操作符 $type。$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。MongoDB 中可以使用的类型如下表所示:类型数字备注Double1String2Object3Array4Binary data5Undefined6已废弃。Object id7Boolean8

2021-10-28 15:13:29 115

原创 MongoDB 查询文档

MongoDB 查询文档语法MongoDB 查询数据的语法格式如下:>db.COLLECTION_NAME.find()find() 方法以非结构化的方式来显示所有文档。如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:>db.col.find().pretty() pretty() 方法以格式化的方式来显示所有文档。实例以下实例我们查询了集合 col 中的数据:> db.col.find().pretty() {

2021-10-28 15:11:08 78

原创 MongoDB基础操作

MongoDB 创建数据库语法MongoDB 创建数据库的语法格式如下:use DATABASE_NAME如果数据库不存在,则创建数据库,否则切换到指定数据库。实例以下实例我们创建了数据库 mongo:> use mongo switched to db mongo > db mongo > 如果你想查看所有数据库,可以使用 show dbs 命令:> show dbs local 0.078GB test 0.078GB >

2021-10-28 15:10:13 168

原创 理解 Go interface 的 5 个关键点

理解 Go interface 的 5 个关键点1、interface 是一种类型type I interface { Get() int}首先 interface 是一种类型,从它的定义可以看出来用了 type 关键字,更准确的说 interface 是一种具有一组方法的类型,这些方法定义了 interface 的行为。go 允许不带任何方法的 interface ,这种类型的 interface 叫 empty interface。如果一个类型实现了一个 interface 中所有

2021-10-14 10:49:46 219

原创 Golang 高效的原地数组去重

Golang 高效的原地数组去重使用 struct{} 节省空间, 指定 cap=len(arr) 避免 map 扩容。记录非重复元素索引 j,将元素前移,原地去重,只需一次遍历。时间复杂度:O(n)空间复杂度:O(n)func removeDuplication_map(arr []string) []string { set := make(map[string]struct{}, len(arr)) j := 0 for _, v := range arr {

2021-10-13 09:44:28 1265

原创 Go基础语法学习

Go基础语法学习Go语言基础Go是一门类似C的编译型语言,但是它的编译速度非常快。这门语言的关键字总共也就二十五个,比英文字母还少一个,这对于我们的学习来说就简单了很多。先让我们看一眼这些关键字都长什么样:下面列举了 Go 代码中会使用到的 25 个关键字或保留字:breakdefaultfuncinterfaceselectcasedefergomapstructchanelsegotopackageswitchconstfallthroug

2021-10-13 09:43:12 320

原创 Go中的字符串使用----strings和strconv

Go中的字符串使用----strings和strconvGo中的字符串操作字符串是工作中最常用的,值得我们专门的练习一下。在Go中使用strings包来操作字符串,这也是内置的包哈,不像Java中要么手写,要么引入common-lang 或者 别的第三方。另外涉及到字符串与其他类型之间的转换使用了strconv包来操作。strings包1. 字符串包含关系strings.Contains(s, substr string) bool判断s串中是否包含substr串。2. 判断子字符串或字符在

2021-10-11 16:41:18 266

原创 Go标准库--net/http学习

Go标准库–net/http学习Go中对网络的支持提供了标准库,net包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。 http包提供了HTTP客户端和服务端的实现。 一般我们用http肯定多一些,下面来看一下http的使用方式。1. Post和Get请求的使用创建一个最简单的get请求:package mainimport ( "fmt" "io/ioutil" "net/http")func main() { resp, err :=

2021-10-11 16:39:43 551

原创 Go中的指针

Go中的指针学Java以来,让程序员忽略了指针和内存地址这些概念,Java帮我们封装了对象,简化了对象引用之间的关系。在Go语言中,又帮我们回忆起这些概念。我们创建的每一个对象在内存中都有一个位置去存储,每个内存块都有一个地址表示当前位置,通常用十六进制表示,如0x24005676543。Go语言取地址的符号是&。放在一个变量前使用就会返回相应变量的内存地址。比如下面的代码:var a = 3fmt.Printf("num is : %d, it's location in memory:

2021-10-11 16:37:57 131

原创 Go中的文件读写

Go中的文件读写在 Go 语言中,文件使用指向 os.File 类型的指针来表示的,也叫做文件句柄 。我们来看一下os包的使用方式。1.读取文件os包提供了两种打开文件的方法:Open(name string) (*File, error)func OpenFile(name string, flag int, perm FileMode) (*File, error) 第一个方法是以只读的方式去打开文件,如果文件不存在或者程序没有足够的权限打开这个文件,Open函数会返回错误;第二个方法会

2021-10-11 16:36:31 366

原创 Go中的结构体

Go中的结构体前面我们或多或少的都使用了结构体这种数据结构,本身结构体也有很多特性,我们一一来看。结构体的作用是将一个或者多个任一类型的变量组合在一起的数据类型,类似于我们在Java中class的作用。在结构体重也可以嵌套结构体。结构体还可以有自己的方法。1.定义结构体我们先定义一个结构体:结构体定义如下:type 标识符 struct { field1 type field2 type}例子:type Staff struct { UserId int16 UserName

2021-10-11 16:34:17 115

原创 Go中的interface学习

Go中的interface学习学过Java的同学都知道在Java中接口更像是一种规范,用接口定义了一组方法,下面实现这个接口的类只管按照写好的方法名和返回值去实现就好,内部如何实现是各个方法自己的事情,接口本身不关注。另外Java中实现接口的类必须显式的声明实现了哪个接口: implement InterfaceName,仔细思考一下会有如下问题:如果你修改了接口名,那么类也得跟着修改;你必须先定义接口,才能去实现它;一个类可以实现多个接口,Java中接口的设计更像是弥补继承的不足,如果你希望实

2021-10-11 16:32:35 637

原创 Go中的反射reflect

Go中的反射reflect前面我们在学习到struct结构体的时候,因为结构体中的字段首字母大写,而我们想把json文件映射到该结构体上时,需要在在结构体字段后面加上json标签,表明结构体字段和json字段的映射关系。这其中就用到了反射的方式去获取标签,取出该标签对应的json字段然后存储到结构体字段上。Go语言中提供了反射的包为reflect。在 reflect 包中,主要通过两个函数TypeOf() 和ValueOf()实现反射,TypeOf()获取到的结果是reflect.Type 类型,Val

2021-10-11 16:29:39 236

原创 Go中配置文件读取的几种方式

Go中配置文件读取的几种方式日常开发中读取配置文件包含以下几种格式:json 格式字符串K=V 键值对xml 文件yml 格式文件toml 格式文件前面两种书写简单,解析过程也比较简单。xml形式书写比较累赘,yml是树形结构,为简化配置而生,toml是一种有着自己语法规则的配置文件格式,我们一一来看使用方式,各位看官自行比较哪种更加实用。1.读取json格式的文件package mainimport ( "encoding/json" "fmt" "io/ioutil"

2021-10-11 16:27:20 1961

原创 Go中的并发编程和goroutine

[Go中的并发编程和goroutine]并发编程对于任何语言来说都不是一件简单的事情。Go在设计之初主打高并发,为使用者提供了goroutine,使用的方式虽然简单,但是用好却不是那么容易,我们一起来学习Go中的并发编程。1. 并行和并发并行(parallel): 指在同一时刻,有多条指令在多个处理器上同时执行。并发(concurrency): 指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,通

2021-10-11 16:25:26 172

原创 Go中的fmt几种输出的区别和格式化方式

Go中的fmt几种输出的区别和格式化方式在日常使用fmt包的过程中,各种眼花缭乱的print是否让你莫名的不知所措呢,更让你茫然的是各种格式化的占位符。。简直就是噩梦。今天就让我们来征服格式化输出,做一个会输出的Goer。fmt.Print有几个变种:Print: 输出到控制台,不接受任何格式化操作Println: 输出到控制台并换行Printf : 只可以打印出格式化的字符串。只可以直接输出字符串类型的变量(不可以输出别的类型)Sprintf:格式化并返回一个字符串而不带任何输出Fpri

2021-10-11 16:16:35 627

原创 Pycharm fish Read-only

Pycharm fish Read-onlyIntelliJ IDEA:Ctrl + Alt + SSearch for TerminalSet shell path to /usr/bin/env XDG_CONFIG_HOME=$HOME /usr/bin/fish

2021-09-17 16:06:38 129

原创 docker如何制作容器镜像?

如何制作容器镜像?自己制作容器镜像,主要有两种方法:制作快照方式获得镜像(偶尔制作的镜像):在基础镜像上,比如Ubuntu,先登录镜像系统并安装容器引擎软件,然后整体制作快照。Dockerfile方式构建镜像(经常更新的镜像):将软件安装的流程写成DockerFile,使用Docker build构建成容器镜像。方法一:制作快照方式获得镜像如果后续镜像没有变化,可采用方法一制作镜像。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q7iA9aC2-1630897

2021-09-06 11:03:47 1831

原创 使用GPG加密通讯,设置git提交验证密钥

使用命令行创建 GPG 密钥使用以下 shell 命令:gpg2 --full-gen-key此命令生成由公钥和私钥组成的密钥对。其他人使用您的公钥来验证和/或解密您的通信。分发您的公共密钥尽可能广泛地,尤其是你知道将要收到你正宗的通信,如邮件列表谁的人。例如,Fedora 文档项目要求参与者在他们的自我介绍中包含一个 GPG 公钥。一系列提示将指导您完成整个过程。如果需要,按Enter键分配默认值。第一个提示要求您选择您喜欢的键类型:请选择您想要的密钥类型: (1) RSA 和 RSA(

2021-09-06 11:00:38 899

原创 No known key found for this signature in database解决方法

问题描述:提交代码到Gitea,公钥发布到服务器上,commit已经Verified,但在repo中却显示No known key,解决方法:gitea提供一个SSH/GPG Keys管理设置,把你的pubkey加入进去就可以显示出由你签名

2021-08-31 17:45:48 110

原创 .gitignore文件中的忽略规则

.gitignore文件中的忽略规则空格不匹配任意文件,可作为分隔符,可用反斜杠转义#开头:标识注释,可以使用反斜杠进行转义! 开头:标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。可以使用反斜杠进行转义/ 结束:只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件/ 开头:匹配文件如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录** 匹配多级目录,可

2021-08-31 12:13:30 368

原创 git命令大全

git 命令git config全局配置# 配置电子邮箱git config --global user.email "[email protected]"# 配置提交用户名git config --global user.name "liran"# 列出所有全局配置git config --listgit init将本地代码初始化为一个新的仓库git initgit add添加文件到版本控制中git add 文件名称# 添加所有文件,.gitingore规则排除的文件

2021-08-31 12:08:24 658

原创 Linux下pycharm中无法输入中文问题,亲测有用

Linux下pycharm中无法输入中文问题fedora和ubuntu中皆可解决1、点击菜单 “Help | Edit Custom VM options…”2、添加 -Drecreate.x11.input.method=true 到最后一行3、重启IDEA

2021-08-31 11:25:28 839 7

原创 Django REST framework - 序列化组件、source、钩子函数

[Django REST framework - 序列化组件、source、钩子函数]序列化器-Serializer什么是rest_framework序列化?在写前后端不分离的项目时:我们有form组件帮我们去做数据校验我们有模板语法,从数据库取出的queryset对象不需要人为去转格式当我们写前后端分离项目的时:我们需要自己去做数据校验我们需要手动去转数据格式,因为跨平台数据传输都用json字符串,不能直接jsonqueryset对象序列化器的作用1 序列化:把python中的对象转

2021-08-26 09:56:46 1134

原创 某公司python面试笔试题

【招聘】Readme欢迎来到编程笔试在这个笔试题目里,你将着手编写一个实现一些简易功能的Excel。本笔试题目为测试驱动,即:全部笔试题由20个测试案例组成,其对应文件位于/test/model/目录下。其中,test_spreadsheet1.py包含5个,test_spreadsheet2.py包含10个,test_spreadsheet3.py包含5个,为了通过上述这20个测试案例,你需要逐步完善位于/src/model/目录下的spreadsheet.py文件的代码。请你尽可能多的完善Exc

2021-08-06 16:08:03 520 3

原创 python实现常用的排序算法

常用排序算法用python写一下几个常用的排序算法选择排序def select_sort(arr): length = len(arr) for i in range(length - 1): big = i for j in range(i + 1, length): if arr[j] < arr[big]: big = j temp = arr[i] ar

2021-07-29 17:31:06 80

原创 python

with管理上下文我们在使用资源文件时,不管使用过程中是否发生异常,都会帮助我们执行清理操作,把资源释放。比如说文件使用后自动管理,线程中锁的自动获取和释放通过__enter__方法初始化,然后在__exit__中做善后以及异常处理使用with处理的对象必须有__enter__和__exit__方法迭代器迭代器就是可以记住遍历位置的对象迭代器从第一个元素开始访问,直到所有的元素被全部访问迭代器只能往前不能后退使用__next__来遍历调用可迭代对象的iter方法就可以得到一个迭代器

2021-07-22 20:40:33 65

原创 cpython底层的针对列表的内存管理

列表结构体创建列表C语言底层的结构体lists = []list.append(‘name’)list.append(‘age’)list.append(‘grade’)typedef struct{struct _object *_ob_next;struct _object *_ob_prev; // python内部将对象放在链表进行内存管理Py_ssize_t ob_refcnt; // 引用计数器,就是多少变量用了它PyObject **ob_item; // 指针的指

2021-07-19 15:15:50 88

原创 PIL之resize和convert

resize这个是一段学过的简单程序,可以改变图像的大小,jpg,png都可以的:#function: 更改图片尺寸大小from PIL import Image'''filein: 输入图片fileout: 输出图片width: 输出图片宽度height:输出图片高度type:输出图片类型(png, gif, jpeg...)Image.NEAREST :低质量Image.BILINEAR:双线性Image.BICUBIC :三次样条插值Image.ANTIALIAS:高质量

2021-07-19 14:56:36 594

原创 django 插入库表时如何添加many-to-many字段数据

django 插入库表时如何添加many-to-many字段数据创建对象时,多对多字段不能直接通过下面的方式处理:from .models import ScheduleModel,Userusers=User.objects.filter(age__glt=19)# 这样直接写过不了,会报错: Direct assignment to the forward side of a many-to-many set is prohibitedScheduleModel.objects.create

2021-07-06 18:01:49 513

原创 django-crontab设置定时任务

django-crontab1、安装django-crontab$ pip install django-crontab2、在django项目settings.py中注册INSTALLED_APPS = [ ...... 'django_crontab', 'app_name']【注意】django_crontab一定要注册在应用名之前,在这里是下划线,不是短横。3、在settings.py中配置定时任务# 定时任务设置CRONJOBS = [ # 检测

2021-07-06 17:48:53 433 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除