C++技术路线

第一篇:

随着互联网及互联网+深入蓬勃的发展,经过40余年的时间洗礼,C/C++俨然已成为一门贵族语言,出色的性能使之成为高级语言中的性能王者。而在今天,它又扮演着什么样重要的角色呢?请往下看:

后端服务器,移动互联网后端,经典Windows界面开发,移动互联网端界面开发,跨平台界面开发,图形分析,系统架构,应用设计,还有现在最为流行的分布架构等一些新的技术领域。

 这么牛的语言,你是不是想知道怎样学习和掌握它呢?接下来请看经过小编整理过C/C++工程师必备知识的思维导图。

初学者看到这么密集的知识点,是不是有点眼晕呢?的确,C/C++是一门知识面覆盖很广的学科。想学好C/C++的你并不需要慌张,内容虽多,但依然有法可依。只要有足够的耐心和毅力,加上正确的学习方法,就不怕你学不好C/C++。

既然如此,C/C++开发到底需要学些什么呢,又应该怎么学呢?接下来由黑马程序员C/C++学院教你如何从零基础学习C/C++开发,快速进入牛人之列,掌握这门贵族语言。

 

一、初级入门阶段

在入门之初,首先要做的是通过C/C++语言的学习培养编程思维和动手能力,深刻理解面向过程和面向对象的思想方法。这个阶段你需要学习:

① C语言

数据类型、变量、内存布局、指针基础;

字符串、一维数组、二维数组;

一级指针,二级指针,三级指针,N级指针概念,指针数组和数组指针;

结构体、文件的使用;

动态库的封装和设计;

函数指针回调函数。

 

 

② C++语言

面向对象编程思想;

类的封装,构造和析构、静态成员、对象管理;

类的构造(有参构造函数、无参构造、拷贝构造、默认构造函数)和析构;

对象动态管理、友元函数、友元类、操作符重载;

C++编译器对象管理模型分析;

类对象的动态管理(new/delete);

友元函数和友元类;

运算符重载(一元运算符、二元运算符、运算符重载难点、项目开发中的运算符重载);

类的继承、多继承及其二义性、虚继承;

多态(概念、意义、原理剖析、多态案例);

虚函数、纯虚函数、抽象类(面向抽象类编程思想案例);

函数模板、类模板,模板的继承;

C++类型转换;

C++输入输出流(标准I/O 文件I/O 字符流I/O);

C++异常处理(异常机制、异常类型、异常变量、异常层次结构、标准异常库);

③ 常见常用的IDE开发工具

诸如Windows平台VC系列:VC++6.0(比较古老) ;Visual Studio2013, Visual Studio2015;Mac平台的XCode系列,还有CodeBlock,另附一些高级编辑器Notepad++, EditPlus,UE等一些开发工具的常用设置和一些常见快捷键的使用。

 

此阶段的学习难度系数不大,掌握这些内容之后,可以做些简单的小项目。当然了如果你想用这些技能找工作的话确实是比较困难的。这时你还应该在加把劲进一步学习第二阶段。

 

二、C/C++开发进阶

这一阶段的目标才是达到C/C++软件工程师开发行业的基本要求,这个阶段是我们走向C/C++开发的进阶之路,更是一个让自己找份薪水比较体面的工作的筹码。

如果在此部分遇到不懂的或者没有见过的知识点和名词,可先将本文收藏,供以后细细研读。

那么这个阶段,我们又应该掌握什么呢,继续往下看:

 

①    C++进阶之STL

STL = Standard Template Library,即标准模板库。这是提高开发效率的极品工具。通过学习此阶段,应掌握泛型编程技巧,理解容器类在C++语言中的应用模式,以及熟练掌握全部STL类的使用方法。

 

②    C++进阶之设计模式

决定一个项目成败最重要的因素是项目总体的设计,通过本阶段的学习,可掌握面向对象编程中重要的一环,是编码前建模的技巧所在。单例模式;工厂模式;代理模式;迭代模式等,这些都是你要掌握的哦。

 

