当前位置: 首页 > 资讯 > 篮球资讯

卢森堡VS意大利直播_卢森堡VS意大利免费高清在线直播_卢森堡VS意大利免费直播视频直播

直播信号

卢森堡VS意大利直播_卢森堡VS意大利免费高清在线直播_卢森堡VS意大利免费直播视频直播

最近几年计算机就业市场是迷一样的操作,每年都会在不同的方向反复横跳。曾经的大热方向,可能转年就会预冷。这样的风向给了我们很多目前马上临近毕业的同学带了不少的焦虑。

这份文档的整理,目的就是为了帮助大家缓解焦虑,带给大家关于c/c++方向的一站式学习内容,包含了c/c++基础通用技术栈,面试八股文,各方向就业分析以及对应方向技术栈的梳理,还有项目推荐、简历该如何书写、面经分享和offer参考分析。希望能给还在坚持的c/c++道路上的同学,带来一些帮助和鼓励。

c/c++基础核心技能部分包括:c/c++语言以及编程四大件。不管大家以后从事c/c++的哪个技术方向,对于这一块的基础部分大家都是需要熟练掌握的。

1.1 C语言

(主要掌握其语法,其中最重要的莫过于指针和内存管理)

变量条件循环字符串数组函数结构体指针内存管理

1.2 C++语言

(是区别于C语言的,相当于在C语言里面加入了面相对象的特性)

封装、继承与多态特性泛型模版STL

关于c/c++语言,大家在学习的时候不要花费太多的时间,扎扎实实的过一遍即可,不要沉迷于精通语言本身,这样的做法对于我们做开发是没有意义的。

数据结构与算法、计算机网络、操作系统、设计模式

2.1 数据结构与算法

基础数据结构类型:

字符串链表二叉树堆栈队列哈希

基本算法

查找排序遍历动态规划

这一块建议大家多刷题。

2.2 计算机网络

基础的部分主要就是指的tcp/ip协议栈的学习与掌握。虽然是基础部分,但是可以说是面试必问。谁不会谁尴尬!

ARP协议IP协议ICMP协议TCP协议UDP协议DNS协议HTTP协议HTTPS协议

2.3 操作系统

进程和线程的相关原理(原子性、并发、锁)内存相关原理(内存分布、内存调度)

2.4 设计模式

倒不是说所有的设计模式都要会,但是常见一些,大家还是需要掌握的。

单例模式工厂模式代理模式策略模式模版方法模式观察者模式

最后在补充一个

PS:Linux工程管理

makefile/cmake/configure分布式版本控制gitLinux系统运行时参数命令vscode gdb调式

基础核心大致上就是这些,在大家后续的面试过程中,会占据一部分的比重。因为内容考点比较固定,所以就有了对应面试八股文。那第二部分和大家分享的就是面试八股文篇

这里主要分为两部分,一部分是文档篇,另一部分是视频篇。文档的面试八股文会整理的比较多,近几年的都有做一个整理归纳,陆陆续续应该有1500多道了,这里就简单的陈列一部分。视频版面试题制作会比较费时间,目前整理出的有c/c++语言相关常见的面试题型和c++标准库的面试题,后续会继续更新。大家可以根据自己的学习喜好,选择性学习。

1.1 类中的重要函数

1.1.1 构造函数和析构函数的作用?

1.构造函数只是起初始化值的作用,但实例化一个对象的时候,可以通过实例去传递参数,从主函数传递到其他的函数里面,这样就使其他的函数里面有值了。

规则,只要你一实例化对象,系统自动回调用一个构造函数就是你不写,编译器也自动调用一次。

2.析构函数与构造函数的作用相反,用于撤销对象的一些特殊任务处理,可以是释放对象分配的内存空间;特点:析构函数与构造函数同名,但该函数前面加~。

析构函数没有参数,也没有返回值,而且不能重载,在一个类中只能有一个析构函数。 当撤销对象时,

编译器也会自动调用析构函数。

每一个类必须有一个析构函数,用户可以自定义析构函数,也可以是编译器自动生成默认的析构函数。 一般析构函数定义为类的公有成员。

1.1.2 类什么时候会被析构?

对象生命周期结束,被销毁时;delete指向对象的指针时,或delete指向对象的基类类型指针,而其基类析构函数是虚函数时;对象i是对象o的成员,o的析构函数被调用时,对象i的析构函数也被调用。

1.1.3 构造函数和析构函数可以调用虚函数吗?

在C++中,提倡不在构造函数和析构函数中调用虚函数;构造函数和析构函数调用虚函数时都不使用动态联编,如果在构造函数或析构函数中调用虚函数,则 运行的是为构造函数或析构函数自身类型定义的版本;–> 不会呈现出多态因为父类对象会在子类之前进行构造,此时子类部分的数据成员还未初始化,因此调用子类的虚函数 时不安全的,故而C++不会进行动态联编;–> 实际上调用的是父类的函数析构函数是用来销毁一个对象的,在销毁一个对象时,先调用子类的析构函数,然后再调用基类的析 构函数。所以在调用基类的析构函数时,派生类对象的数据成员已经销毁,这个时候再调用子类的虚函 数没有任何意义。

输出:

A::Function

B::Function

1.1.4类成员初始化方式?构造函数的执行顺序 ?为什么用成员初始化列表会快一些?

