电话面试准备

自我介绍

  • SARA,您好,我叫xx,今24岁,现在是xxxx。对软件开发很有兴趣,熟悉掌握C语言,且熟悉面向对象编程思想,了解java语言。使用S3C2440和STM32单片机和安卓工控屏开发好几个项目,例如:基于S3C2440嵌入式linux的GUI文件浏览器,基于stm32和android系统开发的充电桩功率检测装置,已经用于生产中。拥有一定的实践经验,任然觉得经历尚浅,希望通过这次实习,为您提供一份力量和提升自己技术。

介绍一下你做过的项目:搭建linux系统开发环境,编写应用程序,在S3C2440上使用,通过LCD浏览文件,查看电子书、图片。

如何编写应用程序:根据使用Freetype库和libjpeg库将字体和图片进行进行编码和获取位图,再将位图放到显存上,LCD控制器会将显存数据发送到LCD屏幕上。

由于之前使用汉字库获取位图无法对字体进行缩放,因此,使用freetype矢量字体
Freetype库:在字体文件中根据编码值,搜索字形,进行位置和角度的矢量变换,获取位图,放到显存中给LCD显示。
附加使用freetype主要是因为他能够对字体进行矢量变化,可以缩放和旋转,非常方便。
如何编程:加载字体文件,得到字形,进行缩放和发小变换,获取位图,放到显存中给LCD显示。

Libjpeg库:对图片进行解压,获取RGB数据,再一行行写入显存中,在LCD上显示图片。

如何操作显存:通过mmap映射设备文件,通过操作指针读写方式操作者一段内存,系统会自动回写对应显存,不需要使用read和write等系统调用函数。

GUI如何设计:分三部分,浏览模式可以用来浏览各个目录下面的电子书和图片。
连播模式用来自动浏览某个目录下面的图片。
设置模式:设定连播目录和时间间隔

多线程编程:主线程通过socket发给显示进程,封装触摸屏线程和标准输入线程事件。先给当前线程获得互斥量,后解除互斥锁等待输入事件而挂起。检测到输入事件获得互斥量,将输入事件通过全局变量共享,发送信号量唤醒主线程并释放互斥量。

代码框架:分为几个模块,编码模块、点阵模块、显示模块、输入模块、页面显示模块

遇到过的问题:
1只能显示根目录下内容,通过分析代码流程,排除输入事件后,在处理数据是发现代码出问题了,没有对目录进行字符串拼接,最后用sprintf拼接字符串,解决了问题。
2查看CPU占用率时,发现竟然有98%太高了,改掉了之前的循环插座模式,而是通过多线程方式操作。Cpu占用率立马降到3%

线程间通讯方式:
锁机制:包括互斥锁、条件变量、读写锁
互斥锁:互斥量空闲和锁定状态,空闲时线程可访问不会阻塞,锁定时不可访问而阻塞加入等待队里,等待互斥量解锁。
读写锁允许多个线程同时读共享数据,而对写操作是互斥的。
条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
信号量机制:
信号机制:
进程间通信方式:
管道(有亲缘关系)与有名(无)管道:数据单向流动
信号量与信号:防止进程共享资源时,其他进程也访问
消息队列:消息链表存放内核中
共享内存:映射一段能被其他进程访问的内存
套接字:通过网络共享数据
产生死锁的四个必要条件:

(1)互斥条件:一个资源每次只能被一个进程使用。
(2)占有且等待:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3)不可强行占有:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

基于stm32和android系统开发的充电桩功率检测
简介:通过使用可调电阻调节负载功率,实时显示在LCD屏幕上显示功率误差等级。

采用队列思路和均值滤波算法,平衡了系统的稳定性和快速性:由于受温度和采样受到的干扰,会使采样数据产生波动,因此首先对滤波后的值和新值进行8:2比例取值,提高系统快速性,用队列对滤波后值取均值,提高系统稳定性。
使用网口通讯,采用SPI协议:使用串行,全双工,速度快。
Android屏幕人机交互,设计可视化界面供工作人员观察数据和操控指令,建立客户端收发数据。

  1. 实现纸币硬币分类计数装置 2. 主要分为纸币硬币分离装置和硬币分离装置 3. 人员主要分工:纸币硬币分离装置、和硬币分离装置 4. 本人主要负责硬币的分离和计数 5.荣获全国应用型人才综合技能大赛国家级三等奖

机械
• 苹果采摘机械手
• 利用曲柄摇杆定理,微微转动曲柄,改变摇杆和连杆的角度,实现抓取果实。
• 智能钱币整理机
• 由三个部分组成:硬币和纸币分离装置、纸币分离装置和硬币分离装置。
• 硬币纸币通过风机和网格,使硬币调入网格下方,纸币吹入滑道,实现分离。
• 纸币通过颜色传感器,根据纸币的颜色不同来区分面值。
• 硬币进入斜面带孔滑道,根据直径大小不同实现分离。
• CaTICs:
• 在线绘图比赛,根据给出测试题,画出三维图,计算面积和体积。
• 货物升降装载机
• 通过传感器识别子车有无物品,在控制电机进行运输
• 爬杆机器人
• 由机械手装置和蠕动爬行装置
• 机械手用来抓取杆子,蠕动爬行装置用来,上下移动。

Static用法
用来修饰函数和变量
修饰函数之后,只能在本文件中明显调用,其他文件无法调用。
修饰局部变量
局部变量在局部函数运行完会消失
而静态局部变量不会消失,函数返回他的值也不变,相当于全局变量。
修饰全局变量
普通全局变量其他文件可见
静态全局变量只对当前文件可见

C语言编译过程为:预处理–>编译–>汇编–>链接

结构体字节对齐:内存的结构按照一定的规则在排序,而不是一个接着一个,提高存取效率,。

memcpy 函数实现,需要考虑到内存重叠场景及和strcpy区别
1 复制的内容不同,strcpy 只能复制字符串(包括结束符0),而memcpy复制任意内容。
2 复制的方法不同,strcpy不需要指定长度,它遇到字符串结尾符结束。所以容易溢出。memcpy则是根据第三参数聚丁复制的长度
3 用途不同。通常在复制字符串时用strcpy,而需要复制其他数据类型数据时则一般用memcpy
4 内存重叠时,strcpy会出现段错误,而memcpy不会

堆栈溢出一般是由什么原因导致的?
答 :1.没有回收垃圾资源
2.层次太深的递归调用

全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
答 、可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。

6、关键字volatile有什么含意 并给出三个不同的例子。
答:编译优化而导致的存取的数据不同步,定时器,多线程共享任务变量。
Register
尽可能将变量存在CPU内部寄存器,提高效率
结构与联合有和区别:
联合:所有成员共用一块地址空间
结构体:每个成员都有自己的地址空间

Const:意味着只读,一般修饰输入型参数,防止被恶意更改

堆和栈的区别是
(1) 内容不同:
栈:函数调用时,存放在函数的局部变量里
堆:由程序员自己分配
(2) 管理方式
栈:占用内存小,连续,系统自动分配并释放空间,速度快
堆:可分配空间大,不连续, malloc申请,free释放,速度慢,用起来方便
(3) 生长方式
栈:内存次哦啊

大小端:
低地址放低字节为小端。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值