【饿了么笔试题汇总】[全网首发]2024-04-12-饿了么春招笔试题-三语言题解(CPP/Python/Java)

news2024/11/25 7:03:51

🍭 大家好这里是KK爱Coding ,一枚热爱算法的程序员

✨ 本系列打算持续跟新饿了么近期的春秋招笔试题汇总~

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📧 KK这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 KK领取,会在飞书进行同步的跟新。

文章目录

    • ❤️ 01.K小姐的生日派对
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🧡02.K小姐的珠宝盒
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🤍 03.K小姐的旅行计划
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 写在最后
    • 📧 KK这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 KK领取,会在飞书进行同步的跟新。

❤️ 01.K小姐的生日派对

问题描述

K小姐要举办一个生日派对,她邀请了 n n n 个好朋友。每个朋友都准备了一份礼物,其中第 i i i 个朋友的礼物价值为 a i a_i ai

K小姐想知道,这些礼物中一共有多少种不同价值的礼物。但是她不希望统计那些太便宜的礼物,所以她不会统计价值为 1 1 1 的礼物。

输入格式

第一行包含一个正整数 n n n,表示朋友的人数。

第二行包含 n n n 个正整数 a 1 , a 2 , ⋯   , a n a_1, a_2, \cdots, a_n a1,a2,,an,表示每个朋友礼物的价值。

输出格式

输出一个整数,表示有多少种不同价值的礼物(不包括价值为 1 1 1 的礼物)。

样例输入

3
20 2 4

样例输出

3

数据范围

  • 1 ≤ n ≤ 2 × 1 0 5 1 \leq n \leq 2 \times 10^5 1n2×105
  • 1 ≤ a i ≤ 2 × 1 0 5 1 \leq a_i \leq 2 \times 10^5 1ai2×105

题解

这道题的关键是要统计出有多少种不同的礼物价值,但不包括价值为 1 1 1 的礼物。我们可以用一个集合(set)来存储所有出现过的礼物价值,这样可以自动去重。

具体步骤如下:

  1. 读入朋友人数 n n n 和所有礼物价值 a i a_i ai
  2. 将所有礼物价值存入一个集合中,这样可以自动去重。
  3. 如果集合中有价值为 1 1 1 的礼物,就将其删除。
  4. 输出集合的大小,即为不同价值礼物的数量。

时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( n ) O(n) O(n)

参考代码

  • Python
import sys
input = lambda: sys.stdin.readline().strip()

n = int(input())
gifts = set(map(int, input().split()))
if 1 in gifts:
    gifts.remove(1)
print(len(gifts))
  • Java
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String[] arr = br.readLine().split(" ");
        
        Set<Integer> gifts = new HashSet<>();
        for (String s : arr) {
            gifts.add(Integer.parseInt(s));
        }
        gifts.remove(1);
        
        System.out.println(gifts.size());
    }
}
  • Cpp
#include <iostream>
#include <set>

using namespace std;

int main() {
    int n;
    cin >> n;
    
    set<int> gifts;
    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;
        gifts.insert(x);
    }
    gifts.erase(1);
    
    cout << gifts.size() << endl;
    return 0;
}

🧡02.K小姐的珠宝盒

问题描述

K小姐有一个由 n n n 颗宝石组成的珠宝盒。每颗宝石都有一个能量值 a i a_i ai

现在她想对珠宝盒进行 Q Q Q 次查询。每次查询时,她会选择一个区间 [ l , r ] [l, r] [l,r],然后给出一个能量阈值 k k k。她想知道在区间 [ l , r ] [l, r] [l,r] 中,是否存在一个位置 i i i,使得将区间 [ l , i ] [l, i] [l,i] 中所有宝石的能量值进行按位或运算的结果等于 k k k。如果存在这样的位置 i i i,她希望知道最小的 i i i 是多少;如果不存在,则输出 − 1 -1 1

输入格式

第一行包含两个正整数 n n n Q Q Q,分别表示宝石的数量和查询的次数。

第二行包含 n n n 个正整数 a 1 , a 2 , ⋯   , a n a_1, a_2, \cdots, a_n a1,a2,,an,表示每颗宝石的能量值。

接下来 Q Q Q 行,每行包含三个正整数 l , r , k l, r, k l,r,k,表示一次查询。

输出格式

