我参与了一次离谱的面试

2023-04-07 16:00:00

某国企的一个全资子公司,来到二面了,面完了,离谱!

为什么离谱呢?容我慢慢道来,算是一次面试经历记录。

首先,八年了,我第一次一来就被追问奖学金,面试官让我说出具体是什么奖学金。我回复:“都是优秀学生奖学金,一个是校级的,一个是国家的。”面试官对我的回答好像并不满意,继续追问是什么奖学金。我是真的想不起了。试问各位同学在毕业这么久后还能想起奖学金具体叫什么奖学金吗?我只好坦白:“我真的记不起具体是什么奖学金了,面试官如果您比较在意的话,我回到家以后找出来,拍照发给 hr,然后拖他再发给您您看可以吗?”给应和过去了。

随后,面试官全程都在问一些计算机基础相关的知识。我面试的岗位是测开,他们不聊测试理念,不聊自动化,不聊自动化框架,不聊测试平台等相关的东西,反而一直在问计算机基础,脱离岗位本身应该关注的问题。把计算机基础贯彻到面试结束。。。

下来我想了一下,我面试了个啥啊,我都怀疑我面试的岗位是不是测开了。计算机基础固然重要,但是觉得放在二面且全程只聊计算机基础。这样是不是有点不合理?

面试氛围

全程尬聊,你会 xxx 吗?你知道 xxx 吗?说下 xxx 和 xxx 的区别。在这种一问一答紧张尴尬的氛围中

没能回答上的问题

直接上问题,确实没有给出很好的回答,算是自己能力问题。

  1. CPU 和 GPU 的区别
  2. 进程和线程的区别
  3. 什么是时序图
  4. UML 是什么
  5. 说一下堆栈与队列
  6. 域名是如何解析的
  7. 序列化是什么
  8. 子网掩码的作用是什么

