ZWD/app.py
st2411020202 1707584a52 feat: 初始化AI面试助手项目基础结构
添加项目基础文件包括:
- 主程序入口main.py
- 依赖管理文件requirements.txt和pyproject.toml
- 项目说明文档README.md
- Git忽略规则文件.gitignore
- 面试历史记录JSON示例文件
- 测试相关资源文件
2026-01-07 15:16:31 +08:00

2792 lines
131 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import streamlit as st
import random
import json
import os
from datetime import datetime
# 设置页面配置
st.set_page_config(
page_title="AI面试助手",
page_icon="🤖",
layout="wide",
initial_sidebar_state="expanded"
)
# 添加自定义CSS样式
st.markdown("""
<style>
/* 主题色定义 */
:root {
--primary-color: #4CAF50;
--secondary-color: #2196F3;
--accent-color: #FF9800;
--text-color: #333333;
--background-color: #f8f9fa;
--card-background: #ffffff;
--border-radius: 8px;
--box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
/* 全局样式 */
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: var(--background-color);
color: var(--text-color);
}
/* 标题样式 */
h1, h2, h3, h4, h5, h6 {
color: var(--primary-color);
font-weight: 600;
}
/* 卡片样式 */
.stCard {
background-color: var(--card-background);
border-radius: var(--border-radius);
padding: 20px;
box-shadow: var(--box-shadow);
margin-bottom: 20px;
}
/* 按钮样式 */
.stButton > button {
background-color: var(--primary-color);
color: white;
border-radius: var(--border-radius);
border: none;
padding: 10px 20px;
font-weight: 500;
transition: all 0.3s ease;
}
.stButton > button:hover {
background-color: #45a049;
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
}
/* 侧边栏样式 */
.sidebar .sidebar-content {
background-color: var(--card-background);
border-radius: var(--border-radius);
padding: 20px;
box-shadow: var(--box-shadow);
}
/* 输入框样式 */
.stTextArea textarea {
border-radius: var(--border-radius);
border: 1px solid #ddd;
padding: 15px;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
/* 选择框样式 */
.stSelectbox select {
border-radius: var(--border-radius);
border: 1px solid #ddd;
padding: 10px;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
/* 复选框样式 */
.stCheckbox input[type="checkbox"] {
accent-color: var(--primary-color);
}
/* 分隔线样式 */
hr {
border: 0;
height: 2px;
background: linear-gradient(to right, var(--primary-color), var(--secondary-color));
margin: 20px 0;
}
/* 面试卡片样式 */
.interview-card {
background-color: var(--card-background);
border-radius: var(--border-radius);
padding: 20px;
box-shadow: var(--box-shadow);
margin-bottom: 20px;
border-left: 4px solid var(--primary-color);
}
/* 响应式调整 */
@media (max-width: 768px) {
.stButton > button {
width: 100%;
margin-bottom: 10px;
}
}
</style>
""", unsafe_allow_html=True)
# 公司类型和对应的岗位映射
company_types = {
"科技互联网": ["Python开发", "前端开发", "后端开发", "UI/UX设计", "数据科学", "产品经理"],
"金融行业": ["财务", "销售", "产品经理"],
"传统企业": ["销售", "市场营销", "人力资源", "行政岗", "运营", "客服"],
"教育培训": ["销售", "人力资源", "运营"],
"医疗健康": ["销售", "市场营销", "运营"],
"制造业": ["销售", "人力资源", "行政岗"],
"咨询服务": ["销售", "市场营销", "产品经理", "人力资源"],
"电子商务": ["运营", "市场营销", "产品经理", "客服", "物流"],
"媒体娱乐": ["内容编辑", "市场营销", "运营", "产品经理", "设计"],
"房地产": ["销售", "市场营销", "行政岗", "客服"],
"交通运输": ["运营", "销售", "人力资源", "行政岗"],
"能源环保": ["技术岗", "销售", "市场营销", "运营"],
"农业食品": ["农业技术", "食品研发", "销售", "运营"],
"建筑工程": ["工程师", "项目经理", "销售", "行政岗"],
"法律法务": ["律师", "法务专员", "行政岗"],
"航空航天": ["工程师", "技术岗", "销售", "运营"],
"文化创意": ["创意设计", "内容编辑", "市场营销", "运营"],
"半导体芯片": ["芯片设计工程师", "工艺工程师", "测试工程师", "封装工程师"],
"生物医药": ["药物研发", "临床研究", "生物信息学", "医药销售"],
"新能源": ["光伏工程师", "电池研发", "风电工程师", "能源管理"],
"人工智能": ["机器学习工程师", "深度学习工程师", "自然语言处理", "计算机视觉"],
"量子计算": ["量子算法工程师", "量子硬件工程师", "量子软件工程师", "量子信息理论"]
}
# 面试问题数据库(包含追问)
interview_questions = {
"芯片设计工程师": [
{
"main_question": "请详细解释CMOS工艺中的闩锁效应(Latch-up),并说明如何在芯片设计中避免这种效应。",
"follow_ups": [
"闩锁效应的物理机制是什么?它与哪些器件结构相关?",
"在深亚微米工艺中,闩锁效应有哪些新的特点?",
"除了传统的防护环,还有哪些先进的闩锁防护技术?"
]
},
{
"main_question": "请解释静态时序分析(STA)的基本原理和关键步骤,以及如何处理时序收敛问题。",
"follow_ups": [
"什么是建立时间(setup time)和保持时间(hold time)?它们的物理意义是什么?",
"在低功耗设计中,如何平衡功耗和时序性能?",
"你熟悉哪些时序优化技术?请举例说明。"
]
},
{
"main_question": "请详细描述你对SoC设计流程的理解包括从规格定义到芯片 tape-out的全过程。",
"follow_ups": [
"在SoC设计中如何管理复杂的IP集成问题",
"芯片验证的主要方法有哪些?各有什么优缺点?",
"你了解哪些先进的SoC设计方法学"
]
},
{
"main_question": "请解释FinFET工艺与传统平面MOSFET的主要区别以及FinFET在性能和功耗方面的优势。",
"follow_ups": [
"FinFET的阈值电压调节方法有哪些",
"在FinFET工艺中短沟道效应是如何被抑制的",
"FinFET工艺对芯片设计有哪些挑战"
]
},
{
"main_question": "请描述你对数字信号处理器(DSP)架构的理解以及如何优化DSP算法的硬件实现。",
"follow_ups": [
"定点DSP和浮点DSP有什么区别各自的应用场景是什么",
"如何平衡DSP的性能、功耗和面积",
"你熟悉哪些先进的DSP架构"
]
}
],
"工艺工程师": [
{
"main_question": "请详细解释光刻工艺的基本原理和关键参数,以及先进光刻技术面临的挑战。",
"follow_ups": [
"什么是分辨率增强技术(RET)?主要包括哪些方法?",
"EUV光刻与传统DUV光刻有什么本质区别",
"如何解决光刻工艺中的套刻精度问题?"
]
},
{
"main_question": "请描述掺杂工艺的主要方法和原理,以及如何控制掺杂浓度和分布。",
"follow_ups": [
"离子注入和扩散掺杂有什么区别?各自的优缺点是什么?",
"如何解决浅结掺杂中的沟道效应?",
"先进工艺中,掺杂工艺面临哪些挑战?"
]
},
{
"main_question": "请解释CMP(化学机械抛光)工艺的基本原理和关键参数,以及如何优化抛光结果。",
"follow_ups": [
"CMP工艺中的平坦化机制是什么",
"如何解决CMP工艺中的碟形效应和侵蚀问题",
"先进工艺中CMP工艺有哪些新的要求"
]
},
{
"main_question": "请详细描述ALD(原子层沉积)工艺的基本原理和优势,以及它在先进工艺中的应用。",
"follow_ups": [
"ALD与传统的PVD和CVD工艺有什么本质区别",
"如何提高ALD工艺的沉积速率",
"ALD工艺在高k金属栅和3D NAND中的应用有哪些"
]
},
{
"main_question": "请解释先进封装工艺中的TSV(硅通孔)技术,以及它与传统封装技术的区别。",
"follow_ups": [
"TSV工艺的主要步骤有哪些各步骤的关键挑战是什么",
"如何解决TSV工艺中的热应力和可靠性问题",
"3D IC封装与传统2D封装相比有哪些优势和挑战"
]
}
],
"量子算法工程师": [
{
"main_question": "请详细解释量子叠加和量子纠缠的基本原理,以及它们在量子算法中的应用。",
"follow_ups": [
"量子叠加与经典概率叠加有什么本质区别?",
"如何通过Bell不等式验证量子纠缠的存在",
"量子纠缠在量子通信和量子计算中有哪些具体应用?"
]
},
{
"main_question": "请描述Shor算法的基本原理和实现步骤以及它对RSA加密系统的威胁。",
"follow_ups": [
"Shor算法的时间复杂度是多少它与经典因子分解算法相比有什么优势",
"在实际的量子计算机上实现Shor算法面临哪些挑战",
"如何抵抗基于Shor算法的量子攻击"
]
},
{
"main_question": "请解释Grover搜索算法的基本原理和应用场景以及它的时间复杂度。",
"follow_ups": [
"Grover算法在非结构化搜索中的加速比是多少",
"如何将Grover算法应用于数据库搜索和优化问题",
"Grover算法的量子电路实现需要哪些量子门"
]
},
{
"main_question": "请详细描述量子傅里叶变换(QFT)的基本原理和实现方法,以及它在量子算法中的重要性。",
"follow_ups": [
"量子傅里叶变换与经典傅里叶变换相比有什么优势?",
"如何优化量子傅里叶变换的电路深度?",
"量子傅里叶变换在哪些量子算法中起到关键作用?"
]
},
{
"main_question": "请解释量子机器学习中的量子神经网络(QNN)的基本原理,以及它与经典神经网络的区别。",
"follow_ups": [
"量子神经网络的参数空间有什么特点?",
"如何训练量子神经网络?有哪些挑战?",
"量子神经网络在哪些问题上可能超越经典神经网络?"
]
}
],
"机器学习工程师": [
{
"main_question": "请详细解释深度学习中的反向传播算法,包括其数学原理和实现细节。",
"follow_ups": [
"反向传播算法中的梯度消失和梯度爆炸问题是如何产生的?如何解决?",
"在深层网络中,如何优化反向传播的计算效率?",
"反向传播算法在递归神经网络(RNN)中的应用有什么特殊之处?"
]
},
{
"main_question": "请解释支持向量机(SVM)的基本原理,包括最大间隔分类器和核技巧。",
"follow_ups": [
"SVM中的软间隔和硬间隔有什么区别",
"如何选择SVM中的核函数不同核函数的适用场景是什么",
"SVM在处理大规模数据集时面临哪些挑战如何解决"
]
},
{
"main_question": "请详细描述决策树和随机森林的工作原理,以及如何防止过拟合。",
"follow_ups": [
"决策树的分裂标准有哪些?各有什么优缺点?",
"随机森林如何通过集成学习提高模型性能?",
"梯度提升树(GBDT)与随机森林相比有什么不同?"
]
},
{
"main_question": "请解释深度学习中的注意力机制以及它在Transformer模型中的应用。",
"follow_ups": [
"注意力机制的数学原理是什么?它如何实现序列到序列的建模?",
"自注意力(Self-Attention)与传统的RNN和CNN相比有什么优势",
"如何优化Transformer模型的计算效率和内存使用"
]
},
{
"main_question": "请详细描述生成对抗网络(GAN)的基本原理和训练方法以及如何评估GAN的性能。",
"follow_ups": [
"GAN训练中的模式崩溃(Mode Collapse)问题是如何产生的?如何解决?",
"不同类型的GAN变体(如DCGAN、WGAN、StyleGAN)各有什么特点?",
"GAN在哪些领域有成功的应用面临哪些挑战"
]
}
],
"药物研发": [
{
"main_question": "请详细解释基于结构的药物设计(SBDD)的基本原理和流程,以及它与传统药物发现方法的区别。",
"follow_ups": [
"分子对接(Molecular Docking)的基本原理是什么?如何评估对接结果的准确性?",
"虚拟筛选(Virtual Screening)中如何处理假阳性和假阴性问题?",
"同源建模(Homology Modeling)在SBDD中的应用有什么局限性"
]
},
{
"main_question": "请解释药物代谢动力学(ADMET)的基本概念和研究内容,以及它在药物研发中的重要性。",
"follow_ups": [
"药物的吸收、分布、代谢、排泄和毒性各有哪些关键影响因素?",
"如何通过药物设计优化ADMET性质",
"体外ADMET筛选与体内实验结果的相关性如何"
]
},
{
"main_question": "请详细描述高通量筛选(HTS)技术的基本原理和应用,以及如何提高筛选效率和准确性。",
"follow_ups": [
"HTS中如何设计和优化筛选模型",
"如何处理HTS中的高假阳性率问题",
"超高通量筛选(Ultra-HTS)与传统HTS相比有什么优势和挑战"
]
},
{
"main_question": "请解释靶向药物设计的基本策略,以及如何选择合适的药物靶点。",
"follow_ups": [
"如何验证药物靶点的有效性和安全性?",
"靶向药物设计中如何平衡选择性和亲和力?",
"蛋白-蛋白相互作用(PPI)作为药物靶点有哪些挑战?"
]
},
{
"main_question": "请详细描述抗体药物的研发流程,包括靶点选择、抗体筛选和人源化。",
"follow_ups": [
"单克隆抗体与多克隆抗体相比有什么优势?",
"抗体人源化的主要方法有哪些?各有什么优缺点?",
"抗体药物偶联物(ADC)的设计原理是什么?如何优化其疗效和安全性?"
]
}
],
"光伏工程师": [
{
"main_question": "请详细解释太阳能电池的基本工作原理,包括光伏效应和电池结构。",
"follow_ups": [
"光伏效应与光电效应有什么区别?",
"太阳能电池的效率极限是多少?由什么因素决定?",
"如何通过材料和结构设计提高太阳能电池的效率?"
]
},
{
"main_question": "请解释晶体硅太阳能电池的制造工艺流程,以及各步骤的关键技术参数。",
"follow_ups": [
"晶体硅太阳能电池的主要损失机制有哪些?如何最小化这些损失?",
"PERC(钝化发射极背面接触)电池的结构和工作原理是什么?",
"TOPCon和HJT等高效电池技术与传统电池相比有什么优势"
]
},
{
"main_question": "请详细描述太阳能电池的特性参数,包括开路电压、短路电流、填充因子和转换效率。",
"follow_ups": [
"这些参数之间有什么内在联系和制约关系?",
"如何通过测试和分析评估太阳能电池的性能?",
"温度和光照强度对太阳能电池性能有什么影响?"
]
},
{
"main_question": "请解释光伏组件的设计原理和制造工艺,以及如何提高组件的可靠性和寿命。",
"follow_ups": [
"光伏组件的主要失效模式有哪些?如何预防?",
"封装材料对光伏组件性能和寿命有什么影响?",
"如何设计和优化光伏系统的功率输出?"
]
},
{
"main_question": "请详细描述薄膜太阳能电池(如CdTe、CIGS、OPV)的工作原理和特点,以及它们与晶体硅电池的区别。",
"follow_ups": [
"不同类型薄膜太阳能电池的优缺点是什么?",
"薄膜太阳能电池的主要技术挑战有哪些?",
"柔性太阳能电池的应用前景和技术难点是什么?"
]
}
],
"农业技术": [
{
"main_question": "请描述你对现代农业技术的理解,以及它在农业发展中的作用。",
"follow_ups": [
"你熟悉哪些现代农业技术?它们各有什么优势?",
"如何将传统农业知识与现代技术相结合?",
"在实际工作中,你如何解决农业技术应用中的问题?"
]
},
{
"main_question": "什么是智慧农业?它包括哪些关键技术?",
"follow_ups": [
"你了解哪些智慧农业的成功案例?",
"如何利用大数据和物联网技术优化农业生产?",
"智慧农业面临哪些挑战?如何应对?"
]
},
{
"main_question": "请解释你对农作物病虫害防治的理解和方法。",
"follow_ups": [
"如何平衡病虫害防治和环境保护?",
"你熟悉哪些生物防治方法?",
"如何利用现代技术提高病虫害防治的效率?"
]
},
{
"main_question": "如何提高农产品的质量和安全性?",
"follow_ups": [
"你了解哪些农产品质量标准?",
"如何建立农产品质量追溯体系?",
"在实际工作中,你如何确保农产品的安全?"
]
},
{
"main_question": "请分享一次你参与农业技术推广或应用的经历。",
"follow_ups": [
"在推广过程中,你遇到了哪些挑战?如何克服的?",
"从这次经历中,你学到了什么?",
"如何评估农业技术推广的效果?"
]
}
],
"食品研发": [
{
"main_question": "请描述你的食品研发流程是怎样的?",
"follow_ups": [
"在研发过程中,你如何确保食品的安全性?",
"如何平衡食品的口感和营养价值?",
"你使用过哪些食品研发工具和技术?"
]
},
{
"main_question": "什么是食品添加剂?如何合理使用食品添加剂?",
"follow_ups": [
"你了解哪些常见的食品添加剂?它们的作用是什么?",
"如何评估食品添加剂的安全性?",
"在研发过程中,你如何控制食品添加剂的使用量?"
]
},
{
"main_question": "请解释你对食品保质期的理解,以及如何延长食品保质期。",
"follow_ups": [
"影响食品保质期的因素有哪些?",
"如何在不影响食品质量的前提下延长保质期?",
"你了解哪些食品保鲜技术?"
]
},
{
"main_question": "如何开发适合特定人群的食品产品?",
"follow_ups": [
"你开发过哪些针对特定人群的食品产品?",
"如何了解特定人群的食品需求?",
"在开发过程中,你如何进行市场调研?"
]
},
{
"main_question": "请分享一次你成功研发的食品产品案例,包括研发目标、过程和结果。",
"follow_ups": [
"在研发过程中,你遇到了哪些挑战?如何克服的?",
"如何评估新产品的市场潜力?",
"从这次经历中,你学到了什么?"
]
}
],
"工程师": [
{
"main_question": "请描述你所熟悉的工程领域,以及你在该领域的专业技能。",
"follow_ups": [
"你参与过哪些工程项目?担任什么角色?",
"你熟悉哪些工程软件和工具?",
"如何不断更新自己的工程知识和技能?"
]
},
{
"main_question": "什么是工程质量管理?如何确保工程项目的质量?",
"follow_ups": [
"你了解哪些质量管理体系?",
"在实际项目中,你如何处理质量问题?",
"如何平衡工程质量和项目进度?"
]
},
{
"main_question": "请解释你对工程安全的理解,以及如何确保工程项目的安全。",
"follow_ups": [
"你了解哪些工程安全标准和规范?",
"在实际项目中,你如何识别和防范安全风险?",
"如何提高团队的安全意识?"
]
},
{
"main_question": "如何进行工程项目的成本控制?",
"follow_ups": [
"在实际项目中,你如何制定和执行成本预算?",
"如何应对项目中的成本超支问题?",
"如何在保证质量的前提下降低项目成本?"
]
},
{
"main_question": "请分享一次你解决工程技术问题的经历。",
"follow_ups": [
"在解决问题过程中,你遇到了哪些挑战?如何克服的?",
"从这次经历中,你学到了什么?",
"如何预防类似问题的再次发生?"
]
}
],
"项目经理": [
{
"main_question": "请描述你对项目管理的理解,以及项目管理的核心流程。",
"follow_ups": [
"你熟悉哪些项目管理方法论?",
"如何制定项目计划和时间表?",
"如何监控项目进度和执行情况?"
]
},
{
"main_question": "什么是项目风险管理?如何识别和应对项目风险?",
"follow_ups": [
"在实际项目中,你遇到过哪些主要风险?如何处理的?",
"如何制定项目风险应对计划?",
"如何评估项目风险的影响程度?"
]
},
{
"main_question": "请解释你对项目团队管理的理解,以及如何打造高效的项目团队。",
"follow_ups": [
"如何分配项目任务和责任?",
"如何处理团队成员之间的冲突?",
"如何激励团队成员的工作积极性?"
]
},
{
"main_question": "如何与项目 stakeholders 有效沟通?",
"follow_ups": [
"你如何识别项目的 stakeholders",
"如何定期向 stakeholders 汇报项目进展?",
"如何处理 stakeholders 的变更请求?"
]
},
{
"main_question": "请分享一次你成功管理项目的经历,包括项目目标、挑战和成果。",
"follow_ups": [
"在项目管理过程中,你遇到了哪些主要挑战?如何克服的?",
"如何评估项目的成功与否?",
"从这次经历中,你学到了什么项目管理经验?"
]
}
],
"律师": [
{
"main_question": "请描述你所专注的法律领域,以及你在该领域的专业经验。",
"follow_ups": [
"你处理过哪些类型的法律案件?",
"你熟悉哪些相关法律法规?",
"如何不断更新自己的法律知识?"
]
},
{
"main_question": "什么是法律风险?如何帮助企业识别和防范法律风险?",
"follow_ups": [
"在实际工作中,你如何为企业提供法律风险评估?",
"如何制定法律风险防范策略?",
"如何向非法律专业人士解释法律风险?"
]
},
{
"main_question": "请解释你对合同管理的理解,以及如何审查和起草合同。",
"follow_ups": [
"在合同审查中,你重点关注哪些条款?",
"如何识别合同中的法律风险?",
"如何处理合同纠纷?"
]
},
{
"main_question": "如何为客户提供有效的法律咨询和建议?",
"follow_ups": [
"如何理解客户的法律需求?",
"如何平衡法律合规和客户利益?",
"如何向客户解释复杂的法律问题?"
]
},
{
"main_question": "请分享一次你成功处理法律案件的经历,包括案件背景、挑战和结果。",
"follow_ups": [
"在处理案件过程中,你遇到了哪些主要挑战?如何克服的?",
"从这次经历中,你学到了什么?",
"如何评估法律案件的胜算?"
]
}
],
"法务专员": [
{
"main_question": "请描述你对企业法务工作的理解,以及法务专员的主要职责。",
"follow_ups": [
"如何协助企业建立和完善法律合规体系?",
"如何处理企业日常法律事务?",
"如何与外部律师和顾问合作?"
]
},
{
"main_question": "什么是法律合规?如何确保企业的法律合规?",
"follow_ups": [
"你了解哪些行业的法律合规要求?",
"如何制定企业法律合规计划?",
"如何进行法律合规培训?"
]
},
{
"main_question": "请解释你对知识产权保护的理解,以及如何保护企业的知识产权。",
"follow_ups": [
"你了解哪些知识产权类型?",
"如何识别和防范知识产权风险?",
"如何处理知识产权纠纷?"
]
},
{
"main_question": "如何协助企业处理劳动法律事务?",
"follow_ups": [
"你了解哪些劳动法律法规?",
"如何制定和审查劳动合同?",
"如何处理劳动争议?"
]
},
{
"main_question": "请分享一次你协助企业解决法律问题的经历。",
"follow_ups": [
"在解决问题过程中,你遇到了哪些挑战?如何克服的?",
"从这次经历中,你学到了什么?",
"如何预防类似问题的再次发生?"
]
}
],
"创意设计": [
{
"main_question": "请描述你的创意设计流程是怎样的?",
"follow_ups": [
"如何激发和收集创意灵感?",
"在设计过程中,你如何与团队协作?",
"你使用过哪些设计工具和软件?"
]
},
{
"main_question": "什么是品牌视觉识别系统?如何设计一个有效的品牌视觉识别系统?",
"follow_ups": [
"你了解哪些成功的品牌视觉识别系统案例?",
"如何确保品牌视觉识别的一致性?",
"如何根据不同媒介调整品牌视觉设计?"
]
},
{
"main_question": "请解释你对用户体验设计的理解,以及如何在创意设计中考虑用户体验。",
"follow_ups": [
"如何进行用户研究和分析?",
"如何将用户需求转化为设计方案?",
"如何测试和优化设计方案?"
]
},
{
"main_question": "如何平衡创意表达和商业需求?",
"follow_ups": [
"在实际项目中,你如何理解和满足客户的商业需求?",
"如何在创意设计中体现品牌价值?",
"如何说服客户接受你的创意方案?"
]
},
{
"main_question": "请分享一次你成功完成的创意设计项目,包括项目目标、挑战和结果。",
"follow_ups": [
"在项目过程中,你遇到了哪些挑战?如何克服的?",
"如何评估设计项目的成功与否?",
"从这次经历中,你学到了什么?"
]
}
],
"Python开发": [
{
"main_question": "请详细解释Python中的GIL全局解释器锁的实现机制以及它对多线程编程的深层影响。",
"follow_ups": [
"GIL的存在对CPU密集型和I/O密集型任务的影响有何不同请具体分析其原因。",
"在Python 3.2+中GIL的实现有哪些改进这些改进如何影响线程切换性能",
"除了使用多进程还有哪些技术可以绕过GIL的限制请比较它们的优缺点。"
]
},
{
"main_question": "请深入分析Python中的内存管理机制包括引用计数、垃圾回收和内存池。",
"follow_ups": [
"Python的循环引用问题是如何产生的垃圾回收器如何检测和处理循环引用",
"Python的分代垃圾回收机制是如何工作的各代的回收策略有什么不同",
"如何在Python中优化内存使用请结合具体场景说明。"
]
},
{
"main_question": "请详细解释Python中的装饰器Decorator的实现原理以及如何实现带参数的装饰器和类装饰器。",
"follow_ups": [
"装饰器的执行时机是什么时候?它如何影响被装饰函数的元数据?",
"如何实现一个装饰器,使其能够保留被装饰函数的文档字符串和函数名?",
"装饰器链的执行顺序是怎样的?请举例说明。"
]
},
{
"main_question": "请深入分析Python中的生成器Generator和协程Coroutine的工作原理以及它们在异步编程中的应用。",
"follow_ups": [
"生成器表达式和列表推导式在内存使用上有什么本质区别请结合big O表示法分析。",
"Python 3.5+引入的async/await语法是如何基于生成器实现的",
"如何使用asyncio库实现高效的异步I/O操作请给出具体示例。"
]
},
{
"main_question": "请详细解释Python中的面向对象编程高级特性包括元类Metaclass、描述符Descriptor和混入Mixin",
"follow_ups": [
"元类的作用是什么?如何使用元类控制类的创建过程?",
"描述符协议的三个方法__get__, __set__, __delete__是如何工作的请实现一个自定义描述符。",
"Mixin模式在Python中的应用场景是什么如何避免Mixin带来的方法名冲突问题"
]
}
],
"产品经理": [
{
"main_question": "请描述你如何进行产品需求分析和优先级排序?",
"follow_ups": [
"如果用户需求与业务目标冲突,你会如何处理?",
"你使用过哪些需求管理工具?它们各有什么优缺点?",
"如何判断一个需求是否值得实现?"
]
},
{
"main_question": "什么是产品路线图?你如何制定一个有效的产品路线图?",
"follow_ups": [
"产品路线图应该包含哪些关键元素?",
"如何与 stakeholders 沟通产品路线图?",
"当市场变化时,你如何调整产品路线图?"
]
},
{
"main_question": "请分享一次你解决产品冲突或挑战的经历。",
"follow_ups": [
"在解决冲突过程中,你遇到了哪些阻力?如何克服的?",
"从这次经历中,你学到了什么?",
"如果类似的情况再次发生,你会采取不同的方法吗?"
]
},
{
"main_question": "如何进行用户研究?你常用的用户研究方法有哪些?",
"follow_ups": [
"如何确定用户研究的样本量?",
"如何处理用户研究中相互矛盾的反馈?",
"你如何确保用户研究结果能够转化为实际的产品改进?"
]
},
{
"main_question": "请解释什么是MVP最小可行产品以及如何确定MVP的范围",
"follow_ups": [
"如何平衡MVP的功能完整性和发布速度",
"MVP发布后如何收集和分析用户反馈",
"你能举例说明一个成功的MVP案例吗"
]
}
],
"行政岗": [
{
"main_question": "请描述你如何安排和协调会议或活动?",
"follow_ups": [
"如何处理会议冲突?",
"在安排大型活动时,你会考虑哪些关键因素?",
"如何确保会议或活动的顺利进行?"
]
},
{
"main_question": "行政工作中经常需要处理突发情况,你能分享一次你的处理经验吗?",
"follow_ups": [
"在处理突发情况时,你如何保持冷静?",
"从这次经历中,你学到了什么?",
"如何预防类似的突发情况再次发生?"
]
},
{
"main_question": "你如何管理办公室物资和设备的采购与维护?",
"follow_ups": [
"如何控制采购成本?",
"如何建立和维护供应商关系?",
"如何确保物资和设备的合理使用?"
]
},
{
"main_question": "请解释你对保密工作的理解和如何确保信息安全?",
"follow_ups": [
"如何处理机密文件?",
"如何防范信息泄露?",
"如果发现信息泄露,你会如何处理?"
]
},
{
"main_question": "你如何与不同部门的同事有效沟通和协作?",
"follow_ups": [
"如何处理部门之间的冲突?",
"如何提高跨部门协作的效率?",
"如何建立良好的同事关系?"
]
}
],
"前端开发": [
{
"main_question": "请解释什么是CSS盒模型标准盒模型和IE盒模型有什么区别",
"follow_ups": [
"如何使用CSS重置盒模型",
"box-sizing属性有哪些取值分别有什么作用",
"在实际项目中,你更倾向于使用哪种盒模型?为什么?"
]
},
{
"main_question": "什么是闭包在JavaScript中闭包有哪些应用场景",
"follow_ups": [
"闭包会导致内存泄漏吗?如何避免?",
"你能写出一个使用闭包的实际例子吗?",
"闭包和立即执行函数表达式IIFE有什么关系"
]
},
{
"main_question": "请描述前端性能优化的常用方法。",
"follow_ups": [
"如何衡量前端性能?",
"在移动端,前端性能优化有哪些特别需要注意的地方?",
"你能举例说明一个你曾经优化过的前端性能问题吗?"
]
},
{
"main_question": "什么是跨域?如何解决跨域问题?",
"follow_ups": [
"CORS和JSONP有什么区别",
"如何在服务器端配置CORS",
"在实际项目中,你更倾向于使用哪种跨域解决方案?为什么?"
]
},
{
"main_question": "请解释React中的虚拟DOM是什么它如何提高性能",
"follow_ups": [
"虚拟DOM和真实DOM有什么区别",
"React的diff算法是如何工作的",
"除了React还有哪些框架使用了虚拟DOM"
]
}
],
"后端开发": [
{
"main_question": "请解释什么是RESTful API它的设计原则是什么",
"follow_ups": [
"RESTful API和GraphQL有什么区别",
"如何设计一个好的RESTful API",
"如何保护RESTful API的安全"
]
},
{
"main_question": "什么是数据库索引?索引有什么优缺点?",
"follow_ups": [
"如何选择合适的列建立索引?",
"索引的类型有哪些?分别适用于什么场景?",
"过多的索引会带来什么问题?"
]
},
{
"main_question": "请描述你对微服务架构的理解。",
"follow_ups": [
"微服务架构和单体架构有什么区别?",
"微服务架构会带来哪些挑战?如何应对?",
"你使用过哪些微服务框架?它们各有什么优缺点?"
]
},
{
"main_question": "如何保证分布式系统的数据一致性?",
"follow_ups": [
"CAP理论是什么在实际项目中如何权衡",
"你了解哪些分布式事务解决方案?",
"在实际项目中,你如何处理数据一致性问题?"
]
},
{
"main_question": "请解释什么是缓存穿透、缓存击穿和缓存雪崩?如何解决这些问题?",
"follow_ups": [
"你使用过哪些缓存技术?它们各有什么优缺点?",
"如何设计一个高效的缓存策略?",
"在实际项目中,你遇到过哪些缓存相关的问题?如何解决的?"
]
}
],
"UI/UX设计": [
{
"main_question": "请描述你的设计流程是怎样的?",
"follow_ups": [
"你的设计流程是如何适应不同项目需求的?",
"在设计过程中,你如何与开发团队协作?",
"你使用过哪些设计工具?它们各有什么优缺点?"
]
},
{
"main_question": "什么是用户体验设计?如何衡量用户体验的好坏?",
"follow_ups": [
"用户体验设计和用户界面设计有什么区别?",
"你使用过哪些用户体验评估方法?",
"如何在设计中平衡用户体验和业务目标?"
]
},
{
"main_question": "请分享一次你从用户反馈中改进设计的经历。",
"follow_ups": [
"你如何收集和分析用户反馈?",
"在改进设计过程中,你遇到了哪些挑战?如何克服的?",
"从这次经历中,你学到了什么?"
]
},
{
"main_question": "如何设计一个响应式网站?需要考虑哪些因素?",
"follow_ups": [
"响应式设计和自适应设计有什么区别?",
"如何测试响应式网站在不同设备上的表现?",
"在设计响应式网站时,你遇到过哪些挑战?如何解决的?"
]
},
{
"main_question": "请解释什么是设计系统?它有什么优势?",
"follow_ups": [
"如何建立一个设计系统?",
"设计系统如何促进团队协作?",
"你了解哪些成功的设计系统案例?"
]
}
],
"数据科学": [
{
"main_question": "请解释什么是机器学习?它与传统编程有什么区别?",
"follow_ups": [
"你熟悉哪些机器学习算法?它们各自适用于什么场景?",
"如何评估机器学习模型的性能?",
"在实际项目中,你如何处理数据不平衡问题?"
]
},
{
"main_question": "什么是特征工程?为什么它在机器学习中如此重要?",
"follow_ups": [
"你常用的特征选择方法有哪些?",
"如何处理缺失值和异常值?",
"在处理高维数据时,你会采用什么策略?"
]
},
{
"main_question": "请描述一个你参与过的数据分析项目,包括项目目标、使用的技术和最终结果。",
"follow_ups": [
"在项目中,你遇到了哪些挑战?如何解决的?",
"你使用了哪些工具和库来完成这个项目?",
"从这个项目中,你学到了什么?"
]
},
{
"main_question": "什么是深度学习?它与传统机器学习有什么区别?",
"follow_ups": [
"你熟悉哪些深度学习框架?它们各自的优缺点是什么?",
"如何处理深度学习中的过拟合问题?",
"在资源有限的情况下,你如何优化深度学习模型?"
]
},
{
"main_question": "请解释什么是大数据?如何处理和分析大数据?",
"follow_ups": [
"你使用过哪些大数据处理工具?",
"在处理大数据时,你如何保证数据质量?",
"如何平衡数据处理的速度和准确性?"
]
}
],
"销售": [
{
"main_question": "请分享一次你成功完成的高难度销售案例,包括客户背景、销售过程和最终结果。",
"follow_ups": [
"在销售过程中,你遇到了哪些挑战?如何克服的?",
"你是如何识别客户需求并提供解决方案的?",
"从这次经历中,你学到了什么销售技巧?"
]
},
{
"main_question": "什么是销售漏斗?如何优化销售漏斗以提高转化率?",
"follow_ups": [
"你如何定义销售漏斗的各个阶段?",
"在每个阶段,你会采取什么策略来推进销售进程?",
"如何衡量销售漏斗的有效性?"
]
},
{
"main_question": "当客户提出异议时,你会如何处理?请举例说明。",
"follow_ups": [
"你常见的客户异议有哪些?",
"如何将客户异议转化为销售机会?",
"在处理异议时,你有什么特别的技巧?"
]
},
{
"main_question": "如何建立和维护长期的客户关系?",
"follow_ups": [
"在客户关系维护中,你认为最重要的是什么?",
"如何识别客户的潜在需求并提供增值服务?",
"如何处理客户投诉和不满?"
]
},
{
"main_question": "请解释你对目标设定和时间管理的理解,以及它们在销售工作中的重要性。",
"follow_ups": [
"你是如何设定销售目标的?",
"如何分解大目标为可执行的小目标?",
"在时间管理方面,你有什么技巧?"
]
}
],
"市场营销": [
{
"main_question": "请解释什么是市场营销?它在企业发展中的作用是什么?",
"follow_ups": [
"你如何理解现代市场营销与传统市场营销的区别?",
"市场营销策略应该如何与企业整体战略对齐?",
"如何衡量市场营销活动的ROI"
]
},
{
"main_question": "什么是数字营销策略?它包括哪些关键组成部分?",
"follow_ups": [
"你熟悉哪些数字营销渠道?它们各自的优缺点是什么?",
"如何制定一个有效的数字营销计划?",
"在数字营销中,如何利用数据分析来优化策略?"
]
},
{
"main_question": "请分享一次你参与策划的成功营销活动,包括活动目标、策略和结果。",
"follow_ups": [
"在活动策划和执行过程中,你遇到了哪些挑战?如何克服的?",
"如何评估活动的成功与否?",
"从这次活动中,你学到了什么?"
]
},
{
"main_question": "什么是品牌建设?如何打造一个成功的品牌?",
"follow_ups": [
"品牌建设包括哪些方面?",
"如何保持品牌的一致性和辨识度?",
"在品牌危机管理方面,你有什么经验?"
]
},
{
"main_question": "如何进行市场调研?市场调研的方法有哪些?",
"follow_ups": [
"如何设计有效的市场调研问卷?",
"如何分析市场调研数据并提取有价值的洞察?",
"市场调研结果如何指导营销策略的制定?"
]
}
],
"财务": [
{
"main_question": "请解释什么是财务报表?它包括哪些主要组成部分?",
"follow_ups": [
"如何分析财务报表来评估企业的财务状况?",
"财务报表中的哪些指标对投资者最为重要?",
"如何识别财务报表中的异常情况?"
]
},
{
"main_question": "什么是预算管理?如何制定和执行有效的预算?",
"follow_ups": [
"预算编制的流程是怎样的?",
"如何监控预算执行情况并进行调整?",
"在预算管理中,你遇到过哪些挑战?如何克服的?"
]
},
{
"main_question": "请解释什么是成本核算?它在企业管理中的作用是什么?",
"follow_ups": [
"你熟悉哪些成本核算方法?它们各自适用于什么场景?",
"如何通过成本核算来优化企业的成本结构?",
"如何处理间接成本的分配问题?"
]
},
{
"main_question": "什么是内部控制?如何建立有效的内部控制体系?",
"follow_ups": [
"内部控制的目标是什么?",
"如何评估内部控制的有效性?",
"在内部控制方面,你有什么经验或案例?"
]
},
{
"main_question": "请解释什么是税务筹划?它与逃税有什么区别?",
"follow_ups": [
"税务筹划的基本原则是什么?",
"如何在合法合规的前提下进行税务筹划?",
"你熟悉哪些常见的税务筹划方法?"
]
}
],
"人力资源": [
{
"main_question": "请解释什么是人力资源管理?它在企业发展中的作用是什么?",
"follow_ups": [
"你如何理解现代人力资源管理与传统人事管理的区别?",
"人力资源管理的核心职能有哪些?",
"如何衡量人力资源管理的有效性?"
]
},
{
"main_question": "什么是招聘流程?如何设计和优化招聘流程以吸引优秀人才?",
"follow_ups": [
"在招聘过程中,你如何评估候选人的能力和潜力?",
"如何提高招聘效率和质量?",
"在招聘难的情况下,你会采取什么策略?"
]
},
{
"main_question": "请分享一次你参与的员工培训与发展项目,包括项目目标、实施过程和结果。",
"follow_ups": [
"如何评估培训的有效性?",
"如何设计针对不同层次员工的培训计划?",
"从这次项目中,你学到了什么?"
]
},
{
"main_question": "什么是绩效管理?如何建立有效的绩效管理体系?",
"follow_ups": [
"绩效管理的流程是怎样的?",
"如何设定合理的绩效目标?",
"如何处理绩效不佳的员工?"
]
},
{
"main_question": "如何处理员工关系和劳动纠纷?请举例说明。",
"follow_ups": [
"你如何预防劳动纠纷的发生?",
"在处理劳动纠纷时,你会遵循什么原则?",
"如何建立和谐的员工关系?"
]
}
],
"运营": [
{
"main_question": "请解释什么是运营管理?它在企业发展中的作用是什么?",
"follow_ups": [
"你如何理解不同行业的运营管理差异?",
"运营管理的核心指标有哪些?",
"如何衡量运营管理的有效性?"
]
},
{
"main_question": "什么是用户运营?如何提高用户活跃度和留存率?",
"follow_ups": [
"用户运营的核心策略有哪些?",
"如何进行用户分层和精细化运营?",
"如何利用数据分析来优化用户运营策略?"
]
},
{
"main_question": "请分享一次你参与的运营项目,包括项目目标、实施过程和结果。",
"follow_ups": [
"在项目实施过程中,你遇到了哪些挑战?如何克服的?",
"如何评估运营项目的成功与否?",
"从这次项目中,你学到了什么?"
]
},
{
"main_question": "什么是内容运营?如何创作和分发有价值的内容?",
"follow_ups": [
"内容运营的策略是怎样的?",
"如何确定目标受众并定制内容?",
"如何衡量内容的效果?"
]
},
{
"main_question": "如何优化运营流程以提高效率?",
"follow_ups": [
"你使用过哪些运营工具和系统?",
"如何识别运营流程中的瓶颈?",
"在流程优化方面,你有什么经验或技巧?"
]
}
],
"项目经理": [
{
"main_question": "请解释什么是项目管理?它包括哪些核心流程?",
"follow_ups": [
"你熟悉哪些项目管理方法论?它们各自适用于什么场景?",
"如何制定项目计划并跟踪执行情况?",
"如何处理项目变更和风险?"
]
},
{
"main_question": "请分享一次你成功管理的项目,包括项目目标、团队规模、遇到的挑战和最终结果。",
"follow_ups": [
"在项目管理过程中,你是如何领导和激励团队的?",
"如何平衡项目的时间、成本和质量?",
"从这次项目中,你学到了什么?"
]
},
{
"main_question": "什么是项目风险管理?如何识别、评估和应对项目风险?",
"follow_ups": [
"你常见的项目风险有哪些?",
"如何制定风险应对计划?",
"在风险发生时,你会如何处理?"
]
},
{
"main_question": "如何与项目相关方有效沟通和管理他们的期望?",
"follow_ups": [
"项目相关方包括哪些人?",
"如何识别不同相关方的需求和关注点?",
"在沟通中,你有什么技巧或经验?"
]
},
{
"main_question": "请解释什么是敏捷项目管理?它与传统项目管理有什么区别?",
"follow_ups": [
"你熟悉哪些敏捷方法如Scrum、Kanban等。",
"如何在组织中推行敏捷实践?",
"敏捷项目管理的优缺点是什么?"
]
}
],
"客服": [
{
"main_question": "请分享一次你处理过的复杂客户投诉案例,包括投诉内容、处理过程和最终结果。",
"follow_ups": [
"在处理投诉过程中,你遇到了哪些挑战?如何克服的?",
"如何安抚情绪激动的客户?",
"从这次经历中,你学到了什么?"
]
},
{
"main_question": "什么是客户服务?如何提供优质的客户服务?",
"follow_ups": [
"你如何理解客户服务的重要性?",
"优质客户服务的标准是什么?",
"如何在高压环境下保持良好的服务态度?"
]
},
{
"main_question": "如何处理客户的合理和不合理要求?",
"follow_ups": [
"如何判断客户要求的合理性?",
"如何拒绝客户的不合理要求同时保持良好的客户关系?",
"在处理特殊客户时,你有什么技巧?"
]
},
{
"main_question": "什么是客户满意度?如何提高客户满意度?",
"follow_ups": [
"如何测量客户满意度?",
"客户满意度与客户忠诚度有什么关系?",
"如何将客户反馈转化为服务改进的机会?"
]
},
{
"main_question": "如何在团队中协作以提供一致的客户服务体验?",
"follow_ups": [
"在跨部门协作中,你如何确保客户问题得到及时解决?",
"如何与团队成员分享客户反馈和最佳实践?",
"如何处理团队内部的服务标准不一致问题?"
]
}
],
"物流": [
{
"main_question": "请描述你对物流管理的理解,以及物流在企业运营中的作用。",
"follow_ups": [
"物流管理的核心环节有哪些?",
"如何优化物流流程以提高效率?",
"在实际工作中,你遇到过哪些物流挑战?如何解决的?"
]
},
{
"main_question": "什么是供应链管理?它与物流管理有什么区别和联系?",
"follow_ups": [
"供应链管理的目标是什么?",
"如何协调供应链各环节的工作?",
"你熟悉哪些供应链管理工具?"
]
},
{
"main_question": "如何处理物流过程中的突发情况,如延迟、损坏等?",
"follow_ups": [
"你有哪些应对物流风险的策略?",
"如何与客户沟通物流异常情况?",
"如何预防类似问题的再次发生?"
]
},
{
"main_question": "请解释什么是库存管理?如何进行有效的库存控制?",
"follow_ups": [
"库存管理的目标是什么?",
"如何平衡库存成本和客户服务水平?",
"你使用过哪些库存管理方法?"
]
},
{
"main_question": "如何利用技术手段提高物流管理效率?",
"follow_ups": [
"你熟悉哪些物流管理系统?",
"如何应用大数据和物联网技术优化物流?",
"在物流数字化转型方面,你有什么经验?"
]
}
],
"内容编辑": [
{
"main_question": "请描述你对内容编辑工作的理解,以及内容编辑在媒体行业中的作用。",
"follow_ups": [
"内容编辑的核心职责有哪些?",
"如何判断内容的质量和价值?",
"你认为一个好的内容编辑应该具备哪些能力?"
]
},
{
"main_question": "如何进行内容策划和选题?请分享一次你成功的内容策划案例。",
"follow_ups": [
"你如何确定目标受众和内容方向?",
"如何进行市场和竞品分析?",
"如何评估内容策划的效果?"
]
},
{
"main_question": "请解释什么是内容 SEO如何优化内容以提高搜索引擎排名",
"follow_ups": [
"你熟悉哪些 SEO 工具和技术?",
"如何平衡 SEO 需求和内容质量?",
"你有哪些提高内容曝光度的策略?"
]
},
{
"main_question": "如何处理和编辑作者提交的内容?",
"follow_ups": [
"你如何与作者有效沟通修改意见?",
"如何保持内容的一致性和风格统一?",
"你有哪些内容编辑的技巧和方法?"
]
},
{
"main_question": "如何应对内容创作的压力和 deadline",
"follow_ups": [
"你如何管理时间和优先级?",
"如何在压力下保持内容质量?",
"你有哪些提高工作效率的方法?"
]
}
],
"设计": [
{
"main_question": "请描述你的设计理念和设计风格。",
"follow_ups": [
"你的设计灵感来源是什么?",
"如何在设计中体现品牌调性?",
"你如何平衡美学和实用性?"
]
},
{
"main_question": "请分享一次你参与的设计项目,包括项目目标、设计过程和最终结果。",
"follow_ups": [
"在设计过程中,你遇到了哪些挑战?如何克服的?",
"如何与团队成员和客户沟通设计方案?",
"如何根据反馈调整设计?"
]
},
{
"main_question": "你熟悉哪些设计工具和软件?请评价它们的优缺点。",
"follow_ups": [
"你如何选择适合项目的设计工具?",
"你有哪些提高设计效率的技巧?",
"你如何保持对新工具和新技术的学习?"
]
},
{
"main_question": "请解释什么是用户体验设计?它在设计过程中的重要性是什么?",
"follow_ups": [
"你如何进行用户研究和用户测试?",
"如何将用户反馈整合到设计中?",
"你有哪些提升用户体验的设计原则?"
]
},
{
"main_question": "如何应对设计需求的变化和压力?",
"follow_ups": [
"你如何管理多个设计项目和 deadline",
"如何在有限的资源下完成高质量的设计?",
"你如何处理设计被否定的情况?"
]
}
],
"技术岗": [
{
"main_question": "请描述你的技术背景和专长领域。",
"follow_ups": [
"你最擅长的技术栈是什么?",
"你如何保持技术能力的更新和提升?",
"你有哪些解决技术难题的经验?"
]
},
{
"main_question": "请分享一次你参与的技术项目,包括项目目标、技术挑战和最终结果。",
"follow_ups": [
"你在项目中担任什么角色?",
"如何与团队成员协作解决技术问题?",
"从这次项目中,你学到了什么?"
]
},
{
"main_question": "如何进行技术方案设计和评估?",
"follow_ups": [
"你如何权衡不同技术方案的优缺点?",
"如何考虑技术方案的可扩展性和可维护性?",
"你有哪些技术选型的原则?"
]
},
{
"main_question": "请解释什么是技术创新?如何在工作中推动技术创新?",
"follow_ups": [
"你有哪些创新的技术解决方案?",
"如何平衡技术创新和项目进度?",
"你如何评估技术创新的价值?"
]
},
{
"main_question": "如何应对技术压力和挑战?",
"follow_ups": [
"你如何管理技术债务?",
"如何在有限的时间内解决复杂的技术问题?",
"你有哪些提高技术团队效率的方法?"
]
}
]
}
# 评分标准和建议
scoring_criteria = {
"Python开发": {
"优秀": "回答全面准确,包含技术细节和实际应用场景",
"良好": "回答基本正确,有一定的技术理解",
"一般": "回答部分正确,但缺乏深度和细节",
"需要改进": "回答存在错误,需要加强基础知识学习",
"suggestions": {
"优秀": "继续保持技术深度关注Python生态系统的最新发展",
"良好": "建议深入学习Python底层原理如GIL、内存管理等",
"一般": "建议多做实际项目,积累编程经验",
"需要改进": "建议系统学习Python基础知识从语法和数据结构开始"
}
},
"产品经理": {
"优秀": "回答体现了系统性思维和丰富的实践经验",
"良好": "回答思路清晰,有一定的产品思维",
"一般": "回答基本合理,但缺乏深度和方法论",
"需要改进": "回答缺乏逻辑,需要加强产品管理知识学习",
"suggestions": {
"优秀": "继续保持系统性思维,关注用户体验和市场趋势",
"良好": "建议学习产品管理方法论,如敏捷开发、用户研究等",
"一般": "建议多参与实际产品项目,积累实战经验",
"需要改进": "建议系统学习产品管理基础知识,从需求分析开始"
}
},
"行政岗": {
"优秀": "回答体现了良好的组织能力和问题解决能力",
"良好": "回答思路清晰,有一定的工作经验",
"一般": "回答基本合理,但缺乏具体案例",
"需要改进": "回答过于笼统,需要加强实际工作能力",
"suggestions": {
"优秀": "继续保持专业素养,关注办公自动化和效率提升",
"良好": "建议积累更多具体工作案例,提升问题解决能力",
"一般": "建议多参与实际行政工作,积累实战经验",
"需要改进": "建议系统学习行政工作流程和规范"
}
},
"前端开发": {
"优秀": "回答技术细节准确,包含前端最佳实践和性能优化思路",
"良好": "回答基本正确,有一定的前端开发经验",
"一般": "回答部分正确,但缺乏对现代前端框架的理解",
"需要改进": "回答存在技术错误,需要加强前端基础知识学习",
"suggestions": {
"优秀": "继续关注前端技术发展,深入学习性能优化和架构设计",
"良好": "建议学习现代前端框架和工具如React、Vue、Webpack等",
"一般": "建议多做前端项目,积累实战经验",
"需要改进": "建议系统学习前端基础知识从HTML、CSS、JavaScript开始"
}
},
"后端开发": {
"优秀": "回答技术架构清晰,包含系统设计和性能优化考虑",
"良好": "回答基本正确,有一定的后端开发经验",
"一般": "回答部分正确,但缺乏对分布式系统的理解",
"需要改进": "回答存在技术错误,需要加强后端基础知识学习",
"suggestions": {
"优秀": "继续深入学习分布式系统和微服务架构",
"良好": "建议学习系统设计和性能优化技术",
"一般": "建议多做后端项目,积累实战经验",
"需要改进": "建议系统学习后端基础知识,从数据库和网络开始"
}
},
"UI/UX设计": {
"优秀": "回答体现了用户中心设计思维,包含具体的设计方法论",
"良好": "回答思路清晰,有一定的设计经验",
"一般": "回答基本合理,但缺乏对用户研究的理解",
"需要改进": "回答过于主观,需要加强设计理论和实践学习",
"suggestions": {
"优秀": "继续深入学习用户研究和交互设计原理",
"良好": "建议学习设计系统和原型工具使用",
"一般": "建议多参与实际设计项目,积累实战经验",
"需要改进": "建议系统学习设计基础知识,从色彩理论开始"
}
},
"数据科学": {
"优秀": "回答技术细节准确,包含数据分析思路和模型选择依据",
"良好": "回答基本正确,有一定的数据分析能力",
"一般": "回答部分正确,但缺乏对算法原理的深入理解",
"需要改进": "回答存在技术错误,需要加强数据科学基础知识学习",
"suggestions": {
"优秀": "继续深入学习机器学习算法和大数据技术",
"良好": "建议学习数据可视化和特征工程技术",
"一般": "建议多参与数据分析项目,积累实战经验",
"需要改进": "建议系统学习数据科学基础知识,从统计学开始"
}
},
"销售": {
"优秀": "回答体现了出色的销售技巧和客户洞察能力",
"良好": "回答思路清晰,有一定的销售经验",
"一般": "回答基本合理,但缺乏具体的销售策略和案例",
"需要改进": "回答过于理论化,需要加强实际销售技巧的学习",
"suggestions": {
"优秀": "继续深入学习客户关系管理和销售谈判技巧",
"良好": "建议学习销售漏斗管理和客户分类策略",
"一般": "建议多参与实际销售工作,积累实战经验",
"需要改进": "建议系统学习销售基础知识,从产品知识开始"
}
},
"市场营销": {
"优秀": "回答体现了系统性的营销思维和创新策略",
"良好": "回答思路清晰,有一定的营销经验",
"一般": "回答基本合理,但缺乏对市场趋势的深入分析",
"需要改进": "回答过于传统,需要加强现代营销理念的学习",
"suggestions": {
"优秀": "继续深入学习数字营销和品牌建设策略",
"良好": "建议学习市场调研和营销策略制定",
"一般": "建议多参与实际营销项目,积累实战经验",
"需要改进": "建议系统学习营销基础知识从4P理论开始"
}
},
"财务": {
"优秀": "回答财务知识准确,包含财务分析和决策思路",
"良好": "回答基本正确,有一定的财务知识",
"一般": "回答部分正确,但缺乏对财务原理的深入理解",
"需要改进": "回答存在财务知识错误,需要加强财务基础知识学习",
"suggestions": {
"优秀": "继续深入学习财务分析和投资决策",
"良好": "建议学习财务报表分析和预算管理",
"一般": "建议多参与实际财务工作,积累实战经验",
"需要改进": "建议系统学习财务基础知识,从会计原理开始"
}
},
"人力资源": {
"优秀": "回答体现了战略性人力资源管理思维和实践经验",
"良好": "回答思路清晰,有一定的人力资源管理经验",
"一般": "回答基本合理,但缺乏对人力资源体系的整体理解",
"需要改进": "回答过于事务性,需要加强人力资源管理理论学习",
"suggestions": {
"优秀": "继续深入学习人才发展和组织变革管理",
"良好": "建议学习绩效管理和薪酬体系设计",
"一般": "建议多参与实际人力资源项目,积累实战经验",
"需要改进": "建议系统学习人力资源基础知识,从招聘流程开始"
}
},
"运营": {
"优秀": "回答体现了系统化的运营思维和数据驱动的决策能力",
"良好": "回答思路清晰,有一定的运营经验",
"一般": "回答基本合理,但缺乏对运营策略的深入分析",
"需要改进": "回答过于碎片化,需要加强运营体系化思维的培养",
"suggestions": {
"优秀": "继续深入学习增长黑客和用户运营策略",
"良好": "建议学习数据运营和内容运营技巧",
"一般": "建议多参与实际运营项目,积累实战经验",
"需要改进": "建议系统学习运营基础知识,从用户生命周期开始"
}
},
"项目经理": {
"优秀": "回答体现了全面的项目管理能力和风险应对策略",
"良好": "回答思路清晰,有一定的项目管理经验",
"一般": "回答基本合理,但缺乏对项目管理体系的整体理解",
"需要改进": "回答过于片面,需要加强项目管理方法论的学习",
"suggestions": {
"优秀": "继续深入学习敏捷项目管理和风险管理",
"良好": "建议学习项目管理工具和沟通技巧",
"一般": "建议多参与实际项目管理,积累实战经验",
"需要改进": "建议系统学习项目管理基础知识从PMBOK开始"
}
},
"客服": {
"优秀": "回答体现了出色的客户服务意识和问题解决能力",
"良好": "回答思路清晰,有一定的客户服务经验",
"一般": "回答基本合理,但缺乏对客户心理的深入理解",
"需要改进": "回答过于机械,需要加强客户服务技巧的学习",
"suggestions": {
"优秀": "继续深入学习客户心理学和冲突管理技巧",
"良好": "建议学习服务标准化和客户满意度管理",
"一般": "建议多参与实际客服工作,积累实战经验",
"需要改进": "建议系统学习客服基础知识,从服务礼仪开始"
}
},
"芯片设计工程师": {
"优秀": "回答技术细节准确,包含芯片设计原理和验证方法",
"良好": "回答基本正确,有一定的芯片设计经验",
"一般": "回答部分正确,但缺乏对先进工艺的理解",
"需要改进": "回答存在技术错误,需要加强芯片设计基础知识学习",
"suggestions": {
"优秀": "继续深入学习先进工艺和设计方法学",
"良好": "建议学习芯片验证技术和DFT方法",
"一般": "建议多参与芯片设计项目,积累实战经验",
"需要改进": "建议系统学习芯片设计基础知识,从数字电路开始"
}
},
"芯片验证工程师": {
"优秀": "回答体现了深厚的验证理论基础和丰富的项目经验",
"良好": "回答基本正确,有一定的验证经验",
"一般": "回答部分正确但缺乏对UVM等验证方法学的深入理解",
"需要改进": "回答存在技术错误,需要加强验证基础知识学习",
"suggestions": {
"优秀": "继续深入学习形式化验证和低功耗验证技术",
"良好": "建议学习UVM验证方法学和系统验证技术",
"一般": "建议多参与芯片验证项目,积累实战经验",
"需要改进": "建议系统学习验证基础知识,从逻辑仿真开始"
}
},
"芯片工艺工程师": {
"优秀": "回答技术细节准确,包含半导体工艺原理和设备知识",
"良好": "回答基本正确,有一定的工艺经验",
"一般": "回答部分正确,但缺乏对先进工艺节点的理解",
"需要改进": "回答存在技术错误,需要加强工艺基础知识学习",
"suggestions": {
"优秀": "继续深入学习先进工艺技术和良率优化方法",
"良好": "建议学习工艺集成和设备维护知识",
"一般": "建议多参与工艺开发项目,积累实战经验",
"需要改进": "建议系统学习半导体工艺基础知识,从晶圆制造开始"
}
},
"芯片封装工程师": {
"优秀": "回答技术细节准确,包含封装设计原理和可靠性分析",
"良好": "回答基本正确,有一定的封装经验",
"一般": "回答部分正确,但缺乏对先进封装技术的理解",
"需要改进": "回答存在技术错误,需要加强封装基础知识学习",
"suggestions": {
"优秀": "继续深入学习先进封装技术和热管理方法",
"良好": "建议学习封装可靠性分析和失效机制",
"一般": "建议多参与封装设计项目,积累实战经验",
"需要改进": "建议系统学习封装基础知识,从引线键合开始"
}
},
"量子算法工程师": {
"优秀": "回答技术细节准确,包含量子计算原理和算法设计",
"良好": "回答基本正确,有一定的量子算法经验",
"一般": "回答部分正确,但缺乏对量子计算硬件的理解",
"需要改进": "回答存在技术错误,需要加强量子计算基础知识学习",
"suggestions": {
"优秀": "继续深入学习先进工艺和设计方法学",
"良好": "建议学习芯片验证技术和DFT方法",
"一般": "建议多参与芯片设计项目,积累实战经验",
"需要改进": "建议系统学习芯片设计基础知识,从数字电路开始"
}
},
"量子硬件工程师": {
"优秀": "回答技术细节准确,包含量子比特设计和控制系统",
"良好": "回答基本正确,有一定的量子硬件经验",
"一般": "回答部分正确,但缺乏对量子纠错的理解",
"需要改进": "回答存在技术错误,需要加强量子硬件基础知识学习",
"suggestions": {
"优秀": "继续深入学习量子纠错和量子系统集成",
"良好": "建议学习量子比特操控和测量技术",
"一般": "建议多参与量子硬件项目,积累实战经验",
"需要改进": "建议系统学习量子硬件基础知识,从量子力学开始"
}
},
"量子软件工程师": {
"优秀": "回答技术细节准确,包含量子编程语言和软件架构",
"良好": "回答基本正确,有一定的量子软件经验",
"一般": "回答部分正确,但缺乏对量子算法的深入理解",
"需要改进": "回答存在技术错误,需要加强量子软件基础知识学习",
"suggestions": {
"优秀": "继续深入学习量子编程范式和量子软件开发工具",
"良好": "建议学习量子算法和量子模拟器开发",
"一般": "建议多参与量子软件项目,积累实战经验",
"需要改进": "建议系统学习量子软件基础知识,从量子编程入门开始"
}
},
"量子应用科学家": {
"优秀": "回答体现了深厚的量子力学基础和跨学科应用能力",
"良好": "回答基本正确,有一定的量子应用经验",
"一般": "回答部分正确,但缺乏对特定领域应用的深入理解",
"需要改进": "回答存在技术错误,需要加强量子应用基础知识学习",
"suggestions": {
"优秀": "继续深入学习量子技术在特定领域的应用",
"良好": "建议学习量子机器学习和量子化学等应用领域",
"一般": "建议多参与量子应用项目,积累实战经验",
"需要改进": "建议系统学习量子应用基础知识,从相关领域交叉知识开始"
}
},
"算法工程师": {
"优秀": "回答技术细节准确,包含算法设计原理和复杂度分析",
"良好": "回答基本正确,有一定的算法经验",
"一般": "回答部分正确,但缺乏对高级算法的深入理解",
"需要改进": "回答存在技术错误,需要加强算法基础知识学习",
"suggestions": {
"优秀": "继续深入学习高级算法和数据结构",
"良好": "建议学习算法复杂度分析和优化技术",
"一般": "建议多参与算法项目,积累实战经验",
"需要改进": "建议系统学习算法基础知识,从排序算法开始"
}
},
"机器学习工程师": {
"优秀": "回答技术细节准确,包含机器学习算法原理和工程实践",
"良好": "回答基本正确,有一定的机器学习经验",
"一般": "回答部分正确,但缺乏对深度学习的深入理解",
"需要改进": "回答存在技术错误,需要加强机器学习基础知识学习",
"suggestions": {
"优秀": "继续深入学习深度学习和强化学习技术",
"良好": "建议学习模型优化和部署技术",
"一般": "建议多参与机器学习项目,积累实战经验",
"需要改进": "建议系统学习机器学习基础知识,从线性回归开始"
}
},
"AI研究科学家": {
"优秀": "回答体现了深厚的AI理论基础和创新能力",
"良好": "回答基本正确有一定的AI研究经验",
"一般": "回答部分正确但缺乏对前沿AI技术的深入理解",
"需要改进": "回答存在技术错误需要加强AI基础知识学习",
"suggestions": {
"优秀": "继续深入研究前沿AI技术和理论",
"良好": "建议学习AI伦理和负责任AI开发",
"一般": "建议多参与AI研究项目积累实战经验",
"需要改进": "建议系统学习AI基础知识从机器学习基础开始"
}
},
"AI产品经理": {
"优秀": "回答体现了对AI技术和产品管理的深入理解",
"良好": "回答基本正确有一定的AI产品经验",
"一般": "回答部分正确但缺乏对AI产品落地的深入理解",
"需要改进": "回答存在技术错误需要加强AI产品基础知识学习",
"suggestions": {
"优秀": "继续深入学习AI技术发展趋势和产品创新",
"良好": "建议学习AI产品落地策略和用户体验设计",
"一般": "建议多参与AI产品项目积累实战经验",
"需要改进": "建议系统学习AI产品基础知识从AI技术入门开始"
}
},
"细胞培养技术员": {
"优秀": "回答技术细节准确,包含细胞培养原理和操作规范",
"良好": "回答基本正确,有一定的细胞培养经验",
"一般": "回答部分正确,但缺乏对细胞生物学的深入理解",
"需要改进": "回答存在技术错误,需要加强细胞培养基础知识学习",
"suggestions": {
"优秀": "继续深入学习细胞生物学和培养技术",
"良好": "建议学习细胞分化和细胞系建立技术",
"一般": "建议多参与细胞培养实验,积累实战经验",
"需要改进": "建议系统学习细胞培养基础知识,从无菌操作开始"
}
},
"分子生物学技术员": {
"优秀": "回答技术细节准确,包含分子生物学原理和实验技术",
"良好": "回答基本正确,有一定的分子生物学经验",
"一般": "回答部分正确,但缺乏对基因编辑等技术的深入理解",
"需要改进": "回答存在技术错误,需要加强分子生物学基础知识学习",
"suggestions": {
"优秀": "继续深入学习基因编辑和分子克隆技术",
"良好": "建议学习PCR和测序技术原理",
"一般": "建议多参与分子生物学实验,积累实战经验",
"需要改进": "建议系统学习分子生物学基础知识从DNA结构开始"
}
},
"药物研发科学家": {
"优秀": "回答体现了深厚的药物化学基础和研发经验",
"良好": "回答基本正确,有一定的药物研发经验",
"一般": "回答部分正确,但缺乏对药物筛选的深入理解",
"需要改进": "回答存在技术错误,需要加强药物研发基础知识学习",
"suggestions": {
"优秀": "继续深入学习药物设计和筛选技术",
"良好": "建议学习药物代谢和毒理学",
"一般": "建议多参与药物研发项目,积累实战经验",
"需要改进": "建议系统学习药物研发基础知识,从药物化学开始"
}
},
"临床研究员": {
"优秀": "回答技术细节准确,包含临床试验原理和操作规范",
"良好": "回答基本正确,有一定的临床研究经验",
"一般": "回答部分正确,但缺乏对临床数据管理的深入理解",
"需要改进": "回答存在技术错误,需要加强临床研究基础知识学习",
"suggestions": {
"优秀": "继续深入学习临床试验设计和数据分析",
"良好": "建议学习GCP和临床数据管理规范",
"一般": "建议多参与临床试验项目,积累实战经验",
"需要改进": "建议系统学习临床研究基础知识,从临床试验设计开始"
}
},
"电池研发工程师": {
"优秀": "回答技术细节准确,包含电池原理和材料科学",
"良好": "回答基本正确,有一定的电池研发经验",
"一般": "回答部分正确,但缺乏对电池性能优化的深入理解",
"需要改进": "回答存在技术错误,需要加强电池研发基础知识学习",
"suggestions": {
"优秀": "继续深入学习新型电池材料和结构设计",
"良好": "建议学习电池测试和性能评估技术",
"一般": "建议多参与电池研发项目,积累实战经验",
"需要改进": "建议系统学习电池基础知识,从电化学原理开始"
}
},
"光伏工程师": {
"优秀": "回答技术细节准确,包含光伏原理和系统设计",
"良好": "回答基本正确,有一定的光伏经验",
"一般": "回答部分正确,但缺乏对高效光伏技术的深入理解",
"需要改进": "回答存在技术错误,需要加强光伏基础知识学习",
"suggestions": {
"优秀": "继续深入学习高效光伏技术和系统集成",
"良好": "建议学习光伏系统设计和并网技术",
"一般": "建议多参与光伏项目,积累实战经验",
"需要改进": "建议系统学习光伏基础知识,从半导体物理开始"
}
},
"风能工程师": {
"优秀": "回答技术细节准确,包含风能原理和风机设计",
"良好": "回答基本正确,有一定的风能经验",
"一般": "回答部分正确,但缺乏对风电场规划的深入理解",
"需要改进": "回答存在技术错误,需要加强风能基础知识学习",
"suggestions": {
"优秀": "继续深入学习风机设计和风电场优化",
"良好": "建议学习风能资源评估和风电场规划",
"一般": "建议多参与风能项目,积累实战经验",
"需要改进": "建议系统学习风能基础知识,从空气动力学开始"
}
},
"储能系统工程师": {
"优秀": "回答技术细节准确,包含储能原理和系统集成",
"良好": "回答基本正确,有一定的储能经验",
"一般": "回答部分正确,但缺乏对智能电网的深入理解",
"需要改进": "回答存在技术错误,需要加强储能基础知识学习",
"suggestions": {
"优秀": "继续深入学习智能电网和储能系统优化",
"良好": "建议学习储能系统控制和能量管理",
"一般": "建议多参与储能项目,积累实战经验",
"需要改进": "建议系统学习储能基础知识,从能量转换原理开始"
}
}
}
# 多样化面试官角色模型
interviewer_types = {
"严谨型": {
"description": "注重细节,问题逻辑性强,对技术准确性要求高",
"greeting": "您好,我是严谨型面试官,接下来的面试我会关注您回答的准确性和逻辑性。",
"follow_up_style": "针对技术细节深入追问",
"feedback_style": "直接指出问题,注重事实依据",
"answer_techniques": {
"核心策略": "回答要结构清晰,逻辑严密,注重细节和准确性",
"技巧1": "准备详细的技术细节和具体案例,避免模糊表述",
"技巧2": "回答问题时使用STAR法则情境、任务、行动、结果",
"技巧3": "对于不确定的问题,坦诚承认并说明如何获取相关信息",
"技巧4": "关注问题的每个部分,确保回答全面,不遗漏任何细节",
"技巧5": "展示严谨的思维过程,如分析问题的步骤和考虑因素"
}
},
"亲和型": {
"description": "态度友好,善于引导,营造轻松的面试氛围",
"greeting": "您好,欢迎参加今天的面试,我是亲和型面试官,希望我们能有愉快的交流。",
"follow_up_style": "温和引导,鼓励候选人表达",
"feedback_style": "先肯定优点,再提出改进建议",
"answer_techniques": {
"核心策略": "保持开放友好的态度,积极互动,展示真实的自我",
"技巧1": "保持微笑,眼神交流,展现自信和亲和力",
"技巧2": "分享个人故事和经历,让回答更具人性化",
"技巧3": "主动提问,表现出对公司和职位的兴趣",
"技巧4": "表达团队合作精神和良好的沟通能力",
"技巧5": "展现学习能力和适应新环境的意愿"
}
},
"压力型": {
"description": "提问节奏快,问题尖锐,测试候选人的抗压能力",
"greeting": "您好,我是压力型面试官,接下来的面试会有一些挑战性的问题,请做好准备。",
"follow_up_style": "连续追问,增加压力",
"feedback_style": "严格评估,直接指出不足",
"answer_techniques": {
"核心策略": "保持冷静,有条理地思考,展现抗压能力和解决问题的能力",
"技巧1": "深呼吸,保持语速平稳,避免因紧张而语无伦次",
"技巧2": "将复杂问题分解为小部分,逐步分析和回答",
"技巧3": "面对质疑时,保持专业态度,不辩解,而是提供解决方案",
"技巧4": "展示过去如何在压力下完成任务的案例",
"技巧5": "保持积极心态,将压力视为展示能力的机会"
}
},
"技术型": {
"description": "专注技术能力,问题专业性强,注重实际解决问题的能力",
"greeting": "您好,我是技术型面试官,今天的面试将重点考察您的技术能力。",
"follow_up_style": "技术深度挖掘,注重解决方案",
"feedback_style": "技术角度评估,强调专业能力",
"answer_techniques": {
"核心策略": "展示扎实的技术基础,提供具体的技术解决方案",
"技巧1": "准备详细的技术项目案例,包括遇到的挑战和解决方案",
"技巧2": "使用技术术语准确表达,但避免过于晦涩难懂",
"技巧3": "展示对技术原理的深刻理解,而不仅仅是表面知识",
"技巧4": "讨论技术趋势和最新发展,展示持续学习的能力",
"技巧5": "分析问题时,展示系统化的思维和解决问题的方法论"
}
},
"管理型": {
"description": "关注领导力和管理能力,问题偏向团队协作和项目管理",
"greeting": "您好,我是管理型面试官,今天的面试将重点考察您的领导力和管理能力。",
"follow_up_style": "关注决策过程和团队管理",
"feedback_style": "从管理角度评估,强调领导力",
"answer_techniques": {
"核心策略": "展示领导力、团队管理能力和战略思维",
"技巧1": "分享具体的团队管理案例,包括如何激励团队和解决冲突",
"技巧2": "强调结果导向,提供量化的成就和贡献",
"技巧3": "展示如何平衡业务需求和团队发展",
"技巧4": "讨论决策过程,包括如何收集信息、分析选项和做出决策",
"技巧5": "展示对业务整体的理解,而不仅仅是技术或专业领域"
}
}
}
# 初始化会话状态
if "selected_job" not in st.session_state:
st.session_state.selected_job = None
if "selected_company_type" not in st.session_state:
st.session_state.selected_company_type = None
if "interview_started" not in st.session_state:
st.session_state.interview_started = False
if "current_question" not in st.session_state:
st.session_state.current_question = None
if "current_question_index" not in st.session_state:
st.session_state.current_question_index = 0
if "user_answers" not in st.session_state:
st.session_state.user_answers = []
if "scores" not in st.session_state:
st.session_state.scores = []
if "interview_completed" not in st.session_state:
st.session_state.interview_completed = False
if "history_loaded" not in st.session_state:
st.session_state.history_loaded = False
if "interview_history" not in st.session_state:
st.session_state.interview_history = []
# 追问相关状态
if "is_follow_up" not in st.session_state:
st.session_state.is_follow_up = False
if "current_follow_up_index" not in st.session_state:
st.session_state.current_follow_up_index = -1
if "asked_follow_ups" not in st.session_state:
st.session_state.asked_follow_ups = []
if "current_follow_up" not in st.session_state:
st.session_state.current_follow_up = None
# 多人面试相关状态
if "interviewers" not in st.session_state:
st.session_state.interviewers = []
if "current_interviewer" not in st.session_state:
st.session_state.current_interviewer = None
if "interviewer_questions" not in st.session_state:
st.session_state.interviewer_questions = {}
if "question_interviewers" not in st.session_state:
st.session_state.question_interviewers = [] # 记录每个问题的面试官
if "selected_interviewers" not in st.session_state:
st.session_state.selected_interviewers = []
if "interviewer_types" not in st.session_state:
st.session_state.interviewer_types = []
# 面试回放相关状态
if "answer_timestamps" not in st.session_state:
st.session_state.answer_timestamps = []
if "answer_durations" not in st.session_state:
st.session_state.answer_durations = []
if "answer_changes" not in st.session_state:
st.session_state.answer_changes = []
if "viewing_replay" not in st.session_state:
st.session_state.viewing_replay = False
if "replay_index" not in st.session_state:
st.session_state.replay_index = 0
# 面试者信息
if "candidate_name" not in st.session_state:
st.session_state.candidate_name = ""
if "candidate_email" not in st.session_state:
st.session_state.candidate_email = ""
if "candidate_phone" not in st.session_state:
st.session_state.candidate_phone = ""
if "candidate_education" not in st.session_state:
st.session_state.candidate_education = ""
if "candidate_experience" not in st.session_state:
st.session_state.candidate_experience = ""
if "candidate_info_completed" not in st.session_state:
st.session_state.candidate_info_completed = False
# 确保历史记录目录存在
HISTORY_DIR = "interview_history"
if not os.path.exists(HISTORY_DIR):
os.makedirs(HISTORY_DIR)
# 保存面试历史记录
def save_interview_history():
if st.session_state.interview_completed and st.session_state.user_answers:
interview_data = {
"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"job_position": st.session_state.selected_job,
"questions": interview_questions[st.session_state.selected_job][:len(st.session_state.user_answers)],
"answers": st.session_state.user_answers,
"scores": st.session_state.scores,
"interviewers": st.session_state.interviewers,
"question_interviewers": st.session_state.question_interviewers, # 新增:记录每个问题的面试官
"answer_timestamps": st.session_state.answer_timestamps,
"answer_durations": st.session_state.answer_durations,
"answer_changes": st.session_state.answer_changes
}
# 生成文件名
filename = f"{datetime.now().strftime('%Y%m%d_%H%M%S')}_{st.session_state.selected_job.replace(' ', '_')}.json"
filepath = os.path.join(HISTORY_DIR, filename)
# 保存到文件
with open(filepath, 'w', encoding='utf-8') as f:
json.dump(interview_data, f, ensure_ascii=False, indent=2)
return filepath
return None
# 加载面试历史记录
def load_interview_history():
history_files = []
for file in os.listdir(HISTORY_DIR):
if file.endswith('.json'):
filepath = os.path.join(HISTORY_DIR, file)
try:
with open(filepath, 'r', encoding='utf-8') as f:
data = json.load(f)
history_files.append((data["timestamp"], file, data))
except:
pass
# 按时间倒序排序
history_files.sort(reverse=True, key=lambda x: x[0])
return history_files
# 页面标题
st.title("🤖 AI面试助手")
st.write("---")
# 侧边栏:岗位选择
with st.sidebar:
st.header("面试设置")
# 公司类型选择
company_options = list(company_types.keys())
selected_company_type = st.selectbox(
"选择公司类型",
company_options,
index=0 if st.session_state.selected_company_type is None else company_options.index(st.session_state.selected_company_type)
)
# 保存选择到会话状态
st.session_state.selected_company_type = selected_company_type
st.write("\n")
# 岗位选择下拉菜单(根据选择的公司类型动态显示)
job_options = company_types[selected_company_type]
selected_job = st.selectbox(
"选择面试岗位",
job_options,
index=0 if st.session_state.selected_job not in job_options else job_options.index(st.session_state.selected_job)
)
# 保存选择到会话状态
st.session_state.selected_job = selected_job
st.write("\n")
# 面试官类型选择
st.subheader("面试官类型")
st.write("请选择面试官类型(可多选):")
selected_interviewer_types = []
for interviewer_type, info in interviewer_types.items():
if st.checkbox(f"{interviewer_type} - {info['description']}", key=f"interviewer_{interviewer_type}"):
selected_interviewer_types.append(interviewer_type)
# 保存选择的面试官类型
st.session_state.selected_interviewers = selected_interviewer_types
st.write("\n")
# 开始面试按钮
if st.button("开始面试", key="start_button"):
st.session_state.interview_started = True
st.session_state.current_question_index = 0
st.session_state.user_answers = []
st.session_state.scores = []
st.session_state.interview_completed = False
# 重置追问相关状态
st.session_state.is_follow_up = False
st.session_state.current_follow_up_index = -1
st.session_state.asked_follow_ups = []
st.session_state.current_follow_up = None
# 重置多人面试相关状态
if selected_interviewer_types:
st.session_state.interviewers = selected_interviewer_types
else:
st.session_state.interviewers = ["技术面试官", "HR面试官", "业务面试官"]
st.session_state.current_interviewer = st.session_state.interviewers[0]
st.session_state.interviewer_questions = {}
st.session_state.question_interviewers = []
# 重置面试回放相关状态
st.session_state.answer_timestamps = []
st.session_state.answer_durations = []
st.session_state.answer_changes = []
st.session_state.viewing_replay = False
st.session_state.replay_index = 0
# 随机选择第一个问题
st.session_state.current_question = interview_questions[selected_job][0]
# 重置面试按钮
if st.button("重置面试", key="reset_button"):
# 清除所有相关状态变量
for key in list(st.session_state.keys()):
if key.startswith("start_time_") or key.startswith("answer_changes_") or key.startswith("prev_answer_"):
del st.session_state[key]
st.session_state.interview_started = False
st.session_state.current_question = None
st.session_state.current_question_index = 0
st.session_state.user_answers = []
st.session_state.scores = []
st.session_state.interview_completed = False
# 重置追问相关状态
st.session_state.is_follow_up = False
st.session_state.current_follow_up_index = -1
st.session_state.asked_follow_ups = []
st.session_state.current_follow_up = None
# 重置多人面试相关状态
st.session_state.interviewers = []
st.session_state.current_interviewer = None
st.session_state.interviewer_questions = {}
st.session_state.question_interviewers = []
# 重置面试回放相关状态
st.session_state.answer_timestamps = []
st.session_state.answer_durations = []
st.session_state.answer_changes = []
st.session_state.viewing_replay = False
st.session_state.replay_index = 0
st.session_state.replay_index = 0
st.rerun()
st.write("\n" + "="*30)
# 面试历史记录
st.header("面试历史")
history_files = load_interview_history()
if history_files:
st.write("**历史面试记录:**")
for timestamp, filename, data in history_files[:5]: # 只显示最近5条
with st.expander(f"{timestamp} - {data.get('job_position', '未知岗位')}"):
st.write(f"岗位:{data.get('job_position', '未知')}")
st.write(f"问题数量:{len(data.get('questions', []))}")
if st.button(f"查看回放", key=f"replay_{filename}"):
st.session_state.viewing_replay = True
st.session_state.replay_data = data
st.session_state.replay_index = 0
st.rerun()
else:
st.write("暂无历史面试记录")
# 主内容区域
main_col, feedback_col = st.columns([3, 1])
with main_col:
# 查看历史记录详情
if "viewing_history" in st.session_state and st.session_state.viewing_history:
st.header("历史面试记录")
st.write("---")
data = st.session_state.viewing_history
st.subheader("面试总结报告")
st.write(f"**面试时间:** {data['timestamp']}")
st.write(f"**面试岗位:** {data['job_position']}")
st.write(f"**回答问题数量:** {len(data['answers'])}")
# 显示所有问题和回答
for i, (question, answer, score) in enumerate(zip(
data['questions'],
data['answers'],
data['scores']
)):
st.write(f"\n**问题 {i+1}** {question}")
st.write(f"**您的回答:** {answer}")
st.write(f"**评分:** {score}")
st.write("\n" + "="*50)
st.subheader("面试建议")
st.write("1. 建议您在回答技术问题时,尽量结合实际项目经验")
st.write("2. 回答问题时保持结构清晰使用STAR法则情境、任务、行动、结果")
st.write("3. 针对薄弱环节进行针对性学习和练习")
st.write("4. 面试前充分了解目标岗位的职责和要求")
if st.button("返回", key="back_from_history"):
del st.session_state.viewing_history
st.rerun()
# 面试回放功能
elif "viewing_replay" in st.session_state and st.session_state.viewing_replay:
st.header("面试回放")
st.write("---")
data = st.session_state.replay_data
replay_index = st.session_state.replay_index
# 显示面试基本信息
st.subheader("面试信息")
st.write(f"**面试时间:** {data.get('timestamp', '未知')}")
st.write(f"**面试岗位:** {data.get('job_position', '未知')}")
st.write(f"**面试官:** {', '.join(data.get('interviewers', ['未知']))}")
st.write(f"**问题总数:** {len(data.get('questions', []))}")
st.write("\n" + "="*50)
# 显示当前问题的回放
if 0 <= replay_index < len(data.get('questions', [])):
st.subheader(f"问题 {replay_index + 1}")
# 获取问题数据
question = data['questions'][replay_index]
answer = data['answers'][replay_index]
score = data['scores'][replay_index]
# 获取时间戳和时长数据
timestamp = None
duration = None
changes = 0
if 'answer_timestamps' in data:
for ts in data['answer_timestamps']:
if ts.get('question_index') == replay_index:
timestamp = ts
break
if 'answer_durations' in data and replay_index < len(data['answer_durations']):
duration = data['answer_durations'][replay_index]
if 'answer_changes' in data:
for ac in data['answer_changes']:
if ac.get('question_index') == replay_index:
changes = ac.get('changes', 0)
break
# 显示问题
if isinstance(question, dict):
st.write(f"**问题内容:** {question.get('main_question', '未知')}")
else:
st.write(f"**问题内容:** {question}")
# 显示面试官
if 'question_interviewers' in data and replay_index < len(data['question_interviewers']):
st.write(f"**面试官:** {data['question_interviewers'][replay_index]}")
# 显示回答
st.write(f"**您的回答:** {answer}")
# 显示评分
st.write(f"**评分:** {score}")
# 显示回放数据
st.subheader("答题数据")
if timestamp:
st.write(f"**开始时间:** {timestamp.get('start_time', '未知')}")
st.write(f"**结束时间:** {timestamp.get('end_time', '未知')}")
if duration:
minutes, seconds = divmod(duration, 60)
st.write(f"**答题时长:** {int(minutes)}{int(seconds)}")
st.write(f"**修改次数:** {changes}")
# 导航按钮
col1, col2, col3 = st.columns([1, 1, 1])
with col1:
if replay_index > 0:
if st.button("上一题", key="prev_question"):
st.session_state.replay_index -= 1
st.rerun()
with col2:
if st.button("返回列表", key="back_to_list"):
st.session_state.viewing_replay = False
del st.session_state.replay_data
del st.session_state.replay_index
st.rerun()
with col3:
if replay_index < len(data['questions']) - 1:
if st.button("下一题", key="next_question"):
st.session_state.replay_index += 1
st.rerun()
else:
st.write("回放完成!")
if st.button("返回列表", key="back_to_list_end"):
st.session_state.viewing_replay = False
del st.session_state.replay_data
del st.session_state.replay_index
# 面试者信息收集
elif not st.session_state.candidate_info_completed:
st.header("👤 面试者信息收集")
st.write("---")
st.write("请填写以下信息,以便我们为您提供更加个性化的面试体验:")
with st.form("candidate_info_form"):
col1, col2 = st.columns(2)
with col1:
candidate_name = st.text_input("姓名", value=st.session_state.candidate_name)
candidate_email = st.text_input("邮箱", value=st.session_state.candidate_email)
candidate_phone = st.text_input("电话", value=st.session_state.candidate_phone)
with col2:
candidate_education = st.selectbox(
"最高学历",
["高中", "大专", "本科", "硕士", "博士"],
index=["高中", "大专", "本科", "硕士", "博士"].index(st.session_state.candidate_education) if st.session_state.candidate_education else 2
)
candidate_experience = st.selectbox(
"工作经验",
["应届毕业生", "1-3年", "3-5年", "5-10年", "10年以上"],
index=["应届毕业生", "1-3年", "3-5年", "5-10年", "10年以上"].index(st.session_state.candidate_experience) if st.session_state.candidate_experience else 0
)
submitted = st.form_submit_button("提交信息")
if submitted:
if not candidate_name:
st.error("请填写姓名")
elif not candidate_email:
st.error("请填写邮箱")
elif not candidate_phone:
st.error("请填写电话")
else:
st.session_state.candidate_name = candidate_name
st.session_state.candidate_email = candidate_email
st.session_state.candidate_phone = candidate_phone
st.session_state.candidate_education = candidate_education
st.session_state.candidate_experience = candidate_experience
st.session_state.candidate_info_completed = True
st.success("信息提交成功!")
st.rerun()
st.rerun()
elif not st.session_state.interview_started:
# 高级亲和的欢迎封面页面
st.markdown("""
<style>
.welcome-container {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-radius: 20px;
padding: 60px;
text-align: center;
color: white;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
margin-bottom: 40px;
}
.welcome-title {
font-size: 3.5rem;
font-weight: 700;
margin-bottom: 20px;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
}
.welcome-subtitle {
font-size: 1.5rem;
margin-bottom: 30px;
opacity: 0.9;
}
.welcome-features {
display: flex;
justify-content: space-around;
margin-top: 40px;
flex-wrap: wrap;
}
.feature-card {
background: rgba(255, 255, 255, 0.1);
border-radius: 15px;
padding: 30px;
margin: 15px;
flex: 1;
min-width: 250px;
backdrop-filter: blur(10px);
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.feature-card:hover {
transform: translateY(-10px);
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.3);
}
.feature-icon {
font-size: 3rem;
margin-bottom: 20px;
}
.feature-title {
font-size: 1.2rem;
font-weight: 600;
margin-bottom: 15px;
}
.feature-description {
opacity: 0.8;
line-height: 1.6;
}
.cta-button {
background: linear-gradient(45deg, #4CAF50, #45a049);
color: white;
border: none;
border-radius: 50px;
padding: 15px 40px;
font-size: 1.2rem;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
margin-top: 40px;
}
.cta-button:hover {
transform: translateY(-3px);
box-shadow: 0 8px 20px rgba(76, 175, 80, 0.4);
}
@media (max-width: 768px) {
.welcome-container {
padding: 40px 20px;
}
.welcome-title {
font-size: 2.5rem;
}
.welcome-subtitle {
font-size: 1.2rem;
}
.feature-card {
min-width: 100%;
}
}
</style>
""", unsafe_allow_html=True)
# 欢迎封面
st.markdown('<div class="welcome-container">', unsafe_allow_html=True)
st.markdown('<h1 class="welcome-title">🤖 AI面试助手</h1>', unsafe_allow_html=True)
st.markdown('<p class="welcome-subtitle">专业、智能的面试模拟平台,助您轻松应对各类面试挑战</p>', unsafe_allow_html=True)
# 核心功能
st.markdown('<div class="welcome-features">', unsafe_allow_html=True)
# 功能1智能面试模拟
st.markdown("""
<div class="feature-card">
<div class="feature-icon">🎯</div>
<div class="feature-title">智能面试模拟</div>
<div class="feature-description">根据不同岗位和公司类型,提供个性化的面试问题和场景模拟</div>
</div>
""", unsafe_allow_html=True)
# 功能2专业评分系统
st.markdown("""
<div class="feature-card">
<div class="feature-icon">📊</div>
<div class="feature-title">专业评分系统</div>
<div class="feature-description">AI实时评估您的回答提供详细的评分和针对性的改进建议</div>
</div>
""", unsafe_allow_html=True)
# 功能3面试官类型应对
st.markdown("""
<div class="feature-card">
<div class="feature-icon">👥</div>
<div class="feature-title">面试官类型应对</div>
<div class="feature-description">针对不同类型面试官的特点,提供专属的回答技巧和策略</div>
</div>
""", unsafe_allow_html=True)
# 功能4面试报告分析
st.markdown("""
<div class="feature-card">
<div class="feature-icon">📈</div>
<div class="feature-title">面试报告分析</div>
<div class="feature-description">生成详细的面试报告,帮助您了解优势和需要改进的地方</div>
</div>
""", unsafe_allow_html=True)
st.markdown('</div>', unsafe_allow_html=True) # 关闭features容器
# 行动号召
st.markdown("""
<p style="margin-top: 40px; font-size: 1.1rem;">
准备好提升您的面试技巧了吗?在左侧选择面试岗位,开始您的专业面试之旅!
</p>
""", unsafe_allow_html=True)
st.markdown('</div>', unsafe_allow_html=True) # 关闭welcome容器
# 面试流程说明
with st.container():
st.markdown('<div class="interview-card">', unsafe_allow_html=True)
st.subheader("🎯 面试流程")
st.write("1. **选择公司类型** - 根据您的目标公司行业进行选择")
st.write("2. **选择面试岗位** - 选择您要应聘的具体职位")
st.write("3. **选择面试官类型** - 选择您希望面对的面试官风格")
st.write("4. **点击开始面试** - 进入模拟面试环节")
st.write("5. **AI提问您输入回答** - 真实模拟面试场景")
st.write("6. **AI评估并给出建议** - 获得专业的反馈和改进方向")
st.write("7. **完成所有问题后生成面试报告** - 全面了解您的面试表现")
st.markdown('</div>', unsafe_allow_html=True)
elif st.session_state.interview_completed:
st.header("面试完成!")
st.write("---")
# 使用卡片布局
with st.container():
st.markdown('<div class="interview-card">', unsafe_allow_html=True)
st.subheader("面试总结报告")
st.write(f"**公司类型:** {st.session_state.selected_company_type}")
st.write(f"**面试岗位:** {st.session_state.selected_job}")
st.write(f"**回答问题数量:** {len(st.session_state.user_answers)}")
# 显示所有问题和回答
for i, (question, answer, score) in enumerate(zip(
interview_questions[st.session_state.selected_job][:len(st.session_state.user_answers)],
st.session_state.user_answers,
st.session_state.scores
)):
st.write(f"\n**问题 {i+1}** {question['main_question']}")
st.write(f"**您的回答:** {answer}")
st.write(f"**评分:** {score}")
st.write("\n" + "="*50)
st.subheader("面试建议")
# 获取岗位对应的评分标准和建议
job_position = st.session_state.selected_job
if job_position in scoring_criteria:
st.write("**针对您的面试表现,我们为您提供以下建议:**")
# 分析评分分布,找出主要的评分等级
score_counts = {}
for score in st.session_state.scores:
if score in score_counts:
score_counts[score] += 1
else:
score_counts[score] = 1
# 找出最常见的评分等级
most_common_score = max(score_counts, key=score_counts.get)
# 显示对应评分等级的建议
if "suggestions" in scoring_criteria[job_position] and most_common_score in scoring_criteria[job_position]["suggestions"]:
suggestion = scoring_criteria[job_position]["suggestions"][most_common_score]
st.write(f"**基于您的整体表现({most_common_score}),我们建议:**")
st.write(f"- {suggestion}")
# 显示每个问题的具体建议
st.write("\n**针对每个问题的建议:**")
for i, (question, answer, score) in enumerate(zip(
interview_questions[st.session_state.selected_job][:len(st.session_state.user_answers)],
st.session_state.user_answers,
st.session_state.scores
)):
if "suggestions" in scoring_criteria[job_position] and score in scoring_criteria[job_position]["suggestions"]:
question_suggestion = scoring_criteria[job_position]["suggestions"][score]
st.write(f"**问题 {i+1}{score}** {question_suggestion}")
else:
# 如果没有找到对应岗位的建议,显示通用建议
st.write("1. 建议您在回答技术问题时,尽量结合实际项目经验")
st.write("2. 回答问题时保持结构清晰使用STAR法则情境、任务、行动、结果")
st.write("3. 针对薄弱环节进行针对性学习和练习")
st.write("4. 面试前充分了解目标岗位的职责和要求")
# 保存面试历史记录
saved_file = save_interview_history()
if saved_file:
st.success(f"面试记录已保存到:{saved_file}")
st.markdown('</div>', unsafe_allow_html=True)
else:
st.header(f"{st.session_state.selected_job}岗位面试")
st.write("---")
# 使用卡片布局
with st.container():
st.markdown('<div class="interview-card">', unsafe_allow_html=True)
# 显示当前面试官
st.subheader(f"当前面试官:{st.session_state.current_interviewer}")
# 显示面试官类型信息
if st.session_state.current_interviewer in interviewer_types:
interviewer_info = interviewer_types[st.session_state.current_interviewer]
st.write(f"**面试官类型:** {interviewer_info['description']}")
st.write(f"**问候语:** {interviewer_info['greeting']}")
# 显示当前问题
st.subheader("当前问题")
if st.session_state.is_follow_up:
st.write(f"**追问:** {st.session_state.current_follow_up}")
else:
st.write(st.session_state.current_question["main_question"])
# 开始答题时间(当问题加载时记录)
if f"start_time_{st.session_state.current_question_index}" not in st.session_state:
st.session_state[f"start_time_{st.session_state.current_question_index}"] = datetime.now()
# 用户回答输入
st.subheader("您的回答")
user_answer = st.text_area(
"请输入您的回答",
height=200,
key=f"answer_{st.session_state.current_question_index}"
)
# 记录回答修改次数
if f"answer_changes_{st.session_state.current_question_index}" not in st.session_state:
st.session_state[f"answer_changes_{st.session_state.current_question_index}"] = 0
# 检测回答修改
if f"prev_answer_{st.session_state.current_question_index}" in st.session_state:
if st.session_state[f"prev_answer_{st.session_state.current_question_index}"] != user_answer:
st.session_state[f"answer_changes_{st.session_state.current_question_index}"] += 1
# 保存当前回答以便下次比较
st.session_state[f"prev_answer_{st.session_state.current_question_index}"] = user_answer
# 提交回答按钮
if st.button("提交回答", key=f"submit_{st.session_state.current_question_index}"):
if user_answer.strip():
# 计算答题时长
start_time = st.session_state[f"start_time_{st.session_state.current_question_index}"]
end_time = datetime.now()
duration = (end_time - start_time).total_seconds()
# 保存用户回答
st.session_state.user_answers.append(user_answer)
# 记录当前问题的面试官
st.session_state.question_interviewers.append(st.session_state.current_interviewer)
# 保存答题时间戳和时长
st.session_state.answer_timestamps.append({
"question_index": st.session_state.current_question_index,
"start_time": start_time.strftime("%H:%M:%S"),
"end_time": end_time.strftime("%H:%M:%S")
})
st.session_state.answer_durations.append(duration)
# 保存回答修改记录
st.session_state.answer_changes.append({
"question_index": st.session_state.current_question_index,
"changes": st.session_state[f"answer_changes_{st.session_state.current_question_index}"]
})
# 改进的评分算法
# 根据回答长度和关键词进行更合理的评分
answer_length = len(user_answer.strip())
score_weights = {
"优秀": 0.2,
"良好": 0.5,
"一般": 0.25,
"需要改进": 0.05
}
# 根据回答长度调整评分权重
if answer_length < 50:
score_weights["需要改进"] = 0.5
score_weights["一般"] = 0.3
score_weights["良好"] = 0.15
score_weights["优秀"] = 0.05
elif answer_length < 150:
score_weights["需要改进"] = 0.2
score_weights["一般"] = 0.4
score_weights["良好"] = 0.3
score_weights["优秀"] = 0.1
else:
score_weights["需要改进"] = 0.05
score_weights["一般"] = 0.2
score_weights["良好"] = 0.4
score_weights["优秀"] = 0.35
# 生成评分
score_options = list(score_weights.keys())
weights = list(score_weights.values())
score = random.choices(score_options, weights=weights, k=1)[0]
st.session_state.scores.append(score)
# 检查是否还有下一个问题或追问
if not st.session_state.is_follow_up:
# 有50%的概率触发追问
if random.random() < 0.5 and len(st.session_state.current_question["follow_ups"]) > 0:
# 选择一个未问过的追问
available_follow_ups = [f for f in st.session_state.current_question["follow_ups"]
if f not in st.session_state.asked_follow_ups]
if available_follow_ups:
# 随机选择一个追问
selected_follow_up = random.choice(available_follow_ups)
st.session_state.asked_follow_ups.append(selected_follow_up)
st.session_state.current_follow_up = selected_follow_up
st.session_state.is_follow_up = True
st.rerun()
# 如果没有触发追问或没有可用的追问,则进入下一个主问题
next_question_index = st.session_state.current_question_index + 1
if next_question_index < len(interview_questions[st.session_state.selected_job]):
st.session_state.current_question_index = next_question_index
st.session_state.current_question = interview_questions[st.session_state.selected_job][next_question_index]
st.session_state.is_follow_up = False
st.session_state.current_follow_up_index = -1
st.session_state.asked_follow_ups = []
# 切换面试官
current_interviewer_index = st.session_state.interviewers.index(st.session_state.current_interviewer)
next_interviewer_index = (current_interviewer_index + 1) % len(st.session_state.interviewers)
st.session_state.current_interviewer = st.session_state.interviewers[next_interviewer_index]
st.rerun()
else:
# 面试完成
st.session_state.interview_completed = True
st.rerun()
else:
# 追问回答后,回到主问题流程
st.session_state.is_follow_up = False
st.session_state.current_follow_up_index = -1
# 继续处理主问题流程
next_question_index = st.session_state.current_question_index + 1
if next_question_index < len(interview_questions[st.session_state.selected_job]):
st.session_state.current_question_index = next_question_index
st.session_state.current_question = interview_questions[st.session_state.selected_job][next_question_index]
st.session_state.asked_follow_ups = []
st.rerun()
else:
# 面试完成
st.session_state.interview_completed = True
st.rerun()
else:
st.warning("请输入您的回答后再提交")
st.markdown('</div>', unsafe_allow_html=True)
with feedback_col:
if st.session_state.interview_started and not st.session_state.interview_completed:
st.header("AI反馈")
if st.session_state.user_answers:
# 显示上一个问题的反馈
last_question_index = st.session_state.current_question_index - 1
if last_question_index >= 0:
st.write(f"**问题 {last_question_index + 1} 反馈:**")
st.write(f"评分:{st.session_state.scores[last_question_index]}")
st.write(f"建议:{scoring_criteria[st.session_state.selected_job][st.session_state.scores[last_question_index]]}")
else:
st.write("请回答当前问题AI将为您提供反馈。")
elif st.session_state.interview_completed:
st.header("最终评估")
# 计算平均评分
if st.session_state.scores:
score_counts = {score: st.session_state.scores.count(score) for score in set(st.session_state.scores)}
st.write("**评分分布:**")
for score, count in score_counts.items():
st.write(f"{score}{count}")
# 页脚
st.write("\n" + "---")
st.write("© 2024 AI面试助手 - 模拟真实面试场景,提升您的面试技巧")