c语言多线程_马云都称赞的C语言、C++学习路线!!!!
小伙伴们,大家好。
关于C语言和C++的学习路线终于梳理完了。
这块的东西很多很杂,不过梳理和总结之后,回过头来看,其实学习思路、学习路线应该还是比较清晰的。由于个人认知有限,不足的地方也欢迎大家评论里补充。
先聊几个有趣的问题
这几个问题都是私信里常被问到的,也是我当时学习过程中的一些疑惑。
问: 为啥我学完了C语言或者C++,却还是啥东西也做不出来?
答: 编程语言学完了就能做出东西那也真是天才哇!应该说语言学得就算再精通,它其实也只代表完成了“最小的”那一部分,和实际上手干活之间还是有一个非常大的鸿沟,这个鸿沟就表现为下文即将详述的 编程基础四大件 + 应用实践编程。
问: 为什么C/C++写出来的东西都是运行于黑乎乎的命令行?这玩意真有用吗?
答: 嘿嘿,谁说黑乎乎的命令行里运行的程序就没有用!咱大名鼎鼎的Linux系统都以命令行跟用户交互呢,而且Linux里面很多强大的工具都是运行于黑乎乎的命令行!
问: 从技术学习和实际运用的角度来看,C/C++和Java到底区别在哪?
答: C/C++,它和Java确实不太一样。C语言和C++,尤其C++,语言粒度细、机制多,性能虽然高,但语言本身的包袱也确实重,我们更愿意称它“造轮子”的语言!也正是因为C语言和C++性能好、粒度细,所以什么都能做。而Java本身就是一种服务于互联网软件开发(后端开发+客户端开发)的语言,它有一个明显的“生态圈”的概念,所以应用领域非常清晰。我个人觉得C语言和C++编程比Java还是要难一些,Java毕竟是纯应用层的,C语言和C++则对程序员能力的要求要更高一些。
岗位分析
了解一下岗位,知道以后能做什么,这个也有利于自己树立学习目标。
C语言和C++属于“造轮子”语言,几乎什么都能做。不过一般来说,C语言和C++主要还是做后台(服务端)开发比较多,包括:
- 通信公司后台开发
- 互联网公司后台开发
- 游戏公司后台开发
- ……
当然这个后台开发具体职责又有很多细分,比如:
- 有做数据处理和分析的
- 有做基础协议和通信的
- 有做服务端底层应用优化的
- 甚至还有做后台系统驱动和内核的
- ……
不管怎样,下面即将要介绍的这些学习路线和内容适用于以上所有情况。
语言本身的学习
C语言:
- 除了最最基础的语法:变量、条件、循环、字符串、数组、函数、结构体等之外
- C语言最最最最最重要的那就是:指针、内存管理,以后企业里开发就靠它俩吃饭,这也是检验C语言掌握情况的两大标准
推荐书籍:《C Primer Plus》、《C和指针》、《C专家编程》
C++:
- C++和C语言确实是不同的语言,但是C++确实是对C语言的延伸,可以理解为在C语言里加入了面向对象的特性。因为只有面向对象特性的加持,代码才能更好的复用、扩展和工程化,这是大型项目的必备要素
- 除了C语言所有的底子之外,还需要学习C++的面向对象(封装、继承与多态)特性、泛型、模板、STL等等
推荐书籍(有先后顺序):《C++ Primer》、《Effective C++》、《C++ 标准程序库》、《STL源码剖析》《深度探索C++对象模型》
最后一个小建议是:语言部分的学习建议不要拖太久,一定要规划好时间,一鼓作气,高强度给它压下来,否则容易把自己拖泄气。
编程基础“四大件”
基础四大件包括:数据结构和算法、计算机网络、操作系统、设计模式
这跟学什么编程语言、后续从事什么编程方向均无关,只要做编程开发,这四个计算机基础就无法避开。可以这么说,这基础四大件真的比编程语言重要!!!
1、数据结构和算法
可以说这个直接决定了面试的成败!几种基础数据结构类型得烂熟于心,比如:字符串、链表、二叉树、堆、栈、队列、哈希等;基本的几大算法也要了如指掌,比如查找、排序、动态规划、分治等等。
建议LeetCode多刷题啊啊啊啊啊!
参考资料: 《大话数据结构》、《算法》、《剑指offer》《LeetCode刷题》
2、计算机网络
此处的计算机网络指的就是TCP/IP协议栈,可以说它是当下互联网通信的基石,无论如何一定要对TCP/IP的协议栈了如指掌,主要就是学习和掌握原理,包括:ARP协议、IP协议、ICMP协议、TCP和UDP协议、DNS协议、HTTP协议、HTTPS协议。
推荐书籍: 《TCP/IP详解》
3、操作系统
该部分重点包括:进程和线程的相关原理(原子性、并发、锁)、内存相关原理(内存分布、内存调度)
推荐书籍:《深入理解计算机系统》
4、设计模式
倒不需要23种设计模式全部记住,常见的几个如:单例模式、工厂模式、代理模式、策略模式、模板方法模式建议熟练于心。
推荐书籍:《大话设计模式》、《设计模式之禅》
应用实践编程
这部分会涉及到一些工具、编程环境、和具体编程实践,应该说这一部分学完,自己应该能做点东西出来、或者说能看懂一些实际项目的代码。
实践这部分,我也是结合我之前在通信公司的实际工作经历和所听所见,来聊一聊。
1、Linux操作系统的使用
很多人初学C语言、C++(包括我)都是在Windows环境上进行的,而实际企业级开发几乎不可能,所以Linux系统必须要会,我们别无选择。先谈使用。
包括:常见的Linux操作命令、基本的Shell编程。
推荐书籍:《鸟哥的Linux私房菜》
2、编译/调试工具
首先是跟编译相关的:编译工具!
我们知道很多人学C语言、C++都在类似Visual Studio这种集成IDE里进行代码编译,这个其实也用了编译器,只不过是微软自家的MS编译器,而且所有操作均可视化。而企业里开发很少会基于Windows系统,所以Linux平台上的编译器更为重要,最典型的当属 GCC
,甚至有些公司有自己定制过的交叉编译工具,但没关系,只要 GCC
熟悉,其他问题都不大。
其次,大家自学C语言、C++,都借助类似VS这种IDE,点按钮即可对源文件编译。而企业里实际项目的编译动作叫 make
,编译的实际动作和过程都是写在 makefile
文件里,所以makefile的书写规则建议学习!
最后说到调试工具,Linux平台上的 GDB
调试工具要熟练使用,会借助于它进行调试。
推荐资料: 这部分没有书可推荐,英文好的同学可以直接看
GNU
官网关于GCC
和GDB
的文档,中文材料可以看:《debuging with gdb》(中文版)和陈皓先生的《跟我一起写makefile》
3、Linux环境编程
还是那句话,企业里C语言和C++几乎都是基于Linux平台的,这一部分我们没办法避开
(1)Linux系统编程
众所周知,Windows系统编程里有各种各样的Windows API,同理Linux系统API的使用就更加重要。
(2)多线程编程
此处指的是多线程编程实践相关的东西,一般包括:线程、资源、信号、同步、互斥、锁等等一些具体的编程方法。
(3)网络编程
此处的网络编程主要指的是具体Linux系统上的网络编程 API
和 IO
函数的编程实践。
推荐书籍:这三部分综合在一起,推荐必看书籍包括《Unix环境高级编程》、《Linux高性能服务器编程》、《POSIX多线程程序设计》
文中提到的书籍我已经帮大家整理好了!
回复:学习路线 获取。后续更多精彩内容!!!!!
谢谢大家的支持。
后续更多精彩内容!!!!!
谢谢大家的支持。
http://weixin.qq.com/r/NEzQyI3EwdC_rcmr9xkm (二维码自动识别)
c语言多线程_马云都称赞的C语言、C++学习路线!!!!相关推荐
- cpu模拟器c语言实现_你写出来的C语言是这样调用硬件的!
大家都知道我们可以使用C语言写一段程序来控制硬件工作,但你知道其工作原理吗? 网友北极 C语言在实际运行中,都是以汇编指令的方式运行的,由编译器把C语言编译成汇编指令,CPU直接执行汇编指令.所以这个 ...
- 谭浩强c语言入门_计算机学生为什么学不会C语言?看到这4点原因,学生表示太真实...
C语言是理工科(特别是计算机专业)的必修课之一,是计算机应用的基本技能,本来是一门简单的课程,在程序员眼里算是"体力活",不需要太多智力.但是,看似这样一门简单课程,计算机专业学生 ...
- java和易语言对比_国外流行排行榜编程语言和易语言相比较的优势和劣势
国外流行排行榜编程语言和易语言相比较的优势和劣势 适合对象:对于初学者或者没有接触过编程语言的朋友有巨大参考价值. 比较特点:以C语言和Java两门最流行也是最经典的外国编程语言来和易语言相比较, 比 ...
- 第七章 C语言函数_什么是函数?C语言函数的概念
函数就是一段封装好的,可以重复使用的代码,它使得我们的程序更加模块化,不需要编写大量重复的代码. 函数可以提前保存起来,并给它起一个独一无二的名字,只要知道它的名字就能使用这段代码.函数还可以接收数据 ...
- 网络工程师都学什么?网络工程师学习路线内容
大家在备考软考的时候肯定想着选择那些科目报名比较好,比较有发展前途,这里给大家整理了网络工程师的学习路线以及学习内容,仅供大家参考. 网络工程师是从事计算机信息系统的设计.建设.运行和维护工作,掌握网 ...
- vhdl语言入门_从当初汇编、C语言入手,到如今FPGA开发已然十年,总结出“三多”!...
从大学时代第一次接触FPGA至今已有10多年的时间,至今记得当初第一次在EDA实验平台上完成数字秒表.抢答器.密码锁等实验时那个兴奋劲.当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus ...
- c语言多线程的建立视频,如何用C语言实现多线程
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Windows操作系统,C语言实现多线程: #include #include DWORD APIENTRY ThreadOne ( LPVOID thr ...
- 判断魔方阵c语言程序设计_魔方阵算法及C语言实现
1 魔方阵概念 2填充的,每一行.每一列.对角线之和均相等的方阵,阶数n = 3,4,5-.魔方阵也称为幻方阵. 例如三阶魔方阵为: 魔方阵有什么的规律呢? 魔方阵分为奇幻方和偶幻方.而偶幻方又分为是 ...
- 最简单的python语言程序设计_编程中最简单的语言Python,这样学或许更容易
最近微信小程序上面出了一个跳一跳的小游戏 大家有没有玩呀? 编程中最简单的语言Python,这样学或许更容易 分享之前我还是要推荐下我自己建的Python开发学习群:628979297,群里都是学Py ...
最新文章
- 实现计算机界“大满贯”,芮勇博士再获技术成就大奖
- XPsp3键盘设备链/栈信息_02_VMware
- Android wear
- python策略模式_设计模式(python实现):策略模式
- 如何让API回调你的VC类成员函数而不是静态函数
- java批量删除接口怎么定义_教你在Java接口中定义方法
- mysql实例化_MySQL如何通过实例化对象参数查询数据 ?(源代码)
- 电子政务项目风险管理(上)
- jQuery版三级联动案例
- 微信和QQ,终于可以互通了!
- 内点法介绍(Interior Point Method)
- Linux查看硬盘挂载
- python PNG图片显示
- 带你玩转 3D 检测和分割 (二):核心组件分析之坐标系和 Box
- Image Signal Processor
- word使用技巧大全
- 搭建在线LaTeX编辑器Overleaf
- c++ 海战棋_GitHub - yifeitao/SimpleProgrammingProblems: 简单编程问题集中译版
- 9月25日科技资讯|小米推出售价 19999 元的 MIX Alpha;高通已向华为重启供货;.NET Core 3.0 发布
- Logstash:如何处理 Logstash pipeline 错误信息
热门文章
- 运用Axure6.5快速完成微信交互效果的简单办法
- AgileEAS.NET 4.0重构裁剪,新的ORM、支持Linq,正式支持WPF,开放更多的接口
- 容器编排技术 -- Kubernetes Service
- Mac系统上安装Composer
- python读取html文件中的表格数据_使用解析html表pd.read_html文件其中单元格本身包含完整表...
- leetcode 最长回文子串
- Java 时间处理整理
- JavaScript性能优化【中】-- Performance 工具
- CSS和JS两种颜色渐变文字效果代码
- flask处理http request的时候是多线程还是多进程?