③    C++进阶之数据结构基础

这是所有编程语言中最应该学习的部分,程序组成的基础之一。

顺序存储、链式存储、循环链表;

双向链表、栈(顺序和链式)、队列(顺序和链式);

栈的应用、树基本概念及遍历、二叉树;

排序算法、并归算法、选择、插入、快速、希尔。

以上这些内容你知道吗?

 

④    C++进阶之UI界面开发

掌握QT类库构架,图形界面开发模型;

掌握QT开发技巧,消息机制,图形处理;

掌握QT网络编程,UDP,TCP使用方式;

掌握QT文件处理方式,序列化;

掌握QT在windows,linux,ios,android不同平台下的移植技术。

 

⑤    C++进阶之Unix/Linux网络服务器

掌握Unix/Linux平台开发方式;

熟练使用系统调用;

熟练Unix/Linux内存管理,进程,线程调度;

熟悉网络服务器开发方式,熟练编写TCP,UCP网络服务程序;

掌握同步/异步IO模型在网络编程中的使用方式。

 

⑥ C++进阶之数据库开发

掌握SQL语言的实用技巧。Oracle,MySQL数据库的使用方式。

如果你能熟练掌握以上列出的技能,具备解决复杂问题和技术难点的能力,而且你能独立开发一些比较复杂的功能模块,那么很荣幸地告诉你,你已经达到中级水平,薪资过万对你来说简直是小菜一碟。

 

三、C++开发高级 

读到此处的你,相信你有更高的目标。即是当下炙手可热的全栈开发工程师,既晓前端,又通后台。快速定位问题,解决问题对他们来说已是小菜一碟,就是人们常说的神秘大牛,只在公司技术攻关的时候才会才看到他们的身影。

①此阶段软件开发工作所需的知识和技能相对较难,高级软件工程师编码熟练度和规范性需要达到一定要求;

②具备一定的项目能力(包括调试能力、文档编写能力、测试能力等)和综合技术素质(包括对软件生命周期的理解、对设计模式的理解、必备的行业知识和经验等);.

③了解主流的后台技术和前后端协作方式,能从全局角度理解项目的整个生命周期。

 

 

第二篇:

C/C++程序员成长之路

 

关于C/C++语言的学习,我个人有以下几点感受:

首先,做C/C++语言相关业务开发应该学什么?

1、C语言

这好像不用想,必须学的。

2、C++语言

配合对OO的学习,也是必须的。

3、UNIX下的C编程

学习了C和C++的语言后,因为我们的应用程序一般都是在UNIX环境下运行,所以,学习UNIX环境下的相关技术也是非常必要的。

4、SHELL命令及编程

要把程序在UNIX环境下运行起来,肯定需要和SHELL打交道。其实,不仅仅是编写SHELL脚本,在做UNIX环境下的日常维护系统时,需要的常用命令也要熟练掌握。

5、ORACLE

数据库方面业界的老大,我们的应用基本上都使用ORACLE数据库,又怎么不学呢。

6、JAVA等页面开发技术

至少知道它们能做什么吧。

7、质量体系

公司有管理方面的质量体系文档,包括过程管理类、项目管理类、工程管理类、支持类等4大类质量体系文档,从到公司开始,就应该学习它、掌握它、精通它。

8、编辑工具、系统工具等各种工具

包括sourceinsight、UE、PD、FTP、CRT、office、TOAD、PLSQL、Xmanager、CC等,统统都应该了解、掌握、会使用。

9、沟通能力

“茶壶煮饺子,有嘴倒不出”是技术人员的通病。如何了解用户的需求,如何掌握设计人员的想法,如何知道测试人员的意图等等,甚至包括日常工作、生活的方方面面,都需我们良好的沟通。

10、本部门的业务,及其他部门的业务

“技术是砖,业务是楼”,我们要利用手中的砖去盖什么样的楼呢?如果我们不知道业务想要实现什么,又怎能将业务需求做好,业务需求没做好,客户凭什么要付钱买单?了解其他部门的业务,就是为了做出更合理的设计。

