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
更多关于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开发者的要求很典型:需要构建可靠的后端系统,同时理解全栈开发流程。在供应链安全领域,代码质量和系统可靠性尤为重要,因为处理的是企业的核心安全数据。

