自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 java动态代理详解

本篇文章参考以下几篇博客:https://www.cnblogs.com/gonjan-blog/p/6685611.htmlhttps://www.jianshu.com/p/4e14dd223897https://www.cnblogs.com/benwu/articles/8283549.html参考上述博客,本文对java的动态代理机制从底层分析,并融入自己的理解。首先,实现动态代理需要使用java.lang.reflect包下提供的Proxy类和InvocationHandler接

2021-08-06 16:20:37 2188

原创 turtlebot强化学习导航(无需安装gym)

之前写过一篇博客:详解ubuntu 16.04安装gym-gazebo,这篇博客详细介绍了如何在ubuntu 16.04环境下安装gym-gazebo,从而对turtlebot进行强化学习导航。由于其中ros中python是2.7版本的,而安装gym-gazebo需要安装gym包,它是python3版本的,两个python版本不一致,所以安装起来比较复杂,具体参加我的那篇博客。最近,我发现了一个软件包,其可以避免安装gym,从而可以不用python3,这样就可以全程使用python2.7来进行强化学习了

2021-03-05 01:02:22 1889 4

原创 socket随笔

前言socket(套接字),socket的英文翻译为插座。在通信过程中,套接字必须是成对(指客户端和服务器端都要创建套接字)出现的,就想插头与插座的关系一样。在Linux环境下,socket用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字。与管道类似的,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。区别是管道主要应用于本地进程间通信,而套接字多应用于网络进程间数据的传递。

2020-09-21 19:20:08 519

原创 多路IO转接

select多路IO转接多路IO转接,又称IO多路复用。多路复用,意思就是本来一条链路上一次只能传输一个数据流,如果要实现两个源之间多条数据流同时传输,那就得需要多条链路了,但是复用技术可以通过将一条链路划分频率,或者划分传输的时间,使得一条链路上可以同时传输多条数据流。多路IO转接的字面意思:原本使用socket套接字编程时,是服务器(应用程序)一直在阻塞等待客户端的连接,这样服务器端(应用程序)的压力太大。于是服务器请来了助手,即select、poll、epoll等,这几个函数借助内核来替服务器

2020-09-21 19:09:46 684

原创 使用vscode创建C++工程

1.推荐文件目录即一个C++工程文件中包含.vscode文件夹、build文件夹、include文件夹、src文件夹以及一个CMakeLists.txt文件。2. .vscode文件夹.vscode文件夹一般应该包含三个配置文件:c_cpp_properties.json、tasks.json、launch.jsonc_cpp_properties.json是用于配置编译器环境的,这里最重要的就是includePath,其指明了C/C++标准库、用户头文件所在位...

2020-09-21 18:54:42 40262 9

原创 详解ubuntu 16.04安装gym-gazebo

前言首先说明,本人使用官方给的教程在ubuntu 16.04上安装gym-gazebo装了好多天都失败了,为此重装系统估计有十次,网上的安装教程跟着走也是不行,最终好不容易装成功了一次,不禁感叹gym-gazebo真特么难装。所以,为了对得起这几天的辛苦与努力,也为了后来人能够不走我的老路,因此,本篇文章决定仔细讲解gym-gazebo的安装教程。本次能够成功安装gym-gazebo,还得...

2020-03-26 00:11:21 5041 44

原创 帖子收藏

ROS相关1.ROS中使用A星算法进行路径规划https://blog.csdn.net/a819096127/article/details/895522232.ROS中move_base的全局路径规划渐进学习https://blog.csdn.net/youngybird/article/details/827449993.rosparam和ROS参数服务https:/...

2020-03-22 15:30:30 250

原创 muduo库是如何实现跨线程函数调用的

muduo库的跨线程函数主要是通过EventLoop类的成员函数runInLoop函数实现的,还是以具体的例子来一步一步的说明吧!#include <muduo/net/EventLoop.h>#include <muduo/net/EventLoopThread.h>#include <stdio.h>using namespace...

2020-03-05 01:48:09 944 3

