普通视图

发现新文章,点击刷新页面。
昨天以前首页

Jane Street第一轮一小时面试体验卡(伦敦软件工程师)


2025年年初,拿了Jane Street一个小时的Coding面试体验卡。

jane-street Jane Street第一轮一小时面试体验卡(伦敦软件工程师) 程序员 计算机 软件工程 面试

简街/Jane Street 金融公司

市场定位

  • Jane Street 是一家全球领先的定量交易公司和流动性提供者,成立于 2000 年,总部位于纽约,同时在伦敦、香港和阿姆斯特丹设有办事处。
  • 它以高度依赖数学、统计学和计算机科学技术而闻名,在金融市场中运用定量分析方法进行自动化交易。

技术驱动

  • Jane Street 专注于做市业务,为全球各类金融工具(股票、ETF、债券、期权、期货等)提供流动性。他们的交易模式主要基于算法和数据驱动,通过低延迟的技术在市场上寻找交易机会。
  • Jane Street 是一家技术驱动的公司,其核心交易系统和工具大多是内部开发的。他们高度依赖函数式编程语言 OCaml,用于构建高性能、可靠的交易系统。

文化与工作环境

  • 合作与学术性:Jane Street 的公司文化强调团队合作、数据透明和学术研究氛围。
  • 扁平化管理:鼓励员工从任何层级提供创新的想法。
  • 强大的培训:对于新员工尤其是应届生,Jane Street 提供系统的培训,帮助他们快速上手。

招聘与职业机会

  • Jane Street 以招募顶尖的数学家、程序员和定量分析师而闻名。他们非常注重候选人的逻辑思维、编程能力和解决复杂问题的能力。
  • 岗位包括:量化交易员(Quantitative Trader)、研究员(Researcher)、软件工程师(Software Engineer)和基础设施工程师(Infrastructure Engineer)。

与众不同之处

    Jane Street 不仅仅是一家交易公司,它还具有强烈的工程师文化。
    他们公开了很多技术工具和研究,比如开源的 OCaml 项目,为开发者社区做出贡献。

在行业中的地位

  • Jane Street 被认为是高频交易和定量交易领域的领导者之一,常与 Citadel Securities、Two Sigma、DE Shaw 等其他量化公司相提并论。其创新性和对风险管理的严格控制使其在金融危机中也能保持强劲的表现。

有趣的事实

  • Jane Street 每天处理数十亿美元的交易量,尽管它并不广泛对外宣传,但在业内具有极高的声誉。
  • 公司提供丰厚的薪酬待遇和灵活的工作环境,并在全球范围内吸引了许多优秀的应届毕业生和经验丰富的专业人士。
  • 如果你对量化交易和技术研发感兴趣,Jane Street 无疑是一个非常值得探索的职业选择。

去年的时候就听说Jane Street是很有名的金融公司,做量化的,给钱也给得挺多,于是去年年初就投了简历,可惜简历没过,当时在投了简历大概3周后收到了拒信(我投的是伦敦JS的软件工程师 Software Engineer)

jane-street-rejection-letter Jane Street第一轮一小时面试体验卡(伦敦软件工程师) 程序员 计算机 软件工程 面试

Jane Street收到简历后三周给了拒信

申请Jane Street最好填上Cover Letter/求职信

今年年初又试了一下,我让ChatGPT帮助我写了Cover Letter,虽然这个Cover Letter在申请过程中是选填的(JS有自己的工作申请页面),但是我感觉起了很大的作用,我感觉ChatGPT写得也很好:

Happy New Year 2025! 🎉

I’ve been a Senior Software Engineer at Microsoft Research Cambridge for the past 3.5 years. As I reflect on my journey, one of my key resolutions for this year is to step out of my comfort zone and embrace new challenges. Growth happens outside familiar boundaries, and I’m eager to push myself further.

This year, I’m particularly interested in exploring opportunities at Jane Street. Though I haven’t worked in this industry before, it feels like a natural extension of my background as a crypto trader and enthusiast. The firm’s focus on quantitative trading and its intellectually rigorous environment are incredibly appealing. It’s an exciting prospect to apply my technical expertise and analytical skills in a field that blends finance and technology seamlessly.

Here’s to learning, adapting, and embracing new possibilities in 2025! 🚀

2025 年新年快乐!🎉

过去 3.5 年,我一直担任微软剑桥研究院的高级软件工程师。回顾我的旅程,我今年的主要决心之一就是走出舒适区,迎接新的挑战。成长发生在熟悉的界限之外,我渴望进一步推动自己。

今年,我特别想探索 Jane Street 的机会。虽然我以前没有在这个行业工作过,但感觉这是我作为加密货币交易员和爱好者背景的自然延伸。该公司对量化交易的关注及其智力严谨的环境非常吸引人。将我的技术专长和分析技能应用于无缝融合金融和技术的领域是一个令人兴奋的前景。

祝愿我在 2025 年学习、适应和拥抱新的可能性!🚀

Jane Street第一轮面试体验

很快就约上第一轮面试,是Coding,一个小时。

jane-street-scheduled-first-around-interview Jane Street第一轮一小时面试体验卡(伦敦软件工程师) 程序员 计算机 软件工程 面试

Jane Street过了简历关,安排第一轮Coding面试

我们收到了您的简历,希望您能担任 Jane Street 的软件工程职位。如果您对这个职位不感兴趣,请告诉我。请记住,在面试过程中,我们将不断评估您在 Jane Street 担任所有职位的潜力。

如果您想参加这个职位的面试,请让我知道您在接下来的两周左右的时间内是否有时间进行一小时的面试,如果可能的话,请在英国时间的正常工作时间内进行。我们的面试官使用 https://coderpad.io 进行一些编码练习,因此请确保您有电脑和互联网接入以进行通话。您的面试官将在通话期间为您提供 coderpad.io 的会话链接。作为参考,coderpad 短链接如下所示:https://cpad.io/012345,有效期为一小时。

我们首选的面试方式是通过 Zoom。

虽然 OCaml 是我们选择的编程语言,但我们鼓励您使用您最熟悉的语言进行编程,无论是功能性语言还是其他语言。要了解我们在编程面试中会遇到什么情况,您可以阅读我们的博客文章,其中介绍了我们在通话期间寻找的内容以及我们想要实现的目标。您还可以在我们的准备页面上了解有关我们的软件工程师面试流程的更多信息。

我们意识到许多类似的职位都提供远程工作机会。我想坦率地说,我们并不普遍提供这种机会。目前,几乎所有的软件工程师都住在离办公室足够近的地方,可以定期通勤。有些人选择几乎一直在办公室工作;其他人则将工作时间分配在办公室和家里。但是,我们通常不提供完全远程工作。

包容性对我们来说非常重要——如果您需要调整或有任何特殊要求,请尽快告知我们,我们将共同找到适合您的面试流程。最后,如果您在接受我们的面试时收到其他公司的任何报价或截止日期,请给我发电子邮件并提供详细信息,以便我们与您合作加快我们的流程。

如果您有任何问题,请告诉我,我期待您的回复!

面试的时候是一小时在Coderpad.io上敲代码,这个链接是面试开始的时候面试官才发的,有效期是一小时,一面试完就不能访问了,以前Meta还是Google,面试完后链接还会在短期内有效,可以回看自己在面试时的代码。

JS的第一轮面试并不考传统的力扣/Leetcode。这点和Meta不一样,Meta就是45分钟两道标准力扣题,只要刷力扣就没啥问题。

谷歌也不太一样,我面试的谷哥从来不考力扣题,45分钟就一道题,有很多Follow-up问题,甚至会考你把算法怎么优化scale-up到分布式系统中。

JS的这一题题目类似是:设计一个XXXX,当你选完任何一种(主流)编程语言后,面试管就会把题目以当前语言复制到CoderPad中,比如API等。题目不难,但是得敲很多代码,这一次我感觉题目对算法难度要求不高,但对数据结构要求要熟悉(比如哈希表/优先队列等)。有第二问Follow-up我没时间敲代码了,但是给面试管讲了思路。

反省:很可惜,没过,我以为我能至少过这一轮,约个Onsite面试的。隔了一周,JS发来拒信,我问了反馈,但不给:

我们意识到面试过程可能会遗漏某些问题。虽然我们希望能够为每个人提供个性化和详细的反馈,但不幸的是,这并不是我们流程的一部分。

jane-street-no-feedbacks-after-interview Jane Street第一轮一小时面试体验卡(伦敦软件工程师) 程序员 计算机 软件工程 面试

Jane Street面试后不给任何Feedbacks/反馈

我感觉我被拒的原因可能是:写代码过程中第一次选择的数据结构不对,然后在面试官的提示下改正了,还有就是花了较长的时间Clarify导致后面第二问没时间写代码。然后就是有一小段时间写代码并没有Think Aloud,应该每敲一行代码就得解释一下,边写边说,和面试官互动。