其次,上述10点,说多不多,说少不少,应该如何去学?

1、C语言

记得在大学期间学数据结构的时候,书上说,数据结构加算法就是程序。要实现一个算法可以有多种语言,但我们选择的是C。

C语言是基础中的基础,打好坚实的基础,我们的技术根基才扎实。怎么做呢?我的建议是,找出谭浩强的《C语言程序设计》,将每个章节的练习题逐个在UNIX环境下做一遍,效果要达到编译成功、运行结果没有问题。这种基础性的练习一定要做,不要偷懒,别怕麻烦,更不要仅仅因为认为自己已经会了而不屑去做。俗语道“熟能生巧”,最起码你也可以练习指法,缩短完成代码的时间长度。说“细节决定成败”,你敲键盘的速度比别人快,也是细节,即所谓“磨刀不误砍柴工”。我个人认为,这本书作为基础性教材还是很不错的。

程序员的工作,每天需要面对的是文本文件及文本文件的记录,所以,就要求我们熟悉对文件、字符串操作的相关函数。比如,清楚掌握open、close、read、write、fopen、fgets、fclose、fwrite、fprintf等函数;知道open和fopen的区别;对于strcpy、strstr、strcmp、strncmp、strcasecmp、strcat、memset、memcpy等字符串的操作熟练。指针在C语言中的重要性不言而喻,分配了空间,就不要忘记了释放;有malloc函数,就要关心free的地方;还有,free后一定要将指针设置成NULL。

2、C++语言

可能有的同事首先想到的是《C++ Primer》,我个人认为,这本书更适合达到一定程度的同事,否则的话还是建议从谭浩强的《c++面向对象程序设计》开始。同样,练习题要认真做。熟练后有精力的话再看《C++ Primer》,可以有选择性地看。当然,那么厚的一本书,学习它还是需要一定的时间和方法的,所以,也不必在新人培训期间急于求成,可以把它作为技术支持类的书籍,在日后工作中遇到实际问题时,有针对性地深入学习。

《Effective C++》和《More Effective C++》应该作为必读书目,虽然不一定要完全照做,但书中的主旨思想还是要深入理解,即使当时无法一下子吃透,也要尽量记在头脑中。还有《Thinking in C++》也应该认真翻看,不知是否有人要抓狂了,但经典牛书又怎能不看?

下面要介绍的是《C++标准程序库》,与vector、list、set、map、string,相关的iteror如何使用,写程序的时候insert()、find()、erase()、push_back()、push_front、make_pair()基本上都要用到。

3、UNIX下的C编程

记得当年我就是捧着《UNIX 平台下 C 语言编程》这本书,开始了我的第一个程序的编写。程序是一个主控进程,用到了对目录的操作、信号量、管道等。个人认为,那本书的各个部分都堪称经典,比如除上述内容外还有进程、共享内存、进程间通信、socket、多线程等,真正学好这些,想不成高手都难。现在的话,也可以看《UNIX环境高级编程》这本书。如果涉及到网络相关程序,那么《UNIX网络编程》就是首选了。

4、SHELL命令及编程

《LINUX与UNIX Shell编程指南》我一直用它。内容包括ls–ltr、find、grep、tar、gzip、ftp、top、cp、mv、chmod、chown、useradd、env、vi、more、cat、paste、diff、tail、head、history、split、df、wc等等。其中,vi命令要熟练使用;man命令是我们的帮助手册,无论是命令还是程序的系统函数都可以进行查询。

5、Oracle

Oracle的书太多了,我们平时使用的sql并不太深,就推荐《Oracle基础教程》。如果想往DBA发展,这个还是请公司DBA回答,我就不班门弄斧了。

6、JAVA等页面开发技术

在这个时代,你想不知道JAVA都难。推荐看一下基础的JAVA、JSP、SPRING、STRUCTS、Hibernate书籍。

7、TD-OSSP