原创 muduo库Channel类剖析:从回调函数注册到函数执行流程全剖析

Channel通道类,它是muduo库负责注册读写事件的类,并保存了fd读写事件发生时调用的回调函数,那么它到底是如何实现对应事件发生时系统执行指定的回调函数的呢?下面我们来研究一下:Channel的数据成员: 我们看到Channel类的数据成员中有一个描述符成员fd_,每个描述符会与一个Channel绑定。同时我们看到其由4个回调函数指针成员。事件关...

2020-03-05 00:11:33 710

原创 基于muduo库编写的服务器运行时文件描述符的创建顺序分析

这里仅以单IO线程为例,会了单IO线程的,其实多IO线程的也很好分析。首先来看TcpServer类的数据成员:TcpServer类的构造函数: 研究TcpServer的数据成员与构造函数可以清晰的看到各个文件描述符的创建顺序。这有助于我们对整个服务器运行的流程有着一个较为清晰的了解。首先我们以TcpServer工作在单线程为例。众所周知,0、1、2分别对应s...

2020-03-04 23:57:34 212

原创 以sudoku服务器分析基于muduo的multiReactor+业务线程池模型运行流程

前言在以sudoku服务器分析muduo的的multiReactor+业务线程池模型运行流程之前,我们首先要知道什么是multiReactor+业务线程池模型(这种模型又称为one loop per thread +线程池模型),请看下面这幅图。所谓one loop per thread,就是每个loop循环对应一个IO线程,每个IO线程中有一个EventLoop对象,负责处理IO事件...

2020-03-04 23:22:39 728 1

原创 以基于Reactor模式的高并发EchoServer为例剖析muduo库框架

前言 在讲解基于muduo库的高并发echo服务器之前,我们先来回顾一下我们一般编写基于Reactor模式的高并发服务器的基本流程。 muduo的EchoServer其实也是基于上述流程,只不过进行了一定程度地封装,本质上仍是Reactor模式。muduo的example中的echo服务器代码展示的是只有一个reactor的服务器,muduo其实支持one loop per t...

2020-03-02 15:05:43 759 1

原创 ubuntu相关

1.ubuntu 16.04使用run方式安装nvidia显卡驱动我们在使用一些神经网络框架的时候通常需要GPU版本,而GPU版本需要我们拥有显卡,而要想使用显卡我们必须要首先安装显卡驱动。首先到下述网址搜索对应版本驱动。https://www.nvidia.cn/Download/index.aspx?lang=cn根据自己的显卡型号搜索对应版本的驱动,如下图所示,我的电脑显卡为G...

2020-01-04 23:06:07 264

原创 STL源码剖析笔记

目录第二章:空间配置器预备知识std::allocator与std::alloc详解std::alloc空间配置空间释放构造与析构基本工具:construct()和destroy()内存基本处理工具:uninitialized_copy()、uninitialized_fill()、uninitialized_fill_n()小结第三章 迭代器概念与trai...

2019-12-02 23:26:29 1472

原创 Social GAN源代码阅读报告

目录数据处理部分:trajectories.py及数据加载部分:loader.py网络模型部分:models.py数据处理部分:trajectories.py及数据加载部分:loader.pySocial GAN源码是基于pytorch框架来写的,trajectories.py是文件的数据处理部分。首先,我们需要知道pytorch的数据加载到模型的操作顺序。创建一个...

2019-12-01 23:04:32 4896 41

原创 剑指offer刷题笔记

目录1.二维数组中的查找2.替换空格3.从头到尾打印链表4.重建二叉树5.用两个栈实现队列6.斐波那契数列7.旋转数组的最小数字8.矩阵中的路径9.机器人的运动范围10.剪绳子1.二维数组中的查找在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二...

2019-11-30 22:48:42 213

原创 日常学习总结

目录2019.03.012019.11.132019.11.252019.11.272019.11.302019.12.012019.12.062019.12.092019.12.152019.03.011.set容器中insert和emplace的区别:insert : 拷贝对象到setemplace: 到set里面构造对象2.map和pa...

