校招C++大概学习到什么程度?

10月12日 收藏 0 评论 0 IT互联网

校招C++大概学习到什么程度?

转载声明:文章来源https://www.zhihu.com/question/290102232/answer/2160219432

这题我会!

应届毕业加入腾讯做游戏开发,走的就是 C++路线。

首先说下:校招初了语言本身,以下几个方面不可忽视。

● 基础知识

● 编码能力

● 框架能力

● 算法能力

要想毕业就进大厂,本科拿到月薪15K以上,硕士拿到25K以上,做好以下这些很重要:

● 选定一门主攻的基础语言方向,比如Python、C、Java等,并真正攻克它;

● 算法和数据结构:数组、链表、二叉树、堆栈、排序算法、B+/B-树、DP(动态规划)等;

● 疯狂刷题,撒比算法题、Leetcode等等,都挺不错,刷起来

● 计算机网络:HTTP、DNS、ARP、TCP、IP、ICMP、UDP等; 

● 操作系统:IO、存储器、多线程/多进程、同步机制、处理器调度及死锁、设备管理、通道等;

● 计算机组成原理:冯诺依曼计算机组成、计算机层次结构、计算机性能指标等;

● 多实践多上机,机房要常去

● 抓住一切可以实习的机会,是否有实习经历往往是大厂给不给offer的分水岭

以上其实是大厂面试官的考核范围,并且他们之间有前置知识点的相关性,简单点说:不会基础语言不会算法和数据结构,你肯定没法刷题,也没法看懂计算机网络和操作系统、组成原理等等。。

重点强调下算法,非常重要,无论是读研读博深造还是通过大厂的面试,算法都是必须的。

大家可以在Leetcode上刷题,如果你能把Leetcode上重难点掌握,说实话你就搞定了70%的大厂技术面试的最重要环节,这绝不是在忽悠,而是身边师弟师妹的普遍反馈。

比如这个阿里大佬刷Leetcode总结的算法笔记,如果你能吃透,那我相信80%的技术面试都会不在话下:Github 疯传!史上最强悍!阿里大佬「LeetCode刷题手册」开放下载了!

接下来说下我应届加入腾讯的经历,供大家参考:

大三就制定了加入腾讯游戏的目标,同时锁定在图形图像开发,这意味着要好好学习C++。

因为大学前两年全荒废了,所以大三是冲击的一年。

对于想做程序员的同学,我建议夯实基础:

要学好C++,先了解C语言,当年这是师兄告诉我的,今天回头看非常对!

当时对计算机缺乏系统认识,最难理解的就是指针,书上说它是个变量地址,那么问题来了,什么是地址?一不小心,指针就让程序Crash了。直到读研的时候,看了大学教材:《计算机组成原理》这本书,我才明白指针背后的含义。

攻克完C语言之后,听师兄师姐说数据结构也是自学编程需要攻克的重难点。从数组到链表再到堆栈、二叉树、平衡二叉树、红黑树、B+/B-树,简直就像看天书。还记得二叉树的先序,中序,后序遍历就把我弄晕乎了。更别提后面的AVL树的删除以及B-树。

我应付看不懂的方式也很粗暴:做笔记,勾选出没看懂的部分,反复看。一遍不行看两遍三遍四遍,直到所有内容看懂为止,看懂后就上机,上到天昏地暗上到头晕脑胀。数据结构这本书,记得来来回回看了10多遍,上机100小时以上。

这之后开始系统的学习网络、C++、VC,还记得有一本非常厚的书:《C++ Primer》,可以说上面的每一个例子,都上机造过轮子。

随后开始啃Effective C++》、《More Effective C++》、《C++程序设计原理》、《深度探索C++对象模型》、《STL源码剖析》、《计算机网络系统方法》、《TCP/IP详解》。

除了疯狂自学,毕业的压力也很重,但掌握的东西越多,你对未来就越笃定。

疯狂学习的过程是枯燥且伴随痛苦的,编译报各种不通过的时候让人无比抓狂,知识点学不会的时候会让你怀疑自己的智商。

曾经看过的一部分书籍:

 

成长的过程,润物细无声,极难察觉。但那段枯燥痛苦的学习和刷题岁月让我未来的道路受益匪浅。毕业后,我也如愿拿到腾讯游戏年薪近15万(多年前)的Offer,开启了职场生涯。