对于每次查询,输出一行一个整数,表示答案。如果不存在满足条件的位置 i i i,则输出 − 1 -1 1

样例输入

5 5
3 2 3 3 6
1 2 3
1 5 7
1 4 7
2 2 2
2 3 7

样例输出

1
5
-1
2
-1

数据范围

  • 1 ≤ n , Q ≤ 1 0 6 1 \leq n, Q \leq 10^6 1n,Q106
  • 1 ≤ l ≤ r ≤ n 1 \leq l \leq r \leq n 1lrn
  • 0 ≤ a i , k < 2 30 0 \leq a_i, k < 2^{30} 0ai,k<230

题解

本题可以使用前缀或和二分查找来解决。

首先预处理出一个二维数组 c n t cnt cnt,其中 c n t [ i ] [ j ] cnt[i][j] cnt[i][j] 表示在前 i i i 个数中,第 j j j 位二进制表示中 1 1 1 的个数。可以通过以下方式计算:

c n t [ i ] [ j ] = { c n t [ i − 1 ] [ j ] + 1 a [ i ]  的第  j  位为  1 c n t [ i − 1 ] [ j ] otherwise cnt[i][j] = \begin{cases} cnt[i-1][j] + 1 & a[i] \text{ 的第 } j \text{ 位为 } 1 \\ cnt[i-1][j] & \text{otherwise} \end{cases} cnt[i][j]={cnt[i1][j]+1cnt[i1][j]a[i] 的第 j 位为 1otherwise

然后对于每次查询 [ l , r , k ] [l, r, k] [l,r,k],我们可以通过 c n t cnt cnt 数组快速求出区间 [ l , r ] [l, r] [l,r] 中每一位二进制表示中 1 1 1 的个数。具体地,第 j j j 位二进制表示中 1 1 1 的个数为 c n t [ r ] [ j ] − c n t [ l − 1 ] [ j ] cnt[r][j] - cnt[l-1][j] cnt[r][j]cnt[l1][j]

接下来,我们在区间 [ l , r ] [l, r] [l,r] 上进行二分查找,每次取中点 m i d mid mid:

  • 如果区间 [ l , m i d ] [l, mid] [l,mid] 中每一位二进制表示中 1 1 1 的个数都大于等于 k k k 在对应位置上的二进制表示中 1 1 1 的个数,说明 m i d mid mid 有可能是答案,我们继续在左半区间 [ l , m i d ] [l, mid] [l,mid] 上二分查找;
  • 否则,说明 m i d mid mid 不可能是答案,我们在右半区间 [ m i d + 1 , r ] [mid+1, r] [mid+1,r] 上继续二分查找。

最后,我们检查二分查找的结果 i i i 是否满足条件,如果满足则输出 i i i,否则输出 − 1 -1 1

时间复杂度 O ( ( n + Q ) log ⁡ n ) O((n+Q) \log n) O((n+Q)logn),空间复杂度 O ( n ) O(n) O(n)

参考代码

  • Python
import sys
input = lambda: sys.stdin.readline().strip()

def main():
    n, q = map(int, input().split())
    gems = list(map(int, input().split()))
    
    cnt = [[0] * 32 for _ in range(n + 1)]
    for i, val in enumerate(gems):
        for j in range(32):
            if val >> j & 1:
                cnt[i + 1][j] = cnt[i][j] + 1
            else:
                cnt[i + 1][j] = cnt[i][j]
    
    def check(left, right, k):
        bits = [0] * 32
        for j in range(32):
            bits[j] = cnt[right][j] - cnt[left - 1][j]
        for j in range(32):
            if k >> j & 1:
                if bits[j] == 0:
                    return False
        return True
    
    for _ in range(q):
        l, r, k = map(int, input().split())
        left, right = l, r
        while left < right:
            mid = (left + right) >> 1
            if check(l, mid, k):
                right = mid
            else:
                left = mid + 1
        if check(l, left, k):
            print(left)
        else:
            print(-1)

if __name__ == "__main__":
    main()
  • Java
import java.io.*;
import java.util.*;

public class Main {
    static int[][] cnt;
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");
        int n = Integer.parseInt(input[0]);
        int q = Integer.parseInt(input[1]);
        
        int[] gems = new int[n];
        input = br.readLine().split(" ");
        for (int i = 0; i < n; i++) {
            gems[i] = Integer.parseInt(input[i]);
        }
        
        cnt = new int[n + 1][32];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 32; j++) {
                if ((gems[i] >> j & 1) == 1) {
                    cnt[i + 1][j] = cnt[i][j] + 1;
                } else {
                    cnt[i + 1][j] = cnt[i][j];
                }
            }
        }
        
        while (q-- > 0) {
            input = br.readLine().split(" ");
            int l = Integer.parseInt(input[0]);
            int r = Integer.parseInt(input[1]);
            int k = Integer.parseInt(input[2]);
            
            int left = l, right = r;
            while (left < right) {
                int mid = (left + right) >> 1;
                if (check(l, mid, k)) {
                    right = mid;
                } else {
                    left = mid + 1;
                }
            }
            
            if (check(l, left, k)) {
                System.out.println(left);
            } else {
                System.out.println(-1);
            }
        }
    }
    
    static boolean check(int left, int right, int k) {
        int[] bits = new int[32];
        for (int j = 0; j < 32; j++) {
            bits[j] = cnt[right][j] - cnt[left - 1][j];
        }
        for (int j = 0; j < 32; j++) {
            if ((k >> j & 1) == 1) {
                if (bits[j] == 0) {
                    return false;
                }
            }
        }
        return true;
    }
}
  • Cpp