2019-11-30 22:48:35 626

原创 leetcode刷题笔记

目录1.两数之和2.盛最多水的容器3.三数之和4.最接近的三数之和5.四数之和6.删除排序数组中的重复项7.移除元素8.下一个排列9.搜索旋转排序数组10.在排序树组中查找元素的第一个和最后一个位置11.搜索插入位置12.组合总和13.组合总和II14.旋转图像15.缺失的第一个正数(经典)16.接雨水17.跳跃游戏18.跳跃...

2019-11-30 21:56:37 499

原创 ubuntu使用过程中遇到的一些错误及解决办法

1.在编译程序的时候遇到下面的错误:CMake Error at /home/moro/work_ws/devel/share/pcl_ros/cmake/pcl_rosConfig.cmake:106 (message):Project 'pcl_ros' specifies '/usr/include/ni' as an include dir, which is no found. ...

2019-11-23 17:48:22 2558 5

原创 牛客网刷题笔记

1.题目如下,求输出结果void fut(int**s,int p[2][3]) { **s=p[1][1];}void main( ) { int a[2][3]={1,3,5,7,9,11},*p; p=(int*)malloc(sizeof(int)); fut(&p,a); cout<< *p;}(1)知识点:一级...

2019-02-28 20:16:07 347

原创 C++ Primer 学习(第六章)

1.函数的实参类型必须与对应的形参类型相匹配或者实参的类型能够隐式地转换成形参的类型。例如定义函数:int fact(int val){ int ret=1; while(val&gt;1) ret*=val--; return ret;}那么调用fact(3.14)也是合法的,因为double类型的可以转换成int,等价调用fact(3)。2.函数形参列表...

2018-10-12 10:29:20 206

原创 C++ Primer 学习(第五章)

1.如果switch语句的表达式和所有的case都没有匹配上,将直接跳转到switch结构之后的第一条语句。2.case标签必须是整型常量表达式。例如:char ch=getVal();int ival=42;switch(ch) {case 3.14: //错误:case标签不是一个整数case ival: //错误:case标签不是一个常量}另外,任何两个case标...

2018-09-21 10:57:32 212

原创 C++ Primer 学习(第四章)

1.左值和右值C++中可以这样简单的理解左值和右值:能够取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值。当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。一个重要的原则是在需要右值的地方可以用左值来代替,但是不能把右值当成左值(也就是位置)使用。当一个左值被当成右值使用时,实际使用的是它的内容(值)。2.C+...

2018-09-20 21:19:39 123

原创 C++ Primer 学习(第三章)

1.命名空间的using声明使用using namespace::name的形式,就可以直接访问命名空间中的名字,而不需要在加(形如命名空间::)前缀。例如,在程序中声明:using std::cin;其中,std即namespace,命名空间;name即cin,成员名。声明了这句话之后,以后不需要再写std::cin,只需要cin即可。另外,头文件当中不应包含using的声明,...

2018-09-10 11:53:24 293 1

原创 C++ Primer 学习(第二章)

1.如果表达式里既有带符号类型又有无符号类型,当带符号类型的数为负值时会出现异常的结果,这是因为带符号数会自动地转化为无符号数。例如以下程序:unsigned u=10;int u2=42;std::cou&lt;&lt;u-u2&lt;&lt;std::endl;输出结果为4294967264。另外,对于两个无符号数,如果从无符号数中减去一个值时,不论这个值是否为无符号数,我们...

2018-09-10 11:52:30 250

原创 ROS教程学习及Linux学习

1.Linux中如何使用vim编辑器?使用vim filename进行编辑,例如要对package.xml文件进行编辑,那么在终端cd到指定的文件目录下,vim package.xml即可。刚开始其为命令模式,无法对文件进行编辑,需要输入i进入到编辑模式,当编辑好后,需要按esc键退出编辑模式,进入命令模式。然后输入:进入末行模式,按wq保存退出,按q!不保存退出。2.ROS基础教程(创建R...

2018-09-10 11:50:36 4339

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除