Ⅰ 设计模式js阮一峰
有面向对象基础自学前端想达到找工作的水平要多长时间需要看哪些书呢客观的讲自学的话还是要看你自己的毅力和恒信,这个是最重要的,其次是学习的方法和方向。
首先说网站前端在目前来说需求还是很大的,但是需要的不是初级的前端而是高级前端,因为一般学习计算机的人自己学几个月就能到初级的水平,而高级前端是没有那么容易的,你说的面向对象思想是一个很好的思想,不只是纯编程用,现在网站前端也需要面向对象思想的指导。
1、关于学习时间
如果自己有毅力恒信和充足的时间来自学,加上正确的方法和方向,一般需要1年左右的时间的可以勉强到中级前端的水平,首先明确中级前端不只是些css代码,而是对javaScript有深入的了解,且使用JavaScript来解决前端中的一些问题和优化前端页面。补充一下从入门到精通的大致流程:html、css2(深入了解两者的兼容性及解决主流浏览器的兼容性问题)——javascript知识(了解其简单的框架或者类库如jQuery等)——javascript高级知识(了解一些深入的JavaScript知识和其一些闭缺高级框架如angularjs等)——移动端页面的开发html5+css3(同时要学习一些移动端的前端框架和JavaScript框架)——可以发webapp(精通js和其相关的框架且懂一些安卓或者ios知识)。当我们到第三个阶段或者第四个阶段就是可以算中级的前端的了。
2、关于学习的方法和推荐的书
首先说现在网上的资源是相当的丰富的,我们完全可以下载一些视频或者其他的资源惊醒学习,关于推荐的书,个人推荐基本就自己感觉非常不错的书和一些网上评价宴世不错的书,都是关于JavaScript的。
入门级,也适合想掌握一些前端技能的非前端工程师
JavaScriptDom编程艺术
成为一名合格的前端工程师
JavaScript高级程序设计
精通JavaScript
更优秀的代码,更优良的设计JavaScript语言精粹
JavaScript设计模式
同时建议看国内知名大牛的博客,如王福朋、阮一峰等,其博客上有大师门对晌态肢前端深入的理解。
为什么昨天阮一峰老师发布全栈工程师资料中主要学习react和node,js
JavaScript是一种(最好的)编程语言,主要作为前端开发中用来增加网页的动态功能。
NodeJs是基于JavaScript的,可以做为后台开发的语言.提供了很多系统级的API,如文件派斗贺操作、网络编程等.用事件驱动,异步编程,主要尘派是为后台网络服务设计。
ReactJS为Facebook开发的,更多的像一个JS的库.主要是在前端Web开发中,对MVC中的V进销烂行操作。
ReactNative它基于开源框架ReacJS,并可用来开发iOS和Android原生应用,主要为移动端服务。
GitHub上有哪些值得推荐的开源电子书语言无关类
操作系统
鸟哥的Linux私房菜(简体)
Linux系统高级编程
TheLinuxCommandLine(中英文版)
Linux设备驱动(第三版)
深入分析Linux内核源码
UNIXTOOLBOX
Docker中文指南
Docker——从入门到实践
FreeRADIUS新手入门
Mac开发配置手册
FreeBSD使用手册
Linux命令行(中文版)
智能系统
一步步搭建物联网系统
web服务器
Nginx开发从入门到精通(淘宝团队出品)
版本控制
Git教程(本文由?@廖雪峰创作,如果觉得本教程对您有帮助,可以去?iTunes购买)
git–简易指南
猴子都能懂的GIT入门
Git参考手册
ProGit
GitMagic
GotGitHub
GitCommunityBook中文版
Mercurial使用教程
HgInit(中文版)
沉浸式学Git
Git-Cheat-Sheet(感谢@flyhigher139翻译了中文版)
GitHub秘籍
NoSQL
NoSQL数据库笔谈(pdf)
Redis设计与实现
Redis命令参考
带有详细注释的Redis3.0代码
带有详细注释的Redis2.6代码
TheLittleMongoDBBook
TheLittleRedisBook
Neo4j简体中文手册v1.8
Neo4j.rb中文资源
MySQL
MySQL索引背后的数据结构及算法原理
项目相关
持续集成(第二版)(译言网)
让开发自动化系列专栏
追求代码质量
selenium中文文档
Joel谈软件
约耳谈软体(JoelonSoftware)
Web
关于浏览器和网络的20项须知
前端知识体系
浏览器开发工具的秘密
Chrome开发者工具中文手册
Chrome扩展开发文档
Grunt中文文档
移动Web前端知识库
正则表达式30分钟入门教程
前端开发体系建设日记
移动前端开发收藏夹
JSON风格指南
HTTP接口设计指北
前端资源分享(一)
前端资源分享(二)
前端代码规范及最佳实践
w3school教程整理
大数据
大数据/数据挖掘/推荐系统/机器学习相关资源
编程艺术
程序员编程艺术
每个程序员都应该了解的内存知识(译)【第一部分】
取悦的工序:如何理解游戏(豆瓣阅读,免费书籍)
其他
OpenWrt智能、自动、透明翻墙路由器教程
语言相关类AWK
awk程序设计语言
C/C++
C++并发编程指南(@傅海平ICT)
LinuxC编程一站式学陪袭枯习(宋劲杉,北京亚嵌教育研究中心)
CGDB中文手册
100个gdb小技巧
100个gcc小技巧禅碰
ZMQ指南
(中英文版)
跟我一起写Makefile(PDF)
GNUmake中文手册
GNUmake指南
GoogleC++风格指南
C/C++Primer(by@andycai)
简单易懂的C魔法
Cmake实践(PDF版)
C++FAQLITE(中文版)
C++Primer5thAnswers
CSS/HTML
学习CSS布局
通用CSS笔记、建议与指导
CSS参考手册
Emmet文档
前端代码规范(腾讯alloyteam团队)
Dart
Dart语言导览
Fortran
Fortran77和90/95编程入门
Java
实时Java系列
ApacheShiro用户指南
使用Eclipse和JavaSE6创建独立WebServices应用程序
第1部分:WebServices服务端应用程序
第2部分:Web服务客户端应用程序
JavaServerFaces1.2入门
第1部分:构建基本应用程序
第2部分:JSF生命周期、转换、检验和阶段监听器
用EclipseEuropa进行Web开发
第1部分:EclipseJavaEE
第2部分:PHP开发工具
第3部分:RubyDevelopmentToolkit和RadRails
使用JavaServerFaces构建芦洞ApacheGeronimo应用程序
第1部分:使用Eclipse和ApacheMyFacesCore构建基本的应用程序
第2部分:在JavaServerFaces中使用Tomahawk
第3部分:使用ajax4jsf添加Ajax功能
第4部分:使用ApacheTrinidad组件扩展JSF
第5部分:将JSF应用程序与Spring集成
ApacheGeronimo和Spring框架
第1部分:开发方法学
第2部分:构建第一个应用程序
第3部分:集成DAO与ORM
第4部分:混合使用SpringAOP和SpringWebFlow
第5部分:SpringMVC
第6部分:SpringMVC:使用Web视图技术
终极mashup——Web服务和语义Web
第1部分:使用与组合Web服务
第2部分:管理Mashup数据缓存
第3部分:理解RDF和RDFs
第4部分:创建本体
第5部分:切换Web服务
Jersey2.x用户指南
MyBatis中文文档
JavaScript
GoogleJavaScript代码风格指南
AirbnbJavaScript规范
JavaScript标准参考教程(alpha)
Javascript编程指南(源码)
javascript的12个怪癖
JavaScript秘密花园
JavaScript核心概念及实践(PDF)(此书已由人民邮电出版社出版发行,但作者依然免费提供PDF版本,希望开发者们去购买,支持作者)
《JavaScript模式》翻译,此书中文版有售,但是纸质书翻译的还没有这个版本翻译的好
命名函数表达式探秘(注:原文由为之漫笔翻译,原始地址无法打开,所以此处地址为我博客上的备份)
学用JavaScript设计模式(开源中国)
深入理解JavaScript系列
ECMAScript6入门(作者:阮一峰)
jQuery
jQuery解构
简单易懂的JQuery魔法
HowtowritejQueryplugin
Node.js
Node入门
七天学会NodeJS
NodejsWikiBook(繁体中文)
express.js中文文档
koa中文文档
使用Express+MongoDB搭建多人博客
Express框架
nodejs文档
Node.js包教不包会
LearnYouTheNode.jsForMuchWin!(中文版)
Nodedebug三法三例
underscore.js
Underscore.js中文文档
backbone.js
backbone.js入门教程(PDF)
Backbone.js入门教程第二版
DevelopingBackbone.jsApplications(中文版)
AngularJS
AngularJS最佳实践和风格指南
AngularJS中译本
AngularJS入门教程
构建自己的AngularJS
在Windows环境下用Yeoman构建AngularJS项目
zepto简明中文手册
Sea.js
HelloSea.js
CoffeeScript
CoffeeScriptCookbook
TheLittleBookonCoffeeScript中文版
ExtJS
Ext4.1.0中文文档
Chrome扩展及应用开发
JavaScript入门教程
PHP
PHP调试技术手册(PDF)
XDebug2中文手册(译)(CHM)
PHP之道
PHP最佳实践
PHP安全最佳实践
深入理解PHP内核
PHP扩展开发及内核应用
CodeIgniter用户指南
Laravel4中文文档
Laravel入门
Symfony2中文文档(未译完)
Phalcon中文文档(翻译进行中)
YiiBook几本Yii框架的在线教程
简单易懂的PHP魔法
swoole文档及入门教程
iOS
iOS开发60分钟入门
iOS7人机界面指南
GoogleObjective-CStyleGuide中文版
iPhone6屏幕揭秘
AppleWatch开发初探
马上着手开发iOS应用程序
网易斯坦福大学公开课:iOS7应用开发字幕文件
Android
AndroidDesign(中文版)
GoogleAndroid官方培训课程中文版
Android学习之路
小白的Python教程
简明Python教程
零基础学Python
Python2.7官方教程中文版
Python3.3官方教程中文版
深入Python3
PEP8Python代码风格规范
GooglePython风格指南中文版
Python入门教程(PDF)
Python的神奇方法指南
笨办法学Python(PDF版下载)
Django文档中文版
Django最佳实践
TheDjangoBook中文版
web.py0.3新手指南
Web.pyCookbook简体中文版
DiveIntoPython中文版
Bottle文档中文版(需翻墙)
Flask文档中文版
Jinja2文档中文版
Werkzeug文档中文版
Flask之旅
IntroctiontoTornado中文翻译
Python自然语言处理中文版(感谢陈涛同学的翻译,也谢谢?@shwley联系了作者)
Python绘图库matplotlib官方指南中文翻译
Scrapy0.25文档
ThinkPython
Ruby
Ruby风格指南
Rails风格指南
笨方法学Ruby
RubyonRails指南
RubyonRails实战圣经
RubyonRailsTutorial原书第2版(本书网页版免费提供,电子版以PDF、EPub和Mobi格式提供购买,仅售9.9美元)
编写Ruby的C拓展
Ruby源码解读
Shell
Shell脚本编程30分钟入门
Go
Go编程基础
Go入门指南
学习Go语言(PDF)
GoWeb编程(此书已经出版,希望开发者们去购买,支持作者的创作)
Go实战开发(当我收录此项目时,作者已经写完第三章,如果读完前面章节觉得有帮助,可以给作者捐赠,以鼓励作者的继续创作)
NetworkprogrammingwithGo中文翻译版本
Groovy
实战Groovy系列
LaTeX
一份其实很短的LaTeX入门文档
一份不太简短的LATEX2ε介绍(PDF版)
LISP
ANSICommonLisp中文翻译版
Lua
Lua编程入门
Haskell
RealWorldHaskell中文版
R
R语言忍者秘笈
Scala
Scala课堂(Twitter的Scala中文教程)
EffectiveScala(Twitter的Scala最佳实践的中文翻译)
Scala指南
Swift
TheSwiftProgrammingLanguage中文版
Perl
ModernPerl中文版
Perl程序员应该知道的事
Prolog
笨办法学Prolog
Vim中文文档
Vimscript
笨方法学Vimscript中译本
Vim中文文档
读书笔记及其它读书笔记
编译原理(紫龙书)中文第2版习题答案
把《编程珠玑》读薄
EffectiveC++读书笔记
Golang学习笔记、Python学习笔记、C学习笔记(PDF)
Jsoup学习笔记
学习笔记:Vim、Python、memcached
图灵开放书翻译计划–C++、Python、Java等
蒂姆·奥莱利随笔(由译言网翻译,电子版免费)
Octave入门(PDF版)
SICP解题集
精彩博客集合
正则表达式简明参考
学习前端,有什么好书推荐吗?对于零基础想小白,想要自学成为前端人才,可以看看以下书籍
《图解HTTP》:一本HTTP的神书,图文并茂,生动形象,中猜非常适合小白学习。
《HeadFirstHTML与CSS(第2版)》:入门真的是经典书籍,手把手教学,丰富的案例让你从0开始学前端。
《锋利的jQuery》:作为第一本原因是jQuery入门快,你不会因为js的晦涩难懂而止步不前,因为学习jQuery后你可以自己写一些可以即使看到效果的小项目从而提升兴趣。
《Javascript高级程序设计》:书中涉及的概念基本涵盖了js的大部分内容,包括作用域链、js数据类型、OOP对象在js中的实现、闭包、BOM和DOM模型、对变态IE的系列兼容的解决方案、事件流、还有xml、jason、E4X这些数据格式与js的交互操作简介、高级技巧的介绍(比如惰性载入)等等
《高性能JavaScript》:揭示了技术和策略能帮助你在开发过程中消除性能瓶颈。你将会了解如何提升各方面的性能,包括代码的加载、运行、DOM交互、页面生存周期等。
《JavaScript设计模式与开发实践》:腾讯前端AlloyTeam团队出品,综合讲述前端的设计模式,设计原则,编程技巧,旁盯代码重构等等。
《CSS世界》:CSS和javascript一样,都是很容易上手,却很难精通的。这本是前端知名博主张鑫旭的书籍,好评很多,讲的很细致。
《CSS揭秘》:CSS进阶必备书籍,47个css技巧让你在面对各种css问题的时候游刃有余。
《深入浅出Node.js》:针对Node的基本原理卖启型做了深入,能让你了解底层的Node实现
Ⅱ 图解什么是 Transformer
Transformer 是 Google 团队在 17 年 6 月提出的 NLP 经典之作,
由 Ashish Vaswani 等人在 2017 年发表的论文 Attention Is All You Need 中提出。
Transformer 在机器翻译任务上的表现超过了 RNN,CNN,只用 encoder-decoder 和 attention 机制就能达到很好的效果,最大的优点是可以高效地并行化。
Transformer 是一种基于 encoder-decoder 结构的模型,
在 Encoder 中,
在 Decoder 中,
下面我们具体看一下其中这几个概念,这里主要参考 Jay Alammar,他在 The Illustrated Transformer 中给出了很形象的讲解。
例如我们要进行机器翻译任务,输入一种语言,经过 Transformer,会输出另一种语言。
Transformer 的 encoder 由 6 个编码器叠加组成,
decoder 也由 6 个解码器组成,
在结构上都是相同的,但它们不共享权重。
每一个 encoder 都分为两个子层:
每一个 decoder 也具有这两个层,但还有一个注意力或差层,用来帮助解码器关注输入句子的相关部分
首先使用嵌入算法将输入的 word 转换为 vector,
最下面的 encoder ,它的输入就是 embedding 向量,
在每个 encoder 内部,
输入向量经过 self-attention,再经过 feed-forward 层,
每个 encoder 的输出向量是它正上方 encoder 的输入,
向量的大小是一个超参数,通常设置为训练集中最长句子的长度。
在这里,我们开始看到 Transformer 的一个关键性质,
即每个位置的单词在 encoder 中都有自己的路径,
self-attention 层中的这些路径之间存在依赖关系,
然而在 feed-forward 层不具有那些依赖关系,
这样各种路径在流过 feed-forward 层时可以并行执行。
Positional Encoding 是一种考虑输入序列中单词顺序的方法。
encoder 为每个输入 embedding 添加了一个向量,这些向量符合一种特定模式,可以确定每个单词的位置,或者序列中不同单词之间的距离。
例如,input embedding 的维度为4,那么实际的positional encodings如下所示:
在下图中,是20个单词的 positional encoding,每行代表一个单词的位置编码,即第一行是加在输入序列中第一个词嵌入的,每行包含 512 个值, 每个值介于 -1 和 1 之间,用颜色表示出来。
可以看到在中心位置分成了两半,因为左半部分的值由一个正弦函数生成,右半部分由余弦函数生成,然后将它们连接起来形成了每个位置的编码向量局团扒。
当然这并不是位置编码的唯一方法,只是这个方法能够扩展到看不见的序列长度处,例如当我们要翻译一个句子,这个句子的长度比我们训练集中的任何一个句子都长时。
例如我们要翻译:”The animal didn't cross the street because it was too tired” 这句话
这句话中的“it”是指什么?它指的是 street 还是 animal?
这对人类来说是一个简单的问题,但对算桐昌法来说并不简单。
而 Self-Attention 让算法知道这里的 it 指的是 animal
当模型在处理每个单词时,self-attention 可以帮助模型查看 input 序列中的其他位置,寻找相关的线索,来达到更好的编码效果。它的作用就是将对其他相关单词的“understanding”融入我们当前正在处理的单词中。
例如上图中,在第5层时,我们就知道 it 大概指的是 animal 了。
第一步,为编码器的每个输入单词创建三个向量,
即 Query vector, Key vector, Value vector
这些向量通过 embedding 和三个矩阵相乘得到,
请注意,这些新向量的尺寸小于嵌入向量。它们的维数为64,而嵌入和编码器输入/输出向量的维数为512.它们不一定要小,这是一种架构选择,可以使多头注意力计算(大多数)不变。
将x1乘以WQ得到Query向量 q1,同理得到Key 向量 和, Value 向量
这三个向量对 attention 的计算有很重要的作用
第二步,是计算一个得分
假设我们要计算一个例子中第一个单词 “Thinking” 的 self-attention,就需要根据这个单词,对输入句子的每个单词进行评分,这个分数决定了对其他单词放置多少关注度。
分数的计算方法是,
例如我们正在考虑 Thinking 这个词,就用它的 q1 去乘以每个位置的 ki
第三步和第四步,是将得分加以处理再传递给 softmax
将得分除以 8(因为论文中使用的 key 向量的维数是 64,8 是它的平方根)
这样可以有更稳定的梯度,
然后传递给 softmax,Softmax 就将分数标准化,这样加起来保证为 1。
这个 softmax 分数决定了每个单词在该位置bbei表达的程度。
很明显,这个位置上的单词将具有最高的softmax分数,但有时候注意与当前单词相关的另一个单词是有用的。
第五步,用这个得分乘以每个 value 向量
目的让我们想要关注单词的值保持不变,并通过乘以 0.001 这样小的数字,来淹没不相关的单词
第六步,加权求和这些 value 向量
这就是第一个单词的 self-attention 的输出
得到的向量接下来要输入到前馈神经网络,在实际实现中用矩阵乘法的形式完成
论文中还增加一种称为 multi-headed 注意力机制,可以提升注意力层的性能
它使得模型可以关注不同位置
虽然在上面的例子中,z1 包含了一点其他位置的编码,但当前位置的单词还是占主要作用, 当我们想知道“The animal didn’t cross the street because it was too tired” 中 it 的含义时,这时就需要关注到其他位置
这个机制为注意层提供了多个“表示子空间”。下面我们将具体介绍,
1. 经过 multi-headed , 我们会得到和 heads 数目一样多的 Query / Key / Value 权重矩阵组
论文中用了8个,那么每个encoder/decoder我们都会得到 8 个集合。
这些集合都是随机初始化的,经过训练之后,每个集合会将input embeddings 投影到不同的表示子空间中。
2. 简单来说,就是定义 8 组权重矩阵,每个单词会做 8 次上面的 self-attention 的计算
这样每个单词会得到 8 个不同的加权求和 z
3. 但在 feed-forward 处只能接收一个矩阵,所以需要将这八个压缩成一个矩阵
方法就是先将8个z矩阵连接起来,然后乘一个额外的权重矩阵WO
下图显示了在例句中,it 的不同的注意力 heads 所关注的位置,一个注意力的焦点主要集中在“animal”上,而另一个注意力集中在“tired”,换句话说,it 是 “animal”和“tired”的一种表现形式。
当然如果选了8个层,将所有注意力 heads 都添加到图片中,就有点难以解释了。
这里有一个细节,
即在每个 encoders 和 decoders 里面的 self-attention, ffnn,encoders-decoders attention 层,都有 resial 连接,还有一步 layer-normalization
下面我们看一下 Decoder 部分
1. 输入序列经过编码器部分,然后将最上面的 encoder 的输出变换成一组 attention 向量 K和V
这些向量会用于每个 decoder 的 encoder-decoder attention 层,有助于解码器聚焦在输入序列中的合适位置
重复上面的过程,直到 decoder 完成了输出,每个时间步的输出都在下一个时间步时喂入给最底部的 decoder,同样,在这些 decoder 的输入中也加入了位置编码,来表示每个字的位置。
2. 解码器中的 self attention 层与编码器中的略有不同
在解码器中,在 self attention 的 softmax 步骤之前,将未来的位置设置为 -inf 来屏蔽这些位置,这样做是为了 self attention 层只能关注输出序列中靠前的一些位置。
Encoder-Decoder Attention 层的工作方式与 multiheaded self-attention 类似,只是它用下面的层创建其 Queries 矩阵,从编码器栈的输出中获取 Keys 和 Values 矩阵。
3. 解码器最后输出的是一个向量,如何把它变成一个单词,这就要靠它后面的线性层和 softmax 层
线性层就是一个很简单的全连接神经网络,将解码器输出的向量映射成一个更长的向量。
例如我们有 10,000 个无重复的单词,那么最后输出的向量就有一万维。
每个位置上的值代表了相应单词的分数。
softmax 层将这个分数转换为了概率。
我们选择概率最大的所对应的单词,就是当前时间步的输出。
学习资源:
https://arxiv.org/pdf/1706.03762.pdf
https://jalammar.github.io/illustrated-transformer/
https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html
Ⅲ 前端书籍推荐
对于零基础小白,可以看看以下书籍
《图解 HTTP》:一本HTTP的神书,图文并茂,生动形象,非常适合小白学习。
《Head First HTML与CSS(第2版)》:入门真的是经典书籍,手把手教学,丰富的案例让你从 0 开始学前端。
《锋利的jQuery》:作为第一本原因是jQuery入门快,你不会因为js的晦涩难懂而止步不前,因为学习jQuery后你可以自己写一些可以即使看到效果的小项目从而提升兴趣。
《Javascript 高级程序设计》:书中涉及的概念基本涵盖了js的大部分内容,包括作用域链、js数据类型、OOP对象在js中的实现、闭包、BOM和DOM模型、对变态IE的系列兼容的解决方案、事件流、还有xml、jason、E4X这些数据格式与js的交互操作简介、高级技巧的介绍(比如惰性载入)等等
《高性能JavaScript》:揭示了技术和策略能帮助你在开发过程中消除性能瓶颈。你将会了解如何提升各方面的性能,包括代码的加载、运行、DOM交互、页面生存周期等。
《JavaScript 设计模式与开发实践》:腾讯前端AlloyTeam团队出品,综合讲述前端的设计模式,设计原则,编程技巧,代码重构等等。
《CSS 世界》:CSS和javascript一样,都是很容易上手,却很难精通的。这本是前端知名博主张鑫旭的书籍,好评很多,讲的很细致。
《CSS 揭秘》:CSS进阶必备书籍,47 个 css 技巧让你在面对各种 css 问题的时候游刃有余。
《深入浅出Node.js》:针对Node的基本原理做了深入,能让你了解底层的Node实现
Ⅳ 算法图解 PDF 高清版
像小说集一样趣味的算法新手入门书。
算法是解决困难的一步步步骤,都是电子信息科学行业的关键主题。现如今程序员*常见的算法早已历经了古人的探索、检测及证实。假如你要搞明白这种算法,又不愿困在在繁杂的证实中,这书更是你的不二选择。这部图例丰富多彩、扣人心弦的好用手册将给你轻轻松松懂得怎样在自身的程序流程中高效率应用关键的算法。
这书范例丰富多彩,图片配文字,以令人非常容易了解的方法诠释了算法,致力于协助程序员在平时新项目中充分发挥算法的动能。书中的前三章将协助你奠定基础,陪你学习培训二分查找、大O表示法、二种基础的数据结构及其递归等。剩下的篇数将关键详细介绍运用普遍的算法,主要内容包含:应对实际难题时的处理方法,例如,什么时候选用贪欲算法或动态规划;散列表的运用;图算法;Kzui近邻算法。
目录
前言
致谢
关于本书
第1章 算法简介1
1.1引言1
1.1.1性能方面1
1.1.2问题解决技巧2
1.2二分查找2
1.2.1更佳的查找方式4
1.2.2运行时间8
1.3大O 表示法8
1.3.1算法的运行时间以不同的速度增加9
1.3.2理解不同的大O运行时间10
1.3.3大O 表示法指出了最糟情况下的运行时间12
1.3.4一些常见的大O运行时间12
1.3.5旅行商13
1.4小结15
第2章 选择排序16
2.1内存的工作原理16
2.2数组和链表18
2.2.1链表19
2.2.2数组20
2.2.3术语21
2.2.4在中间插入22
2.2.5删除23
2.3选择排序25
2.4小结28
第3章 递归29
3.1递归29
3.2基线条件和递归条件32
3.3栈33
3.3.1调用栈34
3.3.2递归调用栈36
3.4小结40
第4章 快速排序41
4.1分而治之41
4.2快速排序47
4.3再谈大O表示法52
4.3.1比较合并排序和快速排序53
4.3.2平均情况和最糟情况54
4.4小结57
第5章 散列表58
5.1散列函数60
5.2应用案例63
5.2.1将散列表用于查找63
5.2.2防止重复64
5.2.3将散列表用作缓存66
5.2.4小结68
5.3冲突69
5.4性能71
5.4.1填装因子72
5.4.2良好的散列函数74
5.5小结75
第6章 广度优先搜索76
6.1图简介77
6.2图是什么79
6.3广度优先搜索79
6.3.1查找最短路径82
6.3.2队列83
6.4实现图84
6.5实现算法86
6.6小结93
第7章 狄克斯特拉算法94
7.1使用狄克斯特拉算法95
7.2术语98
7.3换钢琴100
7.4负权边105
7.5实现108
7.6小结116
第8章 贪婪算法117
8.1教室调度问题117
8.2背包问题119
8.3集合覆盖问题121
8.4NP 完全问题127
8.4.1旅行商问题详解127
8.4.2如何识别NP 完全问题131
8.5小结133
第9章 动态规划134
9.1背包问题134
9.1.1简单算法135
9.1.2动态规划136
9.2背包问题FAQ143
9.2.1再增加一件商品将如何呢143
9.2.2行的排列顺序发生变化时结果将如何145
9.2.3可以逐列而不是逐行填充网格吗146
9.2.4增加一件更小的商品将如何呢146
9.2.5可以偷商品的一部分吗146
9.2.6旅游行程最优化147
9.2.7处理相互依赖的情况148
9.2.8计算最终的解时会涉及两个以上的子背包吗148
9.2.9最优解可能导致背包没装满吗149
9.3最长公共子串149
9.3.1绘制网格150
9.3.2填充网格151
9.3.3揭晓答案152
9.3.4最长公共子序列153
9.3.5最长公共子序列之解决方案154
9.4小结155
第10章 K 最近邻算法156
10.1橙子还是柚子156
10.2创建推荐系统158
10.2.1特征抽取159
10.2.2回归162
10.2.3挑选合适的特征164
10.3机器学习简介165
10.3.1OCR165
10.3.2创建垃圾邮件过滤器166
10.3.3预测股票市场167
10.4小结167
第11章 接下来如何做168
11.1树168
11.2反向索引171
11.3傅里叶变换171
11.4并行算法172
11.5MapRece173
11.5.1分布式算法为何很有用173
11.5.2映射函数173
11.5.3归并函数174
11.6布隆过滤器和HyperLogLog174
11.6.1布隆过滤器175
11.6.2HyperLogLog176
11.7SHA 算法176
11.7.1比较文件177
11.7.2检查密码178
11.8局部敏感的散列算法178
11.9Diffie-Hellman 密钥交换179
11.10线性规划180
11.11结语180
练习答案181
自取: https://url80.ctfile.com/f/32319880-518802548-9892a0
(访问密码:3284)
Ⅳ 目标检测算法图解:一文看懂RCNN系列算法
姓名:王咫毅
学号:19021211150
【嵌牛导读】CNN如此风靡,其衍生算法也是层出不穷,各种衍生算法也可以应用于各种应用场景,各类场合。本文则是了解每个衍生算法的各个使用场景、原理及方法。
【嵌牛鼻子】RCNN 目标检测
【嵌牛提问】RCNN系列算法有何区别和联系?
【嵌牛正文】
在生活中,经常会遇到这样的一种情况,上班要出门的时候,突然找不到一件东西了,比如钥匙、手机或者手表等。这个时候一般在房间翻一遍各个角落来寻找不见的物品,最后突然一拍大脑,想到在某一个地方,在整个过程中有时候是很着急的,并且越着急越找不到,真是令人沮丧。但是,如果一个简单的计算机算法可以在几毫秒内就找到你要找的物品,你的感受如何?是不是很惊奇!这就是对象检测算法(object detection)的力量。虽然上述举的生活例子只是一个很简单的例子,但对象检测的应用范围很广,跨越多个不同的行业,从全天候监控到智能城市的实时车辆检qian测等。简而言之,物体检测是强大的深度学习算法中的一个分支。
在本文中,我们将深入探讨可以用于对象检测的各种算法。首先从属于RCNN系列算法开始,即RCNN、 Fast RCNN和 Faster RCNN。在之后的文章中,将介绍更多高级算法,如YOLO、SSD等。
1.解决对象检测任务的简单方法(使用深度学习)
下图说明了对象检测算法是如何工作。图像中的每个对象,从人到风筝都以一定的精度进行了定位和识别。
下面从最简单的深度学习方法开始,一种广泛用于检测图像中的方法——卷积神经网络(CNN)。如果读者对CNN算法有点生疏,建议 阅读此文 。
这里仅简要总结一下CNN的内部运作方式:
首先将图像作为输入传递到网络,然后通过各种卷积和池化层处理,最后以对象类别的形式获得输出。
对于每个输入图像,会得到一个相应的类别作为输出。因此可以使用这种技术来检测图像中的各种对象。
1.首先,将图像作为输入;
2.然后,将图像分成不同的区域;
3.然后,将每个区域视为单独的图像;
4.将所有这些区域传递给CNN并将它们分类为各种类别;
5.一旦将每个区域划分为相应的类后,就可以组合所有这些区域来获取具有检测到的对象的原始图像:
使用这种方法会面临的问题在于,图像中的对象可以具有不同的宽高比和空间位置。例如,在某些情况下,对象可能覆盖了大部分图像,而在其他情况下,对象可能只覆盖图像的一小部分,并且对象的形状也可能不同。
基于此,需要划分大量的区域,这会花费大量的计算时间。因此,为了解决这个问题并减少区域数量,可以使用基于区域的CNN,它使用提议方法选择区域。
2.基于区域的卷积神经网络
2.1 RCNN的思想
RCNN算法不是在大量区域上工作,而是在图像中提出了一堆方框,并检查这些方框中是否包含任何对象。RCNN 使用选择性搜索从图像中提取这些框。
下面介绍选择性搜索以及它如何识别不同的区域。基本上四个区域形成一个对象:不同的比例、颜色、纹理和形状。选择性搜索在图像中识别这些模式,并基于此提出各种区域。以下是选择性搜索如何工作的简要概述:
首先, 将图像作为输入:
然后,它生成初始子分段,以便获得多个区域:
之后,该技术组合相似区域以形成更大的区域(基于颜色相似性、纹理相似性、尺寸相似性和形状兼容性):
最后,这些区域产生最终的对象位置(感兴趣的区域);
下面是RCNN检测对象所遵循的步骤的简要总结:
1.首先采用预先训练的卷积神经网络;
2.重新训练该模型模型——根据需要检测的类别数量来训练网络的最后一层(迁移学习);
3.第三步是获取每个图像的感兴趣区域。然后,对这些区域调整尺寸,以便其可以匹配CNN输入大小;
4.获取区域后,使用SVM算法对对象和背景进行分类。对于每个类,都训练一个二分类SVM;
最后,训练线性回归模型,为图像中每个识别出的对象生成更严格的边界框;
[对上述步骤进行图解分析]( http://www.robots.ox.ac.uk/~tvg/publications/talks/Fast-rcnn-slides.pdf ):
首先,将图像作为输入:
然后,使用一些提议方法获得感兴趣区域(ROI)(例如,选择性搜索):
之后,对所有这些区域调整尺寸,并将每个区域传递给卷积神经网络:
然后,CNN为每个区域提取特征,SVM用于将这些区域划分为不同的类别:
最后,边界框回归(Bbox reg)用于预测每个已识别区域的边界框:
以上就是RCNN检测物体的全部流程。
2.2 RCNN的问题
从上节内容可以了解到RCNN是如何进行对象检测的,但这种技术有其自身的局限性。以下原因使得训练RCNN模型既昂贵又缓慢:
基于选择性搜索算法为每个图像提取2,000个候选区域;
使用CNN为每个图像区域提取特征;
RCNN整个物体检测过程用到三种模型:
CNN模型用于特征提取;
线性svm分类器用于识别对象的的类别;
回归模型用于收紧边界框;
这些过程相结合使得RCNN非常慢,对每个新图像进行预测需要大约40-50秒,这实际上使得模型在面对巨大的数据集时变得复杂且几乎不可能应用。
好消息是存在另一种物体检测技术,它解决了RCNN中大部分问题。
3.了解Fast RCNN
3.1Fast RCNN的思想
RCNN的提出者Ross Girshick提出了这样的想法,即每个图像只运行一次CNN,然后找到一种在2,000个区域内共享该计算的方法。在Fast RCNN中,将输入图像馈送到CNN,CNN生成卷积特征映射。使用这些特征图提取候选区域。然后,使用RoI池化层将所有建议的区域重新整形为固定大小,以便将其馈送到全连接网络中。
下面将其分解为简化概念的步骤:
1.首先将图像作为输入;
2.将图像传递给卷积神经网络,生成感兴趣的区域;
3.在所有的感兴趣的区域上应用RoI池化层,并调整区域的尺寸。然后,每个区域被传递到全连接层的网络中;
4.softmax层用于全连接网以输出类别。与softmax层一起,也并行使用线性回归层,以输出预测类的边界框坐标。
因此,Fast RCNN算法中没有使用三个不同的模型,而使用单个模型从区域中提取特征,将它们分成不同的类,并同时返回所标识类的边界框。
对上述过程进行可视化讲解:
将图像作为输入:
将图像传递给卷积神经网络t,后者相应地返回感兴趣的区域:
然后,在提取的感兴趣区域上应用RoI池层,以确保所有区域具有相同的大小:
最后,这些区域被传递到一个全连接网络,对其进行分类,并同时使用softmax和线性回归层返回边界框:
上述过程说明了Fast RCNN是如何解决RCNN的两个主要问题,即将每个图像中的1个而不是2,000个区域传递给卷积神经网络,并使用一个模型来实现提取特征、分类和生成边界框。
3.2Fast RCNN的问题
Fast RCNN也存在一定的问题,它仍然使用选择性搜索作为查找感兴趣区域的提议方法,这是一个缓慢且耗时的过程,每个图像检测对象大约需要2秒钟。
因此,又开发了另一种物体检测算法——Faster RCNN。
4.了解Faster RCNN
4.1. Faster RCNN的思想
Faster RCNN是Fast RCNN的修改版本,二者之间的主要区别在于,Fast RCNN使用选择性搜索来生成感兴趣区域,而Faster RCNN使用“区域提议网络”,即RPN。RPN将图像特征映射作为输入,并生成一组提议对象,每个对象提议都以对象分数作为输出。
以下步骤通常采用Faster RCNN方法:
1.将图像作为输入并将其传递给卷积神经网络,后者返回该图像的特征图;
2.在这些特征图上应用RPN,返回提议对象及其分数;
3.在这些提议对象上应用RoI池层,以将所有提案降低到相同的大小;
4.最后,将提议传递到全连接层,该层在其顶部具有softmax层和线性回归层,以对对象的边界框进行分类和输出;
这里简要解释一下RPN是如何运作的:
首先,Faster RCNN从CNN获取特征图并将它们传递到区域提议网络。RPN在这些特征图上使用滑动窗口,每个窗口生成不同形状和大小的k个方框( Anchor boxe):
方框是固定尺寸的边界箱,具有不同的形状和尺寸。对于每个方框,RPN预测两件事:
预测锚是对象的概率;
用于边界框回归器调整锚点以更好地适合物体的形状;
在有了不同形状和大小的边界框后,将其传递到RoI池层。对每个提案并对其进行裁剪,以便每个提案都包含一个对象。这就是RoI池层所做的事情,它为每个方框提取固定大小的特征图:
然后将这些特征图传递到全连接层,该层具有softmax和线性回归层,最终对对象进行分类并预测已识别对象的边界框。
4.2Faster RCNN的问题
上述讨论过的所有对象检测算法都使用区域来识别对象,且网络不会一次查看完整图像,而是按顺序关注图像的某些部分,这样会带来两个复杂性的问题:
该算法需要多次通过单个图像来提取到所有对象;
由于不是端到端的算法,不同的系统一个接一个地工作,整体系统的性能进一步取决于先前系统的表现效果。
链接: https://www.jianshu.com/p/51fc039ae7a4
Ⅵ 《程序员的数学》pdf下载在线阅读,求百度网盘云资源
《程序员的数学(第2版)》([日]结城浩)电子书网盘下载免费在线阅读
链接:
书名:程序员的数学(第2版)
作者:[日]结城浩
译者:管杰
豆瓣评分:8.7
出版社:人民邮电出版社
出版年份:2020-4-1
页数:262
内容简介:
《程序员的数学 第2版》面向程序员介绍了编程中常用的数学知识,借以培养初级程序员的数学思维。读者无须精通编程,也无须精通数学,只要具备四则运算和乘方等基础知识,即可阅读本书。
《程序员的数学 第2版》讲解了二进制计数法、逻辑、余数、排列组合、递归、指数爆炸、不可解问题等许多与编程密切相关的数学方法,分析了哥尼斯堡七桥问题、高斯求和、汉诺塔、斐波那契数列等经典问题和算法。引导读者深入理解编程中的数学方法和思路。
《程序员的数学 第2版》新增一个附录来介绍机器学习的基础知识,内容涉及感知器、损失函数、梯度下降法和神经网络,旨在带领读者走进机器学习的世界。
作者简介:
结城浩(作者)
生于1963年,日本知名技术作家和程序员。在编程语言、设计模式、数学、加密技术等领域,编写了很多深受欢迎的入门书。代表作有《数学女孩》系列、《程序员的数学》《图解密码技术》等。
管杰(译者)
毕业于复旦大学日语系,现为对日软件工程师,具有多年日语技术文档编写经验。爱好日汉翻译和日本文化史,译有《明解C语言:入门篇》等。
卢晓南(译者)
本科就读于西安交通大学少年班、数学系。名古屋大学博士(信息科学)。现于山梨大学计算机系任助理教授。主要研究方向包括组合数学(离散数学)及其在信息科学、计算机科学、统计学中的应用。译着有《程序员的数学3:线性代数》。
Ⅶ 2021年你读了哪些觉得比较好的计算机书籍
[美] 马丁·福勒(Martin Fowler) 着,徐昊,郑晔,熊节 译
领域特定语言DSL,通过Java和C语言分析具体案例,讲解DSL的构造方式和通用原则,软件开发程序员的教程,马丁·福勒新的力作。
《领域特定语言》是领域特定语言(Domain-Specific Language,DSL)领域的丰碑之作,由软件开发大师马丁·福勒(Martin Fowler)历时多年写作而成。
全书共57章,分为6个部分,全面介绍了DSL概念、DSL常见主题、外部DSL主题、内部DSL主题、备高段选计算模型以及代码生成等内容,揭示了与编程语言无关的通用原则和模式,阐释了如何通过DSL有效提高开发人员的生产力以及增进与领域专家的有效沟通,能为开发人员选择和使用DSL提供有效的决策依据和指导方法。
本书适合想要了解各种DSL及其构造方式,理解其通用原则、模式和适用场景,以提高开灶念州发生产力和沟通能力的软件开发人员阅读。
[美] 肯尼思·,A.兰伯特(Kenneth,A.,Lambert,) 着,肖鉴明 译
数据结构算法入门教程,基于Python语言进行讲解,国外高等院校教材升级,书中包含大量习题和编程项目,随书赠送配套资源。
本书用 Python 语言来讲解数据结构及实现方法。全书首先概述 Python 编程的功能—这些功能是实际编程和解决问题时所必需的;其次介绍抽象数据类型的规范、实现和应用,多项集类型,以及接口和实现之间的重要差异;随后介绍线性多项集、栈、队列和列表;最后介绍树、图等内容。本书附有大量的复习题和编程项目,旨在帮助读者巩固所学知识。
本书不仅适合高等院校计算机专业师生阅读,也适合对 Python 感兴趣的读者和程序员阅读。
乔恩·克莱因伯格(Jon Kleinberg) 着,王海鹏 译
用实际示例阐明枯燥的算法理论,更注重算法设计思维的培养,适合作为算法入门书。
这是一本被众多名校采用的算法设计课程教材,强调用实际示例阐明枯燥的算法理论,更注重算法设计思路而非算法复杂度分析。本书采用新颖的教学方式,通过分析真实世界的问题来激发算法思想。两位作者以一种清晰、直接的方式,指导学生自己分析和定义问题,并从中找出适用于给定场景的算法设计原则。本书鼓励读者更深入地理解算法设计过程, 探索 算法在计算机科学的更广阔领域中的应用。
本书具有以下特色:
王争着
20个数据结构与算法,100个真实项目场景案例,300多幅算法手绘图解
本书分为11章。第1章介绍复杂度分析方法。第2章介绍数组、链表、栈和队列这些基础的线性表数据结构。第3章介绍递归编程技巧、8种经典排序、二分查找及二分查找的变体问题。第4章隐蔽介绍哈希表、位图、哈希算法和布隆过滤器。第5章介绍树相关的数据结构,包括二叉树、二叉查找树、平衡二叉查找树、递归树和B+树。第6章介绍堆,以及堆的各种应用,包括堆排序、优先级队列、求Top K、求中位数和求百分位数。第7章介绍跳表、并查集、线段树和树状数组这些比较高级的数据结构。第8章介绍字符串匹配算法,包括BF算法、RK算法、BM算法、KMP算法、Trie树和AC自动机。第9章介绍图及相关算法,包括深度优先搜索、广度优先搜索、拓扑排序、Dijkstra算法、Floyd算法、A*算法、Z小生成树算法、Z大流算法和Z大二分匹配等。第10章介绍4种算法思想,包括贪心、分治、回溯和动态规划。第11章介绍4个经典项目中的数据结构和算法的应用,包括Redis、搜索引擎、鉴权限流和短网址服务。另外,附录A为书中的思考题的解答。
[美] 阿尔·斯维加特(Al Sweigart) 着
Python编程从入门到实践姊妹篇,零基础自学Python教程书籍,提供配套同步教学视频、在线编程环境!针对Python3.X版本更新
在本书中,你将学习利用Python编程在几分钟内完成手动需要几小时的工作,无须事先具备编程经验。通过阅读本书,你会学习Python的基本知识, 探索 Python丰富的模块库,并完成特定的任务(例如,从网站抓取数据,读取PDF和Word文档等)。本书还包括有关输入验证的实现方法,以及自动更新CSV文件的技巧。一旦掌握了编程的基础知识,你就可以毫不费力地创建Python程序,自动化地完成很多繁琐的工作,包括:
何华平 着
Python编程零基础入门实践教程,用Python处理Excel、Word、PPT、PDF、图像文件,提升职场办公效率,解决办公难题,附赠学习资源和教学视频
这是一本关于如何利用Python提高日常办公效率的书,书中凝聚了作者多年的实践经验和独特思考,旨在帮助读者准确、高效地完成大量高重复度的工作。
《学Python,不加班:轻松实现办公自动化》汇集了日常办公和处理文档时常见的问题,通过实例的演示与讲解,帮助读者灵活有效地使用Python处理工作中遇到的问题。全书共11章,涵盖Python的各种应用场景,具体包括文件管理自动化,网络信息自动获取,TXT、XLS/XLSX、DOC/DOCX、PPT、PDF、图片文件的自动化处理,模拟鼠标、键盘操控本地软件,自动化运行管理等。本书力图淡化编程中的抽象概念,贴合工作场景,注重实战效果,通过对Python技术的巧妙讲解,帮助读者成为高效率的办公室“超人”。
雷明 着
人工智能深度学习领域教程,AI程序员的数学参考书,透彻理解机器学习算法,从数学层面搞懂核心算法原理的逻辑,python程序讲解
本书的目标是帮助读者全面、系统地学习机器学习所必须的数学知识。全书由8章组成,力求精准、最小地覆盖机器学习的数学知识。包括微积分,线性代数与矩阵论,最优化方法,概率论,信息论,随机过程,以及图论。本书从机器学习的角度讲授这些数学知识,对它们在该领域的应用举例说明,使读者对某些抽象的数学知识和理论的实际应用有直观、具体的认识。 本书内容紧凑,结构清晰,深入浅出,讲解详细。可用作计算机、人工智能、电子工程、自动化、数学等相关专业的教材与教学参考书。对人工智能领域的工程技术人员与产品研发人员,本书也有很强的参考价值。对于广大数学与应用的数学爱好者,本书亦为适合自学的读本。
张逸 着
DDD领域驱动设计教程,进一步精化领域驱动设计方法体系,通过实战案例演示统一过程的实施,可帮助读者提高领域建模及软件设计能力。
本书全面阐释了领域驱动设计(domain-driven design,DDD)的知识体系,内容覆盖领域驱动设计的主要模式与主流方法,并在此基础上提出“领域驱动设计统一过程”(domain-driven design unified process,DDDUP),将整个软件构建过程划分为全局分析、架构映射和领域建模3个阶段。除给出诸多案例来阐释领域驱动设计统一过程中的方法与模式之外,本书还通过一个真实而完整的案例全面展现了如何进行领域驱动设计统一过程的实施和落地。为了更好地运用领域驱动设计统一过程,本书还开创性地引入了业务服务、菱形对称架构、领域驱动架构、服务驱动设计等方法与模式,总结了领域驱动设计能力评估模型与参考过程模型。本书提出的一整套方法体系已在多个项目中推广和落地。
刘遄 着
Linux入门教程书籍,基于Linux系统RHEL8编写,每章带有图表及习题,知识点覆盖红帽认证RHCE考试要求。
1.本书耗时近3年时间,修订1500余次,内容源自国内每天访问量近60000人次的同名Linux培训课程;
2.在上一版的基础上进行了系统的更新,基于Linux系统RHEL 8编写,适用于CentOS、Fedora、Ubuntu等主流衍生版本;
3.面向零基础读者,从Linux基础知识讲起,渐进式地提高内容难度。
《Linux就该这么学(第2版)》在上一版的基础上进行了大量的更新,基于红帽RHEL 8系统编写,且内容适用于CentOS、Fedora等系统。本书共分为20章,内容涵盖了部署Linux系统,常用的Linux命令,与文件读写操作有关的技术,使用Vim编辑器编写和修改配置文件,用户身份与文件权限的设置,硬盘设备分区、格式化以及挂载等操作,部署RAID磁盘阵列和LVM,firewalld防火墙与iptables防火墙的区别和配置,使用ssh服务管理远程主机,使用Apache服务部署静态网站,使用vsftpd服务传输文件,使用Samba或NFS实现文件共享,使用BIND提供域名解析服务,使用DHCP动态管理主机地址,使用Postfix与Dovecot部署邮件系统,使用Ansible服务实现自动化运维,使用iSCSI服务部署网络存储,使用MariaDB数据库管理系统,使用PXE+Kickstart无人值守安装服务,使用LNMP架构部署动态网站环境等。此外,本书的配套站点还深度点评了红帽RHCSA、RHCE、RHCA认证,方便读者备考。
张鑫旭 着
CSS3.0入门到进阶教程,前端博客"鑫空间-鑫生活"博主十年经验沉淀之作,大量实战案例且具有在线Demo演示,配套官方网站,随时与作者沟通学习。
本书是“CSS世界三部曲”的最后一部。这是一本关于CSS的进阶读物,专门讲CSS3及其之后版本的新特性。在本书中,作者结合自己多年的从业经验,讲解CSS基础知识,并充分考虑前端开发者的需求,以CSS新特性的 历史 背景为线索,去粗取精,注重细节,深入浅出地介绍了上百个CSS新特性。此外,作者专门还为本书开发了配套网站,用于书中实例效果的在线展示和问题答疑。
本书的所有内容都是作者经过深入思考和 探索 后提炼出来的,知识点多且内容丰富,注重技术细节、经验分享和解决问题的思路。本书的主要目标是帮助前端开发者突破CSS技能提升的瓶颈,非常适合具有一定CSS基础的前端开发者阅读。
[美] 威廉·肖特斯(William Shotts) 着,门佳,李伟 译
手把手教你学Linux操作系统,脚本shell编程代码书写,系统管理编程运维,学习使用bash(LinuxShell)编写完整的程序。
本书对Linux命令行进行详细的介绍,全书内容包括4个部分,第一部分由Shell的介绍开启命令行基础知识的学习之旅;第二部分讲述配置文件的编辑,如何通过命令行控制计算机;第三部分探讨常见的任务与必备工具;第四部分全面介绍Shell编程,读者可通过动手编写Shell脚本掌握Linux命令的应用,从而实现常见计算任务的自动化。通过阅读本书,读者将对Linux命令有更加深入的理解,并且可以将其应用到实际的工作中。
本书适合Linux初学人员、Linux系统管理人员及Linux爱好者阅读。
[美] 布莱恩·W.克尼汉(Brian,W.,Kernighan) 着,韩磊 译
UNIX的诞生记与发展史,计算机先驱布莱恩·W.克尼汉继C程序设计语言后又一力作,讲述贝尔实验室的幕后故事,C/C++等重要发明的起源,探寻计算科学之光!
自1969年在贝尔实验室的阁楼上诞生以来,Unix操作系统的发展远远超出其创造者们的想象。它带动了许多创新软件的开发,影响了无数程序员,改变了整个计算机技术的发展轨迹。
本书不但书写Unix的 历史 ,而且记录作者的回忆,一探Unix的起源,试图解释什么是Unix,Unix是如何产生的,以及Unix为何如此重要。除此之外,本书以轻松的口吻讲述了一群在贝尔实验室工作的发明天才的有趣往事,本书中每一个故事都是鲜为人知却又值得传播的宝贵资源。
本书适合对计算机或相关 历史 感兴趣的人阅读。读者不需要有太多的专业技术背景,就可以欣赏Unix背后的思想,了解它的重要性。
[印] 拉胡尔·沙玛(Rahul Sharma)[芬]韦萨·凯拉维塔 着,邓世超 译
Rust系统编程指南自学教程书籍,学习Rust编程语言基础,掌握更高端的编程范式,成就高段位的编程极客。
本书内容共17章,由浅入深地讲解Rust相关的知识,涉及基础语法、软件包管理器、测试工具、类型系统、内存管理、异常处理、高级类型、并发模型、宏、外部函数接口、网络编程、HTTP、数据库、WebAssembly、GTK+框架和GDB调试等重要知识点。
本书适合想学习Rust编程的读者阅读,希望读者能够对C、C++或者Python有一些了解。书中丰富的代码示例和详细的讲解能够帮助读者快速上手,高效率掌握Rust编程。