Jane Street 的软件工程师职位是否有不同的级别(资历)?

Jane Street 并没有像其他科技公司(例如 Google 的 L3-L7 体系)那样的正式软件工程师级别(Software Engineer Levels),而是采取更加灵活、基于影响力的晋升方式。这点和Meta就一样,在Meta,听说码农的级别是严格保密的。Meta觉得隐藏级别更容易在技术讨论中迸发出想法,而不会因为同事/对方级别高而有所顾虑。

Jane Street 如何处理资历和成长:

  • 没有“高级”或“资深”软件工程师等正式头衔。
  • 工程师会随着 实际贡献和经验 自然地承担更多责任。
  • 薪资和影响力 会随个人表现增长,而不是依赖于晋升。
  • 有经验的工程师通常会承担 指导、架构设计和领导 方面的工作。

如果你习惯了传统的晋升路径,Jane Street 的体系可能会有所不同。但这里更注重 实际影响力,而不是职位晋升的名义。

在Jane Street完成第一轮软件工程师面试后,多久能收到回复?

Jane Street 通常会在 一到两周内 给予第一轮面试的反馈。但具体时间可能因候选人数和岗位需求而有所不同。

如果超过两周仍未收到回复,可以考虑给你的 招聘负责人发送一封礼貌的跟进邮件 询问进展。

Jane Street伦敦在扩招?

感觉JS在伦敦好多职位:Join Jane Street London

jane-street-london-roles-scaled Jane Street第一轮一小时面试体验卡(伦敦软件工程师) 程序员 计算机 软件工程 面试

Jane Street伦敦放出来的职位很多


Jane Street是金融量化公司给钱给很多的那种,是相当的多。
Share on X


准备面试JS的软件工程师职位?油管上也有很多视频可以看看。

面试经历

面试题

面试技巧

面试其它

英文:Jane Street First Round Interview Experience (Software Engineer at London)

本文一共 2805 个汉字, 你数一下对不对.
Jane Street第一轮一小时面试体验卡(伦敦软件工程师). (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c Jane Street第一轮一小时面试体验卡(伦敦软件工程师) 程序员 计算机 软件工程 面试
The post Jane Street第一轮一小时面试体验卡(伦敦软件工程师) first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 个人网站Adsense广告申请通过: 需要最少15篇文章 我的个人网站 zhihua-lai.com 本月通过了 Adsense 审核,终于可以再次放置广告,赚些零花钱了。 其实,最初 Adsense 账户通过审核后就能直接放广告,但后来规则变得严格了。如果一个网站长时间没有放置任何 Adsense 广告代码,账户资格会被撤销。重新启用时,需要进行单独审核。如今,在 Google Adsense 中新增一个域名,也必须通过审核后才能投放广告。 为了让我的网站通过审核,我尝试了几次,但总是被拒,原因之一是必须要有足够的内容支持。例如,以前我做的工具网站 SlowAPI.com...
  2. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  3. 部署和运行 DeepSeek R1-8b 大型语言模型 (LLM) 的两个简单命令 视频:油管/Youtube | B站/小破站 | 微博视频 | 西瓜视频 | 微信视频号 | X/推特 | 小红书 大型语言模型(LLMs)如 DeepSeek...
  4. 避免选择低质量没保障的 VPS 公司 现在程序员基本都会有VPS服务器, 价钱也不贵, 一个月几美元, 随随便便就能申请个玩. 我自己这几年也玩了不少VPS, 现在手上大概有10台VPS, 用于不同的服务: 博客, 区块链, API等用途. 上两周, 其中一台服务器商 supremevps 突然发邮件 给两天时间,...
  5. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  6. 编程: NodeJs/Javascript 函数检查Tron/波场区块链上的交易是否已确认(TronGrid API) 我们想知道给定的交易是否已经在 Tron/波场 区块链上确认,这可以通过 TronGrid API 轻松实现。 为了确保交易在Tron/波场区块链上被确认,验证逻辑应关注交易的状态,这表明交易是否已被 Tron 虚拟机(TVM)成功处理。以下是正确的验证方法: 检查 receipt.result 验证交易成功的主要标志是 receipt.result 字段。值为 “SUCCESS”...
  7. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...
  8. 2019剑桥龙舟节: 很荣幸代表福建船队参赛 时间: 2019年6月2日星期日 前不久, 剑桥每年一度的龙舟节在剑桥Jesus Green大草地还有边上的剑河举行了. 每次都是星期天, 所以基本上附近的华人都来了, 很热闹. 旁边的剑河里有条不紊的两两进行着淘汰对抗赛, 草地上大人小孩子席地而坐, 野餐, 聊天. 孩子们有蹦蹦床玩, 有美食(摊位)广场, 天空做美,...

教娃编程之: ChatGPT写了一个Python交互程序调用x.ai的Grok大语言模型


视频:油管/Youtube | B站/小破站 | 微博视频 | 西瓜视频 | 微信视频号 | X/推特 | 小红书

马斯克的x.ai到年底有免费的25美元的credit可以使用Grok大语言模型

前不久(今年初),伊隆·马斯克/Elon Musk的X公司开源了Grok大语言模型,并且给免费提供了25美元的credit可以调用。可以在其官网x.ai注册一个帐号,申请API KEY即可,官网还贴心的的给出了调用的例子。

curl https://api.x.ai/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer xai-......" -d '{
  "messages": [
    {
      "role": "system",
      "content": "You are a test assistant."
    },
    {
      "role": "user",
      "content": "Testing. Just say hi and hello world and nothing else."
    }
  ],
  "model": "grok-beta",
  "stream": false,
  "temperature": 0
}'

孩子们由于未成年,所以无法申请ChatGPT、X AI等大语言模式的帐号,平时他们只能在免费的微软冰/BING搜索引擎上使用集成的免费Copilot。不过今天听弟弟说,ChatGPT现在已经不需要登陆就可以使用,不过他说这个版本有点受限制。

平均长度来算的话,一句话的Prompt大概是0.0012美元。当然越长的句子花费越贵,毕竟价格是按Token来算的。可以粗略的估计一个单词是一个Token。

x.ai-usage 教娃编程之: ChatGPT写了一个Python交互程序调用x.ai的Grok大语言模型 ChatGPT (OpenAI) Grok (X.AI) Python 人工智能 (AI) 折腾 教娃 教程 教育 程序员 程序设计

目测每条Prompt的费用是0.0012美元,25美元可以使用大概2万次

x.ai-free-25-credit 教娃编程之: ChatGPT写了一个Python交互程序调用x.ai的Grok大语言模型 ChatGPT (OpenAI) Grok (X.AI) Python 人工智能 (AI) 折腾 教娃 教程 教育 程序员 程序设计

每个帐号有免费的25美元API费用

x.ai-dashboard 教娃编程之: ChatGPT写了一个Python交互程序调用x.ai的Grok大语言模型 ChatGPT (OpenAI) Grok (X.AI) Python 人工智能 (AI) 折腾 教娃 教程 教育 程序员 程序设计

X.AI 的API网站界面

x.ai-api-models 教娃编程之: ChatGPT写了一个Python交互程序调用x.ai的Grok大语言模型 ChatGPT (OpenAI) Grok (X.AI) Python 人工智能 (AI) 折腾 教娃 教程 教育 程序员 程序设计

API 的 X AI 模型:grok-beta 和 grok-vision-beta

grok-x-ai-api-keys 教娃编程之: ChatGPT写了一个Python交互程序调用x.ai的Grok大语言模型 ChatGPT (OpenAI) Grok (X.AI) Python 人工智能 (AI) 折腾 教娃 教程 教育 程序员 程序设计

由 X AI 为 Grok LLM 创建 API 密钥。 Create API Keys for Grok LLM by X AI.

ChatGPT写了一个Python交互程序调用x.ai的Grok大语言模型

反正是免费的25美元,于是想着给娃做一个简单的PYTHON程序,然后人机交互,每次调用x.ai的Grok大语言模式,也正好让娃学一学实际的编程应用。于是让ChatGPT写了个程序,这种简单的程序ChatGPT基本上是Bug Free,生成的代码拿来就能用。

import requests
import json

api_key = "x_ai ..."

# Define the API endpoint and headers
url = "https://api.x.ai/v1/chat/completions"
headers = {
    "Content-Type": "application/json",
    f"Authorization": "Bearer {api_key}",
}

# Define a system message for context
system_message = {"role": "system", "content": "You are a test assistant."}

print("Welcome to the Grok, an AI chatbot. Type 'bye' to exit.\n")

