- 博客(241)
- 收藏
- 关注
原创 手动搭建kubernetes集群(四)
开始改造我们之前搭建的基础集群,加上安全机制。准备工作1. 停止master节点的所有服务查看已有的servicekubectl get services删除service(例如有一个叫xxx的service)kubectl delete service xxx查看已有的deploymentskubectl get deploy删除deploymentskubectl d...
2019-05-23 12:04:17 489
原创 手动搭建kubernetes集群(三)
本文是这个系列的第三篇文章,前两篇记录了搭建一个k8s集群的过程,但是之前搭建好的集群少了很重要的一个部分,就是安全相关的功能,包括认证、授权等机制。什么是认证,什么又是授权呢,可以简单的理解为,认证的目的是知道用户是谁,授权的目的是知道用户可以做什么。先认证,知道是谁,再授权知道能做什么。所谓的安全,主要是针对apiserver所说的,因为k8s通过apiserver提供RESTFUL接口,...
2019-05-22 00:40:08 343
原创 手动搭建kubernetes集群(二)
根据前文准备好的环境,我们现在来一步步的搭建一个基础的k8s集群注意,这里的配置信息都是按照我自己的虚拟环境来写的。把server01作为master节点,server02和server03作为worker节点各个节点需要配置的服务和命令如下:master节点上需要部署的服务包括:etcd服务、APIServer服务、Scheduler服务、ControllerManager服务、Cali...
2019-05-20 16:22:30 1494
原创 手动搭建kubernetes集群(一)
最近在看有关k8s的一些知识,想手动搭建一套环境来体验一下,本文详细记录一下搭建的过程。环境三台Ubuntu系统的虚拟机,其中一台作为master,另外两台作为worker节点步骤1:安装虚拟机我的笔记本是一台Macbook Pro,首选安装一个虚拟机软件Vmware Fusion,过程略。下载好Ubuntu镜像,我选择的是19.04版本。打开Fusion,选择New,然后选择“In...
2019-05-20 14:01:00 395
原创 在kubernetes上部署Go Micro代码(一)
环境准备用kubeadm安装好kubernetes环境,我用的测试环境是单节点的,master node和worker node部署在同一台机器上。具体的安装过程就不详述了,坑还是有一些的。首先,init的时候需要制定pod的网络环境:kubeadm init --pod-network-cidr 10.244.0.0/16其次,由于是单节点,因此需要设置允许master作为worker...
2019-08-03 23:20:26 3016
原创 PHP的yaf框架类加载机制
代码注册ini设置到global_library变量(yaf.c)STD_PHP_INI_ENTRY("yaf.library", "", PHP_INI_ALL, OnUpdateString, global_library, zend_yaf_globals, yaf_globals)把global_library和local_library都传递给了loader的初始化方法(...
2019-06-15 11:29:40 914
原创 Docker部署完整的PHP-RPC-Golang环境
完全基于docker部署一个php通过rpc访问golang的环境。基本架构我们用PHP的Laravel框架来实现一个用户登录的Restful Api,地址为:POST /user/login返回信息为用户Id以及JWT token。Golang用来实现两个服务,一个是用户信息服务,一个是登录的统计服务,PHP通过gRPC与Golang通讯。最终部署完成后,共有4个docker的co...
2019-06-03 17:48:37 1145
原创 Laravel整合gRPC
最近需要用Laravel实现一个Rest的API,后端调用Golang的RPC服务,记录一下整合的过程。环境准备php安装grpc和protobuf扩展pecl install grpcpecl install protobuf找到php.ini文件,添加下面两行:extension=grpc.soextension=protobuf.soclone一个grpc的repo...
2019-05-31 15:55:09 2697
原创 Golang面试遇到的问题--控制goroutine的并发数量
问题使用goroutine的时候,如何控制并发的数量。下面是一个简单的实现思路,用带缓存的channelcodeimport ( "fmt" "sync" "time")var wg sync.WaitGroupfunc main() { userCount := 10 ch := make(chan bool, 2) for i := 0; i < userC...
2019-05-28 12:42:19 1032
原创 Gokit创建微服务的例子(翻译)
第一原理让我们创建一个Go kit 服务,我们暂时只用一个main.go文件。你的事务逻辑你的服务从你的事务逻辑开始。在Go kit里,我们用一个interface来描述一个服务// StringService provides operations on strings.import "context"type StringService interface { Uppercas...
2019-05-28 02:34:55 3544
原创 给Mac上的Fusion虚拟主机设置固定的IP地址
因为最近需要安装k8s的本地测试环境,所以使用Mac上的Vmware Fusion安装了几台ubuntu系统的虚拟机,某次重启的时候发现ssh登录不上去了,打开虚拟机看了一下,发现是ip地址发生了变化,研究了半天,找到了解决的方法如下:在Mac的Terminal上编辑下面这个文件:sudo vi /Library/Preferences/VMware\ Fusion/vmnet8/dhcpd....
2019-05-21 18:25:23 2009
原创 Golang的GC过程备忘
STW触发的时间一次GC有两次触发STW,一次是GC的开始阶段,主要是开启写屏障和辅助GC等操作另外就是表记完成之后,重新扫描部分根对象,禁用写屏障GC的触发条件GC在满足一定条件后会被触发, 触发条件有以下几种:gcTriggerAlways: 强制触发GCgcTriggerHeap: 当前分配的内存达到一定值就触发GCgcTriggerTime: 当一定时间没有执行过GC就触发...
2019-05-20 14:00:03 336
原创 TCP协议细节学习
TCP协议中包含ip信息么TCP协议中并不包含ip信息,ip信息是在第三层处理的,TCP中处理的是端口信息MSS的值是如何计算的TCP协议中可选的MSS(Maximum Segment Size,最大报文长度))参数,一般使用MTU代替,值为1460。这个值是怎么来的呢?Maximum Transmission Unit,缩写MTU,中文名是:最大传输单元。假设MTU值和IP数据包大小一...
2019-05-20 13:59:06 151
原创 Golang洗牌算法
简介主要思路为每次随机挑选一个值,放在数组末尾。然后在n-1个元素的数组中再随机挑选一个值,放在数组末尾,以此类推。注意,一定要设置随机种子,否则每次返回的值是一样的。codefunc shuffle(nums []int) []int { rand.Seed(time.Now().UTC().UnixNano()) for i := len(nums); i > 0; i-- {...
2019-05-10 12:49:09 803
原创 Gopher china 2019 ppt下载地址
虽然没去现场,看看PPT也是好的。https://github.com/gopherchina/conference/tree/master/2019
2019-05-07 14:38:41 904
原创 Golang学习--tcp服务实现
概要golang实现tcp编程主要用到net包下面的几个方法:net.Listen:监听一个地址Listener接口中的Accept:接收一个请求连接net.Dial:和服务端建立连接服务端codepackage mainimport ( "bufio" "encoding/json" "flag" "fmt" "net" "os" "time")var hos...
2019-04-29 23:53:40 2051
原创 Golang Leetcode 260. Single Number III.go
思路如果能将A,B分开到二个数组中,那显然符合“异或”解法的关键点了。因此这个题目的关键点就是将A,B分开到二个数组中。由于A,B肯定是不相等的,因此在二进制上必定有一位是不同的。根据这一位是0还是1可以将A,B分开到A组和B组。而这个数组中其它数字要么就属于A组,要么就属于B组。再对A组和B组分别执行“异或”解法就可以得到A,B了。而要判断A,B在哪一位上不相同,只要根据A异或B的结果就可以知...
2019-04-26 23:16:00 223
原创 Golang Leetcode 173. Binary Search Tree Iterator.go
思路用一个slice实现stack结构,首先将root和root的左子树入栈出栈的同时,将右子树入栈codetype BSTIterator struct { stack []*TreeNode}func Constructor(root *TreeNode) BSTIterator { stack := make([]*TreeNode, 0, 128) res := BS...
2019-04-26 23:15:07 268
原创 Golang Leetcode 142. Linked List Cycle II.go
思路用快慢指针的方式,快指针每次走两步,慢指针每次走一步,相遇的时候,就是环的位置此时slow停的位置到环入口的距离,等于头结点到环入口的距离(https://blog.csdn.net/jhlovetll/article/details/85255708)所以两个结点前进相同的步数,head就位于环的入口处了codefunc detectCycle(head *ListNode) *L...
2019-04-26 23:13:59 270
原创 Golang Leetcode 131. Palindrome Partitioning.go
思路回溯算法搞定codevar res [][]stringfunc partition(s string) [][]string { res = [][]string{} if len(s) < 1 { return res } helper(s, 0, []string{}) return res}func helper(s string, start int...
2019-04-26 23:12:45 220
原创 Golang Leetcode 445. Add Two Numbers II.go
思路先把所有节点节点顺序入栈,然后一边出栈一边处理codefunc addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { len1, len2 := 0, 0 for tmp := l1; tmp != nil; tmp = tmp.Next { len1++ } for tmp := l2; tmp != nil; tmp ...
2019-04-26 23:11:18 192
原创 Golang Leetcode 123. Best Time to Buy and Sell Stock III.go
思路只能进行两次交易,因此一共有四个状态,互相之间转移codefunc maxProfit(prices []int) int { b1, b2 := math.MinInt32, math.MinInt32 s1, s2 := 0, 0 for i := 0; i < len(prices); i++ { b1 = max(b1, -prices[i]) s1 = ma...
2019-04-26 23:09:45 168
原创 Golang Leetcode 868. Binary Gap.go
思路N不断的右移,同时判断是否等于1codefunc binaryGap(N int) int { var d, max int if N&(N-1) == 0 { return 0 } for ; N > 0; N >>= 1 { //N不断的右移 if N&1 == 1 { //判断是否等于1 if max == 0 { ...
2019-04-26 23:08:11 145
原创 Golang Leetcode 714. Best Time to Buy and Sell Stock with Transaction Fee.go
思路两种状态之间的转换,购买的时候考虑费用即可codefunc maxProfit(prices []int, fee int) int { cash, hold := 0, -prices[0] for i := 1; i < len(prices); i++ { cash = max(cash, hold+prices[i]-fee) hold = max(hold, ...
2019-04-26 23:06:42 131
原创 Golang Leetcode 713. Subarray Product Less Than K.go
思路滑动窗口codefunc numSubarrayProductLessThanK(nums []int, k int) int { if k <= 1 { return 0 } count, left, one := 0, 0, 1 for right := 0; right < len(nums); right++ { one *= nums[right]...
2019-04-26 23:05:03 145
原创 某公司golang面试题
题目写出下面两个程序的输出结果:1.package mainimport "fmt"func main() { a := [3]int{1, 2, 3} for k, v := range a { if k == 0 { a[0], a[1] = 100, 200 fmt.Print(a) } a[k] = 100 + v } fmt.Print(a)}...
2019-04-24 10:31:05 3637 4
原创 Golang Leetcode 1022. Sum of Root To Leaf Binary Numbers.go
思路每次遍历的时候,之前的路径*2 + 当前的节点值当做路径表示的整数。codetype TreeNode struct { Val int Left *TreeNode Right *TreeNode}var ret intfunc sumRootToLeaf(root *TreeNode) int { ret = 0 helper(root, 0) retur...
2019-04-21 21:34:57 166
原创 Golang Leetcode1013. Partition Array Into Three Parts With Equal Sum.go
思路先求总和,再遍历求和,每当达到总和的1/3就重置codefunc canThreePartsEqualSum(A []int) bool { if len(A) < 3 { return false } total := 0 for _, v := range A { total += v } if total%3 != 0 { return false ...
2019-04-21 21:23:29 169
原创 Golang Leetcode 1005. Maximize Sum Of Array After K Negations.go
思路先循环k次,每次把最小值前加负号,然后遍历求和codefunc largestSumAfterKNegations(A []int, K int) int { sum := 0 for K > 0 { small := 0 for i := 0; i < len(A); i++ { if A[i] < A[small] { small = i...
2019-04-21 21:18:13 148
原创 Golang Leetcode 985. Sum of Even Numbers After Queries.go
思路先计算数组中所有偶数的和遍历操作如果之前是偶数,从和中减去执行加操作如果之后是偶数,再加到和里codefunc sumEvenAfterQueries(A []int, queries [][]int) []int { sum := 0 for _, v := range A { if v%2 == 0 { sum += v } } ret := []in...
2019-04-21 21:12:57 114
原创 Golang Leetcode 977. Squares of a Sorted Array.go
思路按照题意解决codefunc sortedSquares(A []int) []int { for k, v := range A { A[k] = v * v } sort.Ints(A) return A}更多内容请移步我的repo:https://github.com/anakin/golang-leetcode...
2019-04-21 21:12:01 152
原创 Golang Leetcode 965. Univalued Binary Tree.go
思路递归判断codetype TreeNode struct { Val int Left *TreeNode Right *TreeNode}func isUnivalTree(root *TreeNode) bool { if root == nil { return true } if root.Left != nil && root.Val...
2019-04-20 10:34:49 197
原创 Golang Leetcode 961. N-Repeated Element in Size 2N Array.go
思路按照题意解决codefunc repeatedNTimes(A []int) int { l := len(A) / 2 m := make(map[int]int) for _, v := range A { if num, ok := m[v]; ok { if num+1 == l { return v } else { m[v]++ }...
2019-04-20 10:33:47 152
原创 Golang Leetcode 956. Tallest Billboard.go
思路dp思路dp方程的键为两个柱子之间的高度差,值为当前高度差情况下,两个柱子的最小高度状态转移的时候有三种情况,其中后两种可以合并最后dp[0]保存的就是两个柱子高度差为0的时候,两个柱子的最小高度codefunc tallestBillboard(rods []int) int { sum := 0 for _, v := range rods { sum += v }...
2019-04-20 10:32:41 192
原创 Golang Leetcode 942. DI String Match.go
思路发现D的时候,就放最大的值进去,发现I的时候,就放最小的值进去codefunc diStringMatch(S string) []int { l := len(S) ret := make([]int, l+1) indexI, indexD := 0, len(S) for i := 0; i <= l; i++ { if i == l { ret[i] = ...
2019-04-20 10:31:46 325
原创 Golang Leetcode 941. Valid Mountain Array.go
思路遍历一遍,先判断左边是不是符合规则再判断右边注意,如果有相等的元素,那一定是在两个部分的中间codefunc validMountainArray(A []int) bool { if len(A) < 3 { return false } i := 0 l := len(A) for i+1 < l && A[i] < A[i+1] ...
2019-04-20 10:30:59 146
原创 Golang Leetcode 926. Flip String to Monotone Increasing.go
思路dp解法状态方程:如果最后一位是0:dp[i][0] = dp[i-1][0]dp[i][1] = min(dp[i-1][0], dp[i-1][1]) + 1如果最后一位是1:dp[i][0] = dp[i-1][0] + 1dp[i][1] = min(dp[i-1][0], dp[i-1][1])TODO 可以降维优化codefunc minFlipsMonoIn...
2019-04-20 10:29:53 121
原创 Golang Leetcode 922. Sort Array By Parity II.go
思路按照题意解决codefunc sortArrayByParityII(A []int) []int { if len(A) == 0 { return []int{} } ret := make([]int, len(A)) a, b := 0, 1 for _, v := range A { if v%2 == 0 { ret[a] = v a += 2...
2019-04-20 10:28:58 164
原创 Golang Leetcode 908. Smallest Range I.go
思路按照题意解决就okcodefunc smallestRangeI(A []int, K int) int { ret := mymax(A) - mymin(A) - 2*K if ret > 0 { return ret } return 0}func mymin(a []int) int { x := a[0] for _, v := range a {...
2019-04-20 10:27:37 149
原创 Golang Leetcode 905. Sort Array By Parity.go
思路采用快排分治的思想codefunc sortArrayByParity(A []int) []int { l, r := 0, len(A)-1 tmp := A[l] for l < r { for l < r && A[r]%2 == 1 { r-- } A[l] = A[r] for l < r && A...
2019-04-20 10:26:21 128
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人