9 kikajack

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 2k+

Ubuntu 安装 QEMU

通过官方仓库安装官方文档:https://www.qemu.org/download/#linuxUbuntu容易安装,但是版本有可能更新不及时:sudo apt-get install qemu通过源码编译安装官方文档:https://www.qemu.org/download/#source安装步骤首选下载源码官方地址太慢了,这里去清华镜像源 https://mirror.tuna.tsinghua.edu.cn/help/qemu.git/ 下载源码git clone https

2020-08-12 13:15:07

设计模式 - 享元模式 Flyweight

类似单例模式,享元模式也是通过共享对象来提高性能。区别在于:单例模式只保存一个对象的实例,例如客户端的数据库连接对象。享元模式保存一类对象的实例,例如服务端的线程池、连接池等。Golang 示例package mainimport ( "fmt")type Connect struct { name string}func NewConnect(name string) *Connect { return &Connect{name}}type ConnectFa

2020-08-05 13:17:40

Golang 操作 Redis

github.com/gomodule/redigo/redis 库package mainimport ( "fmt" "github.com/gomodule/redigo/redis")func main() { c, err := redis.Dial("tcp", ":6379") if err != nil { fmt.Println("connect err: ", err) return } defer c.Close() // 通过 Send 和 Re

2020-07-24 18:55:55

golang 反射demo

反射代码在运行过程中,动态获取并修改代码自身的能力,就是反射。为啥用反射对于静态类型语言,为了提高灵活性,有时在代码里允许传入多种类型变量,编译的时候不清楚会用哪一种,只有代码执行的时候才能动态感知到。当然可以通过类型断言来判断参数具体类型,但是需要针对每一种具体类型进行断言,代码会很长。而且后面增加新的自定义类型时,都需要改动断言部分的代码。通过反射的 TypeOf 和 ValueOf 函数,可以直接从接口中获取目标对象的信息。示例通过反射查看变量类型和值package mainimpo

2020-07-23 20:12:16

Docker 配置镜像加速器

网易云的不需要注册,速度快,七牛的速度很慢,也同样不需要注册。阿里云需要注册,没有体验。apt 安装方式配置文件是 /etc/docker/daemon.json,增加下面的内容,注意需要将阿里云的 your-id 替换成你的:{ "registry-mirrors":[ "https://hub-mirror.c.163.com/", "https://{y

2020-07-16 13:01:55

vim 安装插件及常用插件

vim 插件管家vim 支持很多插件,为了方便统一管理,通常会先安装插件管家,然后通过这个插件实现自动安装、卸载、更新插件。vim 常用的插件管家有 vundle 和 vim-plug,这里以 vundle 为例。所有的 vim 插件,可以在这里查看:https://vimawesome.com/安装 Vundle 插件管家首先下载 vundle 到 vim 目录git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/

2020-07-15 12:48:15

golang 类型断言

函数使用 interface{} 作为参数时,可以接收各种类型的数据。使用的时候通常需要判断具体是哪一种类型,这时候就需要类型断言。语法具体类型匹配x.(string)x.(int)x.(bool)x.(int32)switch case 中匹配 switch i.(type) { case string: fmt.Println("is string") case int: fmt.Println("is int") }示例package mainim

2020-07-09 13:08:38

利用延时队列实现自动定时重试 - 基于PHP实现

测试步骤搭建代码框架创建测试项目的目录 mq从 https://github.com/php-amqplib/php-amqplib 下载AMQP库(当然也可以通过 composer 安装,这里为了简单直接自己处理了),放入 mq 目录编写 index.php,实现自动加载创建 test 目录,编写生产者和消费者跑脚本:开启生产者:php -f index.php retryP p开启消费者:php -f index.php retryC c代码结构├─PhpAmqpLi

2020-07-03 09:55:34

RabbitMQ 延迟队列-基于PHP实现

按照延迟队列插件RabbitMQ 延迟队列插件未安装直接使用的话,会报错:unknown exchange type ‘x-delayed-message’插件下载地址:https://www.rabbitmq.com/community-plugins.html 。下载 Erlang 可执行文件之后,复制到rabbit服务的插件目录(自己的安装目录,我的是 C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.14\plugins )中,然后开启插件

2020-07-01 20:14:04

PHP 通过 AMQP 库使用 RabbitMQ 的简单示例Demo

目录结构按照 RabbitMQ 和 PHP 的步骤就不在这里说了。测试步骤如下:创建测试项目的目录 mq从 https://github.com/php-amqplib/php-amqplib 下载AMQP库(当然也可以通过 composer 安装,这里为了简单直接自己处理了),放入 mq 目录编写 index.php,实现自动加载创建 test 目录,里面分别创建 mqc.php 消费者和 mqp.php 生产者两个文件跑脚本,测试消息的生产和消费:php -f index.php m

2020-06-30 09:42:51

Golang 实现 RPC

go RPC 包文档通过 go 自带的 net/rpc 包可以很容易实现 RPC。go 官方文档对 RPC 服务端方法的要求如下:方法是导出的方法有两个参数,都是导出类型或内建类型方法的第二个参数是指针方法只有一个error接口类型的返回值通过 net/rpc 包实现 RPCGo 自带的 rpc 包,在编解码时使用了 Gob (Go binary)编码,导致无法跨平台。可以替换为...

2020-04-25 22:15:55

Protobuf 在 Ubuntu18 下的安装和使用

Protocol Buffer 是 Google 搞的 RPC 服务的中间层数据协议。其实 RPC 服务之间可以用各种数据格式,例如 JSON、XML 等。但考虑编解码效率和传输效率的话,Protobuf 性能更好。安装下载源码git clone https://github.com/protocolbuffers/protobuf.git安装依赖库Protocol Buffer 是 ...

2020-04-25 12:32:46

Golang 配置代理

通过 go get 命令下载各种依赖时,经常需要访问 github/google 等网站。配置好代理后,可以快速稳定的访问。常用的 go 代理goproxyhttps://goproxy.io/zh/阿里云https://mirrors.aliyun.com/goproxy/七牛云https://goproxy.cn设置 go 代理go 1.13 及以上版本可以直接用下面命令...

2020-04-25 11:19:17

golang 二维 slice 的奇怪 bug

对二维 slice 操作时,对长度 16 的 slice 的第 8 次操作时,影响了第 16 个 slice 的最后一个元素。。package mainimport "fmt"// import "sort"// import "reflect"// import "math"// import "strings"func showSlice(s [][]int) { f...

2020-03-05 22:04:17

操作系统实践-预备知识-FAT12文件系统

参考资料:http://www.disc.ua.es/~gil/FAT12Description.pdf软盘软盘的文件组织格式一般为 FAT12,组织单位由大到小分为:分区:例如 C 盘、D 盘簇:文件以簇为单位分配存储空间,一个簇包含一个或多个扇区扇区:磁盘上的最小数据单元每个软盘有 2个面 * 80个柱面 * 18个扇区(物理扇区编号从1开始) * 512字节 = 1.44MB...

2020-01-12 16:06:08

操作系统实践-BIOS

基本概念:https://wiki.osdev.org/BIOS所有中断列表:http://www.ctyme.com/intr/int.htmIBM PC 介绍:http://classiccomputers.info/down/IBM_PS2/documents/PS2_and_PC_BIOS_Interface_Technical_Reference_Apr87.pdfx86 汇编手...

2020-01-11 16:46:07

【二叉树】O(1)空间复杂度的Morris遍历

对于二叉树的遍历,常规的递归或迭代都需要用到栈,不管是函数调用栈还是手动创建的栈。因此空间复杂度都是 O(n)。如果要省掉栈的开销,将空间复杂度降低到 O(1),则需要借助二叉树中的叶子节点来保存临时信息。只要当前节点 cur 不为空,就一直循环:如果当前节点 cur 的左子节点不存在,则输出 cur,并设置 cur = cur.right否则,寻找当前节点中序遍历的前驱节点 prev...

2019-11-03 15:17:03

【二叉树】Python 从List创建二叉树及4种遍历的递归和非递归实现

# -*- coding: UTF-8 -*-from collections import dequeclass TreeNode: def __init__(self, val): self.val = val self.left = None self.right = Noneclass Tree: def __ini...

2019-11-01 13:25:36

【算法与数据结构】字符串模式匹配 KMP 算法

语义在一个很长的字符串 T 中,查找是否存在子字符串 P。例如搜索引擎收录的大量网站数据,当用户输入关键字后,就会在这些数据中进行匹配,并返回合适的网站。语义:假定字符串长度为 j,则所有字符串都在 [0, j) 这样的集合中。返回首次匹配的字符的位置。注意这里调用方需要判断位置是否正确,例如对于长度为 i 的字符串,要查找是否有长度为 j 的字符串,如果返回值在 [0, i - j) 则为...

2019-10-20 22:21:48

【算法与数据结构】查找算法语义约定及二分查找

对于有序数组,通常用二分查找(包括改进型的 Fibonacci 查找和插值查找)。查找算法语义约定一般简单的查找算法,可以在查找失败时直接返回 -1。但为了让函数更具有通用性(例如对于插入操作,需要定位到精确的位置),通常约定的语义为(假设数组 A[lo,hi),要查找元素 e):返回不大于 e 的最大的下标,几种特殊情况:如果数组中有多个等于 e 的元素,返回最大下标如果 e 比所有元...

2019-10-07 15:08:34

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。