当前位置:首页 > 海康笔试题目及部分答案
初始化数组
char msg[10];
memcpy(msg,0,sizeof(memcpy));
方法2:
写一个内存拷贝函数
// 考虑重叠的状况
void* _memcpy(void* dest, void* src, int len) {
if(!dest || !src || !len || dest == src) return dest;
char* pdest = static_cast
// dest 在 src + len 范围内
if(pdest > psrc && pdest < (psrc + len)) {
// 先备份被覆盖部分
int need = psrc + len - pdest; int offset = pdest - psrc;
char* pcache = new char[need];
int i = 0;
for (i = 0; i < need; ++i) pcache[i] = psrc[offset + i];
// 拷贝起始部分
for (i = 0; i < offset; ++i) pdest[i] = psrc[i];
// 拷贝剩余部分
for (i = 0; i < need; ++i)
pdest[offset + i] = pcache[i];
delete[] pcache; } else {
for (int i = 0; i < len; ++i) pdest[i] = psrc[i]; }
- 5 -
return dest; }
补充B卷:
1.32位机器上,假设有一个32位数字0x1234abcd保存在0x00000000开始的内存中,那么在little endian和big endian的机器上,按字节该整数在内存中存放的顺序是怎么样的? 2.ISO七层模型是什么,tcp/udp属于哪一层?
3.下面是一个中断服务程序的代码,请指出有那些问题? _interrupt double compute_area(double radius) {
double area= PI*radius*radius; return area; }
4.多任务系统中,常见的任务通讯机制有哪些?
5.请实现内存复制函数memcpy(void *dst,const void *src,int size). 答案:
1. 大端模式:数据的高字节存储在内存地址的低字节,(正常存储)小端模式:数据的高字节存储在内存地址的高字节.
little endian:0x00000000-0x000000003h:cd,ab,34,12 big endian: 0x00000000-0x000000003h: 12,34,ab,cd
2. 物理层-数据链路层-网络层-传输层-会话层-表示层-应用层,tcp/udp工作在传输层。 3. 中断子程序不能有返回值,去掉return area; compute_area之前的double关键字。
1)ISR 不能返回一个值。如果你不懂这个,那么你不会被雇用的。 3) 在许多的处理器/编译器中,浮点一般都是不可重入的。有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有效率的,在ISR中做浮点运
这个函数有太多的错误了,以至让人不知从何说起了:
2) ISR 不能传递参数。如果你没有看到这一点,你被雇用的机会等同第一项。
算是不明智的。 4) 与第三点一脉相承,printf()经常有重入和性能上的问题。如果你丢掉了第三和第四点,我不会太为难你的。不用说,如果你能得到后两点,那么你的被雇用前景越来越光明了。
4. 操作系统还提供进程间的通讯机制来帮助完成这样的任务。Linux中常见的进程间通讯机制有:
信号、管道、共享内存、信号量和套接字等。 5. 举例:
// memcpy.c #include
int main(int argc, char* argv[]) {
char *s=\iew\ char d[20]; clrscr();
- 6 -
memcpy(d,s,strlen(s)); d[strlen(s)]='\\0'; printf(\getchar(); return 0; }
截取view #include
int main(int argc, char* argv[]) {
char *s=\char d[20];
memcpy(d,s+14,4);
//memcpy(d,s+14*sizeof(char),4*sizeof(char));也可 d[5]='\\0';
printf(\getchar(); return 0; }
输出结果: View
初始化数组
char msg[10];
memcpy(msg,0,sizeof(memcpy));
*******************************************************************************
Linux开发工程师
1. 请列举主流linux的发布版本(四个以上)。
(1)Redhat有两大Linux产品系列,其一是免费的Fedora Core系列主要用于桌面版本,提供了较多新特性的支持。另外一个产品系列是收费的Enterprise系列,这个系列分成:AS/ES/WS等分支。
- 7 -
(2)Advanced Server,缩写即AS。AS在标准Linux内核的基础上,做了性能上的增强,并提高了可靠性,集成了众多常见服务器的驱动程序。可轻松识别IBM/DELL/HP等常见机架式服务器的磁盘阵列卡等设备。
2. makefile的基本写法,完成将test.c文件编译成可执行文件demo的makefile文件。 书上?
3. linux的基本命令有什么?在控制台root根目录下,查找包含字符”hikvision”的文
件名,要求使用管道命令而且包含子目录查找。 查???..
4. 当前linux最主流的两大桌面环境是什么,两者区别是什么?
KDE与GNOME是目前Linux/UNIX系统最流行的图形操作环境 5. linux系统下主要三类设备文件类型是什么?
块设备、字符设备、网络设备。 书——P354
Linux 中的设备有2种类型:字符设备(无缓冲且只能顺序存取)、块设备(有缓冲且可以随机存取)。每个字符设备和块设备都必须有主、次设备号,主设备号相同的设备是同类设备(使用同一个驱动程序)。这些设备中,有些设备是对实际存在的物理硬件的抽象,而有些设备则是内核自身提供的功能(不依赖于特定的物理硬件,又称为\虚拟设备\。
*******************************************************************************
网络开发工程师
1. 请写出OSI模型,TCP/IP模型。 2. 以太网的MTU是多大?
通常意义上的以太网MTU是指没有以太网header和FCS的以太网payload部分,IEEE802规定了大小为0~1500字节;所以,二层以太网帧长应该为这个长度加上18B(6B的DA、6B的SA和2B的Length/Etype以及4B的FCS),这样大小应该<1518;在Dot1Q情况下,应该在加上4B的802.1Q的Tag,即应该<1522B;在MPLS VPN环境中,IGP标签和VPN标签各是4B,所以,作为中间环节的交换机如果不支持Jumbo帧的话,就需要手工配置MTU=1500+N*4(N为MPLS Tag层数)。 3. IP地址,地址范围 4. ARP协议作用
IP数据包常通过以太网发送。以太网设备并不识别32位IP地址:它们是以48位以太网地址传输以太网数据包的。因此,IP驱动器必须把IP目的地址转换成以太网网目的地址。在这两种地址之间存在着某种静态的或算法的映射,常常需要查看一张表。地址解析协议(Address Resolution Protocol,ARP)就是用来确定这些映象的协议。
ARP工作时,送出一个含有所希望的IP地址的以太网广播数据包。目的地主机,或另一个代表该主机的系统,以一个含有IP和以太网地址对的数据包作为应答。发送者将这个地址对高速缓存起来,以节约不必要的ARP通信。
如果有一个不被信任的节点对本地网络具有写访问许可权,那么也会有某种风险。这样一台机器可以发布虚假的ARP报文并将所有通信都转向它自己,然后它就可以扮演某些机器,或者顺便对数据流进行简单的修改。ARP机制常常是自动起作用的。在特别安全的网络上, ARP映射可以用固件,并且具有自动抑制协议达到防止干扰的目的。
- 8 -
共分享92篇相关文档