在公司的过程财富库中,找到组织标准过程,就可以看到相关文档了。刚到公司的新员工,应该先学习相关的编码规范,学会看懂需求、设计文档。

8、编辑工具、系统工具等各种工具

SourceInsight,C/C++编辑工具,个人推荐使用,一般的语法错误都可以检查出来,而且速度快。而Eclipse CDT网上的口碑不好,就没去试用,感觉有点复杂有点慢。UE日常办公必选编辑工具。

PowerDesigner是物理模型、数据模型的设计工具,查看数据库表结构,表和表之间的关系。PD支持导入导出建表脚本,支持按模板导出word格式,方便构建数据字典。ER-WIN也是很好的模型设计工具,它在描述实体关系时更清晰。

FTP工具,将源码放到主机。我一般就用TotalCommander了,注意,使用ASC模式上传下载源码,否则,^M在unix环境下会给我们捣乱。

SecureCRT终端仿真程序,PC机和主机的桥梁,登录到主机上完成相应的开发、维护工作。

Office套件及open office相关Word的排版、Excle的函数、PowerPoint的动画、Visio的各种流程绘图,都有很大学问的。

Toad、PL/SQL,访问ORACLE的工具,Toad是大而全的ORACLE工具,尤其在监控管理ORACLE数据库方面更突出。PL/SQL调试存储过程比较好。“萝卜白菜,各有所爱”。

XManager包含图形化的远程登录窗口界面,远程安装ORACLE就需要它了。

Clearcase是我们使用的配置管理工具,与ClearQuest做集成后,方便流程的管理。在CC中连接到一个项目,复用相应的开发流,在开发流上建立本地视图,对目录、文件这些元素进行操作,包括加入源控制、更新操作、检出、检入、撤销检出、合并、处理hijack文件、deliver操作、打基线、CQ中创建activite(CC中的defect)等,这些基本操作都需要清楚。还有就是查看文件版本树,查看个人检出的文件等。

9、沟通能力

有很多大师级的书,我就不轻言了。例如,余世维的《有效沟通》等等。个人的建议是,平时多注意别人好的沟通方式进行学习。对于不同的人,沟通方式也是不同的。学会站在对方的角度考虑问题、全面考虑问题,更利于达成一致意见。

10、业务的学习

多看相关的规范,根据规范理解我们的程序是如何实现的。提高业务能力的有效方式就是多做需求。在做开发过程中,经常与导师及需求分析人员进行沟通。了解需求,不要仅局限于当前要实现的需求,对源码中发现的功能、与需求相关的业务等都要进行学习。比如,做累账的需求,就可以对批价的业务进行了解,掌握哪些详单表汇总到了账单表。多做需求是我们提高能力的捷径,刚开始的时候不要怕犯错,不要怕被批评,“多年媳妇熬成婆”,大家都是这样过来的。多问问题,向导师问,老员工问,向每一个可以教你知识的人问。经历多,才能成长快。多做需求,就多学业务、多练习技术、多进行沟通,能力自然就提高了,有好的能力,就会被安排做更多的、更高级别的需求,从而进入一个良性循环。

提示一下:其实,上述内容,只是简单地谈论了我们主要使用的技术、工具和能力,在公司的《职位差异能力词典》则对各能力项的要求进行了详细的说明,大家可以参照学习、提高。

最后,讨论一下学到什么程度吧。这里想说的就是,如何合理地安排计划,逐步提高我们的能力。

在学习的过程中,建议选择2到3门不同类型的书,交叉看,这样不会造成对某门课程产生极度厌倦情绪的不良后果。

