我终于确定了我的研究方向了:后台软件开发C/C++方向,从今天起,我就是要做一个coder

未来的发展方向,主要参考:《跃迁:从技术到管理的硅谷路径》

================================================================================================
1.首先来自塞罗奥特曼的经验啊https://www.nowcoder.com/discuss/26045

总结如下:

作者:赛罗奥特曼~
链接:https://www.nowcoder.com/discuss/26045

汇编部分:
汇编语言(masm汇编,王爽写的非常不错)
x86从实模式到保护模式(学习kernel必备,保护模式是一大坑)

c/c++部分:
C++ Primer(入门必备(但并不是0基础可以看,0基础看C++ Primer Plus)
Effective C++,More Effective C++(提升c++的编程技巧,面试官很多都从这书里问)
深度探索c++对象模型(了解c++的底层实现机制,不然面试官问了多态的实现,你不会就挂了)

STL部门:C++标准库(侯捷)(介绍STL六大组件的应用)
STL源码剖析(STL的源码,不过自己只看了一半而已)
范型编程与STL(绝版书,不过讲解traits时非常的nice)

操作系统概念部分 Linux鸟哥私房菜(linux相关命令操作,不过自己推荐the linux command line这电子书更棒)
《轻松学用linux shell编程》(shell学习相关的)
现代操作系统(非常经典的操作系统书,不要看国内的操作系统书)
深入理解计算机系统(CSAPP)(豆瓣高达9.0以上的书,含金量就不多说了,其中的第7章有关elf看懂了,那就不必看那本程序员的自我修养了)

操作系统内核部分:
操作系统真象还原(教你怎么从0实现一个kernel,看完对操作系统绝对有一个飞一般的认识,另外作者钢哥非常棒
,我经常骚扰他问内核问题,都会耐心回答)
Linux内核源代码情景分析(毛德操所写的2.4内核源码,感觉非常有深度,自己囫囵吞枣的看完,细节部门略过了)
Linux内核设计与实现(一本比较薄的2.6内核剖析书,很容易看懂其内幕)
深入分析Linux内核源代码(一本绝版书,陈莉君教授所写的2.4内核源代码,配合Linux内核源代码情景分析使用,效果更佳)
深入理解Linux虚拟内存管理(这本才刚开始看,没看多久)
Linux环境编程:从应用到内核(一本非常棒的新书,讲解apue的api背后的内核实现,作者我也加了,内核功底非常深厚)

计算机网络:
(计算机网络:自顶向下,不过学院那本谢仁希的还凑合吧)
tcp/ip详解卷1(腾讯课堂有明教教主讲解这本书)
网络编程:
Unix环境高级编程,Unix网络编程(这两本就不多说了,unix的圣经),
linux 高性能服务器编程(国内写的一本不错的书)

数据库那块自己很弱只看了mysql必知必会,redis入门实战 面试时也没问到数据库相关的,运气爆棚

算法与数据结构:
自己的算法能力都很弱,这里只推荐那些算法比较弱的同学:
数据结构与算法分析(维斯),还有剑指offer题必须刷完,leetcode,编程之美也最好刷一刷,
,那算法那块就没问题了,当然这里指的是普通的开发岗位,而非算法岗

设计模式:
《设计模式:可复用面向对象软件的基础》,还有博览网上面的c++设计模式视频

=================================================================================================
来自大佬:叫小丁不叫小丁丁https://www.nowcoder.com/discuss/78222

推荐大家使用linux作为自己的学习环境

作者:叫小丁不叫小丁丁
链接:https://www.nowcoder.com/discuss/78222 

CPP语言

在学习CPP之前,我只有C基础。我是啃《CPP Primer》这本书,当时是第五版,那个时候最新的还是CPP11标准,也推荐大家看这本书,因为CPP14、17都还是太新,用的很少,而且大多公司也才从CPP98过渡到CPP11。这本书我读了很多遍,重点是STL与类,模板编程与OO几乎都占了CPP的半壁江山。关于CPP面向对象,读《CPP Primer》这本书关于类的讲解还有《深度探索CPP对象模型》,然后这部分内容就差不多了。把细节列出来吧:拷贝控制(默认构造、值构造、拷贝构造、移动构造、拷贝复制、移动复制、析构)这些需要很熟练很熟练的了解,这其中初值列与隐含的析构列很重要,对象模型(简单继承、含有虚函数的继承、含有虚基类的继承)它们的内存布局需要很清楚的知道,还有看上面那个stack overflow的帖子…命名返回值优化顺便了解一下(见《深度探索CPP对象模型》),然后就能理解为什么有时候类实例的创建没有按照正确流程…模板编程首先我推荐一定要把SGI STL库源码阅读一遍,就算源码没有看过,STL还是得会熟练的使用,重点在set/map、string/vector,要是能自己写一写就最好了,很喜欢侯捷先生的两句话:“源码之下,了无秘密”,“天下大事,必作于细”。内存分配器、几个容器、几个容器适配器、几个范型算法,代码量大约在1~2w行左右,然后可以自己再实现更多的东西,例如可以再实现一些boost库中的东西、四个智能指针、any、tuple之类的,然后能真正让你体会到模板元编程的乐趣…模板编程几个重要细节列出来:函数模板–显式实例化、特例化,类模板–显式实例化、全特化、局部特例化,模板容易出现的问题见《Effective CPP》条款43:学习处理模板化基类内的名称以及条款46:需要类型转换时请为模板定义非成员函数,可能会帮到你。还有一个很容易出现的问题应该就是关于模板的链接错误了(提示没有找到指定的函数),其实就是没有模板实例化,具体问题去google…CPP11还有很多特性,右值呀、lambda呀、function呀,RTTI呀…右值可以从汇编角度去看;lambda也可以从汇编角度去看,lambda其实就是个闭包,在CPP中lambda没有一个具体的类型,将一个捕获列表与一个函数捆绑在了一起,所以从汇编去看的话,返回一个lambda其实就是返回捕获列表中捕获的数据;function运用了类型擦除,具体实现可以google,其实boost库中的any也用了类型擦除,RTTI的话其实读完《深度探索CPP对象模型》,从虚函数表中应该已经知道了它的原理;还有一些高级部分:类型萃取呀、tuple呀这些…,类型萃取读完SGI STL源码之后应该已经能够深刻的理解了,tuple的话就是用了模板递归这些嘛,一些模板元编程…书籍推荐:《CPP Primer》、《深度探索CPP对象模型》、《STL源码剖析》、《CPP标准程序库》(参阅)、《Boost程序库完全开发指南》(简单读一读)、《Effective CPP》(想要更好的学习CPP强烈推荐)、《More Effective Modern CPP》(让你更好的了解CPP11,但是这本书目前还没有中文版,但是感兴趣的同学可以啃一啃…)

设计模式

推荐阅读《大话设计模式》,提醒一下,设计模式面试考得不多,但是想要了解的话还是去看一看…其中好几个设计模式可以联系已学过的东西加深印象,学习设计模式最好最快的办法就是理解它的UML图…

数据库

我的数据库不是很好,快速、基本地学习数据库推荐阅读《Sql必知必会》(很薄的一本书)

计算机网络

《Tcp/ip详解》(卷一)了解一下,看上面收录的面试知识点,着重去学习重要的那些。详细介绍tcp可以阅读《计算机网络》(谢希仁)(对也就是大多学校发的那本教材)第7章:运输层,其中的tcp可靠传输相关的一定要认真认真读!!,列出细节吧:滑动窗口、拥塞控制、还有状态图、还有TIME_WAIT(重中之重),socket编程可以阅读《Unix网络编程 套接字联网API》,其中跟SCTP相关的可以忽略掉,其实再省略一点的话只读第一二部分就行了…

算法

上面收录的面试知识点基本已经全部讲了,也就是面试的时候所有数据结构与算法都可能会考到。我算法还是有点薄弱,因为花了太多的时间去学习专业课然后没有太多的时间去刷题,但是强烈建议大家多去刷刷题,ACM尽量参加,含金量特别特别高。leetcode、牛客算法都该做做,尤其是牛客上关于《剑指offer》的专题一定要全部刷到滚瓜烂熟…刚刷算法可能会很困难,但是坚持去做,做完去看看题解还是会很有进步的。上面我还给了网易云课堂的链接,里面有开数据结构的课,学习基础可以去看看…推荐书籍《Algorithms 4th Edition》(英文版,所以可能有点难读,英语不是很好的话就参阅),《算法导论》

操作系统

还是上面给的网易云课堂链接,里面有一门操作系统的课,简单学习的话可以去看看。

作者:叫小丁不叫小丁丁
链接:https://www.nowcoder.com/discuss/78222

linux内核

先简单读一遍《Linux内核设计与实现》,偶尔可对照一下linux内核源码。但是呢,这本书其中感觉有很多错误,不是很严谨,所以不推荐作为深入学习linux内核的书籍,只是作为简单的入门。深入学习linux内核的话,可以认真读linux内核源码然后对照《深入理解linux内核》这本书,当然,重点还是读源码…读了《Linux内核设计与实现》之后已经有了基础了,然后其实已经可以有能力自己读懂源码了…可能会觉得还是有困难,讲一下我的linux入门之路吧…我先读了一遍《Linux内核设计与实现》,当时对照着源码读的,当然啦,书上不可能所有东西都讲,只是挑一些特别重要的讲,其他的还是需要自己去看去理解…读完这本书之后,大致的内存管理、进程控制之类的还是了解了,我真正入门是在读多路复用select、poll、epoll源码的时候,这三个函数源码真的很简单,读懂之后能很有效地增强自信心,然后就觉得很有趣,然后就开始了真正的linux学习之路。之后慢慢地linux文件系统、内存管理、IPC之类的都能看懂,不懂google,看博客,然后继续读…linux内核源码其实并没有特别难学习,难的是不知道怎么入门…这里有奥特曼的epoll源码总结:https://www.nowcoder.com/discuss/26226, 之后要是有时间我再把我对do_fork、select、poll、epoll、ipc、文件系统、内存管理、大多数系统调用、进程调度呀之类的源码总结贴出来…

汇编

对了,走CPP后台这条路,就是需要与底层进行接触,所以了解汇编是必不可少的。尽早学会汇编,对以后学习任何高级语言、操作系统都会很有帮助。推荐阅读《汇编语言》(王爽),《X86汇编语言 从实模式到保护模式》,《汇编语言程序设计》(简单阅读一下,了解AT&T汇编格式)

================================================================================================

拿了5个offer,回馈牛友发一波面经(长文详细)https://www.nowcoder.com/discuss/79051?type=0&order=4&pos=38&page=5

记忆神器–幕布

===========================================================================================================

来自牛妹
技术类考生,在线笔试如何百分百通过(附练习资料) https://www.nowcoder.com/discuss/111518?type=0&order=4&pos=49&page=1

关于在线编程详解

这里给大家限时免费提供了老师讲解的在线OJ的详细讲解,里面详细讲解了大家在笔试过程中遇到的各种问题,大家可以看一下:https://www.nowcoder.com/study/vod/7/1/1

不然真的在在线笔试中大家本来会的题目但是没有得分就很可惜了。

===============================================================================================

回馈牛客,秋招历程和感悟
https://www.nowcoder.com/discuss/107480?type=0&order=4&pos=58&page=1

===============================================================================================

作者:sxchen
链接:https://www.nowcoder.com/discuss/103917?type=0&order=4&pos=68&page=1

总结

1.可以看到,其实面试官问我的问题都是比较常规的,没有特别难。而且有些问题面试官几乎每次都问。常见的问题,不管是哪个公司的哪个面试官,暂时没想好问你啥的时候,脱口出来的就是最常问的问题,一定要深入的去准备,别回答的太皮毛。在网上刷刷面试题,就想应付这些常见问题是不行的。你要去看源码,去抠细节,回答的比别人详细具体,这样才能突出你的认真和努力。

比如说:TCP和UDP的差别,个人认为如果只答出来:

TCP面向连接,是可靠的,UDP不可靠。这样的回答完全不够。

回答应该全面、详细,我的回答中还包括:

对比了TCP、UDP的内部数据结构。
TCP基于数据流传输,UDP基于包传输。
TCP建立连接需要三次握手,讲了一下三次握手具体过程,有什么作用。
提到了TCP拥塞控制,以及相关问题。

面试官看我回答很详细,还没回答完,就很满意的切换问题了。

2.前面有提到,如果你投的互联网,做软件开发,你的项目经验少,可以用硬件项目来补。向面试官强调解决问题的思路,你的收获,以及延伸出来的一些思考,这样可以向面试官展现的的综合能力。也许你现在你项目经验少,基础不够好,但是你要有优秀的特质充分展现给面试官。

3.语言表达和沟通能力很重要,很重要,很重要!如果这方面不是很强, 面试一定要多演练、准备。引导面试官去问你熟悉的内容。

===============================================================================================

C++后台开发面试常见问题汇总
https://www.nowcoder.com/discuss/59394?type=0&order=4&pos=98&page=2

作者:快乐的码农
链接:https://www.nowcoder.com/discuss/57942?type=0&order=4&pos=117&page=2

C++资料推荐

推荐按先后顺序学习,也可根据自身情况选择性学习

算法与数据结构

数据结构(C语言版) 严蔚敏
算法(第四版)Robert Sedgewick著   力荐
大话数据结构
操作系统

计算机操作系统   汤子瀛     力荐
现代操作系统 [美] Andrew S·Tanenbaum
深入理解计算机系统(CSAPP)
计算机网络

计算机网络  谢希仁
TCP/IP协议族     力荐
TCP/IP详解 卷一:协议
数据库

数据库系统概念
深入浅出MySQL
高性能MySQL
Linux相关书籍

鸟哥的Linux私房菜:基础学习篇(第三版)
Linux命令行和shell脚本编程宝典
Linux Shell脚本攻略
Vim实用技巧
C++相关书籍

C++语言程序设计   郑莉 (若无C++基础)
C++ Primer(第5版)     力荐
STL源码剖析        力荐
Effective C++       力荐
深入探索C++对象模型
Linux高性能服务器编程
UNIX环境高级编程(APUE)       力荐
UNIX网络编程 卷一:套接字联网API  力荐
UNIX网络编程 卷二:进程间通信
其他书籍

大话设计模式
Redis入门指南
Redis设计与实现
Linux多线程服务端编程
大规模分布式存储系统:原理解析与架构实战
深入理解Nginx:模块开发与架构解析
面试相关网站及书籍推荐

书籍:

剑指offer    力荐
程序员面试经典
编程之美
网站

LeetCode 一个神奇的刷题网站,手撕代码的题库
牛客网(程序员找工作必备,尤其是专项训练,真题和在线编程板块)
google
stackOverFlow(程序员值得拥有)
github(没项目的就靠它了)