while True:
    # Prompt the user for input
    user_input = input("You: ").strip()

    # Check if the user wants to exit
    if user_input.lower() == "bye":
        print("Goodbye!")
        break

    if user_input == "":
        continue

    # Define the payload
    payload = {
        "messages": [
            system_message,
            {"role": "user", "content": user_input}
        ],
        "model": "grok-beta",
        "stream": False,
        "temperature": 0
    }

    try:
        # Make the request
        response = requests.post(url, headers=headers, json=payload)

        # Check the response status
        if response.status_code == 200:
            data = response.json()
            assistant_response = data["choices"][0]["message"]["content"]
            print(f"Grok: {assistant_response}\n")
        else:
            print(f"Error: {response.status_code} - {response.text}")
    except Exception as e:
        print(f"An error occurred: {e}")

之后 简单做了些修改,比如避免空的Prompt,并且用strip函数去除句首和句尾的空格。娃使用的是Mac苹果电脑,还得在Terminal装个Homebrew,然后安装Python,并且用 pip3 install requests 安装上请求包,就可以使用了。

x-ai-prompt-python-2024-12-01-12.53.31-scaled 教娃编程之: ChatGPT写了一个Python交互程序调用x.ai的Grok大语言模型 ChatGPT (OpenAI) Grok (X.AI) Python 人工智能 (AI) 折腾 教娃 教程 教育 程序员 程序设计

虽然界面有点素,也就是个简单的终端,但是对于孩子来说已经是个很强大的软件了。

kid-plays-x-ai-grok-llm-2024-12-01-12.53.26-scaled 教娃编程之: ChatGPT写了一个Python交互程序调用x.ai的Grok大语言模型 ChatGPT (OpenAI) Grok (X.AI) Python 人工智能 (AI) 折腾 教娃 教程 教育 程序员 程序设计

弟弟在苹果电脑上成功跑起了x.ai的大语言模式 Grok

ChatGPT 可以拿来做什么?

ChatGPT 通用人工智能

英文:ChatGPT writes a Python Script to Interact with Grok LLM from x.ai (Free $25 Credit)

本文一共 743 个汉字, 你数一下对不对.
教娃编程之: ChatGPT写了一个Python交互程序调用x.ai的Grok大语言模型. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 教娃编程之: ChatGPT写了一个Python交互程序调用x.ai的Grok大语言模型 ChatGPT (OpenAI) Grok (X.AI) Python 人工智能 (AI) 折腾 教娃 教程 教育 程序员 程序设计
The post 教娃编程之: ChatGPT写了一个Python交互程序调用x.ai的Grok大语言模型 first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. HPZ800服务器主板太老不支持超过2TB的大硬盘 我家里一直用的是HPZ800服务器, 很吵, 很老, 虽然这台服务器已经有十年之久(我在EBAY上买来用了五年多了), 但是即使放到今天, 这服务器速度依旧很快, 很稳定. 由于服务器用的是ECC较验内存, 所以基本上不重启关机. HPZ800主机有两个硬核CPU – 因特志强 X5650 – 每个CPU是12核....
  2. 给孩子零花钱培养孩子正确的金钱观价值观 两个娃已经不知不觉7岁8岁了. 媳妇和我商量一下决定给孩子每人每周5英镑的零花钱(Pocket Money). 这样他们慢慢的就有自己的小积蓄备将来不时之需: 比如朋友聚会生日啥的需要准备礼物. 同时, 我们决定不再给孩子买零食(薯片啥的). 孩子一天好几餐, 晚上睡觉前还得吃零食, 我们就多买了很多水果面包, 健康的食物多吃一些总不是啥坏事. 孩子可以用这些零钱买自己想要的东西, 我们也不再过问. 孩子有自己的决定权. 第一周的时候,...
  3. 测测你的幸运 – Linux Fortune-Teller LINUX 下有很好很好玩的命令,之前已经介绍过: figlet, rig, curl. 现在推荐另一个 命令 fortune 是用来随机显示一段(句)话的.fortune 在英文里就是幸运的意思. 这个命令可以不需要 参数 如果没有 可以通过 apt-get...
  4. 负电价活久见: 安装Octopus智能电表省电费甚至赚钱 前几周我的电气公司 Octopus 终于来装智能电表了(Smart Meter),虽然是免费安装的,但是排队排了有两三年了吧。因为之前一直写邮件催的时候就老是说 Not Ready。 收到邮件说可以安装智能电表我还是相当开心和期待的,因为已经听说这玩意好,但是还是得亲身体验一下。工程师来安装大概不到2小时,其中需要停电闸一会儿,重新接下线。装好后,给了个小册子,自动切换到了 Agile 的电价,也就是每半小时的电价都不一样,提前一天可以在手机App和网站上查得。 正好在原来的电价计费合同快要结束前2天换到了智能电表计价 Octopus Agile方式,但是系统还是扣了我75英镑 Exit Fee (提前合同结束得交违约费),不过我一个电话打过去,公司很爽快就给我退了。...
  5. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  6. 你要找什么样的老婆? 找媳妇的标准 昨天和网友在剑桥面基, 网友奔现, 他从爱尔兰过来, 小我12岁, 就聊到了找对象的标准. TLDR; 找老婆不要(只)看颜值, 而要注重性格, 为人处事和顾家等更重要的品质, 当然性和谐也很重要. 在当今社会, 人们对于找伴侣的标准有所不同. 有些人认为颜值是最重要的, 因为外貌吸引力可以让人在日常生活中感到愉悦, 这是人的本性,...
  7. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  8. 给STEEM中文微信群加了个机器人 之前说到我的公众号 justyyuk 可以查询几种虚拟货币的实时价钱, 但是有点不方便, 因为很多朋友在群里聊天得切换到公众号, 这下好了, 今天往STEEM中文微信群(还有编程群)加了个机器人, 在聊天的时候想了解价钱就直接输入货币代号即可, 如: 既方便自己, 又能方便别人(省事, 价格信息会同时显示给其它成员). 注: 这机器人不是我做的, 只是我拉进来的,...

