首页 > 代码库 > 歌尔声学笔试

歌尔声学笔试

1 pwm是什么? 2 usb按照传输速率分哪几种,作用是什么 3 volatile的作用是什么? 4 改错:char *p=“hello”;char *q="world";char *k=strcat(p,q); 最后一道编程题,20分。




脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。   USB 1.x(包括1.0,1.1):使用全速模式(FS:12Mb/s)和低速模式(LS:1.5Mb/s)。例如鼠标、键盘就是低速设备运行,而打印机、扫描仪就使用全速设备模式运行存在12M的传输速度瓶颈 
USB 2.0将设备之间的数据传输速度增加到了480Mbps,快过USB 1.x的40倍,但是最初的USB2.0的速度只是定义为240Mbps,但是技术队伍通过努力,把速度提高到了480Mbps。


关键字volatile有什么含意 并给出三个不同的例子。  一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3). 多线程应用中被几个任务共享的变量 1.struct和class的区别
从定义上来说,有两点区别:
(1)默认继承权限,如果没有特殊说明,来自Class的继承按照private继承处理;来自struct的继承按照public继承处理。
(2)成员的默认访问权限。Class成员默认为private权限;struct默认为public权限。
2.输出结果题(歌尔和软控都考了)
void main()
{
int a=10,b,c,d;
b=a++;
c=++a;
d=10*a++;
printf("b,c,d: %d, %d, %d\n",b,c,d);
}
10 11 100
总体来说 x++的意义就是将包含x++的语句分成两条,比如说这样:
a = x++;
这条语句实际上可以这么看:
a = x;
x = x + 1;
因为加1的工作逻辑上可以看成是包含x++的语句结束之后执行的。
++x就比较简单了,简单的将其看作为是(x=x+1)就行了,比如说:
a = ++x;
实际上可以看做
a = (x=x+1);
实际代码这么写也可以,没区别。


至于某些不负责任的考试和文章中可能会提到类似i=i++;这样的语句,实际上是不符合c/c++语法的,这是一项未定义操作,undefined behaviour,实际结果编译器可以根据情况自己判断,甚至包括直接报错。
i++和++i都是把i加1,不同的是i++返回值是未加1前的值,++i返回值是加1后的值
3.引用和指针的区别
指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;引用本身就是目标变量的别名,对引用的操作就相当于对目标变量的操作。
4.ifconfig的作用(手动启动、观察与修改网络接口的相关参数,包括IP地址以及MTU大小等)
ifconfig是linux中用于显示或配置网络设备(网络接口卡)的命令,英文全称是network interfaces configuring。配置网卡的IP地址语法例:ifconfig eth0 192.168.0.1 netmask 255.255.255.0
下列提法中,不属于ifconfig命令作用范围的是 D 。 
A 配置本地回环地址 
B 配置网卡的IP地址 
C 激活网络适配器 
D 加载网卡到内核中
5.int main(int argc, char *argv[])
{
struct a1
{
   int i1;
   int i2;//4
   char c1;
   char c2;//2
};
struct a2
{
   int i3;
   char c3;
   char c4;
   int i4;
};
struct a3
{
   char c5;
   short s1;
   short s2;
   char c6;
};
printf("%d,%d,%d\n",sizeof(a1),sizeof(a2),sizeof(a3));//答案是12,12,8


return 0;
}
6.union{int i;char c;long l;}Date;
struct
{
   int i1;
   Date d;
   char c1;
}T;
printf("%d\n",sizeof(T)+max(Date));
具体题目可能记不得了,大体就是这样
7.进程与线程的区别?
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 


线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 


一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行 


8.软件开发中的模型
瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
快速原型模型(Rapid Prototype Model)
快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。  
通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。
增量模型(Incremental Model)
在增量模型中,软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成. 增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品。
螺旋模型(Spiral Model)
将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。
喷泉模型(fountain model)
也称面向对象的生存期模型, OO模型) 
  喷泉模型与传统的结构化生存期比较,具有更多的增量和迭代性质,生存期的各个阶段可以相互重叠和多次反复,而且在项目的整个生存期中还可以嵌入子生存期。就像水喷上去又可以落下来,可以落在中间,也可以落在最底部。
智能模型(四代技术(4GL)
智能模型拥有一组工具(如数据查询、报表生成、数据处理、屏幕定义、代码生成、高层图形功能及电子表格等),每个工具都能使开发人员在高层次上定义软件的某些特性,并把开发人员定义的这些软件自动地生成为源代码。
混合模型(hybrid model)
过程开发模型又叫混合模型(hybrid model),或元模型(meta-model),把几种不同模型组合成一种混合模型,它允许一个项目能沿着最有效的路径发展,这就是过程开发模型(或混合模型)。实际上,一些软件开发单位都是使用几种不同的开发方法组成他们自己的混合模型。
各种模型的优点和缺点
  瀑布模型 文档驱动 系统可能不满足客户的需求 
  快速原型模型 关注满足客户需求 可能导致系统设计差、效率低,难于维护 
  增量模型 开发早期反馈及时,易于维护 需要开放式体系结构,可能会设计差、效率低 
  螺旋模型 风险驱动 风险分析人员需要有经验且经过充分训练
9.死锁的必要的条件,如何避免死锁
1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。 
2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。 
3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。 
4)环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,???,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。
在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。
10. 输出结果题:
unsigned int i=20;
int j=-30;
if(i+j>0)
   printf("Positive!\n");
else
   printf("Not Positive!\n");
11.32位操作系统针对的32位的CPU设计
12. 进程有三种状态: C 。 
A 准备态、执行态和退出态 
B 精确态、模糊态和随机态 
C 运行态、就绪态和等待态 
D 手工态、自动态和自由态 


13. 终止一个前台进程可能用到的命令和操作 A 。 
A kill 
B <CTRL>;+C 
C shut down 
D halt 


14. 程序改错题,如果错误请改正,如果正确请说出函数的功能(软控)
void *fun(char *src,int len)
{
char dest[1024];
memcpy(dest,src,len);
return dest;
}
15. SPI总线有几根,分别是什么?
MOTOROLA公司的SPI总线的基本信号线为3根传输线,即SI、SO、SCK。传输的速率由时钟信号SCK决定,SI为数据输入、SO为数据输出。
16. 输出结果分析
#include <stdio.h>
class base
{
    public:
        base(int i);
        ~base();
    private:
        int m_i;
};
base::base(int i):m_i(i) 
{
    printf("step %d\n",i);
}
base::~base()
{
    printf("step %d\n",m_i);
}
base base1(5);        
void main()
{
    printf("step 1\n");
    base *a=new base(4);
    delete a;
}
17. 有关指针的一些题型,给一个变量a,定义整型变量,指针变量等
18.中断子程序评价

歌尔声学笔试