如果我再次被面试,我会问的几个问题

实际不可能问这么多问题,在面试前要考察,并列出一张问题单。

1、公司大概有多少人,研发人员占多少?公司研发人员的平均年龄大概是多少?在公司任职的平均年限是多少?

2、如果我被公司录取,我的开发任务是什么?更多的是根据需求开发功能呢还是会留时间去把某个技术问题吃透?公司有没有专业的测试工程师/产品的一个功能对外发布需要经过哪些流程?公司的技术人员的组成?

3、公司采用的软件开发模型最象软件工程中的哪个模型?代码多久集成一次?公司有没有代码规范文档或者Wiki?可以就这个例子问公司,可以从公司的回答中看出公司的代码规范程度。

4、如果我被录取,您是我的直接领导吗?

5、在我看来,文档的存在目的之一是帮助开发者了解其他同事开发的与自己有对接关系的代码,公司还有没有什么其他类似的举措?

6、公司的产品的主要使用者是?盈利模式是?

7、员工在上班的空闲时间维护自己的博客,公司对这件事情的态度是?公司会不会一直问,你今天都做了什么?

8、公司所用电脑显示器的尺寸是多少,可不可以申请两个显示器?

9、我中午有午休半小时的习惯,公司中午会不会很吵?


一个好的公司应该是很多细节都考虑到的:工资只会提前发不会晚发;员工的工作环境;如果有食堂的话,伙食的质量不会差。


毕业已经18个月了,感觉自己的生活和工作都是乱糟糟的好在已经开始改变了。在这个时间点,我选择在工作上给自己一次机会。虽然以我现在的能力,出去找工作没有多大的优势但是现在的工作环境就是在浪费我时间了。只期望自己好好复习,好好锻炼,找到一个具备软件公司基本素质的公司。如果能进具有创新意识和创新能力的公司那就是万幸了。


提出如下期望,如果最终全都实现就是大大的成功。公司要具备软件公司的基本素质,可以tm没有创新能力,但是不能像现在这个jb公司一样乱。公司可以没有很大的名气,但是岗位必须适合自己,要对提高自己能力有帮助,可以体力累但是不能心累。独立园区,或者独立办公楼,具备基本的休闲设施。在进入公司发现重大不适合自己的地方,立马换,不能犹豫,所以在进入公司的前一个月要多观察,多问。


要根据公司规模大小和行业性质提问题。

我进过上市大公司,和创业型的小公司,目前都没遇到如我意的,当然要怪自己能力不行。

进不了牛B公司,现在我暂且忍了。待续!


<think>好的,我需要帮助用户了解在TP驱动面试中可能被到的中断相关问题。用户之前已经得到过一份详细的问题列表,现在他们特别关注中断相关的部分,并且希望结合之前的回答和提供的引用内容。 首先,回顾用户的历史问题,之前的回答涵盖了TP驱动的核心概念、代码实现、调试优化等方面,其中中断相关的问题包括中断线程化(request_threaded_irq)的应用场景、自旋锁与互斥锁的选择、以及一个代码实战分析中的中断处理错误。这些内容需要再次整理,并强调中断处理在TP驱动中的重要性。 接下来,查看用户提供的引用内容。引用1提到面试失败是因为岗位偏向Android驱动开发,但用户现在关注的是TP驱动中的中断问题,这可能涉及底层驱动和硬件交互,需要结合Linux内核的中断机制。引用3提到了通过读取寄存器来调试硬件问题,这可能与中断处理中的寄存器配置或状态检查相关,可以作为调试中断问题的一个例子。 现在需要将中断相关的知识点结构化,分为基础概念、实现机制、调试优化和综合应用几个部分。每个部分需要包含常见问题、详细解析、代码示例以及可能的引用支持。例如,中断线程化的问题可以结合引用1中的知识不符情况,说明为何在TP驱动中需要线程化中断来避免阻塞和提升实时性。 同时,用户可能希望了解实际面试中如何回答这些问题,包括代码示例和调试方法。例如,在解释中断处理中的锁机制时,需要区分自旋锁和互斥锁的应用场景,并引用之前的错误代码示例说明为何在中断上下文中不能使用互斥锁。 此外,结合引用3中的硬件调试方法,可以在调试部分加入如何通过读取寄存器或使用工具检查中断是否正常触发,比如使用/proc/interrupts查看中断计数,或者使用示波器测量中断信号线。这些实际调试技巧能增强回答的实用性。 最后,确保问题覆盖全面,包括中断注册、处理流程、同步机制、调试方法以及常见错误分析。每个问题都要有技术深度,同时保持解释清晰,适合面试准备。需要检查是否有遗漏的中断相关主题,例如中断共享、中断优先级、底半部机制(tasklet、工作队列)等,这些都可能出现在高级问题中。 总结来说,需要组织一个结构清晰、内容详实的中断相关问题列表,涵盖从基础到高级的内容,并结合代码示例和实际调试技巧,引用之前的内容和用户提供的参考资料,确保回答既全面又具有针对性。</think>以下是针对**TP驱动开发岗位面试中中断相关**的重点问题解析,结合Linux内核驱动开发实践与硬件交互原理,分为中断机制原理、代码实现、调试优化三模块: --- ### 一、中断机制核心原理 #### 1. **中断线程化(`request_threaded_irq`)在TP驱动中的应用场景** - **核心作用**: - **处理复杂逻辑**:如触控坐标滤波算法(卡尔曼滤波)或手势识别 - **避免中断阻塞**:涉及I2C/SPI通信时(如`i2c_transfer()`可能休眠) - **示例代码**: ```c ret = request_threaded_irq(irq, NULL, tp_irq_thread, IRQF_TRIGGER_FALLING | IRQF_ONESHOT, "tp_irq", tp_dev); ``` - **对比传统中断**:传统顶半部(hardirq)中执行耗时操作会导致`soft lockup`[^1] #### 2. **中断上下文中的同步机制选择** - **锁类型对比**: | 锁类型 | 适用场景 | TP驱动典型用例 | |--------------|------------------------|-------------------------------| | 自旋锁 | 中断上下文/短临界区 | 保护共享硬件寄存器访 | | 互斥锁 | 程上下文/长临界区 | 固件升级时的I2C批量传输 | - **典型错误场景**: ```c // 错误!在中断处理函数中使用mutex static irqreturn_t tp_irq(int irq, void *dev_id) { mutex_lock(&tp->lock); // 可能引发内核崩溃 ... } ``` #### 3. **中断共享与冲突解决** - **实现要点**: 1. 注册时需指定`IRQF_SHARED`标志 2. 在ISR中通过`dev_id`区分设备 3. 使用`irqreturn_t`返回值标识是否处理了中断 - **代码示例**: ```c if (read_reg(TP_STATUS_REG) & IRQ_PENDING) { handle_tp_irq(); return IRQ_HANDLED; // 确认是本设备中断 } return IRQ_NONE; // 非本设备中断 ``` --- ### 二、中断处理代码实现 #### 4. **TP中断处理函数典型结构** - **标准处理流程**: 1. **快速响应**:读取原始坐标数据(通常通过I2C) 2. **数据处理**:坐标滤波(如IIR低通滤波) 3. **事件上报**:通过`input_report_abs()`上报坐标 - **代码框架**: ```c static irqreturn_t tp_irq_thread(int irq, void *dev_id) { struct tp_data *tp = dev_id; u16 x, y; // 1. 读取原始数据 i2c_read(tp->client, DATA_REG, &x, 2); i2c_read(tp->client, DATA_REG+2, &y, 2); // 2. 坐标滤波 tp->filtered_x = kalman_filter(x); tp->filtered_y = kalman_filter(y); // 3. 上报事件 input_report_abs(tp->input, ABS_X, tp->filtered_x); input_sync(tp->input); return IRQ_HANDLED; } ``` #### 5. **中断延迟测量与优化** - **测量方法**: - 使用`ftrace`追踪中断处理耗时: ```bash echo 1 > /sys/kernel/debug/tracing/events/irq/enable cat /sys/kernel/debug/tracing/trace ``` - 查看`/proc/interrupts`统计中断次数 - **优化手段**: - 减少中断处理中的I/O操作(如预缓存寄存器地址) - 使用`NAPI`机制合并多次中断(适用于高频率触控事件) --- ### 三、中断调试与硬件交互 #### 6. **中断未触发的硬件级排查** - **调试步骤**: 1. **电平检测**:用示波器测量中断引脚波形 2. **寄存器验证**:读取中断使能寄存器状态 ```c u8 reg_val; i2c_read(client, INT_EN_REG, &reg_val, 1); printk("INT_EN_REG: 0x%02X\n", reg_val); // 应为0x01 ``` 3. **GPIO配置检查**:确认GPIO模式设置为中断输入 ```bash cat /sys/kernel/debug/gpio | grep tp_irq_gpio ``` #### 7. **中断风暴问题处理** - **现象**:`/proc/interrupts`显示中断计数异常增长 - **解决方案**: - **硬件层面**:检查触控面板供电稳定性(参考纹波<50mV) - **软件层面**: ```c // 添加防抖处理 if (time_since_last_irq < 5ms) return IRQ_HANDLED; // 丢弃短时间重复中断 ``` --- ### 四、高级问题与综合设计 #### 8. **TP休眠唤醒与中断配置** - **低功耗设计**: ```c // 休眠时配置中断为唤醒源 enable_irq_wake(tp->irq); // 恢复时重新初始化硬件 tp_resume(tp->client); ``` - **唤醒延迟测试**: ```bash echo mem > /sys/power/state # 入休眠 # 触摸屏幕后测量唤醒时间 ``` #### 9. **中断优先级对TP性能的影响** - **实时性要求**: - 需配置为高优先级中断(如ARM GIC的优先级寄存器) - 使用`IRQF_NOBALANCING`防止CPU迁移 - **验证方法**: ```bash cat /proc/irq/123/smp_affinity # 查看CPU亲和性 echo 4 > /proc/irq/123/smp_affinity_list # 绑定到CPU2 ``` --- ### 五、代码实战分析 #### 10. **分析以下中断注册代码的问题** ```c ret = request_irq(irq, tp_irq, IRQF_TRIGGER_FALLING, "tp", tp); ``` - **问题诊断**: 1. 缺少`IRQF_ONESHOT`导致可能丢失后续中断 2. 未使用线程化中断,可能阻塞I2C操作 - **修正方案**: ```c ret = request_threaded_irq(irq, NULL, tp_irq_thread, IRQF_TRIGGER_FALLING | IRQF_ONESHOT, "tp", tp); ``` --- ### 附:硬件调试技巧 - **中断信号测量**: ```bash # 使用示波器测量触控IC的中断引脚波形 # 正常应有周期性的下降沿(触摸时) ``` - **寄存器快速查看**: ```bash devmem2 0x12345678 # 查看物理地址寄存器(需root权限) ``` 通过掌握这些核心知识点,能系统性地应对TP驱动开发岗位中中断相关的技术考察。建议结合具体芯片手册(如Goodix GT911数据手册)深入理解硬件交互细节。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值