• 【记录成长】大学时光已过半, 分享我的大二暑期实习经历


    你好,我是cpt,本文章记录我大二暑期找实习的过程,以及工作中的点点滴滴,和一些经验分享,希望能够帮助到你。

    实习投递 (BOSS 1k沟通 10+面)

    投递

    我是2023.6.16 才开始投递的
    当时真的很晚了 基本很少hc 而且小公司基本不要大二学生
    image.png

    下面这两篇 短文是当时面试遇到的问题

    boss投递记录↓
    image.png

    • 投递过程就是每天投递简历,各种求职软件 ,都试了一遍, 感觉好用的就只有boss直聘了
    • 投递 ,沟通,互发简历,约面试, 面试 , 寄 , 继续投 , 就是这么一个流程
    • 等通知以及结果的未确定性的过程还是比较折磨人的。

    六月底 收到格蠹科技offer

    观耀科技

    image.png
    感觉是api面, 面了俩次 ,技术官都没问什么,最多20mins
    问hr说好像是面试通过了 , 但是后面就没消息了,找她都已读不回,微信都没有

    最后俩天面试 , 感觉没有什么希望,就放弃了,直接去上海实现

    image.png

    小经验: 早点投递 , 别和我一样, 到这个时间点才投, 基本没hc, 这个过程印证了牛客社区的一句话, “海投,总有那种点击就送的”(含义就是看运气)

    实习学到什么?

    过程:

    乘上去上海火车,那天晚上差点没赶上,还好运气很好,赶上了!
    在火车上,心中怀着对实习的憧憬和向往,然后就在火车上看了一些房子,不得不说上海物价真的很高,我还是运气比较好的,找了一个在公司跑步 700m的公寓。
    周一到公司报道,开了会,和同事互相介绍了自己,然后就开始工作了,前几天都是在写文章,主要是熟悉公司的产品。
    接下来几天就都是开发了,刚开始就是在linux 环境下, 装一个anbox, 因为他们公司的笔记本系统是arm,所有遇到非常多的问题,很多问题都是没见过的,我几乎几天都没啥进度,然后就别拉去谈话了
    141e8b95cfc85fa2dd3aca520891a54.jpg
    过几天一个同事就走了,我去接手他的任务,和他微信沟通了很久,很快就接手上他的项目, 这次是在linux 开发鼠标键盘事件传输,通过一个hid-usb

    • USB Human Interface Devices - OSDev Wiki
    • 后面很多天基本都是开发这个
    • 在linux环境 和 windows 环境都开发这个
    • 开发到最后在guvcview 上 配置碰到了一些问题, 但是功能都很正常

    实习记录



    执行
    gcc -o kl kl.c pkg-config --cflags --libs gtk+-2.0

    ux系统上运行Anbox,你需要按照以下步骤进行操作:

    1. 安装必要的依赖项:- 通过软件包管理器安装git、cmake和ninja。- 安装protobuf版本3.0或更高版本。
    2. 克隆Anbox存储库:- 在终端中运行以下命令:git clone https://github.com/anbox/anbox.git
    3. 构建和安装Anbox:- 进入克隆的存储库:cd anbox- 创建并进入构建目录:mkdir build && cd build- 运行CMake命令以配置构建:cmake …- 运行构建命令:make- 运行安装命令(需要管理员权限):sudo make install
    4. 配置内核模块:- 运行以下命令以加载Anbox内核模块:sudo modprobe ashmem_linux && sudo modprobe binder_linux- 为了确保每次系统启动时都加载这些模块,你可以将它们添加到/etc/modules文件中。
    5. 启动Anbox:- 在终端中运行anbox session-manager命令以启动Anbox。- 你可以在应用程序菜单中找到Anbox图标并点击它来启动。

    请注意,Anbox需要一些特定的硬件和软件支持才能正常运行,例如KVM(用于虚拟化)和OpenGL ES 3.0(用于图形加速)。确保你的系统满足这些要求。此外,Anbox仍然处于开发阶段,可能会遇到一些问题和限制
    解决

    查看内核安装 : ls -alh /dev/binder /dev/ashmem
    删除
    使用–remove选项删除错误的PPA:如果您之前尝试添加了错误的PPA,您可以使用sudo add-apt-repository --remove ppa:morphis/anbox-support命令来删除该PPA。

    安装 waydroid

    • sudo apt install curl ca-certificates -y
    • curl https://repo.waydro.id | sudo bash
    • sudo apt install waydroid -y


    源错误 —— 博客

    n:14 https://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu lunar InRelease
    Ign:15 https://ppa.launchpadcontent.net/beineri/opt-qt-5.15.2-focal/ubuntu lunar Release
    Ign:12 https://ppa.launchpadcontent.net/christian-boxdoerfer/fsearch-stable/ubuntu lunar InRelease
    Ign:13 https://ppa.launchpadcontent.net/libreoffice/ppa/ubuntu lunar InRelease
    Ign:14 https://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu lunar InRelease
    Ign:15 https://ppa.launchpadcontent.net/beineri/opt-qt-5.15.2-focal/ubuntu lunar Release
    Get:16 http://archive.ubuntu.com/ubuntu focal/universe DEP-11 48x48 Icons [3016 kB]
    Ign:12 https://ppa.launchpadcontent.net/christian-boxdoerfer/fsearch-stable/ubuntu lunar InRelease
    Ign:13 https://ppa.launchpadcontent.net/libreoffice/ppa/ubuntu lunar InRelease
    Ign:14 https://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu lunar InRelease
    Ign:15 https://ppa.launchpadcontent.net/beineri/opt-qt-5.15.2-focal/ubuntu lunar Release
    Get:17 http://archive.ubuntu.com/ubuntu focal/universe DEP-11 64x64 Icons [7794 kB]
    Get:18 http://archive.ubuntu.com/ubuntu focal/universe DEP-11 64x64@2 Icons [44.3 kB]
    Ign:4 http://archive.ubuntu.com/ubuntu focal/universe arm64 Packages
    Get:5 http://archive.ubuntu.com/ubuntu focal/universe Translation-en [5124 kB]
    Err:12 https://ppa.launchpadcontent.net/christian-boxdoerfer/fsearch-stable/ubuntu lunar InRelease
      Could not connect to ppa.launchpadcontent.net:443 (2620:2d:4000:1::3e). - connect (113: No route to host) Could not connect to ppa.launchpadcontent.net:443 (185.125.190.52), connection timed out [IP: 185.125.190.52 443]
    Err:13 https://ppa.launchpadcontent.net/libreoffice/ppa/ubuntu lunar InRelease
      Unable to connect to ppa.launchpadcontent.net:https: [IP: 185.125.190.52 443]
    Err:14 https://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu lunar InRelease
      Unable to connect to ppa.launchpadcontent.net:https: [IP: 185.125.190.52 443]
    Err:15 https://ppa.launchpadcontent.net/beineri/opt-qt-5.15.2-focal/ubuntu lunar Release
      Unable to connect to ppa.launchpadcontent.net:https: [IP: 185.125.190.52 443]
    Ign:4 http://archive.ubuntu.com/ubuntu focal/universe arm64 Packages
    Err:4 http://archive.ubuntu.com/ubuntu focal/universe arm64 Packages
      404  Not Found [IP: 185.125.190.39 80]
    Ign:4 http://archive.ubuntu.com/ubuntu focal/universe arm64 Packages
    Err:4 http://archive.ubuntu.com/ubuntu focal/universe arm64 Packages
      404  Not Found [IP: 185.125.190.39 80]
    Reading package lists... Done
    W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://repo.waydro.id lunar InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 0E406D181DCEE19C
    E: The repository 'https://ppa.launchpadcontent.net/beineri/opt-qt-5.15.2-focal/ubuntu lunar Release' does not have a Release file.
    N: Updating from such a repository can't be done securely, and is therefore disabled by default.
    N: See apt-secure(8) manpage for repository creation and user configuration details.
    
    geduer@ulan:~$ sudo vim /etc/apt/sources.list^C
    geduer@ulan:~$ sudo vim /etc/apt/sources.list
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    需求 8.4
    Host+Del键表示键盘上的Ctrl+Alt+Del组合


    • 解决 klioeye抢占 windows Ctrl键 的权限kiloeye_keyboard_call.c
    • 增加菜单 调用函数


    ID_KEYBOARDEVENT_INSET
    ID_KEYBOARDEVENT_PRINTSCREEN
    
    
    #define ID_KEYBOARDEVENT_ALTPRINTSCREEN 40008
    #define ID_KEYBOARDEVENT_CTRL_BREAK     40009
    #define ID_KEYBOARDEVENT_HOST_DELECT    40010
    
    insert  的值错了 
    
        if (GetKeyState(VK_CONTROL) & 0x8000) {
            pk.flags |= HID_KB_LEFT_CTRL;
        }
        if (GetKeyState(VK_MENU) & 0x8000) {
            pk.flags |= HID_KB_LEFT_ALT;
        }
        if (GetKeyState(VK_SHIFT) & 0x8000) {
            pk.flags |= HID_KB_LEFT_SHIFT;
        }
    
    case VK_INSERT:
            pk.keypress[0] = 0x0049;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    代码规范

    • 命名
    • 涉及到指针函数 + 报错提示
    • 传固定值 用宏定义
    • 固定 !! 不写恶心代码
    • GDB ! !
    • evtest

    id_ app 热键

    linux 报错 改为

    if(nkm_handle == 0) {
         fprintf(stderr, "ERROR: Failed to open keyboard device. \n");
         exit(EXIT_FAILURE);
    }
    
    • 1
    • 2
    • 3
    • 4


    c a T
    window 千里眼 接口开发

    sudo ./kiloeye -v  调用 ctrl + v 键
    sudo ./kiloeye -c  调用 ctrl + c 键
    -i      insert 键
    -h    ctrl+alt+insert键
    -b break 键  
    -a   alt + prtsc 键
    -p   prtsc 键
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7


    /*
     * MS_Data_Pack[0] 是 Button 按钮位
     * MS_Data_Pack[1] X 轴方向位移
     * MS_Data_Pack[2] Y 轴方向位移
     * MS_Data_Pack[3] 滚动方向
     * 
     * MS_Data_Pack[0] :
     * bit 0 : Button left
     * bit 1 : Button right
     * bit 2 : Button mid
    
    鼠标发送给PC的数据每次4个字节
    BYTE1 BYTE2 BYTE3 BYTE4
    定义分别是:
    BYTE1 –
    |–bit7: 1 表示 Y 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出
    |–bit6: 1 表示 X 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出
    |–bit5: Y 坐标变化的符号位,1表示负数,即鼠标向下移动
    |–bit4: X 坐标变化的符号位,1表示负数,即鼠标向左移动
    |–bit3: 恒为1
    |–bit2: 1表示中键按下
    |–bit1: 1表示右键按下
    |–bit0: 1表示左键按下
    BYTE2 – X坐标变化量,与byte的bit4组成9位符号数,负数表示向左移,正数表右移。用补码表示变化量
    BYTE3 – Y坐标变化量,与byte的bit5组成9位符号数,负数表示向下移,正数表上移。用补码表示变化量
    BYTE4 – 滚轮变化。
    */
    #define MS_LDOWN       0b00000001 // 左键按下
    #define MS_RDOWN       0b00000010 // 右键按下
    #define MS_MDOWN       0b00000100 // 中键按下
    #define MS_XDOWN       0b00001000 // X 按钮按下
    #define MS_X_NEGATIVE  0b00010000 // X 坐标变化量为负数
    #define MS_Y_NEGATIVE  0b00100000 // Y 坐标变化量为负数
    #define MS_X_OVERFLOW  0b01000000 // X 坐标变化量溢出
    #define MS_Y_OVERFLOW  0b10000000 // Y 坐标变化量溢出
    
    #define MOUSEEVENTF_MOVE        0x0001 /* 鼠标移动 */
    #define MOUSEEVENTF_LEFTDOWN    0x0002 /* 左键按下 */
    #define MOUSEEVENTF_LEFTUP      0x0004 /* 左键弹起 */
    #define MOUSEEVENTF_RIGHTDOWN   0x0008 /* 右键按下 */
    #define MOUSEEVENTF_RIGHTUP     0x0010 /* 右键弹起 */
    #define MOUSEEVENTF_MIDDLEDOWN  0x0020 /* 中键按下 */
    #define MOUSEEVENTF_MIDDLEUP    0x0040 /* 中键弹起 */
    #define MOUSEEVENTF_XDOWN       0x0080 /* X 按钮按下 */
    #define MOUSEEVENTF_XUP         0x0100 /* X 按钮弹起 */
    #define MOUSEEVENTF_WHEEL                0x0800 /* 滚轮滚动 */
    #define MOUSEEVENTF_HWHEEL               0x1000 /* 水平滚轮滚动 */
    #define MOUSEEVENTF_MOVE_NOCOALESCE      0x2000 /* 不合并鼠标移动事件 */
    #define MOUSEEVENTF_VIRTUALDESK          0x4000 /* 映射到整个虚拟桌面 */
    #define MOUSEEVENTF_ABSOLUTE             0x8000 /* 绝对移动 */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50



    在 C 语言中,可以使用互斥锁(mutex)来实现多线程加锁。互斥锁用于控制多个线程对他们之间共享资源互斥访问的一个信号量。您可以使用 库中的 pthread_mutex_t 类型来定义一个互斥锁变量,然后使用 pthread_mutex_init 函数来初始化它。在需要加锁的地方,您可以使用 pthread_mutex_lock 函数来加锁,而在需要解锁的地方,您可以使用 pthread_mutex_unlock 函数来解锁。
    下面是一个简单的示例,演示了如何在 C 语言中使用互斥锁:
    复制
    上面的代码定义了一个互斥锁变量 lock,并在 main 函数中使用 pthread_mutex_init 函数对其进行了初始化。然后创建了两个线程 t1 和 t2,它们都会执行 thread_func 函数。在 thread_func 函数中,我们使用 pthread_mutex_lock 函数对互斥锁进行加锁,然后执行临界区代码,最后使用 pthread_mutex_unlock 函数对互斥锁进行解锁。
    希望这个示例能够帮助您理解如何在 C 语言中使用互斥锁来实现多线程加锁。如果您还有其他问题,欢迎继续咨询!😊

    guvcview: symbol lookup error: /home/geduer/backup_guvcview-src-2.0.8/gview_render/.libs/libgviewrender-2.1.so.2: undefined symbol: nd_trace_i (最后遇到的bug)

    学到了什么

    • 沟通很重要 多沟通 多总结
    • 遇到问题不会就多问
    • 收敛一下脾气,学会容忍
    • 多利用 stfw & gpt
    • 多规划
    • 第一次去一线城市,开阔了眼界,
    • 可以的话周末多出去玩玩,劳逸结合!!
    • 面试建议就是提前, 多面 ,多复盘!!

    放点实习的图片

    e544ba8ee1c508c38a3cf98745163d9.jpg
    718459782f7f930a71f4fb92cf6cad3.jpg

    737e67742f15d9d199aacc0c6ec796f.jpg
    a674ae99654ef9f1108d1a0fb8ac16b.jpg

    a87cf4180e020a87acb377bcfd8590f.jpg

    54cffc36fc62a08fde2e6c9f06dd281.jpg

    当时投递的面经

    百度测试开发一面

    • 俩个项目介绍 以及 测试方面的问题
    • 讲一下输入url 发生了什么
    • 介绍一下共享指针
    • 介绍一下内存管理
    • 共享指针 引用计数 涉及到 线程安全的问题
    • 讲一下static 和 const 的区别 修饰 全局变量 用在什么方面
    • 介绍一下C++ 三大特性 (封装继承多态)
    • python shell 方面的
    • 常用的linux命令
    • mysql : 一条语句去查询出每门课大于80分的学生姓名
    • Linux 僵尸进程 孤儿进程 守护进程
    • linux如果知道一个进程的端口号 ,要怎么知道它的进程号, 已经它的初始目录 lsof -i :端口号
    • 笔试题

    输入: “the sky is blue” 输出: “blue is sky the” 不实用额外空间 O(1)空间复杂度下实现
    思路原地翻转 双指针

    class Solution {
    public:
        void my_reverse(string& s, int begin, int end)
        {
            while(begin < end)
            {
                char temp = s[begin];
                s[begin] = s[end];
                s[end] = temp;
                begin++; end--;
            }
        }
        string reverseWords(string s) {
            reverse(s.begin(), s.end());
            while(s.size()){
                if(s[s.size()-1] != ' ' && s[0] != ' ')
                    break;
                if(s[s.size()-1] == ' ')    
                    s.pop_back();
                if(s[0] == ' ')
                    s.erase(0,1);
            }
            if(s.size() == 0) return s;
            int m = s.size(), begin = 0, end = 0;
            for(int i = 0; i < m; i++)
            {
                if(s[i] != ' '){
                    end++;
                }
                if(s[i] == ' ' || i == m-1){
                    if(begin == end){       // 出现连续的空格
                        s.erase(begin,1);
                        i--;m--;
                    } else {                // 窗口中有数
                        my_reverse(s, begin, end-1);    
                        begin = i+1; end = i+1;
                    }
                }
            }
            return s;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 如果给你一个项目 你会从什么方面去测试
    • 如何快速学习新技术
    • 面试评价 : 技术能力需要再沉淀 , 提高更加清晰的表达能力
    • 面试的是一个小姐姐 , 特别会引导, 一般就是你答什么,然后进行深挖

    疯狂游戏 一面

    • MySQL 连表 查询
    • MySQL 开窗函数 索引
    • 查询不同地方的用户名
    • C++ 多重继承的问题 菱形继承
    • 进程与线程 如果共享内存的话该怎么做?
    • 进程 cpu 时间片 切换
    • linux : ps指令 netstat 指令
    • socket 编程
    • top指令复习
    • 栈和队列的区别
    • 多态机制
    • 智能指针

    一个积分榜的例子 -》 什么数据结构用于查询 错排序 性能好

    一种用于查询错序性能较好的数据结构是二叉搜索树(Binary Search Tree,BST)。BST是一种有序的二叉树,其中每个节点的左子树的所有节点的值都小于该节点的值,右子树的所有节点的值都大于该节点的值。通过这种有序的结构,可以快速地进行查找操作。
    BST的查询操作的时间复杂度为O(log n),这是因为每次查询都可以通过比较目标值与当前节点的值,确定下一步要搜索的方向,从而快速定位到目标节点。然而,如果BST的性质被破坏了,例如树的高度非常不平衡,那么查询的时间复杂度可能会退化为O(n),其中n是树中节点的数量。
    为了解决BST在某些情况下性能退化的问题,可以使用自平衡二叉搜索树,如红黑树(Red-Black Tree)或AVL树。这些树在插入或删除节点时会通过旋转操作来保持树的平衡,从而保证查询操作的性能良好,时间复杂度为O(log n)。

    • 网络七层结构和四层结构有什么区别 (负载均衡 )
    • 面试回答技巧 提升沟通能力

    结语 : 天亮未亮,步履不停!!

  • 相关阅读:
    产品设计:如何准确定位设计风格?
    为什么需要 TIME_WAIT 状态
    深度学习术语Neck,Head,Embedding等等
    font标签、特殊字符、标题标签h1-h6
    嵌入式 Linux 入门(十、Linux 下的 C 编程)
    [Java反序列化]—C3P0反序列化
    java学习之SpringCloud Alibaba
    Spring事务的概念(四大特性)
    目录IO及小练习
    国内顶尖架构师手撸Vue+SpringBoot神级项目实战手册,GitHub限时开源
  • 原文地址:https://blog.csdn.net/weixin_49486457/article/details/133156557