实习面经总结

阿里测试开发
简历面:

  1. 你对测试了解嘛?
  2. 学的自动化怎么想起来投测试岗
  3. 举一个测试的例子吧
  4. 给你一个杯子你会怎么测试
  5. 你的测评低于平均分,你怎么解释
  6. 说一下等价类
  7. 为是么学C++
  8. Static 和 const的区别
    static
    static局部变量 将一个变量声明为函数的局部变量,那么这个局部变量在函数执行完成之后不会被释放,而是继续保留在内存中
    static 全局变量 表示一个变量在当前文件的全局内可访问
    static 函数 表示一个函数只能在当前文件中被访问
    static 类成员变量 表示这个成员为全类所共有
    static 类成员函数 表示这个函数为全类所共有,而且只能访问静态成员变量

const
const 常量:定义时就初始化,以后不能更改。
const 形参:func(const int a){};该形参在函数里不能改变
const修饰类成员函数:该函数对成员变量只能进行只读操作

static关键字的作用:
(1)函数体内static变量的作用范围为该函数体,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
(2)在模块内的static全局变量和函数可以被模块内的函数访问,但不能被模块外其它函数访问;
(3)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
(4)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。

const关键字的作用:
(1)阻止一个变量被改变
(2)声明常量指针和指针常量
(3)const修饰形参,表明它是一个输入参数,在函数内部不能改变其值;
(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;
(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为”左值”。

  1. <> 和 “” 的区别
    是直接从系统里边找。
    ““是先在本地找,然后在系统里边找。
    <>不可以替换””, ""可以提换<>

  2. 说一下malloc 和 new

  3. 说一下堆和栈
    堆和栈的区别是什么
    1、堆栈空间分配区别
    栈(操作系统):由操作系统(编译器)自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
    堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
    2、堆栈缓存方式区别
    栈使用的是一级缓存, 它们通常都是被调用时处于存储空间中,调用完毕立即释放。
    堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
    3、堆栈数据结构区别
    堆(数据结构):堆可以被看成是一棵树,如:堆排序。
    栈(数据结构):一种先进后出的数据结构。
    http://blog.chinaunix.net/uid-23860671-id-150568.html

  4. 为啥要分堆和栈
    (1)从软件设计的角度看,栈代表了处理逻辑,而堆代表了数据。这样分而治之,使得处理逻辑更为清晰。
    (2)堆与栈的分离,使得堆中的内容可以被多个栈共享(也可以理解为多个线程访问同一个对象)。这种共享的效益是显著的。一方面这种共享提供了一种有效的数据交互方式(如:共享内存),另一方面,堆中的共享常量和缓存可以被所有栈访问,节省了空间。
    (3)栈因为运行时的需要,比如保存系统运行的上下文,需要进行地址段的划分。对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,它的生长方向是向下的,是向着内存地址减小的方向增长。由于栈只能向下增长,因此就会限制住栈存储内容的能力。而堆不同,堆中的对象是可以根据需要动态增长的,因此栈和堆的拆分,使得动态增长成为可能,相应栈中只需记录堆中的一个地址即可。
    https://baijiahao.baidu.com/s?id=1661781183049654537&wfr=spider&for=pc

  5. 如果新建一个类,是放在堆里面还是栈

  6. Linux 的基本使用
    Pwd :显示当前目录
    Cd: 跳转文件
    Cd – 跳转到上一次跳转的目录
    Cat: 查看小文件
    CTRL+L 清除屏幕内容
    Mkdir: 创建一个新的目录
    Rmdir: 删除一个空的目录
    Cp: 复制文件或目录
    Rm: 移除文件或目录

  7. 了解排序算法嘛?具体说一说
    编程:二叉树中序遍历递归和非递归

C++面向对象的理解:
C++面向对象的特性可以总结为:封装、继承和多态。这也是大多数教材中提到的C++的三大特性。

封装:
封装就是讲程序模块化,对象化,把具体事物的特性属性和通过这些属性来实现一些动作的具体方法放在一个类中。对象是封装的最基本单位。属性用变量定义,行为用方法定义,方法可以直接访问同一个对象中的属性。

继承:
继承是子类自动共享父类数据和方法的机制。父类的相关属性,可以被子类重复使用,而对于自类中需要用到的新的属性和方法,子类可以自己扩展。

多态:
多态包含了重载和重写。
重写(覆盖,一般发生在父类和子类中)就是把子类从父类里继承下来的方法重写一遍,这样父类里相同的方法就被覆盖了;
重载(发生在同一个类中)相同方法名,不同形参,返回值相同
多态可以简单地理解为“一个接口,多种方法”,程序在运行时才决定调用的函数,C++多态性时通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法成为覆盖或重写,只有重写了虚函数才算体现出C++多态性

本身区别重载和覆盖并不算困难,但是C++的隐藏规则使得问题复杂度升高,隐藏是指派生类的函数屏蔽了与其同名的基类函数

  • 如果派生类中的函数与基类的函数同名,但是参数不同,此时,无论有无virtual关键字,基类的函数都将被隐藏;
  • 如果派生类中的函数与基类函数同名,且参数也相同,但是基类函数没有virtual关键字,此时基类的函数被隐藏
    ————————————————
    版权声明:本文为CSDN博主「caoyangxiaoyao」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/caoyangxiaoyao/article/details/81180645

字节ios开发面试:

  1. 二叉树最大路经
  2. 链表反转

你可能感兴趣的:(实习面经总结)