电子发烧友网 > 今日头条 > 正文

从技术学习和实际运用的角度来看C/C++和Java的区别

2020年06月24日 16:16 次阅读

关于C语言和C++的学习路线终于梳理完了。当然我也只能从我曾经近3年的通信公司后台开发经历和目之所及的世界,跟大家聊聊这个话题。这块的东西很多很杂,不过梳理和总结之后,回过头来看,其实学习思路、学习路线应该还是比较清晰的。由于个人认知有限,不足的地方也欢迎大家评论里补充。

先聊几个有趣的问题,这几个问题都是私信里常被问到的,也是我当时学习过程中的一些疑惑。

问: 为啥我学完了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语言里加入了面向对象的特性。因为只有面向对象特性的加持,代码才能更好的复用、扩展和工程化,这是大型项目的必备要素。

除了C语言所有的底子之外,还需要学习C++的面向对象(封装、继承与多态)特性、泛型、模板、STL等等。最后一个小建议是:语言部分的学习建议不要拖太久,一定要规划好时间,一鼓作气,高强度给它压下来,否则容易把自己拖泄气。编程基础“四大件”,基础四大件包括:数据结构和算法、计算机网络、操作系统、设计模式。

1、数据结构和算法,可以说这个直接决定了面试的成败!几种基础数据结构类型得烂熟于心,比如:字符串、链表、二叉树、堆、栈、队列、哈希等;基本的几大算法也要了如指掌,比如查找、排序、动态规划、分治等等。

2、计算机网络,此处的计算机网络指的就是TCP/IP协议栈,可以说它是当下互联网通信的基石,无论如何一定要对TCP/IP的协议栈了如指掌,主要就是学习和掌握原理,包括:ARP协议、IP协议、ICMP协议、TCP和UDP协议、DNS协议、HTTP协议、HTTPS协议。

3、操作系统,该部分重点包括:进程和线程的相关原理(原子性、并发、)、内存相关原理(内存分布、内存调度)

4、设计模式,倒不需要23种设计模式全部记住,常见的几个如:单例模式、工厂模式、代理模式、策略模式、模板方法模式建议熟练于心。

应用实践编程

这部分会涉及到一些工具、编程环境、和具体编程实践,应该说这一部分学完,自己应该能做点东西出来、或者说能看懂一些实际项目的代码。实践这部分,我也是结合我之前在通信公司的实际工作经历和所听所见,来聊一聊。

1、Linux操作系统的使用,很多人初学C语言、C++(包括我)都是在Windows环境上进行的,而实际企业级开发几乎不可能,所以Linux系统必须要会,我们别无选择。先谈使用。包括:常见的Linux操作命令、基本的Shell编程。

2、编译/调试工具,我们知道很多人学C语言、C++都在类似Visual Studio这种集成IDE里进行代码编译,这个其实也用了编译器,只不过是微软自家的MS编译器,而且所有操作均可视化。而企业里开发很少会基于Windows系统,所以Linux平台上的编译器更为重要,最典型的当属 GCC,甚至有些公司有自己定制过的交叉编译工具,但没关系,只要 GCC熟悉,其他问题都不大。

其次,大家自学C语言、C++,都借助类似VS这种IDE,点按钮即可对源文件编译。而企业里实际项目的编译动作叫 make,编译的实际动作和过程都是写在 makefile文件里,所以makefile的书写规则建议学习!最后说到调试工具,Linux平台上的 GDB调试工具要熟练使用,会借助于它进行调试。

3、Linux环境编程,还是那句话,企业里C语言和C++几乎都是基于Linux平台的,这一部分我们没办法避开。

(1)Linux系统编程,众所周知,Windows系统编程里有各种各样的Windows API,同理Linux系统API的使用就更加重要。

(2)多线程编程,此处指的是多线程编程实践相关的东西,一般包括:线程、资源、信号、同步、互斥、锁等等一些具体的编程方法。

(3)网络编程,此处的网络编程主要指的是具体Linux系统上的网络编程 API和 IO函数的编程实践。

fqj

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播

电子发烧友观察

一线报道 · 深度观察 · 最新资讯
收藏 人收藏
分享:

评论

相关推荐

JavaWeb电商项目实战

能够熟练掌握使用JavaWeb技术实现项目的开发 从项目开发流程,到需求分析,再到代码编写,手把手开发项目,知
发烧友学院发表于 2019-04-29 00:00 111次阅读
JavaWeb电商项目实战

在C语言中,全局变量滥用的后果是什么

01 啥是全局变量 说起全局变量,就不得不提到全局变量,局部变量,静态全局变量,静态局部变量,这些都....
发表于 2020-06-24 17:14 3次阅读
在C语言中,全局变量滥用的后果是什么

盘点一些在C语言中比较容易犯的错误

本题中的#运算符可以利用宏参数创建字符串。##运算符和#运算符一样也可以用于类函数宏的替换部分。另外....
发表于 2020-06-24 16:45 0次阅读
盘点一些在C语言中比较容易犯的错误

C语言的策略模式提高了程序的可维护性和扩展性

这里先插一点题外话,在C语言中,实现封装、继承、隐藏、多态等等特性,是完全没有问题的。但是在使用过程....
发表于 2020-06-24 16:29 0次阅读
C语言的策略模式提高了程序的可维护性和扩展性

c语言入门:c语言的具体结构

变量就是可以变化的量,而每个变量都会有一个名字(标识符)。变量占据内存中一定的存储单元。使用变量之前....
发表于 2020-06-23 15:38 114次阅读
c语言入门:c语言的具体结构

为什么要将C语言作为入门语言?

编程是向计算机发出指令以执行特定任务或执行指令的行为,目前专业行业和学术界使用数百种编程语言。一个人....
发表于 2020-06-23 15:13 40次阅读
为什么要将C语言作为入门语言?

大学生如何学习FPGA初学者怎么学FPGA

无论是从自身的发展,还是从FPGA所拥有的巨大市场来讲,学习FPGA都是一个不错的选择,对大家来说FPGA技术...
发表于 2020-06-23 15:12 84次阅读
大学生如何学习FPGA初学者怎么学FPGA

虚拟机:Ubuntu安装oracle Java的...

ubuntu提供的openjdk经常会发生莫名奇妙的错误,比如IDE会突然崩掉之类的.正好java最....
发表于 2020-06-22 17:45 190次阅读
虚拟机:Ubuntu安装oracle Java的...

算法:计算Fibonacci number的六个...

算法:计算Fibonacci number的六个方法
发表于 2020-06-22 17:27 124次阅读
算法:计算Fibonacci number的六个...

C语言算法分析:求最长的递增数列

求最长的递增数列(Longest Increasing sequence, LIS)是一个比较常见的....
发表于 2020-06-22 14:57 83次阅读
C语言算法分析:求最长的递增数列

虚拟机:编译器对C函数的名字修饰

虚拟机:编译器对C函数的名字修饰
发表于 2020-06-22 11:44 157次阅读
虚拟机:编译器对C函数的名字修饰

详解C语言二分查找算法细节

我相信对很多读者朋友来说,编写二分查找的算法代码属于玄学编程,虽然看起来很简单,就是会出错,要么会漏....
发表于 2020-06-22 09:05 115次阅读
详解C语言二分查找算法细节

C语言:LeetCode 153寻找旋转排序数组...

假设按照升序排序的数组在预先未知的某个点上进行了旋转。
发表于 2020-06-22 08:59 74次阅读
C语言:LeetCode 153寻找旋转排序数组...

查找山脉数组最大值的三个方法

何为山脉数组?如果数组 A 是一个山脉数组的话,那它满足如下条件:
发表于 2020-06-22 08:51 85次阅读
查找山脉数组最大值的三个方法

C语言: Leetcode 33搜索旋转排序数组

假设按照升序排序的数组在预先未知的某个点上进行了旋转。
发表于 2020-06-22 08:51 75次阅读
C语言: Leetcode 33搜索旋转排序数组

C语言:leetcode 35搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会....
发表于 2020-06-22 08:40 58次阅读
C语言:leetcode 35搜索插入位置

Java:调用window的matlab遇到的问...

Java:调用window的matlab遇到的问题和解决方案
发表于 2020-06-20 09:32 342次阅读
Java:调用window的matlab遇到的问...

案例参考:一个Java高并发异步应用

在日常运营中,公众号会通过给用户下发营销或者科普类的消息来通知客户。 根据经验,微信消息下发后10分....
发表于 2020-06-20 09:16 300次阅读
案例参考:一个Java高并发异步应用

SOFAJRaft v1.3.2 发布,蚂蚁金服...

SOFAJRaft 是一个基于 RAFT 一致性算法的生产级高性能 Java 实现,支持 MULTI....
发表于 2020-06-19 16:13 998次阅读
SOFAJRaft v1.3.2 发布,蚂蚁金服...

探讨单片机C语言编程理论知识

编程思路和算法决定一个程序的优劣,是单片机编程的大问题,只有在实际动手编写的时候才会有深切的感悟。一....
发表于 2020-06-18 16:06 205次阅读
探讨单片机C语言编程理论知识

window安装的JAVA环境介绍

window安装JAVA环境
发表于 2020-06-18 15:45 32次阅读
window安装的JAVA环境介绍

单片机C语言编程:.H文件与.C文件的关系

经过查找资料得知,.H文件就是头文件,估计就是Head的意思吧,这是规范程序结构化设计的需要,既可以....
发表于 2020-06-18 15:18 182次阅读
单片机C语言编程:.H文件与.C文件的关系

