如果一定要在C++和JAVA中选择,是C++还是java?

关注者
2,876
被浏览
4,601,204

485 回答

编程届有一固有的偏见,就是大家默认C++可以轻松转JAVA,但JAVA转C++很难。

实际情况比较复杂,通常来说,JAVA在软件工程上的训练比C++足,但是缺乏内存管理和硬件优化的训练。

我觉得看应用场景,例如我是做图像算法的,要非常追求效率。处理一副图像的速度怕能快0.1ms也要争取。决定了必需使用C\C++,不会选择java.

提问题的明显是学生

学生时间又多 环境又, 不学难的, 难道先学JAVA????

C++虐过的人,再学其它语言。。。。谁试谁知道。。。

学了C++,以后简历上说不定可以写: 熟悉C++,精通JAVA,python,c#.....

先学JAVA :熟悉JAVA

计算机专业的同学对这问题有疑惑的,一定要看一下猪学长这回答!

上来直接给出最中肯的建议:

  • 如果你是刚刚步入大学的大一时间非常充裕的同学,猪学长强烈建议先学C/C++,因为c++非常接近底层,对你后面理解整计算机基础体系都有非常巨大的帮助。貌似国内大学里大多数计算机专业的课程也是这么设置的。
  • 如果你是马上就要面临找工作,同时大学混了几年毫无c++基础,那么想都不用想,赶紧选java,至少保证你能找到工作。

c++更偏向于底层, 除了腾讯之外,虽然在其他公司较少用于业务层面的研发。

但是在各大厂的基础架构部门、偏底层的缓存、存储组件,业务部门中对性能要求较高的服务比如字节广告系统、滴滴出行核心排队服务、还有国内大多数的游戏公司都对c++有着很高的需求。

同时在PC客户端方向,各种输入法,音乐软件PC客户端,c++也是主流技术开发语言。

但是,相比于java、golang的业内比较主流的业务服务端语言,c++岗位较少。

c++服务端相对于java服务端方向,由于生态像java spring那样主流的框架较少,所以学习的广度并不宽,但是c++语言学习深度与难度更大。

比如学习c++现在想要在互联网校园招聘找到不错的c++/Linux服务端方向的工作,基本需要学如下这些:

c语言入门:

如果你是连c语言都没学习过的纯小白同学,猪学长这里首先推荐大家先去看一下我们浙江大学翁凯老师的c语言入门课程:

  • C语言程序设计:
  • C语言程序设计进阶:

C语言书籍的话,其实用大学自己的教材就可以,或者C程序设计语言,TheCProgramming Language》、《啊哈C语言》、《CPrimer Plus》任选一本都行。

上面这些书籍如果有需要的同学,这里先分享给同学们:

点这里, 计算机优质书籍项目免费推荐分享!

c++初阶:

对于很多喜欢看视频来学习的小白同学,可以先从b站上黑马的c++入门课程开始,这c++课程在b站上的c++类学习视频中是播放量比较高的:

黑马的c++入门课程:

浙江大学c++:

也可以哈工大c++精品课:

c++初阶在看视频初步入门后,一定!一定!一定!必须要读这本所有c++方向同学必学的c++圣经:

  • C++Primer 5th

牛客网上很多同学这本书都二刷,三刷读了很多遍!

c++进阶:

上来直接首推c++进阶四大名著:

  • 《Effective C++》
  • 《More Effective C++》
  • 《STL源码剖析》
  • 《深度探索C++对象模型》

上面这些书籍如果有需要的同学,这里先分享给同学们:

点这里, 计算机优质书籍项目免费推荐分享!

其中重点要关注两本:

  • 《Effective C++》

《Effective C++》一定要重点去学习。只看完《C++Primer 5th》只能达初步达到入门c++语言的水平,必须继续深入学习《Effective C++》才能极大的提高你c++代码的编写水平。

  • 《STL源码剖析》

而同时STL在校招大厂的面试中简直太重要了,几乎是每场c++面试面试官必须提及的考点。《STL源码剖析》所以一定要作为重点来学习。尤其是STL日常使用中高频的容器,vector与list比较、vector迭代器失效的情况、map与unordered_map、set与unordered_set对比等基础问题必须要搞透。

《深度探索C++对象模型》、《More Effective C++》剩下两本在学有余力的情况下额外再去了解。

c++并发编程如果想要额外提高完善一下自己知识,这里推荐《C++并发编程实战》,也可以在学有余力的时候去阅读提高。

由于c++进阶部分涉及到了大量复杂的c++高级特性,复杂机制。如果只看书无法很的理解,强烈推荐c++侯捷老师的b站精品c++课程视频:

【高清版】侯捷C++新标准-C++11/14

【高清版】侯捷-C++ STL标准库和 C++ 泛型编程

【高清版】侯捷-C++程序的生前和死后

如果上面的内容都能认真的学完,c++基础语言方面就足够应互联网校招中下面这些主要考察的c++面试点:

  • 面向对象的三大特性:封装、继承、多态 、动态多态、静态多态
  • 类的访问权限:private、protected、public
  • c/c++区别、虚函数、Extern C、指针、引用区别
  • 虚函数实现动态多态的原理、虚函数与纯虚函数的区别
  • new、delete 、malloc、free
  • 写时拷贝、继承与多态、虚函数、智能指针
  • 模板、class、struct区别?struct内存对齐
  • 智能指针、引用计数、RAII(资源获取即初始化)思想、shared_ptr、weak_ptr、unique_ptr等
  • 四种类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast
  • c++ STL原理、vector、deque、map、hashmap

