guojh's Blog.

guojh's Blog.

it is our choices that show what we truly are

pybind11
pybind11 做了一些调研后,发现使用pybind11几乎是现在最方便的Python调用C++方法,本文对基本的操作方法做了一些记录。本文主要参考:pybind11官方文档 pybind11几乎是傻瓜式的操作。举个简单例子,现在需要实现一个Python接口调用自己已经写好的C++库,来打印输出图像的大小。 先看我们自己的C++库文件imagesize.h和imagesize.cpp: 123456#include <iostream>#include <string>#include <opencv2/core/core.hpp>#includ...
From P to K[R|t]
From P to K[R|t] 写在最前,本文参考链接: [1] https://math.stackexchange.com/questions/1640695/rq-decomposition [2] https://leohart.wordpress.com/2010/07/23/rq-decomposition-from-qr-decomposition/ [3] http://ksimek.github.io/2012/08/14/decompose/ [4] MVG p163 在从投影矩阵P中分解得到K[R|t]时,首先会进行RQ分解得到K和R,然后很容易就可由inv(K...
C++17相关
C++17相关 C++17相关内容个人总结,持续更新 一些参考: C++17 cppreference.com optional 模板类,用于表示一个对象可能存在也可能不存在。 优点: 显然也可以用一个额外的bool值来表示对象是否存在,但optional可读性高 显然也可以用一个pointer表示对象,如果为空指针表示不存在,否则表示对象存在。但这需要动态申请内存,效率上比在栈上分配内存要低很多。虽然定义了operator*() and operator->()操作符,但optional使用栈来管理对象,效率更高。 123456789101112131415161...
自定义Profile工具
自定义Profile工具 许多IDE都有Profile功能,那么如何自定义一个Profile工具,并进行可视化呢? 本文为个人总结,主要参考: How to measure performance visually Chrome Tracing as Profiler Frontend Timing your code 自定义Profile类 Profile主要包含两个功能:计时和格式化输出结果。计时主要用到chrono类,而格式化输出按照Chrome Tracing Format格式输出即可。直接看代码,代码部分不难理解,注意多线程部分即可: 12345678910111213...
数据结构算法面试题
数据结构算法高频题 在面试中,由于时间的限制,一般不会出太难的题,这和笔试是不同的。因此必须有针对性地学习和总结,比如分专题学习总结。把常见基础题掌握好,再去追求一些很trick的题。一题多解时,还要注意分析算法复杂度。另外,STL容器、算法等API要多熟悉。 数组 多总结 42. Trapping Rain Water 对于每个柱子,找到其左右两边最高的柱子,该柱子能容纳的面积就是min(max_left-max_right)-height Two-pass:1) 从左往右算max_left,从右往左算max_right;2) 从左往右算面积累加 时间O(n),空间O(n)...
操作系统面试题
操作系统高频题 题目和答案均来自网络,本人只整理和修改了部分内容,如有侵权告知后必删。答案不一定准确,仅供参考。 OS基础 OS四个特征? 参考:OS特征 用户态到内核态的转化原理? 中断。当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。 系统调用。这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用...
C++面试题
C/C++高频题 题目和答案均来自网络,本人只整理和修改了部分内容,如有侵权告知后必删。答案不一定准确,仅供参考。 目录 [TOC] C/C++基础 引用和指针的区别? 引用底层是通过指针实现的。 初始化不同: 引用在定义的时候必须进行初始化,并且不能够改变。 指针在定义的时候不一定要初始化,并且指向的空间可变。(注:引用总是表达代表一个对象,因此不能为NULL,而指针可以为空)。因此使用指针前最好检查,防止野指针。 访问逻辑不同: 引用访问一个变量是直接访问 指针访问一个变量是间接访问 运算结果不同: 自增运算结果不同(指针是指向下一个空间,引用时引用的变量值加1) s...
清华大学操作系统笔记
清华大学操作系统笔记 除了课程笔记外,还加入了一些补充内容 前言 B站 陈渝老师 清华大学 https://www.bilibili.com/video/av6538245 相关资料: 配套上机实验地址 课程项目GitHub地址 实验课地址 操作系统结构、中断/异常与系统调用、OS启动、内存管理、进程/线程管理、调度、同步扶持、进程间通信、死锁处理、文件系统、I/O系统 chap1 OS概述 功能 OS提供管理(资源角度)、控制(用户角度)和服务(应用程序角度)。 位置 硬件之上,应用软件之下。OS对外的接口是shell(GUI,CLI),内核是kernel。 组成 CPU调度、物理...
设计模式笔记(下)
设计模式笔记(下) 个人学习设计模式笔记。主要参考《Head First设计模式》和Wikipedia,youtube上有个系列视频也非常值得一看 chap 7 随遇而安—适配器模式与外观模式 适配器模式 定义 适配器模式Adapter Pattern 将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 分析 目标Target:接口类; 适配器Adapter:实现目标接口; 被适配者Adaptee:适配器的调用委托给被适配者。 这种组合的方式属于对象适配器,还有一种利用多重继承的方式,叫类适配器。即Adapter同时继承Target和Adapte...
设计模式笔记(上)
设计模式笔记(上) 代码设计很复杂,但正是因为有了设计模式,才能更简单地理解、描述和解决一个复杂的问题。个人学习设计模式笔记。主要参考《Head First设计模式》和Wikipedia,youtube上有个系列视频也非常值得一看 chap 1 设计模式入门—策略模式 定义 策略模式 Strategy Pattern 定义了算法簇,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 分析 环境(Context):持有一个Strategy的引用 抽象策略(Strategy):这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口...
avatar
GJGJH
FRIENDS
friendA friendB