当前位置: 首页 > 面试经验 >

远算科技 - 11/22 OC

优质
小牛编辑
82浏览
2023-11-30

远算科技  - 11/22 OC

  • 一天四面,+ CEO 面 = 五面
  • 一面 - 1h - 11/16

    0、如何理解 C++、Java、Golang 的区别,他们适用场景是什么

    • C会被取代吗
    • Golang 相较于 Java 的优势、劣势
    1. C++、Java和Golang是三种不同的编程语言,它们有以下区别和适用场景:
    • C++是一种通用的编程语言,它继承了C语言的特性,并添加了面向对象编程的支持。C++适用于需要高性能和底层控制的应用,如游戏开发、系统编程和嵌入式开发等。
    • Java是一种面向对象的编程语言,它具有平台无关性和强大的生态系统。Java适用于构建大型企业级应用、Web应用、移动应用和分布式系统等。
    • Golang(Go)是一种开源的编程语言,它具有简洁的语法、高效的并发性和内置的并发模型。Golang适用于构建高并发的网络服务、分布式系统和云原生应用等。
    1. C语言不会被完全取代,因为它在系统编程和嵌入式领域仍然具有重要的地位。C语言具有高效的性能和对硬件的底层控制能力,因此在需要直接操作硬件或对性能要求极高的场景下仍然被广泛使用。
    2. Golang相较于Java的优势和劣势:
    • 优势:并发性:Golang内置了轻量级的协程(goroutine)和通信机制(channel),使得编写高并发程序更加简单和高效。性能:Golang具有高效的垃圾回收机制和编译器优化,可以提供较高的性能。简洁性:Golang具有简洁的语法和标准库,使得代码编写和维护更加容易。部署和构建:Golang的编译器可以将代码编译为独立的可执行文件,无需依赖其他运行时环境,方便部署和分发。
    • 劣势:生态系统:相对于Java而言,Golang的生态系统相对较小,一些第三方库和工具可能不如Java丰富。泛用性:Golang在某些领域的支持可能不如Java成熟,特别是在企业级应用和大型系统方面。

    需要根据具体的项目需求和技术要求来选择合适的编程语言。

    1、二叉树的遍历方式:前、中、后

    2、图的遍历方式:深度、广度优先遍历

    3、第一范式、第二范式、第三范式:

    • 一:不可分割的列
    • 一 + 消除 部分依赖
    • 二 + 消除 传递依赖

    4、现代操作系统常用的内存管理方式:段页式内存管理

    段页式内存管理是一种将分段和分页两种内存管理技术结合起来的方法,它相较于分段和分页有以下优势:

    1. 灵活性:段页式内存管理结合了分段和分页的优点,可以同时提供段和页的灵活性。每个进程可以被划分为多个段,每个段可以进一步划分为多个页。这样可以更好地适应不同程序的内存需求,提供更灵活的内存管理方式。
    2. 地址空间的隔离:分段和分页都可以提供地址空间的隔离,但它们各自的方式有一定的局限性。分段只能将地址空间划分为不同的逻辑段,而分页只能将地址空间划分为固定大小的页。而段页式内存管理可以同时提供段和页的划分,既可以将地址空间划分为不同的逻辑段,又可以将每个段划分为固定大小的页,从而更好地实现地址空间的隔离。
    3. 内存利用率:段页式内存管理可以更好地利用内存空间。分段和分页都存在一定的内部碎片问题,而段页式内存管理可以通过将段划分为固定大小的页来减少内部碎片。这样可以提高内存的利用率,减少内存浪费。
    4. 保护和权限控制:段页式内存管理可以提供更细粒度的保护和权限控制。每个段和每个页都可以设置不同的访问权限,从而实现更精细的内存保护和权限控制。这对于提高系统的安全性和稳定性非常重要。

    需要注意的是,段页式内存管理也存在一些缺点,比如管理复杂性增加、内存访问的开销增加等。因此,在选择内存管理技术时,需要根据具体的应用场景和需求进行权衡和选择。

    如果您有其他问题,请随时提问。

    5、怎么理解 《领域驱动设计》

    6、常见的排序算法有哪些【O(n logn) 复杂度的 】

    • 具体:[算法总结] 十大排序算法 - 知乎 (zhihu.com)
    • 总结:9种常用排序算法总结(超详细)_排序 归纳总结-CSDN博客

    7、二十三种设计模式分为那三大类:

    • 创造者模式:管理对象、实例 (单例模式、享元模式、工厂模式)
    • 结构型模式:搭建多个实例之间的关系架构 – (桥接模式、门面者模式)
    • 行为型模式:控制实例的具体行为、方法调用(解释器模式、模板方法)

    算法:

    • 下楼梯(水仙花数) + 括号匹配(栈 + 判断)

    二面 - 1h - 11/16

    1、

    2、HTTPS 相比与 HTTP 的区别在哪

    3、操作系统 内核态 和 用户态的区别:

    操作系统中的内核态和用户态是指不同的特权级别或权限级别,用于区分操作系统内核和用户程序的执行环境。它们之间的区别如下:

    1. 特权级别:内核态是操作系统内核运行的特权级别,具有最高的权限,可以执行特权指令和访问系统资源。用户态是用户程序运行的特权级别,权限较低,受到限制,不能直接访问系统资源和执行特权指令。
    2. 访问权限:在内核态下,操作系统内核可以直接访问和操作系统的所有资源,包括硬件设备、内存等。而在用户态下,用户程序只能通过系统调用接口间接地访问操作系统提供的服务和资源。
    3. 执行能力:在内核态下,操作系统内核可以执行特权指令,如修改页表、中断处理等,具有更高的执行能力。而在用户态下,用户程序不能直接执行特权指令,只能执行受限的指令集。
    4. 安全性:内核态和用户态的划分可以提高系统的安全性。内核态下的操作系统内核可以对系统资源进行保护和管理,防止用户程序对系统造成破坏。用户态下的用户程序受到操作系统的保护,不能直接访问和修改系统资源,从而保护系统的稳定性和安全性。

    通过将操作系统内核和用户程序的执行环境划分为内核态和用户态,可以实现对系统资源的保护和管理,提高系统的安全性和稳定性。

    如果您有其他问题,请随时提问。

    4、分布式共识算法:Raft介绍、Paxos、zookeeper 和 ETCD 的区别

    5、讲一下 常见的网络协议层,以及每层常见的协议有哪些

    6、你了解云计算是什么吗?

    云计算:

    云计算是一种基于互联网的计算模式,通过网络提供计算资源和服务。它将计算能力、存储空间和应用程序等资源集中在数据中心,并通过互联网按需提供给用户。用户可以通过云服务提供商提供的接口和工具,根据自己的需求快速获取和使用这些资源和服务。

    云计算具有以下特点:

    1. 弹性伸缩:云计算可以根据用户的需求进行弹性伸缩,即根据实际的计算负载自动调整计算资源的规模。用户可以根据需要增加或减少计算资源,以适应业务的变化。
    2. 按需自助服务:云计算提供了按需自助服务的方式,用户可以根据自己的需求自主选择和使用云服务。用户可以根据需要随时申请、配置和管理计算资源,而无需事先进行大量的投资和部署。
    3. 共享资源池:云计算通过共享资源池的方式提供计算资源和服务。多个用户可以共享同一组资源,根据需要进行分配和使用。这种共享方式可以提高资源的利用率和效率。
    4. 高可靠性和可用性:云计算通过在多个数据中心分布计算资源和数据副本,提供高可靠性和可用性的服务。即使某个数据中心发生故障,用户的数据和应用程序仍然可以在其他数据中心继续运行。
    5. 按使用付费:云计算采用按使用付费的模式,用户只需根据实际使用的资源和服务付费,避免了传统IT基础设施的高成本投资和维护费用。

    云计算在各个领域都有广泛的应用,包括云存储、云服务器、云数据库、云应用开发等。它为用户提供了灵活、高效和经济的计算资源和服务,推动了数字化转型和创新的发展。

    云原生:

    云原生(Cloud Native)是一种软件开发和部署的方法论,旨在充分利用云计算的优势,构建弹性、可扩展和可靠的应用程序。云原生应用程序是专门为云环境设计和构建的,具有以下特点:

    1. 容器化:云原生应用程序通常使用容器技术(如Docker)进行打包和部署。容器化可以提供隔离性、可移植性和可复制性,使应用程序更加灵活和可管理。
    2. 微服务架构:云原生应用程序采用微服务架构,将应用程序拆分为多个小型、独立的服务。每个服务都可以独立开发、部署和扩展,提高了应用程序的灵活性和可伸缩性。
    3. 弹性伸缩:云原生应用程序可以根据实际负载的变化进行弹性伸缩。通过自动化的方式,根据需求增加或减少容器实例的数量,以适应不同的负载情况。
    4. 自动化管理:云原生应用程序借助自动化工具和平台,实现自动化的部署、监控、扩展和恢复等管理操作。这样可以减少人工操作的复杂性和错误,并提高应用程序的可靠性和可维护性。
    5. 云原生基础设施:云原生应用程序依赖于云原生基础设施,如容器编排平台(如Kubernetes)、服务网格(如Istio)和持续交付工具链等。这些基础设施提供了丰富的功能和工具,支持云原生应用程序的构建和管理。

    云原生的目标是提供更高效、可靠和可扩展的应用程序,以满足现代云计算环境下的需求。它强调敏捷开发、持续交付和自动化管理,促进了软件开发和运维的协同和创新。

    7、传统文件系统 与 OSS 对象存储的区别

    传统文件系统和OSS(Object Storage Service)对象存储有以下几个主要区别:

    1. 数据组织方式:传统文件系统以文件和目录的形式组织数据,使用层次结构来管理文件和目录的关系。而OSS对象存储以对象的形式存储数据,每个对象都有一个唯一的标识符(Key),对象之间没有层次结构的关系。
    2. 存储方式:传统文件系统将文件存储在物理磁盘上,通过文件系统的索引结构来管理文件的存储和访问。而OSS对象存储将对象以分布式的方式存储在多个服务器上,通过对象存储系统的分布式架构来管理对象的存储和访问。
    3. 数据访问方式:传统文件系统通过文件路径来访问文件,可以直接读取和写入文件的内容。而OSS对象存储通过对象的唯一标识符(Key)来访问对象,可以通过HTTP或SDK等方式进行对象的上传、下载和删除等操作。
    4. 数据一致性:传统文件系统通常提供强一致性的数据访问,即读取到的数据是最新的。而OSS对象存储通常提供的是最终一致性,即在一定时间内读取到的数据可能不是最新的,但会保证最终数据的一致性。
    5. 可扩展性和容量:OSS对象存储具有良好的可扩展性和高容量存储能力,可以存储大规模的数据,并且可以根据需求进行动态扩展。而传统文件系统的扩展性和容量受限于单个服务器的硬件和存储能力。

    需要根据具体的应用场景和需求来选择使用传统文件系统还是OSS对象存储。传统文件系统适用于需要直接访问文件和目录结构的场景,而OSS对象存储适用于需要大规模存储和分布式访问的场景。

    如果您有其他问题,请随时提问。

    算法:

    • 二叉树的每层最左边的数集合(广度优先遍历) + 找到前k 小的数(快排)

    三面 - 30min - 11/16

    • 聊天为主

    hr 面 - 30min - 11/16

    • 正常的hr面问题

    CEO面 - 30min - 11/20

    类似于 hr 面

     类似资料: