C++开发需要掌握哪些技能?

一、语言基础
无论C++开发还是Java开发,对于码农来说,最重要的是熟悉编程语言。同理,无论从事何种工作,首当其冲的就是要掌握好语言基础。

C++是一种博大精深的编程语言,它既有继承于C语言的过程化程序设计思想,又包含了面向对象(OOP)的设计思想。有力且复杂。学习C++的费用相对较高,语言内部的漏洞也比较多。基本语文学习路线如下:

1、语法基础。

要点:(必须熟悉基本的机制原理)

使用指针和引用的概念指针与内存关系程序编译过程static、const、#define以及C和C++区别内存模型中的栈和堆分配。

2、面向对象基础。

(一定要熟悉基础机制原理)

OOD理解析构函数构造函数复制构造多态纯虚函数和虚函数虚函数实现机制虚函数表访问限定符public、private、protected继承原则、虚继承原则、菱形继承静态绑定和动态绑定重载、重写和隐藏new/delete和malloc/free。

3、语法进阶

(一定要熟悉基础机制原理)

在用智能指针的左值、右值引用和move语义类型转换方式时,通常采用设计模式线程安全的单例模式内存溢出和C++11的静态链接库和动态链接库。

4、STL标准模版资料库。

(必须能够进行源代码剖析)

迭代程序,空间配置程序了解常见的容器特性,使用方法和基础实现vector,list,deque,set,map,unorderedmap。

5、建议阅读书籍。

作为一本关于C++源码解析的工具书,阅读《EffectiveC++》对C++程序设计规范的深入研究,STL源码解析,极具学习价值。阅读《深入探究C++对象模型》,阅读《moreEffecticeC++》

二、算法和数据集的结构。
对一般人来说,学习算法最重要的就是能形成基本的算法思维,懂得从程序设计的角度对高重复的操作进行优化。掌握这些基本算法思想,了解常用的数据结构是非常重要的。在这方面的学习更倾向于看多想多练。

1、普通算法类型

(一定要能够手撕代码)

分类算法(冒泡、插入、选择、快排、希尔、堆排、归并、桶排、基数、计数)、串运算、数组运算、递归、追溯、分治、动态规划等。

2、常见资料结构。

(一定要熟悉基础原理和实现)

链式表格,栈,队列,树(二叉树,平衡二叉树,红黑树,B树,B+树,哈夫曼树,字典树),跳表,图表。

