高薪招聘 - 高级Golang后端工程师

高薪招聘 - 高级Golang后端工程师 招聘💥 - 高级后端工程师(Go) 全职 - 远程

该职位的主要职责是设计、实施和运营 Syndica 的区块链基础设施平台。必须具备 Go 语言知识!团队秉承“编写即运行”的理念,每位工程师都需负责部署和运行自己编写的代码。

职责 🚀

  • 设计、创建和配置基础设施
  • 编写优雅、可维护的 Go 代码 - 地道的 Go 风格!
  • 创建模块化且可扩展的微服务以支持平台
  • 构建可靠、容错的服务
  • 识别并排查从硬件、操作系统环境、网络到应用等多个部署层面的可用性和性能问题
  • 评估性能趋势和预期,制定适当的可扩展性计划
  • 排查并解决客户平台问题
  • 确保在执行运维任务时满足服务等级协议

任职要求 🚀

  • 拥有 3 年以上使用 Go 语言的相关专业经验。
  • 有使用 Prometheus/Grafana 进行指标聚合/可视化的经验者优先。
  • 有自动化工具/平台使用经验。
  • 有告警和监控工具使用经验者优先。
  • 有在高度分布式的公司工作经验者优先。
  • 能够将部分工作时间与美国中部时区(UTC -6)的营业时间保持一致。
  • 系统化的问题解决方法,同时具备强烈的责任心和驱动力。
  • 对网络和网络协议及标准(HTTP, TLS, DNS 等)有一定的工作知识。
  • 有编写自动化工具的经验,并热衷于“将所有事情自动化”。
  • 拥有计算机科学或相关领域的学士学位,或具备同等相关经验。

如果您想了解更多关于该职位的信息,请随时给我发送消息。

谢谢!


更多关于高薪招聘 - 高级Golang后端工程师的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

你好 @nathaly_estevez_llub 我已经给你发了私信,请查收。 谢谢

更多关于高薪招聘 - 高级Golang后端工程师的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你好, 希望你一切顺利!

我可以帮助你满足你的需求。

请通过 Skype live:lauren_8606 或电子邮件 lauren(at)cisinlabs(dot)com 联系我,以便我们可以进一步详细讨论此事。

谢谢, Lauren W.

根据招聘要求,这是一个对Go语言专业能力要求较高的高级后端职位,主要聚焦于区块链基础设施的构建与运维。以下从技术角度分析该职位所需的核心Go技能及相关示例:

1. 地道的Go代码风格与微服务架构 职位强调“地道的Go风格”,这通常指符合Go社区惯例的代码组织、错误处理、并发模型等。例如在微服务中正确使用接口、context和标准库:

// 示例:符合Go惯例的HTTP服务与错误处理
package main

import (
    "context"
    "errors"
    "net/http"
    "time"
)

type Service struct {
    repo Repository
}

// 使用结构体方法而非全局函数
func (s *Service) GetBlock(ctx context.Context, id string) (*Block, error) {
    if id == "" {
        // 返回明确的错误类型
        return nil, errors.New("invalid block id")
    }
    
    // 传递context以实现超时控制
    block, err := s.repo.FindByID(ctx, id)
    if err != nil {
        return nil, fmt.Errorf("find block failed: %w", err) // 错误包装
    }
    
    return block, nil
}

// 符合Go习惯的HTTP处理器
func (s *Service) handleGetBlock(w http.ResponseWriter, r *http.Request) {
    ctx, cancel := context.WithTimeout(r.Context(), 3*time.Second)
    defer cancel()
    
    id := r.URL.Query().Get("id")
    block, err := s.GetBlock(ctx, id)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(block)
}

2. 可靠容错服务的实现模式 区块链基础设施需要高可用性,以下展示使用goroutine和channel实现容错处理的常见模式:

// 示例:带健康检查的容错服务
type HealthChecker struct {
    checks []func() error
    status chan bool
}

