shida's blog

千里之行,始于足下

Go 类型断言 .(type)

关键词:interface,switch 类型断言 x.(T) 其实就是判断 T 是否实现了 x 接口,如果实现了,就把 x 接口类型具体化为 T 类型;而 x.(type) 这种方式的类型断言,就只能和 switch 搭配使用,因为它需要和多种类型比较判断,以确定其具体类型。 x.(type...

2019-03-27 12:36:30

阅读数 15

评论数 0

Kubernetes 资源配额和资源限制管理

引言 在 Kubernetes 体系中,资源默认是被多租户共享使用的,租户间不可避免地存在资源竞争问题。 为了满足不同租户多样的服务质量需求,集群管理员需要为租户设置非常精细的资源配额以及资源限制。 截止 1.14 版本,Kubernetes 已经支持分别从 Namespace、Pod 和 ...

2019-03-27 11:52:21

阅读数 31

评论数 0

goroutine 队列插入顺序分析

一、背景 我们在编写 go 程序时,经常会创建一系列的协程,这些协程通常会被放到 P 维护的一个协程队列 那么协程被插入队列时遵循的顺序是如何的呢?到底是插到队头还是队尾呢? 二、源码分析 golang 版本: 1.11 源码位置:runtime/proc.go // Cre...

2019-03-25 12:16:37

阅读数 23

评论数 0

goroutine 调度

goroutine与调度器 我们都知道Go语言是原生支持语言级并发的,这个并发的最小逻辑单元就是goroutine。goroutine就是Go语言提供的一种用户态线程,当然这种用户态线程是跑在内核级线程之上的。当我们创建了很多的goroutine,并且它们都是跑在同一个内核线程之上的时候,就需要...

2019-03-25 11:10:00

阅读数 45

评论数 0

VirtualBox vdi 磁盘瘦身记录

一、背景 基础环境:Windows 系统上安装 VirtualBox 虚拟化软件,创建了一台 Ubuntu 虚拟机 目标:压缩 Ubuntu 虚拟机的 vdi 磁盘文件(该文件在使用过程中,只增长,不减小) 二、操作步骤 2.1 在虚拟机内执行 开机,打开 terminal 终端,...

2019-03-22 14:52:15

阅读数 47

评论数 0

Golang 中 Channel 对阻塞 goroutine 的唤醒顺序分析

一、前言 我们知道,goroutine 是有大小的,当 发送满/读取空时,会阻塞对应的 发送/读取 goroutine 协程。 那么,当 Channel 可用时,它是按照什么顺序唤醒等待的 goroutine 协程的呢? 带着这个问题,我们深入 chan 的源码逻辑,去一探...

2019-03-08 12:30:21

阅读数 95

评论数 0

Go sync.RWMutex 实现线程安全 map 读写

关键词:读写锁 当然,go 语言已经内置提供了线程安全 map,即 sync.Map, 在这里只是用自己的方式实现简单的锁应用, 代码示例如下: import "sync" type SafeDict struct { data map[stri...

2019-03-07 11:30:13

阅读数 20

评论数 0

Golang unsafe 指针转换与内存操作

Golang 提供了 unsafe 包,让我们能够直接操作指定内存地址的内存。 通过 unsafe.Pointer() 函数,我们能够获取变量的内存地址,本质上这是个整数。 但 Pointer 不支持运算,如果要在内存地址上进行加减运算,需要将其转为 uintptr 类型。 下面我们尝试读取...

2019-03-04 11:05:10

阅读数 60

评论数 0

Golang 反射牛刀小试

一、引言 在学习 Java 时,反射一直是个重点掌握内容,ORM 等框架的实现更是与反射息息相关; Go 语言同样提供了对反射的支持,json 序列化库就是基于反射来工作的; 基于反射,我们不仅能够获得变量的类型信息,而且能够动态修改变量内部的字段值。 二、反射的使用 我们就使用...

2019-03-01 11:10:48

阅读数 36

评论数 0

kubectl 插件加载原理

一、前言 kubectl 提供了一种插件扩展机制,以丰富和增强其对集群的管控能力, 目前,1.13 版的 kubernetes 中,kubectl 插件扩展功能已经处于 beta 阶段。 原文介绍:https://kubernetes.io/docs/tasks/extend-kube...

2019-02-28 17:52:06

阅读数 32

评论数 0

Forwarding loop detected in "." zone. Exiting. See https://coredns.io/plugins/loop#troubleshooting

ubuntu 下 使用 minikube 部署 k8s 集群,发现 coredns 起不来 记录一种临时的解决办法: 1、kubectl edit cm coredns -n kube-system 2、delete ‘loop’ , save and exit 3、restart c...

2019-02-26 15:16:46

阅读数 120

评论数 0

Bash 命令行显示 Git 分支名称

只需在 ~/.bashrc 最后追加如下内容: function git-branch-name {   git symbolic-ref HEAD 2>/dev/null | cut -d"/" -f 3 } function git...

2019-02-26 13:15:24

阅读数 28

评论数 0

基于 sample-controller 实现自定义 CRD 控制器(Operator)的一般步骤

一、背景介绍         CRD 即 CustomResourceDefinition,是 kubernetes 极力推荐的资源扩展方式;         基于 CRD 技术,用户能将自定义资源注册到 kubernetes 系统,并像使用原生资源       (如 pod、statefu...

2019-02-20 17:58:23

阅读数 153

评论数 0

Go 语言实战 -- 读书笔记

第一章,关于 go 语言的介绍 1.  go runtime 提供线程池处理 goroutine,goroutine != 线程,而是类似于 task; 2.  channel 只能保证 goroutine 间数据传输同步,如果传递的是指针,针对指针内容的修改可能需要额外同步机制; 3.  ...

2019-02-13 17:35:43

阅读数 59

评论数 1

WinXP Gateway(网关)—— 基于 AnyRouter 将电脑变成软网关

一、网络场景         局域网内有一台电脑能够上网(称为代理机),我们想让该局域网内的其他电脑都能够通过该代理机上网。         要实现这个目的,方法有很多,例如:   1.  在代理机上部署 VPN 服务端软件,其他机器通过连接该代理机 VPN,进而访问互联网;   2. ...

2019-02-11 16:43:15

阅读数 52

评论数 0

单 VPN 账户局域网共享解决方案

一、背景介绍 1.1  基本条件         * 公司申请了一个 VPN 账户,但该账户限制登录机器的数量;         * 局域网服务器具备至少两台双网卡机器,共处于同一个局域网,而且能上外网;         * 办公网络能访问到服务器网络,能通过 ssh 登录到服务器; 1...

2019-02-11 16:42:52

阅读数 459

评论数 0

XShell 登录跳板机后自动跳转到目标机器

一、引言         在实际的生产环境中,有很多机器都有登录限制,必须通过跳板机进行跳转。         为了避免每次都输入 ssh 跳转命令,可以利用 XShell 实现自动跳转。 二、设置步骤 2.1   配置登录跳板机的连接地址、用户名、密码                ...

2019-01-24 10:40:37

阅读数 111

评论数 0

CentOS Gateway (软网关)配置方法

一、引言         上篇博文介绍了如何基于 WinXP 环境实现软网关,主要是使用了 AnyRouter 软件         本文介绍在 CentOS 7 操作系统下,实现软网关的配置方法,极其简单,就两步! 二、软网关实现步骤 2.1  开启 IP 转发  # vim /et...

2019-01-22 20:36:16

阅读数 47

评论数 0

Helm 源码编译

一、背景介绍         helm 是重要的 k8s 包管理工具,其源码托管在:https://github.com/helm/helm         本文介绍如何基于 ubuntu 18.04 环境,源码编译 helm 二、编译步骤 2.1  安装 golang、git  # ...

2019-01-22 09:54:04

阅读数 42

评论数 0

JNLP 文件无法打开的解决办法

JNLP(Java Network Launching Protocol )是 java 提供的一种可以通过浏览器直接执行 java 应用程序的途径, 它使你可以直接通过一个网页上的 URL 连接打开一个 java 应用程序。 因此,要运行 jnlp 程序,首先需要安装 jdk/jre 环境(...

2019-01-17 15:37:43

阅读数 430

评论数 0

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