研途教育科技有限公司-线下面试(纸笔作答)

① 用Python生成器写斐波拉契数列

核心知识点:yield

yield 的作用是:把一个函数变成一个"流水线生产器"。

这个函数可以"生产"一系列值,但不像普通函数那样一次性生产所有产品堆在你面前,而是 "生产一个,交货一个,等你需要下一个时再生产下一个" 。这能极大地节省内存,并允许处理无限的数据流。

参考答案:

python 复制代码
 def fibonacci_generator(n=None):
     a, b = 1, 1
     # 计数器,记录已经生成了多少个数
     counter = 0
 ​
     while True:
         # 如果已经生成了 count 个数字,就返回
         if n is not None and counter >= n:
             return
         yield a
         a, b = b, a + b
         counter += 1
 ​
 if __name__ == '__main__':
     print("前10个斐波那契数:")
     fib_gen = fibonacci_generator(10)
     for num in fib_gen:
         print(num, end=' ')
 ​
     print("\n\n无限生成示例(前5个):")
     fib_gen_infinite = fibonacci_generator()
     for i in range(5):
         print(next(fib_gen_infinite), end=" ")

② 优化正方形和长方形的类

原题:请优化以下代码

python 复制代码
 class Rectangle():
     def __init__(self, length, width):
         self.length = length
         self.width = width
 ​
     def area(self):
         return self.length * self.width
 ​
     def perimeter(self):
         return 2 * self.length + 2 * self.width
 ​
 class Square():
     def __init__(self, length):
         self.length = length
 ​
     def area(self):
         return self.length * self.length
 ​
     def perimeter(self):
         return 4 * self.length

参考答案:

python 复制代码
 # 我改了这个函数 -- 少做一次乘法
 def perimeter(self):
         return 2 * (self.length + self.width)
 # 不想写父类来让Rectangle和Square继承了

③ 通过 LangChain 和 Deepseek 对话

python 复制代码
 from langchain_openai import ChatOpenAI
 from langchain.chains import ConversationChain
 from langchain.memory import ConversationBufferMemory
 ​
 # 创建聊天模型
 llm = ChatOpenAI(
     model='deepseek-chat',
     api_key='your_api_key',
     base_url="https://api.deepseek.com"
 )
 ​
 # 创建对话链
 conversation = ConversationChain(
     llm=llm,
     memory=ConversationBufferMemory(),
     verbose=True
 )
 ​
 # 开始对话
 while True:
     user_input = input('Human: ').strip()
     # 设置退出指令
     if user_input.lower() == 'exit':
         print("再见!")
         break
     response = conversation.run(user_input)
     print(f"AI: {response}")

④ 使用requests库发送POST请求

python 复制代码
 import requests
 import json
 ​
 url = 'https://yantu.com.cn'
 ​
 headers = {
     'Content-Type': 'application/json',
     'User-Agent': '...'
 }
 ​
 # 注意这里的 body 是 <class 'dict'>
 body = {
     "name": "张三",
     "age": 30,
     "city": "北京"
 }
 # 将 dict 类型转化为 json 格式
 data = json.dumps(body)
 ​
 response = requests.post(url=url, headers=headers, data=data)
 ​
 if response:
     print(f"状态码: {response.status_code}")
     print("响应内容:")
     # 显示中文需要设置 ensure_ascii=False
     print(json.dumps(response.json(), indent=2, ensure_ascii=False))
 else:
     print(f"无法连接到{url}")

⑤ 谈谈你对对大模型的理解

  1. LLM的基本概念 LLM 是一种基于人工智能的生成式AI系统,专门设计用于理解、生成和操作人类自然语言。这些模型通过在海量文本数据集上进行训练,能够掌握语言的复杂性,包括语法、语义等。

    LLM 的主要特征有:

    • 生成能力:与仅分析或分类文本的传统AI模型不同,LLM 能够创造全新的、连贯的文本内容。
    • 规模庞大:LLM 的"大"主要体现在其参数数量上,这些参数是模型从训练数据中学到的权重和偏差。现代 LLM 如 Qwen 的参数可达1000B个。
  2. LLM 的技术原理 LLM的核心架构基于Transformer网络。Transformer的核心创新是自注意力机制,该机制能够权衡句子中不同词语的重要性,使模型比之前的 RNN 或 LSTM 网络更高效地理解上下文。

    • 训练过程与关键技术:LLM 的训练通常分为预训练阶段和微调两个阶段。词嵌入技术是 LLM 理解语言的关键。它将单词表示为多维向量,使语义相近的词语在向量空间中位置接近,从而捕捉语言的内在规律。
    • 工作方式与局限性: LLM 本质上是概率预测引擎而非真正的"理解者"。它基于已有文本模式预测下一个最可能的词符,并不真正理解语言、事实或伦理道德。这一特性也导致了 LLM 会有幻觉现象、偏见问题、知识过时等局限。
  3. LLM 的应用实践 LLM 正逐步深入专业领域,通过微调可适应法律、医疗等行业的特定需求.在医疗领域,LLM 可辅助疾病诊断;在金融领域,可帮助进行市场分析;在零售领域,则可提升客户互动体验。

相关推荐
Lee川14 小时前
优雅进化的JavaScript:从ES6+新特性看现代前端开发范式
javascript·面试
Lee川18 小时前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
晴殇i20 小时前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
绝无仅有20 小时前
Redis过期删除与内存淘汰策略详解
后端·面试·架构
绝无仅有20 小时前
Redis大Key问题排查与解决方案全解析
后端·面试·架构
AAA梅狸猫21 小时前
Looper.loop() 循环机制
面试
AAA梅狸猫21 小时前
Handler基本概念
面试
Wect1 天前
浏览器缓存机制
前端·面试·浏览器
掘金安东尼1 天前
Fun with TypeScript Generics:玩转 TS 泛型
前端·javascript·面试
掘金安东尼1 天前
Next.js 企业级落地
前端·javascript·面试