高级平台工程师(Golang)远程职位 - Buzzer招聘

高级平台工程师(Golang)远程职位 - Buzzer招聘 职位概述 Buzzer Media, Inc. 正在寻找一位经验丰富的高级平台工程师加入Buzzer团队,该职位要求具备广泛的云基础设施和后台工程经验。这是工程团队中的一个关键角色,旨在构建一个可扩展且精准的解决方案,为客户提供关于即将到来的、有趣的体育直播精彩片段的个性化通知。随着我们与各大体育联盟和数据提供商合作,每个合作伙伴都有其独特的规范和要求,该角色对于构建我们的后端系统至关重要。

高级平台工程师直接与由产品经理、用户体验设计师和工程师组成的工程与产品团队合作,并可能与更广泛的运营和合作伙伴团队协作。

在此职位中,您将:

  • 指导与培养: 作为技术能力领导者,负责在架构设计、编程语言以及其他专业发展领域指导和培养工程师,以促进工程组织的成长和水平提升。
  • 平台工程: 直接参与后端微服务的实现、开发以及相关数据存储的管理。您将在协作、敏捷的环境中与其他工程团队紧密合作,识别并满足他们的需求。
  • 云架构: 构建高度可扩展的服务以支持基于Web的应用程序和客户端设备。您将创建安全的、多租户的服务,包括数据库和中间件。
  • 持续集成与部署: 创建和维护持续集成与部署流程,确保整个CI/CD管道按预期工作。

必备条件

  • 在云端(理想情况下是AWS内)开发和管理可扩展基础设施及应用程序的经验
  • 微服务开发经验
  • Terraform(或其他IaaC工具,如CloudFormation)使用经验
  • Golang(或其他强类型语言,如Java、C、C++)使用经验
  • 关系型SQL和NoSQL数据库(如MySQL、PostgreSQL、DynamoDB、Redis)使用经验
  • 熟悉测试驱动和行为驱动开发(TDD/BDD)
  • Unix/Linux系统的工作知识
  • 源代码控制系统(包括Git)的工作知识

优先条件

  • 在采用两周冲刺周期的敏捷环境中工作的经验
  • 数据分析和数据科学相关工作经验
  • 构建机器学习流水线的经验,特别是推荐引擎相关
  • 构建数据湖和数据管道的经验
  • 图数据库(如Amazon Neptune)使用经验
  • 体育媒体应用和/或设计相关经验
  • 处理非结构化数据集的强大分析能力
  • 计算机科学学士学位或同等经验

关于Buzzer Buzzer是一个移动优先、通知驱动的体育直播平台,根据粉丝的兴趣和偏好进行个性化定制。我们让粉丝能够在移动设备上即时地从一场联赛切换到另一场,从一场比赛切换到另一场。我们的技术由微支付、推送通知以及对现有付费电视/OTT订阅的认证提供支持,使我们能够提供反映每位粉丝真实兴趣的实时内容,并消除传统直播观看的障碍。

我们的使命是简化这些直播时刻的发现和消费过程。我们颂扬由体育热情驱动的粉丝社区。公司成立于一个体育中心,我们不断壮大的远程团队尊重传统,同时重视创新。我们相信,作为体育生态系统的领先整合者,我们可以通过有意义的接触点并跨越世代来促进团结。

关于Strive:Buzzer对社会影响的承诺 Strive是一项有意且具有影响力的倡议,将利用Buzzer的统一平台,投资于为黑人、原住民和有色人种创造公平的结果。Buzzer致力于通过公司的使命、价值观、产品和金融工具来创造公平的竞争环境,从而为有色人种社区创造更多机会。Strive将作为Buzzer推动社会积极变革和成果的载体。

我们的1x1x1影响模型旨在通过三种策略投资于这些社区:

  • 股权: 公司1%的股权将受到保护并分配用于"创造公平竞争环境"。这笔基金将确保Strive得到优先考虑,并以与我们增长相同的速度扩展。再投资将支持Strive的使命、合作伙伴和事业。随着我们在该领域投资的增长,公司也在成长。
  • 净利润: 1%的净利润将再投资于专注于增强和赋权黑人社区及有色人种社区的合作非营利组织。这一近期解决方案旨在与那些为我们未来的领导者和客户提供资源和支持的有影响力的组织合作并做出贡献。
  • 消费者捐赠: 用户购买金额的1%可以通过允许用户将其0.99美元的微支付凑整为1.00美元的方式,捐赠给参与的非营利组织。此产品功能的目的是突出消费者参与和了解那些投资于有色人种社区的组织的机会。

Buzzer自豪地宣布,我们的第一个产品是Strive导师计划,这是一个全球性的导师计划,连接了500多名行业专业人士与500多名主要来自传统黑人学院和大学(HBCUs)及其他大学的黑人大学生。这个导师计划最终启发了Strive倡议,并代表了我们通过为潜在客户、合作伙伴和员工做正确的事情来引领行业的雄心。

请在此申请:https://angel.co/company/buzzer-inc/jobs/1099020-senior-platform-engineer


更多关于高级平台工程师(Golang)远程职位 - Buzzer招聘的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

已发送私信。 请查收。

此致, Henry

更多关于高级平台工程师(Golang)远程职位 - Buzzer招聘的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这是一个非常典型的Go高级平台工程师职位描述,结合了云原生、微服务和体育科技的特点。从技术栈来看,这个职位需要深厚的Golang后端开发能力和云基础设施经验。

以下是几个关键点的技术实现示例:

1. 微服务架构示例(Golang + Gin)

package main

import (
    "github.com/gin-gonic/gin"
    "gorm.io/gorm"
)

type NotificationService struct {
    db *gorm.DB
    // 其他依赖如消息队列客户端等
}

func (s *NotificationService) GetLiveEvents(c *gin.Context) {
    var events []LiveEvent
    if err := s.db.Where("start_time > ?", time.Now()).
        Order("priority DESC").
        Find(&events).Error; err != nil {
        c.JSON(500, gin.H{"error": err.Error()})
        return
    }
    c.JSON(200, events)
}

func (s *NotificationService) SendPersonalizedNotification(c *gin.Context) {
    var req NotificationRequest
    if err := c.ShouldBindJSON(&req); err != nil {
        c.JSON(400, gin.H{"error": err.Error()})
        return
    }
    
    // 个性化推荐逻辑
    preferences := s.getUserPreferences(req.UserID)
    relevantEvents := s.filterEventsByPreferences(preferences)
    
    // 异步发送通知
    go s.sendToPushService(relevantEvents)
    
    c.JSON(202, gin.H{"status": "processing"})
}

2. Terraform基础设施即代码示例

# main.tf
provider "aws" {
  region = "us-east-1"
}

module "ecs_cluster" {
  source  = "terraform-aws-modules/ecs/aws"
  version = "~> 4.0"
  
  cluster_name = "buzzer-notification-service"
  
  fargate_capacity_providers = {
    FARGATE = {
      default_capacity_provider_strategy = {
        weight = 100
      }
    }
  }
}

resource "aws_dynamodb_table" "user_preferences" {
  name           = "user-preferences"
  billing_mode   = "PAY_PER_REQUEST"
  hash_key       = "user_id"
  
  attribute {
    name = "user_id"
    type = "S"
  }
  
  ttl {
    attribute_name = "expires_at"
    enabled        = true
  }
}

3. 持续集成流水线示例(GitHub Actions)

# .github/workflows/ci-cd.yml
name: CI/CD Pipeline

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    
    - name: Set up Go
      uses: actions/setup-go@v4
      with:
        go-version: '1.21'
    
    - name: Run tests
      run: |
        go test -v ./... -coverprofile=coverage.out
        go tool cover -func=coverage.out
    
    - name: Build
      run: go build -o notification-service ./cmd/server

  deploy:
    needs: test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
    - uses: actions/checkout@v3
    
    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v2
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: us-east-1
    
    - name: Deploy to ECS
      run: |
        aws ecs update-service \
          --cluster buzzer-cluster \
          --service notification-service \
          --force-new-deployment

4. 推荐引擎数据管道示例

package recommendation

import (
    "context"
    "encoding/json"
    "github.com/aws/aws-sdk-go-v2/service/s3"
)

type RecommendationEngine struct {
    s3Client *s3.Client
    // ML模型客户端等
}

func (e *RecommendationEngine) ProcessUserBehavior(ctx context.Context, userID string, event Event) error {
    // 收集用户行为数据
    behaviorData := UserBehavior{
        UserID:    userID,
        EventType: event.Type,
        Timestamp: time.Now(),
        Metadata:  event.Metadata,
    }
    
    // 存储到数据湖(S3)
    data, _ := json.Marshal(behaviorData)
    _, err := e.s3Client.PutObject(ctx, &s3.PutObjectInput{
        Bucket: aws.String("buzzer-data-lake"),
        Key:    aws.String(fmt.Sprintf("user-behavior/%s/%d.json", userID, time.Now().Unix())),
        Body:   bytes.NewReader(data),
    })
    
    // 触发实时推荐计算
    go e.updateRecommendations(userID)
    
    return err
}

func (e *RecommendationEngine) updateRecommendations(userID string) {
    // 调用ML服务获取个性化推荐
    recommendations := e.mlClient.GetRecommendations(userID)
    
    // 更新Redis缓存
    e.redisClient.Set(
        context.Background(),
        fmt.Sprintf("recs:%s", userID),
        recommendations,
        10*time.Minute,
    )
}

这个职位要求的技术栈非常现代化,涵盖了从Go微服务开发到云基础设施的完整技术链。对于有经验的Go工程师来说,这是一个很好的机会,可以参与构建一个具有社会影响力的体育科技平台。

回到顶部