LRU
这是一个用 双向链表与哈希表实现的 LRU (Least Recently Used) 缓存淘汰算法
123456789101112131415161718192021222324252627282930313233343536373839404142package mainimport ( "container/list" "fmt")type Data struct { Key string Val interface{}}type LRU struct { Cap int List *list.List Hash map[string]*list.Element}func NewLRU(cap int) *LRU { return &LRU{Cap: cap, List: list.New(), Hash: make(map[string]*list.Element)}}func (lru *LRU) Put(key string, ...
Go HTTP 标准库 使用代理
Go HTTP 标准库不走系统代理,因此我们通过 Fiddler 抓包的时候,是抓不到标准库发送的请求的。因此我们需要设置其代理
123456789101112131415161718192021func fiddler() error { proxy, err := url.Parse("http://127.0.0.1:8866") if err != nil { return err } client := &http.Client{ Transport: &http.Transport{ Proxy: http.ProxyURL(proxy), }, } req, err := http.NewRequest("GET", "https://www.baidu.com", nil) if err != nil { return err } resp, err := client.Do(req) if e ...
Go HTTP 标准库 多线程下载
本文以 https://i.pximg.net/img-master/img/2022/01/30/00/50/14/95863886_p0_master1200.jpg 的下载作为例子
123456789101112131415161718192021222324252627282930func GetHeader(image string) (http.Header, error) { // P站特殊客户端 client := &http.Client{ // 解决中国大陆无法访问的问题 Transport: &http.Transport{ // 更改 dns Dial: func(network, addr string) (net.Conn, error) { return net.Dial("tcp", "210.140.92.142:443") }, // 隐藏 sni 标志 TLSClientConfig: &tls.Confi ...
DB2 docker 安装
官方文档Installing the Db2 Community Edition Docker image on Linux systems
前期准备
需要安装并掌握 docker 的使用方法
安装流程拉取 docker 镜像
拉取官方最新版本的 DB2 docker 镜像docker pull ibmcom/db2
查看已经拉取的 docker 镜像docker image ls可以看到返回结果ibmcom/db2 latest a6a5ee354fb1 2 months ago 2.95GB进入 docker 容器
进入Docker容器:docker run -d -p 50000:50000 --name db2 --privileged=true -e DB2INST1_PASSWORD=123456 -e DBNAME=testdb -e LICENSE=accept ibmcom/db2
-d: 表示在后台启动容器
-p 50000:50000: 容器内部的 50000 端口映射到主机的 50000 端口
–name db2: 将容 ...
luasocket 安装
环境
Lua(version 3.3.6)
LuaRocks(version 3.7.0)
本篇博文主要详细讲述 luasocket 安装过程中踩到过的坑。
安装流程CMD 内输入 luarocks install luasocket
以下为安装过程中遇到的几个坑,记录一下
网络波动1234567Warning: Failed searching manifest: Failed downloading https://luarocks.org/manifest-5.3 - host or service not provided, or not knownWarning: Failed searching manifest: Failed downloading https://raw.githubusercontent.com/rocks-moonscript-org/moonrocks-mirror/master/manifest-5.3 - host or service not provided, or not knownWarning: Failed searching ...
Lua LuaRocks 安装
鉴于网上对安装过程陈述过于模糊,本篇博文主要详细讲述 LuaRocks(version 3.7.0) 搭配 Lua(version 3.3.6) ,在 Windows 环境下的安装。
LuaRocksLuaRocks 是 Lua 的模组管理器。能很方便在 Unix 以及 Windows 下载以及安装 Lua 模组。
安装流程前置环境
TDM-GCC 或 Mingw64如果没有需要自行安装
安装 Lua(version 3.3.6)详见 http://lua-users.org/wiki/BuildingLuaInWindowsForNewbies
下载源码进入 Lua 官网 下载 Lua(version 3.3.6),即文件 lua-5.3.6.tar.gz ,并解压当前目录结构如下1234567891011|-- lua-5.4.3 |-- lua-5.4.3 |-- src |-- lua.c |-- lua.h |-- ... |-- doc |-- re ...
springboot连接phoenix的几种方法
虽说是介绍springboot连接phoenix的方法,其实因为用的是jdbc连接方式,其实只要是通过jdbc方式连接的数据库都可以通用,比如 hive。
1.原生方法连接数据库自己手写 Connection ,Statement,PreparedStatement,ResultSet,手写数据库连接和关闭,自己提交sql语句。
这种方法是最开始学习数据库连接的方法,后面连接数据库的方法都是在这样的基础上进行了封装和扩充。优点是能够了解数据库连接过程,但是缺陷更加明显,比如何时建立连接何时关闭,是否自动提交,还要自己维护线程池,非常麻烦。但是假如你需要在项目中动态连接多个数据库,大概就要采用这种方式了。除此之外,不建议采用这种纯原生的连接方式。
示例:https://github.com/gitriver/alad-phoenix 想学习这种方法的可以看看这个。
2.JdbcTemplate通过配置类中加载DataSource、JdbcTemplate来操作phoenix,实际上JdbcTemplate是spring对方法(1)的封装,但是可以省事,何乐而不为呢?
配置类:
12 ...
CGO 类型转换
基本数值类型
Go 的基本数值类型内存模型和 C 一样,传递数值类型时可以直接将 Go 的基本数值类型转换成对应的 CGO 类型然后传递给 C 函数调用。
Go 和 C 的基本数值类型转换对照表如下:
C语言类型
CGO类型
Go语言类型
char
C.char
byte
singed char
C.schar
int8
unsigned char
C.uchar
uint8
short
C.short
int16
unsigned short
C.ushort
uint16
int
C.int
int32
unsigned int
C.uint
uint32
long
C.long
int32
unsigned long
C.ulong
uint32
long long int
C.longlong
int64
unsigned long long int
C.ulonglong
uint64
float
C.float
float32
double
C.double
float64
size_t
C.size_t
u ...
CGO Go 与 C 的互相调用
CGO 提供了 Golang 和 C 相互调用的机制。通过 CGO 技术我们可以在 Go 中调用 C 函数,也可以将 Go 函数导出为 C 函数。
Go 调用 C 函数123456789101112131415package main/*int add(int a, int b) { return a + b;}*/import "C"import "fmt"func main() { var a, b = 1, 2 c := int(C.add(C.int(a), C.int(b))) fmt.Println(c) // 3}
上述代码中的 import C , "C" 是一个伪包,在 Go 的标准库中并不存在 "C" 包, CGO 通过这个查找到对应引用 C 命名空间的。
C 调用 Go 函数main.go 文件,main 函数中调用 add.h 文件中的 C.test 函数。
123456789// main.gopackage main//#incl ...
Go Windows 系统下隐藏 CMD 窗口
隐藏 Golang 自身运行窗口仅需在编译是增加 -ldflags 参数
1go build -ldflags -H=windowsgui
隐藏 Golang 调用 CMD 窗口1234cmd := exec.Command("ping", "127.0.0.1")if runtime.GOOS == "windows" { cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}}