
基本功
文章平均质量分 55
墨一鉴
软件攻城狮
展开
-
0-1 背包问题
假设,有一堆种类各不相同的宝石,还有一个背包,这个背包承重能力有限为 17。怎么让背包中装的宝石最值钱。装到包中用 1 表示,不装到包中用 0 表示,所以解是由 0,1 组成的序列。简称 0-1 背包问题。下表是宝石的重量和价值从问题可以看出,已知数据是每个宝石的重量和价值,背包的承重 WWW。用 wiw_iwi 表示第 iii 个宝石的重量,viv_ivi 表示第 iii 个宝石的价值,装入背包的宝石的最大价值可表示为:max∑i=1nviximax\sum_{i=1}^nv_ix_imax原创 2022-12-04 12:54:18 · 484 阅读 · 0 评论 -
排序算法 堆排序
堆排序就是利用堆这种数据结构,实现对数据的排序堆是一颗完全二叉数,有大根堆和小根堆之分,大根堆满足非叶子节点不小于子节点,所以大根堆根节点是最大值;小根堆满足非叶子节点不大于子节点,所以小根堆根节点是最小值。原创 2022-11-06 16:38:04 · 228 阅读 · 0 评论 -
linux centos ubuntu 网络图标消失的解决办法
在使用 linux 的过程中有时会会出现 网络图标消失的问题,这时系统会没有网络。有些 linux 的网络连接由 NetworkManager 管理, 问题应由它解决。原创 2022-08-08 08:00:00 · 9052 阅读 · 7 评论 -
Linux内核红黑树(Red-Black Tree or rbtree)算法的实现
平衡二叉树(Balanced Binary Tree 或 Height-Balanced Tree)又称 AVL 树。它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。若将二叉树上结点的平衡因子BF(BalanceFactor)定义为该结点的左子树的深度减去它的右子树的深度,则平衡二叉树上所有结点的平衡因子只可能是-1、0和1。(此段定义来自严蔚敏的《数据结构(C语言版)》)红黑树是一种在插入或删除结点时都需要维持平衡的二叉查找树转载 2022-04-26 23:13:14 · 850 阅读 · 0 评论 -
x64 汇编 参数传递
参数传递在不同的系统上是不一样的windows称作 calling conventionrcx,rdx,r8,r9 用来存储整数或指针参数,按照从左到右的顺序xmm0,1,2,3 用来存储浮点参数其余参数会压入栈中。linux称作 ABI当参数在 6 个以内,参数从左到右依次放入寄存器: rdi, rsi, rdx, rcx, r8, r9。当参数大于 6 个, 大于六个的部分的依次从 “右向左” 压入栈中,和32位汇编一样。参数个数大于 6 个的时候H(a, b, c, d, e,原创 2022-01-06 22:43:43 · 3788 阅读 · 0 评论 -
如何强制 gcc 链接未引用的静态库中的 目标文件
gcc -o program main.o \-Wl,--whole-archive -lmylib \-Wl,--no-whole-archive -llib1 -llib2gcc 链接时会优先链接动态库,没有动态库的情况下会选择静态库。默认只选择静态库中被引用到目标文件进行链接。使用 -Wlm,–whole-archive 选项会强制将整个静态库连接到可执行文件中,-Wlm,–no-whole-archive 是结束标志。参考https://stackoverflow.com/questio原创 2022-01-06 08:00:00 · 1361 阅读 · 0 评论 -
正则表达式
https://www.runoob.com/regexp/regexp-tutorial.html原创 2021-11-19 08:00:00 · 322 阅读 · 0 评论 -
postgresql psql 使用
本机登录PostgreSQL:psql -U posgtres -p 5432 -h localhost显示数据库列表:\l连接数据库:\c "database_name"在数据库显示表的列表:\dtor\dt+显示表的列表数据:SELECT * FROM "table_name";参考https://www.cnblogs.com/ryanzheng/p/9575902.htmlhttps://tomcam.github.io/postgres/...原创 2021-11-16 21:43:26 · 524 阅读 · 0 评论 -
开源项目分类
有些开源软件项目欢迎协作,并鼓励外部贡献,例如 Linux 内核。还有一些开源项目几乎与世隔绝,无法容忍外人插手,GIMP、GTK、Gnome 的维护者就属于后一类。除非你是内部集团的一部分,否则你的代码不会得到任何合并。– Hacker News 读者...转载 2021-11-08 21:11:22 · 315 阅读 · 0 评论 -
linux elf 文件理解与分析
https://linux-audit.com/elf-binaries-on-linux-understanding-and-analysis/我们理所当然的使用一些真正的工艺品。其中一部分就是 linux 上常见的工具,像 ps 和 ls。虽然这些命令看起来很简单,当仔细探究就会发现很多东西。这就要讲到 ELF(Executable and Linkable Format)。一个广泛使用的文件格式,只有少部分人真正了解。让我们通过这篇介绍教程去了解它。通过阅读本手册,你讲学到:为什么要用 ELF翻译 2021-11-07 08:15:00 · 3461 阅读 · 0 评论 -
bash 快捷指令
!!!!!原创 2021-11-02 21:47:11 · 200 阅读 · 0 评论 -
RPATH 设置动态库的搜索路径
链接动态库程序如果在链接时使用了动态库,就必须在运行时找到动态库。Linux 的可执行程序在执行的时候默认是先搜索 /lib 和 /usr/lib 这两个目录,然后按照 /etc/ld.so.conf 里面的配置搜索绝对路径。同时,Linux也提供了环境变量LD_LIBRARY_PATH供用户选择使用,用户可以通过设定它来查找除默认路径之外的其他路径,如查找 /work/lib 路径,你可以在 /etc/rc.d/rc.local 或其他系统启动后即可执行到的脚本添加如下语句:LD_LIBRARY_P转载 2021-10-31 20:52:13 · 1811 阅读 · 0 评论 -
Makefile
从源码生成可执行文件可能会用到经典的三步:./configure;make;make install解释一下:./configure # 这个脚本文件用来生成 Makefile,Makefile 中定义了生成可执行文件的规则,依赖等make # 这个命令依赖 Makefile,根据 Makefile 中的规则生成可执行文件make install # 根据 Makefile 中的规则,将可执行文件到指定位置所以 Makefile 是关键的文件,它里面定义了从源码生成可执原创 2021-10-31 17:33:55 · 117 阅读 · 0 评论 -
curl 使用
curl cookbook 很不错的使用手册原创 2021-10-30 16:39:43 · 136 阅读 · 0 评论 -
http post 请求的 content-type
Content-Type: application/jsonjson 字符串, 需要设置成 application/json。json 对象,Content-Type 不能设置为 application/json,需使用默认的类型(application/x-www-form-urlencoded,为什么?这种类型最后还是会把 json 对象类型的参数转为 user=username&pass=password 这种形式后再发送,需要明白一点:这种转换时只能识别 json 对象类型,不能识别转载 2021-10-29 18:32:20 · 2421 阅读 · 0 评论 -
为什么会出现锟斤拷?
一句话解释gbk编码传过去,utf8的服务器不认得,给你返回了容错字符,又被gbk翻译回了汉字实例演示创建一个文本, 以gbk(或者相兼容的GB18030)保存一段字符再用UTF-8编码打开这个文件,随便输入一个字符,使得编辑器以utf-8编码保存当前文件再用gbk打开这个文件在上述过程的第一步中,我们按GBK编码保存了"汉"字,按GBK编码后十六进制为: BA BA, 对应二进制: 10111010 10111010 。在第2步中,我们用UTF-8的规则去读GBK的编码结果, 编辑器读入第一个转载 2021-08-30 21:16:46 · 2434 阅读 · 0 评论 -
互斥锁pthread_mutex_init()函数
互斥锁pthread_mutex_init()函数linux下为了多线程同步,通常用到锁的概念。posix下抽象了一个锁类型的结构:ptread_mutex_t。通过对该结构的操作,来判断资源是否可以访问。顾名思义,加锁(lock)后,别人就无法打开,只有当锁没有关闭(unlock)的时候才能访问资源。即对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。使用互斥锁(互斥)可以使线程按顺序执行。通常,互转载 2021-08-27 21:50:28 · 1191 阅读 · 0 评论 -
Linux 系统调用追踪命令 strace
strace是个功能强大的Linux调试分析诊断工具,可用于跟踪程序执行时进程系统调用(system call)和所接收的信号,尤其是针对源码不可读或源码无法再编译的程序。在Linux系统中,用户进程不能直接访问计算机硬件设备。当进程需要访问硬件设备(如读取磁盘文件或接收网络数据等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可跟踪进程产生的系统调用,包括参数、返回值和执行所消耗的时间。若strace没有任何输出,并不代表此时进程发生阻塞;也可能程序进程正在执行某些不需要与系转载 2021-08-27 21:27:14 · 2039 阅读 · 0 评论 -
-pthread 和 -lpthread 的区别
-pthread 和-lpthread区别就是少了个l, 教材都是在编译的链接的时候要求加下-lpthread 解决链接的问题gcc的官方说明是-pthreadDefine additional macros required for using the POSIX threads library. You should use this option consistently for both compilation and linking. This option is supported转载 2021-08-18 21:16:16 · 1952 阅读 · 0 评论 -
必读基础书单
apueunp原创 2021-08-18 20:53:21 · 155 阅读 · 0 评论 -
linux 包管理命令使用
Debian 系#apt 帮助aptman 8 apt#列出安装的软件apt list --installed#同步软件列表apt update#升级软件apt upgrade#安装软件apt install xxx#查找软件apt search xxx#删除软件apt remove xxxRedHat 系原创 2021-08-15 23:30:26 · 102 阅读 · 0 评论 -
C语言变量及其生命周期
变量类型以及作用域和生命周期变量的作用域变量的作用域就该变量可以被访问的区间,变量的作用域可以分为以下四种:进程作用域(全局):在当前进程的任何一个位置都可以访问 函数作用域:当流程转移到函数后,在其开始和结束的花括号内可访问 块作用域:最常见的就是if(...){...},while(..){...},类似这种, 块内部可以访问 文件作用域:在当前源码文件内可以被访问变量的生命周期变量的生命周期就是从创建该变量开始到该变量被销毁的这一段时间,各种变量的生命周期:全局变量:进转载 2021-08-03 22:00:31 · 830 阅读 · 0 评论 -
线程池的简单实现
涉及的点:互斥锁、条件变量 函数指针的调用 工作线程、管理者线程#include <stdlib.h>#include <pthread.h>#include <unistd.h>#include <assert.h>#include <stdio.h>#include <string.h>#include <signal.h>#include <errno.h>//#inc.转载 2021-07-29 22:40:36 · 207 阅读 · 0 评论 -
Linux多线程编程详细解析----条件变量 pthread_cond_t
Linux操作系统下的多线程编程详细解析----条件变量 1.初始化条件变量pthread_cond_init#include <pthread.h>int pthread_cond_init(pthread_cond_t *cv,const pthread_condattr_t *cattr);返回值:函数成功返回0;任何其他返回值都表示错误初始化一个条件变量。当参数cattr为空指针时,函数创建的是一个缺省的条件变量。否则条件变量的属性将由cattr中的属性值来决定.转载 2021-07-29 21:38:41 · 1343 阅读 · 0 评论 -
自学编程的人,90%以上都会掉进这些坑,避开这些误区能提高N倍学习效率
前言 几乎每一个程序员都会走上那么一段自学的道路,尤其是在校生或进入工作岗位之后,技术的提升基本都靠自学,有的虽然是网上报班学习,但更多时候还是自己在学习,师傅引进门,修行靠个人。 有的人自学很快,几乎一个多月就能掌握一门技术,而有的人苦苦坚持,最后还是半途而废,很大的原因就在于...转载 2021-07-21 20:53:16 · 415 阅读 · 0 评论 -
自学编程的妙方法
写了18年的代码,之前做过阿里的高级架构师,在技术这条路上跌跌撞撞了很多,我今天分享一些我个人的自学方法给各位。现在在网上报个正经点的班得花几千块钱,线下就更夸张,都是万元起步,我的这些学习方法如果你能用好,跟花几万块钱报班效果一样强大。 我跌倒的坑,希望大家一脚就能跨过去。 一、工具的选择 在我们初学的时候,往往会听到一些人说这个语言不行、那个语言天下第一,这其实是不对的,你仔细观察就会发现很少有架构...转载 2021-07-21 20:33:09 · 266 阅读 · 0 评论 -
读代码的方法
先知道代码的功能通过说明文档,或者询问别人了解代码的能力,它能干什么用到了哪些语言把代码跑起来怎么构建的怎么安装怎么使用怎么调试了解代码的结构代码的文件结构,用什么工具开发的,找相应的工具打开代码文件从架构层面去分析,看它使用的什么架构,什么框架找到程序入口,去看具体的代码。辅助工具sourcetrailunderstand各种ide...原创 2021-07-21 20:14:35 · 154 阅读 · 0 评论 -
Chrome开发者工具(DevTools)使用技巧
9大功能面板Elements元素面板:检查和调整页面,调试DOM和CSS Network网络面板:调试请求,了解页面静态资源分布,网页性能检测 Console控制台面板:调试JavaScript,查看日志,交互式代码调试 Sources源代码资源面板:调试JavaScript页面源代码,进行断点调试 Application应用面板:查看和调试客户端存储,如Cookie、LocalStorage、SessionStorage Performance性能面板:查看页面性能细节,细粒度对网页...转载 2021-07-19 21:44:01 · 10857 阅读 · 2 评论 -
gcc 生成目标文件
gcc 生成可执行文件gcc -o filename main.cgcc 生成动态链接文件Linux 下动态链接库(shared object file,共享对象文件)的文件后缀为.so,它是一种特殊的目标文件(object file),可以在程序运行时被加载(链接)进来。使用动态链接库的优点是:程序的可执行文件更小,便于程序的模块化以及更新,同时,有效内存的使用效率更高。GCC 生成动态链接库如果想创建一个动态链接库,可以使用 GCC 的-shared选项。输入文件可以是源文件、汇编文件或者目转载 2021-07-19 21:26:51 · 1471 阅读 · 0 评论 -
软件工程 常见术语 中英对照
不保证完全准确软件工程 software engineering软件架构 software architecture设计模式 design pattern框架 framework图表 diagram结构 structure算法 algorithm...原创 2021-07-13 21:57:10 · 923 阅读 · 0 评论 -
从 C 代码到可执行程序的 4 步之旅
Journey of a C Program to Linux Executable in 4 StagesbyHIMANSHU ARORAonOCTOBER 5, 2011Pre-processing Compilation Assembly LinkingYou write a C program, use gcc to compile it, and you get an executable. It is pretty simple. Right?Have you ever...转载 2021-07-09 23:04:10 · 313 阅读 · 0 评论 -
sourcetrail 开源的代码阅读神器
Sourcetrail - The open-source cross-platform source explorer原创 2021-07-09 12:41:20 · 365 阅读 · 0 评论 -
gcc 编译过程中头文件的查找路径
开始首先# include 包含头文件有两种方式1. <filename> 查找系统目录2. “filename” 先查找当前目录,再找系统目录执行编译命令是还可以通过 -Idir 的方式指定 include 目录。这样搜索的顺序就变为 当前目录->dir->系统目录补充1. -nostdinc 选项能防止编译时查找系统目录,当你的程序是系统内核,c标准库本身或用不到标准库是比较有用。2. 执行echo | gcc -v -x c -...原创 2021-07-08 23:23:55 · 2112 阅读 · 0 评论 -
详解三大编译器:gcc、llvm 和 clang
传统的编译器通常分为三个部分,前端(frontEnd),优化器(Optimizer)和后端(backEnd)。编译器一般构成传统的编译器通常分为三个部分,前端(frontEnd),优化器(Optimizer)和后端(backEnd)。在编译过程中,前端主要负责词法和语法分析,将源代码转化为抽象语法树;优化器则是在前端的基础上,对得到的中间代码进行优化,使代码更加高效;后端则是将已经优化的中间代码转化为针对各自平台的机器代码。GCCGCC(GNU Compiler Collect...转载 2021-07-03 11:34:30 · 2888 阅读 · 3 评论 -
C语言技巧之长度为0的数组
qiuliangflash2013-04-10 23:53:51©著作权在gnu c中有一种用法,就是可以使用长度为0的数组,比如说一下这个结构体:struct sample {int length;char store[0];}可以像以下这种方式来使用:struct sample * example = (struct sample *)malloc(sizeof(struct sample)+size);example->length = size;exam..转载 2021-07-03 11:07:31 · 508 阅读 · 0 评论 -
vim 使用
# 删除到指定行dnG# 转换单个字符大小写~#原创 2021-07-02 22:08:45 · 114 阅读 · 1 评论