#include <iostream>
#include <vector>

using namespace std;

vector<vector<int>> cnt;

bool check(int left, int right, int k) {
    vector<int> bits(32);
    for (int j = 0; j < 32; j++) {
        bits[j] = cnt[right][j] - cnt[left - 1][j];
    }
    for (int j = 0; j < 32; j++) {
        if (k >> j & 1) {
            if (bits[j] == 0) {
                return false;
            }
        }
    }
    return true;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n, q;
    cin >> n >> q;
    
    vector<int> gems(n);
    for (int i = 0; i < n; i++) {
        cin >> gems[i];
    }
    
    cnt.assign(n + 1, vector<int>(32));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < 32; j++) {
            if (gems[i] >> j & 1) {
                cnt[i + 1][j] = cnt[i][j] + 1;
            } else {
                cnt[i + 1][j] = cnt[i][j];
            }
        }
    }
    
    while (q--) {
        int l, r, k;
        cin >> l >> r >> k;
        
        int left = l, right = r;
        while (left < right) {
            int mid = (left + right) >> 1;
            if (check(l, mid, k)) {
                right = mid;
            } else {
                left = mid + 1;
            }
        }
        
        if (check(l, left, k)) {
            cout << left << '\n';
        } else {
            cout << -1 << '\n';
        }
    }
    
    return 0;
}

本题的关键是利用前缀和快速求出任意区间内每一位二进制表示中 1 1 1 的个数,然后再结合二分查找找到满足条件的最小位置 i i i。预处理前缀和数组的时间复杂度为 O ( n log ⁡ C ) O(n \log C) O(nlogC),其中 C C C 为数据范围,本题中 C = 2 30 C = 2^{30} C=230。每次二分查找的时间复杂度为 O ( log ⁡ n ) O(\log n) O(logn),共进行 Q Q Q 次查询,因此总时间复杂度为 O ( ( n + Q ) log ⁡ n ) O((n+Q) \log n) O((n+Q)logn)

🤍 03.K小姐的旅行计划

问题描述

K小姐计划去 n n n 个城市旅行。这些城市之间有 m m m 条双向道路相连,每条道路都有一个美景值 w w w

K小姐希望选择一些道路,使得最终所有城市恰好被分成两个连通块。她可以获得所有被选择的道路的美景值之和。

现在K小姐想知道,她能获得的最大的美景值是多少?如果初始时这些城市已经形成了两个或更多的连通块,则输出 − 1 -1 1

输入格式

第一行包含两个正整数 n n n m m m,分别表示城市的数量和道路的数量。

接下来 m m m 行,每行包含三个正整数 u , v , w u, v, w u,v,w,表示城市 u u u 和城市 v v v 之间有一条美景值为 w w w 的道路。

输出格式

输出一个整数,表示K小姐能获得的最大美景值。如果初始时这些城市已经形成了两个或更多的连通块,则输出 − 1 -1 1

样例输入

3 3
1 2 4
2 3 3
1 3 2

