自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

我的大学

唯有时刻保持清醒,才能看清真正的价值在哪里。

原创 ubuntu on-my-zsh 配置

Oh-my-zsh 配置安装安装zshsudo apt-get install zsh将默认bash改为zsh(重启才会生效)chsh -s /bin/zsh安装oh-my-zshsh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"然后重启就可以查看效果了迁移系统环境变量由于zsh和ubuntu的bash的环境变量不同,一个为~/.bashr

2020-05-20 14:51:39 146

原创 【AR技术点】(三)完整的AR效果

开始工作了,留给自己写博客和看书的时间也变少了。最近半年更新的比较少,但是这个系列还是需要有个完结,不过不想写的太多,因为说的在前面都已经说过了。这个AR实现在一年前就实现了,但是一直没有写博客来说一下。这个项目,中间耗时近一年,虽然并不是大部分时间都在做AR实现,但是还是耗费了许多的功夫,最后也终于实现了大致的功能和预期,达到了实时的AR效果。我的毕业论文也是描述了AR过程的实现和优化方法。...

2020-01-12 22:04:33 655 3

原创 Android消息分发机制要点总结

几个月前用安卓写代码时总结的一些东西,现在发出来充充数,以后要多写写博客了。概述本文主要是针对Android消息分发过程中的几个要点:消息队列messageQueue构造主线程Looper的loop过程Activity怎么启动主Loop过程messageQueue.next()函数的具体过程UI分层结构,不同UI层次间的关系消息分发的层次ActivityThread的启动过程...

2020-01-05 11:47:20 296

原创 android 通过反射机制打印主线程消息队列中的消息

步骤1:通过Hook得到ActivityThread对应的Handlerpublic static Handler hookActivityThreadHandler() {//获取主线程Handler if (null == mHandler) { try { Class<?> activityThreadClass = Class...

2020-01-05 11:32:27 269

原创 编写shell脚本自动测试手机应用并存储logcat到脚本的当前目录

前言今天学了一下shell脚本,感觉挺有意思的,刚好工作有个需求,用到了shell做一些测试,所以把今天学的东西总结一下。安卓测试中,我们在android studio上肯定会知道它内置了一个logcat控件,可以打印、分类、筛选你手机应用打印的logcat,还可以筛选自己应用的logcat,确实很方便,但是当我们需要自动地去取出logcat然后处理就很麻烦了,只能手动的筛选然后复制出来到tx...

2019-07-26 18:40:12 324

原创 git相关命令总结

git相关命令拉取代码和分支控制创建本地仓库到当前目录:git init克隆远端仓库:git clone 远端仓库地址将远端仓库的分支拉取到本地(这个将会自动创建一个新的本地分支,并与指定的远程分支关联起来):git checkout -b 本地分支命名 origin/远端分支名与远端建立连接:git remote add origin git@github.com:XXXX/noth...

2019-07-18 14:39:47 156

原创 过去的一年——考研和校招

过去的一年过去的一年(也就是去年的3月到现在),最主要做了的有两件事:考研找工作虽然说着是两件事,但其实中间却经历了很多很多的事,要怎么开始去说呢,慢慢来吧。读过我前面的面经的应该知道,今年七月,我将去深圳进行工作,而最近也是很多的事情要做,没法提前去实习。刚好最近把事情忙完了,刚好趁着现在这个最悠闲的时候总结一下自己过去一年的经历。我这个人很难漫无目的说话,必须要通过一个引子才...

2019-04-16 21:27:11 1071

原创 2019届 字节跳动C++校招面经(一二三hr面,已拿offer)

双非学校,大四无实习经验,考研难民。。考完研之后参加的第一次面试。现在发出面经来回馈一下前面看过的那么多面经。一面和二面都是同一天面的,hr在三面后的两天后。(题目顺序有些不分先后,但大致有序)第一面(50 min)1、进程和线程的区别和其使用等常规题。2、tcp和udp的区别常规题。3、http协议和https协议的不同和其大概原理还好前几天看了一篇HTTPS的科普,我就讲...

2019-03-15 16:58:00 15176 8

原创 计算机网络总结(三)——socket

1、前言1.1、网络中进程如何通信?本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类:消息传递(管道、FIFO、消息队列)同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)共享内存(匿名的和具名的)远程过程调用(Solaris门和Sun RPC)众所周知,网络间的进程通信最首要要解决的就是如何找到目标进程。在本地我们可以通过简单的进程PID来唯一标识一个进程,...

