go

算法学习计划

萝らか妹 提交于 2020-10-25 06:02:06
学习计划 根据王红梅编著的《算法设计与分析》,读取每一章的内容,然后从乐扣上找对应的算法题,包含简单-中等-困难三种程度。尽量每两周能够完成一章。遇到一种类型的问题时,先自己想想解决方案,然后再看标准答案。 所有章节为: 蛮力法 分治法 减治法 动态规划法 贪心法 回溯法 分支限界法 概率算法 近似算法 代码用go实现,写到asap中,github仓库位置https://github.com/shidawuhen/asap。 这样的好处是即能够学习基础知识,又能够进行实践,加深记忆。 实现完一遍后,如果有兴趣,可以参加一下乐扣的比赛。 这里需要推荐一下《算法设计与分析》这本书。 其实算法的书我看过不少,以前也看过《算法导论》,《算法设计与分析》这本书在我看过的这些书里,算是比较顶级的存在,主要原因是鞭辟入里、入木三分,深入浅出的讲述了算法的内核,而且篇幅也不是《算法导论》那种鸿篇巨著。建议大家有时间可以读一下。 我使用 乐扣 上的算法题演练,最近在上面做了一些算法题,感觉专业度上其实和北大的PKU有一定差距,不过乐扣在用户体验上做的更好一些,而且更注重面试,PKU给我的感觉更注重专业程度。大家可以视自己的具体情况选择平台。当然选择哪个平台都是可以的,只要能好好写代码,对于普罗大众而言,都是够用的。 最后 大家如果喜欢我的文章,可以关注我的公众号(程序员麻辣烫) 往期文章回顾: 算法

使用Gitlba、Drone实现CI

淺唱寂寞╮ 提交于 2020-10-25 01:58:40
写在前面: 进入到云计算的PAAS时代,起源Google的Kubernetes无疑成为了PAAS云服务的落地平台。自2017年开始,K8s平台已经成为容器编排的事实标准,为组织设计和部署应用程序带来全新定义。在之后的几年里国有云,国外云厂商陆续在IAAS平台发布PASS层产品。 在此基础上出现了CICD,即持续集成与持续交付是软件开发和交付中的实践。项目从最初是瀑布模型,到敏捷开发,再到现在的DevOps。这是现代开发人员构建出色的产品的技术路线。随着DevOps的兴起,出现了持续集成(Continuous Integration)、持续交付(Continuous Delivery) 、持续部署(Continuous Deployment) 的新方法。 笔者基于自身需求做了如下测试,希望对同行有所助力,相关文章会持续更新。 一、测试前提条件 实验环境说明 测试主机:阿里云主机 操作系统:CentOS 7.7 测试主机配置:2C,8G 主机名 公网IP 内网IP ROLE PORT node1 39.104.88.120 172.16.0.93 gitlab 80 node2 39.104.93.96 172.16.0.94 drone,jenkins 80,8080 node3 39.104.70.51 172.16.0.98 harbor 80 所有节点安装docker 1)

golang 排序算法

吃可爱长大的小学妹 提交于 2020-10-25 00:07:04
package main import "fmt" // 从小到大 func Order(arr *[10]int) { // 每次排出一个最大的,排完所有需要 length - 1 次 for i := 0; i < len(arr)-1; i++ { // 从头开始两两比较,并将较大的排后 for j := 0; j < len(arr)-1; j++ { // 将较大的元素排后 if arr[j] > arr[j+1] { // 交换位置 arr[j], arr[j+1] = arr[j+1], arr[j] } } fmt.Println(i, arr) } } func main() { arr := [10]int{9, 3, 5, 1, 6, 0, 2, 7, 4, 8} Order(&arr) fmt.Println(arr) } /* 0 &[3 5 1 6 0 2 7 4 8 9] 1 &[3 1 5 0 2 6 4 7 8 9] 2 &[1 3 0 2 5 4 6 7 8 9] 3 &[1 0 2 3 4 5 6 7 8 9] 4 &[0 1 2 3 4 5 6 7 8 9] 5 &[0 1 2 3 4 5 6 7 8 9] 6 &[0 1 2 3 4 5 6 7 8 9] 7 &[0 1 2 3 4 5 6 7 8 9] 8 &[0 1 2 3 4 5 6

golang rpc demo

空扰寡人 提交于 2020-10-24 18:59:40
server.go package main import ( "log" "net" "net/http" "net/rpc" "net/rpc/jsonrpc" ) type Args struct { A int B int } type Number struct{} // 方法参数列表必须为此格式 func (num *Number) Sum(args *Args, sum *int) error { *sum = args.A + args.B return nil } func TcpServer() { ln, err := net.Listen("tcp", "127.0.0.1:9008") if err != nil { log.Fatalln("net.Listen error:", err) } log.Println("start connection") for { // 接收客户端连接请求 conn, err := ln.Accept() if err != nil { log.Println("ln.Accept error:", err) continue } // 处理客户端请求 go func(conn net.Conn) { log.Println("new client in coming") jsonrpc.ServeConn(conn