样例输出

7

数据范围

  • 2 ≤ n ≤ 1 0 5 2 \leq n \leq 10^5 2n105
  • 0 ≤ m ≤ 1 0 5 0 \leq m \leq 10^5 0m105
  • 1 ≤ u , v ≤ n 1 \leq u, v \leq n 1u,vn
  • 1 ≤ w ≤ 1 0 9 1 \leq w \leq 10^9 1w109

题解

本题可以使用 Kruskal 算法求解最小生成树。我们可以先将所有道路按照美景值从小到大排序,然后依次考虑每条道路:

  • 如果当前道路连接的两个城市已经在同一个连通块中,那么选择这条道路会形成环,因此不能选择。
  • 否则,选择这条道路,将两个城市所在的连通块合并。

在选择道路的过程中,我们需要记录最后一条被选择的道路的美景值 m a x v maxv maxv。当算法结束时:

  • 如果所有城市最终形成了一个连通块,那么我们需要删除最后一条被选择的道路,答案为 t o t a l − m a x v total - maxv totalmaxv,其中 s u su su 为所有道路的美景值之和。
  • 如果所有城市最终形成了两个连通块,那么答案为 s u su su
  • 如果所有城市最终形成了三个或更多的连通块,那么答案为 − 1 -1 1

时间复杂度 O ( m log ⁡ m ) O(m \log m) O(mlogm),空间复杂度 O ( n ) O(n) O(n)

参考代码

  • Python
import sys
input = lambda: sys.stdin.readline().strip()
sys.setrecursionlimit(10**6)

def find(p, x):
    if p[x] != x:
        p[x] = find(p, p[x])
    return p[x]

def main():
    n, m = map(int, input().split())
    roads = []
    total = 0
    for _ in range(m):
        u, v, w = map(int, input().split())
        roads.append((u, v, w))
        total += w
    
    roads.sort(key=lambda x: x[2])
    
    p = list(range(n + 1))
    cnt = n
    maxv = 0
    for u, v, w in roads:
        u = find(p, u)
        v = find(p, v)
        if u != v:
            p[u] = v
            total -= w
            cnt -= 1
            maxv = max(maxv, w)
    
    if cnt == 1:
        print(total + maxv)
    elif cnt == 2:
        print(total)
    else:
        print(-1)

if __name__ == "__main__":
    main()
  • Java
import java.io.*;
import java.util.*;

public class Main {
    static int[] p;
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");
        int n = Integer.parseInt(input[0]);
        int m = Integer.parseInt(input[1]);
        
        int[][] roads = new int[m][3];
        long total = 0;
        for (int i = 0; i < m; i++) {
            input = br.readLine().split(" ");
            roads[i][0] = Integer.parseInt(input[0]);
            roads[i][1] = Integer.parseInt(input[1]);
            roads[i][2] = Integer.parseInt(input[2]);
            total += roads[i][2];
        }
        
        Arrays.sort(roads, (a, b) -> a[2] - b[2]);
        
        p = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            p[i] = i;
        }
        
        int cnt = n;
        int maxv = 0;
        for (int[] road : roads) {
            int u = find(road[0]);
            int v = find(road[1]);
            if (u != v) {
                p[u] = v;
                total -= road[2];
                cnt--;
                maxv = Math.max(maxv, road[2]);
            }
        }
        
        if (cnt == 1) {
            System.out.println(total + maxv);
        } else if (cnt == 2) {
            System.out.println(total);
        } else {
            System.out.println(-1);
        }
    }
    
    static int find(int x) {
        if (p[x] != x) {
            p[x] = find(p[x]);
        }
        return p[x];
    }
}
  • Cpp
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> p;

int find(int x) {
    if (p[x] != x) {
        p[x] = find(p[x]);
    }
    return p[x];
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n, m;
    cin >> n >> m;
    
    vector<vector<int>> roads(m, vector<int>(3));
    long long total = 0;
    for (int i = 0; i < m; i++) {
        cin >> roads[i][0] >> roads[i][1] >> roads[i][2];
        total += roads[i][2];
    }
    
    sort(roads.begin(), roads.end(), [](const vector<int>& a, const vector<int>& b) {
        return a[2] < b[2];
    });
    
    p.resize(n + 1);
    for (int i = 1; i <= n; i++) {
        p[i] = i;
    }
    
    int cnt = n;
    int maxv = 0;
    for (auto& road : roads) {
        int u = find(road[0]);
        int v = find(road[1]);
        if (u != v) {
            p[u] = v;
            total -= road[2];
            cnt--;
            maxv = max(maxv, road[2]);
        }
    }
    
    if (cnt == 1) {
        cout << total + maxv << '\n';
    } else if (cnt == 2) {
        cout << total << '\n';
    } else {
        cout << -1 << '\n';
    }
    
    return 0;
}

