自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(158)
  • 资源 (1)
  • 收藏
  • 关注

原创 服务治理【5】Golang实现弹性服务

一、本节前言:在nginx实现负载均衡,需要手动配置upstream、proxy_pass参数字段,再重启生效;对于节点不可用,nginx虽有拥有节点错误自动降低权重。但是对新增节点却毫无办法,只能手动修改配置。本节的内容就是解决该问题。实现服务节点的弹性伸缩,对外使用统一API网关,对内采用多样负载均衡策略实现本节内容主要步陬有:1、封装zookeeper的增删改查、注册和发现等方法2、负载均衡策略对象(观察者对象)3、配置模块对象4、Real Server应用服务二、封装zookeep

2021-05-07 22:26:34 346

原创 【手机商城】Go-Micro 微服务全栈项目案例

目录:0 项目结构1 建库建表2 proto定义3 生成模型和接口4 商品服务(增删改查等) [ 可以依据此继续实现用户、订单、评论等服务 ] - 4.1 模型层 - 4.2 控制器 - 4.3 服务注册5 API网关6 附件: share通用包代码(非重点)

2021-04-22 11:20:36 2446

原创 【深入分析】Kubernetes RBAC角色权限控制

一、文件示例: kubernetes-dashboard.yaml# ------------------- Dashboard Secret ------------------- #apiVersion: v1kind: Secretmetadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dash...

2019-10-16 18:07:55 6226 4

原创 【全网最全最详细】Kubernetes部署Mysql主从复制+读写分离

1.前提:起码得有个已经可以部署简单pod的k8s单机或集群PS: 本文使用静态存储卷实现,非使用存储类2.制作拉取gcr.io镜像源脚本并拉取镜像[root@k8s-m~ ]# cat /usr/local/bin/pull-google.com.shimage=$1echo $1img=`echo $image | sed 's/k8s\.gcr\.io/anjia0532\/go...

2019-10-10 17:42:31 8245 24

原创 【深入分析】K8s部署Mysql主从复制+读写分离

一、Mysql StatefulSet应用文件预览apiVersion: apps/v1kind: StatefulSetmetadata: name: mysqlspec: selector: matchLabels: app: mysql serviceName: mysql replicas: 3 template: metadata:...

2019-10-10 16:11:20 7767 3

原创 300字短文让你从特性了解Istio

一、从特性去了解Istio:应用无感:无需关注业务应用代码限流,限制流量,保护下游服务熔断,快速失败,剔除异常服务二、实现原理:应用无感,其实就是在应用的上面加了一层代理而已。每个主机服务独享。限流,设置代理的最大连接数、最大请求数等等。每个主机服务独享。熔断,代理请求下游服务得到异常返回,在一段时间内将该host剔除负载均衡列表。每个主机服务独享。三、缺点:(优点就是特性)服务多就配置多,维护困难,人员要求高不支持动态变更参数值,需手动改配置限流死板,网络拥塞,比如在双11,

2021-09-08 16:52:36 317

原创 【Kubernetes】制作中间件容器,管理K8s资源(例如结合PromQL实现容器弹性伸缩)

一、源码仓库:https://github.com/jstang9527/captain二、主容器调用测试:vi test.json{“args”: {“name”: “xnginx-deployment”,“namespace”: “default”}}cat test.json |curl -H “Content-Type:application/json” -X GET -d @- http://127.0.0.1:8000/api/v1.0/service/podList{“da

2021-09-01 15:34:59 375

原创 网络和操作系统高频问题

持续整理更新中https://bbs.gameres.com/thread_842984_1_1.html一、TCP为什么是三次握手?1、TCP是面向连接:双方需证明彼此有收发能力。第一次握手,客户端发送SYN连接请求,服务端收到后仅能判断客户端有发送能力;第二次握手,服务端发送ACK,证明服务端有接受和发送能力;第三次握手,客户端发送ACK包,证明客户端有接受能力。2、防止失效链接传送给服务端:当客户端发送SYN包后,此包在网络节点发生滞留,在客户端重新发包建立连接并释放后到达服务端,服务端.

2021-08-29 23:34:28 388

