- 博客(158)
- 问答 (2)
- 收藏
- 关注
原创 gdb调试命令
启动命令// 设置LD_PRELOADexport LD_PRELOAD=lib1.so:lib2.so:lib3.so...// 启动gdb file_name断点设置/删除//设置断点break 文件名:函数名break 文件名:行号//删除断点delete 5delete 1-10运行//运行run//step overn//step intos//continuec打印变量信息p variablep phrase..
2020-09-07 10:26:12
194
原创 bypy库使用(支持命令行上传/下载百度云文件)
安装pip install bypy==1.6.10最新版本bypy可能会报错验证bypy info访问https://openapi.baidu.com/oauth/2.0/authorize?client_id=XXX并输入授权码上传bypy upload [file_name]上传至我的应用数据/bypy/下载bypy downfile [file_name]...
2020-09-03 17:27:49
1118
原创 面试常见算法之堆排序
#include <vector>#include <iostream>#include <algorithm>using namespace std;int heap_size;void heapify(vector<int> &nums, int i){ // 检查节点i的子孩子是否大于节点i int left = 2 * i + 1; int right = 2 * i + 2; int largest = i; if.
2020-08-24 10:49:14
300
原创 面试常见算法之二叉树中序遍历
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<int> inorderTrave.
2020-08-22 15:32:56
196
原创 面试常见算法之二叉树后续遍历(反向输出前序遍历的镜像版本)
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<int> postorderTra.
2020-08-22 15:21:57
430
原创 C/C++程序员面试秘笈——10.STL
读写文件#include <fstream>istream in("in.txt")//按字节读while (EOF != (ch=f.get()))//按行读char line[128];f.getline(line, 128)string buf;getline(f, buf);fstream out("out.txt")out << line << endl;红黑树的规则1.叶节点和根节点为...
2020-08-21 19:56:51
160
原创 面试常见算法之快排
#include <vector>#include <iostream>using namespace std;// partition实现int partition(vector<int>& nums, int left, int right){ // 当数组只有一个元素时直接返回该元素index if (left == right) return left; // 简单地取第一个数作为pivot int pivot = nums[.
2020-08-21 15:01:31
225
原创 C/C++程序员面试秘笈——9. 排序
希尔排序模板的缺点可能导致代码膨胀解决方式:将模板中与参数无关的代码分离模板的特化需要对某些类型进行特殊处理函数模板特化:当IsEqual参数类型为char*时,会调用特化版本类模板特化:部分模板特例化1.对部分模板参数进行特例化2.使用具有某一特征的类型(引用,指针):template <class T>class A<T*>class A <T&&g...
2020-08-20 19:02:10
177
原创 雷火客户端面经
一面自我介绍疯狂问c++基础知识智能指针几种cast。。。。。。数据结构介绍红黑树B树/B+树特点操作系统gc机制二面自我介绍疯狂问c++dynamic_cast/static_cast对于类的向下转换的区别,如果不能转换会在什么时候报错网络:关于http能说什么设计模式装饰器三面自我介绍问了很多项目的东西,以及个人情况数据结构红黑树和hash的区别,hash解决冲突的...
2020-08-20 18:57:25
500
原创 拼多多服务端一面面经
自我介绍,项目介绍,有没有关注的开源项目。。。操作系统线程和进程的区别有10w个资源,有一堆用户,随时会申请不定数量的资源,问分配方式(回答了FCFS以及银行家算法),还问了如果只有一个用户且他申请的资源>可用资源会发生什么事(回答的直接出错)算法:写一个linkedHashMap...
2020-08-19 18:45:29
303
原创 腾讯客户端一面面经
自我介绍,介绍项目,介绍实习经验。。操作系统:虚拟内存作用并行和并发的区别网络:从点击一个链接到出现页面发生的事401,200对应什么状态设计模式:介绍自己知道的设计模式(工厂模式,单例模式,适配器,然后扯到STL里面的适配器)算法:一张灰度图,如何根据所有像素值得中位数,进行二值化(即小于等于中位数的像素赋值为0,大于中位数的像素赋值为255)在提示下,应该使用基数排序的方式...
2020-08-19 18:41:11
350
原创 C/C++程序员面试秘笈——8. 数据结构
约瑟夫环将剩下的人重新编号新的编号: 0 1 2 3 4 5 6 7 … n-2对应原来的编号:m m+1, …n-1,0,1…m-2new_idx = (old_idx + m) % nf(1)=0;//递归出口f(n)=[f(n-1)+m]%n;//递归体`
2020-08-19 18:26:12
160
原创 STL源码剖析——其他
哈希函数自定义哈希函数:class CustomerHash {public: size_t operator() (const Customer &c) const { return hash_val(c.fname, c.Iname, c.no); }};库提供的hash_val函数:// 第一步调用template <typename... Types>inline size_t hash_val(const Types&
2020-08-19 18:01:00
131
原创 STL源码剖析——适配器
设计模式定义将一个class接口转换为另一个class接口种类容器adapter:stack, queue迭代器adapter:reverse iterator, inserter iterator, iostream iterator仿函数adapter函数适配器bindbind1st/bind2nd:绑定第1/2个参数template <class Operation>class binder2nd : public unary_funct..
2020-08-19 17:48:17
153
原创 C++ 判断是否有某个成员变量并赋值
参考https://stackoverflow.com/questions/1005476/how-to-detect-whether-there-is-a-specific-member-variable-in-class中的解决方案,利用decltype, 模板多态,std::false_type, std::true_type快速判断是否有某个名称的成员变量template <typename T, typename = int>struct HasX : std::false_t
2020-08-19 14:20:06
1812
原创 C/C++程序员面试秘笈——7.继承和多态
私有继承方式私有继承中,不允许将子类对象转换成父类对象私有继承子类和父类不是is a 的关系,而是is implement in terms of(以...实现)组合与私有继承有一个(has a)关系,单一组合可以与私有继承替换区别:继承可能引入不必要的多重继承继承允许子类指针到父类指针的转换,允许子类重写父类虚函数,允许子类访问父类protected成员选择:尽可能使用组合构造函数...
2020-08-18 19:45:50
208
原创 C/C++程序员面试秘笈——6.面向对象
静态数据成员相比全局对象的优势静态数据成员不会与程序中其他全局名字冲突静态数据成员可以是private成员,隐藏信息拷贝构造函数与赋值构造函数的区别拷贝构造函数是一个构造函数;用一个对象来初始化新对象的内存区域赋值构造函数是operator=操作;对一个已经被初始化的对象进行赋值;如果原来对象中有内存分配,先要把内存释放掉;如果两个对象是同一个对象,则不做任何操作。...
2020-08-17 20:10:10
141
原创 STL源码剖析——仿函数
仿函数定义与用法用法:#include <functional>greater<int> ig;cout << ig(4,6) << endl;cout << greater<int>()(4,6) << endl;accumulate(iv.begin(), iv.end(), 1, multiplies<int>());可配接性继承unary_function/binary_
2020-08-16 20:19:07
163
原创 C/C++程序员面试秘笈——5.位运算与嵌入式编程
printf中%d,%f区别%d表示参数为int类型,会从栈中读取4个字节%f表示参数为double类型,会从栈中读取8个字节中断服务程序ISR1.不能返回值2.不能传递参数3.不应当作浮点运算(不可重入)4.不应当调用printf(不可重入)裸奔系统中,中断程序由硬件触发执行。这意味着中断函数没有具体的调用者,所以,中断函数无法将值返回给任何对象。...
2020-08-16 20:10:50
242
原创 STL源码剖析——算法
1#include <numeric>//计算累积总和template <class InputIterator, class T>T accumulate<InputIterator first, InputIterator last, T init) { for (; first != last; ++first) init = init + *first; return init;}//将相邻两元素的差(后-前)赋值给目
2020-08-14 15:01:28
287
原创 C/C++程序员面试秘笈——3. 引用和指针
字、字节、bit一个字节(byte) = 8 bit一个字 = 4 type (32位系统)一个字 = 8 byte (64位系统)句柄windows环境中用来标识项目(模块、任务、文件等)指针和句柄区别:1.句柄指向与系统相关的结构,如线程的句柄2.指针指向的结构通常用用户定义...
2020-08-12 19:26:36
135
原创 C/C++程序员面试秘笈——2.预处理,const, static, sizeof
define中的#和###s:将宏参数s变为字符串a##b:将参数a和b连接起来内联函数与宏宏缺点:1.不能进行参数有效性检查2.参数类型不能作自动类型转换3.不能访问类成员变量4.容易产生二义性内联函数:要求不允许有循环或递归,如果不符合要求,会被当做普通函数有参数类型检查会使代码变长,占用内存...
2020-08-11 20:55:55
197
原创 C/C++程序员面试秘笈——1.基础
交换2个数不使用临时变量,且不会出现溢出的方法预处理命令——编译器当前使用c++编译器:#ifdef __cplusplus当前使用c编译器:#ifdef __STDC__重载的底层实现C++支持重载,C不支持重载1.编译生成的符号可能为_foo_int_int2.编译生成的符号可能为_foo_int_float增加extern "C"声明后,编译生成目标代码时,采取C语言的方式,可能为_foo。at...
2020-08-06 19:36:49
437
原创 深入理解计算机基础——Synchronization
信号量P(S)如果s > 0,则–s如果s = 0,则阻塞V(S)s++如果有若干线程为了S而阻塞,则启动一个生产者-消费者问题生产者等待empty slot,向其中增加item,并通知消费者消费者等候buffer item,从buffer中移除该item,并通知生产者void sbuf_insert(sbuf_t *sp, int item){ P(&sp->slots); // wait for available slot P(&sp->
2020-08-05 20:11:01
246
原创 深入理解计算机基础——Network
Socketsocket interfacegetaddrinfoint getaddrinfo(const char *host , /* hostname*/ const char *service, /*Port or service name*/ const struct addrinfo *hints /*input parameters */ struct addrinfo **res
2020-08-03 18:30:48
238
原创 深入理解计算机基础——virtual memory
页表页表:记录虚拟地址到物理地址的映射unallocated:未分配的cached:缓存在内存中的(有效位=1)uncached:未缓存在内存中的page hit:查找的页存在于cache中page fault:查找的页不在cache中内存保护通过permission bits进行保护虚拟地址翻译1.CPU向MMU请求虚拟地址对应的物理地址2.MMU查找cache中有没有对应的page table entry3.如果page hit,则返回对应的page table en
2020-08-02 21:33:24
441
原创 STL源码剖析——hashtable, unordered_set, unordered_map
1template <class Value>struct __hashtable_node{ __hashtable_node *next; Value val;};1template <class Value, class Key, class HashFcn, class ExtractKey, class EqualKey, class Alloc>struct __hashtable_iterator { node *cur;
2020-07-30 20:25:22
222
原创 深入理解计算机基础——System Level IO
File I/O 函数打开/关闭文件:open, close读写文件:read, write改变文件下一个读写的位置:lseek文件类型普通文件目录socket:进程通信使用命名管道符号链接设备文件Buffer I/O每次读取文件时,先检查是否在buffer中文件描述符数据结构dup2复制文件描述符...
2020-07-29 20:22:00
276
原创 深入理解计算机基础——ECH
异常发生某个事件后将控制移交给kernel异常表:异步异常:处理器外部的事件引起同步异常:执行指令时引起,包括Trap(如syscall), Fault(如page fault), abort(如非法指令)其中,segmentation fault(缺页异常):当指令引用的地址不在存储器中,必须从磁盘中取出时会发生。system call过程(如open):1.用户调用open(filename, options)函数2.调用__open函数,将syscall number存放在%ea
2020-07-28 19:38:52
334
原创 STL源码剖析——rb_tree, map, set
1template <class Key, class Value, class KeyOfValue, class Compare, class Alloc = alloc>class rb_tree {protected: size_type node_count; link_type header; Compare key_compare;public: typedef __rb_tree_iterator<value_type, refe
2020-07-28 16:51:11
190
原创 深入理解计算机基础——Linking
链接过程Step1:将全局变量、函数定义为symbol,生成relocatable object file(.o file)Step2:将不同relocatable object file合并到同一个executable file(可直接拷贝进入内存执行,加载到0x40000000位置)中,并将symbol用内存中的实际地址替换。ELF.test段:存放代码.rodata段:只读数据.data段:已初始化的全局变量、静态变量.bss段:未初始化的全局变量、静态变量,不占用空间symbol
2020-07-23 14:03:55
208
原创 深入理解计算机基础——Memory
存储类型SRAM和DRAM非易失性存储:ROM固态磁盘磁盘缓存磁盘结构:磁盘访问时间 = 寻道时间 + 旋转时间 + 传送时间DMA(Direct Memory Access)不需要CPU的干预,设备自己执行读或写任务;数据传输完毕后,通过中断通知CPU存储结构CacheCache不命中的替换策略:LRUwrite-through:立即将数据写入内存write-back:通过dirty bit,稍后将数据写入内存...
2020-07-22 19:43:40
515
原创 STL源码剖析——heap
binary_heap一种完全二叉树假设array[0]号元素设为无限大或无限小,则某个节点位于array[i]时,它的左孩子节点位于array[2i]处,右孩子节点位于array[2i+1]处,父节点位于array[i/2]处插入元素:push_heap首先需要将插入的元素放在vector尾部进行上溯:与父节点比较,如果父节点小则交换位置,直到不需要对换或到达根节点为止template <class RandomAccessIterator>in..
2020-07-22 18:24:48
190
原创 深入理解计算机基础——Machine Level Programming
2’s Complement正数:最高位0负数:最高位1,绝对值取反加1如4位情况下:5表示为0101-3表示为1101浮点数表示s:表示正负M:frac,在[1,0, 2.0)间E:exp1.exp≠000…0且exp≠111…1:E = exp - BiasBias = 2^(k-1) - 1...
2020-07-21 19:28:47
291
原创 STL源码剖析——容器适配器stack, queue
stack不提供迭代器和遍历//默认用deque进行适配template<class T, class Sequence = deque<T>>class stack { friend bool operator==__STL_NULL_TMPL_ARGS(const stack&, const stack&); friend bool operator<__STL_NULL_TMPL_ARGS(const stack&a.
2020-07-21 18:31:33
155
原创 STL源码剖析——deque
1template <class T, class Alloc = alloc>class vector {public: typedef T value_type; typedef value_type* pointer; typedef value_type* iterator; typedef value_type& reference; typedef size_t size_type; ty
2020-07-21 18:02:56
184
原创 STL源码剖析——链表
list环状双向列表template <class T>struct __list_node { typedef void* void_pointer; void_pointer prev; void_pointer next; T data;}迭代器bidirectional iterators插入删除过程中其他迭代器不受影响template<class T, class Ref, class Ptr>st.
2020-07-21 17:34:57
296
原创 STL源码剖析——vector
vector结构体:template <class T, class Alloc = alloc>class vector {public: typedef T value_type; typedef value_type* pointer; typedef value_type* iterator; typedef value_type& reference; typedef size_t size_typ
2020-07-21 17:34:01
176
原创 cmake的使用
一个简单的示例:1.写CMakeLists.txtcmake_minimum_required(VERSION 2.8.9) //版本project (test) //项目名称add_executable(test test.cpp) //可执行文件名 + 源文件2.利用cmake生成MakeFile文件cmake [path]3.makemake4.执行文件./test多文件结构/*.
2020-07-19 20:47:37
169
空空如也
c++ 静态成员初始化问题
2020-08-13
c++ 模板类继承中unresolved externals问题
2020-07-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人