集度面经
一面:
自我介绍+项目
八股
tcp和udp的区别,tcp的粘包如何解决
区别
连接性和可靠性
tcp面向连接,确保数据的可靠传输,提供错误检测、重传机制和流量控制,确保数据的顺序和完整性。
udp面向无连接,不保证数据的可靠传输。不提供错误检测、重传机制和流量控制。传输速度快但是不保证数据的顺序和完整性
通信方式
tcp采用全双工通信,允许双方在通信中同时发送和接收数据。
udp可以是单工或双工通信。
头部开销
tcp头部开销较大,udp较小。
流量控制和拥塞控制
tcp提供,以避免网络拥塞和丢包。
udp不提供,由程序处理。
粘包现象
概念:发送多个小数据包时,接收方可能一次性接收到多个数据包。
原因:1. 发送方连续发送小数据包,可能会被合并成一个大的tcp段。2. 网络拥塞和优化算法,可能会使多个数据包被合并到一起以提高网络效率。
解决方法:
消息界定符
固定消息长度
头部指定长度信息
使用应用层协议按规定的数据格式来处理数据
linux下动态库如何调用,环境变量名称叫什么
环境变量名称:LD_LIBRARY_PATH
设置方法:export LD_LIBRARY_PA ...
代码随想录算法训练营day40 | 343.整数拆分
理论基础
刷题笔记day39
343.整数拆分
文章讲解:代码随想录
是否自己做出来通过全部用例:否
遇到的困难/犯的错误
没有思路。
自己写的代码
看了题解后写的:
class Solution {
public:
int integerBreak(int n) {
vector<int> dp(n+1, 0);
dp[0] = 0;
dp[1] = 0;
dp[2] = 1;
for (int i = 3; i <= n; i++) {
for (int j = 1; j <= i/2; j++) {
dp[i] = max(max(j*(i-j), j*dp[i-j]), dp[i]);
}
}
return dp[n];
}
};
看了题解后的收获
比较难想到。
63. ...
代码随想录算法训练营day39 | 62.不同路径 63.不同路径 II
理论基础
刷题笔记day39
题目
文章讲解:代码随想录
是否自己做出来通过全部用例:是
遇到的困难/犯的错误
无
自己写的代码
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int>> dp(m, vector<int>(n, 0));
for (int i = 0; i < m; i++) {
dp[i][0] = 1;
}
for (int j = 0; j < n; j++) {
dp[0][j] = 1;
}
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
dp[i][ ...
实习总结
工作任务
任务一:基于SOME-IP协议,在双机上实现雷达数据服务的发布/订阅与测试;
任务二:开发自动化配置脚本,实现在Veristand中自动化配置AFP(自动帧处理)通道接口,服务于仿真测试。
工作过程
任务一
1、跑通SOME-IP双机通信:学习以太网和SOME-IP相关知识,学习和了解SOME-IP源码中的发布/订阅和请求/响应两个模式的路由原理,了解配置文档中各个参数的意义,实现SOME-IP双机通信。
2、优化服务端程序:基于发布/订阅服务端源码,将真实服务端相关信息写入配置文档和代码中,改进已序列化的VTD雷达数据报文,以SOME-IP协议提供雷达点云数据服务和状态数据服务;
3、开发消费端程序:基于发布/订阅消费端源码,将真实消费端相关信息写入配置文档和代码中,开发基于真实控制器信息的SOME-IP消费端通信仿真程序,实现雷达数据服务的发布/订阅;
4、测试雷达数据准确性:使用Wireshark对服务端提供的雷达数据抓包,将数据包导入RSView中实现对雷达数据的可视化测试;
任务二
1、开发数据筛选脚本:基于已解析的DBC文件中的所有数据,从中筛选用于设置AFP通道 ...
代码随想录算法训练营day38 | 509.斐波那契数 70.爬楼梯 746.使用最小花费爬楼梯
理论基础
动态规划基础
动态规划五部曲
dp数组及下标的含义
递推公式
dp数组如何初始化
遍历顺序
打印dp数组
背包问题
打家劫舍
股票问题
子序列问题
刷题笔记day38
509.斐波那契数
文章讲解:代码随想录
是否自己做出来通过全部用例:是
遇到的困难/犯的错误
无
自己写的代码
class Solution {
public:
int fib(int n) {
if (n <= 1) return n;
vector<int> dp(n+1, 0);
dp[0] = 0;
dp[1] = 1;
for (int i = 2; i <= n; i++) {
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
};
看了题解后的收获
用动规代替递归可以降低时间复杂度。
70.爬楼梯
文章讲解:代码随想录 ...
nivssdf文件修改脚本使用说明
源文件
源文件包含:
DBCAnalysis.m
功能:解析dbc数据并提取所有Chks和Cntr及其所属message的信息至txt文档;
Modifysdf.cpp
功能:基于txt文档,修改nivssdf文件。
tinyxml2.cpp/tinyxml2.h
功能:用于解析xml的开源库;
run.bat
功能:可执行文件运行脚本,实现循环地运行所选的程序。
编译可执行文件
在当前目录下打开cmd,输入:
mcc -m DBCAnalysis.m
g++ Modifysdf.cpp tinyxml2.cpp tinyxml.h -o Modifysdf
生成两个可执行文件:
DBCAnalysis.exe
Modifysdf.exe
运行脚本
运行run.bat:
输入"1":运行DBCAnalysis.exe
输入"2":运行Modifysdf.exe
输入"q":退出脚本
脚本输入输出
DBCAnalysis.exe
输入:需要解析的dbc所在路径
输出:包含从dbc中提取的message、Chks和Cntr数 ...
代码随想录算法训练营day28 | 93.复原IP地址 78.子集 90.子集II
刷题笔记day28
93.复原IP地址
文章讲解:代码随想录
是否自己做出来通过全部用例:否
遇到的困难/犯的错误
回顾回溯算法。
自己写的代码
看了题解后写的:
class Solution {
public:
vector<string> result;
void backtracking(string& s, int start, int pointnum) {
if (pointnum == 3) {
if (isvalid(s, start, s.size() - 1)) {
result.push_back(s);
}
return;
}
for (int i = start; i < s.size(); ++i) {
if (isvalid(s, start, i)) {
...
vsomeip环境搭建+双机通讯
ubuntu系统下的vsomeip环境搭建
一种可运行环境配置
vsomeip 3.3.8
cmake 3.27
boost 1.78
下载源码
去gitcode/github上下载源码
vsomeip源码下载
或者直接执行
git clone https://gitcode.net/mirrors/COVESA/vsomeip.git
可以得到最新版本的vsomeip源码。
安装依赖项
cmake
安装
用sudo apt-get install cmake安装的cmake的版本较老,已经不适用。
需要我们去官网上找较高版本的cmake进行下载安装。
cmake官网地址
可以自行选择下载一个较新的版本。
也可以直接从github上克隆最新版,目前是3.27。
git clone https://github.com/Kitware/CMake.git
下载后打开文件夹,按步骤执行命令
./bootstrap
make
sudo make install
make过程大概需要十几二十分钟
上述全部执行完
执行cmake -version能查到版本信息就说明安装成功了。
卸载
回 ...
代码随想录算法训练营day27(day28补) | 39.组合总和 40.组合总和II 131.分割回文串
刷题笔记day27
39.组合总和
文章讲解:代码随想录
是否自己做出来通过全部用例:否
遇到的困难/犯的错误
这里回溯的时候startindex不需要+1。
自己写的代码
class Solution {
public:
vector<vector<int>> result;
vector<int> elements;
void backtracking(vector<int>& candidates, int target, int sum, int startindex) {
if (sum > target) return;
if (sum == target) {
result.push_back(elements);
return;
}
for (int i = startindex; i < candidates.size(); + ...
代码随想录算法训练营day25(day27补) | 216.组合总和III 17.电话号码的字母组合
刷题笔记day25
216.组合总和III
文章讲解:代码随想录
是否自己做出来通过全部用例:否
遇到的困难/犯的错误
for (int i = startindex; i <= 9; ++i) 其实条件是int i = startindex,不是i = 1;
终止条件中,即使sum != n也要return;
自己写的代码
class Solution {
public:
vector<int> path;
vector<vector<int>> result;
void backtracking(int k, int n, int startindex) {
if (path.size() == k) {
if (accumulate(path.begin(), path.end(), 0) == n) result.push_back(path);
return;
}
for (i ...