ARTS 第14周

陈卧虫 · · 544 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

ARTS 第14周分享

[TOC]

Algorithm

golang实现stack,很简单

[参考代码]

type Stack struct {
    stacks   []int
    maxCount int
    end      int
    front    int
}

type SS struct {
    Stack
    ends int
}

func NewStack(num int) *Stack {
    return &Stack{maxCount: num, end: -1, front: -1, stacks: make([]int, num)}
}

func (s *Stack) isFull() bool {
    return s.end == s.maxCount-1
}

func (s *Stack) isEmpty() bool {
    return s.end == s.front
}

func (s *Stack) push(num int) {
    if s.isFull() {
        fmt.Println("full stack")
        return
    }
    s.end++
    s.stacks[s.end] = num
}

func (s *Stack) pop() (num int, err error) {
    if s.isEmpty() {
        fmt.Println("empty stack")
        return
    }
    num = s.stacks[s.end]
    s.end--
    return
}

func (s *Stack) list() {
    if s.isEmpty() {
        fmt.Println("empty stack")
        return
    }
    for i:= s.end; i>=0; i-- {
        fmt.Println(s.stacks[s.end])
    }
}

Review

  • A List of Top Golang Frameworks, IDEs & Tools https://medium.com/@quintinglvr/golang-guide-a-list-of-top-golang-frameworks-ides-tools-e7c7866e96c9
  • 主要讲解如今比较流行的golang开发IDE, web框架,以及一些工具
  • golang框架
    • Revel:一个高效的go框架
    • Beego:成熟的 MVC框架,国人开发
    • Martini:一个轻量且强大的框架
    • Gin Gonic:使用类似Martini的API的web框架
    • Buffalo:全面发展的go web 框架,前后端皆支持
    • Goji:轻量级且 快速的web 框架,可组合性和 简单性是它的主要 优势
    • Tiger Tonic:灵感 来源于Dropwizard, 用于开发json web服务和构建高新能的REST风格的APIs。
    • Gocraft:轻量级框架,提供快速和可规模化的路由执行
  • Integrated Development Environment(IDE)
    • Gogland:JetBrains 发布的golang IDE
    • VScode:微软开发,可安装插件集成golang
    • LiteIDE
    • Wide:一个基于web的IDE
    • Atom with go-plus plugin:通过安装 go-plus进行开发
    • Eclipse with GoClipse:安装GoClipse插件开发go
    • Sublime Text with GoSublime
    • Vim with vim-go plugin
  • Tools for Golang
    • Apicompat:帮助开发者检测向后的、不兼容的更改和导出的声明
    • Checkstyle:灵感来源于Java Checkstyle, 用于输出代码风格建议,用户可自定义配置
    • Depth:帮助开发者检索和可视化go源代码的依赖树
    • Go-Swagger:强大的功能组件,实现了Swagger 2.0,能够序列化和反序列化swagger 参数
    • Go Meta Linter
    • Go-callvis:帮助你可视化程序的调用为Graphviz的点格式图形
    • Gonative
    • Grapes:旨在通过ssh轻松分发命令
    • Gosimple: 用于简化go源码
    • Go Vendor:用于go依赖管理

Tips

Git 分支 - 变基:https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA

  • 它的原理是首先找到这两个分支(即当前分支 experiment、变基操作的目标基底分支 master)的最近共同祖先 C2,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件,然后将当前分支指向目标基底 C3, 最后以此将之前另存为临时文件的修改依序应用。

    $ git checkout experiment
    $ git rebase master
    First, rewinding head to replay your work on top of it...
    Applying: added staged command
    
    

    单前分支为基底分支(即experiment分支),将master分支上的改变提取成临时文件,然后依次应用到experiment分支上。

  • 你就可以使用 git rebase 命令的 --onto 选项,选中在 client 分支里但不在 server 分支里的修改(即 C8 和 C9),将它们在 master 分支上重放:

$ git rebase --onto master server client
以上命令的意思是:“取出 client 分支,找出处于 client 分支和 server 分支的共同祖先之后的修改,然后把它们在 master 分支上重放一遍”。
  • 使用 git rebase [basebranch][topicbranch] 命令可以直接将特性分支(即本例中的 server)变基到目标分支(即 master)上。