func (h *HealthChecker) Run(ctx context.Context) {
    ticker := time.NewTicker(30 * time.Second)
    defer ticker.Stop()
    
    for {
        select {
        case <-ctx.Done():
            return
        case <-ticker.C:
            healthy := true
            for _, check := range h.checks {
                if err := check(); err != nil {
                    log.Printf("health check failed: %v", err)
                    healthy = false
                    // 触发告警逻辑
                    go h.triggerAlert(err)
                }
            }
            h.status <- healthy
        }
    }
}

// 使用select实现带超时的重试机制
func callWithRetry(ctx context.Context, fn func() error, maxRetries int) error {
    for i := 0; i < maxRetries; i++ {
        err := fn()
        if err == nil {
            return nil
        }
        
        select {
        case <-ctx.Done():
            return ctx.Err()
        case <-time.After(time.Duration(i) * time.Second): // 指数退避
            continue
        }
    }
    return errors.New("max retries exceeded")
}

3. 监控与指标集成 Prometheus集成是明确要求,以下展示如何在Go服务中暴露指标:

// 示例:Prometheus指标收集
import (
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

var (
    requestCounter = prometheus.NewCounterVec(
        prometheus.CounterOpts{
            Name: "api_requests_total",
            Help: "Total API requests",
        },
        []string{"endpoint", "status"},
    )
    
    requestDuration = prometheus.NewHistogramVec(
        prometheus.HistogramOpts{
            Name: "api_request_duration_seconds",
            Help: "Request duration in seconds",
            Buckets: prometheus.DefBuckets,
        },
        []string{"endpoint"},
    )
)

func init() {
    prometheus.MustRegister(requestCounter)
    prometheus.MustRegister(requestDuration)
}

// 在HTTP处理器中记录指标
func instrumentedHandler(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        start := time.Now()
        recorder := &responseRecorder{w, 200}
        
        next(recorder, r)
        
        duration := time.Since(start).Seconds()
        requestDuration.WithLabelValues(r.URL.Path).Observe(duration)
        requestCounter.WithLabelValues(r.URL.Path, fmt.Sprint(recorder.status)).Inc()
    }
}

// 单独暴露指标端点
http.Handle("/metrics", promhttp.Handler())

4. 基础设施自动化示例 职位要求“将所有事情自动化”,以下展示基础设施配置的Go实现:

// 示例:使用Go自动化基础设施配置
type NodeConfig struct {
    ID        string
    Role      string
    Endpoints []string
}

type ConfigManager struct {
    configs map[string]NodeConfig
    mu      sync.RWMutex
}

func (m *ConfigManager) ApplyConfig(ctx context.Context, cfg NodeConfig) error {
    // 验证配置
    if err := validateConfig(cfg); err != nil {
        return fmt.Errorf("invalid config: %w", err)
    }
    
    m.mu.Lock()
    defer m.mu.Unlock()
    
    // 应用配置变更
    old, exists := m.configs[cfg.ID]
    m.configs[cfg.ID] = cfg
    
    // 触发配置更新
    if exists && !configsEqual(old, cfg) {
        go m.notifyConfigChange(ctx, old, cfg)
    }
    
    return nil
}

// 使用模板生成配置文件
func generateConfigTemplate(cfg NodeConfig) (string, error) {
    tmpl := `node_id: {{.ID}}
role: {{.Role}}
endpoints:
{{- range .Endpoints}}
  - {{.}}
{{- end}}`
    
    t, err := template.New("config").Parse(tmpl)
    if err != nil {
        return "", err
    }
    
    var buf bytes.Buffer
    if err := t.Execute(&buf, cfg); err != nil {
        return "", err
    }
    
    return buf.String(), nil
}

该职位需要候选人深入理解Go的并发模型、错误处理哲学和性能优化,同时具备将运维需求转化为可靠Go代码的能力。区块链基础设施的特殊性还要求对网络协议、分布式系统有扎实理解,上述代码示例展示了部分关键技术点的实现方式。

回到顶部