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

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

相关推荐
han_2 小时前
前端高频面试题之Vue-router篇
前端·vue.js·面试
ShineWinsu7 小时前
对于数据结构:链式二叉树的超详细保姆级解析—中
数据结构·c++·算法·面试·二叉树·校招·递归
沐怡旸7 小时前
【穿越Effective C++】条款20:宁以pass-by-reference-to-const替换pass-by-value——参数传递的效率与语义
c++·面试
soda_yo7 小时前
搞不懂作用域链?这篇文章让你一眼秒懂!
javascript·面试
沐怡旸7 小时前
【底层机制】Ashmem匿名共享内存:原理与应用深度解析
android·面试
一名机电研究生10 小时前
华为、阿里巴巴、字节跳动 100+ Linux面试问题总结(一)
linux·华为·面试
张彦峰ZYF14 小时前
高并发优惠权益聚合接口的优雅实现(含超时控制 + 来源标识 + Fallback 降级)
java·后端·面试
Sailing14 小时前
🔥 React 高频 useEffect 导致页面崩溃的真实案例:从根因排查到彻底优化
前端·react.js·面试
byte轻骑兵15 小时前
【安全函数】C语言安全字符串函数详解:告别缓冲区溢出的噩梦
c语言·安全·面试
程序员爱钓鱼16 小时前
Python 实战:如何读取多格式 Excel 并实现跨表匹配合并(支持 XLS / XLSX)
后端·python·面试