写在最后

📧 KK这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 KK领取,会在飞书进行同步的跟新。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1589669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

.cur 鼠标光标文件读取

备份icon掩码开发代码-CSDN博客 代码改写自 目前bug是高度不足&#xff0c;顶上的几十个像素图片打印需要加常数&#xff0c; i的改写是 i/3,参考上面链接的自简书的代码 #include <stdio.h> #include <windows.h> #pragma warning(disable : 4996) // visu…

[lesson20]初始化列表的使用

初始化列表的使用 类成员的初始化 C中提供了初始化列表对成员变量进行初始化 语法规则 注意事项 成员的初始化顺序与成员的声明顺序相同成员的初始化顺序与初始化列表中的位置无关初始化列表先于构造函数的函数体执行 类中的const成员 类中的const成员会被分配空间的类中…

【Linux】环境搭建

昙花一现&#xff0c;却等待了整个白昼 蝉鸣一夏&#xff0c;却蛰伏了几个四季 目录 购买云服务器 总结 使用 XShell 远程登陆到 Linux 利用Linux编写一个简单C程序 ⭐toush -- 创建文件 ⭐vi -- 文本编译器 ⭐ll -- 查看文件的显示结果分析 ⭐gcc -o ⭐cat -- 查看源代码 契子…

利用细粒度检索增强和自我检查提升对话式问题解答能力

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 论文标题&#xff1a;Boosting Conversational Question Answering with Fine-Grained Retrieval-Augmentation and Self-Check 论文地址&#xff1a;https://arxiv.org/abs/2403.18243 检索增强生成…

【报错】AttributeError: ‘NoneType‘ object has no attribute ‘pyplot_show‘(已解决)

【报错】AttributeError: ‘NoneType’ object has no attribute ‘pyplot_show’ 问题描述&#xff1a;python可视化出现下面报错 我的原始代码&#xff1a; import matplotlib.pyplot as pltplt.figure() plt.plot(x, y, bo-) plt.axis(equal) plt.xlabel(X) plt.ylabe…

最短路径问题——(弗洛伊德算法与迪杰斯特拉算法)

最短路径问题——&#xff08;弗洛伊德算法与迪杰斯特拉算法&#xff09;【板子】 题目&#xff1a; 对于下面的图片所给出的关系,回答下面两个问题&#xff1a; 利用迪杰斯特拉算法求点A到每一个点之间的最小距离。利用弗洛伊德算法求每两个点之间的最短路径。 &#xff0…

[RK3399 Linux] 使用ubuntu 20.04.5制作rootfs

一、ubuntu base ubuntu base是用于为特定需求创建自定义映像的最小rootfs,是ubuntu可以运行的最小环境。 1.1 下载源码 下载ubuntu-base的方式有很多,可以从官方的地址:ttp://cdimage.ubuntu.com/ubuntu-base/releases。 也可以其它镜像地址下载,如清华源:https://mi…

弹性云服务器性能对比(内附测试数据),快快网络服务器崭露头角

随着计算技术的不断革新&#xff0c;云服务器已成为企业和个人部署应用与服务的首选。尤其线上业务日益盛行的今天&#xff0c;云服务商的实力更是备受瞩目。对于企业而言&#xff0c;高稳定&#xff0c;存储速度都是不可或缺的基本要求&#xff0c;这些都对公有云的云端编解码…

算法 囚犯幸存者

题目 主类 public static List<Prisoner> prisoners new ArrayList<Prisoner>(); public static List<Prisoner> remainPrisoners new ArrayList<Prisoner>(); public static Prisoner lastPrisoner null;public static void main(String[] args) …

Fastgpt配合chatglm+m3e或ollama+m3e搭建个人知识库

