搜狐畅游24届C++



### 问题1:矩阵顺时针旋转90度的算法

**基本解法(空间复杂度 O(n^2),时间复杂度 O(n^2))**:

```python
def rotate_matrix(matrix):
    n = len(matrix)
    rotated = [[0] * n for _ in range(n)]
    for i in range(n):
        for j in range(n):
            rotated[j][n - 1 - i] = matrix[i][j]
    return rotated
```

**进阶解法(空间复杂度 O(1),时间复杂度 O(n^2))**:

可以通过原地旋转的方式来实现,不需要额外的空间。

```python
def rotate_matrix(matrix):
    n = len(matrix)
    # 原地旋转矩阵
    for i in range(n // 2):
        for j in range(i, n - 1 - i):
            temp = matrix[i][j]
            # 左到上
            matrix[i][j] = matrix[n - 1 - j][i]
            # 下到左
            matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j]
            # 右到下
            matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i]
            # 上到右
            matrix[j][n - 1 - i] = temp
    return matrix
```

### 问题2:字符串循环右移n位

```python
def right_rotate_string(s, n):
    n = n % len(s) # 防止n大于字符串长度
    return s[-n:] + s[:-n]
```

### 问题3:判断链表中是否有环

可以使用快慢指针的方法来检测环的存在。

```python
def has_cycle(head):
    slow = fast = head
    while fast and fast.next:
        slow = slow.next
        fast = fast.next.next
        if slow == fast:
            return True
    return False
```

### 问题4:解决请求重复执行的问题

解决这类问题的常见方法是在业务逻辑中加入幂等性控制,即确保同样的请求无论执行多少次,其结果都是一致的。可以通过在数据库中记录已经处理的请求ID或者状态来实现。

### 问题5:经常要操作的内存分类

常见的内存分类包括:堆内存、栈内存、全局/静态存储区、常量存储区、代码段等。

### 问题6:数组XZ所占的空间

字符串"ChangYou"包含8个字符和一个结尾的空字符'\0',所以数组XZ所占的空间为9字节。

### 问题7:大端模式下的输出结果

在大端模式下,字节的高位存储在低地址,低位存储在高地址。因此,`value.a = 3`在内存中的存储形式是`00 00 00 03`,`short b`取前两个字节,即`00 03`,`value.b & 1`的结果是0,因为最低位是0。

### 问题8:信号量的变化范围

如果有m个进程共享一个临界资源,那么信号量的初始值通常设置为1,表示资源可用。在任何时刻,信号量的值至少为0(没有进程等待资源),最多为m-1(所有进程都在等待资源)。因此,信号量的变化范围是[0, m-1]。

### 问题9:LRU页置换算法的总置换次数

根据LRU(最近最少使用)算法,我们可以模拟整个页面访问序列,并计算出需要置换的次数。这个过程比较复杂,需要详细分析每次访问后页面的状态。

### 问题10:C++类T的对象数量

根据提供的代码,创建了以下对象:

- `T b(5);` 创建了一个对象b。
- `T c[6];` 创建了一个包含6个对象的数组c。
- `T &d = b;` 创建了一个引用d,指向对象b,不创建新对象。
- `T e=b;` 创建了一个新的对象e,并初始化为对象b的状态。
- `T *p = new T (4);` 创建了一个新的动态分配的对象,并通过指针p访问。

总共创建了1 + 6 + 1 + 1 = 9个对象。

### 问题11:字符串连接后的结果

使用`strcat(a, b)`后,字符串a的内容变为"abc123xyz"。

### 问题12:枚举类型的访问

在C++中,枚举类型默认第一个成员的值为0,后续成员依次递增。在这个枚举类型中,`x1`的值为0,`x3`的值为10,因此`x4`的值为11,`x5`的值为12。如果在函数外部声明了`x`,并且没有显式赋值,那么`x`的值取决于它被定义的位置和作用域。如果是在全局作用域中,且没有显式初始化,那么`x`的值将是0。如果是在某个特定的作用域内,那么它的值可能是未定义的。
全部评论

相关推荐

面试前拼命背八股,结果没问先是介绍他们做的方向然后问我是否跟我的意愿匹配开始技术面:因为第一个项目22年的了,估计是觉得我印象不深了直接跳到后两个1.你的dots项目里那俩功能是怎么实现的?详细说说按照逻辑叽里咕噜说了一堆(这里我觉得说项目之前应该让ai给一个大致的稿子,这样说起来条理更清楚一点)2.1说说你的ab包更新的流程叽里咕噜说一堆,反正就是先下载服务器上的对比文件,然后跟本地的进行比对,有更新就下载到本地2.2 那你下载更新的文件到本地是怎么个流程先把目标文件夹下的旧文件移动到专门放临时文件的文件夹然后从服务器下载更新文件到目标文件夹,假如下载失败再把旧文件移回目标文件夹2.3 你这样做有啥好处有啥坏处好处就是万一更新失败还有老版本资源可以使用,不至于之后正常运行出错,坏处的话我还没想过这方面2.4 你ab包处理资源依赖是怎么做的我有个字典 在获取想要的资源前,先遍历需要的依赖资源,字典没有就拿出来放到字典,最后再把需要的资源放到字典然后调用2.5 假如我有个a资源依赖b资源,b资源依赖c资源这样嵌套怎么办我的项目没考虑这个问题,但我觉得还是用字典保存所有的资源,然后递归遍历依赖资源就行。2.5 你前面那个dots项目里自己做了个动画系统,可以控制每帧的播放时间,在普通的项目里用animator可以实现吗给我问蒙了,我说我没这么做过,但是我感觉可以直接调用动画那边的api就能实现(当时紧张的不知道说啥了)反问环节:1.您感觉我今天表现咋样(当时脑子进水了,面完反问自己当时为啥要问这个)面试官苦笑一下,挺好的2.之后实习到秋招实习到转正有什么培养方案吗面试官直接说:实习到转正肯定是有考核的,然后都有人带,定期也有技术分享会之类的总结一下:第一次面试给了畅游,面完感觉希望不大,但是确实项目方面的准备少了,至少要把每个功能的实现方面讲清楚(感觉可以让ai给个稿子背一下,然后把具体实现部分再回顾一下),八股算法没问也确实轻松不少(并非)面试管人挺好的。
点赞 评论 收藏
分享
评论
5
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务