自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 python package distribution

一个python distribution 是一个包含了package的 带有版本号的压缩文件。用户可以从网络上下载,在本地通过安装和。

2023-02-02 16:11:12 855

原创 python3 -m 原理分析和实现

当一个名为spam模块被导入时,解释器首先搜索具有该名称的内置模块。这些模块的名字被列在中。如果没有找到,他就在变量给出的目录列表中搜索一个名为的文件。 从以下位置初始化:输入脚本的目录PYTHONPATH依赖于安装的默认值(包括目录)dir()内置函数用于查找模块定义的名称,返回结果是经过排序的字符串列表。package包是一种用 点式模块名 构造python模块命名空间的方法。例如,模块名A.B 表示包A中名为B的子模块。Python只把含有文件

2023-02-01 15:26:25 2022

原创 在linux上编译opencv 4.5.3

编译libjpeg.so V90wget http://www.ijg.org/files/jpegsrc.v9d.tar.gztar -zxvf jpegsrc.v9d.tar.gzcd jpeg-9d./configure --prefix=/usr/local/jpegmake -j20sudo make install编译libjpeg-turtogit clone https://github.com/libjpeg-turbo/libjpeg-turbo.gitcd ligj

2021-11-01 20:56:41 1746

原创 在setup.py 中使用cmake

本文介绍如何在setup.py 中使用cmake.适用场景: 采用c/c++ 为python添加扩展模版项目组织结构top-level CMakeLists.txt 与 setup.py 放在同级目录下CMakeLists.txtsetup.py...setup.py 文件内容import osimport reimport sysimport platformimport subprocessimport pathlibfrom setuptools import

2021-11-01 20:48:09 1382

原创 vim 的配置

vim的常用配置在用户目录下,例如root用户在/root下, 创建 .vimrc 文件cat .vimrc# syntax highlightsyntax on # tab 2 spaceset expandtap set tabstop=4

2021-05-07 11:11:47 115

原创 编译opencv3.4.0

使用特定版本的libjpeg时,则需要先编译libjpegwget http://www.ijg.org/files/jpegsrc.v9d.tar.gztar -zxvf jpegsrc.v9d.tar.gzcd jpeg-9d./configure --prefix=/usr/local/jpegmake -j20sudo make install编译opencv3.4.0git clone https://github.com/opencv/opencv.gitcd openc

2021-04-07 18:05:55 244

原创 Opencv Mat 6种输出格式

在opencv3.4.0 环境下#include <iostream>#include <opencv2/opencv.hpp>//opencv的头文件 using namespace std;using namespace cv; int main(){ Mat array(10, 3, CV_8UC3); randu(array, Scalar::all(0), Scalar::all(255)); cout << "【默认风格】" &l

2021-04-07 18:03:03 853

原创 caffe install

#1. installcaffe install#2. dependencyprotobuf./autogen.sh./configure make -j32sudo make installprotoc --version libprotoc 3.9.0boost./bootstrap.sh./b2 installgflagsmkdir buildcmake -DBUILD_SHARED_LIBS=ON ..make -j32sudo make installg

2020-10-10 11:46:47 142

原创 leetcode 1588. 所有奇数长度子数组的和

1588. 所有奇数长度子数组的和给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。子数组 定义为原数组中的一个连续子序列。请你返回 arr 中 所有奇数长度子数组的和 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sum-of-all-odd-length-subarrays著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。分析如果我们知道以 arr[i]arr[i]arr[i] 结尾的所有奇数

2020-09-21 12:00:43 188

原创 leetcode 581 最短无序连续子数组