基于P站(Poloniex)的广度优先搜索算法来获得任意两种币的兑换价格


币圈的P站是Poloniex,前几年被孙宇晨收购了,它是一个交易所。我很久之前用过Poloniex,当时对其印象并不是很好。

不过,现在我对其好感增加,因为币安买下的coinmarketcap免费的接口就很多限制。

官方文档),这个接口的频率限制是一秒200次,很慷慨了。

https://api.poloniex.com/markets/price

能返回所有交易配对,比如这样的:

[
    {
        "symbol": "BTS_BTC",
        "price": "0.0000000186",
        "time": 1731852313035,
        "dailyChange": "-0.0462",
        "ts": 1731852313054
    },
    {
        "symbol": "DASH_BTC",
        "price": "0.000317",
        "time": 1731848096481,
        "dailyChange": "0.0063",
        "ts": 1731848096489
    },
    ... ...
]

这个JSON返回的结构是一个数组,每个元素是个结构体,也就是一个币价的具体配对信息,我们可以看成是一条边Edge两个顶点Vertice,这样就是一个图结构(带权图 Weighted Graph,权值就是兑换价格),虽然给的是单边,但其实是个双向的,比如USD_BTC得值可以反过来推得BTC到USD的价格。我们可以设计一个算法,从币价A到币价B,可以通过BFS广度优先搜索算法来获取价格。比如有配对A_B、B_C、C_D我们就可以获得A_D的值。

深度优先搜索算法DFS也可以,不过这个算法会返回找到的第一条路径,并不能保证是最短的,最短的确实是最准确的,因为链也长,转换精度就会下降。

当然,可能存在多条路径,最理想的状态是把这些路径都求出来,取个平均啥的,不过这样就得暴力搜索所有的路径了,算法时间复杂度就会比较高。

以下是BFS广度优先算法的代码,Javascript的,可以用于网页前端或者NodeJs后端,甚至是CloudFlare Serverless Worker或者是其它无服务框架:Azure Function、AWS Lambda等。

const fetch = require('node-fetch');

async function getTicker(a, b) {
  try {
    const response = await fetch('https://api.poloniex.com/markets/price');
    const data = await response.json();

    // 创建一个哈希表来存储代币对及其价格
    const pairMap = new Map();

    // 使用直接对及其反向对填充哈希表
    for (const { symbol, price } of data) {
      const [base, quote] = symbol.split('_').map(token => token.toLowerCase());
      if (!pairMap.has(base)) pairMap.set(base, new Map());
      if (!pairMap.has(quote)) pairMap.set(quote, new Map());
      
      pairMap.get(base).set(quote, parseFloat(price));
      pairMap.get(quote).set(base, 1 / parseFloat(price)); // 添加反向边
    }

    // 将 token 转换为小写
    a = a.toLowerCase();
    b = b.toLowerCase();

    // BFS 查找从 a 到 b 的转换率
    const queue = [[a, 1]]; // 从初始代币和兑换率 1 开始
    const visited = new Set([a]);

    while (queue.length > 0) {
      const [currentToken, currentRate] = queue.shift();

      if (currentToken === b) return currentRate;

      // Check connected tokens
      for (const [nextToken, rate] of (pairMap.get(currentToken) || new Map())) {
        if (!visited.has(nextToken)) {
          visited.add(nextToken);
          queue.push([nextToken, currentRate * rate]);
        }
      }
    }

    // 如果未找到路径,则返回 null
    return null;
  } catch (error) {
    console.error("获取或处理数据时出错:", error);
    return null;
  }
}

