学习建议

对于技术岗位来说,软件基础知识可以说是个人的硬实力,是你通过面试的一大前提。说到基础软件的学习,对于很多没有基础知识的同学来说,可能有点力不从心。这么多软件基础知识,这么多技术书籍,应该从哪里入手呢?别慌,我当初也有和你一样的困惑。之后我一步一步挖坑,构建了一个比较完整的知识体系。回头想想自己,如果我是个小白,早就能确定一个合理的学习路线,由浅入深的学习知识。学习过程肯定会更顺畅,效率自然会更高。所以我会根据自己的学习经验,结合《软件基础》几大板块的知识,制定出一条适合自己的学习路线,希望正在学习的同学们少走弯路!

首先,对于软件基础知识的学习,建议尽量多看一些经典书籍。第一遍读的时候,没必要看得太仔细太快。理解这本书的知识框架很重要。在掌握了整体的逻辑框架后,第二遍就可以详细学习每一章的细节了。这时候你也可以根据自己的情况有选择的看一些相对重要的章节,这样效率会更高。对于一些经典的技术书籍,只看一两遍,很难完全理解其中的精髓。之后可能需要多次复习,也可能需要在实际应用中复习书本上的理论知识,以便更深入的理解。比如《深入理解计算机系统》就是一本经典的书,很多地方再读一遍就会有不同的理解和体会。

每读完一本书,都要学会做笔记,对所学内容进行总结消化。笔记里的内容都是我们自己的,在学习的过程中,难免会对一些知识点的理解有一些偏差和不足。笔记可以帮助我们很好的发现这些问题,然后改正,做好记录。

软件基础主要分为这几大板块:C++基础、数据结构与算法、操作系统、计算机网络、数据库、设计模式和一些常用工具。

C++基础:

C++ Primer 第5版

STL源码剖析(侯捷 著)

深度探索C++对象模型(侯捷 译)

Effective C++(侯捷 译)

软件学习中,语言肯定是最基础的,由于C++较低层,语法非常灵活(比较适合写算法),就导致语法规则比较繁杂,而且涵盖了C语言的内容,学习C++语法相对python、java等其他高级语言时间成本更高一些。

学习C++语法,第一版C++入门,最权威的C++语法学习书籍。它非常全面地解释了C++语法和C++11的各种新特性。看完之后,很有帮助。如果有时间,建议至少看两遍。如果时间有限,建议至少通读一遍,把握这本书的大致框架,然后根据个人情况有选择地阅读。

STL源码分析这本书讲解了C++底层的实现,包括C++底层内存的管理,各种容器的数据结构的实现,常用算法的实现等。建议把它列为必读,可以帮助我们深入理解C++底层,也可以复习巩固数据结构。面试中也有很多经常考的知识点,比如内存池的机制,traits技巧,一些常用容器的底层数据结构。

探索C++的深层对象模型这本书解释了C++面向对象特性的底层实现机制。由于是翻译版,读起来会相对晦涩,但内容很重要,尤其是虚函数的底层实现机制。建议多看几遍,加深理解。这基本上是C++的必修知识点。看完这本书,对C++面向对象的理解有很大的帮助。建议你一定要看。

《有效C++》这本书主要讲解了一些C++程序编写过程中需要注意的子句,帮助整理了一些C++程序编写中常见的错误和注意事项,也是面试中经常考到的。如果你认真看过《C++初级读本》,这本书看起来会很快,它的很多内容都包含在《C++初级读本》里。

总之,C++由于它自身的特点,学习起来不会很轻松,需要一定的时间成本,但是如果你认真的学习了以上4本书,你会对C++有一个新的认识!相信我,等你学好C++,再学习其他高级语言会觉得轻松许多!

数据结构与算法:

数据结构

大话数据结构

浙大数据结构

算法

算法 第4版

刷题

LeetCode中文网站

剑指offer 第2版(建议至少刷两遍)

程序员代码面试指南(左程云 著)

数据结构可以说是软件设计的精髓。建议夯实基础。《大词数据结构》这本书非常适合初学者建立数据结构的知识体系。另外浙大的数据结构在线课程也很不错,在哔哩哔哩上可以直接找到。解释简洁易懂,弥补了大词数据结构中一些解释不清的地方。学完数据结构基础,就可以开始学习算法了。建议学习算法。这本书可以帮助你梳理一些常用算法的原理和应用。

在学习数据结构和算法的同时,建议同步学习C++语法知识。学完这两个基础,就可以刷题了。在刷题的过程中,可以同步学习STL源代码分析,有助于更轻松地使用STL,提高代码效率。如果想刷题,建议先刷LeetCode。如果英语不好,可以去LeetCode中文网。LeetCode里有一个数据结构的探索栏目。按照难度分为初级、中级、高级面试题,基本涵盖了所有知识板块的高频题。可以帮助新手一步步刷题,培养写代码的感觉。此外,《剑指offer》这本书还涵盖了很多高频面试问题。你可以在Niuke.com的剑指报价栏刷一下。因为题的难度级别不明确,新手刷题效率会低。建议在LeetCode探索专栏做完初级和中级后再刷剑指offer题。其中,问题在面试中出现的频率非常高。建议刷两遍,掌握每道题的思路和优化方法。最后,作为进阶者,可以看看左申写的《程序员代码面试指南》,非常好的一本书。里面讲解的编程题非常经典,不仅局限于国内it公司,还面向全球。里面收录了一些国外知名It公司的高频面试问题,有助于开拓视野。

在刷题的过程中,要非常注重方法。一般刷题可以分为龟兔赛跑。龟刷法的本质是注重每道题目的质量,不满足于一个解,而是尝试写出各种解,比较它们的时空复杂度。但是海龟制度并不意味着死在一个问题上。越是绑乌龟,越要注意时机。最好能解决,不能就不要固执。我觉得一个比较好的平衡点是一个小时左右。如果一个小时还是解决不了,可以看看小技巧。如果还是解决不了,可以看看讨论区的答案或者网上搜索答案。兔子刷法的精髓就是要暴力,要有力有力,要创造奇迹。作为一个兔子玩家,你要的是疯狂。上来就看答案,照着写。这种做法看似不靠谱,其实有内在的合理性:大部分算法都不是我们发明的,比如动态规划、二叉树、线段树、并集、贪婪算法等。后来所谓的不看答案自制算法,其实就是在用固定套路。另外,编程题的知识点非常复杂。LeetCode把问题分成各种标签。建议先按幅面顺序刷标签,每个标签尽量盖住。我个人比较喜欢海龟系统。这种方法可以更好的理解每道题的方法和套路,也可以训练自己的思维。毕竟刷题不是题海战术,刷题质量更重要。刷完一个题,最好把思路和方法记录下来,然后定期做一个总结,把一些常用的方法总结归类。慢慢的,你会发现,刷牙也不过是那些套路,你会很懂的。

操作系统:

操作通用知识

深入理解计算机系统 第3版(CSAPP)

操作系统 精髓与设计原理 第8版

程序员的自我修养

Linux

鸟哥的Linux私房菜 第4版(用于了解Linux基本命令)

UNIX环境高级编程 第3版(APUE)

Linux/UNIX系统编程手册(上下册)

内核

Linux内核设计与实现(LKD)

深入理解Linux内核

在语言基础和数据结构之外,操作系统可以说是面试考查最多的内容了,在面试中很可能会问的比较深,毕竟操作系统是很深奥的!

学习操作系统的知识,可以先看一下关于深入了解计算机系统和操作系统的神书。内容非常经典,通俗易懂,适合入门。对于软件,建议先学习第二、三部分,再根据个人情况学习第一部分。然后学习操作系统的本质和设计原理。这本书比现代操作系统更容易理解,可以和CSAPP一起看。两本书的知识点相辅相成。看了前面两本书,如果想深入研究编译链接的原理,可以参考《程序员修养》。这本书非常详细地解释了程序编译过程的具体细节。

另外,针对Linux进行学习,可以先看鸟哥的Linux私房菜,快速看,主要是了解Linux基本命令。进一步学习系统编程,可以学习APUE,其中讲解了Linux/UNIX常用系统编程接口的使用方法和对应的应用实例,由于这本书有些理论知识讲解地比较简略,而Linux/UNIX系统编程手册讲解更为详细,建议两本书结合着看。

学习了上面提到的操作系统书籍,如果还想学习Linux内核的原理,可以看看Linux内核的设计与实现,深入了解Linux内核。因为后者更注重理论细节的解释,看起来晦涩难懂,容易陷入细节。《LKD》这本书侧重于实践,没有涉及太多细节。主要是将各个模块结合起来,从宏观的角度进行讲解,可以帮助你快速建立一个相对完整的知识框架。建议先学后者,再学前者,这样可以更好的理解每个知识板块的逻辑关系和细节实现。

计算机网络:

计算机网络 第7版(谢希仁 著)

TCP/IP详解 原书第2版(卷1)

UNIX网络编程 第3版(卷1)

学习网络,可以先看《计算机网络》这本书,讲解通俗易懂。你可以快速看完眼前的物理层和链路层,只需了解基本原理。重点学习网络层、传输层和应用层,其中传输层的TCP和UDP是面试中最常考的,非常重要。网络知识很容易理解,但是知识点比较复杂,一段时间不看很容易忘记。建议学习后将所有知识点整理成文档或笔记,有助于找工作前的复习。

学完计算机网络,就可以基本建立计算机网络的知识体系。但是,这本书不够深入。建议你继续学习TCP/IP详细卷1。作为对TCP/IP协议的深入研究,这本书非常详细,阅读过程中很容易陷入细节。系统地学习整本书需要时间。如果时间有限,可以有选择地先学习一些章节。建议你先看传输层的内容,对理解TCP和UDP有帮助。

学习完前面两本书的基础知识,就基本掌握了计算机网络的理论知识,建议将这两本书列为必读。另外,如果想要对网络编程进行实践,可以继续学习UNIX网络编程 卷1。

数据库:

数据库系统概念 第6版

mysql必知必会

数据库的知识面试问的不多,但是数据库对于以后工作是肯定会用到的,如果有时间建议将基础打好,可以先看数据库系统概念,了解数据库的基础知识,然后阅读mysql必知必会这本书,可以帮助你快速学习 mysql 的基本语法。

设计模式:

大话设计模式

对于设计模式,如果没有大型软件的项目经验,这方面的能力很难体现出来,所以可以作为知识点的扩展学习,对其进行了解即可,面试常考的有单例模式、工厂模式等常见的设计模式。

以上知识的学习路线和相关 电子书籍 是我结合自己的学习经历总结的,不一定适合所有同学,但我相信大的方向还是具备通用性的,在学习过程中可以作为参考,也可以根据自己情况灵活调整自己的学习路线,找到自己认为最有效率的学习计划。附上我的学习路线总结图。另外小编还整理了一些C/C++后台开发教学视频,相关面试题,需要的朋友可以点击:C/C++ Linux后台开发相关视频,文档代码资料包,学习路线思维导图免费领取https://docs.qq.com/doc/DYUtDWWtPeUxEUlBy

C++后台开发免费学习学习地址:C/C++Linux服务器开发高级架构师/C++后台开发架构师​

面试技巧

在具备了技术上硬实力的基础上,面试技巧也是非常重要的,它决定了你能否充分展现自己的实力。

从以下几点,来谈谈我对面试的看法:

简历:简历一般包括个人信息、项目经历、专业技能、个人荣誉四个方面,其中项目和技能是核心。对于一个项目,描述的逻辑一般是:简要介绍项目的需求和目标->你主要负责什么->分几点详细描述你的工作->最终的进展和相关的成果。你要对自己的工作非常清楚,同时要善于挖掘项目中的技术点。你要把每一个技术点都烂熟于心,要问自己为什么,为什么要用这个技术,这个技术的优缺点是什么,为什么适合现在的项目,用后得到。。。然后有条不紊的写在自己的作品里。对于专业技能,首先要真正了解自己的精通程度,准确描述自己的精通程度。一般这个词是理解->熟悉->掌握。如果只是学习基础理论知识,而没有深入,建议用理解;如果理论知识比较深入,并且你有相关实践经验,建议用熟悉度;但如果某项技能可以说是大牛甚至是专家级别,建议用熟练度。所以很多时候,建议用知识和熟悉程度来描述专业技能,熟练程度尽量不用。

