添加.python-version文件指定Python版本 将依赖从requirements.txt迁移至pyproject.toml 添加python-dotenv依赖用于环境变量管理 新增.env-example作为环境变量配置模板 生成uv.lock锁定依赖版本 添加example.py作为功能示例
2792 lines
131 KiB
Python
2792 lines
131 KiB
Python
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面试助手 - 模拟真实面试场景,提升您的面试技巧")
|