




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一面:(电话通知面试)1面试官:两人,职位一高一低,开门较低2 项目经历(重点)项目做的不多的话,就会问一些数据结构 1要求写C、c+函数,(内联函数)(非计算机系)3 简历所写专业技能 2数据结构、面向对象 3 计算机网络TCP连接三次握手问题、路由器如何工作惯性导航系统的运行需要同时求解2个水平位置(有时还有惯性指示高度)和3个姿态角共5个二阶微分方程。因此,需要设定10个初始条件。同时,惯性导航系统的精度还取决于惯性测量单元的精度,特别是陀螺仪的漂移误差将产生随时间增长的惯性位置指示误差。因此,常常需要在系统启动阶段对陀螺仪的误差模型系数重新标定,以便在系统运行时加以精确实时补偿。为此,惯性导航系统运行前必须进行初始对准与标定。细节:别人叫你做,再坐他留下:简历,六级证书、四六级口语证书和成绩单复印件他问我是否服从地点调剂,工作要经常出差能否接受,工作要加班问我有什么看法。我一一做答之后,他说:“好,今天就到这里吧。我可以告诉你,你已经过了,好好准备下轮面试吧。今天下午参加了综合面和英语测试1.自我介绍2.是否参加中兴的校园招聘,为什么选择测试?(我华为报的研发,被鄙视;所以中兴该报测试)3.近一两年遇到的最大挑战是什么?4.如果你作为一个测试人员,发现了研发中的失误,而研发人员不承认,你如何解决?5.测试的标准,如何考核测试6.工作地点问题英语测试 不算入录用标准 ,一开始一个面试官五个应聘者,后来改为一对一简介,然后随便交流,问了一下同学舍友对自己的评价,态度很好1, 指针和数组的关系1.定义定义数组时必须指定数组的类型和大小,定义指针时只需要指定类型。2.存储空间的分配对于数组,因为系统会按照你指定的大小为数组分配存储空间指针占四个字节(32位)数组名是一个指针常量,所以数组名+1还要注意类型的大小。a+1 表示下一个元素的地址,&a+1,则不同2, C或C+怎么读写文件,说任何一个都可以1)首先,需要打开文件:fopen函数:FILE * fd =fopen(txtfile.txt,r);定义一个文件指针 FILE *fd; 用fopen打开一个文本文件,fopen的第一个参数为文件路第二个参数定义的是打开文件的方式;r为读,w为写;2)判断文件是否打开if(NULL =fd)printf(文件未被打开);3)文件已经打开,可以进行读写;4) 关闭文件fclose函数原型:int fclose(FILE *stream)功能:关闭一个文件流,使用fclose就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区5)读文件的函数有好几个,fread,fscanf,fgets。它们之间是有区别的:6)fscanf() fscanf(fp,%d%s,&i,s);按照格式读fscanf函数,fprintf函数与前面使用的scanf和printf 函数的功能相似,都是格式化读写,两者的区别在于fscanf 函数和fprintf函数的读写对象不是键盘和显示器,而是磁盘文件fscanf 的格式要和文件的格式一样,否则读不出来;fscanf(fp,”%d,%d,%d”,&a,&b,&c)/文件必须是以逗号隔开;而且必须是整形数据scanf注意问题:1) 参数个数要对应;scanf(“%d%d”,&a)编译不会报错2) 输入的数据类型必须要和格式控制串一致scanf(“%d”,&a);如果我输入一个字符a,3)问题一、参数的个数一定要对应如以下的代码片段:scanf(%c%d,&a):这种错误是初学者经常有的错误,由于粗心大意,少写了一参数,导致错误的发生,更要命的是,这种错误编译器,不会检查,也就是说如果程序中有这种类型的错误,编译链接是不会有错误的,可是正常运行时,会出现各种莫名其妙的错误,如常见的accessvolition错误。所以一定要尽量避免这种错误的出现问题二、输入的数据类型一定要和所需要的数据类型一致如以下的代码片段:scanf(%d,&a);程序运行后,我输入一个a,这样程序运行时并不会报错,不过是a并没有获得用户所输入的整型值,然后程序正常的往下执行,可是如果在以后的程序中我还用到了scanf语句,那么问题就来了,由于scanf(%d,&a);语句未能获得所需要的数据,所在这条语句不会对缓冲区进行任何操作,也就是说用户输入的a还在缓冲区中,要样如果我再次执行scanf(%d,&b);语句,即使此时用户输入的是一个合法的整数,程序也将得不到用户输入的数值,因为,上一次输入的a还在缓冲区中,用户这次输入的整数和a拼接就会形成一个非整型数据,这样,scanf(%d,&b);语句也将不能正常获得数据。这样错误一直传递下去,直到出现错误为止。解决这个问题最有效的方法就是清空缓冲区,用户判断如果正常读取所需要的数据就不需要做操作,否则就清空缓冲区,以备下一次的输入,清空缓冲区的方法,可见我的另个一篇文章/s/blog_7b62c61c0100vhlu.html。问题三、每次调用完scanf后,记得调用一个getchar()函数7)以上都是顺序读写;即读写文件必须从头开始,顺序读写;随机读写:只要读写一部分,将位置指针移动到读写的位置备注:读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中函数调用的形式为: fgets(字符数组名,n,文件指针); 其中的n是一个正整数。表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志0。例如:fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入 字符数组str中。1. 在读出n-1个字符之前,如遇到了换行符或EOF,则读出结束。2. fgets函数也有返回值,其返回值是字符数组的首地址。fread函数原型:size_t fread(void* buff,size_t size,size_t count,FILE* stream)作用:从文件中读入数据到指定的地址中参数:第一个参数为接收数据的指针(buff),也即数据存储的地址第二个参数为单个元素的大小,即由指针写入地址的数据大小,注意单位是字节第三个参数为元素个数,即要读取的数据大小为size的元素个素第四个参数为提供数据的文件指针,该指针指向文件内部数据返回值:读取的总数据元素个数int num,count;int* pr=new intnum*count;fread(pr, num*4, count, stream); / stream为fopen中返回的FILE指针要将数据写入pr中,必须为pr分配内存,一个int为4个字节,所以要x4fread(fa,4,5,fp);其意义是从fp所指的文件中,每次读4个字节(一个实数)送入实数组fa中,连续读5次,即读5个实数到fa中。3,堆和栈的区别4,什么是虚函数,虚函数和纯虚函数的区别5,程序在内存中的分布6,内存泄露有什么后果7,联合和结构的区别8,什么是宏,现场写一个宏,求两个数的最小值9,冒泡排序 可能会要求写一个冒泡排序的程序 10struct 和Union的区别 11数组指针,函数指针 12两个类互为对方成员应注意什么? 13虚函数和纯虚函数有什么区别 14进程和线程的区别 15死锁和死锁的必要条件 16IP报头有几个字节 17数据库的查询语句 18一个软件生命周期有几个环节19int(*a)2什么意思 20sizeof(*a)=? 21写一个函数指针 函数指针返回值类型 22嵌入式系统和普通操作系统的区别 23嵌入式编程有什么特点 24TCP UDP 的区别 25中序遍历 26树转化为二叉树 27TCP/IP网络编程一般用哪几个函数 28谈谈你对面向对象的理解 29UML 多线程 CPU架构 原理 30操作系统优先队列抢占 31程序在什么情况下会异常退出 32二级指针怎样赋值 33对指针进行+ 操作会出现什么后果 34解释虚函数 内存泄露 const与define区别 35谈谈对内联函数的理解 36程序调试时出现内存不能读写的错误应该怎么解决c和c+的不同,多态的概念,虚函数怎么用?c是面向过程的语言,是最精简动人的语言。c+是面向对象的语言,目前基本上等于是最复杂的高级语言。面向对象比面向过程的语言多了三个特性:封装,继承,多态性。Extern “ c”extern C的作用是,告诉C+编译器,下面的代码按照C的方式进行编译,说白了,不要对这些函数进行名字重整(function name mangling)。通常在C+程序中使用C函数或者模块时,需要用到这个功能。C+进行名字重整,而C不进行重整。当C+程序引用C的函数时,它会按照重整后的名字去目标文件(.obj)中去寻找对应的函数,而目标文件中存放的却是C版本的函数,名字对不上,所以根本找不到!它告诉C+,包含在extern “C” /块中的东西是C版本的,你编译的时候不要进行名字重整,否则你链接的时候就无法找到我!#ifdef _cplusplusextern C #endif#include XXX.h#ifdef _cplusplus#endifsizeof函数C语言中判断数据类型或者表达式长度符;不是一个函数,字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来。sizeof是C/C+中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。还问了一些数据结构,给一串数字,用二分查找比较大小还问了一些毕设啊,项目相关的,以下是几个同学今天面完后回顾的题目,希望对大家有所帮助1.dll什么意思,2。动态链接库与静态链接库的区别3。死锁3。队列和栈的区别4。对栈操作要注意什么,上溢和下溢的区别5。tcp/ip分层结构,osi分层结构6。传输层协议。7。物理层解释8。应用层解释7。覆盖1.堆和栈的区别,栈的后进先出;2.虚函数的作用;3.SQL创建表;4.数据库主键和外键,ID是什么5.char a = hello; sizeof(a)等于多少?6.char *p; p指向内存地址0001,问p+指向哪?(32位机)7.#define FUN(a,b) a+b 问有问题么?8.还问到了B-树,我说不会问我工作是否可以调剂,我说可以。他又问如果让你选职位的话,你首先选哪个?职位有研发,售前售后、文档工程师。 我想了一下,说研发。然后他又问那你为什么当初不选择研发呢? 我说因为我是理科的,觉得和工科相比。 由于这里停顿了一下,他就把话接过去了:是不是觉得和他们比没有优势啊? 我说是的。 然后大家都笑了。最后面试官说:好吧,今天就到这里了,如果有什么消息我们会通知你的。保持手机畅通。我说好的,然后就走了。卡尔曼是种最优估计理论 能通过观测和状态之间的数学关系 依靠统计出的信号特征来对状态进行最优估计(可以理解为滤波);而陀螺呢 由于是个积分系统,会有误差 因此需要用卡尔曼来抵消这种误差可能要编写的程序题:1链表逆转(还可以用递归)01/* 单链表反转/逆序 */02Status ListReverse(LinkList L)0304LinkList current,pnext,prev;05if(L = NULL | L-next = NULL)06returnL;07current = L-next;/* p1指向链表头节点的下一个节点 */08pnext = current-next;09current-next = NULL;10while(pnext)1112prev = pnext-next;13pnext-next = current;14current = pnext;15pnext = prev;171819L-next = current;/* 将链表头节点指向p1 */20returnL;212递归方法:递归条件,递归返回,递归结束LiskNode *Reverse(LiskNode *Head,LiskNode *p)If (p-next=NULL)Head-next=p;/找到最后一个节点Return head;1. voidInversion_Recursion(ListNode*p,ListNode*Head)2. 3. if(p-next=NULL)4. 5. Head-next=p;6. return;/找到最后一个节点7. 8. Inversion_Recursion(p-next,Head);9. p-next-next=p;/反转节点10. p-next=NULL;/第一个节点反转后其后继应该为NULL11. 在递归算法中的做法是:1找到最后一个节点和倒数第二个节点,把最后一个节点设为头节点的后继2反转这两个节点3倒数第三个和第四个节点重复执行步骤2其中注意,链表是以节点后继为NULL结束的,在更改指针的过程中要把改后的节点后继改为NULL/递归实现反转,返回反转后的链表头/原理同上述非递归方法,反转当前节点和该节点的指针(反转前分别保存当前节点和该节点的下一个节点,以便完成后续节点相同的操作-通过递归完成)Node* Reverse(Node* p_cur, Node* p_pre)if(NULL = p_cur-next) p_cur-next = p_pre;return p_cur;/如果最后一个节点,通过改变最后一个节点的改向,并作为第一个节/点,无head/或者head-next=p_cur;return head;else Node *p_nxt = p_cur-next;p_cur-next = p_pre;Reverse(p_nxt, p_cur);递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。注意:递归两个条件(1) 递归就是在过程或函数里调用自身;(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口递归要注意:3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。 4)在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。阶乘 n! = n * (n-1) * (n-2) * .* 1(n0)/阶乘int recursive(int i)int sum = 0;if (0 = i|1=i)sum= 1;elsesum = i * recursive(i-1);return sum;递归的原理,其实就是一个栈(stack),比如求5的阶乘,要知道5的阶乘,就要知道4的阶乘,4又要是到3的,以此类推,所以递归式就先把5的阶乘表示入栈,在把4的入栈,直到最后一个,之后呢在从1开始出栈,看起来很麻烦,确实很麻烦,他的好处就是写起代码来,十分的快,而且代码简洁,其他就没什么好处了,运行效率出奇的慢.递归方法在运行时需要较多次数的函数调用,如果调用层数比较深,需要增加额外的堆栈处理,造成较大的空间需求;又参数传递时需要压栈等操作,造成时间需求比较高。循环避免了一系列函数调用和返回中所涉及到的参数传递和返回值的额外开销。递归和循环在时间复杂度方面是理论等价的,不考虑函数调用开销(尾递归的优化不讨论)和函数调用产生的堆栈开销。理论上循环和递归是等价的函数被调用还未结时再调用函数,则会保存当前状态,入栈,依次类推,当最后一个函数执行完后,倒数第二个函数出栈,再也倒数第一个函数的结果进行计算,依次类推;递归处理代码简洁外,还有个好处,就是你在循环前,不知道循环的层次是多少时,用递归比较方便,譬如遍历树、遍历磁盘文件等,在循环前,你根本不知道磁盘有多少个文件夹和文件,调用递归无需事先知道这些,只要找到最后文件夹时返回就可以了。但是递归也有缺点,前面也有同志说了,就是消耗栈资源太多了。局部变量占用的内存是一次性的,也就是O(1)的空间复杂度,而对于递归(不考虑尾递归优化的情况),每次函数调用都要压栈,那么空间复杂度是O(n),和递归次数呈线性关系Node* ReverseList2(Node *ptr)27 if (ptr-next = NULL)28 return ptr;29 Node *nextNode = ptr- next;30 ptr-next = NULL;31 Node *reverseRest = ReverseList2(nextNode);32 nextNode-next = ptr;33 return reverseRest;内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行内联函数具有一般函数的特性,它与一般函数所不同之处只在于函数调用的处理。一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换。在使用内联函数时,应注意如下几点:1. 在内联函数内不允许用循环语句和开关语句。如果内联函数有这些语句,则编译将该函数视同普通函数那样产生函数调用代码,递归函数(自己调用自己的函数)是不能被用来做内联函数的。内联函数只适合于只有15行的小函数。对一个含有许多语句的大函数,函数调用和返回的开销相对来说微不足道,所以也没有必要用内联函数实现。2.内联函数的定义必须出现在内联函数第一次被调用之前。关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。3.本栏目讲到的类结构中所有在类说明内部定义的函数是内联函数。1inline int max(int a, int b) return (ab)? a : b;编写strcpy函数功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。strcpy的实现代码char * strcpy(char * strDest,const char * strSrc)assert(strDest!=NULL)&(strSrc!=NULL)char * strDestCopy = strDest; /3while (*strDest+=*strSrc+)!=0); /4return strDestCopy;返回strDest的原始值使函数能够支持链式表达式,增加了函数的“附加值”。同样功能的函数,如果能合理地提高的可用性,自然就更加理想。链式表达式的形式如:int iLength=strlen(strcpy(strA,strB);(1) 使用指针之前,要检查它的有效性(2) 检查指针有效性,一般用(strDest!=NULL)而不是(!strDest)这是bool型的比较,如果这样做,包含了隐形的类型转换;(3) 而且,应该,将NULL=strDest;这样防止写成赋值语句/断言assert是一个宏assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。(程序报告错误,并终止执行)通过判断程序是否出现明显非法的数据;(检测指针的有效性)写十迚刢数癿补码,十迚刢转16迚刢,找错癿,有一道10分癿编程:将16迚刢转换为字符串(我交癿 白板),还有问答,比如兰二事维数组癿刜始化敁率问题,你看过哧些与业乢籍,你对oo中开闭原则癿看法回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。回调函数可以象普通函数一样被程序调用,但是只有它被当作参数传递给被调函数时才能称作回调函数。回调函数就是函数指针的一种用法【第一部分,40分】Windows API的回调函数(4分)求两个16位数字在16进制下的表示:(1)732 (2)8611 (4分)把地址为0x7788的16位端口的第3位和第10位取反,写出程序。 (4分)一个二叉树,前序遍历的结果是ABDEGCFHIJ,中序遍历的结果是DBGE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 桥梁专业知识培训课件
- 2026届河北省巨鹿中学高一化学第一学期期末监测模拟试题含解析
- 2025年机关事务管理面试宝典门诊部岗位面试模拟题及解析
- 2025年徐州市中考生物试题卷(含答案及解析)
- 2025江苏高校大学《辅导员》招聘考试题库及答案
- 2025年初级摄影课程学员面试题
- 2025年度注册验船师资格考试船舶检验法律法规考前冲刺模拟题及答案(网页版)
- 2025年验船师考试(C级船舶检验专业实务)考前模拟试题及答案二
- 北京市门头沟区2024-2025学年八年级上学期第二次月考生物考试题目及答案
- 2025年摄影摄像岗位面试预测题
- 蛇咬伤急救处理流程
- 陕西省特种设备隐患排查清单(2025年)
- 货款转让协议书
- 2025年内蒙古鄂尔多斯一中高考生物倒计时模拟卷含解析
- 2025CACA子宫颈癌诊疗指南解读
- 绿色建筑概论 课件全套 第1-11章 绿色建筑概述-绿色建筑运营与维护
- 2025医务人员手卫生规范
- 医务人员行为规范
- 光伏电站安全培训
- GB/T 35267.4-2025清洗消毒器第4部分:内镜清洗消毒器
- DB45T 1056-2014 土地整治工程 第2部分:质量检验与评定规程
评论
0/150
提交评论