WIN Reality招聘全栈工程师(Golang开发方向 - 奥斯汀)

WIN Reality招聘全栈工程师(Golang开发方向 - 奥斯汀) WIN Reality 的产品工程团队现有一个令人兴奋的全职机会!

WIN Reality 工程团队致力于为 WIN Reality 客户开发、交付和维护核心在线服务及 Web 应用程序。工程团队构建面向客户的动态 Web 应用程序、内部数据工具,以及跨产品和服务使用的核心网络 API。

WIN Reality 开发技术栈:

Web 前端:Vue.js,Bulma CSS 和 Buefy UI 组件,使用 skypack 的 ES 模块

Web 应用服务器:使用 Go 构建,采用 Go 模板

Web API:使用 Go 构建,采用 HTTP RESTful 设计,返回 JSON 响应

数据库:MariaDB(由 AWS RDS 托管),Redis(由 AWS ElastiCache 托管),Redshift

监控:Cloudwatch

基础设施:AWS(基于 ECS + ECR 的部署),SQS,SNS

开发与交付:Gitlab,git 仓库,问题追踪,使用 CodeBuild + CodePipeline 实现 CI/CD

必备技能:

  • 拥有 3 年以上专业经验,从事从用户界面到数据库的全栈 Web 应用程序开发。
  • 至少熟练掌握一种服务器端编程语言,并能提供证明。

优先技能:

  • 在生产服务器应用程序中使用过 Go
  • 云基础设施 DevOps
  • 对 HTTP API 开发和设计有扎实的理解
  • 有前端 Web 应用程序框架经验
  • 有 Web 开发和设计经验
  • 有容器化工作负载经验
  • 有使用关系型数据库的经验

我们期望的品质:

  • 能够在正确性和实用性之间取得平衡。
  • 具备自我导向工作的能力
  • 能够考虑产品需求,并预见客户需求和用户体验。
  • 对构建软件系统的技艺充满热情。
  • 理解通过口头和代码性能进行清晰沟通的重要性

此职位当前的重点工作:

  • 构建功能和流水线,通过我们的在线仪表盘向客户提供性能洞察。
  • 改进新用户体验,让他们能尽可能快速、轻松地进入 VR 并开始技能训练。
  • 创建能对产品价值产生超比例影响的功能。
  • 开发工具以帮助我们的团队应对不断增长的用户群。
  • 通过系统监控、报告和通用的故障恢复能力,确保我们的基础设施持续可靠运行并优雅演进。
  • 启用新的数据分析系统,并向客户提供准确的实时指标。
  • 通过审查合并请求、增加测试覆盖率、修订文档和简化开发流水线,帮助提高代码质量。

WIN Reality 提供:

  • 有竞争力的基本工资、福利(健康/牙科/视力)、丰厚的带薪休假、带薪假期,以及俯瞰奥斯汀湖并配有现场健身中心的优美办公空间。
  • WIN Reality 致力于营造一个有趣且充满活力的文化氛围,力求做到最好。

如有兴趣,请直接与我联系 matt.winters@winreality.com

Matt Winters 人才主管

Win Reality Win Reality

WR-Logo-screen-1

Win Reality | Virtual Reality Baseball & Softball Training

WIN Reality 是排名第一的虚拟现实棒球和垒球训练项目。真实的投球,真实的反馈,真实的效果。亲自体验 WIN Reality。


更多关于WIN Reality招聘全栈工程师(Golang开发方向 - 奥斯汀)的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

你好 @matt.winreality

我已经给你发送了一封包含详细信息的邮件 请查收

此致, Olivia

更多关于WIN Reality招聘全栈工程师(Golang开发方向 - 奥斯汀)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你好,

我很乐意为你提供帮助。

如需进一步详细讨论,请通过邮件 garry@cisinlabs.com 或 Skype: cis.garry 联系我。

期待你的回复。

谢谢。

从技术栈来看,这是一个典型的Go全栈岗位,结合了Vue.js前端和Go后端。以下是一些Go相关的技术实现示例,符合该职位描述中的API开发和服务器构建要求:

1. RESTful API示例(使用标准库)

package main

import (
    "encoding/json"
    "net/http"
    "github.com/go-chi/chi/v5"
)

type PerformanceMetrics struct {
    UserID    string  `json:"user_id"`
    BattingAvg float64 `json:"batting_average"`
    ExitVelocity float64 `json:"exit_velocity"`
}

func main() {
    r := chi.NewRouter()
    
    // 对应职位描述中的"向客户提供性能洞察"
    r.Get("/api/users/{id}/metrics", func(w http.ResponseWriter, r *http.Request) {
        userID := chi.URLParam(r, "id")
        
        metrics := PerformanceMetrics{
            UserID:        userID,
            BattingAvg:    0.327,
            ExitVelocity:  92.4,
        }
        
        w.Header().Set("Content-Type", "application/json")
        json.NewEncoder(w).Encode(metrics)
    })
    
    // 对应"改进新用户体验"的数据端点
    r.Post("/api/onboarding", func(w http.ResponseWriter, r *http.Request) {
        var onboardingData map[string]interface{}
        json.NewDecoder(r.Body).Decode(&onboardingData)
        
        // 处理用户引导数据
        w.WriteHeader(http.StatusCreated)
        json.NewEncoder(w).Encode(map[string]string{
            "status": "onboarding_complete",
            "next_step": "vr_training",
        })
    })
    
    http.ListenAndServe(":8080", r)
}