C和C++,可能我们在大学期间都学过,所以,这两门课串起来学习大概只需要2个月左右的时间。因而,在此期间,可以配合学习一下shell的相关知识。所以,登录主机,vi编辑;make、gcc编译程序;查看日志;gdb调试解决问题等。这一套下来,C/C++语言和主机命令就应该能够熟练掌握了。这部分的学习一定要扎实,以有效减少我们在以后的编程中出现bug的数量。bug数量少,最直接的效益就是可以节省我们自己的时间。其效果甚至不可估量。因为,随着发现bug的时间的推后,浪费的时间将呈几何级地增加。多一个bug,测试组就需要多一个人去测试,而后是,测试人员再和开发沟通,开发修改bug升级程序,接着是再测试。所以,软件工程里有介绍,返工的工作量,不计入开发的工作量。再试想,如果发现bug的时间一直推后到现场,是由用户测试反馈回来的,那情况又该如何?首先,影响用户满意度,其次,得重新开发、测试、发布。神啊,救救我吧,让我远离这些“臭虫”吧。

两个月过去了,不知道那些工具你是否已经上手,只是,编辑、编译、ftp、CRT的都用过吧。时间也应该到9月中旬了,再花1个月时间了解一下oracle的基础吧,就是sql语句什么的,如果你能力足够,可以自己安装一个linux,再在上面安装oracle,即可谓牛人一个。实在不行,就找人帮忙安装一个windows版的oracle,就是在关机的时候别忘了先停oracle服务。

一个月的时间很快,还有十一要过,不知道你的C语言在头脑中还留存多少。这时,你的领导已经安排你看写文档和代码了,那就好好研究一下吧。代码也许很多,先按有框架代码和业务代码分。在框架代码中包括对日志、共享内存、常用函数、规则解析、数据库连接、文件等相关函数。对于这些函数,需要自己写例子,达到熟练应用。框架中对共享内存和表数据的封装,是有一套模型支撑的,相关实体的作用,需要熟练掌握。达到可以部署相关代码,并正常运行的程度。三个月的时间,我想应该学习这些内容吧。

半年的时间过去后,新的一年就要开始了。这时候,技术上的储备应该完成了百分之六七十。接下来,就是让技术为业务服务,进行为客户创造价值、实现自身价值的初始阶段。做需求时,不断学习业务,提高沟通能力,熟练应用技术,综合性提升和完善自身的全面能力。在理解用户需求时,最好直接与提出原始需求的人进行沟通,了解需求的来龙去脉,以便于掌握更多主动权,从而为用户提供更好的解决方案。做需求的过程中,更是需要与方方面面的人进行沟通,比如:与客户沟通需求;与自己的领导沟通设计实现方案;与小组内相关人员讨论代码实现,进行单元测试,发现bug,处理问题;与测试人员沟通程序功能,完成系统测试,等等。这个过程中,同时也对相关的系统工具进行了学习,TMS、CC、CQ、开发工具、测试工具等。如果你的学习踏实有效,大约半年到九个月的时间,应该就可以基本掌握上述能力。当然,由于各专业的业务复杂程度不同,时间长短会有相应的差异。

 

第三篇:

如何成为一名厉害的C/C++程序员?

从事C++开发多年,C++高级工程师

10 人赞同了该文章

每一个学技术的人

都想干个三五年就能成为大牛

跳槽去大厂,薪水翻番

或者在一个小公司里,带个小团队

在30岁左右成为项目经理

晋升管理层

买房买车,实现人生理想

然而技术之路漫漫

想要成为牛×的程序员

还有很长的路要走

那么,成为一个很牛的C++程序员,需要修炼哪些技能呢?

 

 

1.C/C++语言

如果你的基础很差,建议不要一开始就学C++语言,从C开始学起,对程序有个初步的认识,循序渐进。C语言的书嘛,先买一本300页以内的,把书中的每一个例子都通过键盘敲打进去到Visualstudio里面去,然后单步执行,逐行调试去看各个变量的值。或者自行添加一些printf语句去输出变量的值。这样当你看完一本书后,你就有编写小程序的感觉了。

记住,千万不要偷懒,不敲进去,自以为聪明,能看懂,或者直接从光盘复制。偷懒的代价是会花费更多的时间学习,最后还没有学会,给自己的自信心造成巨大打击,再也不想学程序了。