[外链图片转存失败,可能存在源站的防盗链机制,建议直接将图片上载(img-hxJLkMWK-1604040668260)(/img/bVcIdoh)

3、推荐书。

适合入门学习的《剑指offer》必刷66题《算法入门》尽量看一看,能啃完的都是大神。

三、计算机网络
而网络相关的东西并不多,关键在于对公共网络协议簇的认识和理解,以及对一些常规操作底层设计实现的剖析。例如:

|输入百度网址将会怎样?

编辑|扫描登录将发生什么。

1、要掌握知识点。

OSI7层模型TCP/IP5层模型TCP/IP协议总结TCP、UDP区别TCP3握手、4挥手TCP状态转换TCP状态下TIME_WAITTCP连接的建立需要为什么不是两个握手TCP第三次握手失败将发生什么TCP长连接和短链路,以及哪些TCP长连接和短链路的优缺点,TCP的拥塞控制-慢启动,拥塞避免,快重传,快速启动,如何保证TCP的可靠传输,TCP为什么可靠地进行TCP的第三次握手,TCP为什么可靠地进行TCP的TCP传输IP地址和子网掩码的ARP传输,HTTP的状态码HTTP1.0,HTTP的2.0,HTTP的2.0,HTTPS的不同之处在于,TCP如何保证TCP的可靠传输IP地址和子网掩码的可靠传输,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于。

2、介绍书籍。

在《计算机网络自上而下的方法》一书中,可以放手查阅《TCP/IP详解》,重点了解TCP、IP、UDP协议的实现。

四、数据库。
一般使用数据库其实并不难,但对于不同数据库在功能、实现机制、应用场景以及性能优化等方面都会有困难。类似地,数据库本身也是很好的项目实例,并且经常能从它中学习很多程序设计思想和模式。所以,对于数据库,应该了解如何使用、为什么使用、如何使用好这几个方面的问题。

1、重点掌握

关系型数据库与非关系型数据库的分类不同。

MySQL:

SQL常用语句MySQL内链接,外链接(左右链接,全链接)MySQL索引类型和原理MySQL事务处理实现原理ACIDMySQL数据存储引擎MySQL主从式复制原理,作用,MySQL日志系统redolog,binlog,undologMVCC实现原理Sql优化思想理论数据库高并发解决方案。

Redis:

Redis支持数据类型Redis持久Redis模式主从复制一致性散列算法。

2、介绍书籍。

High-Mysql能加深对Mysql的理解,并且能使用Redis设计和实现,这是一本比较全面的书,可以看看。

五、操作系统。
作业系统的问题主要集中在进程和线程上,但这种类型的问题常常作为开放题出现。重点研究对操作系统组件和运行流程的理解。例如:

|系统的开机登录有何影响?

|如何进行复制粘贴操作?

1、关键把握好。

实体及虚拟存储器缓存IO和直接IO作业调度算法线程以及进程进程和线程的调度线程的创建和结束线程间通信与线程同步机制互斥和信号量线程池使用者和生产者死锁并发和并行。

2、介绍书籍。

“计算机系统的深度理解”这本非常全面的书,这一本足够了。

六、Linux系统。
熟练使用Linux系统是进行后台开发/服务器开发必须具备的技能之一。在这一年里,不会有几条Linux指令羞愧地说它是敲代码的。不管是客户端还是前端的同学表示不服还是对Linux系统的掌握不管是哪一个方向,都有用武之地。

1、linux系统操作和命令。

top命令psnetstat命令awk命令find命令grep命令wc命令sed命令head和tail命令正则表达式如何查找100个IP地址最频繁出现的linux如何统计某个字符串在linux启动的第一个进程linux查看端口占用了linux查看CPU和内存使用Linux查看系统负载命令Linux调试程序Linux查看硬链接和软连接coredumpcmake和makefileShell脚本基本语法和使用。

七、Linux下的网络编程。
背景开发离不开网络编程,甚至简单地说,背景开发就是使用强大的计算机来处理大量的网络请求。因此,对于一个合格的后端开发人员来说,熟悉Linux网络编程非常重要。

1、重点掌握

欲了解更多信息,获取更多信息,请加入我的企鹅圈O!!!

   孤儿进程、僵尸进程和守护进程进程间通信方式signal、file、pipe、shm、sem、msg、socket线程同步机制线程:互斥体、锁机制、条件变量、信号灯、读写锁返回值五大IO模型:阻塞I/O、非阻塞I/O、I/O复用、信号驱动I/O、异步I/OIO复用机制和select/pollLT水平和ET边缘触发Reactor和Proactor模式反向代理,负载均衡。

2、介绍书籍。

APUE《UNIX环境高级编程》更难啃,可以选择看《UnixNetworks》UNP同样更难啃,可以选择看《Linux多线程服务器端编程》Muduo网络库,建议看源码实现《深入理解Nginx》,深入了解基于C的web服务器实现。

八、项目准备
若您已准备好以上所有内容,则相信您已具备C++后台开发能力。但请记住,一个大型在线项目的开发,绝不仅仅是单一语言的设计和实现。

所以,使用C++、Java、Golang或Python可能并不太好区分,它们都有各自的长处,毕竟存在即真理。因此,如果你真的有能量的话,不妨也了解一下更深层的技巧:

Dubbo,SpringCloud,Zookeeper,Kfaka流媒体分发技术CDN,海量日志处理和并行计算开发分布式技术框架,中间件等。

这些当然都是不必要的,但绝对是亮点!另外,您可以准备一些基本方向的相关内容:

NetworkLibrary,可以参考Muduo或Nginx实现web服务器/http服务器,可以实现基本的http响应请求和处理简单版STL库,展示C++的综合代码能力局域网聊天室开发,涉及到网络编程实现,线群聊分布式日志系统数据库设计,可以参考一些C++的常用库,做一些有趣的小工具。

免费领取C++学习资料包

C++开发需要掌握哪些技能?_第1张图片

你可能感兴趣的:(C++,c++)