同时还需要重点关注c++/Linux服务端生态:

计算机系统底层原理:

书籍:

  • 《深入理解计算机系统》CSAPP
  • 《编译原理》
  • 《程序员的自我修养:链接、装载与库》

视频:

  • 《深入理解计算机系统》原作者视频:
  • 国防科技大学编译原理国家精品课:


Linux网络编程

  • 《Unix网络编程》
  • 游双老师《Linux高性能服务端编程》
  • Linux 多线程服务端编程:使用 muduo C++ 网络库》

此处重点推荐陈硕老师的《Linux 多线程服务端编程:使用 muduo C++ 网络库》,这本书真的是Linux网络编程学习必读书籍。muduo陈硕大神人开发的C++的TCP网络编程库。muduo基于Reactor模式实现。这本书中对muduo整架构进行了非常详尽的介绍和分析。校招同学求职c++方向同学的简历上几乎烂大街的服务器项目很多都是参考这

muduo 源码注释版本:

这里还有一学习moduo的视频:

上面这些内容看似没多少,但是由于c++较为复杂的机制,其实学习难度与深度远远java方向要大很多。

如果想要从事java服务端方向

大致需要学习了解如下内容:

(1)java语言基础及常用集合

java语言基础是java后端开发面试考察的基础知识,越是应届生的同学面试官往往问基础居多。

要想基础学扎实,非常有必要认真学习一本java语言基础类的书籍。

这里我推荐的是《java核心技术卷一》,

java基础入门真的看着一本书足够了!

重点看第三章到第九章。其中4,5,6,9四章是要格外重点看的,尤其第九章集合的相关概念问题时面试中最常考察的重中之重。

进阶推荐书籍1:《Java核心技术卷2高级特性原书第10版》

进阶推荐书籍2: 《Effective Java 中文第二版》


(2)JVM

随着近几年校招面试难度的提升,jvm已经变成了java后端必考的基础知识了。我在面试java后端岗位的过程中几乎都是必问的了。

学习jvm肯定推荐《深入理解java虚拟机》,

这本书第2章,第3章,第6章,第7章都是必须要重点看并且掌握的。这本书确实是一本让我收获非常大的书,

看懂了jvm会对java程序的运行原理有了更深层次的理解。其他的章节关于jvm调优相关的,也要有所了解。


(3)java并发编程

关于并发编程简直是后端开发人员必须具备的进阶技能了,在应届生面试中往往是面试官对你进行进一步技术考察的必问选项。

对并发编程了解的越多越深入,能与面试官聊的就越多。

如果前面java基础集合与jvm都属于入门寒暄题目的话,那么java并发编程就可以说是重点考察的重头戏了。

我强调了这么多,也能看出并发编程的重要,废话不多说,此处直接推荐学习书籍:

《实战java高并发程序设计》

《java并发编程的艺术》

上面这些书籍如果有需要的同学,这里先分享给同学们:

点这里, 计算机优质书籍项目免费推荐分享!

如果你是对并发编程零基础的小白的话,那么推荐你从第一本书先开始入门并发编程,重点看前5章。《实战java高并发程序设计》属于并发编程入门级的书籍,里面从使用的角度以及结合非常多通俗易懂的程序例子,让你对基本的java并发编程有所了解。

如果你对java并发编程有一定的基础,或者看完了第一本书,想要进一步提高,那么一定要看《java并发编程的艺术》这本java并发神书!

这本书几乎所有章节都是重点,我觉得这本书简直就是神书,从最底层的角度把java并发编程讲解的非常透彻,属于那种读多遍都能有新收获的。

当你啃透着两本书,java并发编程你就可以与面试官谈笑风生了。

其实java的内容看起来非常多,但是其实学习难度比较低,上手很快。就算是jvm、java并发也远远比c++并发编程要容易学习掌握的多。

最后关于服务端通用考察的计算机基础知识,看猪学长这回答就行了:

赠人玫瑰,手有余香

猪学长之前一直都有认真整理很多技术书籍互联网校招面试题目,现如今猪学长也已经毕业啦,都分享出来直接分享给有需要的同学们。

同学们如果觉得有帮助的话,不要只偷偷收藏白嫖猪学长,给猪学长点一吧,

这样可以让更多的同学看到!


最后同学如果还有什么计算机相关互联网大厂求职技术方向等等问题,都可以在评论区给猪学长留言,或者关注我猪学长哈,猪学长不向同学们开通付费咨询!

同时对字节跳动感兴趣的同学,想要找猪学长内推的,也可以联系猪学长哈。

真心希望可以帮助到你。

c++是走系统级编程,基础设施,程序员不容易被裁员,因为c++人难招。

java是商业化语言,常用于电商和管理系统,找工作,但也容易被裁员,学的人很多。

你可以先学c++,学不会再来学java,或兼职学java。

c++,语言复杂,但你可以按带类的c来学习,c++的模板你可以不学,会用就行,如怎么调用boost库,用自动指针。

c++同时可以学习一下go语言,做云计算服务器多开始用go语言,号称互联网c语言。