看经典计算机书籍,真的是计算机专业的学生成长最快的方式,不光能让你的知识和能力迅速提升,同时还能让你在面试中获得绝对优势。

另外我把大学和工作中用的经典电子书库(包含数据结构、操作系统、C++/C、网络经典、前端编程经典、Java相关、程序员认知、职场发展)、面试找工作的资料汇总都打包放在这了,这套资源是伴随我从学生一路成长为腾讯高级开发工程师,360技术经理、360技术总监、中小公司CTO的打包全套,非常宝贵!点击下方链接直达获取:

 

我已经帮大家打包好了,点击下方链接直接获取:

毕业后,担任过360技术委员会成员,在C++这条路上走得更远了,再给大家一些系统的建议:

一、C/C++入门阶段

这个阶段全力以赴的话,一年就差不多了,应付校招绰绰有余。

刚入门的时候我们主要是学习培养编程思维和动手能力,深刻理解面向过程和面向对象的思想方法,这对以后的程序员之路非常重要!

所以学习语言更为重要:

面向对象编程思想;类的封装,构造和析构、静态成员、对象管理;类的构造(有参构造函数、无参构造、拷贝构造、默认构造函数)和析构;对象动态管理、友元函数、友元类、操作符重载; C++编译器对象管理模型分析;类对象的动态管理(new/delete);友元函数和友元类;运算符重载(一元运算符、二元运算符、运算符重载难点、项目开发中的运算符重载);类的继承、多继承及其二义性、虚继承;多态(概念、意义、原理剖析、多态案例);虚函数、纯虚函数、抽象类(面向抽象类编程思想案例);函数模板、类模板,模板的继承。

C++类型转换;C++输入输出流(标准I/O 文件I/O 字符流I/O);C++异常处理(异常机制、异常类型、异常变量、异常层次结构、标准异常库);利用一些IDE开发工具:诸如Windows平台VC系列:VC++6.0(比较古老) ;Visual Studio2013, Visual Studio2015,Visual Studio2017,Visual Studio2019;Mac平台的XCode系列,还有CodeBlock,另附一些高级编辑器Notepad++, EditPlus,UE等一些开发工具的常用设置和一些常见快捷键的使用。

这个阶段推荐以下两本书:

Essential C++》 这是一本内容不多但很实用的C++入门书籍,强调快速上手与理解C++编程。本书主要围绕一系列逐渐复杂的程序问题,以及用以解决这些问题的语言特性展开讲解。你不只学到C++的函数和结构,也会学习到它们的设计目的和基本原理。

C++ Primer》 本书对C++基本概念、技术、以及现代C++编程风格进行了全面而且权威的阐述,是C++初学者的最佳指南;本书可以帮助你编写实用的程序,而无需首先精通每个语言细节。对于中高级程序员,本书也是不可或缺的参考书。

二、C/C++开发进阶

这个阶段非常刻苦的话,需要两年及以上时间。

在第二阶段学习的时候,就是比较重要的了,C++开发的进阶之路,更是一个让自己找份薪水比较体面的工作的筹码。

C++进阶之STL:

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

C++进阶之设计模式:

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

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

这是所有编程语言中最应该学习的部分,程序组成的基础之一。顺序存储、链式存储、循环链表;

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

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

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

这个阶段推荐以下几本书:

Effective C++》和《More effective C++》 作者是Scott Meyers。你应该熟读它们,并清楚地理解每个项目。该书围绕55条准则,每一条都介绍了一个可让你写出更好的C++程序代码的方法,并以特别设计过的例子详加讨论。

Exceptional C++(C++编程剖析)》和《More exceptional C++》 这两本书中都包含了40个C++编程问题,这些问题会让你磨练自己的技能,最终成为优秀的C++程序员。这些问题是Herb Sutter精心挑选,与ISO/ANSI C++官方标准相一致,帮助程序员在设计、架构和编码过程中保持良好的风格,从而使编写的C++软件更健壮、更高效。

Inside the C++ object model(深度探索C++对象模型)》 本书专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承,帮助你理解程序的底层实现,以便写出更高效的代码。

The design and evolution of C++(C++语言的设计与演化)》 本书作者也是C++语言的设计者Bjarne Stroustrup,作者在书中综合性地介绍了C++的发展历史,C++中各种重要机制的本质意义和设计背景,这些机制的基本用途和使用方法,讨论了C++所适合的应用领域及其未来的发展前景,既没有忽略关键性的详情,又没有过多地陷入技术细节。