1.成员初始化列表:在构造函数的定义中使用初始化列表来对类的成员进行初始化。语法为在构造函数的参数列表后使用冒号(ὠ;,后跟成员名和对应的初始值。

2.构造函数体内初始化:在构造函数的定义中,在构造函数体内使用赋值语句对成员进行初始化。

赋值初始化,通过在函数体内进行赋值初始化;列表初始化,在冒号后使用初始化列表进行初始化。

*这两种方式的主要区别在于:

对于在函数体中初始化,是在所有的数据成员被分配内存空间后才进行的。

列表初始化是给数据成员分配内存空间时就进行初始化,就是说分配一个数据成员只要冒号后有此数据成员的赋值表达式(此表达式必须是括号赋值表达式),那么分配了内存空间后在进入函数体之前给数据成员赋值。–> 更快

3.一个派生类构造函数的执行顺序如下:

① 虚拟基类的构造函数(多个虚拟基类则按照继承的顺序执行构造函数)。

② 基类的构造函数(多个普通基类也按照继承的顺序执行构造函数)。

③ 类类型的成员对象的构造函数(按照初始化顺序)

④ 派生类自己的构造函数。

4.C++的赋值操作是会产生临时对象的。临时对象的出现会降低程序的效率。

代码运行结果可以看出,在构造函数体内部初始化的对象b多了一次构造函数的调用过程,而对象a则 没有。由于对象成员变量的初始化动作发生在进入构造函数之前,对于内置类型没什么影响,

但如果有些成员是类,那么在进入构造函数之前,会先调用一次默认构造函数,进入构造函数后所做的事其实是 一次赋值操作(对象已存在),

所以如果是在构造函数体内进行赋值的话,等于是一次默认构造加一次赋值,而初始化列表只做一次赋值操作。

1.1.5 拷贝初始化和直接初始化

当用于类类型对象时,初始化的拷贝形式和直接形式有所不同:直接初始化直接调用与实参匹配的 构造函数,拷贝初始化总是调用拷贝构造函数。拷贝初始化首先使用指定构造函数创建一个临时对象,然后用拷贝构造函数将那个临时对象拷贝到正在创建的对象。举例如下

1.1.6 为什么析构函数一般写成虚函数

当基类指针指向派生类对象并被用于删除对象时,如果析构函数不被声明为虚函数,编译器将使用静态绑定(静态联编),只会调用基类的析构函数,而不会调用派生类的析构函数。这会导致派生类对象的析构函数不会被正确调用,从而导致派生类中的资源无法得到释放,可能引发内存泄漏或其他错误。

通过将析构函数声明为虚函数,使用动态绑定(动态联编),在删除对象时会根据指针所指向的实际对象类型来调用正确的析构函数。这样可以确保派生类的析构函数被正确地调用,释放派生类中的资源,然后再调用基类的析构函数,实现完整的对象销毁过程。

C++的动态联编(Dynamic Binding)是一种在运行时确定调用的函数版本的机制,也称为运行时多态(Runtime Polymorphism)。它允许通过基类的指针或引用来调用派生类中重写的虚函数。

在使用动态联编时,通过将基类的函数声明为虚函数(使用virtual关键字),可以实现函数的动态绑定。当通过基类的指针或引用调用虚函数时,实际调用的是基类指针或引用所指向的对象的类型所对应的虚函数版本,而不是基类的函数版本。

1.1.7 构造函数和析构函数能否声明为虚函数?

析构函数:

析构函数可以声明为虚函数,一般情况下基类的析构函数应该声明为虚函数。基类析构函数声明为虚函数可以确保通过基类指针删除派生类对象时,能够正确调用派生类和基类的析构函数,实现多态的析构行为。析构函数可以是纯虚函数,将含有纯虚函数的类称为抽象类,无法实例化抽象类的对象,但派生类可以根据自身需求重新实现基类中的纯虚函数。

构造函数:

构造函数不能声明为虚函数。在构造函数中可以调用虚函数,但此时调用的是正在构造的类中的虚函数,而不是子类的虚函数。因为在对象构造过程中,子类尚未构造完成。虚函数对应一个虚函数表(vtable),类中存储一个虚函数指针(vptr)指向该虚函数表。但构造函数在对象尚未初始化完成之前,无法访问虚函数表和虚函数指针,因此构造函数不能是虚函数。

从存储空间角度来看,虚函数表指针(vptr)实际上存储在对象的内存空间中。虚函数表是用于存储虚函数的地址的数据结构,它使得在运行时能够动态地确定要调用的虚函数。

构造函数不能是虚函数的原因有多个方面:

对象在实例化之前,内存空间还不存在,因此无法通过虚函数表找到对应的虚函数。虚函数表的指针(vptr)是在对象实例化之后才会被设置。虚函数主要用于在对象的类型不完全已知的情况下,能够根据实际对象的类型来调用对应的重载函数。而构造函数的目的是初始化对象实例,不存在对象类型不完全已知的情况。构造函数是在创建对象时主动调用的,不会通过父类的指针或引用来调用,因此不需要虚函数的多态性。

另外,构造函数的作用是提供对象的初始化,它只在对象的生命周期中运行一次,不属于对象的动态行为,因此也没有必要将构造函数定义为虚函数。

在实现上,虚函数表指针(vptr)在构造函数调用后才会被建立。构造函数只能知道它是当前类的构造函数,并不考虑后续是否还有派生类。编译器为构造函数生成的代码是针对当前类的构造函数,不是针对基类或派生类的(因为类并不知道谁会继承它)。因此,在构造函数中使用的虚函数表指针必须是指向当前类的虚函数表。

综上所述,构造函数不需要是虚函数,并且也不应该是虚函数。创建对象时通常会明确指定对象的类型,虽然可以通过基类的指针或引用来访问对象,但析构函数往往是通过基类的指针来销毁对象的,此时如果析构函数不是虚函数,就无法正确识别对象的类型从而无法正确调用析构函数。

另外,需要注意的是,C++中基类采用虚析构函数的主要目的是为了防止内存泄漏。具体来说,如果派生类中有申请了内存空间的操作,并在派生类的析构函数中对这些内存空间进行释放,如果基类的析构函数不是虚函数,那么在删除基类指针指向的派生类对象时,只会调用基类的析构函数而不会调用派生类的析构函数,导致派生类中申请的空间无法被释放,从而产生内存泄漏。因此,基类的析构函数应该采用虚析构函数来确保在删除对象时正确调用派生类的析构函数。

1.1.8 什么是纯虚析构函数?为什么不要把虚析构函数定义为纯虚析构函数?

纯虚析构函数是指在基类中将析构函数声明为纯虚函数(纯虚函数是通过在函数声明中使用来实现的)。纯虚析构函数的声明告诉编译器该类是一个抽象类,不能直接实例化对象,而只能被用作其他类的基类。

为什么不应该将虚析构函数定义为纯虚析构函数呢?

纯虚析构函数需要被派生类实现:由于纯虚函数需要在派生类中被实现,而析构函数是在对象销毁时自动调用的,因此无法保证在派生类中正确实现纯虚析构函数。这会导致派生类无法正常销毁对象,可能引发未定义的行为。析构函数的职责:析构函数在销毁对象时执行清理操作,例如释放动态分配的资源。如果将析构函数定义为纯虚函数,就无法在基类中提供默认的清理操作,因为纯虚函数没有默认实现。派生类也无法继承基类的析构函数实现,这会破坏对象销毁的机制。

1.1.9 C++ 有哪几种构造函数

默认构造函数(Default Constructor):没有参数的构造函数被称为默认构造函数。如果在类定义中没有显式定义构造函数,编译器会自动生成默认构造函数。默认构造函数用于创建对象时不需要传递参数的情况。

带参数构造函数(Parameterized Constructor):带参数的构造函数接受一个或多个参数,并使用这些参数来初始化对象的成员变量。它允许在创建对象时传递参数并进行初始化。

拷贝构造函数(Copy Constructor):拷贝构造函数用于创建一个新对象,该对象是通过使用同一类的另一个对象进行初始化的。它通常以引用形式接受一个同类对象作为参数,并创建一个新的对象,将原始对象的值复制到新对象中。

移动构造函数(Move Constructor):移动构造函数是C++11引入的特性,用于高效地将资源(如动态分配的内存)从一个对象转移到另一个对象,而不需要执行深拷贝。移动构造函数通常以右值引用形式接受参数,并从源对象“窃取”资源。

1.1.10 拷贝构造函数和移动构造函数的区别?

拷贝构造函数和移动构造函数都是用于创建对象的特殊成员函数,它们之间的区别如下:

参数类型:

拷贝构造函数的参数是一个常量引用(const T&),用于从同类型的对象进行拷贝。移动构造函数的参数是一个非常量引用(T&&),用于从同类型的对象进行移动。

语义:

拷贝构造函数创建一个新对象,并将原始对象的值复制到新对象中。这涉及到对资源的复制,如堆内存的分配和数据的复制。移动构造函数将原始对象的资源所有权转移到新对象中,而不进行资源的复制。这通常涉及到指针的转移和资源的移动。

对象状态:

拷贝构造函数会保留原始对象的状态,包括其值和所有权。移动构造函数将原始对象的状态转移给新对象,原始对象的状态变为有效但未定义的状态。

使用情境:

拷贝构造函数通常用于对象的复制、传递参数和返回值等场景,其中需要创建对象的副本。移动构造函数通常用于性能优化,避免不必要的资源复制,特别是在临时对象的创建和销毁过程中,如函数返回值优化和使用 std::move() 进行显式移动语义。

1.1.11 什么时候调用拷贝构造函数?

用类的一个实例化对象去初始化另一个对象时,函数的参数是类的对象时(非引用传递)。函数的返回值是函数体内局部对象的类的对象时,且返回方式是值传递。在某些编译器和平台下,可能会发生Named Return Value (NRV)优化,从而避免拷贝构造函数的调用。但在一些情况下,仍会调用拷贝构造函数。

需要注意的是,第二种情况中的优化行为可能因编译器和平台而异。在不同的编译器和平台下,对于返回局部对象的值传递方式,可能会有不同的优化行为。例如,在Linux上使用g++编译器时,即使发生NRV优化,值返回方式仍可能调用拷贝构造函数,而引用返回方式则不会调用拷贝构造函数。而在Windows上使用VS2019编译器时,在值返回方式下仍会调用拷贝构造函数。

总结来说,如果发生NRV优化,对于引用返回方式,不会调用拷贝构造函数;对于值返回方式,不同的编译器和平台可能会有不同的行为,有些情况下可能调用拷贝构造函数。

1.1.12 构造or析构函数可否抛出异常?

在C++中,只有已经完成构造的对象才会被析构。对象的构造函数在执行完毕后才算是完全构造妥当。如果在构造函数中发生异常,并且控制权离开构造函数,则对象的析构函数不会被调用。这可能导致内存泄漏或资源没有正确释放。使用auto_ptr(已弃用)或unique_ptr等智能指针可以代替裸指针作为类成员,这样可以增强构造函数的安全性。智能指针会在对象生命周期结束时自动释放资源,避免了在析构函数中手动释放资源的问题。如果异常从析构函数中抛出,并且没有在析构函数中进行捕获处理,那么C++会调用terminate函数终止程序的执行。这是因为析构函数不应该抛出异常,否则会导致程序处于不确定的状态。如果析构函数抛出异常并且没有被捕获处理,那么析构函数就会执行不完全。也就是说,析构函数没有完成其应该执行的每一项任务。这会导致程序无法正常清理资源,可能引发其他问题或导致程序的不可预测行为。

1.1.13 什么情况下会生成默认构造函数?

如果一个类没有任何构造函数,但是它包含一个成员对象,而该成员对象具有默认构造函数,那么编译器将会为该类合成一个默认构造函数。这个合成的构造函数只有在真正需要构造函数时才会生成。

如果一个派生类没有任何构造函数,并且派生自一个带有默认构造函数的基类,那么编译器会为该派生类合成一个构造函数,调用上一层基类的默认构造函数。

如果一个类带有一个虚函数(即至少有一个虚函数声明),编译器会为该类合成一个默认构造函数。这是为了支持动态绑定(运行时多态性)。

如果一个类带有一个虚基类(即在类层次结构中,通过多重继承共享相同的基类),编译器会为该类合成一个默认构造函数。这是为了正确初始化虚基类。

合成的默认构造函数只会初始化基类子对象和成员类对象,其他非静态数据成员不会被初始化。这意味着除了基类子对象和成员类对象之外,其他数据成员的初始值是未定义的。

1.1.14 静态函数能定义为虚函数吗?常函数呢?

静态成员函数无法定义为虚函数。虚函数的调用是通过对象的指针或引用来实现的,而静态成员函数不属于任何特定的对象或实例,它是与类本身相关联的。由于静态成员函数没有this指针,无法访问虚函数的调用机制,因此将静态成员函数定义为虚函数是没有意义的。

静态成员函数与非静态成员函数之间的主要区别在于静态成员函数没有this指针。

this指针是指向当前对象的指针,在非静态成员函数中可用于访问类的成员变量和其他成员函数。然而,静态成员函数不依赖于特定的对象,因此没有this指针可用。

虚函数的调用依赖于vptr(虚函数表指针)和vtable(虚函数表)的机制。vptr是一个指针,它在对象的内存布局中存在,并且通过this指针访问。vptr指向保存虚函数地址的vtable。由于静态成员函数没有this指针,无法访问vptr和vtable,因此无法实现虚函数的调用关系。

因此,静态成员函数不能定义为虚函数。虚函数的调用关系是通过this指针、vptr和vtable来处理的,而静态成员函数无法访问这些机制。

*什么是 this 指针?

当你定义一个类的成员函数时,编译器会为该函数隐式地添加一个额外的参数,这个参数被命名为 this,它是一个指向当前对象的指针。通过 this 指针,你可以在成员函数中访问当前对象的成员变量和调用其他成员函数。

1.2 内存相关

说明C++的内存分区

C++ 类的数据成员和成员函数的内存分布情况?

什么是内存泄漏应该如何避免?

堆和栈的区别?

new 和 delete 是如何实现的?

new / delete 与 malloc / free的异同

如何用代码判断大小端存储?

static的用法和作用?

静态变量什么时候初始化?

类中静态变量的初始化是什么时候?

什么是内存对齐?

求类/结构体大小

深拷贝和浅拷贝

1.3 指针和引用

C++中的指针参数传递和引用参数传递有什么区别?底层原理是?智能指针指针和引用的区别描述一下野指针和悬空指针的概念?使用智能指针管理内存资源,RAII是怎么回事?智能指针的循环引用左值和右值右值引用和移动构造无效引用什么是引用折叠?完美转发

1.4 函数

C++中将临时变量作为返回值时的处理过程C++函数调用的压栈过程编程实现strcpy函数重载、重写、隐藏的区别define、const、typedef、inline的使用方法?他们之间有什么区别?什么时候使用 inline 函数?

1.5 封装、继承、多态

C++中struct和class的区别深拷贝和浅拷贝什么是类型安全?C++ 虚函数如何实现多态?基类的虚函数表存放在内存的什么区,虚表指针vptr的初始化时间涉及到虚函数,对象的内存如何布局?虚函数表和谁绑定?public,protected和private访问和继承权限多态的定义、种类、实现 ?什么是纯虚函数?什么时候使用?和虚函数的区别?子类重写虚函数表会有什么影响?什么是菱形继承?如何用虚拟继承解决二义性?内存布局如何?哪些函数不能是虚函数?

1.6 关键字、运算符相关

strlen和sizeof区别?C++ 中的异常处理方法初始化和赋值的区别

1.7 STL

vector 和 list 的异同?vector 的底层实现?vector 中的删除操作?容器指针和引用?STL 中vector删除其中的元素,迭代器如何变化?为什么是两倍扩容?释放空间?容器内部删除一个元素STL 中的迭代器map、set是怎么实现的,红黑树是怎么能够同时实现这两种容器? 为什么使用红黑树?如何在共享内存上使用stl标准库?map 插入方式有几种?vector越界访问下标,map越界访问下标?vector删除元素时会不会释放空间?map中[]与find的区别?STL中list与queue之间的区别?什么是有序容器?STL 中每种容器对应的迭代器STL 中 slist 的实现?STL 中list的实现?STL 中set的实现?STL 中 deque 的实现?

1.8 模板与泛型编程

什么是模板(Template)?为什么要使用模板?C++中的函数模板和类模板有什么区别?如何定义一个函数模板和类模板?模板参数可以有哪些类型?如何限制模板参数的类型?什么是特化(Specialization)和偏特化(Partial Specialization)?它们有什么作用?请解释一下typename关键字在模板中的作用。为什么要使用std::enable_if和SFINAE(Substitution Failure Is Not An Error)技术?解释一下C++17引入的变量模板(Variable Template)。什么是类型萃取(Type Traits)?举例说明如何使用类型萃取。在使用STL时,我们经常遇到的问题之一是如何自定义比较函数。请说明如何使用函数对象或者Lambda表达式来实现自定义比较。

1.9 异常处理

什么是异常处理?为什么在编程中要使用异常处理机制?C++ 中的异常处理机制包括哪些关键字和语法?解释一下 try-catch 块以及它们的工作原理。在 catch 块中,可以捕获哪些类型的异常?如何捕获多个类型的异常?可以在函数声明中添加异常说明吗?它们有什么作用?什么是标准异常类(Standard Exception Classes)?列举一些常见的标准异常类及其用途。如何自定义一个异常类?请提供一个示例。在异常处理过程中,try 块内部发生了 return 语句会怎样?是否会执行 catch 块?可以同时使用错误码和异常处理来进行错误检查吗?有何优缺点?

1.10 文件操作

如何在C++中打开一个文件?请解释C++中的输入流和输出流是如何工作的。C++中有哪些常见的文件操作模式(打开文件时使用的模式)?怎样读取一个文本文件的内容,并将其显示在屏幕上?怎样向一个文本文件写入内容?解释C++中的二进制文件和文本文件之间的区别。怎样判断是否成功打开了一个文件?如何处理打开失败的情况?在C++中,如何将当前位置移动到文件的任意位置?如何判断是否已到达文件末尾(EOF)掘金分析预测?怎样从一个二进制文件中读取特定类型的数据?

1.11 多线程编程

什么是线程和进程?线程和进程之间有什么区别?请解释并发和并行的概念。线程同步是什么?为什么在多线程编程中很重要?请列举几种常见的线程同步机制。什么是死锁?如何避免死锁?解释互斥锁(Mutex)和条件变量(Condition Variable),以及它们在多线程编程中的作用。解释信号量(Semaphore)和读写锁(Read-Write Lock),以及它们在多线程编程中的作用。多线程程序中可能出现哪些问题?如何解决这些问题?请描述线程池的概念及其优势解释阻塞与非阻塞IO操作,以及它们在多线程环境中的应用场景。谈谈你对死锁、活锁和饥饿的理解,并提供相应的例子。

百度云盘链接: 链接:https://pan.baidu.com/s/14t_nKX3HfiJFOmhRaoojUw

提取码:dja8 临时密钥:147258

2.1 c/c++语言相关常见面试题型

视频地址:https://www.bilibili.com/video/BV1wb4y1K7qu/?spm_id_from=333.999.0.0

const关键字的作用static关键字的作用引用与指针作用以及区别如何避免野指针malloc free和new delete的区别extern 关键字作用简述 strcpy、sprintf 与 memcpy 的区别?c/c++ 中强制类型转换使用场景?c++ 什么时候生成默认构造函数c++ 什么时候生成默认拷贝构造函数c++ 什么是深拷贝,什么是浅拷贝

还有一些根据视频整理的知识图谱

2.2 c++标准库

视频地址:https://www.bilibili.com/video/BV1pu4y1c7BU/?spm_id_from=333.999.0.0

vector 底层实现原理vector 内存增长机制vector中reserve和resize的区别vector 的元素类型为什么不能是引用list 底层实现原理deque 底层实现原理什么时候使用vector list dequepriority_queue 的底层实现原理multiset 的底层实现原理unordered_map 的底层实现原理迭代器底层实现原理?及其有哪些种类?迭代器失效?连续和非连续存储容器的失效?STL 容器线程安全性

网上关于c/c++相关就业情况的表述其实是不全面的。可能就某一个领域来说确实难以获取好的offer。但是就整个c/c++的大方向来说,就业并不是一件困难的事情。而且c/c++领域,会是一个比较吃经验的大方向。很多方向可能对应届生不是很友好,但是对于有经验有能力的cpper来说,很多岗位还是很香的。比如嵌入式,比如后端,比如存储等等。接下来就给大家盘点一下c/c++领域有哪些方向可以选择,以及就个人的经验来分享其中的个别方向的技术栈以及就业前景。毕竟个人能力有限,不可能涉及了解到所有的方向和行业,无法做到全部方向的分析。

c/c++细分方向有哪些?

上位机单片机桌面应用工业软件嵌入式逆向游戏后端游戏客户端音视频开发后端开发存储量化网络安全虚拟化数据库高性能网络算法系统开发系统驱动开发

1.1 技术栈

编程语言:c/c++是主流嵌入式技术:比如单片机、微处理器、嵌入式系统等。通讯协议:比如:tcp/ip协议、rs232、modbus等。数据库:比如MySQL、oracle、momgoDB等。操作系统:比如Linux、VxWorks等。设计模式:比如工厂模式、单例模式、观察者模式等。工控领域知识:比如工业自动化、电子电路、机电一体化等。

1.2 就业分析

这个方向并不火热,因为不是大家传统意义上的高薪企业,也不是纯软件编程。但是对于专业对口或是学历是大专或是普本的同学来说,也是可以去参考求职的。

2.1 技术栈

C语言、汇编语言数字电路模拟电路基本电子元件

2.2 就业分析

除非天时地利人和,否则这个方向大家可以不用考虑。因为薪资确实不高,一般上限也就在W字出头,还需要经验积累。如果大家都已经学了c/c++,走了开发这条路,还是会有更好的选择的。

3.1 技术栈

c/c++语言qt数据结构与算法stlboost库MySQLSQLlite3socket编程tcp/ip协议

3.2 就业分析

就这两年来看,这个方向成了非95本硕同学眼里的香饽饽。主要是有岗位,学历要求不高,薪资也能算的上互联网行业里面的保底水平。毕竟在目前的环境下,能拿到offer,比什么都更重要。

4.1 技术栈

类似桌面应用开发一套,另外需要加入MFC的一些技术。

4.2 就业分析

学历要求不高,普本即可。可能是否极泰来,之前被吐槽多了,导致可能没人学,现在也算是一个不错的方向。

5.1 技术栈

基础知识

C语言:掌握基本语言、数据类型、控制结构和函数等知识。计算机组成原理:了解计算机的硬件组成和工作原理,包括CPU、内存、存储设备、输入输出设备等。操作系统原理:熟悉操作系统的基本概念、进程管理、内存管理、文件系统等。

嵌入式系统基础

嵌入式系统概念:了解嵌入式系统的特点、分类和应用领域。嵌入式处理器:常见的嵌入式处理器架构,如ARM、MIPS等。嵌入式操作系统:掌握常见的嵌入式操作系统,如Linux、FreeRTOS等。

开发工具和环境

编译器和调试器:选择合适的编译器和调试器,比如GCC、GDB等。开发板:比如Arduino、STM32等。继承开发环境(IDE):比如Keil、IAR等。

硬件接口和驱动程序

GPIOADC和DACUART、SPI和I2C电机驱动

嵌入式系统应用

物联网应用只能家居应用工业控制应用

5.2 就业分析

嵌入式行业也是近两年被炒热的方向,很多之前没有开设嵌入式培训班的培训机构也开启了嵌入式的培训班。

但经过市场检验,大家会发现岗位好像并没有大家想象的那样多。从前的传统嵌入式行业并没有出现增量,比如我们熟知的POS机,蓝牙耳机,信号灯等。新型的嵌入式AI互联,在车企等领域会有一定岗位和机会。但是也架不住人多,而且嵌入式普遍吃经验,想选择这个方向的同学,建议多做一定的了解再选择。

6.1 技术栈

C语言汇编语言(16位汇编/32位汇编)就业方向分支(window逆向工程、漏洞利用与防御、安卓逆向)

6.2 就业分析

逆向开发的方向,技术就是王道。没有学习的限制,但是不建议大家作为主要岗位来吃饭,毕竟这个警戒线一般人很难把控。

7.1 技术栈

c++/java/lua设计模式数据库网络编程并发编程

7.2 就业分析

目前国产3A游戏的火热,游戏后端开发的前景还是挺不错的。薪资待遇也是属于头部,但是学习成本和难度较大,而且关于游戏后端开发中还会涉及一些建模图形学的知识,需要的知识面也比较广。

8.1 技术栈

c/c++/c#/java/objective-C数据结构与算法引擎与框架数学基础网络和多媒体编程物理引擎和音频处理用户界面设计性能优化和内存管理操作系统

8.2 就业分析

游戏客户端的岗位有,但是普遍加班严重。而且目前国内的手游市场竞争激烈,不像之前有棋牌类的时候。如果确实感兴趣,可以考虑国外的游戏公司,或者说国内做出海游戏的公司,相对来说受限较小,发展前景会更好。一个好的游戏主程薪资还是非常香的。

9.1 技术栈

音视频基础

音频基础视频基础解复用基础ffmpeg开发环境搭建音视频开发常用工具

ffmpeg实战

ffmpeg命令SDL跨平台多媒体开发库实战ffmpeg框架ffmpeg音视频解复用+解码ffmpeg音视频编码+复用合成视频ffmpeg过滤器ffplay播放器ffmpeg多媒体视频处理工具

流媒体客户端

RTMP推拉流HLS拉流分析RTSP流媒体

流媒体服务器

SRS3.0源码剖析ZLMediakit源码剖析

webrtc

通话原理分析开发环境搭建MESH模型多人通话janus SFU模型多人通话SRS4.0/5.0源码分析

Android NDK开发

Android NDK开发基础Android ffmpeg编译和应用Android RTMP推拉流Android ijkpiayer源码分析

IOS音视频开发

ffmpeg6.0MAC编译iOS ffmpeg RTMP推拉流VIdeoToolbox硬件编解码iOS ijkplayer编译和应用iOS webrtc音视频通话

9.2 就业分析

音视频开发个人认为是平民天花的c/c++就业方向。如果你不是头部92本硕,也没有太多亮眼的奖项。音视频开发可以当做大家无脑冲的高薪岗位。普本之上都有机会。难点在于,市面上免费的系统学习资源匮乏。要么老旧,要么不成体系。建议可以投入付费培训学习一波,性价比是比较高的。

10.1 技术栈

后端基础

数据结构与算法c++新特性Linux工程管理

高性能网络

网络编程 异步网络库zvnet网络原理高性能异步io机制

基础组件

池式组件(线程池、内存池、链接)高性能组件开源组件

中间件

RedisMySQLkafkaNginx

开源框架

skynet分布式API网关spdk高性能计算CUDAZeroMQ

云原生

dockerkubernetes

性能分析

性能与测试工具观测技术bpf与ebpf内存源码机制

分布式架构

分布式数据库分布式文件系统分布式协调分布式监控prometheus

10.2 就业分析

c++后端开发好不好,完全取决去大厂的岗位多不多。一般的企业对于c++后端开发的需求几乎没有。就今年的环境来看,92本硕的同学可以去冲一冲。虽然难,但是该方向能进去,也是很香的。基本进就是大厂,而大厂薪资也不可能低。而关于后端的技术栈,大家如果有条件的话,都是可以去学习一下的。很多的c++的其他方向的技术栈都有后端技术栈的影子。

11.1 技术栈

接口驱动层

NVMeSATASCSiRDMA

内核层

ext4xfsbtrfsprocfstracefs

vfs

io_uringfuse

11.2 就业分析

分布式存储开发工程师岗位近三年来都是成倍数的增长,整体行业的发展也是上行的趋势。如果大家能掌握相关技能,年薪百万也是可以的。学历要求本科及以上即可。但是目前大多数的岗位都是需要有一定的经验,难点在于入行。

12.1 技术栈

同c++后端开发

12.2 就业分析

量化系统开发从属互联网金融。薪资待遇就不用说了,据统计有过一半的岗位能拿到30K-50K。主要就是设计和开发量化交易系统框架,说白了就是魔改系统框架。除了编程技术之外,该行业还需要掌握大量的数学、概率学知识以及一些金融和交易的知识内容。

13.1 技术栈

编程基础

网络安全相关法律法规Linux操作系统计算机网络HTML基础PHP基础MySQL基础

WEB渗透

协议虚拟机操作系统信息收集Web漏洞攻击与防范(重点)组件漏洞攻击与防范网络协议漏洞攻击与防范流程/报告

内网渗透

Python代码审计渗透测试神器内网渗透WAF项目

安全防护

基线检查及安全加国安全事件应急响应等保2.0

13.2 就业分析

网络安全这个领域,目前并没有引起国内公司的重视。除了一些头部的互联网企业或是本身就是从事网络安全领域的公司之外,很少会有一般的企业会有相关的岗位,所以岗位算不上多。但是如果能应聘到对应的企业,待遇还是相当不错的,感兴趣的同学可以自己去详细了解一下。

14.1 技术栈

VMware大数据hadoopk8s内核技术指令集虚拟化内存虚拟化I/O虚拟化设备虚拟化硬件加速器

14.2 就业分析

该方向的平均薪资并不会太高,普遍是15K左右,且并不是适合应届生,对应届生释放岗位少,而且还需要有相关开发经验。但是岗位数量同比23年是有所增长的。

15.1 技术栈

MySQLSQLserverinnodbc/c++数据结构与算法网络编程

15.2 就业分析

数据库开发对于学历要求不会太高,普遍本科,大专也可以。在薪资上24年同比23年平均值有所下滑。

16.1 技术栈

c/c++语言性能分析Linux内核网络协议深度学习框架cuda可参考后端开发技术栈

16.2 就业分析

该岗位工资待遇奇高,保底都是20K往上,但是对于技术能力以及学历要求也是极高。不适合普硕,本科就不用考虑了。

17.1 技术栈

数学数据结构与算法机器学习深度学习数据库对应算法方向相关知识

17.2 就业分析

算法岗位确确实实算是高薪且有十分有前景的方向之一,但是不少同学往这方面冲,却头破血流。原因在于,它不是我们所说的开发,应该算的上说的研发岗位。不需要你去做业务开发,对于个人的学历背书,学业成绩,竞赛奖项,顶会篇数都是有要求的。因此被刷下来的人数也极多。是好岗位,但是没有普适性,只适合那么拔尖的一小撮同学去尝试。

18.1 技术栈

操作系统原理

18.2 就业分析

基本没啥岗位,一个萝卜一个坑,稳定性极强。只要你技术过关,基本不会缺工作。反之,你也会没有工作。而且学习难度极大,没有培训的课程,也没有自学的资料。

19.1 技术栈

操作系统驱动原理

19.2 就业分析

同系统开发,大家知道有这个方向即可。都是不推荐。

不管是学习哪种语言,从事哪个方向的开发工作。项目是我们求职面试中必不可少的一部分。目前来说,可以免费学习的开源项目是有很多的,但是需要我们自己认真挑选。选的项目,自己既要能吃透,又要有质量,不到万不得已,不要去写垃圾项目,或者说是烂大街的项目,比如webserver,真的就别写了,面试官估计都看吐了。

阅读学习一些库、框架以及集成项目的源码,学习大厂或是大牛的编码规范、项目结构之类的,提高阅读源码的能力,对于我们精进自己的技术是十分有帮助的。

1.1《30天自制C++服务器》

①语言:c++

②来源:GitHub 目前star:4.8k

③项目地址:https://github.com/yuesong-feng/30dayMakeCppServer

④类型:免费

1.2《btop》(命令行资源监视器)

①语言:c++

②来源:GitHub 目前star:16.1k

③项目地址:https://github.com/aristocratos/btop

④类型:免费

1.3 C++轻量级WebServer服务器

①主要语言:c++、c

②来源:GitHub 目前star:15k

③项目地址:https://github.com/qinguoyi/TinyWebServer

④类型:免费

1.4 剪贴板工具

①主要语言:c++

②来源:GitHub 目前star:4.3k

③项目地址:https://github.com/Slackadays/Clipboard

④类型:免费

1.5 dbg

①主要语言:c++

②来源:GitHub 目前star:2.8k

③项目地址:https://github.com/sharkdp/dbg-macro

④类型:免费

1.6 计算机操作系统

①主要语言:c、c++

②来源:GitHub 目前star:20.9k

③项目地址:https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

④类型:免费

1.7 myscan

①主要语言:c

②来源:GitHub 目前star:188

③项目地址:https://github.com/nobackdoor/myscan

④类型:免费

1.8 超轻量型 Http Server

①主要语言:c

②来源:GitHub 目前star:11k

③项目地址:https://github.com/EZLippi/Tinyhttpd

④类型:免费

1.9 跨平台的c++<->lua服务器快速解决方案

①主要语言:c、c++、lua

②来源:GitHub 目前star:316

③项目地址:https://github.com/jwcpp/jwEngine

④类型:免费

1.10 C 语言编译器

①主要语言:c

②来源:GitHub 目前star:9.8k

③项目地址:https://github.com/DoctorWkt/acwj

④类型:免费

1.11 数据库

①主要语言:c、Ruby

②来源:GitHub 目前star:9.2k

③项目地址:https://github.com/cstack/db_tutorial

④类型:免费

1.12 用于学习操作系统的简单内核

①主要语言:c、python、c++

②来源:GitHub 目前star:2.9k

③项目地址:https://github.com/Simple-XX/SimpleKernel

④类型:免费

1.13 本地的 DNS 服务器

①主要语言:c、c++

②来源:GitHub 目前star:7.7k

③项目地址:https://github.com/pymumu/smartdns

④类型:免费

1.14 libqalculate

①主要语言:c++、c

②来源:GitHub 目前star:1.6k

③项目地址:https://github.com/Qalculate/libqalculate

④类型:免费

1.15 spdlog

①主要语言:c++、c

②来源:GitHub 目前star:22.2k

③项目地址:https://github.com/gabime/spdlog

④类型:免费

1.16 CPlusPlusThings

①主要语言:c++

②来源:GitHub 目前star:37.2k

③项目地址:https://github.com/Light-City/CPlusPlusThings

④类型:免费

1.17 indicators(进度条库)

①主要语言:c++

②来源:GitHub 目前star:2.8k

③项目地址:https://github.com/p-ranav/indicators

④类型:免费

1.18 sudoku(数独游戏)

①主要语言:c++

②来源:GitHub 目前star:887

③项目地址:https://github.com/mayerui/sudoku

④类型:免费

1.19 Workflow(搜狗公司的服务器引擎)

①主要语言:c++、c

②来源:GitHub 目前star:12.4k

③项目地址:https://github.com/sogou/workflow

④类型:免费

1.20 ThreadPool( 线程池实现)

①主要语言:c++

②来源:GitHub 目前star:7.5k

③项目地址:https://github.com/progschj/ThreadPool

④类型:免费

1.21 Tinytetris(终端版俄罗斯方块游戏)

①主要语言:c++

②来源:GitHub 目前star:2.8k

③项目地址:https://github.com/taylorconor/tinytetris

④类型:免费

1.22 MyTinySTL(实现属于你自己的 STL)

①主要语言:c++

②来源:GitHub 目前star:10.7k

③项目地址:https://github.com/Alinshans/MyTinySTL

④类型:免费

1.23 C-Plus-Plus(用 C++ 实现的各种算法的集合)

①主要语言:c++

②来源:GitHub 目前star:29.1k

③项目地址:https://github.com/TheAlgorithms/C-Plus-Plus

④类型:免费

1.24 calculator(计算器工具)

①主要语言:c++、c#

②来源:GitHub 目前star:28.9k

③项目地址:https://link.zhihu.com/?target=https%3A//github.com/microsoft/calculator

④类型:免费

1.25 手把手教你从零开始实现一个 JSON

①主要语言:c++

②来源:GitHub 目前star:7.5k

③项目地址:https://github.com/miloyip/json-tutorial

④类型:免费

1.26 烂大街的HTTP服务器

①主要语言:c++、c

②来源:GitHub 目前star:7.4k

③项目地址:https://github.com/linyacool/WebServer

④类型:免费

1.27 从0开始手把手教你做的服务器框架

①主要语言:c++、c

②来源:B站 目前播放量:33.2W

③项目地址:https://www.bilibili.com/video/av53602631/?from=search&seid=9029288577396826503

④类型:免费

1.28 Webbench

①主要语言:c

②来源:GitHub 目前star:2.6k

③项目地址:https://github.com/EZLippi/WebBench

④类型:免费

1.29 轻量级键值型数据库

①主要语言:c++

②来源:GitHub 目前star:2k

③项目地址:https://github.com/youngyangyang04/Skiplist-CPP

④类型:免费

1.30 Facebook

①主要语言:c++

②来源:GitHub 目前star:27.1k

③项目地址:https://github.com/facebook/folly

④类型:免费

1.31 LevelDB

①主要语言:c++、c

②来源:GitHub 目前star:35k

③项目地址:https://github.com/google/leveldb

④类型:免费

1.32 SRPC

①主要语言:c++

②来源:GitHub 目前star:1.9k

③项目地址:https://github.com/sogou/srpc

④类型:免费

1.33 phxrpc

①主要语言:c++

②来源:GitHub 目前star:1.9k

③项目地址:https://github.com/Tencent/phxrpc

④类型:免费

1.34 Sourcetrail

①主要语言:c++、Java

②来源:GitHub 目前star:14.2k

③项目地址:https://github.com/CoatiSoftware/Sourcetrail

④类型:免费

1.35 chinessChess(中国象棋)

①主要语言:c++

②来源:GitHub 目前star:655

③项目地址:https://github.com/CoatiSoftware/Sourcetrail

④类型:免费

1.36 hplayer(基于 C++ 实现的多画面播放器)

①主要语言:c++、c

②来源:GitHub 目前star:857

③项目地址:https://github.com/ithewei/hplayer

④类型:免费

1.37 FlowChar

①主要语言:c++

②来源:GitHub 目前star:561

③项目地址:https://github.com/Gusabary/FlowChar

④类型:免费

1.38 notepanda(记事本)

①主要语言:c++

②来源:GitHub 目前star:311

③项目地址:https://github.com/ChungZH/notepanda

④类型:免费

1.39 contour(终端模拟器)

①主要语言:c++

②来源:GitHub 目前star:2.2k

③项目地址:https://github.com/contour-terminal/contour

④类型:免费

1.40 ThreadPool(C++11 线程池实现)

①主要语言:c++

②来源:GitHub 目前star:7.5k

③项目地址:https://github.com/progschj/ThreadPool

④类型:免费

1.41 xournalpp(笔记软件)

①主要语言:c++

②来源:GitHub 目前star:10.2k

③项目地址:https://github.com/xournalpp/xournalpp

④类型:免费

1.42 netdata(Linux 系统性能实时监控工具)

①主要语言:c、JavaScript、go、Python

②来源:GitHub 目前star:68.1k

③项目地址:https://github.com/netdata/netdata

④类型:免费

1.43 uWebSocket

①主要语言:c、c++

②来源:GitHub 目前star:16.7k

③项目地址:https://github.com/uNetworking/uWebSockets

④类型:免费

1.44 TeamTalk(即时通信工具)

①主要语言:c++、objective-c、c

②来源:GitHub 目前star:776k

③项目地址:https://github.com/balloonwj/TeamTalk/tree/master

④类型:免费

1.45 HP-Socket(高性能网络通信框架)

①主要语言:c、c++

②来源:GitHub 目前star:5.5k

③项目地址:https://github.com/ldcsaa/HP-Socket

④类型:免费

1.46 hikyuu(基于 C++/Python 的开源量化交易研究框架)

①主要语言:c、c++

②来源:GitHub 目前star:2k

③项目地址:https://github.com/fasiondog/hikyuu

④类型:免费

1.47 Tars(高性能RPC开发框架)

①主要语言:c++

②来源:GitHub 目前star:9.8k

③项目地址:https://github.com/TarsCloud/Tars

④类型:免费

1.48 LiteIDE X

①主要语言:c++、c

②来源:GitHub 目前star:7.4k

③项目地址:https://github.com/visualfc/liteide

④类型:免费

1.49 tcpcopy(分布式TCP压力测试工具)

①主要语言:c

②来源:GitHub 目前star:4.3k

③项目地址:https://github.com/session-replay-tools/tcpcopy

④类型:免费

1.50 TensorFlow(机器学习系统)

①主要语言:c++、Python

②来源:GitHub 目前star:182k

③项目地址:https://github.com/tensorflow/tensorflow

④类型:免费

1.51 Percona Server(MySQL 衍生版)

①主要语言:c++、c

②来源:GitHub 目前star:1.1k

③项目地址:https://github.com/percona/percona-server

④类型:免费

1.52 ProxySQL (数据中间层项目)

①主要语言:c++、c

②来源:GitHub 目前star:5.8k

③项目地址:https://github.com/sysown/proxysql

④类型:免费

1.53 Seafile(开源网盘云存储)

①主要语言:c、Python

②来源:GitHub 目前star:11.6k

③项目地址:https://github.com/haiwen/seafile

④类型:免费

1.54 pybind11(轻量级的C++库)

①主要语言:c++、Python

②来源:GitHub 目前star:14.8k

③项目地址:https://github.com/pybind/pybind11

④类型:免费

1.55 Catch2(C++单元测试框架)

①主要语言:c++

②来源:GitHub 目前star:18k

③项目地址:https://github.com/catchorg/Catch2

④类型:免费

1.56 nlohmann/json

①主要语言:c++

②来源:GitHub 目前star:40.2k

③项目地址:https://github.com/nlohmann/json

④类型:免费

1.57 fmtlib/fmt(C++格式化库)

①主要语言:c++

②来源:GitHub 目前star:19.3k

③项目地址:https://github.com/fmtlib/fmt

④类型:免费

1.58 OpenCV

①主要语言:c++、c

②来源:GitHub 目前star:75.5k

③项目地址:https://github.com/opencv/opencv

④类型:免费

1.59 googletest(Google的C++测试框架)

①主要语言:c++、python

②来源:GitHub 目前star:33.1k

③项目地址:https://github.com/google/googletest

④类型:免费

1.60 abseil-cpp(Google的C++代码库)

①主要语言:c++

②来源:GitHub 目前star:13.9k

③项目地址:https://github.com/abseil/abseil-cpp

④类型:免费

1.61 DirectXTK(微软的DirectX工具包)

①主要语言:c++

②来源:GitHub 目前star:2.5k

③项目地址:https://github.com/microsoft/DirectXTK

④类型:免费

1.62 Electron

①主要语言:c++、typescript

②来源:GitHub 目前star:112k

③项目地址:https://github.com/electron/electron

④类型:免费

1.63 Avem(轻量级无人机飞控项目)

①主要语言:c

②来源:GitHub 目前star:1.8k

③项目地址:https://github.com/avem-labs/Avem

④类型:免费

1.64 Awesome-Embedded(嵌入式资源汇总的项目)

①主要语言:

②来源:GitHub 目前star:5k

③项目地址:https://github.com/nhivp/Awesome-Embedded

④类型:免费

1.65 Libevent(事件驱动库)

①主要语言:c

②来源:GitHub 目前star:10.7k

③项目地址:https://github.com/libevent/libevent

④类型:免费

1.66 Memcached

①主要语言:c

②来源:http://memcached.org/

③项目地址:http://memcached.org/

④类型:免费

1.67 FreeNOS

①主要语言:c++、c

②来源:GitHub 目前star:2k

③项目地址:https://github.com/Neirth/FreeNOS

④类型:免费

⑤介绍:FreeNOS (Free Niek’s Operating System)是一个实验性的基于微内核的操作系统,用于学习,用c++编写。您可以根据GPLv3的条款随意使用该代码。

1.68 musikcube

①主要语言:c++、kotlin、c

②来源:GitHub 目前star:4k

③项目地址:https://github.com/clangen/musikcube

④类型:免费

⑤介绍:一个跨平台的,基于终端的音频引擎,库,播放器和服务器写在c++中。

1.69 tmux

①主要语言:c、roff

②来源:GitHub 目前star:32.9k

③项目地址:https://github.com/tmux/tmux

④类型:免费

⑤介绍:Tmux是一种终端多路复用器:它允许在一个屏幕上创建、访问和控制多个终端。Tmux可以从屏幕上分离,在后台继续运行,然后重新连接。

1.70 How-to-Make-a-Computer-Operating-System

①主要语言:c、c++

②来源:GitHub 目前star:21k

③项目地址:https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

④类型:免费

⑤介绍:如何用c++制作计算机操作系统

1.71 Serial-Studio

①主要语言:c++、c

②来源:GitHub 目前star:4.1k

③项目地址:https://github.com/Serial-Studio/Serial-Studio

④类型:免费

⑤介绍:多用途串行数据可视化处理程序

1.72 WinMerge

①主要语言:c++、inno setup、c

②来源:GitHub 目前star:5.7k

③项目地址:https://github.com/WinMerge/winmerge

④类型:免费

⑤介绍:WinMerge 是适用于 Windows 的开源差异和合并工具。 WinMerge 可以比较文件夹和文件,以易于理解和处理的视觉文本格式呈现差异。

1.73 WizQTClient

①主要语言:c、c++

②来源:GitHub 目前star:2.6k

③项目地址:https://github.com/WizTeam/WizQTClient

④类型:免费

⑤介绍:该项目基于Qt,旨在提供一个基于云使用的优秀PKM(个人知识管理)桌面环境。

1.74 kingpin

①主要语言:c++

②来源:GitHub 目前star:51

③项目地址:https://github.com/GeniusDai/kingpin

④类型:免费

⑤介绍:基于IO多路复用和线程池的高性能c++网络库

1.75 flamingo

①主要语言:c++、c、Java

②来源:GitHub 目前star:3.6k

③项目地址:https://github.com/balloonwj/flamingo

④类型:免费

⑤介绍:Flamingo IM 是一款高性能、轻量级的开源即时通讯软件,目前包括服务器端、pc 端、安卓端,微信版本和 IOS 版本目前正在开发中。

1.76 ZLToolKit

①主要语言:c

②来源:GitHub 目前star:1.8k

③项目地址:https://github.com/ZLMediaKit/ZLToolKit

④类型:免费

⑤介绍:一个基于C++11的轻量级网络框架,基于线程池技术可以实现大并发网络IO

1.77 duck_db

①主要语言:c++

②来源:GitHub 目前star:454

③项目地址:https://github.com/enpeizhao/duck_db

④类型:免费

⑤介绍:c/c++ build a simple b+tree RDMS(利用c/c++ 开发基于B+树的小型关系型数据库 )

1.78 Easy-Reactor

①主要语言:c++

②来源:GitHub 目前star:442

③项目地址:https://github.com/LeechanX/Easy-Reactor

④类型:免费

⑤介绍:Easy-Reactor是一个Linux C++高性能TCP服务框架,基于Reactor模式,支持单线程、多线程Reactor,也支持UDP服务

1.79 HighPerformanceConcurrentServer

①主要语言:c++、c

②来源:GitHub 目前star:460

③项目地址:https://github.com/CandyConfident/HighPerformanceConcurrentServer

④类型:免费

⑤介绍:基于C++11、部分C++14/17特性的一个高性能并发httpserver,包括日志、线程池、内存池、定时器、网络io、http、数据库连接等模块。模块间低耦合高内聚,可作为整体也可单独提供服务。对各模块提供单元测试,对httpserver整体提供性能测试。

1.80 GoBangByCpp

①主要语言:c++

②来源:GitHub 目前star:55

③项目地址:https://github.com/zz2summer/GoBangByCpp

④类型:免费

⑤介绍:C++实现双人对战五子棋项目

白嫖的资源,大家只要通过有心的整理和归纳,相信都是能够找到一些不错的项目来学习。但是其过程会比较费时费力。如果有同学是急于找工作缺项目的话,付费课程的项目会是一种比较快捷的方式。项目类型即不会太频繁,又能快速吃透项目的难点和考点。

付费项目咨询,可以加ytbc233

2.1 即时通讯项目(基于开源项目teamtalk二次开发)

2.1.1 即时通讯项目模块简介

Android/iOS/PC:各种客户端。LoginServer: 主要负责负载均衡的作用,当收到客户端的请求时,分配一个负载最小的MsgServer给客户端。MsgServer: TT的主要服务端,负责维护各个客户端的连接,消息转发等功能。负责消息路由的功能,当msg_server发现某个用户不在本服务器内,而又有消息需要发给他,就会将消息转发给route_server,route_server会将消息发给相应的msg_server,由此可知,route_server也维护了一定的用户状态。DBProxy: 在TT中负责了主要的业务逻辑,主要与存储层打交道,提供mysql以及redis的访问服务,屏蔽其他服务器与mysql与redis的直接交互。FileServer: 文件服务器,提供客户端之间得文件传输服务,支持在线以及离线文件传输。MsfsServer: 图片存储服务器,提供头像,图片传输中的图片存储服务。PushServer: 负责Android、IOS客户端提醒消息的推送,类似微信的锁屏提醒消息。Webserver:简单的管理功能。

2.1.2 即时通讯框架图

2.1.3 即时通讯重点内容

通信协议

httpSocket tcpwebsocket

数据库设计

数据库表设计分表设计密码存储方式最近会话表未读消息如何体现聊天消息分表问题

单聊消息发送流程

单聊消息发送流程怎么保证数据的不丢失消息序号在哪里生成消息序号生成方式消息发送时的seq有什么作用消息发送后服务器怎么应答接收端收到数据后如何应答

群成员管理

如何创建群如何删除群如何修改群如何遍历群成员如何使用redis缓存群成员

群聊消息

如何推送群聊群消息计数器群会话如何更新

单聊消息未读计数

服务端如何保存未读消息计数客户端未读消息计数从何而来什么时候清除未读消息计数如何清除未读消息计数

MySQL/Redis连接池设计

多个连接池如何管理连接池设计机制连接池连接数量设置多大合适

文件传输原理

文件传输原理在线传输和离线传输区别如何优化文件转发效率

并发能力

Reactor网络模型如何做到百万并发如何做到千万并发

2.1.4 即时通信操作

配置服务器地址

最近会话列表

联系人列表

我的群组

未读消息

单聊对话框

发送图片

发送文件

群聊对话框

2.2 图像共享云储存(上线项目,从零构建)

2.2.1 项目关键技术

fastdfs架构分析和配置fastdfs存储原理分布式fastdfs存储集群部署高负载Nginx的上传和下载文件传输和接口设计产品上云公网发布/测试用例

2.2.2 项目运行效果展示

主界面

上传图片

复制地址

访问地址

2.3 分布式Kvstore

kv存储的架构设计网络同步与事务序列化内存池的使用与LRU的实现KV存储的性能测试

2.4 协程框架NtyCo

协程起源协程案例协程实现的工作流程协程实现的原语操作协程实现的切换协程实现的定义协程实现的调度器协程多核模式协程性能测试

2.5 用户态tcp/ip协议栈

协议栈源码——徒手实现一个协议栈

以太网头,ip头,udp头,tcp头协议格式虚拟网卡netmapudp包数据解析与实现icmp/arp包数据解析

TCP协议栈深度解析

三次握手/四次挥手与Posix API关联tcp如何实现顺序传输,定时器讲解,滑动窗口tcp可靠传输epoll原理实现,与tcp协议栈的关系

2.6 魔兽世界后端TrinityCore

2.6.1 项目客户端下载

魔兽3.3.5a(Windows PC版本)

https://pan.baidu.com/share/init?surl=3PmQlCnCnfBPcFlAU4YGeg (提取码:zvtc)

2.6.2项目关键技术

TrinityCore CMake项目构建

CMake的使用Windows和Linux下编译调试环境搭建

TrinityCore数据库模块

连接池设计概要同步连接池实现异步连接池实现事务处理数据库模块实践

TrinityCore日志模块

日志模块概要日志模块实现日志模块实践

TrinityCore网络模块

阻塞io网络模型编程reactor网络模型编程Windows iocp网络编程boost.asio网络编程网络缓冲区设计网络模块实践

TrinityCore地图模块

地图模块模块概要地图模块AOI核心算法AABB算法实现碰撞检测A*寻路算法

TrinityCore技能模块

技能模块概要技能模块依赖技能模块设计实现具体技能设计实现

TrinityCore AI模块

AI模块概述野怪AI设计scriptedAI设计smartAI设计

TrinityCore战场副本

战场副本概述战歌峡谷实现阿拉希盆地实现奥特兰克山谷实现风暴之眼实现远古海滩实现征服之岛实现

2.6.3 游戏内容展示

2.7 FFmpeg+QT播放器

2.7.1 项目关键技术

播放器讲解框架分析播放器模块划分解复用模块音视频解码播放器控制音视频同步0.5~ 2.0变速播放支持seek操作上—下—播放切换支持播放列表功能支持视频截图画面自适应大小码流信息分析

2.7.2 项目实现功能

支持播放/暂停上一/下一视频变速播放文件seek播放进度显示截屏调节音量播放列表显示缓存时间实现直播低延迟播放

2.7.3 项目运行效果展示

2.8 OBS录制推流软件

2.8.1 项目关键技术

OBS vs2019+QT5.15.2编译音频配置和初始化分析音频线程模块采集和编码分析视频配置和初始化分析视频线程模块采集和编码分析OBS初始化过程分析录制流程分析麦克风采集分析桌面采集分析X264编码分析系统声音+麦克风混音推流模块分析(提供项目源码)

2.8.2 项目实现功能

支持屏幕+麦克风RTMP直播支持本地文件推送支持录制保存到本地支持录制预览功能支持添加图片水印功能支持文字水印功能支持屏幕+摄像头同时捕获支持降噪功能

2.8.3 项目运行效果展示

2.9 低延迟拉流直播

2.9.1 项目关键技术

RTMP协议分析wireshark抓包分析H264 RTMP封装AAC RTMP封装RTMP拉流实战H264 RTMP解析AAC RTMP解析RTMP推流实战没有MetaData能否播放RTMP推流是否会导致延迟RTMP推流如何动态调整码率RTMP推流如何动态调整帧率RTMP拉流是否会导致延迟如何检测RTMP拉流延迟如何解决RTMP播放延迟fplay. vlc能否用来测试播放延迟RTMP拉流播放变速策略设置

2.9.2 项目运行效果展示

2.10 spdk文件系统实现

spdk blob文件系统设计分析文件系统引入线程与json配置解析文件系统四层架构设计与构建git版本管理从blob读写到文件系统的原语操作实现syscall的hook实现基数树对文件系统内存管理文件系统hook api的设计与实现文件系统posix api的兼容问题与文件夹设计

2.11 Office办公自动化文字编辑软件

2.11.1 项目体验下载

Office办公自动化文字编辑软件V2.1 ( Windows PC版本)

https://pan.baidu.com/share/init?surl=7FudAR2VyZMKXmijNP5CVQ (提取码:i6ak)

2.11.2 项目关键技术

技术栈链接:https://www.0voice.com/uiwebsite/html/courses/qt/qt-v1.2.html

2.11.3 项目运行效果展示

【工具栏】点击快捷图标–【新建文档】或在【菜单】中点击–【新建 Ctrl+N】子菜单。

【Office办公自动化文字编辑软件】–【新建多个文档】。

【Office办公自动化文字编辑软件】–编辑文档等等(其余各项功能大家们可下载运行)。

2.12 MP3音乐播放器搜索引擎

2.12.1 项目体验下载

MP3音乐播放器搜索引擎V2.0 ( Windows PC版本)

https://pan.baidu.com/share/init?surl=iOpZE3sBNTk_dvbQdlZUjQ (提取码:b5vi)

2.12.2 项目关键技术

技术栈链接:https://www.0voice.com/uiwebsite/html/courses/qt/qt-v1.2.html

2.12.3 项目运行效果展示

打开【MP3音乐播放器搜索引擎】。

在【地址栏】输入自己想听歌曲,点击【Search】按钮即可,搜索成功歌曲则显示出来。

若想播放本地歌曲,直接点击【文件夹】图标按钮加载本地歌曲即可。

歌曲加载成功(本地歌曲或搜索网络歌曲),点击【播放】按钮即可欣赏音乐,

标题栏显示动态歌曲信息,可选择操作【暂停】、【停止】、【上一曲】、【下一曲】等。

2.13 商品库存管理系统

2.13.1 项目体验下载

商品库存管理系统V2.2 ( Windows PC版本)

https://pan.baidu.com/share/init?surl=HHmfhI9Rvz_Zl2m1WtekIw (提取码:hcxx)

2.13.2 项目关键技术

技术栈链接:https://www.0voice.com/uiwebsite/html/courses/qt/qt-v1.2.html

2.13.3 项目运行效果展示

打开【商品库存管理系统】后,显示用户验证窗口,输入用户名和密码点击【系统登录】按钮,

如果验证成功方可登录,失败无法登录。若没有用户名点击【注册用户】按钮,根据提示操作即可。

系统登录成功之后,【商品库存管理系统】主界面。

点击【新增商品】按钮,实现添加商品操作。

点击【商品出库】按钮,实现商品出库操作。

点击【商品汇总】按钮,实现商品汇总操作。点击【数据备份】按钮,实现数据备份,导出数据文档,其余功能不在展示出来。

2.14 客户端与服务器架构系统(文件传输)

2.14.1 项目体验下载

客户端与服务器架构系统(文件传输) V1.6 ( Windows PC版本)

https://pan.baidu.com/share/init?surl=Qr6PhrS9eBKbDwBoZOZxig (提取码:bdjv)

2.14.2 项目关键技术

技术栈链接:https://www.0voice.com/uiwebsite/html/courses/qt/qt-v1.2.html

2.14.3 项目运行效果展示

打开【客户端与服务器架构系统】服务器端,点击【启动监听】按钮,等待客户端连接。

打开【客户端与服务器架构系统】客户端,点击【连接服务器】按钮连接服务器端。

客户端与服务器双方连接成功之后,客户端向服务器发送消息。

服务器收到客户端发来的消息,并回复客户端消息。

服务器回复客户端的消息。

客户端收到服务器回复的消息,双方等操作。

服务器向客户端询问,是否有【剪映专业版】工具安装软件

客户端收到服务器的请求问

服务器收到客户端回复消息,确认有此软件

客户端点击【选择文件】按钮,找【剪映专业版】工具安装软件,之后点击【发送文件】按钮传输给服务器。

客户端与服务器双方正在传输文件中

客户端提示:文件已成功传输到服务器。

2.15 即时通讯:模拟腾讯QQ客户端聊天软件

2.15.1 项目体验下载

即时通讯:模拟腾讯QQ客户端聊天软件V2.0 ( Windows PC版本)

https://pan.baidu.com/share/init?surl=qN9qco-WSx8QRsOEeTSizA (提取码:8f5t)

2.15.2 项目关键技术

技术栈链接:https://www.0voice.com/uiwebsite/html/courses/qt/qt-v1.2.html

2.15.3 项目运行效果展示

打开【模拟腾讯QQ客户端聊天软件】后台管理平台,通过管理权限登录。

登录【模拟腾讯QQ客户端聊天软件】后台管理平台成功之后界面。

根据需要选择左侧各项功能–密码修改。

根据需要选择左侧各项功能–数据备份。

QQ客户端登录。

QQ客户端–登录配置参数设置。

QQ客户端–darren用户登录。

darren用户登录成功后,后台管理平台显示此用户在线状态。

QQ客户端–vico用户登录。

vico用户登录成功后,后台管理平台显示此用户在线状态。

QQ客户端登录成功后,可选择对应的好友进行通信(聊天、文件传输等功能)。

2.16 视频播放器软件Qt+FFmpeg

2.16.1 项目体验下载

视频播放器软件Qt+ FFmpeg ( Windows PC版本)

https://pan.baidu.com/share/init?surl=Nk2sBrEZNiXToyM5qT6nHw (提取码:wk9d)

2.16.2 项目关键技术

技术栈链接:https://www.0voice.com/uiwebsite/html/courses/qt/qt-v1.2.html

2.16.3 项目运行效果展示

打开【视频播放器软件】,显示界面效果。

【视频播放器软件】,点击右下角【列表】按钮,可看到是否有视频文件。

【视频播放器软件】,点击【画面】菜单–【方向】子菜单功能。

【视频播放器软件】,点击【画面】菜单–【色调】子菜单功能。

打开视频文件,实现播放功能。

正在播放视频,且打开新视频文件等功能。

【视频播放器软件】各项功能不在全部展示(各位朋友们下载运行即可)。

2.17 TCP/UDP协议网络调试助手

2.17.1 项目体验下载

TCP/UDP协议网络调试助手V1.2 ( Windows PC版本)

https://pan.baidu.com/share/init?surl=7hiJj9_ABfp9ZyHeuLhjEA (提取码:zqhn)

2.17.2 项目关键技术

技术栈链接:https://www.0voice.com/uiwebsite/html/courses/qt/qt-v1.2.html

2.17.3 项目运行效果展示

打开要测试的【客户端与服务器架构系统】软件的【TCP服务器】,且启动监听

打开【网络调试助手】,使用【客户端】功能去测试服务器。

使用【网络调试助手】的【客户端自动化测试】功能,来测与服务器连接是否成功。

服务器端收到【网络调试助手】发来消息,证明测试成功。

使用【网络调试助手】的【服务器】功能,来测试客户端软件。

打开【客户端与服务器架构系统】软件的【TCP客户端】,点击【连接服务器】按钮。

【网络调试助手】收到有新客户端连接,证明客户端测试成功。

【客户端与服务器架构系统】软件的【TCP客户端】,向【网络调试助手】发送消息。

【网络调试助手】收到客户端发来的消息。

打开两个【TCP网络调试助手】程序,互相测试。

打开两个【UDP网络调试助手】程序,互相测试。

简历的内容的重要性不言而喻。在很多同学投递简历之后,压根收不到面试要求。明明在投递的时候,自己的学历与技能描述都是明确符合公司岗位招聘要求的,但就是没有面试机会。原因其实很简单,没有亮点。

简历上核心7点:

学校学历成绩奖项技术能力实习经历项目经验

这七点里面你总的有个两三处能突出一些,吸引到HR的眼球吧。

如果是投简历不顺,得不到面试机会的同学,推荐看一下这个视频:https://www.bilibili.com/video/BV1gm411k7GS/?spm_id_from=333.999.0.0&vd_source=56f91296413b106381a65e3c0f0a87d8

在我们前面的技术学习也好,项目学习也好,都是闭门造车。实习能让你提前有和真实用户的项目打交道,也能和一线的开发深层次的接触,会有比较好的学习机会。而且实习是有转正率的,如果能提前转正拿到offer,那毕业的最后一年你也会很好过。

实习方向与求职岗位方向的相关性实习参与项目与求职岗位的相关性实习技术栈与求职岗位的相关性

有实习证明可以开有上班工资可以拿有项目模块可以学

有时候offer多也不一定是一件好事,大喜到大悲也就在一念之间。选错offer,孤注一掷赌大厂offer,最后零收获的例子常有。所有大家在选择offer的时候,不要武断,多分析,多找有经验的学长学姐或是相关有经验的程序员取取经,小心无大错。公司泡你池子,给你口头offer,最后发了offer毁约的不是没有。

c/c++方向就业案例分析:https://www.yuque.com/lingshengxueyuan/0voice/rw8cgz#lmRCO

有大量的真实就业情况案例,供大家参考

程序员yt可推荐c/c++多个方向的就业课程以及服务

就业课程方向包括:

c++后端存储量化高性能网络音视频Qt游戏后端

等,以及对应有视频/直播教程,文档资源代码,课程技术答疑,简历书写指导,面试复盘,offer选择等就业服务。详细了解咨询:ytbc233【备注:咨询】。

对于现在的c/c++就业环境来说,学历的门槛似乎越来越高,对于92本硕的同学来说,没有工作的还是在少数。难就难在普本的同学。学的又是相关专业,招聘要求又高,就业还是有点难搞。那普本的同学该如何发力才更有机会机会呢?

代码优势奖项优势项目优势影响力优势

如果想逆袭成功,这四点大家是可以去发力。但是都是需要时间是准备筹划的,不是一步登天。最好是大二或是研一的时候就要开始准备。学编程,特别是c++没有一蹴而就,再天才型的选手,如果选择做开发,都要有代码量的累积。所以,大家如果不想毕业时焦虑万分,最好就是趁现在时间还早,早做计划,扎实学习。还是那句话:机会是留给有准备的人的!

标签:  
录像推荐
英超德甲法甲西甲意甲NBA
热门标签

首页

足球

蓝球

录像

新闻