Golang架构师/技术主管职位招聘(远程或俄罗斯)

Golang架构师/技术主管职位招聘(远程或俄罗斯) 我们正在启动一个新项目:为 CrescoFin 开发 DeFi 银行应用。你可以在 crescofin.ch 了解更多信息。

CrescoFin 是一家受监管的瑞士银行替代方案公司,提供简单的产品:一个受保的、计息的存款账户(支持法币和加密货币,正在开发中),其年化收益率高于银行。我们正在寻找一位经验丰富的技术负责人/架构师。

职责

从零开始构建一个新的银行应用——我们有一个全新的项目!

  • 管理一个约 6-7 名开发人员的开发团队
  • 与其他高级工程师和技术经验丰富的产品负责人共同构建架构
  • 将我们的设计转化为 Android 和 IOS 应用

创建和维护由我们 API 驱动的 React 前端

  • 移动端 (Android/IOS)
  • Web 应用

创建和维护 Go 语言后端

  • 管理与不同银行合作伙伴的集成
  • 管理与不同合规合作伙伴的集成
  • 在瑞士的服务器上安全存储敏感数据

与一个小而专注的团队协作、规划和沟通

将以太坊区块链上的 DeFi 应用集成到我们的应用中(有高级工程师支持)

与产品负责人密切合作,支持他和各位总监

要求

  • 具备创业心态和实干精神
  • 有 React Native 项目经验
  • 有 Go 语言项目经验
  • 值得信赖,并知道如何安全地设置核心基础设施
  • 喜欢与强大的团队一起启动新项目
  • 对设计实现有敏锐的眼光
  • 熟练掌握英语
  • 积极主动,善于沟通
  • 有幽默感
  • 对软件开发充满热情
  • 加分项:了解加密货币和 DeFi
  • 加分项:有 Solidity 和以太坊区块链经验
  • 加分项:有 DevOps 经验

我们提供

  • 月薪 5000 - 6000 美元,如果您在金融科技领域有专家经验,薪资可更高
  • 充满活力、不断成长的组织
  • 为长期员工提供股票期权
  • 有竞争力的薪酬
  • 与其他优秀的开发者共事
  • 志在改变世界的加密货币原生同事!

更多关于Golang架构师/技术主管职位招聘(远程或俄罗斯)的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

你好,

我想为你提供帮助,已发送私信,请查收。

此致! Seth R

更多关于Golang架构师/技术主管职位招聘(远程或俄罗斯)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你好,

我很乐意为你提供帮助。

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

期待你的回复。

谢谢。

这是一个极具吸引力的Go技术负责人/架构师职位,尤其适合对金融科技和DeFi有深厚兴趣的开发者。从技术要求来看,Go后端将是整个系统的核心,负责处理银行集成、合规性以及敏感数据的安全存储。以下是一些针对Go技术栈的专业分析和示例:

1. Go后端架构核心考量 对于银行级应用,Go的后端架构需要重点关注安全性、并发处理和API设计。以下是一个基础的项目结构示例和关键包的使用:

// cmd/api/main.go - 应用入口点
package main

import (
    "log"
    "net/http"
    "os"
    
    "github.com/gorilla/mux"
    "your-project/internal/banking"
    "your-project/internal/compliance"
    "your-project/internal/blockchain"
    "your-project/pkg/middleware"
)

func main() {
    r := mux.NewRouter()
    
    // 安全中间件链
    r.Use(middleware.Authentication)
    r.Use(middleware.RateLimit)
    r.Use(middleware.SecurityHeaders)
    
    // 银行集成端点
    bankingAPI := banking.NewAPI()
    r.HandleFunc("/api/v1/accounts", bankingAPI.GetAccounts).Methods("GET")
    r.HandleFunc("/api/v1/transfers", bankingAPI.CreateTransfer).Methods("POST")
    
    // 合规性检查端点
    complianceAPI := compliance.NewService()
    r.HandleFunc("/api/v1/kyc/verify", complianceAPI.VerifyCustomer).Methods("POST")
    
    // 区块链集成端点
    blockchainAPI := blockchain.NewEthereumClient()
    r.HandleFunc("/api/v1/defi/balance", blockchainAPI.GetBalance).Methods("GET")
    
    port := os.Getenv("PORT")
    if port == "" {
        port = "8080"
    }
    
    log.Printf("Server starting on port %s", port)
    log.Fatal(http.ListenAndServe(":"+port, r))
}

2. 银行集成模块示例 与银行API集成时需要处理重试、超时和错误处理:

// internal/banking/integration.go
package banking

import (
    "context"
    "time"
    
    "github.com/sony/gobreaker"
)

type BankClient struct {
    httpClient   *http.Client
    circuitBreaker *gobreaker.CircuitBreaker
    baseURL      string
    apiKey       string
}

func NewBankClient(baseURL, apiKey string) *BankClient {
    cb := gobreaker.NewCircuitBreaker(gobreaker.Settings{
        Name:        "BankAPI",
        MaxRequests: 5,
        Interval:    60 * time.Second,
        Timeout:     30 * time.Second,
        ReadyToTrip: func(counts gobreaker.Counts) bool {
            return counts.ConsecutiveFailures > 5
        },
    })
    
    return &BankClient{
        httpClient: &http.Client{
            Timeout: 10 * time.Second,
        },
        circuitBreaker: cb,
        baseURL:       baseURL,
        apiKey:        apiKey,
    }
}

func (c *BankClient) CreateTransfer(ctx context.Context, transfer *Transfer) error {
    // 使用断路器模式执行银行API调用
    _, err := c.circuitBreaker.Execute(func() (interface{}, error) {
        req, err := http.NewRequestWithContext(ctx, "POST", 
            c.baseURL+"/transfers", 
            bytes.NewBuffer(transfer.ToJSON()))
        if err != nil {
            return nil, err
        }
        
        req.Header.Set("Authorization", "Bearer "+c.apiKey)
        req.Header.Set("Content-Type", "application/json")
        
        resp, err := c.httpClient.Do(req)
        if err != nil {
            return nil, err
        }
        defer resp.Body.Close()
        
        if resp.StatusCode != http.StatusOK {
            return nil, fmt.Errorf("bank API error: %s", resp.Status)
        }
        
        return nil, nil
    })
    
    return err
}

3. 敏感数据安全存储 在瑞士服务器上存储敏感数据需要严格的加密措施:

// pkg/security/encryption.go
package security

import (
    "crypto/aes"
    "crypto/cipher"
    "crypto/rand"
    "encoding/base64"
    "io"
)

type Encryptor struct {
    key []byte
}

func NewEncryptor(key string) (*Encryptor, error) {
    // 确保密钥长度为32字节(AES-256)
    hash := sha256.Sum256([]byte(key))
    return &Encryptor{key: hash[:]}, nil
}

func (e *Encryptor) Encrypt(plaintext []byte) (string, error) {
    block, err := aes.NewCipher(e.key)
    if err != nil {
        return "", err
    }
    
    gcm, err := cipher.NewGCM(block)
    if err != nil {
        return "", err
    }
    
    nonce := make([]byte, gcm.NonceSize())
    if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
        return "", err
    }
    
    ciphertext := gcm.Seal(nonce, nonce, plaintext, nil)
    return base64.StdEncoding.EncodeToString(ciphertext), nil
}

func (e *Encryptor) Decrypt(encrypted string) ([]byte, error) {
    data, err := base64.StdEncoding.DecodeString(encrypted)
    if err != nil {
        return nil, err
    }
    
    block, err := aes.NewCipher(e.key)
    if err != nil {
        return nil, err
    }
    
    gcm, err := cipher.NewGCM(block)
    if err != nil {
        return nil, err
    }
    
    nonceSize := gcm.NonceSize()
    if len(data) < nonceSize {
        return nil, fmt.Errorf("ciphertext too short")
    }
    
    nonce, ciphertext := data[:nonceSize], data[nonceSize:]
    return gcm.Open(nil, nonce, ciphertext, nil)
}