再付一份下来后查阅资料总结的回答,希望在以后的面试中别再跌倒。(持续更新)

  1. CPU 和 GPU 的区别

    CPU(中央处理器)和 GPU(图形处理器)是两种不同的处理器类型,它们有一些重要的区别。

    • 功能:CPU 通常用于运行操作系统、应用程序和进行一般计算任务。而 GPU 则专门用于处理图形、视频和图像等大规模数据并行计算任务。

    • 结构:CPU 通常拥有少量的处理核心(通常 2-8 个),但每个核心都非常强大且灵活,可以处理多种任务。而 GPU 拥有成百上千个处理核心(最高可达数万个),这使得它能够同时处理大量数据,并在短时间内完成复杂的计算任务。

    • 性能:由于 CPU 的结构较为灵活,因此它可以适应各种不同的计算任务。然而,GPU 在处理大规模数据并行计算任务时比 CPU 快得多,因为它可以同时处理大量数据。

    • 应用场景:CPU 通常用于运行桌面计算机、笔记本电脑、服务器等常见设备,而 GPU 更适合用于需要大量图形处理和并行计算能力的应用程序,如游戏开发、科学计算、人工智能等领域。

    总的来说,CPU 与 GPU 的主要区别在于它们的设计目标和应用场景。CPU 适合进行一般计算任务,而 GPU 则适合处理大规模数据并行计算任务。

  2. 进程和线程的区别

    线程和进程都是操作系统中的基本执行单位,它们之间的主要区别是:

    1. 进程是程序执行的一个实例,每个进程都有自己的地址空间、堆栈、文件描述符等系统资源,进程与进程之间相互独立。而线程是进程中的一个执行单元,它与所属进程共享进程的地址空间和系统资源,同一进程内的多个线程可以共享数据和代码。

    2. 进程之间通信的成本较高,需要使用 IPC(Inter-Process Communication)机制,如管道、套接字、共享内存等。而线程之间通信的成本相对较低,可以通过共享内存等方式直接访问数据。

    3. 进程的切换开销较大,因为切换时需要保存和恢复整个进程的上下文信息,包括地址空间、寄存器、文件描述符等。而线程的切换开销相对较小,因为同一进程内的多个线程共享大部分的状态信息。

    4. 进程之间的内存空间是独立的,不同进程之间的变量不能直接相互访问。而线程共享同一进程的地址空间,可以直接访问该进程中的所有变量。

    总体来说,进程是资源分配的最小单位,线程是任务调度的最小单位。在多核 CPU 中,进程可以并行执行,而同一进程中的线程只能在单个 CPU 上轮流执行。因此,在编写并发程序时,选择使用进程还是线程,需要根据具体应用场景和需求进行权衡。

  3. 什么是时序图

    时序图(Sequence diagram)是一种 UML(统一建模语言)图,用于描述对象之间的交互以及消息传递的顺序,它强调了时间顺序和对象之间的交互关系。

    时序图主要由以下几个元素组成:

    • 对象:用方框表示,包含对象名称。

    • 生命周期线:用虚线表示,表示对象的生命周期。

    • 消息:用箭头表示,表示一个对象向另一个对象发送消息,箭头指向接收消息的对象。

    • 自关联消息:表示一个对象自己向自己发送消息。

    • 同步消息:用实线和 “+” 标识表示,在发出同步消息后,发送者等待接收者返回结果后再继续执行。

    • 异步消息:用虚线和 “异步” 标识表示,表示发送者不需要等待接收者返回结果就可以继续执行。

    通过时序图,我们可以清楚地看到对象之间的交互过程和消息传递的顺序,帮助我们更好地理解和设计系统。它常被用于软件开发中的需求分析、功能设计和测试等阶段。

  4. UML 是什么

    UML 是一种标准化的建模语言,全称为 Unified Modeling Language(统一建模语言),它用于描述面向对象系统的各个方面。UML 提供了一套结构化的图形符号和建模工具,可以用来描述软件系统的需求、架构和行为等。

    使用 UML 可以使团队成员之间更好地理解和沟通,因为它提供了一个共同的表达方法。UML 图包括用例图、类图、时序图、活动图、状态图、组件图和部署图等,每种图都有不同的用途和表示方法。在软件开发过程中,使用 UML 建模可以帮助开发人员更好地把握整体架构,规避风险,提高开发效率。

  5. 说一下堆栈与队列

    堆栈和队列是两种常见的数据结构,它们分别采用了不同的数据操作方式。

    堆栈(Stack)是一种后进先出(Last In First Out,LIFO)的数据结构。堆栈只允许在表的一端进行插入和删除操作,这一端被称为栈顶。插入元素也称为入栈(Push),删除元素也称为出栈(Pop)。堆栈的应用场景包括代码中的函数调用、浏览器的前进后退、撤销操作等。

    队列(Queue)是一种先进先出(First In First Out,FIFO)的数据结构。队列允许在表的一端进行插入操作,在另一端进行删除操作,分别称为队尾和队头。插入元素也称为入队(Enqueue),删除元素也称为出队(Dequeue)。队列的应用场景包括打印任务排队、消息队列、计算机系统中的进程调度等。

    堆栈和队列都是非常基础的数据结构,可以在算法实现、程序设计等方面发挥重要的作用。

  6. 域名是如何解析的

    域名解析是将域名转换成 IP 地址的过程。当用户在浏览器中输入一个域名时,首先会通过本地 DNS 缓存或者向 ISP 提供的 DNS 服务器发送请求,获取到对应域名的 IP 地址,然后才能建立 TCP 连接,发送 HTTP 请求,获取到网站内容。

    域名解析的具体过程如下:

    1. 浏览器首先检查自己的本地 DNS 缓存中是否有该域名的 IP 地址记录,如果有,就直接使用这个 IP 地址,否则进入下一步。

    2. 浏览器向本地 DNS 服务器发起域名解析请求,本地 DNS 服务器通常由 ISP(Internet Service Provider)提供。如果该服务器能够命中缓存,它就会直接返回 IP 地址给浏览器。否则,本地 DNS 服务器会向根 DNS 服务器发起请求。

    3. 根 DNS 服务器收到查询请求后,会返回一个上级 DNS 服务器的地址,告诉本地 DNS 服务器可以向哪个 DNS 服务器继续查询。本地 DNS 服务器根据返回的地址再向下一级 DNS 服务器发起请求。

    4. 下一级 DNS 服务器同样会根据自己的缓存来判断是否能够直接返回请求结果。如果不能,就向更高级别的 DNS 服务器发起请求,直到找到负责该域名解析的权威 DNS 服务器。

    5. 权威 DNS 服务器返回该域名对应的 IP 地址给本地 DNS 服务器,本地 DNS 服务器再将 IP 地址返回给浏览器,浏览器就可以根据该 IP 地址与服务器建立 TCP 连接,发送 HTTP 请求获取数据。

    6. 整个域名解析的过程看起来比较复杂,但实际上对于大多数用户而言,都是由 ISP 提供的 DNS 服务器来完成的,用户只需要输入域名即可,无需关心具体的解析过程。

  7. 序列化是什么

    序列化是指将对象或数据结构转换为一组字节或字符的过程,以便能够将其存储在文件或内存中、通过网络传输等方式进行传递和恢复。

  8. 子网掩码的作用是什么

    子网掩码(Subnet Mask)是一个 32 位二进制数,用于标识 IP 地址的网络部分和主机部分。它与 IP 地址一起使用,来确定一个 IP 地址所属的子网。

    在 TCP/IP 协议中,IP 地址由网络部分和主机部分组成。子网掩码用于分隔这两个部分,将 IP 地址分成网络号和主机号两部分。在同一子网内的所有设备都具有相同的网络号,而不同子网之间的网络号则不同。

    子网掩码的作用包括:

    1. 确定 IP 地址的网络部分和主机部分,实现对 IP 地址的分类和划分。

    2. 用于计算网络地址和广播地址。网络地址是该子网中第一个可用的 IP 地址,而广播地址是该子网中最后一个可用的 IP 地址。

    3. 实现子网控制。通过子网掩码,可以将一个大的网络划分成若干个子网,实现更好的网络管理和控制。

    4. 提高网络安全性。通过子网掩码设置不同子网的访问权限,可以有效保障网络的安全性。

    5. 总的来说,子网掩码是 IP 地址划分和管理的重要工具,在实际网络中起到非常关键的作用。