JVM
1. JVM快速入门
指定堆内存,元空间,打印基本 GC 信息,打印对象分布,打印堆数据
HeapDumpOnOutOfMemoryError 指示 JVM 在遇到 OutOfMemoryError 错误时将 heap 转储到物理文件中。
-XX:SurvivorRatio : eden/survivor 空间的比例, 例如-XX:SurvivorRatio=6 设置每个 survivor 和 eden 之间的比例为 1:6。
-XX:+UseConcMarkSweepGC 设置年老代为并发收集。
-XX:+PrintGCTimeStamps 用于输出GC时间戳(JVM启动到当前日期的总时长的时间戳形式)。示例如下:
0.855: [GC (Allocation Failure) [PSYoungGen: 33280K->5118K(38400K)] 33280K->5663K(125952K), 0.0067629 secs] [Times: user=0.01 sys=0.01, real=0.00 secs]
-XX:CMSFullGCsBeforeCompactio ...
redis浅析
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849// 使用STL中unordered_map作为字典template <typename T1, typename T2>using Dict = std::unordered_map<T1, T2, std::hash<T1>, std::equal_to<T1>, __gnu_cxx::__pool_alloc<std::pair<const T1, T2>>>;// 数据库键类型为std::string// 数据库五种值类型定义// __pool_alloc内部使用链表进行管理内存、预分配内存、不归还内存给操作系统等机制来减少malloc的调用次数。using String = Dict<std::string, std::string>;using List = Dict ...
JUC
1. JUC概述及回顾
1.1. JUC是什么?
在 Java 5.0 提供了 java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类。此包包括了几个小的、已标准化的可扩展框架,并提供一些功能实用的类,没有这些类,一些功能会很难实现或实现起来冗长乏味。
参照JDK文档:
1.2. 进程和线程
进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
线程:通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统多个程序间并发执行的程度。
生活实例:
使用QQ,查看进程一定有一个QQ.exe的进程,我可以用qq和A文字聊天,和B视频聊天,给C传文件,给D发一段语言,QQ支持 ...
docker
1.必装环境(最低1核2G)
1.1.安装Docker
1234yum install -y yum-utils device-mapper-persistent-data lvm2 //安装必要工具yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo //设置yum源yum install -y docker-ce //下载dockersystemctl start docker //启动docker
1.2.安装MySQL
12docker pull mysql //下载MySQL镜像docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=密码 -d mysql //启动MySQL
1.3.安装Redis
12docker pull redis //下载Redis镜像docker run -p 6379:6379 --name redis - ...
ros
一、ROS介绍
ROS 是机器人操作系统的简称(Robot Operating System),其具备操作系统的许多功能。但是在实际应用中,它需要建立在计算机操作系统之上,例如 Linux,因此有时候也称 ROS 为元操作系统。 ROS 的主要功能是提供用户、计算机操作系统以及外部设备间的通讯功能,这些外部设备包括传感器、摄像机,同时也包括机器人。与其它操作系统一样,ROS 的优点在于其硬件抽象能力,以及它所具备的在不需要用户详尽了解机器人各种细节的前提下对机器人进行控制的能力。
下面介绍 ROS 节点、话题与消息、节点管理器
1. ROS 节点(Node)
一般而言,节点就是执行某些动作的进程。ROS 节点本身实际上就是一个软件模块,除了具体的软件功能之外,还具有注册连接到 ROS 节点服务器,并和 ROS 网络中的其它节点通信的功能。 ROS 节点的设计理念是每一个节点都是独立的模块,相互之间通过 ROS 的通信能力实现交互。
对于节点而言,既可以独立地运行代码来完成其作业任务,也可以通过发送或接收消息来与其它节点进行通信。消息包含了数据、命令或者其它对于应用程序而言必要的信息。
...
算法
语法
123456789string line; getline(cin, line); //读一行 if(line.back() != ')') line += " (+0)"; int h1, m1, s1, h2, m2, s2, day; sscanf(line.c_str(), "%d:%d:%d %d:%d:%d (+%d)", &h1, &m1, &s1, &h2, &m2, &s2, &day); int S = h1*3600 + m1*60 + s1; //起飞时间:转为秒 int E = h2*3600 + m2*60 + s2; //到达时间:转为秒 int ans = E - S + day*24*3600; //返回秒 printf("%02d:%02d:%02d\n",ans/3600,ans/60%60,ans%60); //时:分:秒
优先unordered_ ...
并行编程
第一部分:thread类
c++头文件<thread>主要包含了std::thread类,此外,命名空间std::this_thread也封装在这一头文件中。
构造
thread类的构造函数为thread (Fn&& fn, Args&&... args);,线程会调用fn函数,函数fn有需要传递的参数在args里给出。 构造函数结束的同时函数fn将被调用**。
方法
join方法:
声明:void join();
只有当这个线程结束并返回后主线程才会继续执行。
detach方法:
声明:void detach();
把这个线程与主线程分离运行。
一个例程:
123456789101112131415161718192021#include <iostream>#include <thread>int main(){ std::ios::sync_with_stdio(false); std::thread thread_a([]() { for (i ...
effective cpp
effective cpp
const
1.我们需要尽可能的在可以加const的地方上const
const可以接受左值和右值
const可以防止对应的值被意外的修改
我们很多时候需要的是概念上的常量性,即不能通过任何方式更改一个对象本身所拥有的内容。而不是编译器所指的bitwise
2.使用const和enum替换掉#define
#define对应的值是不会出现在记号表里面的,然而const对应 值是会出现的
单纯 define替换可能会出大麻烦,因为他不能去地址,它也不能在debug模式里面去追踪
reference
1.使用const typename & x,这么做可以保证不对需要传入的对象进行复制,达到减少程序运行时间的目的
2.在必须返回对象的情况下,不要返回对应的reference,因为这样会导致出错
3.在返回对象的情况下,不要使用指针/引用对这个对象取地址,因为其返回的是一个临时对象。使用指针/引用指向它会造成空悬指针
class基本
class里面的函数总概论
构造函数
构造函数的创建:对于一个没有构造函数的对象来说,编译器会为他自动合成一个。
构造 ...
C++ const总结
C++ const在成员函数中的用法总结
首先把这学明白是看了C++ primer中对这里的讲解,学懂这部分一定要理解this指针的用法。
那么这期笔记分几点来讲:
一.根据C++ primer内容讲this指针,然后讲const在成员函数中的概念。
二.理解了概念之后,通过网上的一个博客案例([c/c++: c++函数返回类型什么情况带const - A_zhu - 博客园 (cnblogs.com)](https://www.cnblogs.com/Azhu/p/4352613.html#:~:text=const 成员函数的返回类型是引用时候,需要加const 约束 int fun (),const%3B int %26 fun () const%3B))来巩固一下。
三.巩固完之后呢,通过Effctive C++中的一个例子,详细说明一下,const成员函数以及它的返回类型什么时候返回const ,什么时候返回const&,通过排列组合来说明。
一、this指针
我们借用C++ primer的基础程序来举例说明:
123456Sales_data total;total ...
IMU姿态解算
基于四元数扩展卡尔曼滤波的IMU姿态解算
姿态解算用于求解云台系到惯性系的坐标变换矩阵与姿态欧拉角,准确的姿态信息对目标运动估计和云台运动控制至关重要。本系统利用四元数微分方程进行姿态更新,通过扩展卡尔曼滤波(Extended Kalman Filter, EKF)融合陀螺仪与加速度计信息估计重力加速度,利用加速度计修正姿态并估计陀螺仪 $x,y$ 轴零偏,利用估计得到的重力加速度以非线性约束的方式对四元数进行修正,并借助卡方检验剔除运动加速度过大时的加速度计量测以降低运动加速度对滤波准确性的影响。利用重力加速度估计值而非加速度计测量值进行姿态修正,可较大程度减小运动加速度对姿态解算准确性的影响。
四元数
定义
姿态描述的是机体坐标系 (b 系) 相对惯性坐标系 (n 系) 的旋转关系。常见的描述方法有三种,每种各有其优缺点,包括欧拉角,方向余弦矩阵和四元数。
四元数的定义与复数非常相似,主要区别是复数只有一个虚部,而四元数有三个,故四元数可以写成下面这种形式:
$$
\mathbf q=q_{0}^{}+q_{1}^{} i+q_{2}^{} j+q_{3}^{} k \quad ...