三、C++开发高级

这个阶段几乎伴随了职场后续的整个生涯,只有更精没有最精,C++高手之路,任重道远!

C++进阶之QT开发:

掌握QT类库构架,图形界面开发模型;掌握QT开发技巧,消息机制,图形处理;掌握QT网络编程,UDP,TCP使用方式;掌握QT文件处理方式,序列化;掌握QT在windows,linux,ios,android不同平台下的移植技术

C++进阶之Windows/Linux网络服务器:

掌握Unix/Linux平台开发方式;熟练使用系统调用;熟练Unix/Linux内存管理,进程,线程调度;掌握MFC界面开发,网络编程;熟悉网络服务器开发方式,熟练编写TCP,UCP网络服务程序;掌握同步/异步IO模型在网络编程中的使用方式。

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

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

如果你能熟练掌握以上列出的技能,具备解决复杂问题和技术难点的能力,而且你能独立开发一些比较复杂的功能模块,这个时候月薪过万都是小意思了!

这就是所谓的程序员大牛了,当下炙手可热的全栈开发工程师,既晓前端,又通后台。快速定位问题,解决问题对他们来说已是小菜一碟,就是人们常说的神秘大牛,只在公司技术攻关的时候才会才看到他们的身影。

这个阶段,在C++领域,你已经飞跃愚昧之巅跨越绝望之谷,进入开悟之破了。推荐以下书籍:

The C++ standard library(C++标准程序库)》 这是标准模板库字典,你可以在本书中找到STL相关的一切知识。本书焦点放在标准模板库、检查容器、迭代器、函数对象和STL算法上。每一个元素都有深刻的呈现,包括其介绍、设计、运用实例、细节解说、陷阱、意想不到的危险,以及相关类别和函数等。

Effective STL》 这是Scott Meyers的第三本C++专著,也是学习STL最权威的书籍。作者对书中的50个指导方针都作了详尽的分析,并配以示例。通过这些规则,C++开发者可以最大限度地使用STL。

Generic programming and the STL(泛型编程与STL)》 本书阐述了泛型程序设计的核心理念:concepts(概念)、modeling(模型)和refinement(改善),并为你展示这些观念如何导出STL的基础概念:iterators(迭代器)、containers(容器)和function objects(函数对象)。按照本书所述,你可以把STL想象成一个由concepts组成的library,你将学习到STL正式结构并理解其强大的优势。

Exceptional C++ style》 作者为Herb Sutter。本书同样提出了40个C++风格相关的问题,对一些至关重要的C++细节和相互关系提出了新的见解,为当今的关键C++编程技术(如泛型编程、STL、异常安全等)提供了新的策略,帮助开发者在开销与功能之间、优雅与可维护性之间、灵活性与过分灵活之间寻找完美的平衡点。

C++ template》 这是一本关于C++模板的完整的参考手册和教程,它强调模板的使用实践,包含了现实世界中的例子。每个C++程序员都应该好好读一读这本书。

Modern C++ design(现代C++设计)》 作者Andrei Alexandrescu为C++程序员打开了一个新的局面。本书提供了一些针对软件设计的前沿方法,如联合设计模式、泛型编程,使程序员可以编写有表现力的、灵活的、高度可重用的代码。

Thinking in C++(C++编程思想)》 C++ 领域权威著作,介绍了C++实用的编程技术和最佳的实践方法。

以上是用一年时间系统学习C++的建议。

还有一个我最近发现的一个非常赞的视频,是一个国外 C++ 游戏引擎开发工程师录制的一套偏向 talk 类型的教程,比较通俗易懂和深入浅出。

推荐一下:

另外翁凯老师无论是 C、C++、Java 的视频都讲得非常深入浅出,值得学习。

这是网易云课堂地址:

最后献上C/C++的一份修炼体系图,希望对大家有帮助:

 

程序员要想进大厂先从刷算法做起是个好方法,算法厉害的人进大厂非常容易,这里送一本阿里P8撰写的算法刷题笔记,身边不少朋友通过它加入大厂:

祝大家前程似锦,在编码的道路上一马平川。

 

C 0条回复 评论

帖子还没人回复快来抢沙发