// Example usage:
(async () => {
  const rate = await getTicker('btc', 'trx');
  console.log('BTC 到 TRX 的兑换率:', rate);
})();

代码的一些简单说明:

  • API 数据提取:从 P站 API 提取数据并将响应解析为 JSON。
  • 映射对:以每个代币作为键创建一个映射,其中值是它可以直接转换为的另一个代币映射,以及兑换率。
  • 双向映射:通过反转反向转换的价格来存储直接对和反向对。
  • 广度优先搜索:使用队列遍历从 a 到 b 的路径。对于每个代币,都会检查其邻居(可转换代币)。如果找到 b,该函数将返回累积率;如果没有,则继续,直到所有选项都用尽。
  • 处理无路径:如果未找到转换路径,则函数返回 null。

如果有多组兑换,我们可以改成传入一个数组,这样就不用多次调用P站的API了。

const fetch = require('node-fetch');

async function getToken(pairs) {
  try {
    const response = await fetch('https://api.poloniex.com/markets/price');
    const data = await response.json();

    // 创建一个哈希表来存储代币对及其价格
    const pairMap = new Map();

    // 使用直接对及其反向对填充哈希表
    for (const { symbol, price } of data) {
      const [base, quote] = symbol.split('_').map(token => token.toLowerCase());
      if (!pairMap.has(base)) pairMap.set(base, new Map());
      if (!pairMap.has(quote)) pairMap.set(quote, new Map());
      
      pairMap.get(base).set(quote, parseFloat(price));
      pairMap.get(quote).set(base, 1 / parseFloat(price)); // 添加一条反向边
    }

    // 使用 BFS 查找单个对的转换率的辅助函数
    const findConversionRate = (a, b) => {
      a = a.toLowerCase();
      b = b.toLowerCase();
      
      if (a === b) return 1; // 直接转换

      const queue = [[a, 1]];
      const visited = new Set([a]);

      while (queue.length > 0) {
        const [currentToken, currentRate] = queue.shift(); // 出队列

        if (currentToken === b) return currentRate;

        for (const [nextToken, rate] of (pairMap.get(currentToken) || new Map())) {
          if (!visited.has(nextToken)) {
            visited.add(nextToken);
            queue.push([nextToken, currentRate * rate]);
          }
        }
      }

      return null; // 路径没找到
    };

    // 迭代列表并查找转换率
    const results = pairs.map(([a, b]) => findConversionRate(a, b));
    return results;
  } catch (error) {
    console.error("Error fetching or processing data:", error);
    return pairs.map(() => null); // 如果有错误,则返回每对的 null
  }
}

// Example usage:
(async () => {
  const conversionRates = await getToken([['btc', 'trx'], ['usd', 'steem']]);
  console.log('兑换结果:', conversionRates);
})();

简单的代码说明:

  • 参数更新:getToken 现在接受成对的元组数组,其中每个元组代表一对 [a, b]。
  • 辅助函数:findConversionRate 处理每对的转换,实现与以前相同的 BFS 方法。
  • 映射每对:函数迭代数组里的每个配对币,应用 findConversionRate 计算转换率,并将结果存储在数组中。
  • 错误处理:如果出现 API 或处理错误,则返回一个空值数组,与输入数组的长度匹配。

这个修改后的函数现在可以接受一个数组,并在一次Poloniex API调用中返回数组里每个配对的兑换率。

英文:Crypto Token Exchange Rate Computation Based on Breadth First Search Algorithm on Poloniex API

区块链技术

Crypto虚拟货币交易所

交易所跑路啦

