自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

kikajack的博客

保险,互联网

  • 博客(477)
  • 收藏
  • 关注

原创 Nginx 官网文档翻译汇总

Nginx 官网文档,各个模块的手册还在这里。 改版后的新 Nginx 官网文档概述新手指南控制 Nginx管理员指南 Admin Guide安装基本功能 在运行时控制 Nginx 进程创建 Nginx 配置文件负载均衡 HTTP 负载均衡实时配置(On-the-Fly Configuration)配置 Nginx 接受代理协议内容缓存web 服...

2018-04-07 20:22:33 1560

原创 Docker 官网文档翻译汇总

官方文档地址GuideDocker 入门Docker 入门教程 方向和设置容器服务swarm 集群stack部署应用概述用 Docker 进行开发在 Docker 上开发应用 应用开发的最佳实践开发镜像 编写 Dockerfile 的最佳实践创建基础镜像使用多段构建 multistage buildDockerfile 手册管理镜像...

2018-04-07 17:25:45 1878 1

原创 RabbitMQ 入门 DEMO - 基于 PHP AMQPlib

通过 composer 安装 PHP AMQPlibcomposer require php-amqplib/php-amqplib目录结构:├─rabbitmq└─vendor ├─composer ├─php-amqplib │ └─php-amqplib │ └─PhpAmqpLib │ ├─Channel │ ├─Connection │ │ └─Heartbeat

2020-12-18 13:26:33 1039

原创 x86汇编入门

Intel® 64 and IA-32 Architectures Software Developer’s Manual 文档官方地址:https://software.intel.com/sites/default/files/managed/39/c5/325462-sdm-vol-1-2abcd-3abcd.pdf很好的入门文档:https://www.ibm.com/developerworks/cn/linux/l-assembly/汇编语言由三部分组成:汇编指令:跟机器指令一一对应,

2020-11-27 22:51:37 1627 1

原创 操作系统-生产者消费者实现-goalng语言

生产者消费者问题,是操作系统中的互斥问题。缓冲区是临界资源,每个运行实体(进程或线程)的访问缓冲区的代码是临界区。要确保最多只能有一个人访问临界资源,否则可能会出问题。golang 实现golang 作为一门高级语言,内置的 channel 类型可以实现线程安全。当然也可以用 Mutex 加锁来实现。package mainimport ( "fmt" "sync" "time" "math/rand")var wg sync.WaitGroupvar buffer chan in

2020-11-06 13:15:41 1471

原创 C 语言的泛型实践

参考:C语言实现泛型编程很多语言内置了对泛型的支持(例如 C++,通过同名不同参数的函数支持泛型)。C 语言中需要借助空指针 void * 实现泛型。非泛型编程需要针对所有可能类型实现函数。void swapInt(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp;}void swapDouble(double *a, double *b) { double tmp = *a; *a = *b; *b = tmp;}泛型编程函

2020-10-14 13:13:26 323

原创 【算法和数据结构】字符串

字符集 charset 和字符编码 character encoding参考:https://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html字符集是个集合,指明了其支持的所有字符有哪些。字符编码则为字符集中的每个字符指定了一个数字代号,解析的时候把代号替换为具体图形展示给用户。常用的字符集有:ASCII:包含控制字符,英文,数字等。单字节字符编码,对应的字符编码就是 ASCII 码GB2312Unicode:对应的字符编码有:U

2020-10-08 14:24:42 167

原创 【算法和数据结构】模拟和暴力

模拟有些问题的解题步骤,就是我们思考的步骤。这时可以模拟我们的思考,一步步解决问题。约瑟夫环问题:N个人围成一圈,从 1 开始报数,第M个出列,然后下一个人继续从 1 开始报数,直到最后剩下一个。题目已经很清楚的给出了解题步骤,我们只需要构造一个循环链表(或者用数组,但需要注意越界时跳到数组的第一个元素来实现循环效果)。数组#include <stdio.h>void mov(int arr[], int n, int cur) { for (int i = cur;

2020-10-07 22:29:22 293

原创 【PHP脚本】求下个月的今天,如果下个月没有今天则返回最后一天

