14

ARTS 第14周

 4 years ago
source link: https://www.tuicool.com/articles/rUZBry3
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK