芯动科技

收藏
100-499人
未融资

15

在招职位

47

面试经验

0

真题试卷

查看官网
上传简历
此刻你想和大家分享什么
职位类型
全部
硬件工程师
电子/半导体
项目
最新
热门
头像
01-13 21:42
已编辑
北京大学 嵌入式软件开发
一面自我介绍然后简历上写了用过gdb和git随口问了我几个gdb和git的用法。然后是提问Q1:Arm汇编中bl的意思A:抱歉,arm汇编我没深入研究过,我用的平台指令集是TI自研的,但我研究过X86的汇编我推测一下。B是跳转的意思,bl的意思可能是小于跳转等于X86汇编的jl,可也能是类似x86的long jump。这个题答案是小于跳转,没答出来但是面试官说还可以。Q2:static 修饰的C语言变量存放在哪里,有什么作用A:存放在data段,不会被重复初始化。Q3:C语言变量有几种储存方式A:存放在stack data heap bssQ4:变量未初始化值是多少A:stack是垃圾值,不确定,全局变量未初始化是0.Q5: 什么是野指针A:我认为是存放了一个不应该访问地址的指针,比如free之后的指针再次访问,访问了一个未进行初始化的指针,访问了一个函数返回的指向局部变量的指针。Q6:外设和处理器交互的方式A:中断,DMA,普遍嵌入式设备的外设会被映射到地址空间中,所以可以直接通过读写被映射的地址进行交互。Q7:使用gcc编译一个hello.c的程序使用什么指令A:gcc hello.c -o hello.out反问环节:Q:工作中会比较多的使用gdb吗?A:调试会用到,看你写了所以问你一下Q:还有有几轮面试A:一般就两轮,特别优秀的三轮。二面自我介绍然后:Q1:看你简历上写了使用fft进行信号处理,讲讲吧A:我们控制这边是用来获取对象的频率响应特性的,就是使用频率成分丰富的信号作为被控对象的输入然后获取被控对象的输出,对输入输出信号做fft分析。Q2:在线还是离线A:离线Q3 简历上写了解决了cache一致性维护讲讲这个A:实验室用的DSP是八核的一款DSP,测试读写的时候发现自读自写没有问题,但是0核写1核读读取不到正确的数据,查阅芯片手册发现可能是cache的原因,写没有写入下一级的内存,读没有无效化cache。去论坛看了一下相关的帖子,然后解决了这个问题。主要通过官方提供的两条指令cache_invalid cache_writeback。读的核需要无效化cache,写的核需要writeback写到下一级。Q4:你还写了解决了多核同步问题,怎么解决的A:我用的芯片没有像X86提供原子指令,转而提供了一种原子外设,官方叫做硬件信号量,访问这个外设的时候是原子的,我模拟实现了一把spinlock 访问临界区的时候上锁。Q5:了解linux吗A:了解,增加模仿linux写过一个简易版本的操作系统内核。Q6:我看你简历上没写啊,讲讲你这个内核吧,跑在什么平台上的,都实现了什么功能A:跑在i386平台,用qemu模拟器模拟的。可以实现内存管理、进程创建、Sytemcall、进程调度还有一个简易版本的内核调度Q7:从Boot开始吧,讲讲你的内核启动过程和你实现的功能。A:i386自导bios在启动之后会从0x7c80读取第一条指令执行,所以内核需要使用链接器来修改镜像的地址。启动后会跳转到镜像entry处的地址,这是一个初始化函数,首先会进行内存的初始化,探测剩余的内存大小,申请一块地址作为page directory,然后对剩余内存按照4kb进行分割,使用链表连接,实现内存池。需要时向内核申请。我的进程创建时模仿linux fork实现的,利用的是写时拷贝技术,只创建一个新的栈,拷贝父进程的page directory的映射,但是标记页表为只读不写,如果写会触发缺页中断,然后进行相应的拷贝。调度是就是在可以准备运行的进程中挑选一个可以准备运行的进程,简单的round-robin算法,后来加入了优先级调度,利用hash-map寻找优先级最高的进程。Q8:在内存初始化中,怎么探测剩余内存的。A:镜像在bss段的最后会创建的一个标记叫做end,可以探测一个cmos管知道总共的内存大小,可以间接知道剩余内存的大小。答案附在面经中   https://daxprogram.com/
查看13道真题和解析
点赞 评论 收藏
分享
2024-12-23 23:07
已编辑
一面自我介绍然后简历上写了用过gdb和git随口问了我几个gdb和git的用法。然后是提问Q1:Arm汇编中bl的意思A:抱歉,arm汇编我没深入研究过,我用的平台指令集是TI自研的,但我研究过X86的汇编我推测一下。B是跳转的意思,bl的意思可能是小于跳转等于X86汇编的jl,可也能是类似x86的long jump。这个题答案是小于跳转,没答出来但是面试官说还可以。Q2:static 修饰的C语言变量存放在哪里,有什么作用A:存放在data段,不会被重复初始化。Q3:C语言变量有几种储存方式A:存放在stack data heap bssQ4:变量未初始化值是多少A:stack是垃圾值,不确定,全局变量未初始化是0.Q5: 什么是野指针A:我认为是存放了一个不应该访问地址的指针,比如free之后的指针再次访问,访问了一个未进行初始化的指针,访问了一个函数返回的指向局部变量的指针。Q6:外设和处理器交互的方式A:中断,DMA,普遍嵌入式设备的外设会被映射到地址空间中,所以可以直接通过读写被映射的地址进行交互。Q7:使用gcc编译一个hello.c的程序使用什么指令A:gcc hello.c -o hello.out反问环节:Q:工作中会比较多的使用gdb吗?A:调试会用到,看你写了所以问你一下Q:还有有几轮面试A:一般就两轮,特别优秀的三轮。二面自我介绍然后:Q1:看你简历上写了使用fft进行信号处理,讲讲吧A:我们控制这边是用来获取对象的频率响应特性的,就是使用频率成分丰富的信号作为被控对象的输入然后获取被控对象的输出,对输入输出信号做fft分析。Q2:在线还是离线A:离线Q3 简历上写了解决了cache一致性维护讲讲这个A:实验室用的DSP是八核的一款DSP,测试读写的时候发现自读自写没有问题,但是0核写1核读读取不到正确的数据,查阅芯片手册发现可能是cache的原因,写没有写入下一级的内存,读没有无效化cache。去论坛看了一下相关的帖子,然后解决了这个问题。主要通过官方提供的两条指令cache_invalid cache_writeback。读的核需要无效化cache,写的核需要writeback写到下一级。Q4:你还写了解决了多核同步问题,怎么解决的A:我用的芯片没有像X86提供原子指令,转而提供了一种原子外设,官方叫做硬件信号量,访问这个外设的时候是原子的,我模拟实现了一把spinlock 访问临界区的时候上锁。Q5:了解linux吗A:了解,增加模仿linux写过一个简易版本的操作系统内核。Q6:我看你简历上没写啊,讲讲你这个内核吧,跑在什么平台上的,都实现了什么功能A:跑在i386平台,用qemu模拟器模拟的。可以实现内存管理、进程创建、Sytemcall、进程调度还有一个简易版本的内核调度Q7:从Boot开始吧,讲讲你的内核启动过程和你实现的功能。A:i386自导bios在启动之后会从0x7c80读取第一条指令执行,所以内核需要使用链接器来修改镜像的地址。启动后会跳转到镜像entry处的地址,这是一个初始化函数,首先会进行内存的初始化,探测剩余的内存大小,申请一块地址作为page directory,然后对剩余内存按照4kb进行分割,使用链表连接,实现内存池。需要时向内核申请。我的进程创建时模仿linux fork实现的,利用的是写时拷贝技术,只创建一个新的栈,拷贝父进程的page directory的映射,但是标记页表为只读不写,如果写会触发缺页中断,然后进行相应的拷贝。调度是就是在可以准备运行的进程中挑选一个可以准备运行的进程,简单的round-robin算法,后来加入了优先级调度,利用hash-map寻找优先级最高的进程。Q8:在内存初始化中,怎么探测剩余内存的。A:镜像在bss段的最后会创建的一个标记叫做end,可以探测一个cmos管知道总共的内存大小,可以间接知道剩余内存的大小。答案附在面经中   http://daxprogram.com
芯动科技二面3人在聊 查看15道真题和解析
点赞 评论 收藏
分享
点赞 评论 收藏
分享
面试官介绍公司进行自我介绍1.问了C和C++一些基础的,问更了解C还是C++,我答的C++然后从C++切入问2.问了堆栈方面的内存分布堆空间 栈空间 分别存什么3.static的用途静态主要用途 用在什么地方 为了什么4.虚函数主要用在哪虚函数如何实现5.顺着虚函数问到多态的实现方式(虚函数,函数重载)6.网络编程流程服务器客户端流程:socket等等一系列7.多线程多进程编程8.实际中用过哪些多线程编程修昂目中有没有多进程多线程9.线程安全问题10.加过哪几种锁讲讲都在什么情况下加的锁(读写锁,互斥锁,自旋锁))11.linux静态库和动态库静态库动态库区别啥的12.IO复用select poll epoll13IIC相关阶段 开始阶段 三个阶段14arm寄存器都有哪些种之后就是和面试官聊天 说学的是软件为什么想弄嵌入式等等问项目 项目上我写的深度学习 和 网络编程多线程多进程相关的总体还是偏底层 喜欢问实现原理 底层原理补充;写的时候忘了 之后突然想起来 还问了 数据结构,红黑树,红黑树是epoll的实现方式顺着epoll问了问红黑树,但是我对于红黑树只有最简单概念的了解用的少,所以没答上比如 链表的插入,口述链表插入的整个过程#24届软开秋招面试经验大赏##如何判断面试是否凉了##软件开发薪资爆料##你的秋招进展怎么样了#  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
点赞 评论 收藏
分享
头像
2023-11-20 10:23
英特尔_Software_engineer
面试官介绍公司进行自我介绍1.问了C和C++一些基础的,问更了解C还是C++,我答的C++然后从C++切入问2.问了堆栈方面的内存分布堆空间 栈空间 分别存什么3.static的用途静态主要用途 用在什么地方 为了什么4.虚函数主要用在哪虚函数如何实现5.顺着虚函数问到多态的实现方式(虚函数,函数重载)6.网络编程流程服务器客户端流程:socket等等一系列7.多线程多进程编程8.实际中用过哪些多线程编程修昂目中有没有多进程多线程9.线程安全问题10.加过哪几种锁讲讲都在什么情况下加的锁(读写锁,互斥锁,自旋锁))11.linux静态库和动态库静态库动态库区别啥的12.IO复用select poll epoll13IIC相关阶段 开始阶段 三个阶段14arm寄存器都有哪些种之后就是和面试官聊天 说学的是软件为什么想弄嵌入式等等问项目 项目上我写的深度学习 和 网络编程多线程多进程相关的总体还是偏底层 喜欢问实现原理 底层原理补充;写的时候忘了 之后突然想起来 还问了 数据结构,红黑树,红黑树是epoll的实现方式顺着epoll问了问红黑树,但是我对于红黑树只有最简单概念的了解用的少,所以没答上比如 链表的插入,口述链表插入的整个过程以上的具体答案收录到我的专栏中,专栏地址在下方  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
投递芯动科技等公司10个岗位
点赞 评论 收藏
分享
模拟面试
真实面试体验,快速补齐短板
应聘感受
暂无应聘感受
牛客网
牛客企业服务