自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Go-Tips goroutine

go协程

2022-08-27 13:23:38 213 1

原创 Go-Tips:map转json-> json转结构体

map转json ,json转struct

2022-08-20 21:28:36 341

原创 大数据---大数据分析的道与术(笔记)

2022-06-25 11:09:46 1380

原创 GoTips-- 内存管理2

内存控制

2022-06-10 18:21:13 136

原创 GoTips-- 内存管理

go内存管理

2022-06-10 14:23:56 150

原创 leetcode--前k个高频词汇_692_sort用法

692. 前K个高频单词难度中等442给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率, 按字典顺序 排序。func topKFrequent(words []string, k int) []string { m := make(map[string]int) for _, val := range words{ m[val]++ } sli :=

2022-04-08 09:49:37 71

原创 leetcode--数组中重复的数据_442

442. 数组中重复的数据给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。func findDuplicates(nums []int) []int { n:=len(nums) var res []int for _,num:=range nums{ x:=(num-1)%n nums[x]+=n }

2022-04-05 09:38:45 76

原创 GoProject--简易日志收集实现

GoProject–简易日志收集实现mylogger.go自定义一个日志库type LogLevel uint16/* 类型再定义: type A int32 类型别名: type A = int32*/const ( UNKNOWN LogLevel = iota//自增默认数据类型为int,此处显式指定类型为LogLevel DEBUG TRACE INFO WARNING ERROR FATAL)log等级:Go并没有明确意义上的enum定义,可借助iota标识

2022-03-28 19:00:51 212

原创 深入剖析Kubernetes--第七章:NetworkPolicy&&ServiceDNS与服务发现&&NodePort&&Ingress

NetworkPolicy&&ServiceDNS与服务发现&&NodePort&&Ingress来源于bilibili 黑马程序员 和 纸质书 深入剖析KubernetesNetworkPolicy示例:apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata: name: test-network-policy namespace: defaultspec: podSel

2022-03-25 17:14:59 373

原创 深入剖析Kubernetes--第七章:单机容器网络的实现原理

单机容器网络的实现原理Docker 项目会默认在宿主机上创建一个名叫 docker0 的 网桥,凡是连接在 docker0 网桥上的容器,就可以通过它来进行通信。Veth Pair:将容器连到网桥以两张虚拟网卡(Veth Peer)的形式成对出现,从其中一个“网卡”发出的数据包,可以直接出现在与它对应的另一张“网卡”上,无论是否在同一个Network Namespace容器**“跨主机通信”**:通过软件的方式,创建一个整个集群“公用”的网桥,然后把集群里的所有容器都连接到这个网桥上里的所有

2022-03-23 21:38:22 1073

原创 GoTips-- make和new对比

new只接受一个参数,这个参数是一个类型,分配好内存后,返回一个指向该类型内存地址的指针。同时请注意它同时把分配的内存置为零,也就是类型的零值。package mainimport ( "fmt" "sync")type people struct { m sync.Mutex name string age int sex string}func main() { zzt := new(people) //默认给u分配到内存全部为0 zzt.m.Lock(

2022-03-23 19:55:26 71

原创 GoTips--rpc十分简单示例

RPCRemote Procedure Call Protocol —— 远程过程调用协议!IPC: 进程间通信RPC:远程进通信 —— 应用层协议(http协议同层)。底层使用 TCP 实现。像调用本地函数一样,去调用远程函数通过rpc协议,传递:函数名、函数参数。达到在本地,调用远端函数,得返回值到本地的目标。对比:socket通信server端:​ net.Listen() —— listener 创建监听器​ listener.Accpet() —— con

2022-03-23 15:56:21 3512

原创 深入剖析Kubernetes--第六章:持久化存储:PV和PVC的设计与实现原理

持久化存储:PV和PVC的设计与实现原理PVPV 描述的,是持久化存储数据卷这个 API 对象主要定义的是一个持久化存储在宿主机上的目录,比如一个 NFS 的挂载目录。apiVersion: v1 kind: PersistentVolumemetadata: name: pv2spec: nfs: # 存储类型,与底层真正存储对应 capacity: # 存储能力,目前只支持存储空间的设置 storage: 2Gi accessModes: # 访问模式 s

2022-03-15 09:57:57 476

原创 GoTips--GMP

笔记来源:刘丹冰AceldGPM模型 bilibili多进程(线程)在多进程/多线程的操作系统中,解决了单进程阻塞的问题,因为一个进程阻塞cpu可以立刻切换到其他进程中去执行,而且调度cpu的算法可以保证在运行的进程都可以被分配到cpu的运行时间片。这样从宏观来看,似乎多个进程是在同时被运行。但新的问题就又出现了,进程拥有太多的资源,进程的创建、切换、销毁,都会占用很长的时间,CPU虽然利用起来了,但如果进程过多,CPU有很大的一部分都被用来进行进程调度了。协程多进程、多线程已经提高了系统的并发

2022-03-13 13:15:52 813

原创 深入剖析Kubernetes--第五章:声明式API与Kubernetes编程范式

声明式API与Kubernetes编程范式Istio项目Dynamic Admission Control在 Kubernetes 项目中,当一个 Pod 或者任何一个 API 对象被提交给 APIServer 之后,在K8S项目正式处理之前会通过 项目里一组被称为 Admission Controller 的代码实现 Admission 的功能 来 进行一些初始化工作(如自动为所有 Pod 加上某些标签(Labels)。)如果想要添加一些自己的规则到 Admission Controller(

2022-03-12 23:01:41 397

原创 深入剖析Kubernetes--第五章:声明式API与Kubernetes编程范式

声明式API与Kubernetes编程范式Istio项目Dynamic Admission Control在 Kubernetes 项目中,当一个 Pod 或者任何一个 API 对象被提交给 APIServer 之后,在K8S项目正式处理之前会通过 项目里一组被称为 Admission Controller 的代码实现 Admission 的功能 来 进行一些初始化工作(如自动为所有 Pod 加上某些标签(Labels)。)如果想要添加一些自己的规则到 Admission Controller(

2022-03-11 22:18:37 625

原创 GoProject--Go语言实现简易聊天室

Go语言实现简易聊天室项目结构主程序main.go服务器server.go客户端client.go服务器端主程序main.gopackage mainimport ( "fmt" "example/server")func main() { fmt.Println("服务器开启") server := server.NewServer("127.0.0.1", 8888) server.Start()}server.go服务器API的属性:type S

2022-03-09 20:50:23 330

原创 GoTips--牛客输入输出练习

[第七题](A+B(7)_OJ在线编程常见输入输出练习_牛客网 (nowcoder.com))package main import ( ``"bufio" ``"fmt" ``"os" ``"strings" ``"strconv") func main () { ``input := bufio.NewScanner(os.Stdin) ``for` `{ ``if` `ok := input.Scan(); !ok { ``break

2022-03-09 11:23:26 383

原创 GoTips--匿名函数and闭包(2)

匿名函数//直接执行func main() { func(s string) { println(s) }("hello,world!") }//复制给变量func main() { add:=func(x,y int)int{ return x+y } println(add(1,2)) }//作为参数func test(f func()) { f() } func main() {

2022-03-09 09:58:19 90

原创 GoTips--有关输入输出:bufio包

bufio实现缓存IObufio的Reader和Writer操作一般适用于磁盘IO的读写场景。Readerbufio.Reader 结构包装了一个 io.Reader 对象,提供缓存功能,同时实现了 io.Reader 接 口。type Reader structtype Reader struct { buf []byte rd io.Reader // 底层的io.Reader //r:从buf中读走的字节(偏移);w:buf中填充内容的偏移;

2022-03-08 13:16:57 836

原创 深入剖析Kubernetes--第五章:Kubernetes编排原理_控制器_Job与CronJob

Job与CronJob创建一个Job API对象apiVersion: batch/v1kind: Jobmetadata: name: pispec: template: spec: containers: - name: pi image: resouer/ubuntu-bc command: ["sh", "-c", "echo 'scale=10000; 4*a(1)' | bc -l "] restar

2022-03-07 23:22:25 428

原创 深入剖析Kubernetes--第五章:Kubernetes编排原理_控制器_DaemonSet

DaemonSet基础概念特点:这个Pod在K8s集群中的每一个节点上运行每个节点只有一个这样的Pod实例当有新节点加入集群后,该Pod会自动地在新节点上被创建出来,当旧节点被删除后,Pod也会被相应的回收定义:apiVersion: apps/v1 # 版本号kind: DaemonSet # 类型 metadata: # 元数据 name: # rs名称 namespace: # 所属命名空间 labels: #标签 controller: da

2022-03-07 21:53:49 214

原创 GoTips--有关输入输出:fmt包的使用

fmtfmt包使用函数实现I/O格式化常用格式化通用%v 值的默认格式表示%+v 类似%v,但输出结构体时会添加字段名%#v 值的Go语法表示%T 值的类型的Go语法表示布尔%t 单词true或false整数%b 表示为二进制%c 该值对应的unicode码值%d 表示为十进制%o 表示为八进制%x 表示为十六进制,使用a-f%X 表示为十六进制,使用A-F浮点数%e 科学计数法,如-1234.456e+78%E 科学计数法,如-1234.456E+78字符串

2022-03-07 21:12:00 268

原创 leetcode--反转字符串中的单词 III_557_嵌套for循环

leetcode-557给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例 1:输入:s = “Let’s take LeetCode contest”输出:“s’teL ekat edoCteeL tsetnoc”func reverseWords(s string) string { n :=len(s) tar := make([]byte,n) for i:=0;i<len(s);{ st

2022-03-07 10:45:12 87

原创 GoTips--Go退出的三种方式

return ===> 返回当前函数exit ===> 退出当前进程GOEXIT ===> 提前退出当前go程,执行延迟调用package mainimport ( "fmt" "time")func main() { go func() { go func() { defer fmt.Println("延迟调用") func() { fmt.Println("这是子go程内部的函数!") return //这是返回当前函数 /

2022-03-06 13:47:03 2573

原创 GoTips--闭包

闭包闭包是什么闭包是一个函数,这个函数包含了他外部作用域的一个变量闭包 = 函数 + 外部变量的引用底层原理函数可以作为返回值函数内部查找变量的顺序:现在自己的内部找,找不到再往外层找package mainimport ( "fmt")//已经给定f1作为接口,来调用传入参数(函数)f()func f1(f func()) { //fmt.Println("this is f1") f()}//f2此时作为传入参数(函数),无法直接使用func f2(x, y in

2022-03-06 12:22:33 123

原创 GoProject--cache2go源码阅读

golang:缓存库cache2go介绍cache2go项目地址是一个简单的缓存库,代码量较少,可以学习锁、goroutine等知识代码结构 benchmark_test.gocache.gocache_test.gocacheitem.gocachetable.goerrors.gocacheitem.goCacheItem是缓存表中的条目,代码逻辑很简单/* * Simple caching library with expiration capabilities *

2022-03-06 11:41:57 194

原创 深入剖析Kubernetes--第五章:Kubernetes编排原理_控制器_StatefulSet(2)

StatefulSet(二)Kubernetes 项目引入了一组叫作 Persistent Volume Claim(PVC)和 Persistent Volume(PV)的 API 对象定义一个 PVC,声明想要的 Volume 的属性kind: PersistentVolumeClaimapiVersion: v1metadata: name: pv-claimspec: accessModes: - ReadWriteOnce resources: requests

2022-03-05 22:08:08 2618

原创 深入剖析Kubernetes--第五章:Kubernetes编排原理_控制器_StatefulSet(1)

StatefulSet(一)​ Deployment 假设了一个应用的所有Pod都是一样的,他们之间没有顺序。但在实际场景中,多个实例之间通常会存在依赖关系,例如分布式应用中存在主从、主备关系;数据存储类应用,它的多个实例,往往都会在本地磁盘上保存一份数据。而这些实例一旦被杀掉,即便重建出来,实例与数据之间的对应关系也已经丢失,从而导致应用失败。​ 当实例之间有不对等关系时,以及实例对外部数据有依赖关系时,被称为“有状态应用”(Stateful Application)​StatefulSet将应用

2022-03-05 20:36:46 2805

原创 深入剖析Kubernetes--第五章:Kubernetes编排原理_控制器_Deployment

控制器控制器都遵循k8s项目中的一个通用编排模式:控制循环遵循以下伪代码:for { 实际状态 := 获取集群中对象 X 的实际状态(Actual State) 期望状态 := 获取集群中对象 X 的期望状态(Desired State) if 实际状态 == 期望状态{ 什么都不做 } else { 执行编排动作,将实际状态调整为期望状态 }}实际状态:可以通过:心跳汇报、监控系统以及控制器主动收集等期望状态:一半来自于用户提交的YAML文件​ [

2022-03-04 22:01:40 2576

原创 深入剖析Kubernetes--第五章:Kubernetes编排原理_Pod

kubernetes编排原理:Pod1 为什么需要Pod复习:​ Namespace做隔离,Cgroups做限制,rootfs做文件系统​ 容器的本质是进程今日学习:​ 在操作系统中,进程通常以进程组的方式“有原则”地组织在一起。​ 一些容器之间需要紧密协作(超亲密关系):互相之间发生直接的文件交换、使用localhost 或者Socket文件进行本地通信、会发生非常频繁的远程调用、需要共享某些Linux Namespace(例如一个容器需要加入另一个容器的 Network Namespace

2022-03-03 22:44:39 605

原创 leetcode--轮转数组_189_append用法

leetcode-189给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]示例 2:输入:nums = [-1,-100,3,99], k = 2输出:[3,99,-1,-100]解释:向右轮转

2022-03-03 12:15:34 53

原创 Go语言实战--学习笔记--runner

Go语言实战–runner

2022-03-03 12:09:02 419

原创 深入剖析Kubernetes--第四章:k8s部署

深入剖析Kubernetes---k8s部署

2022-03-02 17:26:20 741

原创 深入剖析Kubernetes--第二章:容器技术基础

深入剖析Kubernetes---docker原理

2022-03-02 17:22:38 390

k8s的ingress yaml文件

k8s的ingress yaml文件

2022-03-25

空空如也

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

TA关注的人

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