饿了么-笔试

饿了么笔试

  1. 单选题8道
  2. 不定项选择题7道
  3. 编程题3道

选择题

Linux什么目录不占用内存空间?

  1. /dev/shm:这是一个基于内存的文件系统(tmpfs),通常用于存储临时文件和共享内存对象。它确实会占用内存空间,因为它是直接在内存中分配空间的。
  2. /proc 和 /sys:这些目录是虚拟文件系统,它们的内容是动态生成的,反映了系统当前的运行状态。虽然它们的内容看起来像是文件和目录,但它们并不占用磁盘空间,也不会占用内存空间(除了用于生成和访问这些虚拟文件的少量内存开销)。

死锁状态是否可能为安全状态?

  1. 死锁状态是系统无法继续运行的僵局状态,进程无法继续执行,资源无法被释放,系统处于不稳定状态。
  2. 安全状态是系统能够按某种顺序为进程分配资源,所有进程都能顺利完成的状态。
    因此,死锁状态不可能是一个安全状态。死锁状态意味着系统无法继续运行,而安全状态意味着系统可以正常运行且不会进入死锁。

http://192.168.0.100/webservice 的网站是否占用端口号?

任何通过HTTP协议访问的网站都会占用某个端口号,因为端口号是网络通信中用于区分不同服务的重要标识。
在你提供的网址 http://192.168.0.100/webservice 中,虽然没有明确指定端口号,但根据HTTP协议的默认规则,它会使用标准的 端口号80。如果该网址指向的是一个运行中的Web服务,那么它肯定占用了服务器上的某个端口(默认为80,或者可能是其他自定义端口)。

一个进程是否可以属于多个用户?

一个进程不能直接属于多个用户,但它可以通过 SetUID、SetGID 或用户组等机制在不同用户之间共享权限或切换权限。这些机制确保了系统的安全性和灵活性,同时避免了进程权限的混乱。

DMA?

DMA(Direct Memory Access,直接存储器访问)是一种硬件特性,允许某些硬件子系统在不经过CPU干预的情况下直接访问系统的内存。DMA的主要目的是提高数据传输效率,减轻CPU的负担,从而提升系统的整体性能。

  1. DMA的工作原理
    在传统的数据传输中,CPU需要逐个字节地从输入/输出设备读取数据,然后将其写入内存。这种过程会占用大量的CPU时间,尤其是当数据量较大时。而DMA控制器的出现,使得数据传输可以在硬件层面直接完成,无需CPU介入。
    DMA控制器:这是一个专门的硬件单元,负责管理和控制DMA操作。它可以在CPU的授权下,直接与内存和I/O设备通信,完成数据的读取和写入。
    DMA传输过程:
    请求DMA服务:I/O设备(如硬盘、网卡等)向DMA控制器发送DMA请求信号。
    CPU授权:DMA控制器向CPU发送中断请求,请求CPU暂时让出总线控制权。
    总线控制权转移:CPU响应中断,将总线控制权交给DMA控制器。
    数据传输:DMA控制器直接在内存和I/O设备之间进行数据传输,无需CPU干预。
    完成DMA操作:数据传输完成后,DMA控制器将总线控制权交还给CPU,并发送一个中断信号通知CPU操作已完成。
  2. DMA的优势
    提高数据传输效率:DMA可以以极高的速度在内存和I/O设备之间传输数据,减少CPU的负担。
    减少CPU占用时间:CPU无需参与数据传输的具体操作,可以专注于其他更重要的任务,如程序执行和计算。
    提升系统性能:通过DMA,系统可以同时进行数据传输和CPU计算,实现并行处理,从而提升整体性能。

什么是设计模式中的创建型模式?

创建型模式的主要目的是封装对象的创建逻辑,从而将对象的创建与使用分离。通过这种方式,代码的可扩展性和可维护性得到显著提升,同时减少了对象创建过程中对具体类的依赖。

  1. 单例模式(Singleton Pattern)
  2. 工厂模式(Factory Pattern)
  3. 抽象工厂模式(Abstract Factory Pattern)
  4. 原型模式
  5. 建造者模式

代理模式的本质?

代理模式(Proxy Pattern)是一种结构型设计模式,其核心思想是通过创建一个代理对象(Proxy)来间接访问目标对象(Subject)。代理对象在客户端和目标对象之间起到中间层的作用,可以在不改变目标对象代码的情况下,为客户端提供额外的控制、优化或安全机制。

编程题

第一道

字符串由0和1组成,给定一次交换字符串中任意两个字符位置的机会,交换后有几种可能的结果?
例子:
输入:1100
输出: 5
五种可能分别是:
1100
0110
0101
1010
1001
解题方法: 前缀和。
注意:对于10这个字符,由于无论如何都得交换一次,所以交换后不存在10这个字符串。

第二道

字符串操作题。

第三道

异或操作题。

异或的性质

两个数的异或(XOR)操作具有以下属性:
交换律:对于任意两个数 a 和 b,有 a⊕b=b⊕a。
结合律:对于任意三个数 a、b 和 c,有 (a⊕b)⊕c=a⊕(b⊕c)。
恒等元:对于任意数 a,有 a⊕0=a,其中 0 是异或操作的恒等元。
逆元:对于任意数 a,有 a⊕a=0,即每个数都是它自己的逆元。
分配律:对于任意三个数 a、b 和 c,有 a⊕(b⊕c)=(a⊕b)⊕(a⊕c)。
这些属性使得异或操作在许多领域,如计算机科学和数学中,具有重要的应用。例如,异或操作可以用于实现快速的位操作,以及在加密算法中进行数据的混合。

如何快速的从一个数组中找到与给定的某个数x异或值最大的数?

为了更快地从数组中找出与给定数 x 异或值最大的数,可以使用基于位运算的优化方法,例如 Trie 树。这种方法的时间复杂度为 O(n×L),其中 n 是数组的长度,L 是整数的位数(如32位整数)。以下是基于 Trie 树的实现思路和代码示例:
Trie 树方法
构建 Trie 树:
将数组中的每个数字以二进制形式插入到 Trie 树中。Trie 树的每个节点有 0 和 1 两个分支,分别表示当前位的值。
查询最大异或值:
对于给定的 x,从最高位到最低位逐位查找。
如果当前位为 0,则优先选择分支 1;如果当前位为 1,则优先选择分支 0。
如果目标分支不存在,则选择另一个分支。
通过这种方式,可以快速找到与 x 异或值最大的数。
参考文章:https://blog.youkuaiyun.com/Xu_JL1997/article/details/88735178

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值