C语言看完一本书后,下来你就可以买一本C++的书看了。C++的书也是一样,必须300页以内的那种,不要一来就想学《C++Primer中文版》这样的好书,因为太厚了,怕你没有信心能够看完,即使你很有信心,花费一年的时间才看完,不值得。这种经典的厚的好书,适合作为资料查阅,不适合挨个细节都看。

还是要提醒各位,一定要把书中的例子挨个敲打到电脑里面,单步执行。一定不要从光盘复制,一定要单步执行。

经过两本书的磨练,估计你对C/C++肯定有比较深入的了解了,下来应该可以进入实战了。

 

 

2.带界面的应用程序

学会了C/C++语言本身,可能还没有什么成就感,毕竟都是控制台的程序,老是输出一串字符串,整天面对各黑框框,成就感估计不是那么爽。要是能搞个带UI界面的程序就爽了。

下来就看个人的志向了,如果走微软路线,那你下来学MFC好了,如果要走开源路线,那开源跨平台的界面库多得是。

通用的并且简单的就是wxWidget了,官方网站为www.wxwidgets.org 你下载后看具体的例子,把里面的例子程序敲到你的Visualstudio里面,去调试,看运行的结果,你也可以试着去修改例子,添加按钮,响应按钮事件等。

走到这一步,恭喜你,可以照葫芦画瓢的搞个小应用程序了,还带界面。

 

 

3.网络应用程序

语言搞懂了,UI程序也会了,下来该学学网络咯,现在哪个程序不需要联网啊,懂网络对你理解很多程序非常有帮助。但是网络应用程序从哪里入手呢?

我来告诉你,从《UNIX网络编程》这本书入手吧,这本书可以教会你网络套接字的底层原理,把上面的例子好好学习,自己动手写一个回应服务器。写一个服务器端,再写一个客户端。服务器端请务必学会select这个简单的多路复用模型,这样你才能慢慢的深入里面poll,epoll,IOCP之类的模型。

 

 

4.文件操作

所有的程序,基本都会用到文件的读写操作,windows系统有自己的文件操作API,比如CreateFile,DeleteFile等,请新手不要学windows的文件操作API,新手请学标准C语言的文件操作函数,简单易学还跨平台。就那么几个函数,三下五除二你也就学会了,fopen,fclose,fread,fwrite,fseek,ftell就这么几个而已。

 

 

5.深刻理解内存与指针的关系

作为一个C/C++程序员,从学习程序的头一天开始,就要和内存的分配释放作斗争。你必须理解内存与指针的关系。怎么样才能理解呢,请大家去看《高质量C/C++编程》里面自带的几个经典例子吧。把那几个例子搞得清清楚楚,基本能够理解其中的原理了。

 

 

6.修炼C++

我上面说的基本都是修炼C的,要修炼C++,还得再花3年功夫,才有可能练成C++高手。C++太博大精深了,其中最复杂的莫过于泛型编程思想,不要以为能写个模板类就认为泛型编程不过如此而已。仔细看看STL源码,Boost源码,你就知道泛型编程有多么的博大精深了。修炼C++,可以从用C++封装的MFC,

wxWidget入手,看高手如何通过C++语言,封装这样庞大的UI库,里面应用了很多的C++机制,最典型的就是多态机制,还有很多的设计模式应用可以研究。

 

 

7.深研设计模式

设计模式是程序设计的灵魂,是通用方法,当你面对一个大型项目的时候,如何设计一个有弹性的系统,是所有系统分析员应该掌握的技能。在设计模式的研究上,要结合实际的项目进行。

修炼到第八层,基本上就可以算作一个C++高手了。然而具体的每一层,都需要你一步一步慢慢地去走。

不想人到中年失业,走下坡路,甚至“被下岗”,面临中年危机,需要提前规划好自己的人生,尤其是程序员这种相对比较吃“青春饭”的职业,利用好你的时间充分学习,提前将自己的技术修炼到一定水准。

 

 

加油吧!正在编程路上的人!有兴趣一起学习C/C++编程的话可以关注一下笔者的简介哦!

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读