回复: 7
跳转到指定楼层
上一主题 下一主题
收起左侧

人类学店面面经

全局:

2025(7-9月) 码农类General 硕士 全职@anthropic - 网上海投 - 技术电面  | 😐 Neutral 😐 Average | Fail | 在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x

7月面的,考的爬虫那道题,follow up是多线程,Beautiful Soup不是真正意义上多线程,需要aiohttp改进下。之前其实跑过了,但是面试时候忘写了个await关键字就挂了。。。from typing import Self
import requests
import asyncio
import time
from bs4 import BeautifulSoup
from urllib.parse import urljoin, urlparse

'''
def getLinksFrom(link: str) -> list[str]:
  try:
    resp = requests.get(link, timeout=5)
    resp.raise_for_status()
  except requests.RequestException as e:
    print(f"Error fetching {link}:{e}")
    return []

  soup = BeautifulSoup(resp.text, "html.parser")
  links = []
  for a in soup.find_all("a", href=True):
    abs_url = urljoin(link, a["href"])
    links.append(abs_url)
  return links

class Solution:
  def __init__(self, max_concurrency=10):
    self.visited = set()
    self.semaphore = asyncio.Semaphore(max_concurrency)
    self.start_hostname = None

  def sanitize(self, url):
    idx = url.find('#')
    if idx > 0:
      url = url[:idx]
    return url

  def get_hostname(self, url):
    return urlparse(url).hostname

  async def dfs(self, url):
    url = self.sanitize(url)
    if url in self.visited or self.get_hostname(url
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
    url = self.sanitize(url)
        if url in self.visited or self.get_hostname(url) != self.start_hostname:
            return
        self.visited.add(url)
        links = await self.get_links_from(url)
        # Crawl links concurrently
        await asyncio.gather(*(self.dfs(link) for link in links))

def main():
    start_url = ""
    crawler = AsyncCrawler()
    result = asyncio.run(crawler.crawl(start_url))
    print(f"\nCrawled {len(result)} URLs:\n")
    for url in sorted(result):
        print(url)

if __name__ == "__main__":
    main()



评分

参与人数 1大米 +10 收起 理由
匿名用户-2EIA9 + 10 欢迎分享你知道的情况,会给更多大米奖励!

查看全部评分


上一篇:TikTok USDS MLE凉凉面试
下一篇:Rippling 店面
地里匿名用户
🔗
匿名用户-PPYFY  2025-9-18 05:04:44
请问一下,threading还是async是自己可以随便选吗,还是面试官明确要求要用async?
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-1GIDF  2025-9-18 05:15:13 来自APP
同好奇 不让用future吗
回复

使用道具 举报

🔗
 楼主| CSholic 2025-9-18 06:38:45 来自APP | 只看该作者
全局:
匿名用户 发表于 2025-09-17 14:04:44
请问一下,threading还是async是自己可以随便选吗,还是面试官明确要求要用async?
面试官没说,自己drive的
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-1GIDF  2025-9-18 08:14:22 来自APP
CSholic 发表于 2025-09-17 15:38:45
面试官没说,自己drive的
原来如此。beautifulsoap也是自己选的? 还以为他们会提供返回一个网页上url的接口
回复

使用道具 举报

🔗
 楼主| CSholic 2025-9-18 08:53:41 来自APP | 只看该作者
全局:
匿名用户 发表于 2025-09-17 17:14:22
原来如此。beautifulsoap也是自己选的? 还以为他们会提供返回一个网页上url的接口
这个是他们给的,不过follow up的时候会问哪还能改进,因为这个接口不是真正多线程,所以要用aiohttp
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-1GIDF  2025-9-22 07:36:49
CSholic 发表于 2025-9-17 17:53
这个是他们给的,不过follow up的时候会问哪还能改进,因为这个接口不是真正多线程,所以要用aiohttp

所以楼主给的一堆function里
def getLinksFrom(link: str) -> list[str]:是他们给的,DFS是自己写的?
回复

使用道具 举报

全局:
匿名用户 发表于 2025-9-21 15:36
所以楼主给的一堆function里
def getLinksFrom(link: str) -> list[str]:是他们给的,DFS是自己写的?

同问
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表