亚控科技笔试面试记录

笔试

可以参考:https://www.cnblogs.com/wft1990/p/6545446.html

以下仅是回忆起的题目

1  回答下面的问题(6分)

  (1).Void GetMemory(char **p, int num){

  *p = (char *)malloc(num);

  }

  void Test(void){

  char *str = NULL;

  GetMemory(str, 100);

  strcpy(str, "hello");

  printf(str);

  }

  请问运行Test 函数会有什么样的结果?

  答:输出“hello”

  (2). void Test(void){

  char *str = (char *) malloc(100);

  strcpy(str, “hello”);

  free(str);

  if(str != NULL){

  strcpy(str, “world”);

  printf(str);

  }

  }

  请问运行Test 函数会有什么样的结果?

  答:输出“world”。

  这里仔细理解下free的意义,free函数只是释放指针指向的内容,而该指针仍然指向原来指向的地方(str != NULL)

  此时,指针为野指针,如果此时操作该指针会导致不可预期的错误。安全做法是:在使用free函数释放指针指向的空间之后,将指针的值置为NULL

  (3). char *GetMemory(void){

  char p[] = "hello world";

  return p;

  }

  void Test(void){

  char *str = NULL;

  str = GetMemory();

  printf(str);

  }

  请问运行Test 函数会有什么样的结果?

  答:无效的指针,输出不确定

2 编写strcat函数(6分)

  已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);

  其中strDest 是目的字符串,strSrc 是源字符串。

  (1)不调用C++/C 的字符串库函数,请编写函数 strcat

  答:

  VC源码:

  char * __cdecl strcat (char * dst, const char * src)

  {

  char * cp = dst;

  while( *cp )

  cp++; /* find end of dst */

  while( *cp++ = *src++ ) ; /* Copy src to end of dst */

  return( dst ); /* return dst */

  }

  (2)strcat能把strSrc 的内容连接到strDest,为什么还要char * 类型的返回值?

  答:方便赋值给其他变量

  参考:https://www.cnblogs.com/zkfopen/p/11059521.html

3  int i=10, j=10, k=3; k*=i+j; k最后的值是?

  答:60,此题考察优先级,实际写成: k*=(i+j);,赋值运算符优先级最低

4 写出float x 与“零值”比较的if语句。

  答:if(x>0.000001&x<-0.000001)

5 堆栈溢出一般是由什么原因导致的?

  答:没有回收垃圾资源。

6 多态的作用

  答:

7 进程通信方法及线程同步机制区别

  答:参考:https://blog.csdn.net/eulb/article/details/2177500

8 为什么构造函数没有返回值?构造函数失败怎么处理?

  答:https://blog.csdn.net/tangaowen/article/details/1818819

    https://blog.csdn.net/wind19/article/details/8213114

9 数字字符串转换成这个字符串对应的数字(十六进制)

   要求:这个字符串参数必须包含一个或者多个数字,函数应该把这些数字转换为整数并且返回这个整数。如果字符串参数包含任何非数字字符,函数就返回零。不必担心算数溢出。

  答:https://www.cnblogs.com/zkfopen/p/11060685.html

 

 面试

1 虚函数的作用,虚函数的实现原理

  答:https://www.cnblogs.com/zkfopen/p/11061414.html

2  什么是野指针?野指针的危害?如何避免野指针?

  答:野指针是随机指向一块内存的指针,野指针不是NULL指针。

    野指针可能会造成内存泄露的危害。(注意:野指针不会一定造成内存泄露,如果该野指针指向的内存刚好是某个变量的地址,那么野指针也能使用这块内存)。

    我们要在以后养成良好的编码习惯:

    1.将没有指向的指针初始化指向NULL(指向NULL的指针不能对他的指向进行修改)

    2.当想给一个指针指向的空间赋值时,一定要给这个指针分配空间(malloc)

    3.当空间分配完后,要检查这个指针的空间是否分配成功

    4.当空间分配完后,要先将这块内存初始化(memset,bzeor)

    5.当这块内存使用完后,必须将这块内存释放(free)

    6.释放完空间后,将指针再次指向NULL(防止这个指针再次成为野指针)

3 对代码规范的理解

  答:

    若想写出一个好的代码,我觉得应该可以具体的从以下细节进行训练。
    1.排版
    2.注释
    3.标识符命名
    4.可读性
    5.变量,结构
    6.函数,过程
    7.可测性
    8.程序效率
    9.质量保证
    10.代码编辑,编译,审查
    11.代码测试及维护
    12.宏

猜你喜欢

转载自www.cnblogs.com/zkfopen/p/11061466.html