/images/avatar.jpg

Kiosk Studio (2022)

操作系统知识汇总

最常见的指标有可能是最容易遗漏和忽视的,以前面试的过程中经常被问到一些问题定位排查的运维问题,但是一些经常耳熟能详的名词被深究问下去就不知所以了。 比如:1. 系统负载如何查看?系统负载高的原因都有可能是哪些? 什么是系统负载? 2. swap 是什么?为什么kubernetes建议禁用 swap 等。

下面做一些总结

算法 - (动态规划)

动态规划 讲解动态规划的资料很多,官方的定义是指把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解。概念中的各阶段之间的关系,其实指的就是状态转移方程。很多人觉得DP难(下文统称动态规划为DP),根本原因是因为DP区别于一些固定形式的算法(比如DFS、二分法、KMP),没有实际的步骤规定第一步第二步来做什么,所以准确的说,DP其实是一种解决问题的思想。 动态规划的关键在于状态的定义,比如 opt[n] 、dp[n]、fib[n] 等。另外就是状态转移方程:opt[n] = best_of(opt[n-1], opt[n-2], …) No.70 爬楼梯 链接:https://leetcode.cn/problems/climbing-stairs/ 思路:假设我当前爬到第 N 层,那么我多少种爬法?爬到第N层无非最后一次爬是有两种可能,最后一次爬2楼,最后一次爬1楼,最后一次爬两楼的话,就变成了 dp[n] = dp[n-2] , 最后一次爬一楼就变成了 dp[n] = dp[n-1] ,组合起来就是 dp[n] = dp[n-1] + dp[n-2] 为了从1开始计算到n,每层楼梯有多少种爬法,还需要一次循环 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 func climbStairs(n int) int { if n == 1 { return 1 } dp := make([]int, n+1) dp[1] = 1 // 一层楼梯1种爬法 dp[2] = 2 // 两层楼梯2种爬法,一次爬2层,爬2个一层 for i := 3; i <= n; i++ { dp[i] = dp[i-1] + dp[i-2] } return dp[n] } No.

GoLang 静态代码分析工具

在日常Golang编程过程中,需要对 Go 代码做静态代码检查。虽然 Go 命令提供了 go vetgo tool vet,但是它们检查的内容还不够全面。go 的 vet 工具可以用来检查 go 代码中可以通过编译但仍然有可能存在错误的代码。包括并发访问安全、死锁、泄露上下文、结构体反射等等,参考文章

Nginx Lua 扩展 --(Nginx 监控)

上周我从腾讯云买了一台服务器,开始将本站解析到腾讯云上,至此本站彻底支持了HTTP3访问。不过也需要对Nginx进行一定程度的封装。一个最佳的选择是使用 lua-nginx-module 来扩展Nginx的能力,比如我想对请求进行一些访问统计,将数据发送到 open-falcon 或者 Prometheus 上。

lua-nginx-module 是一个实现使用lua语言直接控制Nginx内HTTP请求的一个Nginx module。这个组合很强大,提供了动态语言的强悍性能和生产力。

Go Module 基本使用

Go 1.13版本之后新的包管理器Modules趋于成熟,目前越来越多的开源项目已经支持Go Modules,典型的如etcd。Go具有相当长的包管理工具变迁史,各种包管理工具层出不穷,究其原因,还是官方没有实现足够好用包管理工具。本文不对部分基础知识做详解,主要重点是Go Modules

参考:https://roberto.selbach.ca/intro-to-go-modules/

项目管理--编写Golang MakeFile

Makefile 可以简单的认为是一个工程文件的编译规则,描述了整个工程的编译和链接等规则。其中包含了那些文件需要编译,那些文件不需要编译,那些文件需要先编译,那些文件需要后编译,那些文件需要重建等等。编译整个工程需要涉及到的,在 Makefile 中都可以进行描述。换句话说,Makefile 可以使得我们的项目工程的编译变得自动化,不需要每次都手动输入一堆源文件和参数。