有读者反馈,单看零碎的知识点,自己心中没底。还是看书更有框架一些,所以今天给大家推荐一些经典书籍,书籍电子版我已经发到百度网盘群。
1、C语言
做嵌入式,一般都会操作寄存器,C语言用的较多。C语言,随便找一个大学课本,即可入门,最经典的是谭浩强那本。入门以后,如果想要精进C语言,推荐C语言三剑客:《C和指针》、《C专家编程》、《C缺陷与陷阱》。看完三剑客,C语言基本上已经算熟悉。但是我们毕竟是嵌入式岗位,不是C语言工程师,所以要熟悉Linux下的C语言编程,所以还需要看一些Linux下C编程的书籍,比如《Linux C编程一站式学习》等。
推荐指数:五颗星★★★★★
书名:《C程序设计语言》
理由:本书原著即为C语言的设计者之一Dennis M.Ritchie和著名计算机科学家Brian W.Kernighan合著的一本介绍C语言的权威经典著作。我们现在见到的大量论述C语言程序设计的教材和专著均以此书为蓝本。原著第1版中介绍的C语言成为后来广泛使用的C语言版本——标准C的基础。人们熟知的“hello,World"程序就是由本书首次引入的,现在,这一程序已经成为众多程序设计语言入门的第一课。本书只有很薄的一两百页,却是C语言的精华。
本书很薄,只有200页左右,一天即可看完。
推荐指数:五颗星★★★★★
书名:《C程序设计》
理由:这是很多大学的教材,事无巨细。全书共分4个部分,第1部分是《C程序设计(第四版)》一书的习题和参考解答,包括了该书各章的全部习题,对全部编程习题都给出了参考解答,共计132个程序;第2部分是深入学习C程序设计,包括预处理指令、位运算和C程序案例;第3部分是上机指南,详细介绍了Visual C++ 6.0集成环境下编辑、编译、调试和运行程序的方法;第4部分是上机实验指导,包括程序的调试与测试、实验的目的与要求,并提供了本课程12个实验。
推荐指数:五颗星★★★★★
书名:《C专家编程》
理由:《C专家编程》展示了最优秀的C程序员所使用的编码技巧,并专门开辟了一章对C++的基础知识进行了介绍。书中C的历史、语言特性、声明、数组、指针、链接、运行时、内存以及如何进一步学习C++等问题进行了细致的讲解和深入的分析。全书撷取几十个实例进行讲解,对C程序员具有非常高的实用价值。本书可以帮助有一定经验的C程序员成为C编程方面的专家,对于具备相当的C语言基础的程序员,本书可以帮助他们站在C的高度了解和学习C++。
推荐指数:五颗星★★★★★
书名:《C陷阱和缺陷》
理由:本书的出发点不是要批判C语言,而是要帮助C程序员绕过编程过程中的陷阱和障碍。全书分为8章,分别从词法分析、语法语义、连接、库函数、预处理器、可移植性缺陷等几个方面分析了C编程中可能遇到的问题。最后,作者用一章的篇幅给出了若干具有实用价值的建议。本书适合有一定经验的C程序员阅读学习,即便你是C编程高手,本书也应该成为你的案头必备书籍。
推荐指数:五颗星★★★★★
书名:《C和指针》
理由:指针方面的经典好书,里面涉及了好多C语言相关的知识,比如数据、语句、操作符和表达式等,但是讲的最好的就是指针以及指针和数组的关系了,也给出了不少编程技巧和提示。
推荐指数:四颗星★★★★
书名:《Linux C编程一站式学习》
理由:本书有两条线索,一条线索是以Linux平台为载体全面深入地介绍C语言的语法和程序的工作原理,另一条线索是介绍程序设计的基本思想和开发调试方法。本书分为两部分:第一部分讲解编程语言和程序设计的基本思想方法,让读者从概念上认识C语言;第二部分结合操作系统和体系结构的知识讲解程序的工作原理,让读者从本质上认识C语言。本书适合做零基础的初学者学习C语言的第一本教材,帮助读者打下牢固的基础。有一定的编程经验但知识体系不够完整的读者也可以对照本书查缺补漏,从而更深入地理解程序的工作原理。
2、数据结构与算法
数据结构与算法是相辅相成的关系,学好算法有助于理解数据结构,学好数据结构也更有助于理解好算法。
在秋招过程中,数据结构是极其重要的。对于经典的数据机构与算法大家都要掌握,对于一些常见的数据结构:树、链表、队列、栈、哈希表等要有一定的了解。对于常见算法如二分法、贪心算法、分治法、动态规划、深度优先搜索、广度优先搜索等要将思想学会,并且加以练习。
我个人学习数据结构与算法的路线是先从简单的书籍看起,然后过渡到一些经典数据结构相关书籍,在此过程中书本后的比较好的课后习题也没有放过,学完数据结构后就开始了漫长的刷题之路了。
在此过程中杭电OJ,LeetCode,牛客上的资源大家要好好利用,笔者在面试过程中就被考过其中几道经典题型:反转链表、双向链表的插入删除、字符串翻转。
推荐指数:四颗星★★★★
书名:《大话数据结构》
理由:对于一些小白来说这本书是福音了,大话系列的典范之作。将数据结构中比较晦涩难懂的链表、树等知识讲得通俗易懂,对新手比较友好。有一定数据结构基础的可以忽略了。
推荐指数:四颗星★★★★
书名:《啊哈!算法》
理由:与大话数据结构一样对于新手比较友好,是一本很有趣的算法入门书,如果你有一定算法或者coding基础就不必看了。
推荐指数:五颗星★★★★★
书名:《剑指Offer》
理由:这本书不需要多做介绍,校招必备!可是还是要自己看起来、刷起来,不要放在那里吃灰,如果这本书上的题目你都没有做过或者也不会的话,算法这一关基本是送人头的存在了,笔者在秋招过程中这本书看了2遍。
推荐指数:五颗星★★★★★
书名:《数据结构》
理由:《数据结构》(C语言版)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参数教材。本书的前半部分从抽象数据类型的角度讨论各种基本类型的数据结构及其应用;后半部分主要讨论查找和排序的各种实现方法及其综合分析比较。
3、操作系统
操作系统是一门在面试过程中问的不算很深的课程,因为这门课往下走的话深度太深,也不好展开,面试官不好尝试,甚至于一些面试官对于某些具体的知识点也不熟悉(大佬除外),操作系统必须深入学习,才能学明白学透彻。
在工作中,如果能够深入理解底层技术,那么对于真实线上系统的稳定性是很有帮助的。在实际的面试过程中问的比较多的莫过于进程线程、死锁、虚拟内存等问题了。如果能够在面试中准确说出自己深入了解到的操作系统知识是很加分的,比如进程通信的最快的一种方式大家都知道是共享内存,可是为什么是共享内存?两个虚拟地址如何被映射到同一个真实物理地址上的呢?如果能够把这个过程说清楚讲明白,毫无疑问是很加分的。这里将面试过程中常问的一些关键点分享给大家 。
视频推荐:南京大学袁春风老师的计算机基础(一)、(二)、(三) 清华大学向勇老师的操作系统视频课程
书籍推荐:
推荐指数:五颗星★★★★★
书名:《深入理解计算机系统》
理由:这本书十分经典,每一次看都会有新的体会和感悟,这本书从程序执行的计算机角度开始,介绍了处理器的体系结构、程序的机器级优化、虚拟存储器、系统级IO、网络通信等等多个方面。
推荐指数:五颗星★★★★★
书名:《现代操作系统》
理由:同样是讲操作系统的一本好书,《深入理解计算机系统》有些操作系统的知识讲的比较泛没有这本书细致,如果赶时间的话可以把这本书中进线程、死锁、缓存等重要知识点先看一下,后续有时间了再补上其他章节。
推荐指数:四颗星★★★★
书名:《自己动手写操作系统》
理由:很好的一本实践书籍,看这本书的前提是要有一定的汇编知识,如果不懂一些基本的汇编知识容易看的迷迷糊糊。本书亲自带你走一遍操作系统的具体实现,打造一个简易版的操作系统,笔者在学完汇编后花了二十余天跟着走了一遍,感觉很多东西豁然开朗了一样,值得一看!
4、计算机网络
计算机网络是重点之一,特别是TCP/UDP相关知识点,面试必问。考察计算机网络对于TCP/UDP,一般问一些基本的三次握手四次挥手大概过程,问TCP和UDP的区别,为什么TCP可靠。问OSI网络协议都分为几层,每一层是什么。
视频推荐:谢希仁老师的计算机网络视频,谢老师讲课很有意思,整个课堂充满了欢声笑语,也可以看视频下的留言,那里都是有很多好笔记的。
书籍推荐:这里从易到难逐步推荐一些比较好的计算机网络经典图书。
推荐指数:五颗星★★★★★
书名:《计算机网络:自顶向下方法》
理由:别的常见介绍计网的书籍是从底向上即物理层到应用程序介绍网络,这本书另辟蹊径,是自顶向下介绍整个网络的。这样做的好处是从我们所接触的应用层开始逐步深入,而不是从离我们最远的物理层开始。如果不是网络安全相关专业,大多数人看重点章节也就是第三章传输层那一章,重点看TCP/UDP的各种细节基本也够用了,剩下的可以后期再补,为自己节约时间。
推荐指数:五颗星★★★★★
书名:《TCP/IP详解 卷1:协议》
理由:确认过眼神,是经典中的经典,没错了。不过就是,emmm太厚了…笔者买来翻了翻TCP/UDP知识点就用来垫电脑了…..对于TCP的各种机制介绍的很细致,看了之后对于TCP/UDP感觉明显上升了一个台阶。如果不是信息安全、网络安全相关岗位的,可以作为一本工具书来使用的,需要用到某些知识再来补就行。
5、数据库
嵌入式岗位一般很少涉及到数据库相关知识。
6、Linux
嵌入式跟Linux是离不开的,嵌入式开发最常用的操作系统就是Linux系统,有几个最主要的原因:
1、Linux系统开源免费。
2、Linux有最完好的生态,最多的参考资料。
除了Linux系统,嵌入式开发还常用一些其他的操作系统比如RTOS、FreeRTOS、RTT等小型操作系统。
Linux学习路径大概分为三个方向:Linux入门——Linux应用开发——Linux驱动——Linux内核。推荐图书分别如下:
Linux入门:
推荐指数:四颗星★★★★
书名:《鸟哥的Linux私房菜》、《Linux就该这么学》
理由:这两本书都挺经典的,算是比较好的Linux入门书了。如果想要系统学习Linux可以照着书本上的命令老老实实的敲上一遍,Linux命令这一块基本没啥问题了。
Linux应用开发:
推荐指数:四颗星★★★★
书名:《嵌入式Linux应用开发完全手册》
理由:韦东山老师的开山之作,非常贴合实际,讲解基础概念,五星好评。本书全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的选项设置、Makefile语法、ARM汇编指令等),硬件部件的使用及编程(囊括了常见硬件,比如UART、I2C、LCD等),U-Boot、Linux内核的分析、配置和移植,根文件系统的构造(包括移植busybox、glibc、制作映象文件等),内核调试技术(比如添加kgdb补丁、栈回溯等),驱动程序编写及移植(LED、按键、扩展串口、网卡、硬盘、SD卡、LCD和USB等),GUI系统的移植(包含两个GUI系统:基于Qtopia和基于X),应用程序调试技术。
本书从最简单的点亮一个LED开始,由浅入深地讲解,使读者最终可以配置、移植、裁剪内核,编写驱动程序,移植GUI系统,掌握整个嵌入式Linux系统的开发方法。
本书由浅入深,循序渐进,适合刚接触嵌入式Linux的初学者学习。
推荐指数:五颗星★★★★
书名:《UNIX网络编程 卷1:套接字联网API》、《UNIX网络编程卷2:进程间通信》
理由:史蒂文斯大神的盖世之作。说一句“网络编程方面的圣经”不为过。对于有志进入腾讯鹅厂的小伙伴,这两本书可以说是必须要看的,可以说是网络研究和开发人员公认的权威参考书,无论网络编程的初学者还是网络专家都会大受裨益。不过因为太厚的原因,特别是《套接字联网API》可以说是我遇到的最厚的技术书了,全部啃完需要耗不少时间,可以像笔者一样,哪里不会翻哪里。
Linux驱动:
推荐指数:五颗星★★★★
书名:《Linux设备驱动开发详解》
理由:对于嵌入式工程师来说,进入更高阶段后,学习Linux设备驱动开发无疑就是职业生涯的一次“重生”。这是因为Linux设备驱动开发不仅仅涉及操作系统的转换,开发方式的转换,更重要的是思维上的转变。对于Linux这样一个复杂系统,如何从复杂的代码中抓住设备驱动开发的关键是任何一个Linux设备驱动开发者入门时需要面对的挑战。除了知识、工具之外,往往还需要思路上的指导。
本书不但帮助Linux设备驱动开发的初学者厘清必要的概念,还从具体的实例、设备驱动开发的指导原则循序渐进地引导读者渐入学习佳境。为了让读者能够达到Linux设备驱动开发的至臻境界,作者更是从软件工程的角度抽象出设备驱动开发的一般思想。毫无疑问,本书将成为读者学习Linux设备驱动开发过程中的一座“灯塔”。
推荐指数:五颗星★★★★
书名:《Linux设备驱动程序》
理由:如果您希望在Linux操作系统上支持计算机外部设备,或者在Linux上运行新的硬件,或者只是希望一般性地了解Linux内核的编程,就一定要阅读本书。本书描述了如何针对各种设备编写驱动程序。Greg Kroah-Hartman是目前内核中USB、PCI和驱动程序核心子系统(本书均有讲述)的维护者。本书的这个版本已针对Linux内核的2.6.10版本彻底更新过了。内核的这个版本针对常见任务完成了合理化设计及相应的简化,如即插即用、利用sysfs文件系统和用户空间交互,以及标准总线上的多设备管理等等。
要阅读并理解本书,您不必首先成为内核黑客;只要您理解C语言并具有Unix系统调用的一些背景知识即可。您将学到如何为字符设备、块设备和网络接口编写驱动程序。为此,本书提供了完整的示例程序,您不需要特殊的硬件即可编译和运行这些示例程序。本书还在单独的章节中讲述了PCI、USB和tty(终端)子系统。对期望了解操作系统内部工作原理的读者来讲,本书也深入阐述了地址空间、异步事件以及I/O等方面的内容。
Linux内核:
这里推荐我的另一篇文章:为什么要阅读Linux内核源码以及如何阅读Linux内核源码
推荐指数:五颗星★★★★
书名:《Linux内核设计与实现(原书第3版)》
理由:详细描述了Linux内核的设计与实现。内核代码的编写者、开发者以及程序开发人员都可以通过阅读本书受益,他们可以更好理解操作系统原理,并将其应用在自己的编码中以提高效率和生产率。详细描述了Linux内核的主要子系统和特点,包括Linux内核的设计、实现和接口。从理论到实践涵盖了Linux内核的方方面面,可以满足读者的各种兴趣和需求。
作者Robert Love是一位Linux内核核心开发人员,他分享了在开发Linux 2.6内核过程中颇具价值的知识和经验。本书的主题包括进程管理、进程调度、时间管理和定时器、系统调用接口、内存寻址、内存管理和页缓存、VFS、内核同步、移植性相关的问题以及调试技术。同时本书也涵盖了Linux 2.6内核中颇具特色的内容,包括CFS调度程序、抢占式内核、块I/O层以及I/O调度程序。
推荐指数:五颗星★★★★
书名:《奔跑吧Linux内核入门篇》
理由:本书是一本介绍Linux内核实践的入门书,基于Linux 4.0内核,重点讲解Linux内核的理论和实验。本书分为12章,包括Linux系统入门、Linux内核基础知识、内核编译和调试、内核模块、简单的字符设备驱动、系统调用、内存管理、进程管理、同步管理、中断管理、调试和性能优化,以及如何参与开源社区等内容。此外,本书还介绍了Linux内核社区常用的开发工具和理论,如Vim 8和git工具等。书中包括70多个实验,帮助读者深入理解Linux内核。
推荐指数:五颗星★★★★
书名:《奔跑吧Linux内核》
理由:本书内容基于Linux4.x内核,主要选取了Linux内核中比较基本和常用的内存管理、进程管理、并发与同步,以及中断管理这4个内核模块进行讲述。全书共分为6章,依次介绍了ARM体系结构、Linux内存管理、进程调度管理、并发与同步、中断管理、内核调试技巧等内容。
本书的每节内容都是一个Linux内核的话题或者技术点,读者可以根据每小节前的问题进行思考,进而围绕问题进行内核源代码的分析。本书内容丰富,讲解清晰透彻,不仅适合有一定Linux相关基础的人员,包括从事与Linux相关的开发人员、操作系统的研究人员、嵌入式开发人员及Android底层开发人员等学习和使用,而且适合作为对Linux感兴趣的程序员的学习用书,也可以作为大专院校相关专业师生的学习用书和培训学校的教材。
推荐指数:四颗星★★★★
书名:《深入理解Linux内核》
理由:堪称讲述Linux内核方面不可多得的一本好书,个人感觉比那本《Linux内核完全注释》要好上不少,不过仁者见仁智者见智。这本书可以很好的对你在内核中使用的最重要的数据结构、算法和程序设计诀窍进行一次详细解读,也能帮助你在以后使用Linux时更好地进行进程调度、文件存取和内存管理。
推荐指数:四颗星★★★★
书名:《深入Linux内核架构》
理由:众所周知,Linux操作系统的源代码复杂、文档少,对程序员的要求高,要想看懂这些代码并不是一件容易事。本书结合内核版本2.6.24源代码中最关键的部分,深入讨论Linux内核的概念、结构和实现。具体包括进程管理和调度、虚拟内存、进程间通信、设备驱动程序、虚拟文件系统、网络、时间管理、数据同步等方面的内容。本书引导你阅读内核源代码,熟悉Linux所有的内在工作机理,充分展现Linux系统的魅力。本书适合Linux的系统编程人员、系统管理者以及Linux爱好者学习使用。
7、其他
还有一些经典书籍比较好,适合自己持续性充电、打基础,这里也推荐给大家。
推荐指数:四颗星★★★★
书名:《代码整洁之道》
理由:软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关。这一点,无论是敏捷开发流派还是传统开发流派,都不得不承认。本书提出一种观念:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。作为编程领域的佼佼者,本书作者给出了一系列行之有效的整洁代码操作实践。这些实践在本书中体现为一条条规则(或称“启示”),并辅以来自现实项目的正、反两面的范例。只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量。本书阅读对象为一切有志于改善代码质量的程序员及技术经理。书中介绍的规则均来自作者多年的实践经验,涵盖从命名到重构的多个编程方面,虽为一“家”之言,然诚有可资借鉴的价值。
推荐指数:四颗星★★★★
书名:《Code:隐匿在计算机软硬件背后的语言》
理由:是一本讲述计算机工作原理的书。不过,你千万不要因为“工作原理”之类的字眼就武断地认为它是晦涩而难懂的。作者用丰富的想象和清晰的笔墨将看似烦杂的理论阐述得通俗易懂,你丝毫不会感到枯燥和生硬。更重要的是,你会因此更加深刻地理解计算机的工作原理。这种理解不是抽象层面上的,而是具有一定深度的,这种深度甚至不逊于“电气工程师”和“程序员”的理解。不管你是计算机高手,还是对这个神奇的机器充满敬畏之心的“小白”都不妨翻阅一下本书,读一读大师的经典作品,必然会有收获。
推荐指数:四颗星★★★★
书名:《老码识途:从机器码到框架的系统观逆向修炼之路》
理由:汇编与反汇编就好像如今的爬虫与反爬虫一样,这本书以逆向反汇编为线索,自底向上,从探索者的角度,原生态地刻画了对系统机制的学习,对于有志成为系统架构师的小伙伴来说不应该错过这本好书,这本书涉及反汇编、底层调试、链接、加载、钩子等在别的书中很少看到的知识等。
推荐指数:四颗星★★★★
书名:《设计模式》
理由:这本书结合设计实作例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。书中分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别有用。此书适合大学计算机专业的学生、研究生及相关人员参考。书中涉及的设计模式并不描述新的或未经证实的设计,只收录了那些在不同系统中多次使用过的成功设计。
暂无评论