自定义博客皮肤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-图片旋转处理

最近在做旋转图片验证码,需要对图片进行旋转,网上没有找到类似的库,也没有扎到对应的方法,只有一些简单旋转90度,180度,达不到我的要求。自己封装一个旋转图片的方法,可以旋转任意角度func TestRotating(t *testing.T) { // 打开源图(一张长方形的png图片) f, _ := os.Open("C:/Users/Admin/Desktop/one.png") // png解码 sImg, _ := png.Decode(f) // 圆半径(需要从源图中扣出.

2020-11-27 16:07:31 747

原创 knight-redis,漂亮好看的桌面可视化管理工具

knight-redis自行研发的一块干净整洁的redis桌面可视化工具,支持windows,linux,mac。持续更新,希望大家多多支持github有下载包github:https://github.com/itpika/knight预览图

2020-09-25 10:48:58 658

原创 GO-获取斗鱼弹幕消息

斗鱼弹幕消息官方没有提供SDK,自己封装了GO的斗鱼弹幕消息包,下面介绍一下git地址:https://github.com/itpika/douyumsg安装go get -u github.com/itpika/douyumsg使用package mainimport ( "fmt" "os" "runtime" "github.com/itpika/douyumsg/lib/logger" "github.com/itpika/douyumsg")fu..

2020-07-30 15:45:02 437

原创 算法笔记(2)

数组索引排序法整理一个数组索引排序法,利用数组索引来排序的一种算法,效率远高于冒泡排序等普通算法。不过它有前提条件:已知数据中的最大元素。原理:声明一个长度为待排序数组最大元素+1的索引数组,然后遍历待排序数组,将数组值对应索引数组的索引位的值+1。然后再便利索引数组的值得到有序数组。C实现#include <stdio.h>int main() { // 准备数组 int arr[] = {13, 23, 4, 67, 34, 6, 17, 35, 4.

2020-06-24 10:16:38 144

原创 C语言-常用基础函数

二进制字符串转十进制#include <math.h>int biToInt(char *s) { int number = 0; int length = strlen(s); for (int i = 0; i < length; i++) { if (s[i] == '1') { printf("%d\n", i); number += pow(2.0, lengt

2020-06-19 17:32:05 372

原创 golang-标准库(sync/atomic)

这个库是用来保证并发编程数据安全的。提供了对数据进行原子性操作的方法。可能一些初学者对数据的原子性操作不是太理解,sync包的锁就可以保证并发数据的安全,为什么atomic包也可以保证并发的数据安全,它跟加锁的区别又是什么。简单说一下,锁是编程语言层面提供的保证数据并发安全的一种方式,而原子性的操作函数是操作系统层面提供的方式,C语言中也有_Atomic关键字,也是用来保证并发编程安全的。下面通过例子来认识一下我们启动1000个协程,对a进行+1的操作func main() { //.

2020-06-03 13:31:38 9705

原创 排列组合(密码本)-求指定个数的字母或数字的的任意排列组合

最近要做一个密码本,列出所有电话号码的可能组合也就是指定字数字的所有组合比如(0, 1, 2) 列出这三个数字的任意组合,组合长度为3: 000,001,002,100,101,102.....需要一个算法,特此记录使用递归完成,随着可选数字的增多,需要的时间也大大增加,当需要11电话号码的所有组合,则有10的10次方,10000000000种可能,(因为电话号码第一位为1...

2020-04-15 17:05:56 10400

原创 golang-标准库(crypto/ecdsa)

ecdsa包提供了非对称加密算法ECDSA,ECDSA为椭圆曲线加密算法,是基于椭圆方程公式,安全性要高于RSA。这里说下使用ecdsa的密匙生成和签名校验,不涉及原理;go中ecdsa目前只有用私钥加密,公钥做校验,没有解密环节;目前可以应用于数字签名;基于RSA的基础,本文直接贴出代码,代码有注释,不做过多的阐述,加密算法都是别人为我们封装好的工具方法,具体原理不涉及pack...

2020-04-14 17:14:31 11638

原创 golang-unsafe包的用处

在前一篇文章(https://blog.csdn.net/itpika/article/details/104180513)我总结了unsafe包的用处和一些简单的用法(计算内存对齐优化结构体,操作结构体私有变量,对有相同字段类型但结构体名称不同的结构体进行转换),本文再继续补充unsafe包的在实际编码过程中一些适当的用法byte切片或者数组转字符串我们都知道byte切片转字符串用 ...

2020-02-23 10:56:40 9582

原创 CommonJs和es6的Module的区别

历史上,js一直没有模块(module)体系,无法将一个项目拆分成多个模块文件。正对这一情况,社区出现了一些统一的规范:CommonJs和AMD,前者是针对服务端的js,也就是nodejs。后者是针对浏览器的。ES6在语言标准层面上,实现了模块功能,而且实现也比较简单。完全可以取代CommonJs和AMD。达成前后端js的模块风格统一。不过目前还未完全达到这一目的。nodejs目前主流还是采用C...

2020-02-09 21:35:01 14630 1

原创 nodejs的exports和module.exports属性

简单讲解一下js中为什么会有两种模块导出成员变量的方法,以及它们的关联性。不深入nodejs的模版加载机制。首先nodejs的模块加载机制是对commonjs的模块机制进行了实现。在nodejs中每个模块都是一个对象,它的最终定义如下:function Module(id, parent) { this.id = id; this.exports = {}; thi...

2020-02-08 14:23:21 9623

原创 golang-标准库(unsafe)

除了c家族的编程语言明确提供了直接通过指针运算操作内存的方式,其它语言大多屏蔽了这一操作,程序员直接操作内存往往不太安全,容易出现各种问题。go有着c的影子,保留了指针但又对指针的能力进行了削弱。在go中也不能直接进行指针运算来操作内存。但go对指针还是留了一扇不起眼的窗来进行指针运算,这扇窗就是unsafe包。首先unsafe包的内容并不多,只有寥寥几个数据结构和函数。要使用unsafe包...

2020-02-05 12:25:36 9835

原创 golang-协程理解

本文总结一下go协程的理解,如有错误望请指正。网上都说协程是一种轻量级线程,线程又是一种轻量级的进程。这话在语言层面看来是没有错的,但它们的实现是不同的。线程是cpu资源调度的最小单位。协程不由cpu进行调度,由应用程序进行调度,也就是由go进行调度。在go中,协程的调度也有专门的调度器。但go的协程调度器的复杂程度比cpu的线程调度器是要低许多的。计算机进程/线程的运行是抢占式的,操...

2020-02-02 13:26:50 9862

原创 js原型链快速理解

理解原型链首先需要知道js中的两个对象:普通对象和函数对象;(函数对象的本质还是一个普通对象,它有着特殊的属性)普通对象:let a = {};let b = new Object();function C(){}let c = new C();上面的a,b,c都是普通对象;函数对象:上面的C就是一个原型对象,下面我们在浏览器中看一下C(为了方便):可以看到C...

2020-01-08 09:55:45 9444

原创 golang-切片与数组的区别理解

接触golang有一年多了,很长一段时间对数据和切片的理解都模模糊糊,到今天为止总结一下自己对数组和切片理解。数组:在go中,数组是一种值类型。虽然数组的元素可以被修改,但数组本身的赋值和传参都是以整体赋值的方式进行的。数组由长度,容量和数据组成,这也是为什么不同长度,但数据类型相同的数组在go中不能互相赋值的原因,因为它们的长度不同(比如:[2]int,[3]int这两种类型),此外...

2019-12-10 22:30:07 9386

原创 算法笔记(1)

记录一下最近用到的几种常见算法的优劣。下面将给出四种算法的javascript代码和对10w条数据进行排序的结果,10w条数据使用Math.random产生10w条随机整数。在对1w条一下的数据进行排序时,大多数算法都在毫秒的差距上体现不出来。实验源码在末尾给出。冒泡排序,选择排序,插入排序,快速快速。用js进行测试。 冒泡排序 冒泡排序作为最基础的排序算法,他的算法相...

2019-11-30 21:54:46 9430

原创 nginx随笔-官方模块笔记(1)

ngx_http_secure_link_module 这个模块可以实现对服务资源文件做访问限制,防止其它站点盗用资源文件。原理是,用户访问资源文件时,服务器返回一个新的uri,这个uri里带有二个重要的参数一个是md5加密字符串(可以不止是md5加密算法),一个是资源的有效时间。例如:http://127.0.0.1:8000/configDir/config.json?md5=MoD...

2019-10-28 13:56:08 9236

原创 mac,安装protobuf记录,踩坑

关于protobuf是什么,不在赘述,它是google开源的一种新的网络数据交互协议(传统的XML和JSON)。本文只是记录它在mac系统上的安装,本人安装的时候运到一些问题,把它总结出来。最近在学习使用protobuf,但github给出的教程只有linux的,对mac还是有一些区别。github地址:https://github.com/protocolbuffers/protob...

2019-10-16 10:32:05 12283

原创 golang-标准库(crypto/rsa)

本文讲解使用go提供的rsa包生成私匙和公匙,以及使用它们进行加解密公匙是根据私匙计算而来的,go中公匙同样也是通过私匙获得,下面看获取私匙和公匙的方法:// 下面是一个生成私匙和公匙的方法// privateKey, publicKey分别是私匙和公匙的文件可写流,私匙和公匙分别写入到这二个文件中// bits为生成私匙的长度func generatPrivateAndPub...

2019-09-24 15:08:09 11432

原创 web前端小案例(放大镜)

<!DOCTYPE html><html><head> <title></title> <style type="text/css"> * { margin: 0; padding: 0; } #day { width: 450px; position: relative; ...

2019-08-30 14:25:26 684

原创 web前端小案例(滚动条)

<!DOCTYPE html><html><head> <title></title> <style type="text/css"> #box { height: 400px; width: 170px; border: 1px solid red; margin: 50px 0 0 1...

2019-08-30 14:24:32 442

原创 推荐的接口管理平台-yapi

最近在找好用的接口管理平台,为项目的接口做统一管理。最终选择了 YApi 这个开源项目。github地址:https://github.com/ymfe/yapi;项目需要nodejs,mongo支撑,使用nodejs运行,安装运行方法github有详细说明。先说说他的优点: 1. 快速部署,只要三行命令就可以安装并启动整个项目,然后投入使用。 2. 界面简单,页面清晰...

2019-07-16 15:06:09 11837

原创 nodejs-服务的简单调优

有许多第三方工具可用来分析Node.js应用程序,比如火焰图。但在许多情况下,最简单的选择是使用内置的分析器使用V8内部的分析器,在程序执行期间定期对堆栈进行采样。它将这些示例的结果以及重要的优化事件记录为一系列滴答,本文假设读者已经对nodejs异步回调的特性有一点了解,不了解也不所谓,只是了解的话,文章阅读会更清晰。下面介绍一下,使用nodejs内置的V8分析器,分析并优化一个web接...

2019-07-09 17:17:09 9975

原创 golang-标准库(math/rand)

rand包是go提供用来产生各种各样随机数的包,本文对这些产生随机数的方法做一下介绍。注意:rand生成的数值虽然说是随机数,但它其实是伪随机数,关于为什么是伪随机数,而不是真正的随机数,本文不做详细讲解,因为我也不是太清楚,只是提出这一点;简单说一下我的理解:真正的随机数是无规则可循的,就像抛硬币,正反面是真正随机的,这是一个真正的随机案例。计算机底层生成一个数值,究其根源它也是程序员们根据某...

2019-07-09 10:12:39 12332

原创 golang-标准库(html/template)

这个标准库,是go实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出。简单说就是对html,css,javascript进行安全转换;例如对html中的<div>这个标签的特殊字符<>进行转换。还有用于生成安全的html模版代码的方法。与之相似还有另一个包 text/template,只是前者解析html,后者解析普通文本字符串而已。先看几个简单ht...

2019-07-08 14:17:09 4493

原创 golang-标准库(encoding/hex)

encoding/hex包提供了十六进制转换的相关函数。编码先看函数:func EncodedLen(n int) int =》计算长度为n的明文,编码后的长度func Encode(dst, src []byte) int =》 将src中的数据编码为16进制后存入dst中,返回实际写入的字节。func EncodeToString(src []byte) string ...

2019-07-04 10:00:42 13030

原创 golang-标准库(encoding/base64)

base64是编程中常见的编码和进制,本文给出go语言中对base64编码的转化使用。base64:encoding/base64包实现了RFC 4648规定的base64编码。encoding/base64包给我们提供了一个现成的结构体对象(StdEncoding),我们只需要使用这个对象的方法就可以对数据进行base64编码/解码。先看编码:下面是加密的三个相关...

2019-07-03 22:09:08 12705

原创 golang标准库-crypto/hmac(加密哈希算法)

hmac算法是加密的hash算法,它需要一个hash算法(比如sha256获取md5等)和一个密匙key,在hash计算的过程中将密匙key混入,产生一个和原来hash算法相同位数的hash值。在大多数情况下,我们甚至可以将hamc算法看做是加盐的hash算法(加盐是将一个随机字符串放在需要加密的密文前面或者后面,然后对这个拼接后的密文进行加密得到hash值)。但它们的加密原理肯定不一样,...

2019-06-28 14:19:10 14260

原创 golang标准库-crypto/sha1,crypto/sha256,crypto/sha512(sha加密算法)

sha加密算法与MD5算法一样也是hash算法的一种,go提供了sha算法的几种,sha1,sha256,sha512,本章节一起讲解它们的使用方法先看sha1,sha1加密后的结果为20位字节大小,转化为十六进制,最终结果就是40位。sha1和md5一样属于出现比较早的hash算法,虽然要破解,产生hash碰撞的记录依然很小,但现在已经有反向查表发和彩虹表等一些方法可以很轻松逆向查到h...

2019-06-28 10:11:57 11762

原创 golang标准库-crypto/md5(md5加密算法)

本文讲解如何使用go封装好的md5算法,不深入剖析md5算法原理。首先我们要知道md5算法属于hash算法的一种,所以在了解md5之前,我们先认识一下go提供的hash接口。hash算法是保证只要输入的值不同,就一定会得到两个不同的指定长度的hash值。当前两个不同值产生相同的hash还是有可能的,只是这个可能性很小很小先认识go的hash接口(位于go标准库-hash包):ty...

2019-06-26 10:56:31 11501

原创 v语言初体验,安装,使用

6.23号v发布当天并没有安装使用,只是简单阅读了一下文档,6.23号看还是0.0.12版本,今天已经更新到0.1.1,前期的版本的更新确实很快,今天体验一下由于是发布不久,目前还没有打包好的可执行文件或tar包可以使用,只能去github克隆代码到本地,然后字节编译,下面看步骤,我使用的是deepin系统(linux),linux的安装和mac一致,windows我没有测试,不过github有...

2019-06-25 16:01:46 2426 2

原创 golang标准库-log

log包实现了简单的日志服务,该包提供一些格式化输出的方法,属于fmt包的加强版;也可以自定义输出格式;用该包做开发中的日志打印是个不错的选择先看一些简单方法(和fmt包的方法类似)func Println(v ...interface{}) => 将格式化后的字符串输出到标准的logger,参数用和fmt.Println相同的方法处理func Print(v ...in...

2019-06-25 15:06:48 10119

原创 golang标准库-flag

flag包是go提供的用来解析命令行参数的包,虽然os.Arg方法也能拿到命令行的所有参数,但它拿到的参数是没有格式和说明的,flag包能够解析 -port=8080 这类具有明确格式意义的参数,为程序提供明确的启动参数下面我们来看用flag包解析 -port=8080 这个参数的实例:先认识一个解析参数的方法:func Int(name string, value int...

2019-06-24 16:13:24 9546

原创 全新语言-v语言

2019/6/23,v语言的首个可用0.0.12版本发布了。这是一名全新的语言,集合了go的简单和rust的安全的特性;用于开发可维护软件的简单、快速、安全的编译语言。不过它的整体风格和go类似,代码风格简单,熟悉的go的朋友可以很快上手。不过刚发布,还需要很长一段时间的温养。官方地址:https://vlang.iogithub地址:https://github.com/vlang/...

2019-06-24 11:55:15 3766

原创 golang标准库-io

io包提供了对I/O操作的基本接口。本包的基本任务是包装这些操作已有的实现,使之成为共享的公共接口,因为这些接口对底层实现包装,除非得到其它方面的通知,客户端不应假设它们是并发执行安全的。这个包在日常的开发中可能用的不多,本章主要对包的接口做说明,可以做的代码示例不多,具体的代码实例就用文件的I/O来举例,网络IO不好模拟。不过都是IO,原理上来说都是一样的这个包定义了很多的IO接口...

2019-06-23 10:54:44 9529

原创 golang标准库-ioutil

ioutil包实现了一些实用的函数,里面的 方法不多。最最常用的就是文件的读写,下面来看具体的方法先看读写文件的方法func ReadFile(filename string) ([]byte, error) => 读取一个文件的全部内容func ReadAll(r io.Reader) ([]byte, error) => 读取一个Reader里面的全部数据,r是一个实现...

2019-06-21 14:57:15 329

原创 golang标准库-bytes(第二节)

上一节讲了bytes包的基本操作方法,这一节我们重点来看bytes包的Buffer,本节介绍Buffer相关的读写。在稍微底层的开发中。Buffer是必不可少的,特别是文件流的读写。先来Buffer类型type Buffer struct { buf []byte // contents are the bytes buf[off : len(buf)] =&gt...

2019-06-20 16:14:45 9708

原创 golang标准库-bytes(第一节)

bytes包是go提供的用来操作byte切片的工具包,包含对byte切片的查询,截取,替换,拼接,读取等方法,本章主要介绍查询,截取,替换,拼接等方法;读取由于涉及buffer缓冲将在第二节讲解。本节内容全是介绍bytes包的各种各样的方法,内容比较单一,没有太多go编程理论知识。下面将以方法介绍后面紧跟着代码实例的形式进行讲解,代码可直接粘贴运行,读者可自行测试。先介绍比较常用...

2019-06-20 10:08:45 10705

原创 golang标准库-排序(sort)

sort包,顾名思义用来排序的包,里面提供的工具方法可以对int,string,float64类型的切片进行快速排序和查找,如果自己定义的数据类型,实现了sort.Interface类型接口,也可以进行排序和查找。这个包方法不算多,也不复杂。本文讲解了sort包90%的内容先看三个类型的基本排序方法:func Ints(a []int) // 将a排序为递增顺序。func Fl...

2019-06-18 16:01:58 10699

原创 golang标准库-path

path包提供了对路径进行各种操作的一系列函数(有8个),里面的函数都比较简单,甚至源码读起来都很轻松,里面的函数大多数自己就可以轻松实现,不过go还是把这些简单的函数加进了标准库包:path先看这些函数的作用func IsAbs(path string) bool// 判断路径是否是绝对路径 func Split(path string) (dir, file string)...

2019-06-11 09:55:46 9674

空空如也

空空如也

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

TA关注的人

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