你好,我是cpt,本文章记录我大二暑期找实习的过程,以及工作中的点点滴滴,和一些经验分享,希望能够帮助到你。
我是2023.6.16 才开始投递的
当时真的很晚了 基本很少hc 而且小公司基本不要大二学生
下面这两篇 短文是当时面试遇到的问题
boss投递记录↓
感觉是api面, 面了俩次 ,技术官都没问什么,最多20mins
问hr说好像是面试通过了 , 但是后面就没消息了,找她都已读不回,微信都没有
乘上去上海火车,那天晚上差点没赶上,还好运气很好,赶上了!
在火车上,心中怀着对实习的憧憬和向往,然后就在火车上看了一些房子,不得不说上海物价真的很高,我还是运气比较好的,找了一个在公司跑步 700m的公寓。
周一到公司报道,开了会,和同事互相介绍了自己,然后就开始工作了,前几天都是在写文章,主要是熟悉公司的产品。
接下来几天就都是开发了,刚开始就是在linux 环境下, 装一个anbox, 因为他们公司的笔记本系统是arm,所有遇到非常多的问题,很多问题都是没见过的,我几乎几天都没啥进度,然后就别拉去谈话了
过几天一个同事就走了,我去接手他的任务,和他微信沟通了很久,很快就接手上他的项目, 这次是在linux 开发鼠标键盘事件传输,通过一个hid-usb
执行
gcc -o kl kl.c pkg-config --cflags --libs gtk+-2.0
ux系统上运行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
源错误 —— 博客
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
需求 8.4
Host+Del键表示键盘上的Ctrl+Alt+Del组合
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;
代码规范
id_ app 热键
linux 报错 改为
if(nkm_handle == 0) {
fprintf(stderr, "ERROR: Failed to open keyboard device. \n");
exit(EXIT_FAILURE);
}
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 键
/*
* 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 /* 绝对移动 */
在 C 语言中,可以使用互斥锁(mutex)来实现多线程加锁。互斥锁用于控制多个线程对他们之间共享资源互斥访问的一个信号量。您可以使用
下面是一个简单的示例,演示了如何在 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)
输入: “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;
}
};
一种用于查询错序性能较好的数据结构是二叉搜索树(Binary Search Tree,BST)。BST是一种有序的二叉树,其中每个节点的左子树的所有节点的值都小于该节点的值,右子树的所有节点的值都大于该节点的值。通过这种有序的结构,可以快速地进行查找操作。
BST的查询操作的时间复杂度为O(log n),这是因为每次查询都可以通过比较目标值与当前节点的值,确定下一步要搜索的方向,从而快速定位到目标节点。然而,如果BST的性质被破坏了,例如树的高度非常不平衡,那么查询的时间复杂度可能会退化为O(n),其中n是树中节点的数量。
为了解决BST在某些情况下性能退化的问题,可以使用自平衡二叉搜索树,如红黑树(Red-Black Tree)或AVL树。这些树在插入或删除节点时会通过旋转操作来保持树的平衡,从而保证查询操作的性能良好,时间复杂度为O(log n)。