✨职位信息概览
比亚迪招全职软件工程师岗位,8-10K,工作地址:长沙雨花区长沙市比亚迪汽车有限公司(圭白路)环保东路88号,面向本科及以上学历毕业生
📋岗位职责
- 熟悉 .NET 架构师 / Windows Framework
- 负责基于 Windows 系统工艺软件的开发,包括设备控制的 GUI、运动控制、数据处理等部分
- 编写软件规格书和详细设计文档,根据项目进度完成软件开发、调试
✅任职要求
- 精通 C#、C++,对 .NET Framework 有深刻理解,精通 Windows 系统应用程序开发,有 QT 应用经验者优先录用
- 至少有两年的软件开发经历,能承担基于运动控制卡产品的应用程序开发任务
- 如同时具有 PLC 产品或 Windows 系统应用开发经验者,优先录用
- 有设备通讯(如 Socket、TCP/IP 等)相关开发经验者,优先录用
📸招聘详情
💡应聘技术问题
问题:".NET Framework 中垃圾回收机制的工作原理是什么?"
参考答案: .NET Framework 的垃圾回收(GC)是自动内存管理机制。它通过跟踪对象的引用关系来判断哪些对象不再被使用。GC 分为三代(Generation 0、1、2),新对象在 Generation 0,经过多次回收仍存活的对象会被提升到更高代。GC 会暂停应用程序执行,标记所有存活对象,然后回收未标记对象的内存空间,最后进行内存压缩。可通过 GC.Collect() 手动触发,但通常不建议这样做。
问题:"C# 中值类型和引用类型的区别是什么?"
参考答案: 值类型(如 int、float、struct、enum)直接存储在栈中,包含实际数据;引用类型(如 class、interface、string、array)存储在堆中,栈中存储的是对堆中对象的引用。值类型赋值时会复制整个数据,引用类型赋值时只复制引用。值类型继承自 System.ValueType,引用类型继承自 System.Object。值类型不能为 null(可空类型除外),引用类型可以为 null。
问题:"Windows 运动控制卡开发中,如何实现高精度的定时任务?"
参考答案: Windows 运动控制卡开发中实现高精度定时任务的几种方法:1)使用多媒体定时器(timeSetEvent),精度可达 1ms;2)使用高精度定时器(QueryPerformanceCounter 和 QueryPerformanceFrequency),精度可达微秒级;3)使用运动控制卡自带的硬件定时器;4)使用实时操作系统或 RTOS 内核扩展;5)对于 Windows 系统,可考虑使用中断服务程序(ISR)或驱动程序级别的定时控制。
问题:"TCP/IP 协议中三次握手的过程是什么?"
参考答案: TCP 三次握手建立连接过程:1)客户端发送 SYN=1、seq=x 给服务端,客户端进入 SYN_SENT 状态;2)服务端收到后发送 SYN=1、ACK=1、seq=y、ack=x+1 给客户端,服务端进入 SYN_RCVD 状态;3)客户端收到后发送 ACK=1、seq=x+1、ack=y+1 给服务端,客户端和服务端都进入 ESTABLISHED 状态,连接建立成功。三次握手的目的是防止已失效的连接请求报文段突然又传送到了服务端,造成错误。
问题:"在 Windows GUI 开发中,如何避免界面卡顿?"
参考答案: 避免 Windows GUI 界面卡顿的方法:1)将耗时操作放在后台线程执行,使用 Task、Thread 或 BackgroundWorker;2)使用异步编程模式(async/await);3)使用 Dispatcher 或 SynchronizationContext 在主线程更新 UI;4)合理使用数据绑定和虚拟化技术(如 VirtualizingStackPanel);5)避免在 UI 线程进行大量计算或 I/O 操作;6)使用双缓冲技术减少闪烁;7)合理控制控件数量和复杂度,避免过度的重绘。
🎯应聘面试准备
问:想应聘上述岗位,需要做哪些准备?
答:
简历优化
1.核心信息前置
- 学历背景: 本科及以上,计算机科学、软件工程、自动化等相关专业
- 工作经验: 2-5年软件开发经验,有运动控制卡开发或 Windows GUI 开发经验者优先
- 技术栈: C#、C++、.NET Framework、Windows API、TCP/IP、Socket
- 意向岗位:
2.匹配岗位关键词
- 技术栈: C#、C++、.NET Framework、Windows API、QT、TCP/IP、Socket
- 工程能力: 设备控制、运动控制、GUI 开发、数据处理、现场调试
- 工具与平台: Visual Studio、PLC、运动控制卡、BOSS 直聘
- 能力标签: 精通 C#、熟悉 C++、有 QT 经验、PLC 经验、设备通讯经验
技能梳理
编程语言与框架
- C# 深度掌握: .NET Framework 基础、垃圾回收机制、泛型、反射、LINQ、异步编程(async/await)、委托与事件
- C++ 熟练应用: 指针与内存管理、STL 标准库、面向对象编程、模板编程、RAII 惯用法
- Windows API: Win32 API、COM、DLL 开发、多线程编程、进程间通信
运动控制与设备通讯
- 运动控制卡开发: 脉冲控制、伺服/步进电机控制、多轴联动、插补算法、位置反馈与闭环控制
- 设备通讯协议: TCP/IP、Socket 编程、串口通讯(RS232/485)、Modbus 协议、CAN 总线
- PLC 集成:
GUI 开发
- Windows Forms/WPF: 控件开发、数据绑定、MVVM 模式、自定义控件、样式与模板
- QT 开发(加分项): Qt Widgets、Qt Quick、信号与槽机制、跨平台 GUI 开发
- 界面优化:
工程实践
- 软件开发流程: 需求分析、架构设计、详细设计、编码、单元测试、集成测试
- 文档编写:
- 现场调试:
面试准备
经典问题
- 请介绍一个你开发的运动控制相关项目,其中遇到的最大挑战是什么?如何解决的?
- C# 中接口和抽象类的区别是什么?在什么情况下选择使用哪一个?
- 如何处理运动控制过程中的实时性要求?在 Windows 环境下有哪些技术手段?
- 谈谈你对 .NET Framework 垃圾回收的理解,如何避免内存泄漏?
- 如何保证设备通讯的稳定性和可靠性?如何处理通讯中断情况?
系统设计
- 设计一个基于运动控制卡的自动化设备软件架构,包含 GUI 层、控制层、驱动层
- 如何设计一个可扩展的通讯协议框架,支持多种设备类型和通讯方式?
- 设计一个高精度的位置控制系统,考虑实时性、精度、安全性等方面