Golang中级开发工程师求职

Golang中级开发工程师求职 公司正在寻找一位软件工程师加入他们在德国汉堡附近的新办公室。他们正在构建管理数据库模式的新方法。基于流行的开源项目,他们正在构建一个独特的平台,供团队定义、规划、验证和部署数据库模式的变更。

任务:

  • 端到端地负责工程计划,从构思、设计、实现到测试,以提供开发者喜爱的体验
  • 为成功且受欢迎的开源项目做出贡献并提供支持
  • 持续改进我们在 Ariga 用于构建产品的工具和基础设施

这个职位是一个独特的机会,可以在开源社区以及商业产品中为开发者构建工具和基础设施。

必备条件:

  • 3年以上软件工程师经验
  • 拥有 Go 语言编程经验(至少1年)
  • 拥有构建高性能、分布式服务器应用程序的经验
  • 对数据库和数据基础设施有深入理解
  • 拥有构建 SaaS 和/或企业级 Web 应用程序的经验
  • 高级英语水平

加分项:

  • 拥有设计面向开发者的产品的经验。
  • 计算机科学或软件工程学术背景
  • 拥有参与开源项目或社区的经验
  • 拥有使用 React、GraphQL、Typescript 和其他现代 Web 技术的经验

福利与条件:

  • 试用期:3个月
  • 30天年假
  • 具有竞争力的薪资
  • 股权
  • 福利套餐

在此申请


更多关于Golang中级开发工程师求职的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang中级开发工程师求职的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这是一个非常不错的Go开发职位机会,尤其适合对数据库和开发者工具领域感兴趣的中级工程师。从职位描述来看,这很可能是在为Atlas(一个用Go编写的开源数据库模式管理工具)团队招聘。

以下是一些针对该职位要求的技术要点和示例,可以帮助你更好地准备:

1. 高性能、分布式服务器应用经验 这个职位要求构建管理数据库模式的平台,很可能涉及处理高并发迁移任务和状态同步。

// 示例:使用Go协程和通道处理并发数据库模式检查任务
package main

import (
    "context"
    "fmt"
    "sync"
)

type SchemaCheckTask struct {
    ID       string
    DDL      string
    ResultCh chan<- CheckResult
}

type CheckResult struct {
    TaskID string
    Valid  bool
    Errors []string
}

func processSchemaChecks(ctx context.Context, tasks <-chan SchemaCheckTask) {
    var wg sync.WaitGroup
    for i := 0; i < 10; i++ { // 10个worker并发处理
        wg.Add(1)
        go func(workerID int) {
            defer wg.Done()
            for task := range tasks {
                select {
                case <-ctx.Done():
                    return
                default:
                    // 模拟模式验证逻辑
                    result := validateSchema(task.DDL)
                    task.ResultCh <- CheckResult{
                        TaskID: task.ID,
                        Valid:  result.Valid,
                        Errors: result.Errors,
                    }
                }
            }
        }(i)
    }
    wg.Wait()
}

2. 数据库和数据基础设施理解 职位明确要求对数据库有深入理解,以下示例展示如何处理多数据库支持的迁移:

// 示例:抽象不同数据库的迁移操作
package main

type DatabaseDriver interface {
    ApplyMigration(ctx context.Context, migration *Migration) error
    RollbackMigration(ctx context.Context, migration *Migration) error
    ValidateSchema(ctx context.Context, schema *Schema) ([]ValidationError, error)
}

type MySQLDriver struct {
    conn *sql.DB
}

func (d *MySQLDriver) ApplyMigration(ctx context.Context, migration *Migration) error {
    tx, err := d.conn.BeginTx(ctx, nil)
    if err != nil {
        return err
    }
    
    // 执行迁移SQL
    _, err = tx.ExecContext(ctx, migration.SQL)
    if err != nil {
        tx.Rollback()
        return fmt.Errorf("failed to apply migration: %w", err)
    }
    
    // 记录迁移历史
    _, err = tx.ExecContext(ctx, 
        "INSERT INTO schema_migrations (version, description) VALUES (?, ?)",
        migration.Version, migration.Description)
    
    return tx.Commit()
}

type PostgreSQLDriver struct {
    conn *sql.DB
}

func (d *PostgreSQLDriver) ApplyMigration(ctx context.Context, migration *Migration) error {
    // PostgreSQL特定的实现,可能包含扩展、模式等处理
    _, err := d.conn.ExecContext(ctx, migration.SQL)
    return err
}

3. 开源项目贡献经验 职位要求为开源项目做贡献,以下是一个典型的Go开源项目贡献模式:

// 示例:为数据库模式解析器添加新功能
package main

import (
    "github.com/ariga/atlas/sql/schema"
    "github.com/ariga/atlas/sql/mysql"
)

// 扩展Atlas的MySQL解析器支持新的表选项
func parseTableOptions(t *schema.Table, opts []string) error {
    for _, opt := range opts {
        switch {
        case strings.HasPrefix(opt, "AUTO_INCREMENT="):
            // 解析自增起始值
            val := strings.TrimPrefix(opt, "AUTO_INCREMENT=")
            startVal, err := strconv.ParseInt(val, 10, 64)
            if err != nil {
                return err
            }
            t.AddAttrs(&mysql.AutoIncrement{Start: startVal})
            
        case strings.HasPrefix(opt, "COMMENT="):
            // 解析表注释
            comment := strings.TrimPrefix(opt, "COMMENT=")
            t.AddAttrs(&schema.Comment{Text: comment})
        }
    }
    return nil
}

4. SaaS/企业级Web应用经验 虽然职位主要是Go后端,但加分项提到现代Web技术栈:

// 示例:使用Go构建GraphQL API服务数据库模式操作
package main

import (
    "github.com/graphql-go/graphql"
    "github.com/graphql-go/handler"
)

var schemaType = graphql.NewObject(graphql.ObjectConfig{
    Name: "Schema",
    Fields: graphql.Fields{
        "id": &graphql.Field{
            Type: graphql.String,
        },
        "name": &graphql.Field{
            Type: graphql.String,
        },
        "tables": &graphql.Field{
            Type: graphql.NewList(tableType),
            Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                schema := p.Source.(*DatabaseSchema)
                return getSchemaTables(schema.ID)
            },
        },
    },
})

var mutationType = graphql.NewObject(graphql.ObjectConfig{
    Name: "Mutation",
    Fields: graphql.Fields{
        "applyMigration": &graphql.Field{
            Type: migrationResultType,
            Args: graphql.FieldConfigArgument{
                "schemaId": &graphql.ArgumentConfig{
                    Type: graphql.NewNonNull(graphql.String),
                },
                "ddl": &graphql.ArgumentConfig{
                    Type: graphql.NewNonNull(graphql.String),
                },
            },
            Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                schemaID := p.Args["schemaId"].(string)
                ddl := p.Args["ddl"].(string)
                return executeMigration(schemaID, ddl)
            },
        },
    },
})

这个职位对Go开发者在数据库领域的深度有较高要求。建议在申请前:

  1. 研究Atlas项目的源代码和架构
  2. 准备展示你在Go中处理数据库相关问题的经验
  3. 如果有开源贡献经历,特别是数据库工具类的,需要重点突出

职位链接中的公司是Ariga,他们正在构建下一代数据库模式管理工具,这是一个很好的机会参与有影响力的开源项目。

回到顶部