[](leetcode 581 最短无序连续子数组://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray/)给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序

2020-09-16 14:59:40 169

原创 leetcode 289 生命游戏

生命游戏根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;如果活细胞周围八个位置有超过

2020-09-11 19:42:33 99

原创 递归模板

递归模板返回值 helper(参数…){if(退出条件或者基本条件){}//递归前的操作// 递归主体helper();// 递归后出栈操作,一般是由子问题来合成为当前问题的解}链表存有二进制数字0/1,转化为十进制数字如果从低位–> 高位的方式存void Hex2Dec(ListNode*head,int& res){ if(!head){ res = 0; return ; } Hex2Dec(head

2020-09-01 20:31:42 299

原创 链表操作相关考点及技巧

判断是否有环,如果有环,找到环入口点使用 快慢指针找到链表的中间节点中间偏右节点 使用快慢指针,正常下 slow指向的为中间偏右节点中间偏左节点 额外添加一个指针prev,指向slow的父节点,则prev指向中间偏左节点找到链表的倒数第N个节点也是使用快慢指针,fast先走 N-1步, 之后一起走合并排序链表链表数量为2时,正常合并,即merge(ListNodel,ListNoder)当链表数量为K时,采用最小优先队列 priority_queue<L..

2020-09-01 16:04:50 129

原创 leetcode 25 K个一组翻转链表

K个一组翻转链表给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内

2020-09-01 13:35:31 107

原创 剑指OFFER11 旋转数组的最小值

旋转数组的最小值把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-sh

2020-08-24 13:05:50 111

原创 leetcode 779 第K个语法符号

第K个语法符号在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始)输入: N = 1, K = 1输出: 0输入: N = 2, K = 1输出: 0输入: N = 2, K = 2输出: 1输入: N = 4, K = 5输出: 1解释:第一行: 0第二行: 01第三行: 0110第四行: 01101001来源:力扣(LeetCode)链接:https://leetcode

2020-08-16 04:07:11 154

原创 n!尾0的个数

求解n的阶乘 尾部0的个数尾部0都是由 2∗52*52∗5贡献的,很明显因子为2的数目又大于因子为5的数目,所以因子5的数目就是尾部0的个数int trailingzeros(int n) { int m = 0; while(n){ n /= 5; m += n; } return m;}...

2020-08-11 19:36:11 108

原创 位运算的一些技巧

清除最右边的‘1’ n&(n−1)n\&(n-1)n&(n−1)给定一个整数,计算其二进制表示中‘1’的个数int popCount(uint64 n){ int c = 0; while(n){ n &= (n-1); c++; }}n&(n−1)n\&(n-1)n&(n−1) 操作能清除n的最右边的’1’判断一个数是否是2的幂int isPower(uint64 n){ return n&(n-1) ==

2020-08-11 17:37:17 176

原创 最大公约数,欧几里德算法

最大共约数int gcd(int n,int m){ if(m == 0) return n; int a = n % m; return gcd(m,a);}如果n < m ,那么 a = n%m = n, gcd(m,a) 就是 gcd(m,n)如果 n == m,那么 a = 0, 结果就是 m否则直至找到 一个数能被另一个整除时,该数就是最大共约数...

2020-08-10 16:35:14 85

原创 各种排序算法汇总

选择排序每次都选择一个最值,放入以排序空间内,经过n次,就排序结束每次选择最值的时候,时间复杂度 O(n)O(n)O(n),所以选择排序的时间复杂度 是O(n2)O(n^2)O(n2)优点是: 交换次数最少,是稳定排序最好/最坏时间复杂度都是O(n2)O(n^2)O(n2)void select_sort(vector<int>& nums){ for(int i = 0; i < nums.size() - 1; ++i){ int min_index = i

2020-08-07 18:13:41 112

原创 LRU缓存机制

LRU缓存机制题目leetcode 146 题运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而

2020-07-29 16:40:47 105

翻译 Contours in OpenCV

翻译自 Contour in OpenCVContoursContours 可以简单的理解为一条连通连续点的曲线(沿着边缘),有同样的颜色或者强度。在进行形状分析,目标检测和识别时很有用处。为了更好了精度,使用二值化的图像。在寻找轮廓之前,先对图像应用二值化阈值或者canny 边缘检测等技术。在OpenCV中,寻找轮廓是:在黑色背景上寻找白色物体,所以一定记住,被检测的对象应该是白色的,背景是黑色的。采用cv::findContours()需找图像中的轮廓。Drawing Contours

2020-07-23 19:45:00 211

翻译 ld - The GNU linker

本文是翻译自man ld名称ld - The GNU linker语法ld [options] bobjfile …描述ld 连结许多对象和归档文件(.a),重定位他们的数据,绑定符号引用。通常,编译一个程序的最后一步是运行ldld接受连接器命令行语言文本,提供对链接程序的显式和整体控制。该版本ld使用通用目的的BFD库去操作对象文件。该库允许ld程序以多种不同的格式(例如,COFF或a.out)去读,连结,和写对象文件 .不同的格式可能会被链接到一起去产生任何可用类型的对象文件。得益于它

2020-07-21 19:41:47 603

翻译 overlinking问题

什么是overlinking问题例如:当emacs 用支持libpng库(libpng会使用-lz)的选项编译时,我们会链接一个静态的PNG库。但是做动态链接时,会出现问题:如果我们更新了新版本的zlib,emacs必须重新编译,即使emacs不直接使用zlib,只是libpng依赖zlib。怎样检测ldd -u -r% ldd -u -r /usr/bin/emacsUnused direct dependencies: /usr/lib/libXext.so.

2020-07-21 17:39:59 95

翻译 用示例来帮助我们更好的理解linux的二次依赖问题

linux libraries本文只是The Linux Documentation Project library howto的简要总结。linux linker 和 loader的man pages 也是很好的信息源。在linux中,有三种类型的库文件:static,shared, dynamically loaded(DL)。动态加载库有一些特定的应用场景,例如插件等。本文将专注与static和 shared 库。Static librariesstatic library 是一些目标文件

2020-07-21 17:01:25 753

翻译 [Make] Phony Target

一个phony target 并不是一个文件的名称。使用phony target的2个原因:- 避免与同名文件冲突- 提高性能如果你写了一个没有创建实际目标文件的规则,一旦该目标文件被标记调用,那么它所对应的命令会被执行。clean: rm *.o temp因为rm 命令不会创建名为clean的文件,如果本地也没有一个同名的clean文件,那么你每次调用make clean 时,都会调用rm命令。在上述例子中,如果本地有一个clean文件被创建,那么clean规则不会正常执行。因为它没有必要

2020-07-20 12:00:29 461

原创 librdkafka交叉编译

依赖openssl,需要先交叉编译openssl配置librdkafkaexport CXXFLAGS=-I/data/work/openssl_instasll/includeexport LDFLAGS=-L/data/work/openssl_instasll/lib./configure --prefix=/data/work/rdkafka_install --arch=aarch64 --cc=aarch64-himix100-linux-gcc --cxx=aarch64-himi.

2020-07-17 11:44:08 1287

原创 openssl 交叉编译

交叉编译openssl需要交叉编译aarch64版本的openssl,需要在第一个参数位置指定目标架构,–cross-compile-prefix指定了命令前缀,当然这些命令的路径需要在PATH中设置。 ./Configure linux-aarch64 --cross-compile-prefix=aarch64-himix100-linux- --prefix=/data/sqhao/work/openssl_instasll && make && make inst

2020-07-16 19:08:52 11659 3

原创 linux 各目录的作用

linux 的文件系统层次,该文档标准化了各目录的作用。留做参考

2020-07-09 15:33:57 94

翻译 Option -Bsymbolic 会导致严重副作用

本文是对Option -Bsymbolic can cause dangerous side effects的翻译。-Bsymbolic 可能会解决很多问题。不幸地是,-Bsymbolic也是一个会导致一些副作用的选项。正常情况下,在linux平台上(不使用-Bsymbolic),加载的目标文件中第一次出现的符号将在程序中一直被使用,不论是定义在静态可执行部分,还是在动态目标文件中。这是通过符号抢占(symbol preemption)来实现的。动态加载器构建符号表,所有的动态符号根据该符号表被决议。所

2020-07-08 19:21:36 3477 3

原创 linux DNS

使用gethostbyname()执行DNS过程#include <netdb.h>#include <sys/socket.h>#include <arpa/inet.h>#include <iostream>int main(int argc,char* argv[]){ struct hostent* h; char buf...

2020-05-07 11:47:27 151

原创 linux ext2文件系统

Ext4文件系统也是由相关数据结构组成,按照数据结构存放位置可以分为Ext4磁盘数据结构和Ext4内存数据结构.Ext 磁盘数据结构标准块弹性块从ext4开始,有一个新功能称为弹性块组(flex_bg)。在flex_bg中,几个块组绑在一起,成为一个逻辑块组。flex_bg的第一个块组中的位图空间和inode表空间被扩展为包括flex_bg中所有其他块组的位图和inode表。例如,如...

2020-04-23 17:59:58 263

原创 linux inode

分类inode分为内存中的inode和文件系统中的inode,为了避免混淆,我们称前者为VFS inode, 而后者以EXT2为代表,我们称为Ext2 inode。VFS inodeVFS inode包含文件访问权限、属主、组、大小、生成时间、访问时间、最后修改时间等信息。它是linux管理文件系统的最基本单位,也是文件系统连接任何子目录、文件的桥梁。inode结构中的静态信息取自物理设备上...

2020-04-22 20:56:36 396

原创 linux stat分析

api#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int stat(const char *pathname, struct stat *statbuf);int fstat(int fd, struct stat *statbuf);int lstat(const c...

2020-04-22 20:16:56 246

原创 linux profile和bashrc文件

/etc/profile/etc/profile 文件是系统文件,对系统下的所有用户起作用。在用户login时,被系统自动执行,为用户设置工作环境。之后会调用 ~/.profile,进行用户私有环境设置如果你有对/etc/profile有修改的话必须得重启你的修改才会生效,此修改对每个用户都生效/etc/bashrc为每一个运行bash shell的用户执行此文件.当bash s...

2020-04-22 14:10:31 143

原创 linux shell语法

overallshell 脚本也是动态解释型语言,shell脚本第一行指定了脚本解释器#! /bin/sh #! /bin/bash...脚本执行方式./xxx.sh 向二进制可执行程序一样/bin/sh xxx.sh 作为脚本解释器的参数执行变量赋值显示赋值 : var=123 注意=左右不能有空格语句赋值: for file in ls /lib...

2020-04-22 13:21:55 154

原创 ubuntu下打开pdf文件

evinceEvince是一种轻量级的文档阅读器,在Gnome桌面环境中是默认安装的。它同样支持包括PDF、Postscript、tiff、XPS、djvu、dvi在内的多种文档格式。evince progit_v2.1.31.pdf...

2020-04-21 12:56:31 819

原创 ubuntu设置时区

apt-get install -y tzdata sudo ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime sudo echo Asia/Shanghai > /etc/timezone

2020-04-17 12:19:36 139

原创 Ubuntu apt update 签名无效问题

现象:Get:1 http://mirrors.aliyun.com/ubuntu bionic InRelease [242 kB]Get:2 http://mirrors.aliyun.com/ubuntu bionic-backports InRelease [74.6 kB]Get:3 http://mirrors.aliyun.com/ubuntu bionic-proposed ...

2020-04-17 12:13:25 8761 7

原创 linux-execve

EXECVE#include <unistd.h>int execve(const char* filename,char* const argv[],char* const envp[]);描述execve() 执行filename指定的文件,filename必须是二进制文件或者脚本.脚本的第一行需要按照以下的格式:#! interpreter [optional-arg...

2020-04-09 00:38:42 193

空空如也

空空如也

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

TA关注的人

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