本文一共 1127 个汉字, 你数一下对不对.
基于P站(Poloniex)的广度优先搜索算法来获得任意两种币的兑换价格. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 基于P站(Poloniex)的广度优先搜索算法来获得任意两种币的兑换价格 Javascript Poloniex P站 交易所 Crypto Exchanges 加密货币 区块链 比特币 BTC 程序设计 算法 编程 计算机 计算机 软件工程
The post 基于P站(Poloniex)的广度优先搜索算法来获得任意两种币的兑换价格 first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. HPZ800服务器主板太老不支持超过2TB的大硬盘 我家里一直用的是HPZ800服务器, 很吵, 很老, 虽然这台服务器已经有十年之久(我在EBAY上买来用了五年多了), 但是即使放到今天, 这服务器速度依旧很快, 很稳定. 由于服务器用的是ECC较验内存, 所以基本上不重启关机. HPZ800主机有两个硬核CPU – 因特志强 X5650 – 每个CPU是12核....
  2. 给孩子零花钱培养孩子正确的金钱观价值观 两个娃已经不知不觉7岁8岁了. 媳妇和我商量一下决定给孩子每人每周5英镑的零花钱(Pocket Money). 这样他们慢慢的就有自己的小积蓄备将来不时之需: 比如朋友聚会生日啥的需要准备礼物. 同时, 我们决定不再给孩子买零食(薯片啥的). 孩子一天好几餐, 晚上睡觉前还得吃零食, 我们就多买了很多水果面包, 健康的食物多吃一些总不是啥坏事. 孩子可以用这些零钱买自己想要的东西, 我们也不再过问. 孩子有自己的决定权. 第一周的时候,...
  3. 测测你的幸运 – Linux Fortune-Teller LINUX 下有很好很好玩的命令,之前已经介绍过: figlet, rig, curl. 现在推荐另一个 命令 fortune 是用来随机显示一段(句)话的.fortune 在英文里就是幸运的意思. 这个命令可以不需要 参数 如果没有 可以通过 apt-get...
  4. 负电价活久见: 安装Octopus智能电表省电费甚至赚钱 前几周我的电气公司 Octopus 终于来装智能电表了(Smart Meter),虽然是免费安装的,但是排队排了有两三年了吧。因为之前一直写邮件催的时候就老是说 Not Ready。 收到邮件说可以安装智能电表我还是相当开心和期待的,因为已经听说这玩意好,但是还是得亲身体验一下。工程师来安装大概不到2小时,其中需要停电闸一会儿,重新接下线。装好后,给了个小册子,自动切换到了 Agile 的电价,也就是每半小时的电价都不一样,提前一天可以在手机App和网站上查得。 正好在原来的电价计费合同快要结束前2天换到了智能电表计价 Octopus Agile方式,但是系统还是扣了我75英镑 Exit Fee (提前合同结束得交违约费),不过我一个电话打过去,公司很爽快就给我退了。...
  5. ChatGPT-4 使用 Math Wolfram 插件解决数学脑筋急转弯问题 这篇文章, 我们看一个简单的数学问题(脑筋急转弯), 并用 Python 解决它. 我们看一下LLM(大型语言模型): ChatGPT3.5和ChatGPT4. 通过 ChatGPT-Plus 订阅(目前每月 20 美元 + VAT增值税), 我们可以启用...
  6. 微软面试题: 三角形的面积是多少? 据说是一个印度人杀入微软最后的面试, 面试官给了这么一道小学数学几何题: 这哥门也有疑问 可是最后还是坚持 答案 30 (底 X 高 / 2) 不存在 这是个陷井: 这个直角三角形是不存在的. 两个小直角三角形的勾股定理:...
  7. 给STEEM中文微信群加了个机器人 之前说到我的公众号 justyyuk 可以查询几种虚拟货币的实时价钱, 但是有点不方便, 因为很多朋友在群里聊天得切换到公众号, 这下好了, 今天往STEEM中文微信群(还有编程群)加了个机器人, 在聊天的时候想了解价钱就直接输入货币代号即可, 如: 既方便自己, 又能方便别人(省事, 价格信息会同时显示给其它成员). 注: 这机器人不是我做的, 只是我拉进来的,...
  8. Javascript 中 sleep 函数实现 Javascript 中并没有 built-in 的 sleep 函数支持, 在 async/await/Promise 的支持之前, 我们可以用 busy-waiting 的方式来模拟: 1 2 3...

银弹飞过先锋大厦

作者 hutusi
2024年5月28日 21:37
TL;DR 本文13200+字,全文阅读约需20分钟。其中2680字的示例部分为ChatGPT生成,因此可以说本文GPT含量20%,不过该部分详细内容与本文主旨关系不大,且由GPT-4生成,可略过不看。本文简要回顾了从软件及计算机诞生到当前大模型AI时代的软件工程发展历史,并试图从软件工程历史和ChatGPT实践案例中探讨在大模型时代的软件开发模式。
❌
❌