<?php$cur = '2020-01-01';function getNextMonthCurDayOrLastDay($date) { // 先判断下个月有没有当前月份的今天,有的话下个月取今天,没有的话下个月取最后一天 $curDay = date('d', strtotime($date)); $lastDayOfNextMonth = date('d', strtotime("last day of next month", strtotime($date

2020-10-01 17:36:00 161

原创 Golang - init() 函数

init 和 main 函数对比这两个函数都是 golang 内置的函数:main 函数只能在 main 包中出现,是整个程序的入口init 函数可以在任意文件中出现,且每个文件中可以出现任意次数一个文件中多个 init 函数,从上往下执行package mainimport "fmt"func init() { fmt.Println("init up")}func init() { fmt.Println("init down")}func main()

2020-09-30 23:36:30 446

原创 Linux - 定位进程异常退出

系统上启动守护进程后,有时会异常退出。查看日志/var/log/messages 日志文件中放了进程退出的信息。dmesg | egrep -i -B100 'killed process'用 strace 命令追踪系统调用和信号手册:https://man7.org/linux/man-pages/man1/strace.1.html具体参数参考这里:https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html查看 ti

2020-09-25 13:28:13 6679

原创 C 语言的面向对象实践

C 语言中没有类和对象的概念,但是可以通过 struct 结构体来实现同样的效果。类似 Golang 中的 struct,把 C 函数指针当做 struct 的成员,就可以为 struct 结构体对象添加方法:#include <stdio.h>typedef struct People { int age; void (*sing)(); int (*getAge)(struct People *p); void (*setAge)(struct Peop

2020-09-25 09:57:28 115

原创 Consul 基本概念

官方文档:https://www.consul.io/docs参考资料:https://deepzz.com/post/the-consul-of-discovery-and-configure-services.htmlconsul 关键特性服务发现:支持服务发现,可以通过 DNS 或 HTTP 的方式获取服务信息健康检查:支持健康检查,如 web 状态码或 cpu 使用率K/V 存储:支持键/值对存储多数据中心:支持多数据中心,开箱即用WEB UI:支持 WEB UI,一目了然con

2020-09-13 12:55:37 678

原创 【动态规划】基本概念

动态规划是解决问题的一种思想,而不是一个具体算法。此类问题的重点是:状态划分状态转移方程常见的动态规划类型线性模型:每个状态都是一个点树状 DP:在树上进行动态规划背包 DP:背包体积有限,每个物品有价值,求能装下的最大价值区间 DP:每个状态都是一个区间数位 DP:区间里有多少数字包含某个性质状态压缩 DP:把状态用二进制表示常见的动态规划优化滚动数组优化:节省空间矩阵乘法优化:斜率优化:四边形不等式优化:决策单调性优化:数据结构优化:优化时空能用动态规划解决

2020-09-06 21:55:45 515

原创 Golang 并发goroutine之间实现通信

Goroutine 之间常用的通信方式有:全局变量channelcontext 上下文sync.WaitGroup如果只是单纯的等待所有任务完成,可以使用 sync.WaitGroup:package mainimport ( "fmt" "sync" "time")func main() { var wg sync.WaitGroup for i := 0; i < 3; i++ { wg.Add(1) go fun

2020-08-29 23:02:13 714

原创 【APUE】文件属性

函数原型NAME stat, fstat, lstat, fstatat - get file statusSYNOPSIS #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat(const char *pathname, struct stat *statbuf); int fstat(

2020-08-20 09:49:31 177

原创 【APUE】目录操作

函数原型opendir #include <sys/types.h> #include <dirent.h> DIR *opendir(const char *name); DIR *fdopendir(int fd);readdir #include <dirent.h> struct dirent *readdir(DIR *dirp);struct dirent 结构体定义: struct dirent { ino_t

2020-08-19 13:12:11 188

原创 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 5807

原创 设计模式 - 享元模式 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 174

原创 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 169

原创 golang 反射demo

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

2020-07-23 20:12:16 229

原创 Docker 配置镜像加速器

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

2020-07-16 13:01:55 256

原创 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 1283

原创 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 576

原创 利用延时队列实现自动定时重试 - 基于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 393

原创 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 1125

原创 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 564

原创 Golang 实现 RPC

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

2020-04-25 22:15:55 327

原创 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 4664

原创 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 21020

原创 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 757

原创 操作系统实践-预备知识-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 1945

原创 操作系统实践-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 1419

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

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

2019-11-03 15:23:18 409

原创 【二叉树】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:26:22 3339

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

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

2019-10-20 22:45:13 312

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

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

2019-10-07 17:23:35 186

原创 【算法与数据结构】分治法和快速排序

快排思想:从待排序数据中,选取一个数字做基准 pivot把所有比 pivot 小的数据放在 pivot 左边,大的放在右边对左右两个子序列递归使用上面两个步骤子序列中仅有一个元素时,退出C 代码:#include <stdio.h>void quickSort(int arr[], int lo, int hi) { int beg = lo, end = ...

2019-10-06 13:38:56 218

原创 【算法与数据结构】分治策略与归并排序

分治策略对于所求的问题域,每次将其分为大小相似的两部分,然后再把每一部分当作最初的问题域再次分割,依次递归,直到得到基本问题(递归基),求解。然后,再逐步合并直到完成最初的问题域。通常用递归的方式分割问题,例如这里的归并排序,每次将数组一分为二,然后分别判断分割动作是否到不可再分割了(数组中仅剩最后一个元素),否则继续对左右两个子数组进行分割:void merge_sort(int arr[...

2019-09-28 15:15:18 156

原创 【Linux 应用编程】IO 多路转接 - epoll

跟 select、poll 的对比epoll 性能更高,Nginx、redis 等流行的软件,都是基于 epoll 实现的。epoll 优点有:监听描述符数量大于 1024只返回准备好的描述符,不需要浪费时间遍历描述符集合基于红黑树实现,高效使用步骤epoll 有 3 个函数:epoll_create 指定 epoll 对应的红黑树的大概节点数,并返回 epoll 描述符ep...

2019-09-22 22:37:39 310

空空如也

空空如也

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

TA关注的人

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