2019-02-27 16:37:51 456 2

原创 计算机网络总结(二)——TCP协议

TCP 的特性TCP 提供一种面向连接的、可靠的字节流服务在一个 TCP 连接中,仅有两方进行彼此通信。广播和多播不能用于 TCPTCP 使用校验和,确认和重传机制来保证可靠传输TCP 给数据分节进行排序,并使用累积确认保证数据的顺序不变和非重复TCP 使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制注意:TCP 并不能保证数据一定会被对方接收到,因为这是不可能的...

2019-02-25 23:42:44 253

原创 计算机网络总结(一)——HTTP协议

HTTP的特性HTTP构建于TCP/IP协议之上,默认端口号是80HTTP是无连接无状态的HTTP报文1、请求报文HTTP 协议是一种以ASCII码传输,建立在TCP/IP协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符...

2019-02-25 23:37:58 338

原创 如何用python实现爬虫自动爬取百度图片原图

说点什么其实一直以来,对于python这个语言还是很感兴趣的,但是以前一直在做图像处理相关的东西,所以对这种无法触及底层内存处理的语言一直没怎么关注过,不过最近实在是被C++的字符串处理和复杂芜杂的网络框架给整崩溃了,而且看到大家都说python很好玩,就趁着最近没事来学一下python。昨天跟着廖雪峰老师的python教程(比较推荐它的基础教程),看了看基本的数据结构和逻辑之后,决定还是直接...

2019-01-04 16:31:25 2014 1

原创 【AR技术点】(二)如何快速跟踪特征图像

最近在准备考研,所以博客很久没有更新了,最近怎么说呢,也还行吧,就是很久没有好好的打过代码了。 每天就是背背单词做做高数,好像一下子又回到了学生时代,还挺怀念的。 好了,话不多说,直接讲图像追踪 首先可以看看我的上一篇博客(AR技术点(一)),了解一下AR的基本常识 复杂的我就不多说了,我就浅显地讲一下AR中的图像标定和跟踪方式的优化和设计PS:由于手边没有配置opencv环境,所以这...

2018-05-25 11:51:13 4763 1

原创 C++中的仿函数functor

