说说我的经历吧。首先介绍一下我的情况。本人现居上海,后台开发,大型互联网公司后端负责人。目前比较主流的是C++和JAVA,我对C++稍微有点经验。先说说我学习C++的经历吧。如果你是临近毕业的学生,??没有太多时间看很多书,你可以按照下面列出的重要性来参考。首先,我觉得算法和数据结构要做好准备,对常见的算法和数据结构知识点非常熟悉,这样在你求职的时候可以很容易拿到一些大公司(BAT等)的offer毕业并申请工作。我是一名非专业学生,毕业后在各种方面奋斗。个人认为毕业后去大厂有两个好处。第一,你的收入会比一般的小公司高很多。小公司的招聘要求相对较低,薪水也少很多。他们真的在招聘。一个能胜任本职工作的人。第二,你的起点会比进入小厂的普通学生高。我这里不是歧视小厂,只是说一个普遍的情况。我自己也是从小厂里千里迢迢过来的。这里我强调算法和数据结构的重要性。尤其是应届毕业生找工作,这个要做好准备,因为这个东西是原则性的基础。公司在面试应届毕业生时,不会过分要求项目经验和各种操作系统原理、网络通信原理等,而这也是唯一能考察一个人基本功的东西。我是被大公司招进来的,基本上问的都是算法和数据结构的问题,比项目经验本身要多。但是社招就不一样了,因为除了准备算法和数据结构,还需要有项目经验,了解操作系统原理,熟悉网络通信,数据库,需要各种开源框架和技术。太多了,就算你准备得再充分,也未必能一举拿下。相反,应届毕业生基本上只需要好好准备算法和数据结构,大学里的其他专业课都不会太差。这基本上是进入大厂的捷径。书籍方面,可以使用计算机专业的相关教材,也可以使用《数据结构与算法分析:C语言描述》《算法导论》等严谨的教材。当然,平心而论,我不敢推荐《算法导论》,因为这本书太大了,没有好的数学知识,真的很难啃。想看更多幽默轻松的书,可以看看程杰的《大话数据结构》。其次,如果有空闲时间,可以看看操作系统原理方面的书籍。当然,你也可以使用你的教科书。推荐一个我看过的,Tanenbaum.A.S《现代操作系统》,Tanenbaum是荷兰人,也是Linux之父LinusTorvalds操作系统的第一任老师。当然,我的建议是,这类书毕竟只是理论知识,不一定要看,但一定要了解一些基本概念,比如进程线程内存模式等基本概念。如果你还有时间,我强烈推荐阅读余家子的《程序员的自我修养:链接、装载与库》。本书涉及Windows和Linux操作系统平台。它使用各种辅助工具来分析程序从源代码到二进制文件到加载到进程地址。空间中的每一个细节,甚至进程地址空间中的堆结构和栈结构也分析的一清二楚。同时,还分析了CRuntime(CRT)、glibc等操作系统接口库的原理和执行逻辑。这真是一本难得的帮助你实践操作系统原理的好书。特别喜欢本书前言中的一段话:“CPU架构、汇编、C语言(包括C++)和操作系统,永远是编程高手的法宝,就像少林寺的《易筋经》,是最好的学了《易筋经》,就无所不能,武功随心;学了编程《易筋经》,高手可以开发操作系统、编译器,甚至可以开发新的编程语言!同样,你学习这些东西是为了以后的实践和输出,而实现这个输出的东西就是编程语言。如果是入门,我先推荐C/C++。只有熟练使用一种编程语言,你才能把你的想法变成现实。注意这里我把C和C++放在一起了,但是严格来说,C和C++还是有些区别的,但是除了一些语法细节上的不同,基本可以认为是相似的。我个人认为C语言是任何想成为高手的人都应该使用的最入门的语言。别跟我说python、go等语言现在很流行。我这里也推荐一本C语言的书。有兴趣的可以参考一下:《C语言程序设计:现代方法》。至于谭浩强的书就别说了,还有大部头《C++ Primer》,虽然是好书,但实在是太大了。语法层面的东西可以学的很快,而stl库里的东西需要多多练习,看这样一本字典一样的书,不容易掌握。当然,如果你想很好地掌握C++,《深度探索C++对象模型》是必读的。还有一本很好的C++实用编码技巧书,里面介绍了C++常用的编码技巧《提高C++性能的编程技术》。建议C++开发者掌握书中提到的所有技能。接下来,让我们谈谈网络。首先,关于网络基础的书籍我没有什么推荐的。现在很多计算机院校都开始用这本好教材《计算机网络:自顶向下方法》了。如果你还没有读过它,你可以阅读它。当然,你必须理解那句话而不是阅读它。比如三次握手、四次挥手的细节你一定很清楚。那你可以找一本网络编程实用的书。如果你没有任何socketapi编程经验,你可以看看韩国尹圣宇写的这篇《TCP/IP网络编程》。本书从基础的socketapi开始,介绍了更高级的io多路复用技术,有非常详细生动的例子。如果你是初学者,我强烈推荐阅读这本书。网络编程需要注意细节的地方太多了,本书都有介绍。很多人,尤其是一些学生,在写了一些可以互相聊天的小程序后,感觉自己对网络通信熟悉了。但是,当这样的程序放到互联网上或离开局域网时,要么连接失败,要么总是收发数据不完整。我当年也是这样过来的。读完本书,你就能明白很多网络故障的原因。在你有一定的网络编程基础后(熟练使用常用的socketAPI),可以看看有双的《Linux高性能服务器编程》。前三章,这本书怎么这么垃圾,我把网络理论书上的东西搬来补字数,但是如果你有基础,按照书上的步骤上机实践,你会发现真的是难得一见的良心之书,桃李满满不说。如果你已经掌握了本书中提到的知识,你可以阅读陈硕老师的《Linux多线程服务端编程》或者像libevent这样的开源网络库,你会得到进一步的提升。这也是我学习网络编程的一些心得体会。注意这里有必要提一下:像UNP、APUE、《TCP/IP详解》之类的书,如果你以后不是专门从事网络工作或者研究的,其实不建议跟它们一起看,因为体积太大大,其次理论和Unix的东西太多,时间产出比很低。然后,上面提到的是一些基本的东西。其实不管是哪种开发,后台开发也不例外。您需要基于特定的操作系统。Windows系统这里就不提了。仅以linux操作系统为例。既然选择做这个开发,就需要熟悉它。操作系统平台提供的一些常用API函数,如上文在网络通信方面提到的,除了网络通信,还有操作文件、操作内存、字符串操作、进程线程系列、线程同步系列等操作(如互斥锁、条件变量)、信号量)、管道等常用API接口函数。这里的意思是,你不需要记住每个接口函数的签名,但是你需要知道什么时候使用哪个接口,如何使用,需要注意什么。当我开始的时候,我读了罗伯特洛夫的《Linux系统编程》。熟悉这个人的应该知道,谷歌的工程师还有一本非常有名的书《Linux内核设计与实现》。最后要强调的是,如果你是一个即将毕业的学生,??面临着找工作的压力,你应该把重点放在算法和数据结构上。如果你是大一、大二或研究生,还是可以考虑啃我上面推荐的书。标准是理解而不是阅读。再补充一些我认为成为高手应该掌握的东西,先说说编译吧。虽然第三代、第四代语言越来越多,但硬件性能却越来越好。但是如果你精通汇编,你就比别人有很多优势,你就能彻底了解你写的每一行C/C++代码背后机器指令的效率。无论是做安全工程,还是提升自己的技术,都非常不错。这里推荐王爽老师的《汇编语言(第3版)》。这本书不厚,语言通俗易懂。你不需要刻意去背。基本上当成小说看后很快就能看完。还有一本书《老"码"识途:从机器码到框架的系统观逆向修炼之路》是整理实用书籍的。我个人非常喜欢这本书。当年看这本书的时候,真有一种“笑看妻愁?漫卷诗书欣喜若狂”的感觉。虽然那个时候连女朋友都没有——!另外,再补充一些我学生时代读过的书。熟悉windows和linux平台的开发。这也得益于我在学生时代读过的一些经典书籍。可能有点跑题了。如果你不介意,我可以告诉你:《Windows程序设计》第五版(第六版之后,这本书不再是使用WindowsNativeAPI编写C程序,而是转移到C#平台),本书是中国第一代程序Windows启蒙书籍,你看到的大多数桌面软件的开发者,比如QQ,可能都是读了这本书而启蒙的。《Windows核心编程》,凡是从事Windows开发的人,想必都知道这本书的份量。《linux内核情景分析》先生毛德操的书很写实。此外,他还写了一套关于Windows源代码分析的书籍。本书基于开源的“Windows”ReactOS,书名是《Windows内核情景分析》。《编译系统透视:图解编译原理》,实用的编译原理书。《编程之美》,关于面试,主要是一些算法和逻辑思维的问题。《重构:改善既有代码设计》,没有实际编码经验不建议阅读。《程序员的修炼之道——从小工到专家》本书特别推荐给同学们阅读,它可以大大提高你的实际编码能力和编码风格。《代码整洁之道》同上《大话设计模式》《Windows PE文件权威指南》《Java编程思想》《Effective C++》系列《80x86汇编语言程序设计教程》一般来说,我在学生时代,主要还是以基础知识为主。本科四年,硕士三年。感谢这些书帮助我成长。记得大学毕业时,我有十本装满读书笔记的笔记本。工作之余也看了redis、netty、distributed这些书。但这就是工作所需要的。由于我的基础扎实,当然也可能是运气的缘故,所以得到了一些注重技术基础扎实的公司的青睐,拿到了现阶段看起来还不错的薪水(当然也有可能有比我厉害的人,那我在这里开玩笑大方,不喜勿喷)。同时也非常感谢一路上遇到的公司和同事,给予我技术和生活上的帮助。薪水本身并不能说明一个人是否成功。码了这么多字,希望广大开发者注意基础,不要在浮沙上搭建高台。尤其是学生,你们学习的机会很多,一定要珍惜大学时光。毕竟工作之后,尤其是毕业之后,可能会面临工作、家庭等各种问题,可能已经没有心思和完整的时间去学习和提升了。所以,前期的积累非常重要。毕竟选择技术这条路,提高技术是最直接的升职加薪改善生活的途径。最后,以学生时代看到的一位技术学长写的一首诗作为结尾:鼠年红尘已痴,有网通青天。游星戏日月,醉卧云间笑人间。七年寻梦如火,九州谁与我狂?=====================================================关于JAVA需要看哪些书,我会列在我的公众号另开专题介绍。敬请期待,有兴趣的您也可以通过下方的公众号与我联系。以上是我的经验。我也曾迷茫和无助。也有很多朋友找到我,希望我做一些经验分享和职业规划指导。为此,我特地开通了微信公众号公众号“高性能服务器开发”。如果您需要我帮助解决任何技术或专业问题,您可以通过这个公众号与我联系。这篇公众号不仅分享高性能服务器开发经验和故事,还免费为技术小伙伴们提供技术解答和解答。有什么问题可以直接在微信公众号留言,我会第一时间回复您。