4. 区块链集成示例 与以太坊DeFi协议集成:

// internal/blockchain/ethereum.go
package blockchain

import (
    "context"
    "math/big"
    
    "github.com/ethereum/go-ethereum/accounts/abi/bind"
    "github.com/ethereum/go-ethereum/common"
    "github.com/ethereum/go-ethereum/ethclient"
)

type EthereumClient struct {
    client *ethclient.Client
    chainID *big.Int
}

func NewEthereumClient(rpcURL string) (*EthereumClient, error) {
    client, err := ethclient.Dial(rpcURL)
    if err != nil {
        return nil, err
    }
    
    chainID, err := client.ChainID(context.Background())
    if err != nil {
        return nil, err
    }
    
    return &EthereumClient{
        client: client,
        chainID: chainID,
    }, nil
}

func (ec *EthereumClient) GetTokenBalance(ctx context.Context, 
    walletAddress common.Address, 
    tokenAddress common.Address) (*big.Int, error) {
    
    // ERC20代币余额查询
    instance, err := NewERC20(tokenAddress, ec.client)
    if err != nil {
        return nil, err
    }
    
    balance, err := instance.BalanceOf(&bind.CallOpts{
        Context: ctx,
    }, walletAddress)
    
    return balance, err
}

func (ec *EthereumClient) ExecuteDefiTransaction(ctx context.Context, 
    privateKey string, 
    contractAddress common.Address, 
    method string, 
    args ...interface{}) (common.Hash, error) {
    
    // 构建交易并发送到DeFi合约
    auth, err := bind.NewKeyedTransactorWithChainID(
        crypto.ToECDSA(common.FromHex(privateKey)), 
        ec.chainID)
    if err != nil {
        return common.Hash{}, err
    }
    
    // 这里需要根据具体的DeFi合约ABI进行调用
    // 示例:与Uniswap或Aave等协议的交互
    
    return common.Hash{}, nil
}

5. 并发处理模式 银行应用需要高效处理并发请求:

// internal/processor/concurrent.go
package processor

import (
    "context"
    "sync"
    "time"
)

type BatchProcessor struct {
    workers    int
    batchSize  int
    timeout    time.Duration
}

func NewBatchProcessor(workers, batchSize int, timeout time.Duration) *BatchProcessor {
    return &BatchProcessor{
        workers:   workers,
        batchSize: batchSize,
        timeout:   timeout,
    }
}

func (bp *BatchProcessor) ProcessTransactions(ctx context.Context, 
    transactions []Transaction) []Result {
    
    results := make([]Result, len(transactions))
    var wg sync.WaitGroup
    semaphore := make(chan struct{}, bp.workers)
    
    for i, tx := range transactions {
        wg.Add(1)
        go func(idx int, transaction Transaction) {
            defer wg.Done()
            
            semaphore <- struct{}{}
            defer func() { <-semaphore }()
            
            ctx, cancel := context.WithTimeout(ctx, bp.timeout)
            defer cancel()
            
            // 处理交易逻辑
            result := bp.processSingleTransaction(ctx, transaction)
            results[idx] = result
        }(i, tx)
    }
    
    wg.Wait()
    return results
}

func (bp *BatchProcessor) processSingleTransaction(ctx context.Context, 
    tx Transaction) Result {
    // 实现具体的交易处理逻辑
    // 包括银行API调用、合规检查、区块链操作等
    return Result{}
}

这个职位要求的技术栈非常全面,Go后端需要处理银行集成、合规性、区块链交互和安全数据存储等多个关键领域。上述示例展示了如何构建一个安全、可扩展的Go后端架构,适合处理金融科技应用的高并发和高安全性需求。

回到顶部