.在函数 void func(int *a[10]) 和 void func(int **a)是等价的吗?
void func(int *a[10])和void func(int **a)//前者是数组指针,后者是二级指针
void print(char **pstr) 和 void print(char *pstr[3])等价
{
int i;
puts(pstr[0]);
//for(i=0;i<3;i++)
//puts(pstr++);//注意这样加的话:是移动一个整的pstr指针数组
}
int main()
{
char *str[3]={"123","456","789"};
print(str);
return 0;
}
在函数 void func(int a[10][10]) 和 void func(int (*a)[10])是等价的吗?
void func(int a[10][10])和void func(int *[10])
//前者是二维数组,后者是指向一个包含10个元素的int型数组的指针,注意在函数内部使用
int i=1;
return i==1?true:false; //错误 应该是return i==1;
公司考试这种题目主要考你编写的代码是否考虑到各种情况,是否安全(不会溢出)
各种情况包括:
1、参数是指针,检查指针是否有效
2、检查复制的源目标和目的地是否为同一个,若为同一个,则直接跳出
3、读写权限检查
4、安全检查,是否会溢出
搜索的输入信息是一个字符串,统计300万输入信息中的最热门的前十条,我们每次输
入的一个字符串为不超过255byte,内存使用只有1G,
请描述思想,写出算发(c语言),空间和时间复杂度
引用和指针的区别?
嵌入式开发和PC开发有哪些不同?嵌入式开发 需要注意哪些?
在开发中遇到了哪些难题?怎么解决的。
linux 进程通讯 :管道通讯 ,消息队列,共享内存分别适合那些场所?
在建立基于 TCP socket通讯时,在刚刚建立好连接后,尚未进行数据传输,server端突然crush掉了。现在立刻重启server端应用,一般是无法重启的,为什么?怎么解决?
QT中抛弃signal and slot 可以用什么代替?
switch(a) a 的类型是?switch的参数不能为实型。
注:必须是整数型常量,包括char,short,int,long等,不能是浮点数。
某银行系统上线后,访问并发达5万,系统性能下降,情况汇报给科技部门后,负责该系统的项目组认为导致该情况的原因是,应用服务器内存性能的下降。请问分析是否正确,为什么?
1 ListView 和 Baseadapter 之间的原理 简述一下 Baseadapter
2,android 的四大组建 简述一下 和使用环境
3 摄像机用那个包
4 简述下 android 中的 mvc
5 有一个图像题 ,实现 电话薄 共有几种方法 简述下每种方法
6 activity的生命周期 和 每个周期的使用环境
7 从数据库中拿数据 使怎样的 adapter
8JAVA 的答题 是 单例模式
9 简述你对android的看法 代码和 文字不限
10 还有 两个题好像 就不记得了
java 就是老师发的几个题
关键字static的作用是什么?
这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:
1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
关键字volatile有什么含意 并给出三个不同的例子。
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:
1). 并行设备的硬件寄存器(如:状态寄存器)
2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3). 多线程应用中被几个任务共享的变量
尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程的。那么嵌入式系统中,动态分配内存可能发生的问题是什么?
主要有三种类型:内存泄露、内存碎片和内存崩溃 内存崩溃是内存使用最严重的结果,主要原因有数组访问越界、写已经释放的内存、指针计算错误、访问堆栈地址越界等等。碎片收集的问题,变量的持行时间等等
54.程序什么时候应该使用线程,什么时候单线程效率高。
答:1.耗时的操作使用线程,提高应用程序响应
2.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。
3.多CPU系统中,使用线程提高CPU利用率
4.改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独
立的运行部分,这样的程序会利于理解和修改。
其他情况都使用单线程。
IP组播有那些好处?
答:Internet上产生的许多新的应用,特别是高带宽的多媒体应用,带来了带宽的急剧
消耗和网络拥挤问题。组播是一种允许一个或多个发送者(组播源)发送单一的数据包
到多个接收者(一次的,同时的)的网络技术。组播可以大大的节省网络带宽,因为无
论有多少个目标地址,在整个网络的任何一条链路上只传送单一的数据包。所以说组播
技术的核心就是针对如何节约网络资源的前提下保证服务质量。
进程和线程的差别。
线程是指进程内的一个执行单元,也是进程内的可调度实体.
与进程的区别:
(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。
网络编程中设计并发服务器,使用多进程 与 多线程 ,请问有什么区别?
1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。
2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
两者都可以提高程序的并发度,提高程序运行效率和响应时间。
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
tcp /udp属于运输层
TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。
与 TCP 不同, UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。由于 UDP 比较简单, UDP 头包含很少的字节,比 TCP 负载消耗少。
tcp: 提供稳定的传输服务,有流量控制,缺点是包头大,冗余性不好
udp: 不提供稳定的服务,包头小,开销小
c和c++中的struct有什么不同?
答案:c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private
124.进程之间通信的途径答案:共享存储系统消息传递系统管道:以文件系统为基础
125.进程死锁的原因答案:资源竞争及进程推进顺序非法
126.死锁的4个必要条件答案:互斥、请求保持、不可剥夺、环路
127.死锁的处理答案:鸵鸟策略、预防策略、避免策略、检测与解除死锁
128. 操作系统中进程调度策略有哪几种?答案:FCFS(先来先服务),优先级,时间片轮转,多级反馈
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
3 求圆周率Pi
4 解决哈希冲突的方法
7. 实现两个int变量的值的交换,要求不使用临时变量。
int swap (int *a, int *b)
{
*a = (*a) ^ (*b);
*b = (*a) ^ (*b);
*a = (*a) ^ (*b);
}
开发一套server/client模式的双向通讯系统。要求:1.客户端采集CPU平均总使用率(100%-idle%)发给服务器端显示,频率为1秒。2.server可以支持多个client。3.client可以支持多个server。
通过/proc/stat可以获取CPU的利用率,怎么样发送要选择协议,如果选择UDP那么client要建立一个列表,发送给不同的服务器, server端每接收到一条信息 copy到任何地方处理就可以了
ARM7和ARM9的区别,在程序设计方面的区别 ?
1.请说出linux内核需要完成的主要工作(至少4项)
2.当构建linux内核时,我们通常可以通过4个步骤完成整个内核的编译和安装,请说出执行下述四个步骤时所完成的主要工作:
(1)make menuconfig
(2)make
(3)make modules_install
(4)make install
3.内核编译好后,会生成两个文件,一个是源代码根目录下的.config,一个是include/linux/autoconf.h,请说出: (1)这两个文件记录的内容是什么 (2)在什么时候需要用到这两个文件
4.在内核源代码的很多目录中,都可以见到两个文件,Makefile和Kconfig,这两个文件的作用分别是什么?
5.在Kconfig文件中,以下语句的作用是什么?
(1)config
(2)bool
(3)tristate
(4)source
(5)menu
(6)depends on
6.内核中用于描述进程状态的结构体是哪一个?该结构体有三个成员,comm,prio和static_prio,请问它们记录的是什么信息?
7.请说出linux进程的几种主要状态
8.在内核代码中,我们如何找到当前进程的结构体?(请
说出相应宏的名称,并描述一下该宏的实现方式)
9.内核编译完成后,会生成一个记录内核信息的符号表,称为System.map。该表中T,D,B符号分别表示什么意思?表中还有对应的小写符号t,d,b,大写符号和小写符号的区别是什么?
10.系统启动时采用的内核安装在文件系统的哪个位置?系统模块又安装在哪个位置?
11.当我们实现一个模块时,最少要包括哪个头文件?实现模块时所包括的头文件在源代码的哪个目录中?
12.以下宏的作用是什么?
(1)module_init
(2)module_exit
(3)module_param
(3)EXPORT_SYMBOL
(4)MODULE_LICENSE
(5)MODULE_AUTHOR
13.结构体定义如下:
struct mydev {
...
int a;
long b;
struct list_head mylist;
};
下述函数中的指针point是该结构体中成员a的指针,请用系统提供的宏获得结构体mydev的指针。
void my_func(int *point) {
struct mydev *dev = ?
}
14.什么是虚拟地址,什么是物理地址?我们在驱动程序中使用的是哪种地址?
15.什么是IO端口?什么是IO内存?
16.系统根目录下的/proc目录中保存了很多文件,请说出下述几个文件记录了什么内容
(1)kallsyms
(2)iomem
(3)ioports
(4)interrupts
17.请说出中断和异常的相同点和不同点
18.如果系统中新安装了一块pci声卡,我们如何知道该pci设备采用的中断号?(说明原理即可)
19.实现中断处理程序时需要可重入吗?请回答理由
20.为什么要将某些中断分为上半部和下半部?
21.请回答下半部的3种实现方式,并说明这几种方式最主要的特点
22.linux内核是抢占式的还是非抢占式的?如果是抢占式的,假设当前运行的进程为a,如果有一个比a优先级高的进程b也处于运行态,那么系统在什么时候将当前进程切换为b?如果b的优先级比a低呢?
23.系统"滴答"指的是什么东西?用于记录系统启动后滴答数量的全局变量是哪一个?
24.进程睡眠时采用的两个函数wait_event和wait_event_interruptible有什么区别?
25.并口的数据寄存器是8位的IO端口0x378,向该端口写会改变并口引脚2到引脚9的电平状态;从该端口读可以获得引脚2到引脚9的当前电平。如果将端口0x37a的bit4设置为1,当并口引脚10上的电平从低变为高时,将产生一次并口中断,该中断对应的中断号为7。
根据上述硬件信息,请实现一个并口的设备驱动,该驱动的要求如下:
(1)驱动按照char设备设计
(2)实现file_operations中的open,release,read和write
(3)开启中断,并实现中断处理函数
(4)为读操作实现缓冲区,当中断发生时,从并口读取数据,并保存到读缓冲区中
(5)在程序中加入同步保护机制(采用自旋锁或信号量)
(5)实现ioctl函数(自行实现,比如可以提供中断打开或关闭的命令)
(6)通过proc接口导出驱动中的信息(比如可以记录中断发生的次数,然后通过proc接口导出)
(6)采用platform总线的方式对驱动进行封装
(7)通过在驱动中添加class的支持,实现由udevd创建用户态的设备文件
(8)编写用户态的测试函数
上述要求可酌情实现
4. Linux 开发
1) 在链接脚本里面的at命令?
定时执行命令at:命令在给定的时间执行,但不自动重复。at命令的一般格式为:at [ -f file ] time ,在指定的时间执行file文件中所给出的所有命令。也可直接从键盘输入命令:
at命令的形式:at [-f script] [-m -l -r] [time] [date]
参数说明: -f script 要提交的脚本或命令,
-l 列出当前所有等待运行的作业,同atq,
-r 清除作业,-m 作业完成后给用户发邮件,time 时间,date 日期。
1.使用at命令提交命令或脚本
提交若干行命令,可以在at命令后跟上日期时间并回车。然后逐条输入相应命令,按Ctrl-D退出。
2.清除一个作业
atrm [job no]或at -r [job no]。
$ at 12:00
at>mailto Roger -s ″Have a lunch″ < plan.txt
at>Ctr-D
2) 自旋锁和信号量使用场合的差异
自旋锁与信号量"类似而不类",类似说的是它们功能上的相似性,"不类"指代它们在本质和实现机理上完全不一样,不属于一类。
自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环查看是否该自旋锁的保持者已经释放了锁,"自旋"就是"在原地打转"。而信号量则引起调用者睡眠,它把进程从运行队列上拖出去,除非获得锁。这就是它们的"不类"。
但是,无论是信号量,还是自旋锁,在任何时刻,最多只能有一个保持者,即在任何时刻最多只能有一个执行单元获得锁。这就是它们的"类似"。
鉴于自旋锁与信号量的上述特点,一般而言,自旋锁适合于保持时间非常短的情况,它可以在任何上下文使用;信号量适合于保持时间较长的情况,会只能在进程上下文使用。如果被保护的共享资源只在进程上下文访问,则可以以信号量来保护该共享资源,如果对共享资源的访问时间非常短,自旋锁也是好的选择。但是,如果被保护的共享资源需要在中断上下文访问(包括底半部即中断处理句柄和顶半部即软中断),就必须使用自旋锁。
3) printk健壮的原因
健壮性是printk()函数最容易让人们接受的一个特质。任何时候,任何地方都能调用它,内核中的printk()比比皆是。它可以在中断上下文和进程上下中调用;它可以在持有锁时调用;它可以在多处理器上同时调用,而且调用者连锁都不必使用。
它是一个弹性极佳的函数。这一点相当重要,printk()之所以这么有用,就在于它随时都在那里而且随时都能用。
给你100M的缓冲区, 写的PIPE, 数据按字节存储.支持卷绕读写.
可以用C语言实现,也可以用C++实现
HR的提问:
1.北京市一天消耗多少苹果?你是怎么推算的?五分钟考虑?
这种题千篇一律,无非就是问你北京的一天耗电量,北京一天水消耗量,轮到我变成苹果了。这种题不在于具体数值,不过我实现恰巧查过北京人口1500多万,问题在于你是如何考虑的,是一种压迫式的问法,问道你无语。
本人经历(一个plmm问的):
Hr: 北京的一天消耗多少苹果?你可以考虑5分钟?
我:1000多万个吧(我没想直接就说了,这样很不好,这需要考虑周全)
Hr:为什么这么说?
我:我知道北京人口1500万,所以消耗1000多万吧(不要以为这就完了)
Hr:问什么消耗1000多万,你怎么考虑的?
我:因为不是所有人都吃,我就去掉了500万(千万要考虑好了再说,别丢人)
Hr:你对这个有了解吗,你考虑老人,小孩,男女等情况了吗?(杯具了)
我又申请考虑一下。。。。。(早干么去了)
我:800万左右吧。
Hr:问什么?怎么计算的?
我:如果一半的人么每人吃一个就是800万个,老人吃的少些,近似于0,儿童多些,按2个算,男生0.5,女生1.5,平均下来还是800万个。
Hr:你考虑其他情况了,问什么按每人吃一个算,为什么老人吃的那么少,你有了解吗,也许…老人生病什么的..(此时hr貌似也有点语无伦次了).那么你说说多大的孩子才算小孩?2-3岁?你问什么认为小孩就吃两个?
我:12岁小学之前的算是小孩的吧。如果是我,我就吃俩。。。。(我已经不知道说啥了)。
Hr:哦这样啊。。这个问题就到这里吧。(终于问的山穷水尽了)
2、要建个餐馆,画一个你心中的布局
有了上次的教训,这次多注意就好了,别人家一问你问什么这样那样的,你就不知道杂说了。
4.一个被频繁调用的全局数组int a[100], 被怀疑越界了,你的上司要求你在10分钟内查出越界的地方。你如何解决。
5.忘记了。。。。。
6.一个数组里又N个元素,另一个数组里又2N个元素但只有前N个数据有效,这两个数组都是排好序的要求把第一个数组合并到第二个数组中,合并后这个数组是有序的。。算法要求O(N)。
2).创建一个进程的函数:
答案: fork
分析: 面试的时候有可能会问到用没用过vfork函数.
fork和vfork函数的区别在于:
<1>.vfork存在一种优化方式:
vfork并不将父进程的地址空间复制到子进程中,因为子进程会立即调用exec(或exit),于是也就不存在访问该地址空间.相反,在子进程调用exec或exit之前,子进程是在父进程空间运行的.这种优化工作方式在某些UNIX的页式虚拟存储器实现中提高了效率.
<2>.vfork能够保证子进程先运行,在子进程调用exec或exit之后父进程才可能会被调度运行.