面试前的准备:面试前首先要调整好自己的心态,有一个良好的心理素质,防止自己在面试过程中过于紧张,显得非常慌张。然后是自我介绍的准备,一般需要3-5分钟,简单介绍一下自己的信息,项目经历和一些获奖经历等。自我介绍时可以突出自己的一些亮点,可能会引起面试官的兴趣。可以提前把内容写在纸上,在家里或者宿舍对着镜子练习几次,直到可以清晰、流畅、自然的表达出来。然后就是面试问题的准备。在这方面,首先我对相关知识进行了系统的学习,并对知识点进行了总结或笔记,然后在网上收集了一些高频的面试问题来测试自己。之后可以在网上找一些面经,通过模拟面试的方式尝试回答面经中的问题。面试不多的同学都会有这种感觉。面试官问的这个问题你其实是知道的,但是突然问你,你可能就不能很有条理很有逻辑的回答了。这个模拟训练可以很好的提高你这方面的能力。面对每一个问题,尽量回答清楚,描述流畅,分析透彻。最好能横向和纵向做一些。

面试官:首先在衣着方面,面熟的同学应该穿着干净得体,不必特意穿正装。如果你穿正装去面试,你很可能会发现只有你一个人穿。。。如果是现场面试,最好自己打印几份简历。面试的时候,一定要保持自信的状态,面带微笑,说话礼貌谦虚,给面试官第一印象。在面试中,你通常先介绍自己。在这个过程中,面试官了解你的基本信息,然后开始提问。如果你对你的项目感兴趣,你通常会问更多关于项目的问题。你可能会针对项目中的每一个技术点提出非常详细和深入的问题,也可能会针对项目提出一些开放性和可拓展性的问题,比如这个项目或者技术点。你认为有可以优化的地方吗?应该如何优化它们?所以你要对自己的项目了如指掌,对每个技术点的细节都要了解清楚,并且要广泛思考,对一些技术点要有所期待和拓展。除了提问,重点是问基础知识。在回答问题的过程中,注意控制好自己的节奏,尽量把面试官引向自己擅长的知识,遇到自己熟悉的知识不要太着急,语速太快。有条理、全面地提问。如果不熟悉或者不记得知识,可以先解释一下问题中的一些概念,在这个过程中也可以给自己一些思考的时间。如果真的不清楚或者不记得了,可以老老实实说不熟悉。如果强行随机回答,效果会更差,给面试官留下不好的印象。另外,互联网厂商一般要求现场写代码,把核心处理代码写在纸上。所以在平时刷题的过程中,尽量一个字母一个字母的打,不要用代码来完成。当然,刷题很重要。面试结束的时候,面试官一般会问你想问什么问题。这时候就问一些自己感兴趣的话题,比如部门的研究方向,使用了哪些技术等等。

面试后:每次面试结束后,不要太在意面试结果。下去后,及时记录面试问题,尤其是自己没有答好的问题。你一定要花时间去研究解决这些问题,下次面试你也能解决同样的问题。每次面试后,你都能发现你的项目或者基础知识的一些不足。如果你继续下去,你必须适当地修改和完成你的项目。也可以在基础方面找到自己的弱点。你要多看书,多研究,你也会发现自己表达上的一些不足。你要及时调整,争取在接下来的面试中做得更好。

简而言之,找工作是一场战斗,在这场战斗中,你会不断跌倒,不断爬起来。在这个过程中,你一定要调整好自己的心态,做好长期坚持的准备。不要因为一次面试的失败而否定自己,变得抑郁。如果你真的很沮丧,对你的心情会有很大的影响。你可以和你的朋友和家人谈谈,这将有助于缓解你的不愉快。下次面试前,一定要调整好自己的心情,以饱满的精神状态去。

另外,我前面主要提到了一些技术技巧。在这里,我想补充一下人力资源方面。一般你的技术表现和性格都还可以,HR方面问题不大,但是也要注意。毕竟是导致要约的最后一关。一般来说,HR与专业知识无关。主要看个人性格和工作匹配。你会问一些个人信息,比如家庭情况,有没有女朋友,想去哪个城市工作等等。对于常见的HR问题,可以上网搜索一些常见的答题技巧,在面试中稍微注意一下。在这个基础上,最重要的是保持诚实谦虚的态度,做好自己!

期待你的关注!