概述&#xff1a; 人工智能大语言模型是近年来人工智能领域的一项重要技术&#xff0c;它的出现标志着自然语言处理领域的重大突破。这些模型利用深度学习和大规模数据训练&#xff0c;能够理解和生成人类语言&#xff0c;为各种应用场景提供了强大的文本处理能力。AI大语言模…

VulnHub靶机-easy_cloudantivirus 打靶

easy_cloudantivirus 靶机 目录 easy_cloudantivirus 靶机一、导入虚拟机配置二、攻击方式主机发现端口扫描web渗透-SQL注入命令注入反弹shellssh爆破提权 一、导入虚拟机配置 靶机地址&#xff1a; https://www.vulnhub.com/entry/boredhackerblog-cloud-av,453/下载完成&am…

golang实现定时监控 CLOSE_WAIT 连接的数量

文章目录 go实现定时检查大量的 CLOSE_WAIT 连接背景&#xff1a;为什么监控指定端口上的 CLOSE_WAIT 连接数量原因&#xff1a;什么是CLOSE_WAITgo实现定时检查大量的 CLOSE_WAIT 连接参考 go实现定时检查大量的 CLOSE_WAIT 连接 监控指定端口的连接状态&#xff0c;特别是关…

阿里云服务器公网带宽费用全解析(不同计费模式)

阿里云服务器公网带宽怎么收费&#xff1f;北京地域服务器按固定带宽计费一个月23元/M&#xff0c;按使用流量计费0.8元/GB&#xff0c;云服务器地域不同实际带宽价格也不同&#xff0c;阿里云服务器网aliyunfuwuqi.com分享不同带宽计费模式下带宽收费价格表&#xff1a; 公网…

了解 RISC-V IOMMU

了解 RISC-V IOMMU 个人作为 IOMMU 初学者&#xff0c;从初学者的角度介绍我眼中 RISCV 的 IOMMU 如果有些描述不够专业&#xff0c;还请谅解&#xff0c;也欢迎讨论 部分内容来自 https://zhuanlan.zhihu.com/p/679957276&#xff08;对于 RISCV IOMMU 规范手册的翻译&#xf…

这是雷军的简历,落魄时卡里只有冰冷的40亿

互联网新词儿 周五了&#xff0c;来点放松的&#xff08;嗯&#xff1f;周五&#xff1f;不是上了五天班了吗&#xff0c;为什么不是周六 如果说哪一种炫富秀优越并不伤人&#xff0c;那一定是富含"幽默感"的脱口秀式的吹牛。 我印象中&#xff0c;江湖上还是有这么个…

UDP网络程序

上一章中&#xff0c;我们介绍了socket&#xff0c;以及TCP/UDP协议。这一章带大家实现几个UDP协议的网络服务。我们需要一个 服务端和一个客户端。 1.服务端实现 1.1socket函数 #include <sys/types.h> #include <sys/socket.h>int socket(int domain, in…

Vue结合el-table实现合并单元格(以及高亮单元表头和指定行)

实现效果如下&#xff1a; 思路&#xff1a; 1.首先使用动态表头表格。 2.其次实现动态计算合并单元格。&#xff08;计算规则 传递需要合并的字段&#xff09; 3.然后封装公共的计算单元格方法 export导出供多个页面使用。 4.同时需要封装成公共的组件供多个页面使用。 5…

Hi3861 OpenHarmony嵌入式应用入门--鸿蒙开发环境搭建

目录 简介 准备材料 安装开发环境 配置开发工具和sdk 新建工程 代码编译 简介 本篇将进行hi3861开发环境的搭建&#xff0c;并能够编译默认工程。 准备材料 华为集成开发环境工具DevEco Device Tool 华为集成开发环境IDE DevEco Device Tool下载 | HarmonyOS设备开发 …

书生潽语趣味 demo

创建开发机 使用 InternLM2-Chat-1.8B 模型生成 300 字的小故事 运行猪八戒模型试一下

linux使用docker实现redis主从复制和哨兵模式

目录 1. 拉取redis镜像 2.使用可视化redis工具 3. 设置从redis 4.设置哨兵模式 5. 使用docker-compose快速创建 1. 拉取redis镜像 docker pull redis 默认拉取最新的镜像。 然后pull结束后使用docker images检查镜像&#xff1a; 然后docker run创建container容器 首先…