2. Go模板服务器示例(对应Web应用服务器)

package main

import (
    "html/template"
    "net/http"
    "github.com/go-chi/chi/v5"
)

func main() {
    r := chi.NewRouter()
    
    // 使用Go模板渲染仪表盘页面
    r.Get("/dashboard", func(w http.ResponseWriter, r *http.Request) {
        tmpl := template.Must(template.ParseFiles(
            "templates/layout.html",
            "templates/dashboard.html",
        ))
        
        data := struct {
            Title      string
            UserName   string
            Metrics    []PerformanceMetric
        }{
            Title:    "Performance Dashboard",
            UserName: "Player123",
            Metrics:  getPerformanceData(),
        }
        
        tmpl.ExecuteTemplate(w, "layout", data)
    })
    
    http.ListenAndServe(":8080", r)
}

type PerformanceMetric struct {
    Date     string
    Value    float64
    Category string
}

3. 数据库操作示例(MariaDB)

package main

import (
    "database/sql"
    "log"
    _ "github.com/go-sql-driver/mysql"
)

type UserSession struct {
    ID        string
    Duration  int
    Timestamp string
}

func saveTrainingSession(db *sql.DB, session UserSession) error {
    // 对应"启用新的数据分析系统"需求
    query := `
        INSERT INTO training_sessions 
        (user_id, duration_seconds, session_timestamp) 
        VALUES (?, ?, ?)
    `
    
    _, err := db.Exec(query, 
        session.ID, 
        session.Duration, 
        session.Timestamp,
    )
    
    return err
}

func getRealTimeMetrics(db *sql.DB, userID string) (map[string]interface{}, error) {
    // 对应"提供准确的实时指标"
    query := `
        SELECT 
            AVG(exit_velocity) as avg_velocity,
            COUNT(*) as total_sessions,
            MAX(session_timestamp) as last_training
        FROM training_sessions 
        WHERE user_id = ? 
        AND session_timestamp > DATE_SUB(NOW(), INTERVAL 7 DAY)
    `
    
    var metrics struct {
        AvgVelocity   float64
        TotalSessions int
        LastTraining  string
    }
    
    err := db.QueryRow(query, userID).Scan(
        &metrics.AvgVelocity,
        &metrics.TotalSessions,
        &metrics.LastTraining,
    )
    
    result := map[string]interface{}{
        "weekly_avg_velocity": metrics.AvgVelocity,
        "weekly_sessions":     metrics.TotalSessions,
        "last_training":       metrics.LastTraining,
    }
    
    return result, err
}

4. 监控和健康检查端点

package main

import (
    "net/http"
    "time"
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

var (
    requestsTotal = prometheus.NewCounterVec(
        prometheus.CounterOpts{
            Name: "http_requests_total",
            Help: "Total HTTP requests",
        },
        []string{"path", "method"},
    )
    
    requestDuration = prometheus.NewHistogramVec(
        prometheus.HistogramOpts{
            Name: "http_request_duration_seconds",
            Help: "HTTP request duration",
        },
        []string{"path"},
    )
)

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

func monitoringMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        start := time.Now()
        
        // 记录请求指标
        requestsTotal.WithLabelValues(r.URL.Path, r.Method).Inc()
        
        next.ServeHTTP(w, r)
        
        duration := time.Since(start).Seconds()
        requestDuration.WithLabelValues(r.URL.Path).Observe(duration)
    })
}

func main() {
    r := chi.NewRouter()
    r.Use(monitoringMiddleware)
    
    // CloudWatch/Prometheus指标端点
    r.Handle("/metrics", promhttp.Handler())
    
    // 健康检查端点(对应基础设施监控)
    r.Get("/health", func(w http.ResponseWriter, r *http.Request) {
        // 检查数据库连接、Redis连接等
        healthStatus := map[string]interface{}{
            "status":    "healthy",
            "timestamp": time.Now().UTC(),
            "services": map[string]string{
                "database": "connected",
                "redis":    "connected",
                "api":      "operational",
            },
        }
        
        json.NewEncoder(w).Encode(healthStatus)
    })
    
    http.ListenAndServe(":8080", r)
}

这些示例展示了如何实现职位描述中提到的核心功能:性能指标API、用户仪表盘、实时数据系统、监控和健康检查。技术栈选择上使用了chi路由(轻量级且符合Go习惯)、标准库模板、MariaDB驱动和Prometheus监控,这些都与AWS ECS容器化部署和RESTful API设计需求相匹配。

回到顶部