$ git rebase master server

将 server 中的修改变基到 master 上 所示,server 中的代码被“续”到了 master 后面。

  • 不要对在你的仓库外有副本的分支执行变基。

  • git rebase -i 的各种命令

    # Commands:
    # p, pick = use commit
    # r, reword = use commit, but edit the commit message
    # e, edit = use commit, but stop for amending
    # s, squash = use commit, but meld into previous commit
    # f, fixup = like "squash", but discard this commit's log message
    # x, exec = run command (the rest of the line) using shell
    # d, drop = remove commit
    
    

share

Elasticsearch 的前世今生 https://mp.weixin.qq.com/s/c5l8dJvReXIblt-cbEv0YA

  • “Elasticsearch 以前叫 Elastic Search。顾名思义,就是“弹性的搜索”。
  • 它一开始是围绕着搜索功能,打造了一个分布式搜索引擎,
    底层是基于开源的搜索引擎库 Lucene,是由 Java 语言编写的,项目大概是 2010 年 2 月份在 Github 正式落户的。
  • Lucene 是一个非常古老的搜索引擎工具包,也是用 Java 编写,主要用来构建倒排索引(一种数据结构)和对这些索引进行检索,从而实现全文检索功能。
  • Lucene 很强大,使用起来也非常灵活,缺点是它仅仅是一个基础类库,也没有考虑到高并发和分布式的场景。
  • 班农在 Lucene 之上,封装了一个叫作 Compass 的程序框架,这样做的好处是,可以很方便地实现对‘领域对象’进行索引的创建,并实现‘字段级别’的检索,以及实现‘全文搜索’功能。
  • 在 Compass 编写到 2.x 版本的时候,社区里面出现了更多需求,比如需要有处理更多数据的能力以及分布式的设计。班农发现只有重写 Compass ,才能更好地实现这些分布式搜索的需求,于是 Compass 3.0 就没有了,取而代之的是一个全新的项目,也就是 Elasticsearch。”
  • Elasticsearch 作为一个独立的搜索服务器,提供了非常方便的搜索功能。用户完全不用关心底层 Lucene 的细节,Elasticsearch 简直就是一个 Compass 的 RESTful 实现啊!同时,Elasticsearch 基于分片和副本的方式实现了一个分布式的 Lucene Directory,再结合Map-reduce 的理念,实现了一个简单的搜索请求分发合并的策略,能轻松化解海量索引和分布式高可用的问题。
  • Elasticsearch 就有了一个大概的认识,可以用它做搜索,也可以用它做日志。
  • Logstash 是一个开源的日志处理工具,用 JRuby 写的,主要特点是基于灵活的 Pipeline 管道架构来处理数据。可以理解为将数据放进一个管道内进行处理,并且就跟真正的自来水管一样,管道由一截一截管子组成,每一个小管代表着一个数据处理的流程,每一个流程只做一件事情,然后可以根据数据的处理需要,选择多个不同类型的管子灵活组装。
  • Logstash 搭配 Elasticsearch 变得很受欢迎。
  • ELK 横空出世(Elasticsearch、Logstash 和 Kibana 这三个产品的首字母缩写),风靡了整个运维界。
  • Elasticsearch、Logstash、Kibana、Beats ,这几个放在一起,就叫作 Elastic Stack。

本周阅读

第一周:5,7 
函数式编程的核心思想:  https://www.liaoxuefeng.com/article/1260118907809920

Elasticsearch 的前世今生  https://mp.weixin.qq.com/s/c5l8dJvReXIblt-cbEv0YA
深入浅出Golang的协程池设计  https://mp.weixin.qq.com/s/zfAmCpX7nS7SkF-isHNt8w
对数公式:https://baike.baidu.com/item/%E5%AF%B9%E6%95%B0%E5%85%AC%E5%BC%8F
TCP 连接可以发多少个 HTTP 请求?https://mp.weixin.qq.com/s/CqQSj8i1zBdMAalJsUsqhg


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:陈卧虫

查看原文:ARTS 第14周

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

544 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传