C++后台开发学习路线(已多人拿下腾讯后台开发)相关推荐

  1. Linux 服务器开发学习路线总结(配图 c/c++ )后台开发、Golang后台开发、后端技术栈

    本文总结了目前互联网行业Linux c/c++ 后端岗位开发工程师.服务器开发架构师以及Golang开发工程师技术栈知识点.大家可以看看还有没有需要补充的. Linux后台开发工程师专栏 一.算法与设 ...

  2. 这可能是东半球最保姆级的后台服务器开发学习路线

    作者 | 编程指北 来源 | 编程指北(id :cs_dev) 前言 这一篇的主题是「Linux C/C++ 服务器/后台开发学习路线」. 这样的文章相信大家都见得不少了,写之前也非常忐忑,能不能和其 ...

  3. 万字长文 | 这可能是东半球最保姆级的后台服务器开发学习路线

    前言 这一篇的主题是「Linux C/C++ 服务器/后台开发学习路线」. 这篇文章会有点长有点干,可以先去冲杯咖啡,慢慢看~ 正文 | 干货 |收藏 一.后端/后台/服务器开发? 经常在各大公司招聘 ...

  4. 万字长文 | 阿里大佬 ssp offer 的后台服务器开发学习路线

    前言 小北去年经历春秋招,拿到了不少大厂 offer,其中包括 sp.ssp 等,感觉在复习准备校招上还是有一定方法的,因为我自己是 Linux C/C++路线. 所以这一篇的主题是「Linux C/ ...

  5. 初级java开发学习路线_成为初级全栈Web开发人员的10分钟路线图

    初级java开发学习路线 So you have started your journey into the world of web development. But what do you lea ...

  6. web后端开发学习路线_学习后端Web开发的最佳方法

    web后端开发学习路线 My previous article described how you can get into frontend development. It also discuss ...

  7. 阿龙的学习笔记---C++后端开发学习路线梳理、阶段性总结

    1. 前言 不是科班出身,机械学院下的机器人专业,乱七八糟QT.ROS.双目.单片机都接触一些,但是到现在没做过太多软件开发的活儿,所以对于未来找实习找工作没什么底. 研一就快要过去了,因为疫情研一下 ...

  8. 2018web前端学习路线,详谈web前端开发学习路线

    近几年IT业可谓是发展火热,而且新生了很多的职业.在这众多的新生职业中备受瞩目的当属web前端工程师了,web前端在IT行业真正受到重视的时间不超过五年,但是web前端的发展前景却是非常的可观,好前景 ...

  9. 送给大家一套完整的web前端开发学习路线

    本文来源:千锋web前端开发 近几年IT业可谓是发展火热,而且新生了很多的职业.在这众多的新生职业中备受瞩目的当属web前端工程师了,web前端在IT行业真正受到重视的时间不超过五年,但是web前端的 ...

最新文章

  1. Android 亲测源码分享
  2. pyqt5从子目录加载qrc文件_【JVM系统学习之路】一篇看懂类加载
  3. Java GC系列(4):垃圾回收监视和分析
  4. MATLAB字符串数组中查找指定子串
  5. 利用数据库来填充UltraWebTree
  6. 发货通知单不允许新增,只能关联生成
  7. 一起谈.NET技术,DataTable 深入解析数据源绑定原理之高级篇
  8. 用垃圾建设台湾海峡陆桥的主意是否可行
  9. 算法导论第三版 第29章习题答案
  10. 多线程和高并发的区别
  11. 概率论与数理统计学习笔记——6.2统计量
  12. Win10文件夹正在使用,文件夹或文件已在另一程序中打开解决方法
  13. 如何获得FLV视频下载地址并下载
  14. Lynis介绍与使用
  15. 竞价推广方案怎么写,这些点你get到了吗?
  16. linux系统管理及配置
  17. 阿龙的学习笔记---哈希表与C++11中unordered_map学习笔记
  18. 系统学习NLP(三十一)--基于CNN句子分类
  19. SnmpTrap测试与学习
  20. python怎么创建文件夹视频_怎么用python创建文件夹

热门文章

  1. 利用三角形三条边求三角形面积
  2. 三星980处理器和骁龙855_手机处理器最新排名:麒麟980因一缺陷,不敌高通骁龙855...
  3. 金仓数据库KingbaseES数据库参考手册(服务器配置参数14. 版本和平台兼容性)
  4. im4java+GraphicsMagick 的问题
  5. excel 表做下拉框_Excel工作表的组合框下拉列表
  6. sqlmap tamper mysql_sqlmap tamper的使用
  7. 使用WinRAR制作属于自己的单文件版软件
  8. 多任务学习——【ICML 2018】GradNorm
  9. css实现旋转的小箭头
  10. (Tiled官方文档翻译)第十节:使用无限地图(Tiled1.1)