Golang软件工程师职位分享 - Risk Ledger(伦敦)工作体验

Golang软件工程师职位分享 - Risk Ledger(伦敦)工作体验 Risk Ledger正在招聘软件工程师加入我们的核心团队,共同开发并塑造能够提升全球供应链安全成熟度的平台。这是一个运用最新技术解决日益重要问题的绝佳机会,您将在产品生命周期早期阶段产生巨大影响。

我们期待组建一支来自多元背景、拥有多样化技能的优秀团队,帮助我们成长并打造一家真正特殊的公司。该职位主要专注于后端开发,但同时也有机会参与全栈工作。在当前阶段,我们需要全员协作,因此您需要准备好并愿意深入前端领域,发布新功能,并参与产品开发过程,在实践中不断改进和学习。

您将负责的工作

  • 构建系统后端,主要使用Go语言。如果您学习能力强且渴望在生产环境中使用Go语言,我们非常期待与您交流;
  • 通过编写自动化测试和参与同行代码评审,确保您和团队的代码能够持续无缺陷地部署到生产环境;
  • 在必要时协助将后端功能展示到前端界面。我们的用户界面使用Vue.js框架,基于HTML、CSS和JavaScript构建,因此您需要愿意学习相关知识以理解整体架构,并乐于在适当时机进行优化改进;
  • 与公司客户成功团队紧密合作,确保我们始终专注于构建符合客户需求、能简化他们工作的功能,而不仅仅是为了方便我们自己。

成功标准

  • 打造外观出色、功能满足客户需求的产品
  • 建设一支不断成长、合作愉快、相互了解优势并能高效完成任务的工程团队
  • 建立快速增长的客户群,他们迫切使用我们的产品,这促使我们在基础设施和扩展性方面保持领先

加入我们的理由

🚀 在年轻成长的初创公司参与开发令人兴奋的网络安全产品

👌 提供充分的自主权和灵活性,让您以自己认为合适的方式完成工作

📚 提供所有您个人发展所需的学习资源和书籍

💻 配备完成工作所需的设备

📈 丰厚的EMI股票期权

🏖️ 每年32天带薪假期 - 放松身心,享受生活

✈️ 每年最多30天无薪休假,随心使用

🏥 私人医疗保险

🎉 定期举办社交活动,放松娱乐

关于Risk Ledger 我们是一家总部位于伦敦的初创企业,致力于改进组织在全球供应链中处理网络安全和信息管理的方式。当前超过60%的数据泄露事件通过供应链发生,Risk Ledger为组织提供了提升安全成熟度所需的工具和知识。我们的平台改变了公司识别、衡量和缓解自身及其供应商安全风险的方式,使他们能够真正理解自身的安全态势。

Risk Ledger获得多家知名风险投资机构支持,包括Firstminute Capital、Seedcamp、Village Global和Episode1。目前我们团队规模较小但计划快速扩张,这是在一个有趣、快节奏的早期初创公司留下个人印记的绝佳机会。

我们目前位于Old Street环岛旁的白领工厂区。

请将个人介绍和简历发送至jobs@riskledger.com


更多关于Golang软件工程师职位分享 - Risk Ledger(伦敦)工作体验的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang软件工程师职位分享 - Risk Ledger(伦敦)工作体验的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


作为使用Go语言开发后端系统的工程师,在Risk Ledger这样的网络安全初创公司工作确实是个很好的机会。以下是我对职位技术要求的分析:

Go语言后端开发 在供应链安全平台中,Go的并发特性和高性能非常适合处理大量安全数据。例如:

package main

import (
    "context"
    "encoding/json"
    "log"
    "net/http"
    "time"
    
    "github.com/gorilla/mux"
)

type SecurityAssessment struct {
    ID        string    `json:"id"`
    VendorID  string    `json:"vendor_id"`
    Score     int       `json:"security_score"`
    Timestamp time.Time `json:"timestamp"`
}

type AssessmentHandler struct {
    storage Storage
}

func (h *AssessmentHandler) CreateAssessment(w http.ResponseWriter, r *http.Request) {
    var assessment SecurityAssessment
    if err := json.NewDecoder(r.Body).Decode(&assessment); err != nil {
        http.Error(w, "Invalid input", http.StatusBadRequest)
        return
    }
    
    assessment.Timestamp = time.Now()
    if err := h.storage.Save(r.Context(), &assessment); err != nil {
        http.Error(w, "Storage error", http.StatusInternalServerError)
        return
    }
    
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(assessment)
}

func main() {
    router := mux.NewRouter()
    handler := &AssessmentHandler{storage: NewMemoryStorage()}
    
    router.HandleFunc("/assessments", handler.CreateAssessment).Methods("POST")
    
    log.Println("Server starting on :8080")
    log.Fatal(http.ListenAndServe(":8080", router))
}

自动化测试实践 在安全关键系统中,测试至关重要:

func TestSecurityAssessment(t *testing.T) {
    handler := &AssessmentHandler{storage: NewMockStorage()}
    
    assessment := SecurityAssessment{
        VendorID: "vendor-123",
        Score:    85,
    }
    
    reqBody, _ := json.Marshal(assessment)
    req, _ := http.NewRequest("POST", "/assessments", bytes.NewBuffer(reqBody))
    rr := httptest.NewRecorder()
    
    handler.CreateAssessment(rr, req)
    
    if status := rr.Code; status != http.StatusOK {
        t.Errorf("Expected status 200, got %d", status)
    }
    
    var response SecurityAssessment
    json.Unmarshal(rr.Body.Bytes(), &response)
    
    if response.VendorID != assessment.VendorID {
        t.Errorf("Vendor ID mismatch")
    }
}

全栈协作模式 虽然主要使用Go,但与Vue.js前端的集成也很重要:

// API端点提供前端所需数据
func (h *AssessmentHandler) GetVendorAssessments(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    vendorID := vars["vendorId"]
    
    assessments, err := h.storage.GetByVendor(r.Context(), vendorID)
    if err != nil {
        http.Error(w, "Not found", http.StatusNotFound)
        return
    }
    
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(assessments)
}

// CORS中间件支持前后端分离架构
func CORSMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Access-Control-Allow-Origin", "*")
        w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE")
        w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
        
        if r.Method == "OPTIONS" {
            return
        }
        
        next.ServeHTTP(w, r)
    })
}

基础设施考量 考虑到平台的扩展需求:

type MetricsCollector struct {
    assessmentsProcessed prometheus.Counter
    processingTime       prometheus.Histogram
}

func (m *MetricsCollector) RecordAssessment(score int, duration time.Duration) {
    m.assessmentsProcessed.Inc()
    m.processingTime.Observe(duration.Seconds())
}

// 使用context处理请求超时
func (h *AssessmentHandler) ProcessBatch(ctx context.Context, assessments []SecurityAssessment) error {
    ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
    defer cancel()
    
    for _, assessment := range assessments {
        select {
        case <-ctx.Done():
            return ctx.Err()
        default:
            if err := h.storage.Save(ctx, &assessment); err != nil {
                return err
            }
        }
    }
    return nil
}

这个职位对Go开发者的要求很典型:需要构建可靠的后端系统,同时理解全栈开发流程。在供应链安全领域,代码质量和系统可靠性尤为重要,因为处理的是企业的核心安全数据。

回到顶部