自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(264)
  • 资源 (2)
  • 收藏
  • 关注

原创 C++ namespace 使用梳理

发现 namespace 这个小细节在工作项目中处理的有一点点小混乱,于是稍微梳理了一下关于 C++ namespace 使用相关的使用内容,为日后项目的重构做准备,虽然是很小的点,但是也是值得注意的,毕竟代码的质量体现在每一个细节中。否则在项目代码中无组织,更容易造成理解上的困难。避免命名冲突:通过将代码组织在不同的namespace中,可以避免不同部分的代码使用相同的名称导致的冲突。提高代码的可读性和可维护性:使用namespace可以更清晰地组织代码,帮助开发人员更容易地理解和维护代码。

2024-03-30 19:49:11 977

原创 2024 年第一篇博客 —— 一年多断更的碎碎念

有幸在工作中可以不断的实操,在没写博客的这一年多里,也在不停地阅读,思考,除了专业书籍,注意力也开始转向了一些专业以外的书籍,我个人比较喜欢社会学,心理学和职场发现相关的内容,同时也在不停吸收,思考。很多东西对外来说都是新的知识。2023年 8 月开始想要发展新的生活兴趣,买了人生中第一台相机,尼康Z30,有了相机之后每周没事就会出去扫街,至今 7 个月快门数已经 17000+ 了, 不停地练习,摄影技术也有了一点点小小的进步,收获了私人朋友圈的一些小认可,初次之外,对摄影也带来了很多生活中的感悟。

2024-03-20 09:03:06 296

原创 [CMake] CMake 进阶

代码生成是指使用一些通用的描述文件,可以自动生成源代码,这样可以更高效。

2023-03-19 15:59:54 395 1

原创 [PyTorch 源码阅读] —— TensorIterator

介绍 TensorIterator

2023-03-04 17:55:47 1029 1

原创 [CMake] CMake 基础命令

本文主要是对 https://github.com/ttroy50/cmake-examples 项目进行学习,并记录。本章主要包含了一些常用的 CMake 基本命令,以及存在子项目时的相关内容。首先需要注意的一点是,开头需要指定使用的 Cmake 版本,以及给 Project 一个名字:然后可以根据需求设置相关的编译语言版本:这里就引入 cmake 中 变量(variable)的概念。 其基本都是全大写的名字,防止与用户输入的其他命令混淆。只是这里有一部分 cmake 自己预留的变量名了。例如:C

2022-12-03 17:56:18 614

原创 Mac 中 vim 插件配置 —— 以YouCompleteMe 为例

vim 插件配置,以及 YouCompleteMe unavailable: requires Vim compiled with Python (3.6.0+) support. 问题解决

2022-11-26 18:59:00 1174

原创 如何写出好的变量名

本文内容主要是摘抄自《代码大全》中与变量名相关章节的内容,阐述当需要一个好的变量名需要注意哪些点。

2022-10-24 07:46:08 362

原创 内存模型与C++ 内存序

介绍cpu 内存模型与 C++ 6 种内存序

2022-09-19 09:35:54 5791 6

原创 JIT 和 AOT

JIT 和 AOT本文内容主要来自于偶然看到的一个 b 站视频:https://www.bilibili.com/video/BV1134y1h7ED?spm_id_from=333.999.0.0之前就不断的在各种不同的场合看到 JIT 编译,AOT 编译,除了基本概念一直对这二者都是比较模糊的概念。通过视频中的介绍有了更多的理解,简而言之:JIT 是动态编译,会有更多地运行时信息,可以做更激进的编译优化,更耗内存AOT 是静态编译,更多偏控制型指令的优化,为了保证正确性,编译优化相对比较保守。

2022-05-23 22:12:55 789 2

原创 [读书笔记]《Hands on Design Patterns with C++》—— CRTP

