Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

腾讯后台开发面试笔试C++知识点参考笔记 #19

Open
lemonchann opened this issue Jul 17, 2020 · 0 comments
Open

腾讯后台开发面试笔试C++知识点参考笔记 #19

lemonchann opened this issue Jul 17, 2020 · 0 comments

Comments

@lemonchann
Copy link
Owner

https://lemonchann.github.io/blog/cpp_reference/

文章是由我笔试面试腾讯笔记整理而来,主要是针对面试的C++后台开发岗位,涵盖了大部分C++后台开发相关的,可能会考察和被问到的技术点。

自认为这篇笔记比较全面的涵盖了,后台开发C++笔试面试大部分知识点,不管你是已经工作准备参加社招,还是在校学生准备参加校招,笔记都可以作为技术面试准备阶段参考查阅,查缺补漏。

笔记是基础C++知识点总结,没有过多的阐述后台开发的系统架构,和分布式后台服务设计相关内容,以及C++11新特性,这些在笔试面试也会被问到但不在这篇讨论范围,可以关注我后面有机会补上。

阅读提示

文章约12839字,阅读时长预计33分钟。建议关注收藏方便回头查阅。

gdb调试命令

step和next的区别?

当前line有函数调用的时候,next会直接执行到下一句 ,step会进入函数.

查看内存

(gdb)p &a //打印变量地址

(gdb)x 0xbffff543 //查看内存单元内变量

0xbffff543: 0x12345678

(gdb) x /4xb 0xbffff543 //单字节查看4个内存单元变量的值

0xbffff543: 0x78 0x56 0x34 0x12

多线程调试

(gdb) info threads:查看GDB当前调试的程序的各个线程的相关信息

(gdb) thread threadno:切换当前线程到由threadno指定的线程

break filename:linenum thread all 在所有线程相应行设置断点,注意如果主线程不会执行到该行,并且启动all-stop模式,主线程执行n或s会切换过去

    set scheduler-locking off
    on\step    默认off,执行s或c其它线程也同步执行。on,只有当前相称执行。step,只有当前线程执行

show scheduler-locking 显示当前模式

thread apply all command 每个线程执行同意命令,如bt。或者thread apply 1 3 bt,即线程1,3执行bt。

查看调用堆栈

(gdb)bt

(gdb)f 1 //帧简略信息

(gdb)info f 1 //帧详细信息

断点

b test.cpp:11

b test.cpp:main

gdb attach 调试方法:

gdb->file xxxx->attach pid->这时候进程是停止的->c 继续运行

带参数调试

输入参数命令set args 后面加上程序所要用的参数,注意,不再带有程序名,直接加参数,如:

(gdb)set args -l a -C abc

list命令

list linenum  //显示程序第linenum行的周围的程序

list function  //显示程序名为function的函数的源程序

static关键字的作用

软硬链接

ln -s 源文件 目标文件, ln -s / /home/good/linkname链接根目录/到/home/good/linkname

软链接就是:“ln –s 源文件 目标文件”,只会在选定的位置上生成一个文件的镜像,不会占用磁盘空间,类似与windows的快捷方式。


硬链接ln源文件目标文件,没有参数-s, 会在选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。

函数指针

int (*func)(int, int) //函数指针

int (*funcArry[10])(int, int) //函数指针数组

const int* p; //指向const int的指针

int const* p; //同上

int* const p; //const指针

设计模式

单例模式

观察者模式(也叫发布订阅模式)

工厂模式 三种:简单工厂模式、工厂方法模式、抽象工厂模式

为什么要用工厂模式?原因就是对上层的使用者隔离对象创建的过程;或者是对象创建的过程复杂,

使用者不容易掌握;或者是对象创建要满足某种条件,这些条件是业务的需求也好,是系统约束也好

,没有必要让上层使用者掌握,增加别人开发的难度。所以,到这时我们应该清楚了,无论是工厂模式,

还是上面的战友说的开闭原则,都是为了隔离一些复杂的过程,使得这些复杂的过程不向外暴露,

如果暴露了这些过程,会对使用者增加麻烦,这也就是所谓的团队合作。

数据结构

各种排序算法

堆排序

关键:1.初始建堆从最后一个非叶节点开始调整 2.筛选从顶点开始往下调整

通俗易懂的快排

二叉树定理

度为2节点数 = 叶子节点数 - 1

证明:树枝数=节点数-1, n00 +n11 +n2*2 = n0+n1+n2-1 (n0代表度为0的节点数,以此类推)

互斥锁

pthread_mutex_t m_mutex;
pthread_mutex_init(&m_mutex, NULL)等效于pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER
pthread_mutex_lock(&m_mutex);
pthread_mutex_unlock(&m_mutex)
pthread_mutex_destroy(&m_mutex)
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void ), void arg);
bool g_flag = false;
void
t1(void
arg)
{
cout <<

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant