Sanplit's Home Page

待人友好是修养,独来独往是性格。

  • 首页
  • 归档
  • 标签
  • 日程

经典编程书籍大全

发表于 2016-11-07

100+ 经典技术书籍,涵盖:计算机系统与网络、系统架构、算法与数据结构、前端开发、后端开发、移动开发、数据库、测试、项目与团队、程序员职业修炼、求职面试 和 编程相关的经典书籍。

这个列表综合了伯乐在线网站以往推荐经典书籍文章中的列表,以及在微信和微博中被广泛推荐的好书。虽然已经包括了100多本,覆盖的面也比较全。仍然有很多方面需要补充,而且相信还有很多没有被收录的好书。欢迎大家在 issues 中推荐或自荐。

计算机系统与网络

  • 《图灵的秘密:他的生平、思想及论文解读》
  • 《计算机系统概论》
  • 《深入理解Linux内核》
  • 《深入Linux内核架构》
  • 《TCP/IP详解 卷1:协议》
  • 《Linux系统编程(第2版)》
  • 《Linux内核设计与实现(第3版)》
  • 《深入理解计算机系统(原书第2版)》
  • 《计算机程序的构造和解释(原书第2版)》
  • 《编码:隐匿在计算机软硬件背后的语言》
  • 《性能之颠:洞悉系统、企业与云计算》
  • 《UNIX网络编程 卷1:套接字联网API(第3版)》
  • 《UNIX网络编程 卷2:进程间通信》
  • 《Windows核心编程(第5版)》
  • 《WireShark网络分析就这么简单》
  • 《WireShark网络分析的艺术》

编程通用

  • 《编程原本》
  • 《代码大全》
  • 《UNIX编程艺术》
  • 《代码整洁之道》
  • 《编程珠玑(第2版)》
  • 《编程珠玑(续)》
  • 《软件调试的艺术》
  • 《修改代码的艺术》
  • 《编程语言实现模式》
  • 《编写可读代码的艺术》
  • 《解析极限编程:拥抱变化》
  • 《精通正则表达式(第3版)》
  • 《编译原理(第2版)》龙书
  • 《重构:改善既有代码的设计》
  • 《七周七语言:理解多种编程范型》
  • 《调试九法:软硬件错误的排查之道》
  • 《程序设计语言:实践之路(第3版)》
  • 《计算的本质:深入剖析程序和计算机》
  • 《设计模式 : 可复用面向对象软件的基础》

算法与数据结构

  • 《算法(第4版)》
  • 《算法导论(原书第2版)》
  • 《Python算法教程》
  • 《算法设计与分析基础(第3版)》
  • 《学习 JavaScript 数据结构与算法》
  • 《数据结构与算法分析 : C++描述(第4版)》
  • 《数据结构与算法分析 : C语言描述(第2版)》
  • 《数据结构与算法分析 : Java语言描述(第2版)》

职业修炼与规划

  • 《大教堂与集市》
  • 《卓有成效的程序员》
  • 《程序员的职业素养》
  • 《程序员修炼之道:从小工到专家》
  • 《软件开发者路线图:从学徒到高手》
  • 《我编程,我快乐: 程序员职业规划之道》
  • 《程序员的思维修炼:开发认知潜能的九堂课》
  • 《高效程序员的45个习惯:敏捷开发修炼之道(修订版)》

大师访谈

  • 《编程大师智慧》
  • 《编程大师访谈录》
  • 《编程人生 : 15位软件先驱访谈录》
  • 《奇思妙想 : 15位计算机天才及其重大发现》
  • 《图灵和ACM图灵奖》

架构/性能

  • 《微服务设计》
  • 《大数据日知录》
  • 《企业应用架构模式》
  • 《Web性能权威指南》
  • 《SRE:Google运维解密》
  • 《发布!软件的设计与部署》
  • 《高扩展性网站的 50 条原则》
  • 《大型网站技术架构:核心原理与案例分析》
  • 《恰如其分的软件架构:风险驱动的设计方法》
  • 《软件系统架构:使用视点和视角与利益相关者合作(第2版)》

Web前端

  • 《高性能 JavaScript》
  • 《锋利的 jQuery(第2版)》
  • 《JavaScript 忍者秘籍》(感谢@joker-danta?补充推荐)
  • 《编写可维护的 JavaScript》
  • 《你不知道的 JavaScript(上)》
  • 《JavaScript 权威指南(第6版)》
  • 《JavaScript 语言精粹(修订版)》
  • 《JavaScript DOM编程艺术 (第2版)》
  • 《JavaScript 高级程序设计(第3版)》
  • 《JavaScript 异步编程:设计快速响应的网络应用》
  • 《Effective JavaScript:编写高质量JavaScript代码的68个有效方法》
  • 《HTML5 权威指南》
  • 《HTML5 秘籍(第2版)》
  • 《HTML5 与 CSS3 基础教程(第八版)》
  • 《CSS 揭秘》
  • 《CSS 设计指南(第3版)》
  • 《CSS 权威指南(第3版)》
  • 《深入浅出 HTML 与 CSS》

Java开发

  • 《Java8 实战》
  • 《Java并发编程实战》
  • 《Java性能权威指南》
  • 《Java程序员修炼之道》
  • 《实战Java高并发程序设计》
  • 《Java编程思想 (第4版)》
  • 《深入理解Java虚拟机(第2版)》
  • 《Effective java 中文版(第2版)》
  • 《Java核心技术·卷1:基础知识(原书第9版)》
  • 《Java核心技术·卷2:高级特性(原书第9版)》

.NET

  • 《精通C#(第6版)》
  • 《深入理解C#(第3版)》
  • 《CLR via C#(第4版)》

Python

  • 《集体智慧编程》
  • 《笨办法学Python》
  • 《Python基础教程》
  • 《Python源码剖析》
  • 《Head First Python》
  • 《与孩子一起学编程》
  • 《Python学习手册(第4版)》
  • 《Python Cookbook(第3版)》
  • 《Python参考手册(第4版)》
  • 《Python核心编程(第3版)》
  • 《Python科学计算(第2版)》
  • 《利用 Python 进行数据分析》
  • 《Think Python:像计算机科学家一样思考Python(第2版)》
  • 《Python编程实战:运用设计模式、并发和程序库创建高质量程序》
  • 《Python绝技:运用Python成为顶级黑客》
  • 《Flask Web开发:基于Python的Web应用开发实战》

Android

  • 《Android编程权威指南(第2版)》
  • 《移动应用UI设计模式(第2版)》

iOS

  • 《iOS编程实战》
  • 《iOS编程(第4版)》
  • 《Objective-C高级编程》
  • 《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》

PHP

  • 《Head First PHP & MySQL(中文版)》
  • 《深入PHP:面向对象、模式与实践(第3版)》

C语言

  • 《C标准库》
  • 《C和指针》
  • 《C专家编程》
  • 《C陷阱与缺陷》
  • 《C语言接口与实现》
  • 《C程序设计语言(第2版)》
  • 《C语言参考手册(第5版)》

C++

  • 《C++标准库》
  • 《C++编程思想》
  • 《C++语言的设计与演化》
  • 《C++程序设计原理与实践》
  • 《C++ Primer (中文第5版)》
  • 《C++ Primer习题集(第5版) 》
  • 《C++程序设计语言(第1-3部分)(原书第4版) 》
  • 《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版) 》
  • 《More Effective C++:35个改善编程与设计的有效方法(中文版) 》
     

机器学习和数据挖掘

  • 《数据之巅》
  • 《矩阵分析》
  • 《机器学习》
  • 《统计学习方法》
  • 《机器学习导论》
  • 《推荐系统实践》
  • 《机器学习实战》
  • 《Web数据挖掘》
  • 《深入浅出统计学》
  • 《模式分类(第2版)》
  • 《概率论与数理统计》
  • 《统计学习基础(第2版)(英文) 》
  • 《数据挖掘:概念与技术(第3版)》
  • 《数据挖掘:实用机器学习工具与技术(原书第3版)》
  • 《大数据:互联网大规模数据挖掘与分布式处理(第2版)》

数据库

  • 《SQL应用重构》
  • 《SQL Cookbook》
  • 《高性能MySQL (第3版)》
  • 《深入浅出SQL(中文版)》
  • 《MySQL技术内幕 : InnoDB存储引擎(第2版)》
  • 《深入浅出MySQL : 数据库开发、优化与管理维护》

测试

  • 《探索式软件测试》
  • 《有效的单元测试》
  • 《Google软件测试之道》

项目与团队

  • 《人月神话》
  • 《快速软件开发》
  • 《人件(原书第3版)》
  • 《门后的秘密:卓越管理的故事》
  • 《极客与团队:软件工程师的团队生存秘笈》

求职面试

  • 《程序员面试金典(第5版)》
  • 《编程之美 : 微软技术面试心得》
  • 《金领简历:敲开苹果、微软、谷歌的大门》
  • 《剑指Offer:名企面试官精讲典型编程题(纪念版)》

编程之外

  • 《暗时间》
  • 《数学之美》
  • 《赢得朋友》
  • 《精益创业》
  • 《批判性思维》
  • 《世界是数字的》
  • 《程序员的数学》
  • 《程序员健康指南》
  • 《禅与摩托车维修艺术》
  • 《关键对话:如何高效能沟通》
  • 《写作法宝:非虚构写作指南》
  • 《黑客与画家 : 来自计算机时代的高见》
  • 《软件随想录(卷1)》《软件随想录(卷2)》
  • 《如何把事情做到最好:改变全球9800万人的人生指导书》

使用GitHub Pages和Hexo搭建免费独立博客

发表于 2016-11-02

摘要:这是一篇使用GitHub Pages和Hexo搭建免费独立博客的总结。

前言

为什么选择GitHub Pages?

  • 无需购置服务器,目前的blog挂载在Github Pages,免服务器费的同时还能做负载均衡;
  • github pages有300M免费空间,资料自己管理,保存可靠;
  • 学着用github,享受github的便利,上面有很多大牛,眼界会开阔很多;
  • 顺便看看github工作原理,最好的团队协作流程;
  • github是趋势;
  • 就算github被墙了,我可以搬到国内的gitcafe中去。

准备工作

相信自己,敢于面对,过程并不是很难。

###nodejs环境包###

因为 Hexo 是基于 Node.js 的第三方模块,所以缺少 Node.js 不可。访问 Node.js官网下载适合自己系统的 Node.js 安装包。目前最新的版本为 v6.5.0。

(注:至于安装过程和环境变量配置请参考菜鸟教程-Node.js安装配置)

###Git工具包###

如果之后你需要安装一些 Hexo 的主题和插件,Git 是最好的下载方式。因为好多主题都被放在了 Github 上,你只需要敲几个字符就可以下载。

(注:宁浩网之前介绍过Git的使用方法,安装过程及简单使用请见这里)

####Git与GitHub区别####

这里,我们要区分清楚git与github。
git是一个版本控制的工具,而github有点类似于远程仓库,用于存放用git管理的各种项目。

####与GitHub建立联系####
git安装好以后执行以下步骤:

  1. 从程序目录打开 “Git Bash” ,或者直接用git shell,github自带的工具
  2. 键入命令:ssh-keygen -t rsa -C “email@email.com” “email@email.com”是github注册账号邮箱地址
  3. 提醒你输入key的名称,你可以不用输入,直接3个回车,就OK了;
  4. 在C:\Users\Administrator.ssh下产生两个文件:id_rsa和id_rsa.pub
  5. 用记事本打开id_rsa.pub文件,复制内容,在github的网站上找到ssh密钥管理页面,添加新公钥 。
  6. 在git bash中输入ssh -T git@github.com命令,出现Hi sanplit! You’ve successfully authenticated表示成功。

####设置用户信息####

现在你已经可以通过 SSH 链接到 GitHub 了,还有一些个人信息需要完善的。

Git 会根据用户的名字和邮箱来记录提交。GitHub 也是用这些信息来做权限的处理,输入下面的代码进行个人信息的设置,把名称和邮箱替换成你自己的,名字必须是你的真名,而不是GitHub的昵称。

$ git config --global user.name "aierui"//用户名
$ git config --global user.email "imland@outlook.com"//填写自己的邮箱

开始搭建

因为最终博客是要部署到github上的,这里我首先讲解github建立仓库,然后讲解hexo安装。为了方便大家一次部署成功并且考虑到以后如果大家换电脑或者重装系统后还能够修改以前的博客,请按照我的解决方案进行,这里大家不懂也没事,照着来就行,我会在文章末尾优化部署与管理中详解。

###创建GitHub Pages 仓库###

在自己的GitHub账号下创建一个新的仓库,命名为username.github.io
(username是你的账号名)。在这里,要知道,GitHub Pages有两种类型:User/Organization Pages 和 Project Pages,而我所使用的是User Pages。
简单来说,User Pages 与 Project Pages的区别是:

  • User Pages 是用来展示用户的,而 Project Pages 是用来展示项目的。
    • 用于存放 User Pages 的仓库必须使用username.github.io的命名规则,而 Project Pages 则没有特殊的要求。
    • User Pages 将使用仓库的 master 分支,而 Project Pages 将使用 gh-pages 分支。
    • User Pages 通过 http(s)://username.github.io 进行访问,而 Projects * Pages通过 http(s)://username.github.io/projectname 进行访问。

* 这一步很关键 *

创建两个分支:master 与 hexo。 设置hexo为默认分支 (因为我们只需要手动管理这个分支上的Hexo网站文件)

到这为止,我们的github仓库已经建立好了,我们马上就能见到成果了,下面我们开始建站。

hexo介绍

Hexo 是一个轻量的静态博客框架。通过Hexo可以快速生成一个静态博客框架,仅需要几条命令就可以完成,相当方便。

而架设Hexo的环境更简单了 不需要 lnmp/lamp/XAMPP 这些繁琐复杂的环境 仅仅需要一个简单的http服务器即可使用 或者使用互联网上免费的页面托管服务

比如本人的这个博客 就是托管于 GitHub Pages服务上

###hexo安装###

安装Hexo相当简单。在安装之前,必须检查电脑中是否已经安装下列应用程序:

* Node.js 
* Git

如果您的电脑中已经安装上述必备程序,那么恭喜您!接下来只需要使用 npm 即可完成 Hexo 的安装。打开git bash执行以下命令:

$ npm install -g hexo-cli

这样hexo就已经安装好了。

使用hexo建站

安装完后,在你喜欢的文件夹内(我的是根目录)(例如H:\),点击鼠标右键选择Git bash,输入以下指令(填自己的地址):

git clone git@github.com:sanplit/sanplit.github.io.git 

该命令会把你的博客仓库同步下来,然后cd到你的仓库文件夹下面依次执行以下命令:

$ hexo init

该命令会在目标文件夹内建立网站所需要的所有文件。接下来是安装依赖包:

$ npm install

这样,我们就已经搭建起本地的Hexo博客了。可以先执行以下命令(在对应文件夹下),然后再浏览器输入localhost:4000查看。

$ hexo generate
$ hexo server

这个博客只是本地的,别人是浏览不了的,之后需要部署到GitHub上。

####相关资料####
Hexo 官方文档

####部署博客到GitHub上####

部署其实很简单,只要改一下配置文件,执行几条命令就行了,为了以后的方便,现在麻烦了一点,大家跟着做就行了,具体原因也在配置管理与优化里有讲到。

配置站点文件

我们继续使用上面的文件夹H:\sanplit.github.io(也可以新建一个文件夹重新生成),然后编辑该文件夹下的_config.yml(这是站点配置文件)
默认生成的_config.yml:

# Deployment 
## Docs: http://hexo.io/docs/deployment.html 
deploy:   
  type:

修改后的_config.yml:(也是填入自己的ssh地址)

deploy:
  type: git
  repository: git@github.com:sanplit/sanplit.github.io.git
  branch: master

这里解释一下前面为什么建立两个分支master和hexo,为了管理方便,以后master分支用来发布网站(一会再说怎么发布),hexo分支用来存放Hexo网站文件。

发布

为了能够使Hexo部署到GitHub上,需要安装一个插件:(在项目目录下执行命令)

$ npm install hexo-deployer-git --save 

然后,执行下列指令即可完成部署:(以后发布也按照这三条命令执行)

$ hexo clean #清空public文件夹下生成的静态文件和db.json文件
$ hexo generate #重新生成静态文件和db.json
$ hexo deploy #按照站点配置文件部署到github上

之后,可以通过在浏览器键入:username.github.io进行浏览,开心吧~

提交Hexo网站文件到hexo分支

由于上面执行了hexo init命令,所以要重新关联远端库
首先在项目文件夹下执行以下命令:

$ git init #初始化为一个git目录
$ git remote add origin git@github.com:sanplit/sanplit.github.io.git #使用你自己的地址关联
$ git pull #pull一下你的远端库

此时你应该在hexo分支下,如下:

$ H:\sanplit.github.io (hexo) (hexo-site@0.0.0)

如果不是,执行以下命令切换到hexo分支:

$ git checkout hexo 

然后执行以下命令提交网站相关文件:

$ git add . #添加所有文件到暂存区
$ git commit -m "提交信息" #提交到本地仓库
$ git push origin hexo  #把本地库push到远端库的hexo分支

提交后去github上查看是否成功,这是我的github地址,看看是否一样。

###更换主题###

我使用的是next主题,大家喜欢也可以去我的github上fork一下,然后在这基础上修改,大家也可以找自己喜欢的主题来换。
如果想要使用其他主题,可以使用git clone将别人的主题拷贝到H:\sanplit.github.io\themes下,然后将_config.yml中的theme: landscape改为对应的主题名字。
下面以切换next主题为例来讲一下具体如何操作,同样也是在项目文件夹下执行以下命令:

$ git clone https://github.com/iissnan/hexo-theme-next.git themes/next

也可以是Smackdown主题:

$ git clone https://github.com/winnerweb/hexo-theme-smackdown.git themes/smackdown

等等;然后在站点配置文件_config.yml中的theme: landscape改为theme: next,重新发布一下就完成了。

####相关资料####

next主题使用文档

优化部署与管理

###概述###

Hexo部署到GitHub上的文件,是.md(你的博文)转化之后的.html(静态网页)。因此,当你重装电脑或者想在不同电脑上修改博客时,就不可能了(除非你自己写html)。
其实,Hexo生成的网站文件中有.gitignore文件,因此它的本意也是想我们将Hexo生成的网站文件存放到GitHub上进行管理的(而不是用U盘或者云备份啦。)这样,不仅解决了上述的问题,还可以通过git的版本控制追踪你的博文的修改过程,是极赞的。
但是,如果每一个GitHub Pages都需要创建一个额外的仓库来存放Hexo网站文件,我感觉很麻烦(10个项目需要20个仓库)。
所以,我利用了分支!!!
简单地说,每个想建立GitHub Pages的仓库,起码有两个分支,一个用来存放Hexo网站的文件,一个用来发布网站。
下面以我的博客作为例子详细地讲述。

我的博客搭建流程

1、创建仓库,sanplit.github.io; 
2、创建两个分支:master 与 hexo; 
3、设置hexo为默认分支(因为我们只需要手动管理这个分支上的Hexo网站文件); 
4、使用git clone git@github.com:sanplit/sanplit.github.io.git拷贝仓库; 
5、在本地sanplit.github.io文件夹下通过Git bash依次执行npm install hexo-cli、hexo init、npm install 和 npm install hexo-deployer-git(此时当前分支应显示为hexo); 
6、修改_config.yml中的deploy参数,分支应为master; 
7、使用git init 、 
git remote add origin git@github.com:sanplit/sanplit.github.io.git以及git pull命令重新关联远端库。 
8、使用git checkout hexo命令切换到hexo分支然后依次执行git add .、git commit -m “…”、git push origin hexo提交网站相关的文件; 
9、执行hexo generate -d生成网站并部署到GitHub上。
这样一来,在GitHub上的sanplit.github.io仓库就有两个分支,一个hexo分支用来存放网站的原始文件,一个master分支用来存放生成的静态网页。完美!

###我的博客管理流程###

日常修改

在本地对博客进行修改(添加新博文、修改样式等等)后,通过下面的流程进行管理:
依次执行git add .、git commit -m “…”、git push origin hexo指令将改动推送到GitHub(此时当前分支应为hexo);
然后才执行hexo generate -d发布网站到master分支上。
虽然两个过程顺序调转一般不会有问题,不过逻辑上这样的顺序是绝对没问题的(例如突然死机要重装了,悲催….的情况,调转顺序就有问题了)。

本地资料丢失

当重装电脑之后,或者想在其他电脑上修改博客,可以使用下列步骤:

1、使用git clone git@github.com:sanplit/sanplit.github.io.git拷贝仓库(默认分支为hexo); 
2、在本地新拷贝的sanplit.github.io文件夹下通过Git bash依次执行下列指令:npm install hexo-cli、npm install、npm install hexo-deployer-git(记得,不需要hexo init这条指令)。

###结尾###
转载:来自 http://blog.csdn.net/itjia_0203/article/details/52504837

更多资料其实都可以自己去搜索、尝试,别人整理的再好都不一定行,我是没有完全通过,其他都是搜索其他答案整理出适合自己的可是最好的。
以下命令可供参考:

$ hexo clean #清空public文件夹下生成的静态文件和db.json文件
$ hexo generate #重新生成静态文件和db.json
$ hexo deploy #按照站点配置文件部署到github上

$ hexo generate -d #生成网站并部署到GitHub上。同上

$ hexo g #生成
$ hexo s #启动本地服务,进行文章预览调试

Hello World

发表于 2016-10-31

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

Sanplit

Sanplit

Walk steps step by step

3 日志
© 2016 Sanplit
由 Hexo 强力驱动
主题 - NexT.Muse