多态是指使用父类可以访问基类的内容,并且基类对子类的内容毫不知情,因为父类已经写了或者被编译了,但是基类可能还没有没编写出来。但是有一个 idiom, Curiously Recurring Template Pattern (CRTP) 则是完全颠覆了这一情况。要了解学习 CRTP,我们首先需要讨论的是, virtual function 有什么问题? 虚函数最大的是性能负担,因为需要一个额外的虚函数指针,包括调用,间接跳转。template <typename D> class B {

2022-04-18 09:23:55 647

原创 [读书笔记]《Hands on Design Patterns with C++》——RAII,SFINAE

第 5 章 RAIIRAII(Resource Acquisition is Initialization)构造函数获取资源,析构函数释放资源。 注意拷贝和释放,有的需要禁止拷贝移动等。What is considered a resource in a C++ program?每一个程序运行都需要一定的资源,最常使用的资源就是内存,但资源这个概念是多种多样的。只要是资源就会设计到一个问题,如何确保资源管理是正确的。首先人为的管理每一个资源是很容易出错的。例如申请一个指针,却忘记释放。 并且,当我们

2022-04-16 22:30:25 532

原创 [读书笔记]《Hands on Design Patterns with C++》—— 内存所有权,swap

第 3 章 内存所有权(memory ownership)内存管理不当也是 C++ 里面比较常见的问题。有可能就会引起内存泄漏,访问非法内存,过量内存使用,或者一些其他比较难 debug 的问题。所以现代 C++ 提供了一些 idiom 来让程序设计者代码设计中清晰的表达他们的意图。这样更容易写出正确分配内存,访问,或者注销内存的代码。What is memory ownership?驻留在内存中对象的内存和生命周期的管理。内存也是一种资源,而一般是通过对象来拥有资源,所以也可以称为 对象所有权(ob

2022-04-16 22:27:19 738

原创 [读书笔记]《Hands on Design Patterns with C++》——类,继承,多态,模板

前言《Hands on Design Patterns with C++》首先这本书不是跟之前的书籍一样只是重点在经典的 23 种“设计模式” 上,这些经典的设计模式当然可以使用 C++ 语言来实现,但是 C++ 强大的地方在于其泛型编程能力。而且设计模式一般是在软件设计中比较有挑战性的场景下, 提出的一些解决方案。一个是问题场景,一个是对应提出的解决方案。 随着时间的推移,一些场景中,会有更好地解决方案被提出,同时呢,也会遇到新的挑战。 本书显式介绍了 C++ 的一些特性,并且结合这些特性以及它们可以解

2022-04-16 22:24:17 1968 1

原创 [环境配置] libshm.so: undefined symbol: _ZTIN2at22RefcountedMapAllocatorE

在环境中有时 import torch 会遇到下面的问题:libshm.so: undefined symbol: _ZTIN2at22RefcountedMapAllocatorE这里主要是可能环境变量中的 LD_LIBRARY_PATH 没有包含对应 libshm.so 的路径。解决方法:export LD_LIBRARY_PATH=/path/to/python3.7/site-packages/torch/lib:$LD_LIBRARY_PATH...

2022-03-31 21:24:58 648

原创 [源码阅读] TensorRT - ONNX parser

文章目录ONNX parser相关内容:[源码阅读] TensorRT —— Caffe Parser、PluginONNX parserTensorRT 的 onnx parser 是一个独立的开源项目。 onnx-tensorrt:https://github.com/onnx/onnx-tensorrt这里映射关系还是首先建立起来一个个映射函数,然后通过 op_type 来找到对应的映射函数。typedef ValueOrStatus<std::vector<TensorOrW

2022-03-07 08:58:38 771

原创 [源码阅读] TensorRT —— Caffe Parser、Plugin

文章目录前言Caffe parserPlugin本文主要从代码层面对 TensorRT 的源码进行学习,试图从中梳理出一点实现思路以及实现细节吧。个人水平有限,主要是从这个过程中学习为主,若有理解不对的地方欢迎交流指正。注:本文并不涉及到具体功能性的介绍,例如如何一步步去添加 Plugin , 或者一些具体的接口要如何使用等。前言TensorRT 源码部分主要开源出来了 Parser 部分以及 Plugin ,并且给出了相关的 demo 和一系列的 sample 供使用者可以快速学习。推理引擎其实

2022-03-05 16:31:10 1068

原创 [读书笔记]《Effective Modern C++》—— 移步现代 C++

文章目录前言item7:区别使用 () 和 {} 创建对象item8:优先考虑使用 nullptr 而不是 0 或者 NULLitem9:优先考虑别名声明而非 typedefsitem10:优先考虑限域枚举而非限域枚举item11:优先考虑使用 deleted 函数而非使用未定义的私有声明item12:使用 override 声明重载函数item13:优先考虑使用 const_iterator 而非 iteratoritem14:如果函数不抛出异常请使用 noexceptitem15:尽可能的使用 cons

2022-02-10 08:42:04 614

原创 [读书笔记]《Effective Modern C++》—— 智能指针

文章目录前言std::unique_ptrstd::shared_ptrstd::weak_ptr前言大部分同学可能都可以熟练知道,智能指针是管理内存的一种有效手段,shared_ptr 是通过引用计数来管理内存,当引用计数为 0 的时候内存就会自动释放,weak_ptr 则是为了解决 shared_ptr 可能会出现的循环引用的问题出现,unique_ptr 则是有独占的概念的智能指针。那概念上可能就是上面的概括,继续追问一句,那什么时候应该使用 unique_ptr,什么时候应该使用 shared

2022-02-08 23:57:57 683

原创 [读书笔记]《Effective Modern C++》—— 类型推导、auto、decltype

文章目录前言条款一: 理解模板型别推导数组实参函数实参条款二:理解 auto 的类型推导使用 auto 的好处显式类型初始化条款三:理解 decltype返回值类型后置总结前言本文内容主要摘录自 《Effective Modern C++》,本文主要是将书中开头类型推导部分的内容放在一块进行说明,在再次品读这部分内容之前,对模板的认识就仅仅停留在模板是长这个样子的,使用的时候可以特化或者偏特化,对更深入的内容不曾有意识涉及。通过下面的内容对 C++ 的类型推导,以及 auto 和 decltype 等关

2022-02-07 21:48:35 566

原创 [读书笔记]《深度探索C++对象模型》

文章目录前言第一章 关于对象第二章 构造函数语意学构造函数拷贝构造函数初始化列表第三章 Data 语意学第四章 Function 语意学非静态成员函数静态成员函数虚成员函数第五章 构造、析构、拷贝语意学RTTI模板函数的实现逻辑前言俗话说得好,好记性不如烂笔头,本文主要是重温了一下经典书籍《深度探索C++对象模型》,然后一些内容摘录,主要记录的是我自己的精简版,建议读者有相关的知识需要还是慢慢去啃一下原书比较好。第一章 关于对象首先介绍了 C++ 类的情况, C++类的内存存储方式是:只包含非静态成

2022-01-09 17:02:29 696

原创 [环境配置] vscode 配置 leetcode 插件

文章目录配置步骤可能会遇到的问题配置步骤Extension 商店搜索: leetcode,选择第一个下载量最高的下载就可以了安装完成后左侧就会多一个 leetcode 的图标栏点击上面的图标,会有 Sign in to LeetCode 字样上图中:红框标记的是选择中文还是 us 版的 leetcode 网站。黄框标记的是登录方式。若依赖没有问题直接选择相应的网站,登录自己的帐号就可以了。可能会遇到的问题这里需要的依赖是:VS Code 1.30.1+Node.

2021-12-28 14:53:31 3055

原创 PNNX 相关内容介绍

文章目录PyTorch 部署方式Lower一些思考PNNX关于 MLIR本文主要是根据 b 站关于 PNNX 的分享视频做的一个内容摘录,如果感兴趣的同学可以移步☞:PNNX介绍本人还没人正式地使用过 ncnn 这个开源项目,但是视频中提到的 nihui 大佬的一些总结还有对于深度学习框架的观点看完以后还是大有受益的。也是引起了对 ncnn 以及最新的 PNNX 的一些兴趣,之后有机会可能会带来一些相关内容的博客。因为 PNNX 是 ncnn 针对 PyTorch 框架所做的一个模拟转换工具,并且是

2021-12-25 00:18:42 2336 3

原创 [论文阅读] 《Compiling ONNX Neural Network Models Using MLIR》

文章目录《Compiling ONNX Neural Network Models Using MLIR》要解决的问题名字由来解决方法《Compiling ONNX Neural Network Models Using MLIR》本文主要是对 ONNX-MLIR 这个框架的论文记录,主要是速记对论文中一些个人认为值得记录和分享的点,所以篇幅不长。要解决的问题当前模型加速技术有一些深度学习框架是通过使用一些高性能依赖库来实现加速的,在前向推理时让算子实现直接调用高性能库中已经实现的函数,这样的加速方

2021-12-23 18:28:41 2292

原创 [设计模式] —— Composite 组合模式

文章目录Composite 组合模式动机定义示例代码结构图总结Composite 组合模式属于数据结构模式,常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大破坏组件的复用,这时,将这些特定的数据结构封装在内部,对外提供统一接口来实现与特定数据结构无关的访问。动机客户代码过多地依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频繁变化,带来代码的维护性、扩展性等弊端。如何将”客户代码与复杂的对象容器结构“解耦?让对象容器自己

2021-12-21 10:10:39 527

原创 [设计模式] —— Adapter 适配器模式

文章目录Adapter 适配器模式动机定义示例代码结构图总结Adapter 适配器模式属于接口隔离模式,在组件构建过程中,某些接口之间直接的依赖经常会带来很多的问题,甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来就互相紧密关联的接口是一种常见的解决方式。动机在软件系统中,由于应用环境变换,常需要将”一些现在的对象“ 放在新的环境中应用,但是新环境要求的接口是这些现有对象所不满足的。如何应对这种”迁移式变化“?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所需求的接口?定义

2021-12-21 09:36:11 255

原创 [设计模式] —— Flyweight 享元模式

文章目录Flyweight 享元模式动机定义示例代码结构图总结Flyweight 享元模式属于对象性能模式,主要考虑面向对象所带来的成本问题。动机软件系统采用纯对象方案的问题在于大量细粒度的对象会很快充斥整个系统,从而带来很高的运行时代价。如何避免大量细粒度对象问题的同时,让外部客户程序依然能够透明地使用面向对象的方式来进行操作?定义运行共享技术有效地支持大量细粒度的对象。示例代码class Font {private: string key; // ...public: F

2021-12-21 08:49:02 260

原创 [设计模式] —— Singleton 单例模式

Singleton 单例模式属于对象性能模式,主要考虑面向对象所带来的成本问题。动机在软件系统中,有一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性以及良好的效率。如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例。这应该是设计者的责任,而不是使用者的责任。定义保证一个类仅有一个实例,并提供一个该实例的全局访问点。示例代码class Singleton {private: Singleton(); Singleton(const Singleton&a

2021-12-21 08:32:27 391

原创 [设计模式] —— Builder 生成器模式

文章目录Builder 生成器模式动机定义示例代码结构图总结Builder 生成器模式动机面临着”一个复杂对象“的创建工作,其通常由各个部分的子对象用一定的算法构成,由于需求变化,这个复杂对象的各个部分经常变化,但它们组合在一起的算法很稳定。定义将一个复杂对象与其表示分离,使得同样的构建过程(稳定)可以构建不同的表示(变化)。示例代码class House {public: // ... House* init() { this->BuildPart1(); for

2021-12-21 08:14:25 474

原创 [设计模式] —— Prototype 原型模式

文章目录Prototype 原型模式动机定义实例代码结构图总结Prototype 原型模式通过对象创建模式,绕开 new,来避免对象创建(new)过程中导致的紧耦合(new 需要依赖具体类),从而支持对象创建的稳定,它是抽象接口后的第一步工作动机某些结构复杂的对象的创建,由于需求变化,这些对象经常面临着剧烈变化,但它们之间却拥有比较稳定一致的接口。如何应对这种变化?如何向”客户程序“(使用这些对象的程序)隔离出这些易变得对象,从而使依赖这些依赖这些易变对象的客户程序不随需求改变而改变。定义使用

2021-12-20 23:41:12 254

原创 [设计模式] —— Abstract Factory 抽象工厂模式

文章目录抽象工厂动机定义示例代码结构图总结抽象工厂通过对象创建模式,绕开 new,来避免对象创建(new)过程中导致的紧耦合(new 需要依赖具体类),从而支持对象创建的稳定,它是抽象接口后的第一步工作动机主要是解决一系列”相互依赖的对象“,工厂方法是解决”单个对象“,即多个 Factory 组成一个总的基类。定义提供一个接口,让该接口创建一系列”相关或者相互依赖的对象“,无需指定它们的具体类。示例代码class EmployeeDAO {public: vector<Employ

2021-12-19 12:33:15 759

原创 [设计模式] —— Factory Method 工厂模式

文章目录工厂模式动机定义示例代码结构图总结工厂模式通过对象创建模式,绕开 new,来避免对象创建(new)过程中导致的紧耦合(new 需要依赖具体类),从而支持对象创建的稳定,它是抽象接口后的第一步工作动机在软件系统中,经常要有创建对象的工作,由于需求变化,需要创建的对象的具体类型经常变化。如何应对这种变化?如何绕开常规的 new,提供一种”封装机制“来避免客户程序和这种”具体对象创建工作“的紧耦合?定义定义一个用于创建对象的接口,让子类决定实例化哪个类。Factory Method 使得一个

2021-12-19 12:30:52 536

原创 [设计模式] —— Bridge 桥模式

文章目录桥模式动机定义示例代码结构图总结桥模式软件组件的设计中,如果责任划分的不清晰,使继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码。动机由于某些固定的固有实现逻辑,使得它们具有两个变化的维度,乃至多个维度的变化。如何应对”多维度的变化“?如何利用面对对象关系技术来使得类型可以轻松沿着两个乃至更多的方向变化而不引入额外的复杂度。定义将抽象部分(业务功能)与实现部分(平台实现)分离,是它们都可以独立变化。示例代码class Messager {public: //

2021-12-19 01:33:04 259

原创 [设计模式] —— Decorator 装饰模式

文章目录装饰者模式动机定义示例代码结构图总结装饰者模式装饰模式属于单一职责模式分类里的。软件组件的设计中,如果责任划分的不清晰,使继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码。动机过度地使用继承来扩展兑现的功能,由于继承为类型引入的静态特质(定死一定只会调用子类),使扩展的当时缺乏灵活性,并且随着子类的增多(功能扩展的增多),各种子类的组合(对扩展功能的组合)会导致更多子类的膨胀。如何动态实现“对象功能的扩展”,同时避免组合过多呢?定义动态(组合)地给一个对象增加一些额

2021-12-18 23:37:37 612

原创 git 修改历史 commit 信息

修改历史 commit 信息1.修改当前提交的 commit 信息git commit --amend2.修改历史 commit 信息在项目工程中输入下面的命令:// 这里的 n 是往前找的次数git rebase -i HEAD~n 然后会有前 n 次的 commit 信息罗列出来,形如:pick <commit1> <commit log1>pick <commit2> <commit log2>…pick <co

2021-12-18 22:33:22 1424

原创 [设计模式] —— Observer 观察者模式

动机我们需要为一些对象建立一种“通知依赖”关系,即一个对象状态发生变化,所有的依赖对象(观察者对象)都将得到通知,如果依赖过于紧密,软件不能很好地抵御变化。面向对象技术可以使这种依赖关系弱化,并形成一种稳定的依赖关系,从而体系结构会松耦合。定义对象间一种一对多(变化)的依赖关系,以便当一个对象的状态(目标对象)发生变化时,所有依赖它的对象都得到通知并自动更新。示例代码class FilterSplitter {private: string m_filePath; int m_fileNum

2021-12-17 10:58:44 526

原创 [设计模式] —— Strategy 策略模式

文章目录动机定义示例代码结构图总结动机某些对象使用的算法可能多种多样,经常改变,将这些算法都编码到对象中,使对象变得异常复杂,而且有时支持不适用的算法也是一种性能负担。想要在运行时根据需要透明地更改对象的算法,就要将算法与对象本身解耦,从而避免上述问题。定义定义一系列算法,把它们一个个封装起来,并且它们可以相互替换(变化),该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)。示例代码enum TaxBase { CN_Tax, USA_Tax};class

2021-12-17 09:37:57 605

原创 [设计模式] ——Template Method 模板模式

组件协作模式通过晚绑定,来实现框架与应用程序之间的松耦合。是框架和引用程序协作常用的。Template Method 模板模式动机有完整的,稳定的整体操作,但子步骤却有很多变化的需求,或者无法和整体结构同时实现(有早晚关系)定义定义一个操作中的算法骨架(稳定点),而将一些步骤延迟(变化点)到子类中,Template method 使子类可以不改变一个算法的结构即可重定义(override 重写)该算法的某些步骤。示例代码这里给出的 demo 的图示如上,假设这里算法的实现主题有 5 个接口,

2021-12-17 00:20:21 319

原创 [设计模式] —— 设计模式的介绍及分类

前言深入理解面向对象向下:深入理解三大面向对象机制:封装:隐藏内部实现继承:复用现有代码多态:改写对象行为向上:深刻把握面向对象机制所带来的抽象意义,理解如何使用这些机制来表达现实世界,掌握什么是"好的面向对象设计"。一般设计模式都是用来解决复杂性问题的,而人们解决复杂性问题主要有两个角度:分解:即分而治之,将大问题分解成多个小问题,将复杂问题分解为多个简单问题。抽象:不能掌握所有复杂的对象,我们就选择忽视它的非本质细节,而去处理泛化和理想化了的对象模型。在前面的博客中也介绍了一

2021-12-16 22:07:12 559

原创 《重构:改善既有代码的设计》 —— 重构方法目录

文章目录前言第一组重构封装搬移特性重新组织数据简化条件逻辑重构 API处理继承关系前言这部分主要就是记录了 《重构—改善既有代码的设计》 书中第6章 —— 第12章的一些重构手法的简单记录,如果想有更全面的了解,还是推荐看原书。下面设计到重构方法的内容,括号中的数字表示对应原书的页数。另外可以参考:《重构》 —— 重构概念及代码坏味道为本书前半部分的一些概念介绍和代码坏味道摘录。第一组重构这部分更多地就是说一些单纯的变量以及函数的简单重构手法,有一些很多就是平时我们已经无意识的在用了,但是一

2021-12-16 02:09:23 714

原创 《重构:改善既有代码的设计》 —— 重构概念及代码坏味道

前言本文主要来自《重构—改善既有代码的设计》的一些读书笔记和摘录,在对应的地方都标注上了书中的对应页数,可以结合原书服用。刚开始看这些所谓的重构方法可能是一头雾水,看完一遍书以后对应一些方法可能同样也是一头雾水。这里简单谈一下读完这本书我个人的收获以及感受吧。首先这可以理解为一本手册,介绍各种重构方法 61 个,我们不可能一次就把所有的方法期望可以记住,并且吸收。但是阅读完本书,对书中作者表达的一些观点很有收获,例如对测试构建的意义,包括在介绍不同重构方法时,字里行间表达数据和函数之间关系的理解,模块化

2021-12-15 08:41:34 633

Python.Machine.Learning.2015-Sebastian Raschka

Sebastian Raschka 2015版机器学习英文版书籍下载,高清版PDF

2017-09-30

在windows和ubuntu上面使用caffe

里面收录了比较全的caffe安装教程,适合初次在Windows或者Ubuntu操作系统下实战caffe的安装,及实战mnist,cifar10数据集的举例博客,是caffe初学者的首选

2017-03-13

空空如也

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

TA关注的人

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