文章每周持续更新。您的“三连冠”是对我最大的肯定。可以微信搜索公众号《后端技术学堂》立即阅读(一般比博客更早更新一两篇文章)。最近知乎经常被邀请回答诸如如何学习C++,C++后台开发问题应该保留哪些基本技能等问题。本人从事C++后台开发工作,目前在腾讯从事软件开发,所以写这篇文章来分享一下我的C++后台开发学习之路和点过的技能树,希望能给同学们一点帮助想搞后台开发的朋友可以参考一下,如果能帮助大家少走弯路就更好了。工欲善其事,必先利其器。好书可以让学习更有效,所以在每个技能点之后,我都会推荐一些书。都是我读过的,很有参考价值的书。文末可以获得学习路线资源,需要的同学可以自行领取。我分享的是我的学习之路。如果你也能按照这个学习路径好好研究一下,我想你在后台开发技术上已经有非常好的技术积累了。凭着项目实践,大部分大厂的面试都过不了。可疑的。通过计算机基础CS或软件工程研究生综合考试的同学可能对这个称呼并不陌生。是的,我说的是专业课代码408的综合计算机基础。本专业课包括:数据结构、计算机组成原理、计算机网络、操作系统。为什么要提这门课,因为基础知识太重要了!这是专业班和培训班最大的区别。理论知识不一定能马上应用到项目中,但是在和别人讨论一个技术问题的时候,你可以知道它的深层次原因,你就会对问题有一个更全面、更全面的认识。系统。比如你可能听过栈这个词,但是你知道它的具体结构和区别吗?学完数据结构,你就明白了;你知道计算机可以加减乘除,但是它是如何实现的呢?组成原理告诉你;你知道程序执行时如何区分指令地址和数据地址吗?操作系统会告诉你答案。所以如果你的大学不是计算机相关的专业,或者你是这个专业的专业但是没有完全掌握基础知识,强烈建议你抽出时间认真学习这些课程。推荐书籍:计算机基础综合推荐读大学计算机专业教材就够了:数据结构、计算机组成原理、计算机网络、操作系统。数据结构?1.教材:《数据结构》严为民《清华大学出版社》2.辅导书:《算法与数据结构考研试题精析(第二版)》机械工业出版社《计算机组成原理》教材:《计算机组成原理》唐硕飞高等教育出版社?指导书:《计算机组成原理考研指导》徐爱萍清华大学出版社tangshuofei高等教育出版社操作系统教科书:《计算机操作系统(修订版)》&tn=se_pczhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)TangZiyingxidianzixidianzi大学出版社出版社,:《计算机网络(第五版)》谢希仁《电子工业出版社》指导书:《计算机网络知识要点与习题解析》哈尔滨工程大学出版社《视频教材》上面的教材和教程大概很无聊。它是计算机科学的基础内容。如果没有系统学习过或者没有学好,强烈推荐跟着视频课程学习。武汉大学-数据结构MOOC网络课程华中科技大学-计算机组成原理!专业班和非科班的区别不在于谁学的编程语言多,也不在于谁擅长使用框架。本质上的区别在于理论知识储备和用CS思维独立思考、分析和解决问题的能力的区别。C++的基本语法和C语法是一门语言的基础。C++的基本语句和语法与C非常相似,最大的区别在于类和异常处理机制,以及模板的应用。因此,学习C基本语法是很容易的。很快,没有C基础也没关系。看了下面推荐的书,也差不多了。你光说说而已,不练假动作。推荐书籍:《C++ Primer 中文版(第 5 版)》经典入门书籍,别跟大学教材XX比,不是一个级别。标准库STL学习STL提供了丰富的算法库支持和各种容器。C++标准库提供了最基本的标准输入输出iostrem,各种容器vector、set、string。掌握标准库不重复造轮子(以练手学习为目的的造轮子除外)写出更多的C++代码。推荐书籍:《C++ Primer 中文版(第 5 版)》《STL源码剖析》AdvancedC++学完以上C++基础知识,你只会用。要用好它,你需要不断学习和进步。站在巨人的肩膀上写出更健壮、更高效的代码,你从来没有踩过的坑,别人已经踩过了,而且有很多优秀的书籍可以学习一些语言细节和更好的编码习惯。推荐书《Effective C++》55种具体的程序和设计改进方法,非常值得一读,老手和新手的区别由此产生!《More Effective C++(中文版》同一个作者,在EffectiveC++之后,ScottMeyers在1996年推出了这部“续集”,文章数量变少了,页数却增加了。原因是这次的选材比“一集”要高,尤其是第5章,梅耶斯将这一章命名为技术。《Inside the C++ Object Model》这本书还有中文版,翻译质量也很高《深度探索C++对象模型》C++11的新标准提供了更优雅、更C++的实现来解决存在的问题。现在的C++软件大部分还是C++98的标准。C++98是C++的第一个标准。)对C++的扩展支持的大部分功能已经包含在C++11甚至C++2X的更新标准中,与时俱进,拿起更先进的生产工具,工具就是效率。推荐书籍:《深入理解C++11》Linux系统基础与shell脚本现在几乎所有的互联网服务都运行在linux系统上。如果对Linux系统一窍不通,就连后台开发都谈不上,所以首先要学会Linux系统的操作,还不如文件管理,系统命令,文件系统,权限管理,系统服务等。至于shell脚本,类似于win的批处理脚本。相信我,你在linux下工作迟早会用到它,所以尽快系统学习吧。推荐书籍:《鸟哥的Linux私房菜基础学习篇》本系列还有一章服务器搭建。个人觉得没有必要看《Linux Shell脚本攻略》《Shell脚本学习指南》Linux环境高级编程。普通用户只需要了解系统操作,软件开发人员还需要了解编程接口。上一阶段,你已经能够熟练操作Linux系统,了解一些常规的系统命令和服务,能够使用shell脚本编写一些小工具,提高日常开发效率。我们的目标是星辰大海。作为一名软件工程师,我们需要更深入地掌握Linux系统编程技能,学习系统编程接口、系统调用API、内存管理和进程间通信(IPC)。这就是这个阶段的学习目的。推荐书籍:《UNIX环境高级编程》这是一本linux编程必读的APUE。强烈建议通读一遍,值得反复阅读。《Linux/UNIX系统编程手册》这本书和APUE有点重复。看完APUE,就跳着看。您通常可以参考目录。Linux网络编程套接字在同一台机器上的进程之间进行通信(IPC)的方式有很多种,比如消息队列、FIFO、共享内存等。网络编程套接字是指:分布在不同机器上的程序,通过系统提供的网络通信接口,通过网络连接不同机器上的进程,实现跨机器的网络通信。一般有UDPsockets、TCPsockets、UnixDomains。当然,如果你是通信从业者,对SCTP套接字一定不陌生。推荐书籍:《UNIX网络编程 卷1:套接字联网API(第3版)》《UNIX网络编程 卷2:进程间通信(第2版)》数据库和存储程序的运行数据都在易失性内存中,需要持久化存储就需要数据库。一般来说,一个后台服务系统需要考虑数据落地和持久化存储。这时候就会涉及到数据库的选择和应用。数据库分为关系数据库和非关系数据库。关系型数据库是指使用关系模型组织数据的数据库,以MySql为代表。关系模型是指二维表模型,关系数据库是由二维表及其之间的联系组成的数据组织。非关系型数据库是以键值对的形式存储的,结构不固定。每个元组可以有不同的字段,每个元组可以根据需要添加一些键值对。它不局限于固定的结构,可以减少一些时间和空间的开销。代表有redis,memcached,腾讯内部组件ckv也是非关系型数据库。推荐书籍:《SQL必知必会》《高性能MySQL》redis官方文档redis中文网有很多关于redis的应用,比如基于redis的分布式锁的应用,高并发抢红包模型等等,看完之后可以写一篇关于redis的文章分布式锁原理与应用一文。算法基础计算机算法是解决计算机可以使用编程语言理解的问题的方法。一个好的算法可以更简洁高效地解决问题。现在不管是校招还是社招,大厂笔试都会考察算法。即使不是笔试,作为软件从业者,也要经常练习算法来保持手感。学习算法是一种学习解决问题的通用方法,有助于提高逻辑思维。学习方法根据我个人的经验,不建议直接看书学习算法。建议边看书边结合在线编程算法题。具体:看数据结构或者算法的介绍,同时在牛客或者Leetcode上刷题,因为看的太枯燥,容易失去耐心。在线写题的好处是你可以每天设定目标,享受每道题都过关的快感。坚持积极的反馈更容易。架构能力架构能力是利用现有知识设计整个后台服务系统的能力。不仅需要掌握技巧的维度,更需要深度,能够根据不同的需求和系统约束制定不同的设计方案。这时候要考虑的东西就会更多,包括服务模型的设计:是多进程还是多线程甚至协程微线程,分布式还是集中式;存储选择:数据库选择应该考虑哪一个?需要根据存储数据的特点和应用场景来区分。如果是社交应用数据,用非关系型数据库存储可能会更好。如果是电商订单类型的数据,那么用关系型数据库存储可能会更好;当然,还需要考虑后台系统的其他方面,就不一一举例了。多练习说了这么多,最重要的还是要练习练习练习。理论知识储备是必要条件。移动互联网时代,每个人接触到的碎片化信息过于繁杂、混乱。以我个人的经验,高浓度知识的精髓还是需要从大师的书上吸取,所以看书是最正确快速的学习路径,没有捷径。但是仅仅看书是不够的。编程能力和技术也是一门现代手艺,需要每天不断打磨,就像一万小时法则:人们眼中的天才之所以非凡,不是因为天赋高超,而是因为努力。不断的努力。一万小时的磨练,是任何人从普通人成为世界级高手的必要条件。成为某个领域的专家需要10000小时,按比例计算是:如果每天工作8小时,每周工作5天,至少需要5年时间才能成为某个领域的专家。这就是一万小时法则。如何打磨和提高编程技能?找个项目,找个自己感兴趣的东西,用代码实现。兴趣是最好的老师。这一点也完全适用于编程和技术学习。人们总是倾向于做一些快速获得乐趣的事情,比如玩游戏30分钟以获得乐趣。相反,技术碎片的提升是一个长期的过程,三分钟普及肯定很难成功。所以用技术去做自己感兴趣的事情和有趣的编程,比如写一个抓取网站数据的爬虫小程序或者写一个小游戏,或者自己造轮子供自己使用,愉快地优化轮子。这样,每走一步都能获得一点成就感,激励自己坚持下去,慢慢就会有质的飞跃。一个网站这个网站要告诉大家,这个网站就是一个C++的百科全书,类似于linux的man手册。平时开发忘记了函数名或者容器使用,直接搜索非常方便。我下载了离线版本。网址:C++参考:cppreference整理了文中提到和推荐的电子书和视频教材,都是学习过程中收集的。微信搜索“后端技术课堂”,回复“1024”分享给大家。绝对不够完美,不能一口气写下来。文章会不断更新和修改。想到就加吧。保持文章更新。你可以在微信搜索公众号“后端技术学堂”,回复“资讯”,里面有我为你准备的各种编程学习资料。文章每周持续更新,我们下期再见!