原创 Redis高频问题突击(附答案)

一、Redis持久化机制(AOF和RDB)?1.1 RDB(Redis DataBase)按照指定时间间隔(比如x秒内y次修改操作),将内存中的数据集快照写入硬盘,术语称为snapshot。恢复时,将快照文件直接读入内存RDB优缺点:高性能:创建一个子进程来执行持久化,先将数据写入临时文件,持久化结束后,再用这个临时文件替换上场持久化好的文件;过程中主进程不做任何IO操作。速度快:二进制文件,比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合安全低:发生宕机最多丢失最后一次数据1.

2021-08-29 10:09:37 191

原创 Mysql高频问题(附答案)

持续更新中一、ACID靠什么保证ACID是指数据库中事务的基本特性:原子性、一致性、持久性和隔离性。A:原子性有undo log日志保证,它记录了需要回滚的日志信息,事务回滚时撤销已经成功的SQLC:一致性由其他三大特性保证,程序代码要保证业务上的一致性I:隔离性由MVCC来保证D:持久性由内存+redo log来保证,mysql修改数据同时在内存和redo log记录这次操作,宕机的时候可以从redo log恢复InnoDB redo log写盘,InnoDB事务进入prepare状.

2021-08-25 19:56:25 167

原创 Golang高频问题(附答案)

一、Golang优点:编译型语言,无需解释直接运行。语法简单,没有像python那样众多语法糖。支持多平台编译,支持内存自动GC(垃圾回收)。实现了语法层面的线程调度,开发多线程十分方便。二、new和make的区别new主要用来创建一个引用类型的结构体,返回指针。make主要用来创建和初始化slice,map,channel等引用类型,返回引用。三、让你开发一个公共系统,你会怎么做?1、高可用:公共系统,你的接口可能被其他服务进行调用,为让其他服务尽可能不发生异常,需要考虑系统高可用?

2021-08-24 21:07:34 411

原创 精通微服务开发?来聊聊这些问题

持续更新中说一说高并发场景下的如何实现系统限流?实现的算法有四种,分别是计算器法、滑动窗口算法、漏桶算法、令牌桶;其中后两种使用较多,漏桶算法:由两部分组成,漏点+桶。比如桶(队列)只能存放10个请求,以固定漏点(线程)处理请求。超出桶大小的请求则丢弃;缺点是无法应对突发流量。令牌桶算法:独立线程(协程)以固定速率生产令牌丢尽桶里,若桶满则丢弃。客户端发起请求先从桶拿令牌,若无,则丢弃。拿到令牌的请求则可打到下游服务,缺点是:若桶设置比较大,会对下游服务压力。Go-Micro各组件功能,与GR.

2021-08-22 22:19:25 295

原创 P20 分割反转(字符串字符,单词,链表)