如何学习Java

学习Java,我建议这样做
发表于 2020-06-18 12:01 19次阅读
如何学习Java

Java程序员必逛的十大学习网站

Java程序员每周必逛的十大学习网站
发表于 2020-06-17 11:09 26次阅读
Java程序员必逛的十大学习网站

Java互联网四大项目开发案例教学

Java互联网四大项目开发案例教学,阿里天猫核心技术首次公布!...
发表于 2020-06-16 09:56 30次阅读
Java互联网四大项目开发案例教学

有人用过C语言位域吗

typedef struct {u16 b :5; u16 g :6; u16 r :5; } RGB; RGB *rgb; tx=0xf40f;      &n...
发表于 2020-06-16 04:35 21次阅读
有人用过C语言位域吗

知道C语言的用法但是avr里面并没有time这个头文件,是要用中断吗

知道C语言的用法但是avr里面并没有time这个头文件,是要用中断吗, 求大神神助解答 ...
发表于 2020-06-15 05:56 969次阅读
知道C语言的用法但是avr里面并没有time这个头文件,是要用中断吗

JAVA从零开始学习知识整理

JAVA从零开始学习知识整理——MySql——day05—【hqC】...
发表于 2020-06-14 16:15 27次阅读
JAVA从零开始学习知识整理

如何理解程序、进程、线程的关系

在Java 中,这些短小的代码段一般会被放入一个class,然后保存到一个扩展名为 .java 的文....
发表于 2020-06-13 11:29 99次阅读
如何理解程序、进程、线程的关系

GPIOA->CRH&=0xFFFFFFFO什么意思呀?

问一下GPIOA->CRH&=0xFFFFFFFO什么意思呀?因为我是菜鸟刚看这个根本什么都不知道!!!...
发表于 2020-06-13 09:00 173次阅读
GPIOA->CRH&=0xFFFFFFFO什么意思呀?

java原生程序redis连接怎么选择

java原生程序redis连接(连接池长连接和短连接)选择问题...
发表于 2020-06-10 16:33 34次阅读
java原生程序redis连接怎么选择

C语言中对变量的使用需要注意的问题

只读数据段是程序使用的一些不会被更改的数据,使用这些数据的方式类似查表式的操作,由于这些变量不需要更....
发表于 2020-06-09 10:39 197次阅读
C语言中对变量的使用需要注意的问题

linux中编译c语言的方法

以上就是linux中如何编译c语言的详细内容。
发表于 2020-06-09 08:58 83次阅读
linux中编译c语言的方法

各路大牛的C语言编程建议和技巧

对于清晰的程序来说,排版规范一向都是至关重要的。当然,众所周知最有用的是缩进,但是当墨水遮盖了意图时....
发表于 2020-06-08 17:05 219次阅读
各路大牛的C语言编程建议和技巧

C语言编程建议和技巧

对于变量名称,长度并不是名称的价值所在,清晰的表达才是。不常用的全局变量可能会有一个很长的名称,像 ....
发表于 2020-06-05 16:25 353次阅读
C语言编程建议和技巧

为什么C语言不会过时?

先上一个表,这个就是著名的TIOBE语言排行榜。目前它是一个最权威的一个语言流行度的排行榜,从这个排....
发表于 2020-06-05 16:12 412次阅读
为什么C语言不会过时?

一些良好的和内存相关的编码实践

这是所有类型。即使迁移到 C++ 面向对象的语言,这些类型也不会有明显变化;无论数据是简单类型还是 ....
发表于 2020-06-05 16:08 226次阅读
一些良好的和内存相关的编码实践

编程语言Top 5有一个明显的变化就是C语言排行...

4月份的时候,Java和C就已经非常接近了,5月份C语言更是一鼓作气直接超越Java,登上第一的宝座....
发表于 2020-06-03 17:48 1057次阅读
编程语言Top 5有一个明显的变化就是C语言排行...

ZLG开源GUI引擎AWTK v1.4正式发布

AWTK当前升级到了v1.4版本,相对于v1.3,我们完善了许多细节,增加了部分特性、控件以及API....
发表于 2020-06-02 15:07 254次阅读
ZLG开源GUI引擎AWTK v1.4正式发布

单片机C语言软件开发系统Keil C51的使用教...

KEIL C51标准C编译器为8051微控制器的软件开发提供了C语言环境,但是界面是英文的好多初学者....
发表于 2020-05-30 11:01 569次阅读
单片机C语言软件开发系统Keil C51的使用教...

单片机C语言编程:H文件与.C文件的关系

经过查找资料得知,.H文件就是头文件,估计就是Head的意思吧,这是规范程序结构化设计的需要,既可以....
发表于 2020-05-30 10:42 513次阅读
单片机C语言编程:H文件与.C文件的关系