引子先考虑一个简单的例子:假设有一个vector<string>,你的任务是统计长度小于5的string的个数,如果使用count_if函数的话,你的代码:bool LessThan5Function(const string& str) {//寻找长度小于5的字符串 return str.length() < 5;}void test() {...

2018-03-22 15:21:24 953 2

原创 AVL树详解以及实现

1、AVL树定义AVL树是一种高度平衡的二叉搜索树,它既能保持二叉树的高度平衡,又尽量降低了二叉树的高度,这样减少了树的平均搜索长度,达到了很好的搜索效率的同时也保证了不错的插入和删除效率其必须满足如下约束条件: 每个节点的左子树和右子树的高度之差的绝对值都不超过1 树中的每个节点的左子树和右子树都是AVL树 满足正常的二叉查找树的规则(每个节点左边节点的key大于右...

2018-02-28 20:39:00 278

原创 光流金字塔calcOpticalFlowPyrLK进行特征点跟踪

光流描述的是图像上每个像素点的灰度的位置(速度)变化情况,光流的研究是利用图像序列中的像素强度数据的时域变化和相关性来确定各自像素位置的“运动”。研究光流场的目的就是为了从图片序列中近似得到不能直接得到的运动场。 光流法的前提假设: - (1)相邻帧之间的亮度恒定; - (2)相邻视频帧的取帧时间连续,或者,相邻帧之间物体的运动比较“微小”; - (3)保持空间一致性;即,

2018-01-26 18:43:45 6715

原创 用SURF算法和其描述子实现视频的特征图像跟踪和标定

其实最初我是想采用SIFT的算子和特征点识别来进行特征图像的跟踪标定的,但是经过测试后发现SIFT的检测时间实在是太长了,根本不适合作为视频的特征识别的算法,所以虽然其识别准确率是最高的,但是还是只能进行舍弃而且SURF虽然准确率没有SIFT高,但其也保留了基本的尺度不变性和旋转不变型,用作特征图像的标定其实也算不错,不过这样的方法也有很大的问题,就是每一帧都必须对全局图像进行一个特征点的描述

2018-01-12 17:01:19 1092 2

原创 SIFT算法的特征点筛选和DMatch、Keypoint描述

SIFT算法描述SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or corner points)及其有关scale 和 orientation 的描述子得到特征并进行图像特征点匹配 这个算法具有比较良好的尺度不变性和旋转不变形KeyPointKeyPoint类的成员

2018-01-08 00:29:25 6778 6

原创 goodFeaturesToTrack关键点检测

环境:opencv 2.3.1函数 goodFeaturesToTrack,函数原型:void goodFeaturesToTrack( InputArray image, OutputArray corners, int maxCorners, double qualityLevel, double minDi

2018-01-05 19:42:30 647

原创 用Atom和markdown编辑笔记

AtomAtom是github开发的开源跨平台的编辑器,Atom是一个非常强大的编辑器,主要是因为其内有许多的热心用户通过其开源的接口写了大量强大的插件我平时一般都把Atom当作一个简单的代码查看器和简单逻辑的编辑器,但是最近突然发现Atom还内置了markdown的编辑和预览功能,用了一下发现效果也很不错,而且其界面也比csdn和有道云自带的markdown要好看的多且人性化不少。当然最重要的还是

2018-01-04 12:17:51 4367

原创 iostream 缓冲区详解(cin和cout)

缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。 缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。缓冲区的类型 缓冲区 分为三种类型:全缓冲、行缓冲和不带缓冲。  1、全缓冲   在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。全缓冲的典型代表是对磁盘文件的

2017-12-24 17:59:23 2487 4

原创 【操作系统学习】(二)同步互斥

临界区描述临界区 指进程中访问临界资源的一段需要互斥访问的代码进入区 检查可否进入临界区的一段代码如可进入,设置相应“正在访问临界区”的标志退出区 清除“正在访问临界区”的标志剩余区 代码中的剩余代码访问规则空闲则入 没有进程在临界区时,任何进程可进入忙则等待 如果有进程在临界区时,任何进程都不可进入临界区有限等待 等待进入临界区的进程不能无限的被动等待让权等待(可

2017-12-06 20:48:52 652

原创 【操作系统学习】(一)进程调度

进程调度的概念进程切换:CPU资源的当前占用者的切换保存当前使用者的执行上下文回复下一个进程的执行上下文处理机调度策略从就绪队列中挑选下一个占用CPU运行的进程从多个可用CPU中挑选就绪进程可使用的CPU资源调度程序:挑选就绪进程的内核函数调度策略依据什么原则挑选进程和线程?调度时机什么时候进行调度?调度时机

2017-12-06 20:45:11 432

原创 【AR技术点】(一)如何通过捕捉特征图像来建立起三维空间

在AR的技术中,最主要的技术点主要有三个:1. 捕获特征图像2. 跟踪特征图像的移动3. 计算捕获的特征图像相对于原特征图像的偏移向量为什么说这三个是最重要的呢 原因就是AR技术最关键的就是能够高效的捕捉你给予的特征图像,并在此之上将二维的视频图像转换成三维的空间,然后在此之上展示你想要展示的3D模型。捕获特征图像说到特征匹配,就得先说一下什么是特征点,现在几乎所有的特征图像捕捉算法都是基于

2017-11-22 20:58:24 7302 1

原创 探究C++中的成员函数指针和虚函数表

say something相信对C++对象有一定了解的话,应该都会知道,在C++中对象的实现中,成员函数和成员变量是分离的 所以我们所谈到的非静态成员函数其实只是一个普通的函数(不过被编译器所隐藏,必须绑定到特定的对象上才能执行) 静态成员函数实际上就真的就是一个普通的函数,独立于整个对象之外,不过被编译器加上了一堆修饰避免重命名,和对象无关 普通非静态成员函数的实现是通过传入this指针的方

2017-10-17 13:51:57 702

原创 STL中的空间配置器allocator的实现原理及源码剖析

allocator是STL为自己的模版容器所设计的标准空间配置器。处于std命名空间下 今天我要讲的的allocator的源码在我的github上,地址为 mySTL 是我模仿标准STL写出的代码,并添加了注释。allocator简介allocator为一个模版类,我们使用的时候一般都会将其绑定到一个具体的类型上。如下:allocator<int> alc;allocator大致需要实现如下功能:

2017-09-27 11:21:53 1121

原创 STL中的deque及源码实现 std::deque

本博客中涉及到的所有代码均在我的github上存放,地址:mySTL如果有兴趣的话可以去下载查看,注释比较详尽。说点什么相信大家如果对C++有一定的了解的话,都会知道C++中有STL这个超大的模版库,这个模版库提供了非常多的模版容器和模版算法,如常用的vector、list、stack、queue、map、set等等容器,sort、find_if、find、swap等模版函数 这个库由于创建时间过

2017-09-26 21:16:47 3972

原创 对C++中的this指针的分析

一个示例首先让我们观察如下代码:namespace ClassTest { class A { private: int m_int1; int m_int; static int st_int; public: void test1() { cout << "test1" << endl; }

2017-09-25 18:01:48 386

原创 【C++】不能将“this”指针从“const vector”转换为“vector & rhs"

最近在写STL,在对stack的swap函数进行测试的时候,出现了这个问题,由于是第一次见,我独自想了很久也有点迷糊,搜索调试弄了半天终于解决了,以下是出问题的代码: template<class T, class Alloc> bool vector<T, Alloc>::operator ==(const vector& rhs)const { if (size()

2017-09-06 17:26:36 1230

原创 【C++】STL的重写

最近在写一个注释比较靠谱的STL项目,由本人独立编写,参考书籍为《Effective C++》、《C++ Primer》、《STL源码剖析》等 准备完成的内容为: - 大部分的容器 - 大部分的泛型算法 - 空间配置器 - 适配器 - 型别萃取器 - 迭代器现在已经实现了如下的东西:型别萃取、vector、Alloc空间配置器、迭代器型别萃取、一些泛型算法(后期才会着重编写

2017-08-19 22:18:15 551

原创 【C++】MFC中的CString和std::string,以及两者之间的相互转换(基于VS201X版本)

最近学了两天MFC,发现还比较有意思,准备过一段时间买一本《深入浅出MFC》,去好好学一下图形界面的框架以及其内部对系统调用的使用。 在使用MFC的时候,虽然界面和其表面逻辑框架都是使用MFC的,但其实大部分的内部逻辑我还是使用C++原生库去写的,比如今天花了两个小时写了两个MFC小程序——输入型多项式计算器(中缀转后缀,支持加减乘除括号的混合运算)、一个简单的汉英词典软件(解决一下自己平常打代码

2017-08-09 15:11:25 3787 1

原创 【C++】STL中map的详细使用说明

说明std::map是一个有序关联容器,包含具有唯一键的键值对key-value。键使用比较函数Compare比较来进行排序。 搜索,删除和插入操作具有对数复杂性。****map通常实现为红黑树。 定义于头文件 <map> 特别注意,map中同一个键值只能存在一个实体 map的特点是增加和删除节点对迭代器的影响很小,除了那个被操作的节点,对其他的节点都没有什么影响(只是内部的一些指针指向的

2017-08-01 15:12:19 455

原创 【C++】动态内存管理(五)使用STL容器进行大量的动态内存管理

相信我们平时使用C++的时候都会用到STL里面的很多容器,可以发现,对于这些容器里面的数据,当容器的生命周期到达结束的时候,里面的数据就会被很好地释放掉。 但是对于处于堆上和堆栈的不同数据,使用的方法也有所不同。 我们以以下的对象作为被操作者: class Simple { public: string name; private: s

2017-07-30 14:39:39 855 1

原创 【C++】动态内存管理(四)智能指针(std)

智能指针总结 对于编译器来说,智能指针实际上是一个栈对象,并非指针类型,在栈对象生命期即将结束时,智能指针通过析构函数释放有它管理的堆内存。所有智能指针都重载了“operator->”操作符,直接返回对象的引用,用以操作对象。访问智能指针原来的方法则使用“.”操作符。 访问智能指针包含的裸指针则可以用 get() 函数。由于智能指针是一个对象,所以if (my_smart_object)永

2017-07-29 15:08:24 710

原创 【C++】动态内存管理(三)不同的资源管理对象的实现

这里我就直接贴代码然后进行说明了。拷贝型资源管理对象对于普适性的资源,比如string、vector、array等资源,我们通常采用拷贝的方式进行资源的赋值操作 下面是这种资源管理对象的基本构造: template<typename T> class Data { private: T* pointer; public: Dat

2017-07-28 16:41:12 277

原创 【C++】动态内存管理(二)以对象管理资源

为什么要用对象去管理资源? 考虑如下情况。 我们声明一个对象A:class A {private: int value;public: A(int v):value(v) {}; A() { cout << "creat A" << endl; } ~A() { cout << "delete A" << e

2017-07-28 16:02:23 309

原创 【C++】new和delete面对简单类型时可以不成对使用的原因

内置类型和简单类型为何可以不用配对?当使用简单类型(没有默认析构) 比如如下代码:void test() { int* lis = new int[100]; delete lis;}或者只有简单数据的结构体:struct node { int a; int b; int *c;};void test() { node* lis = ne

2017-07-27 21:35:05 805

原创 【C++】动态内存管理(一)成对使用new和delete时要采取相同形式

前面我已经非常详细地写了关于new和delete的底层实现原理,这里就讲一下比较轻松的,如何合理地去使用new和delete 和为什么要如此。 如果看完之后还有兴趣继续探究,可以去看我前面的博客——【C++】 深入探究 new 和 delete我们都知道,用new操作符分配单个对象的内存和分配数组对象的方式是不同的,同样,delete操作符针对不同new方式分配的对象也要采用不同的delete方式

2017-07-27 21:19:43 389

原创 【C++】 深入探究 new 和 delete

在C++中,我们应该经常会用到new、delete,它们是C++的一个关键字,同时也是一个操作符,下面我将我对这两者的了解和学习做一个总结和探讨。new和delete的全过程首先我们定义一个对象A: struct A { size_t h; };当我们使用关键字new在堆上动态创建一个对象A时,比如 A* p = new A(),它实际上做了三件事:向堆上申请一块内存

2017-07-27 14:29:38 11307

原创 C++ 模版类 详细讲解

模版类定义直接先说一下模版类的定义:template <模版类型1,模版类型2...>class 类名{ 内容}一个小示例如下: template<class T> class A { private: T data; public: A(T value) :data(value) {}; T GetD

2017-07-25 14:55:46 469

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