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

① 用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 可辅助疾病诊断;在金融领域,可帮助进行市场分析;在零售领域,则可提升客户互动体验。

相关推荐
Sport2 小时前
面试官:聊聊 Webpack5 的优化方向
前端·面试
Q741_1473 小时前
C++ 位运算 高频面试考点 力扣 268. 丢失的数字 题解 每日一题
c++·算法·leetcode·面试·位运算
꒰ঌ 安卓开发໒꒱13 小时前
Java面试-并发面试(二)
java·开发语言·面试
拉不动的猪13 小时前
回顾关于筛选时的隐式返回和显示返回
前端·javascript·面试
小松XXS19 小时前
elasticsearch面试八股文
大数据·elasticsearch·面试
yinke小琪21 小时前
什么?上班五年还不清楚SafePoint?JVM的“安全点”揭秘
java·后端·面试
野犬寒鸦21 小时前
今日面试之快问快答:Redis篇
java·数据库·redis·后端·缓存·面试·职场和发展
程序员清风1 天前
字节三面:微博大V发博客场景,使用推模式还是拉模式?
java·后端·面试
用户091 天前
Android面试基础篇(一):基础架构与核心组件深度剖析
android·面试·kotlin