都是将部分进行若干反转,再进行结合的解题思路一 字符串单词反转字符串中的单词反转hello world -> olleh dlrow思路:分割反转func reverseWordInString(str string) string { reverse := func(word string) string { chars := make([]rune, 0, len(word)) for i := len(word) - 1; i > -1; i-- { char.

2021-08-10 16:40:35 128

原创 P19 字符串搜索(BF,RK,BM,KMP)

一、BFfunc BF(ss, sub string) (index int) { for i, j := 0, 0; i < len(ss); i++ { if ss[i] == sub[j] { // 相等,同时后移 j++ } else { // 不相等, 重新匹配 j = 0 } if j == len(sub) { // 匹配完 return i - j + 1 } } return -1}var ss string = "ABCABABAB

2021-08-04 21:27:24 178

原创 P18 井字游戏(穷举法)

两玩家依此下棋, 一人执X棋, 一人执O棋;X棋先手, 问: 从给定数组中, 判定该数组生成的盘面在实际下棋中是否有可能出现,并判定盘面情况;盘面情况:1、X玩家胜利: X为先手, 若胜利则比O多1, 故X-O=12、O玩家胜利: O为后手, 若胜利则O和X一样多, 故X-O=03、平手: X==O, 并且两者旗子总数为94、没下完: X-O=1 || X==O,并且没有胜利者5、否则是不可能出现的盘面例如[]string{“XXX”,“X O”,“OOO”}; X和O旗子相同,但出现两

2021-08-03 18:18:17 307

原创 P17 香槟塔

用二维数组记录每个杯子倒入的水量,若一开始倒入8杯香槟,则第一杯为8;每一杯由其头顶的杯子溢出的水量决定:若是第一列的杯子,头顶仅有一个杯子;所以 array[ i ][ j ] = 溢水量(头顶杯子(array[i-1][0])-1) / 2若是最后一列杯子,头顶也仅有一个杯子: 所以array[ i ][ j ] = 溢水量(头顶杯子(array[i-1][-1])-1) / 2否则为中间杯子,头顶两个杯子: 所以array[ i ][ j ] = 溢水量(左头顶杯子(array[i-..

2021-08-01 23:42:38 144

原创 P16 Dota2参议院、优势洗牌[田忌赛马] (贪心)

一、Dota2参议院两派依序投票, 当前投票人可以将后续任意待投票人投票出局, 投完后此人的投票次序排至末尾, 直至当前所有投票人为统一派别为止;例如RDDDR(R将D投出,R排到末尾)->DDRR(D将R投出,D排至末尾)->DRD(D将R投出,D排至末尾)->DD, D派胜利func dota2(array []string) (winner string) { length := len(array) chR := make(chan int, length) defer

2021-08-01 16:55:52 156

原创 SQL经典查询案例

一、表结构1.1 学生表create table student( sid varchar(10) NOT NULL COMMENT '学生ID', username varchar(20) NOT NULL COMMENT '学生名称', sex enum("man","woman") NOT NULL DEFAULT 'man' COMMENT '性别', birthday datetime NOT NULL DEFAULT '1971-01-01 00:00:00'

2021-07-30 20:50:33 811

原创 P15 二叉树前中后层序遍历(递归+迭代)

package mainimport ( "fmt" "github.com/emirpasic/gods/stacks/arraystack")// 前序遍历: 根左右// 中序遍历: 左根右// 后序遍历: 左右根// 层序遍历: 从上往下、从左往右// 递归遍历: 使用递归方法遍历// 迭代遍历: 使用迭代方法实现递归遍历type Node struct { Value int Left *Node Right *Node}func NewTree() *N

2021-07-20 09:40:01 153

原创 P14 二叉树最小深度(深度优先和广度优先)

一、深度优先// 二叉树最小深度:深度优先、广度优先func Deep(tree *Node) float64 { // 达到叶子节点 if tree.Left == nil && tree.Right == nil { return 1 } var ldeep, rdeep float64 = math.MaxFloat64, math.MaxFloat64 if tree.Left != nil { // 如果有左节点,算出左节点的深度 ldeep = Deep(

2021-07-15 17:02:08 266

原创 P13 贪心算法(最长连续递增序列、柠檬水找零、三角形最大周长)

一、最长连续递增序列从无序数组中,找出连续递增的子数组;例如 [1,1,3,1,3,9]得出[1,3,9]func IncrementSubList(list []int) (sub []int, max int) { var start = 0 for i := 1; i < len(list); i++ { // 当前值大于前一位 if list[i] > list[i-1] { continue } // 当前值小于前一位,统计长度,下标重置 if i-

2021-07-14 17:47:44 203

原创 P13 子数组最大值[最大平均数](滑动窗口)

常规排序,取[len(array)-k:] 即可滑动窗口先将首个k个元素的值作为初始子数组最大值然后减去第1个,加入第1+k个。逐个迭代,过程中记录最大值即可// 时间O(N)func MaxSumWithSublist(k int, list []int) (hit []int, max int) { var sum = 0 for i := 0; i < k; i++ { sum += list[i] } // 将第一组初为最大值 max = sum for i :=

2021-07-14 16:33:21 230

原创 P12 合并两个有序数组(双指针)

双指针// 合并两个有序列表:双指针 时间O(N+M)空间O(N+M)func MergeArrayWithOrder(array1, array2 []int) (result []int) { var p1, p2 = 0, 0 result = make([]int, 0, len(array1)+len(array2)) for { if p1 >= len(array1) { // array1没数据了 result = append(result, array2[p2

2021-07-14 15:40:22 83

原创 P11 环形链表(标记法、快慢指针)

一、 Map标记法// 若存在返回结节func (c *ChainList) ExistLoopBySign() (*ChainList, bool) { var signMap = make(map[int]*ChainList, 1) for curr := c; curr != nil; curr = curr.Next { if hit, ok := signMap[curr.Value]; ok { return hit, true } signMap[curr.Val

2021-07-14 14:58:45 174

原创 P10 排列硬币

一、迭代// 时间O(n),空间O(1)func sortCoin(n int) int { nums := n for i := 1; i <= nums; i++ { if n <= i { // 当前的硬币不够占位数 return i } n = n - 1 } return -1}二、折半查找// 时间O(logN),空间O(1)func halfSearch(n int) (line int) { var left, right = 1, n

2021-07-12 16:31:47 136

原创 P09 斐波那契数列

斐波那契数列的第N位=(N-1)+(N-2);开始仅知道第一位和第二位的值为0和1。求第N位的值的算法0 1 2 3 5 8 13 21 34 55 … (n-2) (n-1) n一、暴力递归// 暴力递归 时间O(2^n) 空间O(1)func forceRecursion(n int) int { if n <= 1 { // 第0、1位直接返回 return n } return forceRecursion(n-1) + forceRecursion(n-2)}二、

2021-07-11 11:01:18 343

原创 P08 两数之和(双指针、二分法、BF、map标记法)

一、无序数组1.1 暴力算法// 无序暴力算法 时间O(n^2), 空间O(1)func (s *SumOfTwoNumber) BF(target int) (int, int) { for i := 0; i < len(s.array); i++ { for j := i + 1; j < len(s.array); j++ { if s.array[i]+s.array[j] == target { return i, j } } } return

2021-07-10 23:33:59 198

原创 P07 数组中的三数最大乘积

整数数组的三数之积全正数: 1,2,3,4,5 乘积最大值(3*4*5)三个最大值全负数: -5,-4,-3,-2,-1 -1、-2、-3 三个最大值正负数: -1,1,2,3,4 2,3,4 三个最大值正负数:-4,-3,-2,-1,1 -4,-3,1 两最小、一最大情况数组结果描述全正数1,2,3,4,53 * 4 * 5三个最大值全

2021-07-10 22:13:14 124

原创 P06 X的平方根(二分法、牛顿迭代)

求X的平方根的整数部分方法一:二分法func HalfSearch(x int) (index int) { index = -1 left, right := 0, x for left <= right { mid := (left + right) / 2 if (mid * mid) <= x { // 值的平方必须比x小,此值符合,寻找比该值大的数, 移动left加大mid index = mid left = mid + 1 } else {

2021-07-07 21:36:40 59

原创 P05 寻找数组的中心下标(双指针思想)

给定一个整数数组nums,请编写一个能够返回数组"中心下标"的方法中心下标是数组的一个下标,其左边的所有元素的总和等于右边的所有元素的总和;如不存在,则返回-1;存在多个返回靠近左边的那一个方法一:left总和逐级递增,right总和逐级递减,直至两数相等返回func CenterIndexOfArray(nums []int) int { left := 0 right := math.sum(nums) for i := 0; i < len(nums); i++ { ri

2021-07-05 20:44:58 191

原创 P04 删除排序数组中的重复项(快慢指针)

一个有序数组nums,原地删除重复出现的元素,使每个元素仅出现一次,返回删除后数组的新长度。不能使用额外的数组空间,必须在原地修改输入数组并在使用O(1)空间条件下完成。例如输入[0, 1, 2, 2, 3, 3, 3, 4, 5, 5]输出6package mainimport "fmt"func doublePoint(nums []int) (test []int, index int) { var i int = 0 for j := i + 1; j < len(num

2021-07-04 22:10:41 111

原创 P03 素数统计(BF算法、埃筛法)

质数(素数): 除了1和它本身,无法被其他数整除的数(0、1除外)。100以内的质数共有25个:2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97统计n以内的素数个数(暴力算法)比如5要与 2、3、4求余;比如7要与 2、3、4、5、6求余;所以x要与[2:x-1]内的值进行求余func isPrime(x int) bool { for i := 2; i < x; i++ { if x%i

2021-06-23 16:03:33 172

原创 P02 单链表反转(递归)

func RecursionChain(curr *Node) *Node { // curr若本来是nil直接返回 // curr.next为空则当前节点最最后节点 if curr == nil || curr.Next == nil { return curr } // 会无限调用自己,并返回最后一个last值, 将这个last逐层返回即可 last := RecursionChain(curr.Next) // 取到最后节点才开始两两调转指向 next := curr.Next .

2021-06-23 11:44:17 112

原创 P01单链表反转(迭代)

输出:1->2->3->4->5->5->4->3->2->1->// 单链表反转(迭代)func ReverseListNode(head *Node) *Node { var prev, curr *Node = nil, head for curr != nil { next := curr.Next curr.Next = prev prev = curr curr = next } return p..

2021-06-20 00:13:38 70 3

原创 Gin、Go HTTP库、ReverseProxy、Nginx代理性能压测

笔记本(英特尔 i7 8700HQ),分配内存4G, 4核CPU虚拟机进行试验1、Ginfunc main) { router := gin.New() router.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{"message": "pong"}) }) server := &http.Server{ Addr: addr, WriteTimeout: time.Second * 3, Ha

2021-05-30 15:48:42 2376 4

原创 Golang基于Zookeeper实现节点注册发现、内容配置变更

一、Zookeeper入门1.1 Zookeeper简介Zookeeper是一个分布式数据库(程序协调服务),Hadoop子项目;以树状方式维护节点方数据的增、删、改、查;通过监听可以获取相应消息事件;节点类型:持久节点:一直存储在服务器上临时节点:会话失效、节点自动清理顺序节点:节点创建时自动分配序列号1.2 Zookeeper安装启动[root@localhost ~]$ wget https://mirrors.bfsu.edu.cn/apache/zookeeper/zookee

2021-05-06 18:43:22 1382 1

原创 网络代理【6】TCP代理,代理Redis服务

前置文章:【TCP服务器】仿http.server源码实现服务与逻辑分离本文是在以上文章的TCP Handler改写实现步陬:代理实现Handler方法连接下游服务设置退出时关闭链接双工读写package proxyimport ( "context" "gateway/proxy/lbalance" "io" "log" "net" "time")// TCPReverseProxy TCP反向代理type TCPReverseProxy struct { .

2021-05-05 15:58:21 204

原创 【TCP服务器】仿http.server源码实现服务与逻辑分离

一、HTTP服务的创建和原理图import "net/http"func main(){ // 逻辑 mux := http.NewServeMux() mux.HandleFunc("/hello", func(rw http.ResponseWriter, req *http.Request) { rw.Write([]byte("welcome")) }) // 服务 server := http.Server{ Addr: "192.168.27.128:80

2021-05-04 16:03:15 307

原创 Centos7安装Openstack

使用一台物理机虚拟化两台虚拟机(openstack+nova)物理机配置:CPU型号:Intel® Core™ i5-2320 CPU @ 3.00GHz(亲测笔记本3代i5带不起来)内存至少16G;Openstack 8G;nova 6G(4G我的起来了,却看见别人安装时内存报错,建议6G)物理机系统Centos7.01、物理机禁用 selinux#vim /etc/selinux/configSELINUX=disabled禁用 firewalld#systemctl stop

2021-04-18 18:27:40 5751

原创 Centos7搭建NTP时间服务器

1、装包#yum -y install chrony#echo ''>/etc/chronyd //为下面复制作准备2、只要将下面一段复制到/etc/chronyd即可server ntp1.aliyun.com iburst //同步阿里云时间服务器 $1bindacqaddress 0.0.0.0 //监听所有地址allow 0/0 //$2cmdallow 127.0.0.1 //$

2021-04-17 18:36:27 3339

apache flink.zip

apache-flink:1.9.1漏洞服务, 被使用于文章https://blog.csdn.net/qq_38900565/article/details/109747070

2020-11-18

空空如也

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

TA关注的人

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