自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 资源 (839)
  • 收藏
  • 关注

原创 特殊指令之SC命令详解

特殊指令之SC命令详解DOS脚本梳理已发布文章 :SC命令是XP系统中功能强大的DOS命令,SC命令能与“服务控制器”和已安装设备进行通讯。声明一下:小编是从微软官网上查的资料(https://technet.microsoft.com/zh-cn/library/cc772676#BKMK_config), 只是通过自己的理解进行测试并插入小编的测试截图, 希望对大家有用Win7及其以上版本当然也能用SC命令主要的几个功能:1.更改服务的启动状态(这是比较有用的...

2020-09-10 00:36:44 1822

转载 Linux性能检查命令总结

如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?类别 监控命令 描述 备注 内存瓶颈 free 查看内存使用 vmstat 3(间隔时间) 100(监控次数) 查看swap in/out详细定位是否存在性能瓶颈 推荐使用 sar -r 3 和free命令类似,查看内存的使用情况,但是不包含swap的情况 cpu瓶颈 top -H 按...

2020-08-27 13:39:32 260

原创 为什么程序猿 996 会猝死,而企业家 007 却不会?

...

2019-09-14 22:32:02 645 1

原创 外包公司的运作模式和赚钱之道-聊聊IT外包公司

IT外包已经成为很多企业广泛采用的服务模式,也产生了众多的IT外包公司,外包大致有如下分类:1.人力外包 2.项目外包先说说人力外包比如:华为公司很大,有很多项目在做,但是一些次要的,或者非核心的项目,如果华为公司自己招兵买马的话,那么成本会很高,像员工的社保,公积金等等这些都要华为自己掏钱,这时候,华为公司就会想了,能不能把这部分次要的项目包出去,包给其他公司,交给别人去...

2019-09-14 22:20:24 1329

原创 解决Zabbix 4.2 图表字体显示为方块的方法

因Zabbix使用的DejaVuSan.ttf字体,不支持中文,导致中文出现乱码,它的位置为:/etc/alternatives/zabbix-web-font软连接指向/usr/share/fonts/dejavu/DejaVuSans.ttf: [root@serverfonts]#cd/etc/alternatives/[root@serveralternativ...

2019-07-29 20:33:59 2047

转载 看漫画就能学SQL,简直太cool了

对于SQl, 很多人学不会的原因是从一开始就没明白,学这东西能干啥,学会了能有什么用。甚至有些人不知道‘SQL’应该怎么读,以至于一开始兴致勃勃,但是学到一半放弃了。注意:‘sql’真的不能读成‘烧烤’、‘惜烤’、’撒扣’、’斯购‘,另外,’MYSQL’真的不能读成’卖烧烤’,’卖西裤‘,有学员问:那我卖什么,我回答说:你去死。如果你真的、实在是、绝对的看不懂英文的音标,那就暂且读’色儿扣...

2019-03-18 18:12:03 517 1

转载 (总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解

(总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下。一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术。具体的应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于1000万,用Ngin...

2019-03-14 20:05:57 166

转载 Metrics监控应用

Metrics监控应用阅读目录使用Metrics监控应用程序的性能 一 度量类型 二 度量数据的输出 三 总结回到目录使用Metrics监控应用程序的性能在编写应用程序的时候,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析。在很多时候,我们可能需要了解整个系统在当前,或者某一时刻运行的情况,比如当前系统中对...

2019-03-12 23:34:16 1349

转载 Word如何删除中英文混排中中文间的多余空格

如何快速批量删除word中多余的空格呢,尤其是中英文混排的文档,有时会有连续的多个空格,如何去掉中文中的空格,同时保留英语单词间的空格呢。今天就和朋友们说说去掉word中空格的简单好用的方法吧!1、选中需要去多个空格的文本段落,如果是对全文操作,则不需要选中。2、打开【查找和替换】对话框,在【替换】选项卡中,点击更多,勾选【使用通配符】:(一) 批量删掉汉字之间的半角空格...

2019-03-06 20:04:39 9405 1

原创 台湾/香港与大陆IT术语转换

台湾/香港 大陆萤幕 屏幕滑鼠 鼠标软体 软件印表机 打印机资讯 信息硬碟 硬盘程式 程序主记忆体 内存记忆体 内存记忆卡 内存卡智慧型 智能型软碟 软盘光碟 光盘伺服器 服务器资料库 数据库解除安装 卸载视窗 窗口资料接口档 套接字资料总管 资源管理器档案 文件硬体 硬件图示 图标系统资料库 注册表卷轴框 滚动栏卷轴栏 滚动栏桌上型电脑 台式...

2018-12-29 22:57:52 3255 1

原创 新书推荐 |《由浅入深PostgreSQL》

新书推荐 |《由浅入深PostgreSQL》彭煜玮 PostgreSQL中文社区 3天前 新书推荐《由浅入深PostgreSQL》 作者:[奥]汉斯·尤尔根·舍尔希 著   彭煜玮 译清华大学出版社出版日期: 2018年11月1日购买:京东、当当、天猫等      本书作者是具有18年PostgreSQL数据库经验的国外大牛。深入浅出讲解数据库12大核心...

2018-11-22 00:38:43 3824 1

转载 MySQL 5.7并行复制中并行的真正含义

 MySQL 5.7并行复制中并行的真正含义 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/joy0921/article/details/80130768MySQL 5.7并行复制初理解我们知道MySQL 5.7并行复制引入了两个值last_committed和sequence_number。last_committed表示...

2018-09-03 16:08:12 316

原创 Linux中fork()函数详解

linux中fork()函数详解一、fork入门知识一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来...

2018-08-12 04:42:38 98725 26

翻译 为什么CPU有多个缓存级别?

 为什么CPU有多个缓存级别?https://fgiesen.wordpress.com/2016/08/07/why-do-cpus-have-multiple-cache-levels/2016年8月7日 这是来自“jlforrest”的读者问题,似乎值得回答的问题不仅仅是一句话:我理解需要缓存,但我不明白为什么有多级缓存而不是只有一个更大的级别。换句话说,假设L1缓存...

2018-08-12 01:08:30 2956

转载 golang语言编译的二进制可执行文件为什么比 C 语言大

https://www.cnxct.com/why-golang-elf-binary-file-is-large-than-c/golang语言编译的二进制可执行文件为什么比 C 语言大 2017/09/21  CFC4N最近一位朋友问我“为什么同样的hello world 入门程序”为什么golang编译出来的二进制文件,比 C 大,而且大很多。我做了个测试,来分析这个问题。C 语...

2018-08-09 18:12:15 9080 5

转载 Go语言学习笔记(七)杀手锏 Goroutine + Channel

https://www.cnblogs.com/suoning/p/7237444.htmlGoroutineGo语言的主要的功能在于令人简易使用的并行设计,这个方法叫做Goroutine,通过Goroutine能够让你的程序以异步的方式运行,而不需要担心一个函数导致程序中断,因此Go语言也非常地适合网络服务。我们通过go让其中一个函数同步运行,如此就不需要等待该函数运行完后才能运行下...

2018-08-09 18:08:51 220

转载 总结golang之map

0x01 map基本操作// 1. 声明var m map[string]int // 2. 初始化,声明之后必须初始化才能使用// 向未初始化的map赋值引起 panic: assign to entry in nil map.m = make(map[string]int)m = map[string]int{}// 1&2. 声明并初始化m := make(m...

2018-08-09 18:04:47 387

转载 面试时,你被问到过 TCP/IP 协议吗?

面试时,你被问到过 TCP/IP 协议吗?2017年04月04日 13:43:24阅读数:26999前言:精通 TCP/IP,熟练使用 Socket 进行网路编程。看到这句话,有没有感到很熟悉呀?相信很多人在投递简历的时候都看到过这条要求,很多人会觉得我们在实际开发中一般用不到这些知识,所以对这些东西不屑一顾.但是笔者认为想要做出更好的 APP,那么对这些基础知识必须要有一定的了解,这样你才能考虑...

2018-06-30 19:03:02 435

转载 SQL Server 如何生成更改脚本

SQL Server 如何生成更改脚本您可以选择在使用表设计器时保存更改脚本。更改脚本是一个包含以后可以应用到数据库(通过在解决方案资源管理器中选择更改脚本并从快捷菜单上选择“运行”)的更改的文件。如果还没有准备好更新数据库,可以选择保存更改脚本。例如,您对表设计器中的表所做的更改可能与其他用户所做的更改有冲突,或者您当前可能没有更改数据库所需的安全权限。 注意 显示的对话框和菜单命令可能会与“帮...

2018-05-24 18:03:06 2941 3

转载 PostgreSQL 9X之巅(原书第2版)

新书备忘PostgreSQL 9X之巅(原书第2版)作者:[美] 艾博拉·艾哈迈德(Ibrar Ahmed) 格利高里·史密斯(Gregory Smith) 著译者:范翊 彭煜玮 唐成 等译丛书名:数据库技术丛书出版日期 :2018-04-27ISBN:978-7-111-59619-6定价:89.00元纸质书购买扩展信息图书简介图书特色图书前言专家评论上架指导封底文字作者简介译者序推荐序图书目录...

2018-05-12 14:23:24 1837

转载 ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

1.版本1)操作系统cat /etc/issuecat /etc/issueCentOS release 6.6 (Final)Kernel \r on an \mcat /proc/versioncat /proc/versionLinux version 2.6.32-504.el6.x86_64 ([email protected]) (gcc versio...

2018-05-04 21:05:54 2912

转载 C++多态的含义

C++多态的含义1、什么是多态?(1)通过继承同一个基类,产生了相关的不同的派生类,与基类中同名的成员函数在不同的派生类中会有不同的实现,也就是说:一个接口、多种方法。(2)多态是面向对象的重要技术之一,它是一种行为的封装,是同一个事物所表现出来的多种形态,简单地说就是:一个接口、多种形态。(3)那么问题来了,现在,在运行时使用同一个成员名来调用类对象的成员函数,会调用哪个对象的成员函数呢?这就是...

2018-04-15 08:18:01 797

转载 Linux-孤儿进程与僵尸进程[总结]

Linux-孤儿进程与僵尸进程[总结]1、前言  之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念  我们知道在unix/linux中,正常情况下,子进程是通过父进...

2018-02-27 17:42:51 256

转载 自己实现一个SQL解析引擎

自己实现一个SQL解析引擎功能:将用户输入的SQL语句序列转换为一个可执行的操作序列,并返回查询的结果集。 SQL的解析引擎包括查询编译与查询优化和查询的运行,主要包括3个步骤:查询分析:制定逻辑查询计划(优化相关)制定物理查询计划(优化相关)查询分析: 将SQL语句表示成某种有用的语法树.制定逻辑查询计划: 把语法树转换成一个关系代数表达式或者类似的结构,这个结构通常称作逻辑计划。制定物理查询计...

2018-02-21 02:49:49 9312 1

转载 以操作系统的角度述说线程与进程

什么是线程  什么是线程?线程与进程有什么关系?这是一个非常抽象的问题,也是一个特别广的话题,涉及到非常多的知识。我不能确保能把它讲得好,也不能确保讲的内容全部都正确。即使这样,我也希望尽可能地把它讲通俗一点,讲得明白一点,因为这是个一直困扰我很久的,扑朔迷离的知识领域,希望通过我的理解揭开它一层一层神秘的面纱。  任务调度  线程是什么?要理解这个概念,需要先了解一下

2018-02-05 18:52:47 198

转载 Python3 Python对象持久化(pickle / shelve)

本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/rozol/article/details/71081854以下代码以Python3.6.1为例 Less is more!pickle#coding=utf-8# pickledemo.py Pickle# 用于对Python对象进行序列化和反序列

2018-02-04 01:25:25 1084

转载 Python3 random(伪随机数 模块)

本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/71097183以下代码以Python3.6.1为例 Less is more!# coding=utf-8# randomdemo.py random伪随机数# 生成伪随机 整数 和 浮点数, 随机获取列表元素imp

2018-02-03 13:28:53 694

转载 Python3 copy(深和浅拷贝的区别)

本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/71156387以下代码以Python3.6.1为例 Less is more!#!/usr/bin/env python# coding=utf-8__author__ = 'Luzhuo'__date__ = '2017

2018-02-03 13:26:44 469

转载 Python3 装饰器

本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/71189345以下代码以Python3.6.1为例 Less is more! 装饰器: 本质是函数, 用于装饰其他函数, 附加一些本身所没有的功能#!/usr/bin/env python# coding=utf-8

2018-02-03 13:23:49 175

转载 Python3 新式类 和 经典类

本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/72553736以下代码以Python3.6.1为例 Less is more!socket#!/usr/bin/env python# coding=utf-8__author__ = 'Luzhuo

2018-02-03 00:43:38 944

转载 Python3 sys(解释器 模块)

本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/72553736以下代码以Python3.6.1为例 Less is more!socket#!/usr/bin/env python# coding=utf-8__author__ = 'Luzhuo

2018-02-03 00:38:20 219

转载 Python3 网络套接字(socket / socketserver)

本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/72553736以下代码以Python3.6.1为例 Less is more!socket#!/usr/bin/env python# coding=utf-8__author__ = 'Luzhuo

2018-02-03 00:33:00 457

转载 Python3 加密(hashlib / hmac)

本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/72566661以下代码以Python3.6.1为例 Less is more! hashlib : 不可逆加密 hmac : 不可逆键值对方式加密 base64: 可逆加密hashlib#!/

2018-02-03 00:26:12 496

转载 Python3 shutil(高级文件操作 模块)

本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/72672698以下代码以Python3.6.1为例 Less is more! 高级文件操作(拷贝 / 移动 / 压缩 / 解压缩)#!/usr/bin/env python# coding=utf-8__a

2018-02-03 00:21:53 394

转载 Python3 压缩与解压缩(zlib / gzip / bz2 / lzma / zipfile / tarfile)

本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/72672703以下代码以Python3.6.1为例 Less is more! 文件的归档 (各种格式的压缩 / 解压缩) 实际使用中仅需要使用shutil模块的压缩和解压函数就可以了, 如果想尝试其他功能, zipfile(暴

2018-02-03 00:18:56 5571

转载 Python3 网络传输数据的处理(json / xml / base64)

本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/72760548以下代码以Python3.6.1为例 Less is more!json#!/usr/bin/env python# coding=utf-8__author__ = 'Luzhuo'__date__

2018-02-03 00:16:04 752

转载 Python中如何修改字符串的值

Python中列表list中的值是可修改的,而元组和字符串的值是不可修改的。看下面的示例:string = 'abcdafg'string[4] = 'e'print(string)输出结果: string[4] = 'e'TypeError: 'str' object does not support item assignment 但在实际应用中,经常需要对字符串的值进行

2018-02-02 18:49:28 770

转载 Python 各种库

这又是一个 Awesome XXX 系列的资源整理,由 vinta 发起和维护。内容包括:Web框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。伯乐在线已在 GitHub 上发起「Python 资源大全中文版」的整理。欢迎扩散、欢迎加入。GitHub - jobbole/awesome-python-cn:

2018-02-02 18:42:31 13001

转载 python 之路,致那些年,我们依然没搞明白的编码

python 之路,致那些年,我们依然没搞明白的编码本节内容  编码回顾  编码转换  Python的bytes类型 编码回顾在备编码相关的课件时,在知乎上看到一段关于Python编码的回答这哥们的这段话说的太对了,搞Python不把编码彻底搞明白,总有一天它会猝不及防坑你一把。不过感觉这哥们的答案并没把编码问题写明白,所以只好亲自动笔了

2018-02-02 18:29:51 289

转载 Python之路,Day2 - Python基础2

Python之路,Day2 - Python基础2本节内容列表、元组操作字符串操作字典操作集合操作文件操作字符编码与转码 1. 列表、元组操作列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作定义列表1names = ['Alex',"Tenglan",

2018-02-02 18:22:11 278

操作系统原理与应用(第4版).[美]Michael Palmer(带详细书签).pdf

1. 本书中的每一章都以在该章中要掌握的概念的详细列表开头,这个列表提供了对该章内容的快速参考,以及一种有用的学习帮助。 2. 大量的操作系统屏幕和概念的插图通过可视化地展示常见的安装步骤、理论和概念,从而给你提供帮助。 3. 每一章都包含加框的文本以及来自作者的广泛经验的示例,它们通过介绍现实的情况给本书添加了一些色调。 4. 章末评估以一组复习题开始,它们强化了每一章中所介绍的思想。 5. 本书的目标是给你提供实用的知识和技能,以便安装和管理桌面以及服务器操作系统,从而把它们用于个人和商业目的。为此,除了理论解释之外,每一章还提供了大量的“动手项目”,旨在给你提供真实的实施体验。 6. 案例项目。每一章末尾都提供了一个由多部分组成的案例项目。这些广泛的案例允许通过真实的操作系统支持和管理方案实施在各章中学到的技能和知识。 第1章 操作系统理论 1 1.1 操作系统简介 1 1.2 操作系统简史 3 1.3 了解操作系统的工作原理 9 1.3.1 内核 9 1.3.2 资源管理器 10 1.3.3 设备驱动程序和操作系统 11 1.3.4 应用软件的作用 12 1.3.5 BIOS的作用 13 1.3.6 操作系统元素小结 15 1.4 操作系统的类型 16 1.4.1 分时系统 18 1.4.2 实时系统 19 1.4.3 多用户系统 19 1.5 单任务与多任务 21 1.6 单用户与多用户操作系统 24 1.7 当前的操作系统 25 1.8 本章小结 26 1.9 关键术语 26 1.10 复习题 29 1.11 动手项目 31 1.11.1 动手项目1-1 32 1.11.2 动手项目1-2 33 1.11.3 动手项目1-3 34 1.11.4 动手项目1-4 35 1.11.5 动手项目1-5 35 1.11.6 动手项目1-6 37 1.11.7 动手项目1-7 38 1.11.8 动手项目1-8 39 1.11.9 动手项目1-9 40 1.11.10 动手项目1-10 41 1.11.11 动手项目1-11 42 1.11.12 动手项目1-12 43 1.11.13 动手项目1-13 44 1.11.14 动手项目1-14 45 1.12 案例项目 46 1.12.1 案例项目1-1:基本的操作系统功能 46 1.12.2 案例项目1-2:设备驱动程序 46 1.12.3 案例项目1-3:选择新的服务器 46 1.12.4 案例项目1-4:选择新的桌面系统 46 1.12.5 案例项目1-5:新发布的操作系统的问题 46 第2章 流行的操作系统 47 2.1 早期的Microsoft操作系统 47 2.1.1 MS-DOS和PC DOS 47 2.1.2 Windows 3.x 47 2.1.3 Windows 95 48 2.1.4 Windows 98/Windows Me 49 2.1.5 Windows NT 51 2.1.6 Windows 2000 51 2.1.7 Windows 2000 Server和Windows 2000 Professional 53 2.1.8 Windows 2000 Server、Windows 2000 Advanced Server和Windows 2000 Datacenter Server 53 2.2 当前的桌面和服务器操作系统 54 2.2.1 Windows XP 54 2.2.2 Windows Server 2003 58 2.2.3 Windows Server 2003 R2 58 2.2.4 Windows Vista 67 2.2.5 Windows Server 2008 77 2.2.6 Windows Server 2008 R2 79 2.2.7 Windows 7 82 2.2.8 UNIX System Release 4 86 2.2.9 Mac OS 90 2.3 本章小结 94 2.4 关键术语 94 2.5 复习题 97 2.6 动手项目 99 2.6.1 动手项目2-1 99 2.6.2 动手项目2-2 102 2.6.3 动手项目2-3 103 2.6.4 动手项目2-4 104 2.6.5 动手项目2-5 105 2.6.6 动手项目2-6 105 2.6.7 动手项目2-7 106 2.6.8 动手项目2-8 108 2.6.9 动手项目2-9 109 2.7 案例项目 110 2.7.1 案例项目2-1:会计部升级 110 2.7.2 案例项目2-2:遗留的开账单系统 110 2.7.3 案例项目2-3:用于市场部的新计算机 111 2.7.4 案例项目2-4:总裁的问题 111 2.7.5 案例项目2-5:首席财务官的考虑 111 2.7.6 案例项目2-6:服务器升级 111 第3章 操作系统的硬件组件 112 3.1 理解CPU 112 3.1.1 设计类型 113 3.1.2 速度 116 3.1.3 缓存 116 3.1.4 地址总线 117 3.1.5 数据总线 117 3.1.6 控制总线 118 3.1.7 CPU调度 118 3.2 流行的PC处理器 118 3.2.1 Intel处理器 118 3.2.2 AMD处理器 121 3.2.3 其他处理器 122 3.3 本章小结 123 3.4 关键术语 123 3.5 复习题 125 3.6 动手项目 127 3.6.1 动手项目3-1 127 3.6.2 动手项目3-2 127 3.6.3 动手项目3-3 130 3.6.4 动手项目3-4 131 3.6.5 动手项目3-5 131 3.6.6 动手项目3-6 132 3.7 案例项目 134 3.7.1 案例项目3-1:服务器升级 134 3.7.2 案例项目3-2:桌面计算 134 3.7.3 案例项目3-3:硬件过热 134 第4章 文件系统 135 4.1 了解文件系统的功能 135 4.1.1 设计目录结构 137 4.1.2 磁盘存储的基础知识 141 4.1.3 块分配 141 4.1.4 分区 142 4.1.5 格式化 145 4.2 Windows文件系统 148 4.2.1 FAT16和扩展FAT16 148 4.2.2 FAT32 149 4.2.3 FAT64 150 4.2.4 NTFS 151 4.2.5 CDFS和UDF 157 4.3 UNIX文件系统 158 4.4 Macintosh文件系统 165 4.5 本章小结 170 4.6 关键术语 171 4.7 复习题 175 4.8 动手项目 178 4.8.1 动手项目4-1 178 4.8.2 动手项目4-2 180 4.8.3 动手项目4-3 181 4.8.4 动手项目4-4 181 4.8.5 动手项目4-5 183 4.8.6 动手项目4-6 184 4.8.7 动手项目4-7 185 4.8.8 动手项目4-8 187 4.8.9 动手项目4-9 189 4.8.10 动手项目4-10 189 4.8.11 动手项目4-11 190 4.8.12 动手项目4-12 191 4.9 案例项目 192 4.9.1 案例项目4-1:培训新任副总裁使用Mac OS X文件夹 192 4.9.2 案例项目4-2:确定是否为DVD/CD-ROM驱动器挂接了文件系统 193 4.9.3 案例项目4-3:为Windows 7选择一种文件系统 193 4.9.4 案例项目4-4:Windows Server 2008文件系统的优点 193 4.9.5 案例项目4-5:修复文件问题 194 第5章 安装和升级操作系统 195 5.1 安装操作系统简介 195 5.2 为安装做好准备 197 5.2.1 检查硬件 197 5.2.2 检查驱动程序 199 5.2.3 确保硬件兼容性 200 5.2.4 腾出时间做事 200 5.3 迁移到新的操作系统 200 5.3.1 决定是执行升级还是全新安装 201 5.3.2 为升级/迁移做准备 201 5.3.3 在迁移到新的操作系统之前制作备份 205 5.3.4 执行迁移测试 207 5.3.5 培训 209 5.4 安装和升级Windows XP 210 5.4.1 硬件需求 210 5.4.2 安装Windows XP 210 5.4.3 升级到Windows XP 211 5.5 安装和更新Windows Vista 213 5.5.1 硬件需求 213 5.5.2 安装Windows Vista 214 5.5.3 升级到Windows Vista 214 5.5.4 安装和升级Windows 7 215 5.5.5 硬件需求 216 5.5.6 安装Windows 7 216 5.5.7 升级Windows 7 217 5.6 安装和升级Windows Server 2003 218 5.6.1 硬件需求 219 5.6.2 安装Windows Server 2003 219 5.6.3 升级到Windows Server 2003 219 5.6.4 升级到Windows Server 2003 R2 220 5.7 安装和升级Windows Server 2008 222 5.7.1 硬件需求 223 5.7.2 安装Windows Server 2008 223 5.7.3 升级Windows Server 2008 224 5.8 安装和升级Windows Server 2008 R2 225 5.8.1 硬件需求 225 5.8.2 安装Windows Server 2008 R2 225 5.8.3 升级Windows Server 2008 R2 227 5.9 安装和升级Linux 227 5.9.1 硬件需求 227 5.9.2 安装Linux 227 5.9.3 升级Linux 228 5.10 安装和升级Mac OS X 228 5.10.1 硬件需求 229 5.10.2 安装Mac OS X 230 5.10.3 升级到Mac OS X Snow Leopard 231 5.11 操作系统的定期更新 232 5.11.1 Windows更新 232 5.11.2 Linux更新 232 5.11.3 Mac更新 232 5.12 本章小结 232 5.13 关键术语 233 5.14 复习题 235 5.15 动手项目 237 5.15.1 动手项目5-1 238 5.15.2 动手项目5-2 238 5.15.3 动手项目5-3 240 5.15.4 动手项目5-4 242 5.15.5 动手项目5-5 245 5.15.6 动手项目5-6 251 5.15.7 动手项目5-7 255 5.15.8 动手项目5-8 257 5.15.9 动手项目5-9 261 5.15.10 动手项目5-10 262 5.16 案例项目 264 5.16.1 案例项目5-1:确定准备步骤 265 5.16.2 案例项目5-2:决定是否进行升级 265 5.16.3 案例项目5-3:安装Windows 7 265 5.16.4 案例项目5-4:转向Windows Server 2008 R2 265 5.16.5 案例项目5-5:升级Mac OS X Tiger 265 第6章 配置输入和输出设备 266 6.1 操作系统和设备:概述 266 6.2 使用设备驱动程序 267 6.2.1 制造商的驱动程序安装 269 6.2.2 Windows XP/Windows Server 2003/Windows Vista/Windows Server 2008的驱动程序安装 269 6.2.3 UNIX/Linux驱动程序安装 275 6.2.4 Mac OS X驱动程序安装 276 6.3 标准的输入设备 276 6.3.1 鼠标和键盘驱动程序 277 6.3.2 触摸输入设备的驱动程序 278 6.4 其他输入设备 279 6.4.1 数字板 279 6.4.2 扫描仪 280 6.4.3 游戏杆、游戏手柄和其他的控制器 281 6.4.4 数字声音输入 282 6.4.5 数字图片和视频输入输出 282 6.4.6 1394技术 283 6.5 打印机 283 6.5.1 打印机类型 283 6.5.2 打印机连接 285 6.5.3 安装打印机 285 6.6 显示适配器 288 6.6.1 基本的显示适配器技术 289 6.6.2 安装显示适配器 290 6.7 声卡 290 6.8 其他输出设备 290 6.9 安装电路板 291 6.10 本章小结 292 6.11 关键术语 292 6.12 复习题 294 6.13 动手项目 297 6.13.1 动手项目6-1 297 6.13.2 动手项目6-2 301 6.13.3 动手项目6-3 303 6.13.4 动手项目6-4 304 6.13.5 动手项目6-5 304 6.13.6 动手项目6-6 305 6.13.7 动手项目6-7 307 6.13.8 动手项目6-8 308 6.13.9 动手项目6-9 308 6.13.10 动手项目6-10 310 6.13.11 动手项目6-11 311 6.14 案例项目 312 6.14.1 案例项目6-1:在Windows 7中安装打印机 312 6.14.2 案例项目6-2:解决Windows Vista中的硬件安装冲突 313 6.14.3 案例项目6-3:在Fedora 13 Linux中为查找故障检查打印机状态 313 6.14.4 案例项目6-4:在Mac OS X中重新安装打印机 313 6.14.5 案例项目6-5:在Windows Server 2008 R2中安装传真机 313 第7章 使用和配置存储设备 314 7.1 磁盘存储选项 314 7.1.1 硬盘驱动器接口 315 7.1.2 基本磁盘和动态磁盘 318 7.1.3 固态驱动器 319 7.1.4 RAID阵列 319 7.2 CD、DVD和蓝光光盘 320 7.2.1 光盘技术 320 7.2.2 数字视频光盘技术 322 7.2.3 可刻录和可重写DVD 322 7.2.4 DVD/CD-ROM驱动器 323 7.2.5 蓝光驱动器 323 7.2.6 连接驱动器 324 7.3 网络存储和云存储 324 7.3.1 存储区域网络和网络附加存储 324 7.3.2 云存储 326 7.4 可移动磁盘 326 7.5 USB闪存驱动器 327 7.6 磁带和磁带驱动器 328 7.6.1 DAT驱动器 328 7.6.2 DLT和SDLT驱动器 329 7.6.3 AIT和S-AIT驱动器 329 7.6.4 LTO驱动器 329 7.7 存储管理工具 329 7.7.1 Windows存储管理工具 330 7.7.2 UNIX/Linux中的磁盘管理工具 331 7.7.3 Mac OS X Disk Utility 333 7.8 本章小结 334 7.9 关键术语 334 7.10 复习题 337 7.11 动手项目 339 7.11.1 动手项目7-1 340 7.11.2 动手项目7-2 341 7.11.3 动手项目7-3 341 7.11.4 动手项目7-4 343 7.11.5 动手项目7-5 344 7.11.6 动手项目7-6 344 7.11.7 动手项目7-7 345 7.11.8 动手项目7-8 346 7.11.9 动手项目7-9 347 7.11.10 动手项目7-10 348 7.11.11 动手项目7-11 349 7.11.12 动手项目7-12 349 7.12 案例项目 350 7.12.1 案例项目7-1:转换为动态磁盘 350 7.12.2 案例项目7-2:Mac OS X Snow Leopard硬盘驱动器上损坏的区域 350 7.12.3 案例项目7-3:存档财务数据 350 7.12.4 案例项目7-4:通过网络存储数据 351 7.12.5 案例项目7-5:在Linux中验证挂接的文件系统 351 第8章 调制解调器和其他通信设备 352 8.1 模拟调制解调器架构 352 8.1.1 模拟调制解调器硬件基础 353 8.1.2 基于软件的调制解调器 355 8.1.3 用于模拟调制解调器的海斯AT命令集 355 8.2 数字调制解调器 356 8.2.1 无线 356 8.2.2 ISDN 357 8.2.3 电缆调制解调器 357 8.2.4 DSL调制解调器 359 8.2.5 卫星 361 8.3 数据通信技术 362 8.3.1 软件流量控制 362 8.3.2 硬件流量控制 362 8.3.3 纠错 363 8.3.4 数据压缩 364 8.4 调制解调器和操作系统 365 8.4.1 Windows配置 365 8.4.2 UNIX/Linux配置 366 8.4.3 Mac OS X配置 368 8.5 本章小结 370 8.6 关键术语 371 8.7 复习题 374 8.8 动手项目 377 8.8.1 动手项目8-1 377 8.8.2 动手项目8-2 379 8.8.3 动手项目8-3 380 8.8.4 动手项目8-4 381 8.8.5 动手项目8-5 384 8.8.6 动手项目8-6 385 8.8.7 动手项目8-7 385 8.8.8 动手项目8-8 387 8.9 案例项目 387 8.9.1 案例项目8-1:比较ADSL与电缆调制解调器替代技术 387 8.9.2 案例项目8-2:在Red Hat Enterprise Linux中验证串行端口速度 387 8.9.3 案例项目8-3:寻找边远地区研究团队的通信替代技术 388 8.9.4 案例项目8-4:为Mac OS X计算机设置调制解调器 388 8.9.5 案例项目8-5:处理远程通信线路问题 388 第9章 网络连通性 389 9.1 联网基础 389 9.1.1 客户和服务器操作系统 390 9.1.2 局域网和广域网 392 9.1.3 网络拓扑结构 392 9.1.4 联网硬件 393 9.1.5 分组、帧和信元 396 9.2 联网协议 397 9.2.1 传输协议 398 9.2.2 通信协议 400 9.2.3 在操作系统中实现通信协议 404 9.3 在同一个网络上集成不同的操作系统 407 9.4 本章小结 407 9.5 关键术语 408 9.6 复习题 411 9.7 动手项目 413 9.7.1 动手项目9-1 414 9.7.2 动手项目9-2 414 9.7.3 动手项目9-3 416 9.7.4 动手项目9-4 416 9.7.5 动手项目9-5 417 9.7.6 动手项目9-6 418 9.7.7 动手项目9-7 420 9.7.8 动手项目9-8 421 9.7.9 动手项目9-9 422 9.8 案例项目 423 9.8.1 案例项目9-1:网络的类型 423 9.8.2 案例项目9-2:设备 423 9.8.3 案例项目9-3:实现服务器的优点 424 9.8.4 协议功能 424 第10章 网络上的资源共享 425 10.1 共享磁盘、文件和打印机 425 10.2 保障共享资源的安全 426 10.3 通过服务器网络操作系统共享磁盘和文件 427 10.3.1 Windows Server 2003/Windows Server 2003 R2和Windows Server2008/Windows Server 2008 R2 427 10.3.2 UNIX和Linux 438 10.3.3 Mac OS X Server 443 10.4 通过客户网络操作系统访问和共享磁盘与文件 444 10.4.1 在Windows XP、Windows Server 2003/Windows Server 2003 R2中访问和共享资源 444 10.4.2 在Windows Vista、Windows 7和Windows Server 2008/Windows Server 2008 R2中访问和共享资源 444 10.4.3 通过UNIX/Linux和专门的实用程序访问共享资源 446 10.4.4 通过Mac OS访问和共享资源 446 10.5 共享打印设备 448 10.5.1 Windows系统 448 10.5.2 UNIX/Linux系统 450 10.5.3 Mac OS X系统 451 10.6 网络和Internet资源服务器 451 10.7 本章小结 452 10.8 关键术语 453 10.9 复习题 454 10.10 动手项目 458 10.10.1 动手项目10-1 458 10.10.2 动手项目10-2 459 10.10.3 动手项目10-3 461 10.10.4 动手项目10-4 463 10.10.5 动手项目10-5 464 10.10.6 动手项目10-6 466 10.10.7 动手项目10-7 467 10.10.8 动手项目10-8 467 10.10.9 动手项目10-9 468 10.10.10 动手项目10-10 469 10.10.11 动手项目10-11 469 10.10.12 动手项目10-12 471 10.11 案例项目 471 10.11.1 案例项目10-1:考虑使用Active Directory的优点 472 10.11.2 案例项目10-2:开发通过Windows Server 2008服务器上的组管理用户账户的策略 472 10.11.3 案例项目10-3:Windows Server 2008 R2的用户账户安全性 472 10.11.4 案例项目10-4:重新考虑Red Hat Enterprise Linux用户的根账户访问权限 472 10.11.5 案例项目10-5:在Mac OS X中启用共享 472 第11章 标准操作和维护程序 473 11.1 文件系统维护 473 11.2 查找和删除文件 479 11.2.1 在Windows中删除临时文件 479 11.2.2 UNIX/Linux 482 11.2.3 Mac OS X 486 11.3 维护磁盘 486 11.3.1 整理磁盘碎片 487 11.3.2 移动磁盘文件以分散负载 489 11.3.3 使用磁盘实用程序修复损坏的文件 490 11.3.4 部署RAID技术 492 11.4 制作备份 493 11.5 优化软件安装 495 11.6 对操作系统进行调优 497 11.6.1 对虚拟内存进行调优 497 11.6.2 安装操作系统更新和补丁 499 11.6.3 为网络通信进行调优 500 11.6.4 测试网络连通性 500 11.7 本章小结 501 11.8 关键术语 502 11.9 复习题 503 11.10 动手项目 506 11.10.1 动手项目11-1 506 11.10.2 动手项目11-2 506 11.10.3 动手项目11-3 508 11.10.4 动手项目11-4 508 11.10.5 动手项目11-5 509 11.10.6 动手项目11-6 510 11.10.7 动手项目11-7 512 11.10.8 动手项目11-8 512 11.10.9 动手项目11-9 513 11.10.10 动手项目11-10 515 11.10.11 动手项目11-11 516 11.11 案例项目 518 11.11.1 案例项目11-1:讨论额外的存储选项 518 11.11.2 案例项目11-2:修复磁盘和文件问题 518 11.11.3 案例项目11-3:备份数据 519 11.11.4 案例项目11-4:概括Mac OS X上的维护任务 519 11.11.5 案例项目11-5:调整分页文件大小 519 附录A 操作系统的命令行命令 520 A.1 Windows命令提示符命令 520 A.2 Linux命令 524 A.3 Mac OS X命令 527 附录B 结合使用本书与Fedora 530 B.1 什么是Fedora 530 B.2 如何使用Fedora的Live Media分发版 530 B.3 如何把Fedora 13安装到硬盘驱动器上 532 B.3.1 为硬盘驱动器安装做准备 533 B.3.2 把Fedora安装到硬盘驱动器上 533

2019-03-29

Web安全之机器学习入门.刘焱(带书签文字版).pdf

近几年,人工智能无疑成为人们口中的热点话题,先是谷歌的AlphaGo,后有百度的度秘、无人车,微软必应搜索推出的小冰。这一系列人工智能产品的推陈出新,令人眼花缭乱,一时间给人的感觉是人工智能遍地开花。无论人们接受还是不接受,人工智能都在迅速渗透各行各业。网络安全相比之下是一个传统行业,基于规则以及黑白名单的检测技术已经发展到了一定的瓶颈,而利益驱动的黑产团伙,其技术的发展已经远远超乎我们的想象。如何借助人工智能的力量,提升安全行业的整体检测与防护能力,成为各大安全厂商研究的课题。在国内安全行业, BAT以及大量新兴的创业公司先后进入企业安全领域,他们凭借着自身数据搜集、处理、积累以及人工智能方面的优势,正在逐渐改变着整个安全行业。安全产品的形态也从硬件盒子逐步走向混合模式以及云端SaaS服务,安全技术从重防御逐步走向数据分析以及智能驱动。传统安全厂商也凭借其强大的安全人才储备,迅速推进人工智能在安全产品的落地。 我在网络安全这个行业搬了好几年砖,前五年做大型互联网公司的企业安全建设,从准入系统到WAF、SIEM、IPS等,基本都开发或者使用过,最近三年一直负责云安全产品,从抗D、WAF产品到、SIEM、入侵检测等,使用的技术从规则、黑白名单、模型、沙箱再到机器学习,从单机的OSSIM到Hadoop、Storm、Spark、ELK,也算目睹了安全技术或者更准确地说是数据分析处理技术的迅猛发展。我深深感到,使用人工智能技术改变这个行业不是我们的选择,而是必经之路。我在真正意义上接触机器学习是2014年年底,当时带领了一个很小的团队尝试使用机器学习算法解决安全问题,磕磕绊绊一直走到现在,变成几十人的一个产品团队。 本书是我机器学习三部曲的第一部,主要以机器学习常见算法为主线,以生活中的例子和具体安全场景介绍机器学习常见算法,定位为机器学习入门书籍,便于大家可以快速上手。全部代码都能在普通PC上运行。第二部将重点介绍深度学习,并以具体的十个案例介绍机器学习的应用,主要面向具有一定机器学习基础或致力于使用机器学习解决工作中问题的读者,全书的重点集中在问题的解决而不是算法的介绍。由于深度学习通常计算量已经超过了PC的能力,部分代码需要在服务器甚至GPU上运行,不过这不影响大家的阅读与学习。第三部将重点介绍强化学习和对抗网络,并以若干虚构安全产品或者项目介绍如何让机器真正具备AlphaGo级别的智能。 本书的第1章概括介绍了机器学习的发展以及互联网目前的安全形势。第2章介绍了如何打造自己的机器学习工具箱。第3章概括介绍机器学习的基本概念。第4章介绍Web安全的基础知识。第5章到第13章介绍浅层机器学习算法,包括常见的K近邻、决策树、朴素贝叶斯、逻辑回归、支持向量机、K-Means、FP-growth、Apriori、隐式马尔可夫、有向图。第14章到第17章介绍神经网络以及深度学习中常用的递归神经网络和卷积神经网络。每章都会以生活中的例子开头,让读者有一个感性的认识,然后简短介绍基础知识,最后以安全领域的2~3个例子讲解如何使用该算法解决问题。全书定位是能让更多的安全爱好者以及信息安全从业者了解机器学习,动手使用简单的机器学习算法解决实际问题。在写作中尽量避免生硬的说教,能用文字描述的尽量不用冷冰冰的公式,能用图和代码说明的尽量不用多余的文字。正如霍金所言“多写1个公式,少一半读者”,希望反之亦然。 机器学习应用于安全领域遇到的最大问题就是缺乏大量的黑样本,即所谓的攻击样本,尤其相对于大量的正常业务访问,攻击行为尤其是成功的攻击行为是非常少的,这就给机器学习带来了很大挑战。本书很少对不同算法进行横向比较,也是因为确实在不同场景下不同算法表现差别很大,很难说深度学习就一定比朴素贝叶斯好,也很难说支持向量机就比不过卷积神经网络,拿某个具体场景进行横向比较意义不大,毕竟选择算法不像购买SUV,可以拿几十个参数评头论足,最后还是需要大家结合实际问题去选择。 这里我要感谢我的家人对我的支持,本来工作就很忙,没有太多时间处理家务,写书以后更是花费了我大量的休息时间,我的妻子无条件承担起了全部家务,尤其是照料孩子等繁杂事务。我很感谢我的女儿,写书这段时间几乎没有时间陪她玩,她也很懂事地自己玩,我想用这本书作为她的生日礼物送给她。我还要感谢吴怡编辑对我的支持和鼓励,让我可以坚持把这本书写完。最后还要感谢各位业内好友尤其是我boss对我的支持,排名不分先后:马杰@百度安全、冯景辉@百度安全、林晓东@百度基础架构、黄颖@百度IT、李振宇@百度AI、Lenx@百度安全、黄正@百度安全、程岩@百度云、郝轶@百度云、云鹏@百度无人车、赵林林@微步在线、张宇平@数盟、谢忱@Freebuf、李新@Freebuf、李琦@清华、徐恪@清华、王宇@蚂蚁金服、王珉然@蚂蚁金服、王龙@蚂蚁金服、周涛@启明星辰、姚志武@借贷宝、刘静@安天、刘袁君@医渡云、廖威@易宝支付、尹毅@sobug、宋文宽@联想、团长@宜人贷、齐鲁@搜狐安全、吴圣@58安全、康宇@新浪安全、幻泉@i春秋、雅驰@i春秋、王庆双@i春秋、张亚同@i春秋、王禾@微软、李臻@paloalto、西瓜@四叶草、郑伟@四叶草、朱利军@四叶草、土夫子@XSRC、英雄马@乐视云、sbilly@360、侯曼@360、高磊@滴滴、高磊@爱加密、高渐离@华为、刘洪善@华为云、宋柏林@一亩田、张昊@一亩田、张开@安恒、李硕@智联、阿杜@优信拍、李斌@房多多、李程@搜狗、Tony@京东安全、简单@京东安全、姚聪@face+、李鸣雷@金山云,最后我还要感谢我的亲密战友陈燕、康亮亮、蔡奇、哲超、新宇、子奇、月升、王磊、碳基体、刘璇、钱华钩、刘超、王胄、吴梅、冯侦探、冯永校。 本书面向信息安全从业人员、高等院校计算机相关专业学生以及信息安全爱好者,机器学习爱好者,对于想了解人工智能的CTO、运维总监、架构师同样也是一本不错的科普书籍。当读者在工作学习中遇到问题时可以想起本书中提到的一两种算法,那么我觉得就达到效果了,如果可以让读者像使用printf一样使用SVM、朴素贝叶斯等算法,那么这本书就相当成功了。 我平时在FreeBuf专栏以及i春秋分享企业安全建设以及人工智能相关经验与最新话题,同时也运营我的微信公众号“兜哥带你学安全”,欢迎大家关注并在线交流。 本书使用的代码和数据均在GitHub上发布,地址为:https://github.com/duoergun0729/1book,代码层面任何疑问可以在GitHub上直接反馈。 在线试读 前往豆瓣阅读试读本书 目录 · · · · · · 对本书的赞誉 序一 序二 序三 前言 第1章 通向智能安全的旅程 1 1.1 人工智能、机器学习与深度学习 1 1.2 人工智能的发展 2 1.3 国内外网络安全形势 3 1.4 人工智能在安全领域的应用 5 1.5 算法和数据的辩证关系 9 1.6 本章小结 9 参考资源 10 第2章 打造机器学习工具箱 11 2.1 Python在机器学习领域的优势 11 2.1.1 NumPy 11 2.1.2 SciPy 15 2.1.3 NLTK 16 2.1.4 Scikit-Learn 17 2.2 TensorFlow简介与环境搭建 18 2.3 本章小结 19 参考资源 20 第3章 机器学习概述 21 3.1 机器学习基本概念 21 3.2 数据集 22 3.2.1 KDD 99数据 22 3.2.2 HTTP DATASET CSIC 2010 26 3.2.3 SEA数据集 26 3.2.4 ADFA-LD数据集 27 3.2.5 Alexa域名数据 29 3.2.6 Scikit-Learn数据集 29 3.2.7 MNIST数据集 30 3.2.8 Movie Review Data 31 3.2.9 SpamBase数据集 32 3.2.10 Enron数据集 33 3.3 特征提取 35 3.3.1 数字型特征提取 35 3.3.2 文本型特征提取 36 3.3.3 数据读取 37 3.4 效果验证 38 3.5 本章小结 40 参考资源 40 第4章 Web安全基础 41 4.1 XSS攻击概述 41 4.1.1 XSS的分类 43 4.1.2 XSS特殊攻击方式 48 4.1.3 XSS平台简介 50 4.1.4 近年典型XSS攻击事件分析 51 4.2 SQL注入概述 53 4.2.1 常见SQL注入攻击 54 4.2.2 常见SQL注入攻击载荷 55 4.2.3 SQL常见工具 56 4.2.4 近年典型SQL注入事件分析 60 4.3 WebShell概述 63 4.3.1 WebShell功能 64 4.3.2 常见WebShell 64 4.4 僵尸网络概述 67 4.4.1 僵尸网络的危害 68 4.4.2 近年典型僵尸网络攻击事件分析 69 4.5 本章小结 72 参考资源 72 第5章 K近邻算法 74 5.1 K近邻算法概述 74 5.2 示例:hello world!K近邻 75 5.3 示例:使用K近邻算法检测异常操作(一) 76 5.4 示例:使用K近邻算法检测异常操作(二) 80 5.5 示例:使用K近邻算法检测Rootkit 81 5.6 示例:使用K近邻算法检测WebShell 83 5.7 本章小结 85 参考资源 86 第6章 决策树与随机森林算法 87 6.1 决策树算法概述 87 6.2 示例:hello world!决策树 88 6.3 示例:使用决策树算法检测POP3暴力破解 89 6.4 示例:使用决策树算法检测FTP暴力破解 91 6.5 随机森林算法概述 93 6.6 示例:hello world!随机森林 93 6.7 示例:使用随机森林算法检测FTP暴力破解 95 6.8 本章小结 96 参考资源 96 第7章 朴素贝叶斯算法 97 7.1 朴素贝叶斯算法概述 97 7.2 示例:hello world!朴素贝叶斯 98 7.3 示例:检测异常操作 99 7.4 示例:检测WebShell(一) 100 7.5 示例:检测WebShell(二) 102 7.6 示例:检测DGA域名 103 7.7 示例:检测针对Apache的DDoS攻击 104 7.8 示例:识别验证码 107 7.9 本章小结 108 参考资源 108 第8章 逻辑回归算法 109 8.1 逻辑回归算法概述 109 8.2 示例:hello world!逻辑回归 110 8.3 示例:使用逻辑回归算法检测Java溢出攻击 111 8.4 示例:识别验证码 113 8.5 本章小结 114 参考资源 114 第9章 支持向量机算法 115 9.1 支持向量机算法概述 115 9.2 示例:hello world!支持向量机 118 9.3 示例:使用支持向量机算法识别XSS 120 9.4 示例:使用支持向量机算法区分僵尸网络DGA家族 124 9.4.1 数据搜集和数据清洗 124 9.4.2 特征化 125 9.4.3 模型验证 129 9.5 本章小结 130 参考资源 130 第10章 K-Means与DBSCAN算法 131 10.1 K-Means算法概述 131 10.2 示例:hello world!K-Means 132 10.3 示例:使用K-Means算法检测DGA域名 133 10.4 DBSCAN算法概述 135 10.5 示例:hello world!DBSCAN 135 10.6 本章小结 137 参考资源 137 第11章 Apriori与FP-growth算法 138 11.1 Apriori算法概述 138 11.2 示例:hello world!Apriori 140 11.3 示例:使用Apriori算法挖掘XSS相关参数 141 11.4 FP-growth算法概述 143 11.5 示例:hello world!FP-growth 144 11.6 示例:使用FP-growth算法挖掘疑似僵尸主机 145 11.7 本章小结 146 参考资源 146 第12章 隐式马尔可夫算法 147 12.1 隐式马尔可夫算法概述 147 12.2 hello world! 隐式马尔可夫 148 12.3 示例:使用隐式马尔可夫算法识别XSS攻击(一) 150 12.4 示例:使用隐式马尔可夫算法识别XSS攻击(二) 153 12.5 示例:使用隐式马尔可夫算法识别DGA域名 159 12.6 本章小结 162 参考资源 162 第13章 图算法与知识图谱 163 13.1 图算法概述 163 13.2 示例:hello world!有向图 164 13.3 示例:使用有向图识别WebShell 169 13.4 示例:使用有向图识别僵尸网络 173 13.5 知识图谱概述 176 13.6 示例:知识图谱在风控领域的应用 177 13.6.1 检测疑似账号被盗 178 13.6.2 检测疑似撞库攻击 179 13.6.3 检测疑似刷单 181 13.7 示例:知识图谱在威胁情报领域的应用 183 13.7.1 挖掘后门文件潜在联系 184 13.7.2 挖掘域名潜在联系 185 13.8 本章小结 187 参考资源 187 第14章 神经网络算法 188 14.1 神经网络算法概述 188 14.2 示例:hello world!神经网络 190 14.3 示例:使用神经网络算法识别验证码 190 14.4 示例:使用神经网络算法检测Java溢出攻击 191 14.5 本章小结 193 参考资源 194 第15章 多层感知机与DNN算法 195 15.1 神经网络与深度学习 195 15.2 TensorFlow编程模型 196 15.2.1 操作 197 15.2.2 张量 197 15.2.3 变量 198 15.2.4 会话 198 15.3 TensorFlow的运行模式 198 15.4 示例:在TensorFlow下识别验证码(一) 199 15.5 示例:在TensorFlow下识别验证码(二) 202 15.6 示例:在TensorFlow下识别验证码(三) 205 15.7 示例:在TensorFlow下识别垃圾邮件(一) 207 15.8 示例:在TensorFlow下识别垃圾邮件(二) 209 15.9 本章小结 210 参考资源 210 第16章 循环神经网络算法 212 16.1 循环神经网络算法概述 212 16.2 示例:识别验证码 213 16.3 示例:识别恶意评论 216 16.4 示例:生成城市名称 220 16.5 示例:识别WebShell 222 16.6 示例:生成常用密码 225 16.7 示例:识别异常操作 227 16.8 本章小结 230 参考资源 230 第17章 卷积神经网络算法 231 17.1 卷积神经网络算法概述 231 17.2 示例:hello world!卷积神经网络 234 17.3 示例:识别恶意评论 235 17.4 示例:识别垃圾邮件 237 17.5 本章小结 240 参考资源 242

2019-03-28

Excel图表拒绝平庸.陈荣兴(带详细书签)全彩版.pdf

这是一本提升Excel 图表专业表现力的书。书中包含:图表的误区、如何选择合适的图表、作图应有的态度、图表的优化与美化技巧、经典商务图表的实例讲解、创意图表的技巧剖析。本书除了第2 章中的图表选择索引图是用思维导图工具完成之外,其余的所有图形都是在Excel 中实现的,所以只要你会Excel,就可以制作出与本书中一样的图表效果。只要愿意动手尝试,随着本书Step by Step的图表操作,就可以真正让一位图表初学者变成图表达人,熟练掌握90%以上的Excel 图表操作。此外,本书的随书附件制作得十分实用美观,可以从附录A 中得到获取方式。 本书能帮助职场白领用对图表,用专业的图表提升自身专业形象。对于广大Excel 用户而言,本书能帮你掌握Excel 顶级商务图表的应用技巧;对于信息图表爱好者而言,从本书中能够得到一些启发和应用。 1 重新认识图表 11 ▶我们处在数据可视化的时代 12 ▶数据图表是商务沟通的有效工具 12 ▶走出图表误区 13 图表表达与信息表达一致 13 选择合适的图表 14 图表中应凸显重点 14 避免3D错觉 15 数据墨水比 16 图表“体”型 16 图表讲究整体性 18 2 如何选对图表 21 ▶认识图表 22 柱形图与条形图 22 饼图与圆环图 28 折线图 32 面积图 35 散点图 39 气泡图 44 雷达图 47 ▶选择图表 50 数值比较 51 成分因素 52 相关关系 53 时间序列与频率分布 54 认识图表 55 选择图表 56 3 图表的优化技巧 57 ▶柱形图与条形图 58 ▶饼图与圆环图 70 ▶折线图与面积图 70 ▶散点图、气泡图与雷达图 94 4 图表的整体优化 103 ▶颜色之道 104 ▶对象具象化 109 ▶图例设计 110 ▶字体之美 111 ▶妙用阴影 114 ▶布局排版 116 5 Excel中的经典图表 121 ▶子弹图 122 ▶瀑布图 126 ▶帕累托图 130 ▶漏斗图 135 ▶蛇形图 140 ▶甘特图 145 ▶频率分布直方图 151 ▶气泡式地图 155 ▶风险矩阵图 160 ▶盈亏平衡分析图 164 6 Excel中的创意图表 169 ▶堆积积木图 170 ▶交叉柱图 175 ▶人口金字塔图 179 ▶细分饼图 184 ▶连环图 187 ▶滑块图 193 ▶毛利树图 197 ▶时钟流量图 202 ▶环形雷达图 207 ▶范围表现图 210 ▶薪资评估图 214 ▶Rose chart(线型版) 219 ▶预警式图表 223 A 附录 237 ▶图表索引-1 238 ▶图表索引-2 239 ▶图表索引-3 240 ▶图表工具 241 ▶附件下载 242 ▶与我联系 242

2019-03-28

Neural Network Design 2nd Edtion【神经网络设计 第2版 英文文字版】.[美]Martin T.Hagan.pdf.rar

本书主要讲述神经网络的基本概念,介绍实用的网络模型、学习规则和训练方法。全书分19章,内容涵盖神经元模型和网络结构、感知机学习规则、有监督的Hebb学习、Widrow—Hoff学习算法、反向传播算法及其变形、联想学习、竞争网络、Grossberg网络、自适应谐振理论和Hopfield网络。书中注重对数学分析方法和性能优化的讨论,强调神经网络在模式识别、信号处理以及控制系统等实际工程问题中的应用。同时本书包含大量例题、习题,并配有基于MATLAB软件包的“神经网络设计演示”程序。本书可以作为大学高年级本科生或一年级研究生的神经网络课程教材,也可供从事相关研究工作的科技人员参考。 第1章 绪论 1 1.1 目的 1 1.2 历史 1 1.3 应用 3 1.4 生物学的启示 5 参考文献 6 第2章 神经元模型和网络结构 8 2.1 目的 8 2.1 理论和实例 8 2.2.1 符号 8 2.2.2 神经元模型 8 2.2.3 网络结构 13 2.3 小结 17 2.4 例题 20 2.5 结束语 22 习题 22 第3章 一个说明性实例 23 3.1 目的 23 3.2 理论和实例 23 3.2.1 问题描述 23 3.2.2 感知机 24 3.2.3 Hamming网络 28 3.2.4 Hopfield网络 30 3.3 结束语 32 习题 32 第4章 感知机学习规则 34 4.1 目的 34 4.2 理论和实例 34 4.2.1 学习规则 35 4.2.2 感知机的结构 35 4.2.3 感知机学习规则 39 4.2.4 收敛性证明 44 4.3 小结 47 4.4 例题 47 4.5 结束语 56 参考文献 56 习题 57 第5章 信号和权值向量空间 60 5.1 目的 60 5.2 理论和实例 60 5.2.1 线性向量空间 60 5.2.2 线性无关 62 5.2.3 生成空间 62 5.2.4 内积 63 5.2.5 范数 63 5.2.6 正交性 64 5.2.7 向量展开式 65 5.3 小结 68 5.4 例题 70 5.5 结束语 76 参考文献 76 习题 76 第6章 神经网络中的线性变换 79 6.1 目的 79 6.2 理论和实例 79 6.2.1 线性变换 79 6.2.2 矩阵表示 80 6.2.3 基变换 82 6.2.4 特征值和特征向量 85 6.3 小结 88 6.4 例题 89 6.5 结束语 96 参考文献 96 习题 97 第7章 有监督的Hebb学习 99 7.1 目的 99 7.2 理论和实例 99 7.2.1 线性联想器 100 7.2.2 Hebb规则 100 7.2.3 仿逆规则 103 7.2.4 应用 104 7.2.5 Hebb学习的变形 106 7.3 小结 106 7.4 例题 107 7.5 结束语 116 参考文献 116 习题 117 第8章 性能曲面和最优点 119 8.1 目的 119 8.2 理论和实例 119 8.2.1 泰勒级数 119 8.2.2 方向导数 121 8.2.3 极小点 122 8.2.4 优化的必要条件 124 8.2.5 二次函数 126 8.3 小结 131 8.4 例题 132 8.5 结束语 141 参考文献 141 习题 141 第9章 性能优化 143 9.1 目的 143 9.2 理论和实例 143 9.2.1 最速下降法 143 9.2.2 牛顿法 148 9.2.3 共轭梯度法 152 9.3 小结 155 9.4 例题 156 9.5 结束语 165 参考文献 166 习题 166 第10章 Widrow-Hoff学习算法 168 10.1 目的 168 10.2 理论和实例 168 10.2.1 ADALINE网络 168 10.2.2 均方误差 170 10.2.3 LMS算法 171 10.2.4 收敛性分析 173 10.2.5 自适应滤波 175 10.3 小结 181 10.4 例题 182 10.5 结束语 193 参考文献 193 习题 194 第11章 反向传播 197 11.1 目的 197 11.2 理论和实例 197 11.2.1 多层感知机 197 11.2.2 反向传播算法 201 11.2.3 例子 205 11.2.4 反向传播 207 11.3 小结 211 11.4 例题 212 11.5 结束语 221 参考文献 222 习题 222 第12章 反向传播算法的变形 227 12.1 目的 227 12.2 理论和实例 227 12.2.1 BP算法的缺点 227 12.2.2 BP算法的启发式改进 232 12.2.3 数值优化技术 235 12.3 小结 244 12.4 例题 246 12.5 结束语 255 参考文献 255 习题 257 第13章 联想学习 259 13.1 目的 259 13.2 理论和实例 259 13.2.1 简单联想网络 260 13.2.2 无监督的Hebb规则 261 13.2.3 简单的识别网络 264 13.2.4 instar规则 265 13.2.5 简单回忆网络 268 13.2.6 outstar规则 268 13.3 小结 271 13.4 例题 272 13.5 结束语 279 参考文献 280 习题 280 第14章 竞争网络 285 14.1 目的 285 14.2 理论和实例 285 14.2.1 Hamming网络 286 14.2.2 竞争层 287 14.2.3 生物学意义上的竞争层 291 14.2.4 自组织特征图 292 14.2.5 学习向量量化 295 14.3 小结 299 14.4 例题 301 14.5 结束语 310 参考文献 310 习题 311 第15章 Grossberg网络 315 15.1 目的 315 15.2 理论和实例 315 15.2.1 生物学的启发:视觉 316 15.2.2 基本非线性模型 321 15.2.3 两层竞争网络 323 15.2.4 与Kohonen规则的关系 331 15.3 小结 332 15.4 例题 335 15.5 结束语 342 参考文献 343 习题 344 第16章 自适应谐振理论 346 16.1 目的 346 16.2 理论和实例 346 16.2.1 自适应谐振概述 346 16.2.2 第一层 347 16.2.3 第二层 351 16.2.4 调整子系统 354 16.2.5 学习规则:L1-L2 356 16.2.6 学习规则:L2-L1 358 16.2.7 ART1算法小结 359 16.2.8 其他ART体系结构 360 16.3 小结 361 16.4 例题 364 16.5 结束语 374 参考文献 375 习题 375 第17章 稳定性 378 17.1 目的 378 17.2 理论和实例 378 17.2.1 递归网络 378 17.2.2 稳定性概念 379 17.2.3 Lyapunov稳定性定理 381 17.2.4 单摆例子 381 17.2.5 LaSalle不变性定理 385 17.3 小结 390 17.4 例题 391 17.5 结束语 396 参考文献 396 习题 397 第18章 Hopfield网络 399 18.1 目的 399 18.2 理论和实例 399 18.2.1 Hopfield模型 400 18.2.2 Lyapunov函数 401 18.2.3 增益效应 406 18.2.4 Hopfield网络设计 409 18.3 小结 413 18.4 例题 415 18.5 结束语 421 参考文献 422 习题 423 第19章 结束语 426 19.1 目的 426 19.2 理论和实例 426 19.2.1 前馈和联想网络 426 19.2.2 竞争网络 429 19.2.3 动态联想存储器网络 429 19.2.4 神经网络的经典基础 430 19.2.5 参考书目和杂志 431 19.3 结束语 432 参考文献 432 附录A 文献目录 439 附录B 符号 447 附录C 软件 452 索引 456

2019-03-26

神经网络设计.[美]Martin T.Hagan(带详细书签).pdf

本书主要讲述神经网络的基本概念,介绍实用的网络模型、学习规则和训练方法。全书分19章,内容涵盖神经元模型和网络结构、感知机学习规则、有监督的Hebb学习、Widrow—Hoff学习算法、反向传播算法及其变形、联想学习、竞争网络、Grossberg网络、自适应谐振理论和Hopfield网络。书中注重对数学分析方法和性能优化的讨论,强调神经网络在模式识别、信号处理以及控制系统等实际工程问题中的应用。同时本书包含大量例题、习题,并配有基于MATLAB软件包的“神经网络设计演示”程序。本书可以作为大学高年级本科生或一年级研究生的神经网络课程教材,也可供从事相关研究工作的科技人员参考。 第1章 绪论 1 1.1 目的 1 1.2 历史 1 1.3 应用 3 1.4 生物学的启示 5 参考文献 6 第2章 神经元模型和网络结构 8 2.1 目的 8 2.1 理论和实例 8 2.2.1 符号 8 2.2.2 神经元模型 8 2.2.3 网络结构 13 2.3 小结 17 2.4 例题 20 2.5 结束语 22 习题 22 第3章 一个说明性实例 23 3.1 目的 23 3.2 理论和实例 23 3.2.1 问题描述 23 3.2.2 感知机 24 3.2.3 Hamming网络 28 3.2.4 Hopfield网络 30 3.3 结束语 32 习题 32 第4章 感知机学习规则 34 4.1 目的 34 4.2 理论和实例 34 4.2.1 学习规则 35 4.2.2 感知机的结构 35 4.2.3 感知机学习规则 39 4.2.4 收敛性证明 44 4.3 小结 47 4.4 例题 47 4.5 结束语 56 参考文献 56 习题 57 第5章 信号和权值向量空间 60 5.1 目的 60 5.2 理论和实例 60 5.2.1 线性向量空间 60 5.2.2 线性无关 62 5.2.3 生成空间 62 5.2.4 内积 63 5.2.5 范数 63 5.2.6 正交性 64 5.2.7 向量展开式 65 5.3 小结 68 5.4 例题 70 5.5 结束语 76 参考文献 76 习题 76 第6章 神经网络中的线性变换 79 6.1 目的 79 6.2 理论和实例 79 6.2.1 线性变换 79 6.2.2 矩阵表示 80 6.2.3 基变换 82 6.2.4 特征值和特征向量 85 6.3 小结 88 6.4 例题 89 6.5 结束语 96 参考文献 96 习题 97 第7章 有监督的Hebb学习 99 7.1 目的 99 7.2 理论和实例 99 7.2.1 线性联想器 100 7.2.2 Hebb规则 100 7.2.3 仿逆规则 103 7.2.4 应用 104 7.2.5 Hebb学习的变形 106 7.3 小结 106 7.4 例题 107 7.5 结束语 116 参考文献 116 习题 117 第8章 性能曲面和最优点 119 8.1 目的 119 8.2 理论和实例 119 8.2.1 泰勒级数 119 8.2.2 方向导数 121 8.2.3 极小点 122 8.2.4 优化的必要条件 124 8.2.5 二次函数 126 8.3 小结 131 8.4 例题 132 8.5 结束语 141 参考文献 141 习题 141 第9章 性能优化 143 9.1 目的 143 9.2 理论和实例 143 9.2.1 最速下降法 143 9.2.2 牛顿法 148 9.2.3 共轭梯度法 152 9.3 小结 155 9.4 例题 156 9.5 结束语 165 参考文献 166 习题 166 第10章 Widrow-Hoff学习算法 168 10.1 目的 168 10.2 理论和实例 168 10.2.1 ADALINE网络 168 10.2.2 均方误差 170 10.2.3 LMS算法 171 10.2.4 收敛性分析 173 10.2.5 自适应滤波 175 10.3 小结 181 10.4 例题 182 10.5 结束语 193 参考文献 193 习题 194 第11章 反向传播 197 11.1 目的 197 11.2 理论和实例 197 11.2.1 多层感知机 197 11.2.2 反向传播算法 201 11.2.3 例子 205 11.2.4 反向传播 207 11.3 小结 211 11.4 例题 212 11.5 结束语 221 参考文献 222 习题 222 第12章 反向传播算法的变形 227 12.1 目的 227 12.2 理论和实例 227 12.2.1 BP算法的缺点 227 12.2.2 BP算法的启发式改进 232 12.2.3 数值优化技术 235 12.3 小结 244 12.4 例题 246 12.5 结束语 255 参考文献 255 习题 257 第13章 联想学习 259 13.1 目的 259 13.2 理论和实例 259 13.2.1 简单联想网络 260 13.2.2 无监督的Hebb规则 261 13.2.3 简单的识别网络 264 13.2.4 instar规则 265 13.2.5 简单回忆网络 268 13.2.6 outstar规则 268 13.3 小结 271 13.4 例题 272 13.5 结束语 279 参考文献 280 习题 280 第14章 竞争网络 285 14.1 目的 285 14.2 理论和实例 285 14.2.1 Hamming网络 286 14.2.2 竞争层 287 14.2.3 生物学意义上的竞争层 291 14.2.4 自组织特征图 292 14.2.5 学习向量量化 295 14.3 小结 299 14.4 例题 301 14.5 结束语 310 参考文献 310 习题 311 第15章 Grossberg网络 315 15.1 目的 315 15.2 理论和实例 315 15.2.1 生物学的启发:视觉 316 15.2.2 基本非线性模型 321 15.2.3 两层竞争网络 323 15.2.4 与Kohonen规则的关系 331 15.3 小结 332 15.4 例题 335 15.5 结束语 342 参考文献 343 习题 344 第16章 自适应谐振理论 346 16.1 目的 346 16.2 理论和实例 346 16.2.1 自适应谐振概述 346 16.2.2 第一层 347 16.2.3 第二层 351 16.2.4 调整子系统 354 16.2.5 学习规则:L1-L2 356 16.2.6 学习规则:L2-L1 358 16.2.7 ART1算法小结 359 16.2.8 其他ART体系结构 360 16.3 小结 361 16.4 例题 364 16.5 结束语 374 参考文献 375 习题 375 第17章 稳定性 378 17.1 目的 378 17.2 理论和实例 378 17.2.1 递归网络 378 17.2.2 稳定性概念 379 17.2.3 Lyapunov稳定性定理 381 17.2.4 单摆例子 381 17.2.5 LaSalle不变性定理 385 17.3 小结 390 17.4 例题 391 17.5 结束语 396 参考文献 396 习题 397 第18章 Hopfield网络 399 18.1 目的 399 18.2 理论和实例 399 18.2.1 Hopfield模型 400 18.2.2 Lyapunov函数 401 18.2.3 增益效应 406 18.2.4 Hopfield网络设计 409 18.3 小结 413 18.4 例题 415 18.5 结束语 421 参考文献 422 习题 423 第19章 结束语 426 19.1 目的 426 19.2 理论和实例 426 19.2.1 前馈和联想网络 426 19.2.2 竞争网络 429 19.2.3 动态联想存储器网络 429 19.2.4 神经网络的经典基础 430 19.2.5 参考书目和杂志 431 19.3 结束语 432 参考文献 432 附录A 文献目录 439 附录B 符号 447 附录C 软件 452 索引 456

2019-03-26

Keras图像深度学习实战.侯宜军(带书签文字版).pdf

本书共分成8个章节,第1章是Keras简介和环境搭建;第2~6章整体介绍Keras的软件框架,包含卷积层,池化层,损失函数,优化器等关键部件的使用说明;第7章介绍了常用的图像预处理技术,包括高斯滤波,轮廓检测等常用操作的介绍;第8章是实战篇,介绍Keras神经网络模型中常用的图像模型的设计方法,以及应用于视频领域的入门级介绍。本书是Keras神经网络中专注于图像识别领域的专业书籍,具有较强的实战性。 本书的目标人群主要定位为具有一定python编程基础,对深度学习原理有一定了解,并且对人工智能图像处理领域有浓厚兴趣的人群。 1 简介 1 1.1 keras是什么 1 1.2 一些基本概念 3 1.2.1 符号计算 3 1.2.2 张量 3 1.2.3 data_format 4 1.2.4 模型 4 1.2.5 batch 5 1.2.6 epochs 5 1.3 安装Python 6 1.4 安装Theano 7 1.5 安装opencv 8 1.6 安装Keras 9 2 CNN眼中的世界 10 2.1 卷积神经网络 11 2.2 使用Keras探索卷积网络的滤波器 14 2.3 可视化所有的滤波器 18 2.4 愚弄神经网络 19 2.5 展望未来 21 3 Keras模型 22 3.1 Sequential模型 22 3.1.1 add 22 3.1.2 pop 22 3.1.3 compile 22 3.1.4 fit 23 3.1.5 evaluate 24 3.1.6 predict 24 3.1.7 predict_classes 25 3.1.8 train_on_batch 25 3.1.9 test_on_batch 25 3.1.10 predict_on_batch 25 3.1.11 fit_generator 25 3.1.12 evaluate_generator 27 3.1.13 predcit_generator 27 3.2 常用层 28 3.2.1 Dense层 29 3.2.2 Activation层 30 3.2.3 Dropout层 33 3.2.4 Flatten层 33 3.2.5 Reshape层 34 3.2.6 Permute层 34 3.2.7 RepeatVector层 35 3.2.8 Lambda层 35 3.3 卷积层 37 3.3.1 Conv1D层 37 3.3.2 Conv2D层 38 3.4 池化层 41 3.4.1 MaxPooling1D层 41 3.4.2 MaxPooling2D层 41 4 目标函数 43 4.1 MSE 44 4.2 MAE 45 4.3 MAPE 46 4.4 MSLE 47 4.5 squared_hinge 48 4.6 hinge 49 4.7 binary_crossentropy 50 4.8 categorical_crossentropy 51 4.9 sparse_categorical_crossentrop 52 5 优化器 53 5.1 公共参数 54 5.2 SGD 55 5.3 RMSprop 56 5.4 Adagrad 57 5.5 Adadelta 59 5.6 Adam 61 5.7 Adamax 63 5.8 Nadam 64 6 训练模型的注意事项 65 6.1 参数初始化 65 6.1.1 零初始化 65 6.1.2 随机初始化 65 6.2 数据预处理(Data Preprocessing) 67 6.2.1 零均值化(Mean subtraction) 67 6.2.2 归一化(Normalization) 67 6.2.3 PCA & Whitening 69 6.2.4 数据扩充(Data Augmentation) 69 7 图片预处理 71 7.1 利用小数据量 71 7.2 图像处理scipy.ndimage 76 7.3 热点图 77 7.4 高斯滤波 79 7.5 图片翻转 82 7.6 轮廓检测 84 7.7 角点 87 7.8 直方图 89 7.9 形态学图像处理 91 7.9.1 膨胀和腐蚀 91 7.9.2 Hit和Miss 93 8 CNN实战 96 8.1 Mnist 97 8.1.1 代码 97 8.1.2 导入导出 99 8.1.3 预测 100 8.2 Cifar16 102 8.2.1 代码 103 8.2.2 分析 104 8.3 人脸识别 106 8.4 视频识别 111 8.5 用神经网络去噪 122 8.5.1 对图像添加噪音 122 8.5.2 去噪神经网络 123 8.5.3 模型的保存和恢复 127 8.6 视频抽取图片 129 9 参考 130

2019-03-25

React进阶之路.徐超(带书签文字版).pdf

《React进阶之路》详细介绍了React技术栈涉及的主要技术。本书分为基础篇、进阶篇和实战篇三部分。基础篇主要介绍React的基本用法,包括React16的新特性;进阶篇深入讲解组件state、虚拟DOM、高阶组件等React中的重要概念,同时对初学者容易困惑的知识点做了介绍;实战篇介绍ReactRouter、Redux和MobX3个React技术栈的重要成员,并通过实战项目讲解这些技术如何和React结合使用。《React进阶之路》示例丰富、注重实战,适用于从零开始学习React的初学者,或者已经有一些React使用经验,但希望更加全面、深入理解React技术栈的开发人员。阅读本书,需要先掌握基础的前端开发知识。 第1篇 基础篇——React,一种革命性的UI开发理念 第1章 初识React 3 1.1 React简介 3 1.2 ES 6语法简介 4 1.3 开发环境及工具介绍 9 1.3.1 基础环境 9 1.3.2 辅助工具 9 1.3.3 Create React App 10 1.4 本章小结 12 第2章 React基础 13 2.1 JSX 13 2.1.1 JSX简介 13 2.1.2 JSX语法 14 2.1.3 JSX不是必需的 16 2.2 组件 17 2.2.1 组件定义 17 2.2.2 组件的props 18 2.2.3 组件的state 21 2.2.4 有状态组件和无状态组件 23 2.2.5 属性校验和默认属性 26 2.2.6 组件样式 28 2.2.7 组件和元素 32 2.3 组件的生命周期 34 2.3.1 挂载阶段 34 2.3.2 更新阶段 35 2.3.3 卸载阶段 36 2.4 列表和Keys 36 2.5 事件处理 39 2.6 表单 43 2.6.1 受控组件 44 2.6.2 非受控组件 51 2.7 本章小结 52 第3章 React 16新特性 53 3.1 render新的返回类型 53 3.2 错误处理 54 3.3 Portals 56 3.4 自定义DOM属性 57 3.5 本章小结 58 第2篇 进阶篇——用好React,你必须要知道的那些事 第4章 深入理解组件 60 4.1 组件state 60 4.1.1 设计合适的state 60 4.1.2 正确修改state 63 4.1.3 state与不可变对象 64 4.2 组件与服务器通信 66 4.2.1 组件挂载阶段通信 66 4.2.2 组件更新阶段通信 67 4.3 组件通信 68 4.3.1 父子组件通信 68 4.3.2 兄弟组件通信 71 4.3.3 Context 75 4.3.4 延伸 78 4.4 特殊的ref 79 4.4.1 在DOM元素上使用ref 79 4.4.2 在组件上使用ref 79 4.4.3 父组件访问子组件的DOM节点 81 4.5 本章小结 82 第5章 虚拟DOM和性能优化 83 5.1 虚拟DOM 83 5.2 Diff算法 84 5.3 性能优化 87 5.4 性能检测工具 90 5.5 本章小结 91 第6章 高阶组件 92 6.1 基本概念 92 6.2 使用场景 93 6.3 参数传递 96 6.4 继承方式实现高阶组件 99 6.5 注意事项 99 6.6 本章小结 101 第3篇 实战篇——在大型Web应用中使用React 第7章 路由:用React Router开发单页面应用 103 7.1 基本用法 103 7.1.1 单页面应用和前端路由 103 7.1.2 React Router 的安装 104 7.1.3 路由器 104 7.1.4 路由配置 105 7.1.5 链接 107 7.2 项目实战 108 7.2.1 后台服务API介绍 108 7.2.2 路由设计 111 7.2.3 登录页 113 7.2.4 帖子列表页 117 7.2.5 帖子详情页 125 7.3 代码分片 133 7.4 本章小结 138 第8章 Redux:可预测的状态管理机 139 8.1 简介 139 8.1.1 基本概念 139 8.1.2 三大原则 141 8.2 主要组成 141 8.2.1 action 141 8.2.2 reducer 142 8.2.3 store 146 8.3 在React中使用Redux 148 8.3.1 安装react-redux 148 8.3.2 展示组件和容器组件 148 8.3.3 connect 149 8.3.4 mapStateToProps 150 8.3.5 mapDispatchToProps 150 8.3.6 Provider 组件 151 8.4 中间件与异步操作 152 8.4.1 中间件 152 8.4.2 异步操作 154 8.5 本章小结 155 第9章 Redux项目实战 156 9.1 组织项目结构 156 9.2 设计state 161 9.2.1 错误1:以API作为设计state的依据 161 9.2.2 错误2:以页面UI为设计state的依据 164 9.2.3 合理设计state 165 9.3 设计模块 170 9.3.1 app模块 170 9.3.2 auth模块 171 9.3.3 posts模块 173 9.3.4 comments模块 177 9.3.5 users模块 179 9.3.6 ui模块 180 9.6.7 index模块 181 9.4 连接Redux 182 9.4.1 注入state 182 9.4.2 注入action creators 184 9.4.3 connect连接PostList和Redux 185 9.5 Redux调试工具 187 9.6 性能优化 188 9.6.1 React Router引起的组件重复渲染问题 188 9.6.2 Immutable.JS 193 9.6.3 Reselect 198 9.7 本章小结 199 第10章 MobX:简单可扩展的状态管理解决方案 200 10.1 简介 200 10.2 主要组成 204 10.2.1 state 204 10.2.2 computed value 211 10.2.3 reaction 212 10.2.4 action 215 10.3 MobX响应的常见误区 216 10.4 在React中使用MobX 220 10.5 本章小结 221 第11章 MobX项目实战 222 11.1 组织项目结构 222 11.2 设计store 223 11.3 视图层重构 234 11.4 MobX调试工具 236 11.5 优化建议 238 11.6 Redux与MobX比较 241 11.7 本章小结 242

2019-03-25

云计算:深刻改变未来.张为民(带详细书签).pdf

《云计算深刻改变未来》概述了云计算的起源、发展以及商业模式,介绍了云计算的关键技术、典型应用以及开源软件和社区。云计算既是机遇也是挑战,中国科技何去何从?需要从国家层面重视云计算,在教育、普及、重点研发、示范工程等诸多领域对其进行统筹规划,从而推动云计算在中国的发展,并最终使云计算造福百姓,惠及国民经济,推动科技创新与进步。 《云计算深刻改变未来》语言生动,案例丰富,适合所有想了解云计算的读者。 第1章 初识云计算 1 1.1 Animoto的创业故事 2 1.2 云计算就在我们身边 4 1.3 风起“云”涌 7 1.4 让我们走入云计算 11 第2章 云计算的前世今生 14 2.1 高高在上的大型计算机的时代 16 2.2 合久必分:PC机时代的到来 20 2.3 分久必合:Internet让PC机合在了一起 22 2.4 合中有分,分中有合:云计算时代来临 25 2.5 众说纷纭的云计算概念 29 2.6 云计算的分类 35 2.7 云计算的特点优势 38 2.8 Google云计算成功的秘诀之一 41 第3章 云计算的典型商业模式 47 3.1 三种主流的云计算商业模式 48 3.2 云计算商业模式的成功秘密 51 3.3 云计算的优势 55 3.4 云里乾坤,谁主沉浮? 57 3.5 云计算的未来预测 62 第4章 云计算关键技术 65 4.1 云计算技术框架概述 66 4.2 虚拟化技术 71 4.3 海量分布式存储技术 76 4.4 并行编程模式 87 4.5 数据管理技术 93 4.6 分布式资源管理技术 95 4.7 云计算平台管理技术 97 4.8 云计算是一种多粒度和变粒度计算 99 4.9 绿色节能技术 104 第5章 丰富多彩的云应用 108 5.1 云计算让商业智能如虎添翼 109 5.2 云计算助力IDC大展身手 114 5.3 回归云计算的起源——丰富多样的搜索应用 120 第6章 云计算与开源 134 6.1 虚拟化平台软件Xen与KVM 135 6.2 云基础设施管理平台Eucalyptus与OpenNebula 137 6.3 分布式计算框架Hadoop 138 6.4 云平台访问接口适配层libcloud与Dasein Cloud API 140 6.5 开源精神 141 第7章 从云到端 143 7.1 Chrome 146 7.2 FireFox 148 7.3 IE 8 150 7.4 Android 151 7.5 iPhone 153 7.6 OMS与Ophone 154 7.7 云端精彩 158 第8章 因云制宜云计算 160 8.1 因云制宜 161 8.2 尚无标准的云计算 164 8.3 云中漫步安全吗? 165 8.4 掣肘的并非是技术 167 8.5 云观念的接受很容易吗? 167 8.6 云计算在节省金钱方面的功绩有多大? 168 第9章 云计算深刻改变未来 169 9.1 云计算对于技术的影响 170 9.2 云计算对各产业的影响 172 9.3 面对云计算,中国科技何去何从? 174 第10章 企业在云计算领域的实践与创新 177 10.1 中国移动在云计算领域的实践和创新 178 10.2 美地森科技在云存储和云计算IDC构建的实践和创新 180 10.3 八百客在云计算领域的实践和创新 183 10.4 友友新创在云计算领域的实践和创新 185 10.5 世纪互联进行的中国IaaS服务的实践和创新 186 10.6 播思在云计算存储及关键技术上的实践和创新 188 10.7 小结 189 第11章 不得不看的8大云计算宝典 191 11.1 宝典1:搜索引擎论文 192 11.2 宝典2:GFS论文 193 11.3 宝典3:MapReduce论文 194 11.4 宝典4:BigTable论文 196 11.5 宝典5:Google及其“云”智慧 197 11.6 宝典6:Hadoop开源项目 197 11.7 宝典7:中国云计算网 199 11.8 宝典8:中国移动云计算网 199 参考文献 201 后记 202

2019-03-25

Essential C++中文版(2013版).[美]Stanley B.Lippman(带详细书签).pdf

本书以四个面向来表现C++的本质:procedural(面向过程的)、generic(泛型的)、object-based(基于对象的)、object-oriented(面向对象的)。全书围绕一系列逐渐繁复的程序问题,以及用以解决这些问题的语言特性来组织。循此方式,你将不只学到C++的功能和结构,也可学到它们的设计目的和基本原理。 本书适合那些已经开始从事软件设计,又抽不出太多时间学习新技术的程序员阅读。 满汉全席之外(译序/侯捷) v 前言Preface xi 结构与组织 xiii 关于源代码 xiii 致谢 xiv 更多读物 xiv 排版约定 xv 第1章 C++编程基础 Basic C++ Programming 1 1.1 如何撰写C++程序 1 1.2 对象的定义与初始化 7 1.3 撰写表达式 10 1.4 条件语句和循环语句 15 1.5 如何运用Array和Vector 22 1.6 指针带来弹性 26 1.7 文件的读写 30 第2章 面向过程的编程风格 Procedural Programming 35 2.1 如何编写函数 35 2.2 调用函数 41 2.3 提供默认参数值 50 2.4 使用局部静态对象 53 2.5 声明inline函数 55 2.6 提供重载函数 56 2.7 定义并使用模板函数 58 2.8 函数指针带来更大的弹性 60 2.9 设定头文件 63 第3章 泛型编程风格 Generic Programming 67 3.1 指针的算术运算 68 3.2 了解Iterator(泛型指针) 73 3.3 所有容器的共通操作 76 3.4 使用顺序性容器 77 3.5 使用泛型算法 81 3.6 如何设计一个泛型算法 83 3.7 使用Map 90 3.8 使用Set 91 3.9 如何使用Iterator Inserter 93 3.10 使用iostream Iterator 95 第4章 基于对象的编程风格 Object-Based Programming 99 4.1 如何实现一个Class 100 4.2 什么是构造函数和析构函数 104 4.3 何谓mutable(可变)和const(不变) 109 4.4 什么是this指针 113 4.5 静态类成员 115 4.6 打造一个Iterator Class 118 4.7 合作关系必须建立在友谊的基础上 123 4.8 实现一个copy assignment operator 125 4.9 实现一个function object 126 4.10 重载iostream运算符 128 4.11 指针,指向Class Member Function 130 第5章 面向对象编程风格 Object-Oriented Programming 135 5.1 面向对象编程概念 135 5.2 漫游:面向对象编程思维 138 5.3 不带继承的多态 142 5.4 定义一个抽象基类 145 5.5 定义一个派生类 148 5.6 运用继承体系 155 5.7 基类应该多么抽象 157 5.8 初始化、析构、复制 158 5.9 在派生类中定义一个虚函数 160 5.10 运行时的类型鉴定机制 164 第6章 以template进行编程 Programming with Templates 167 6.1 被参数化的类型 169 6.2 Class Template的定义 171 6.3 Template类型参数的处理 172 6.4 实现一个Class Template 174 6.5 一个以Function Template完成的Output运算符 180 6.6 常量表达式与默认参数值 181 6.7 以Template参数作为一种设计策略 185 6.8 Member Template Function 187 第7章 异常处理 Exception Handling 191 7.1 抛出异常 191 7.2 捕获异常 193 7.3 提炼异常 194 7.4 局部资源管理 198 7.5 标准异常 200 附录A 习题解答 Exercises Solutions 205 附录B 泛型算法参考手册 Generic Algorithms Handbook 255 附录C 中英术语对照 侯捷 271 英文术语的采用原则 271 中英术语对照(按字母顺序排列) 272 索引 Index 277

2019-03-23

数据科学家养成手册.高扬(带详细书签).pdf 【修正了书签页码的错误】

作为认知科学的延伸,数据科学一方面应该越来越引起广大大数据工作者的重视,另一方面也要撩开自己的神秘面纱,以最为亲民的姿态和每位大数据工作者成为亲密无间的战友,为用科学的思维方式进行工作做好理论准备。本书从众多先贤及科学家的轶事讲起,以逐步归纳和递进的脉络总结出科学及数据科学应关注的要点,然后在生产的各个环节中对这些要点逐一进行讨论与落实,从更高、更广的视角回看科学及数据科学在各个生产环节的缩影。本书并不以高深的数学理论研究作为目的,也不以某一种计算机语言编程作为主线脉络,而是在一个个看似孤立的故事与工程中不断拾遗,并试着从中悟出一些道理。本书适合大数据从业人员和对大数据相关知识感兴趣的人,初级和中级程序员、架构师及希望通过对数据的感知改进工作的人,产品经理、运营经理、数据分析师、数据库开发工程师等对数据分析工作敏感的人,以及所有对数据科学感兴趣并希望逐步深入了解数据科学知识体系的人阅读。 认知篇 1 第1章 什么是科学家 2 1.1 从太阳东升西落开始 2 1.1.1 农历 2 1.1.2 公历 5 1.1.3 小结 7 1.2 阿基米德爱洗澡? 7 1.3 托勒密的秘密 10 1.4 牛顿为什么那么牛 11 1.4.1 苹果和三大定律 11 1.4.2 极限和微积分 12 1.5 高斯——高,实在是高 15 1.6 离经叛道的爱因斯坦 17 1.7 本章小结 20 第2章 什么是科学 23 2.1 科学之科 23 2.2 边界的迷茫 23 2.3 科学之殇 26 2.4 本章小结 27 第3章 数据与数学 28 3.1 什么是数据 28 3.2 数学的奥妙 29 3.2.1 《几何原本》 29 3.2.2 《九章算术》 30 3.2.3 高等数学 34 3.3 本章小结 37 第4章 数据科学的使命 38 4.1 走近数据科学 38 4.1.1 介质 38 4.1.2 从信息到数据 41 4.1.3 数据科学的本质 43 4.2 万能的数据科学 44 4.2.1 测量 44 4.2.2 统计计算 47 4.2.3 指标 52 4.3 使命必达 53 4.3.1 高效生产 53 4.3.2 破除迷信 56 4.3.3 目标一致与不一致 57 4.4 本章小结 58 第5章 矛盾的世界 59 5.1 古希腊——学者高产的国度 59 5.2 矛盾无处不在 61 5.3 世界究竟是否可知 63 5.4 薛定谔的“喵星人” 64 5.5 本章小结 67 第6章 实验和哲学 68 6.1 朴素的认知方法 68 6.1.1 眼见为实 69 6.1.2 归纳与总结 70 6.2 哲学靠谱吗 71 6.3 数学的尽头是哲学 72 6.4 本章小结 73 第7章 辩证思维 74 7.1 要不要辩证有多大区别 74 7.2 谁对谁错 76 7.3 做到客观不容易 77 7.4 观念的存弭 79 7.5 本章小结 82 分化篇 85 第8章 统计学 86 8.1 数理统计鼻祖—阿道夫·凯特勒 86 8.2 统计就是统共合计 88 8.3 数据来源 90 8.4 抽样 91 8.5 对照实验 91 8.6 误差 94 8.6.1 抽样误差 94 8.6.2 非抽样误差 96 8.7 概括性度量 97 8.7.1 集中趋势度量 98 8.7.2 离散程度度量 100 8.7.3 小结 100 8.8 概率与分布 100 8.8.1 数学期望 102 8.8.2 正态分布 103 8.8.3 其他分布 106 8.9 统计学与大数据 107 第9章 信息论 109 9.1 模拟信号 109 9.2 信息量与信息熵 110 9.3 香农公式 111 9.4 数字信号 112 9.5 编码与压缩 113 9.5.1 无损压缩 114 9.5.2 有损压缩 117 9.6 本章小结 126 第10章 混沌论 127 10.1 洛伦兹在想什么 128 10.2 罗伯特·梅的养鱼计划 129 10.3 有限的大脑,无限的维 130 10.4 谋杀上帝的拉普拉斯 132 10.5 庞加莱不是省油的灯 134 10.6 未知居然还能做预测 137 10.7 本章小结 137 第11章 算法学 139 11.1 离散的世界 139 11.2 成本的度量 142 11.3 穷举法——暴力破解 143 11.4 分治法——化繁为简 152 11.5 回溯法——能省则省 154 11.6 贪心法——局部最优 155 11.7 迭代法——步步逼近 156 11.7.1 牛顿法 157 11.7.2 梯度下降法 158 11.7.3 遗传算法 159 11.8 机器学习——自动归纳 161 11.8.1 非监督学习 162 11.8.2 监督学习 164 11.8.3 强化学习 175 11.9 神经网络——深度学习 177 11.9.1 神经元 177 11.9.2 BP神经网络 180 11.9.3 损失函数 180 11.9.4 非线性分类 182 11.9.5 激励函数 186 11.9.6 卷积神经网络 188 11.9.7 循环神经网络 190 11.9.8 小结 193 11.10 本章小结 194 实践篇 195 第12章 数据采集 196 12.1 数据的源头 196 12.2 日志收集 197 12.2.1 实时上传 197 12.2.2 延时上传 201 12.2.3 加密问题 202 12.2.4 压缩问题 203 12.2.5 连接方式 204 12.2.6 消息格式 206 12.2.7 维度分解 207 12.3 这只是不靠谱的开始 208 12.4 本章小结 209 第13章 数据存储 210 13.1 读写不对等 210 13.1.1 读多写少 211 13.1.2 读少写多 211 13.1.3 读写都多 212 13.2 进快还是出快 213 13.2.1 最快写入 213 13.2.2 读出最快 215 13.3 文件还是数据库 215 13.4 要不要支持事务 216 13.5 表分区和索引 218 13.5.1 表分区 219 13.5.2 索引 219 13.6 稳定最重要 222 13.7 安全性和副本 223 13.7.1 RAID 223 13.7.2 软冗余 225 13.8 本章小结 226 第14章 数据统计 227 14.1 此“统计”恐非彼“统计” 227 14.2 要精确还是要简洁 231 14.3 统计是万能的吗 232 14.4 注意性能 234 14.5 本章小结 234 第15章 数据建模 235 15.1 模型是宝贵的财富 236 15.2 量化是关键 236 15.3 该算法出马了 237 15.3.1 统计学模型 238 15.3.2 线性关系 238 15.3.3 复杂的非线性关系 238 15.4 算法的哲学 240 15.5 本章小结 241 第16章 数据可视化与分析 242 16.1 看得见,摸得着 242 16.2 颜色很重要 242 16.3 别说布局没有用 244 16.3.1 由上而下,由简而繁 244 16.3.2 总-分,分-总,总-分-总 245 16.3.3 毗邻吸引 246 16.4 有图就别要表格 248 16.5 分析的内涵 249 16.5.1 相关性分析 250 16.5.2 预测分析 251 16.5.3 其他分析 252 16.6 有趣的统计应用 252 16.6.1 不规则图形的面积 252 16.6.2 套出你的实话 253 16.6.3 巧测圆周率 253 16.7 仁者见仁,智者见智 255 16.8 永恒的困惑 256 16.9 本章小结 257 第17章 数据决策 258 17.1 决策就是“拍脑袋” 258 17.2 哪里有物质,哪里就有数据 259 17.2.1 目的的统一 259 17.2.2 数据胜于雄辩 260 17.3 这是风险博弈 260 17.3.1 性价比优先 261 17.3.2 小迭代至上 262 17.3.3 不要“输不起” 262 17.3.4 留得青山在 263 17.4 本章小结 264 第18章 案例分析 266 18.1 K线图里的秘密 266 18.1.1 什么是市场 267 18.1.2 谁在控制价格 267 18.1.3 货币价格的形成 270 18.1.4 零和博弈 271 18.1.5 涨跌都盈利 272 18.1.6 价格的预测 273 18.1.7 形态 274 18.1.8 K线图周期 276 18.1.9 造市商与点差 277 18.1.10 科学分析 277 18.1.11 小结 310 18.2 数学能救命 310 18.2.1 阴云下的大西洋 311 18.2.2 护航船队的救星 311 18.2.3 数学家的天下 317 18.2.4 小结 317 18.3 人人都能运筹帷幄 317 第19章 与本书相关内容的问与答 319 后记 325 附录A 326 A.1 VMware Workstation的安装 326 A.1.1 VMware简介 326 A.1.2 安装准备工作 326 A.2 CentOS虚拟机的安装 329 A.2.1 下载DVD镜像 329 A.2.2 创建VMware虚拟机 329 A.3 Ubuntu虚拟机的安装 335 A.4 Python语言简介 341 A.4.1 安装Python 341 A.4.2 Hello Python 341 A.4.3 行与缩进 341 A.4.4 变量类型 342 A.4.5 循环语句 343 A.4.6 函数 344 A.4.7 模块 345 A.4.8 小结 345 A.5 Scikit-learn库简介 346 A.6 安装Theano 346 A.7 安装Keras 347 A.8 安装MySQL 347 A.9 安装MySQL-Python驱动 349 A.10 MT4平台简介 350 参考文献 353

2019-03-23

标准C程序设计(第6版).[印]E.Balagurusamy(带详细书签).pdf 【高清版】

第6版保留了这本畅销书的精髓,以简洁、清晰且逻辑有序的方式讲解C语言程序设计的概念,十分适合C语言的初学者。本书通过示例程序、案例学习、编程练习、项目设计以及其他教学手段来帮助读者更好地理解C语言,使得学习过程更加愉悦。 ◆ 丰富的程序代码及大量注释贯穿全书 ◆ 以醒目的方式提供了众多补充信息和技巧、提示 ◆ 演示真实应用程序的案例学习,以及列出可能遇到的问题和实用提示的“谨记”段落 ◆ 帮助掌握处理大型程序的编程项目 ◆ 从学生的常见问题中专门挑选出来的新程序和复习题 ◆ 遵循C99标准 第1章 C语言概述 1 1.1 C语言的历史 1 1.2 C语言的主要特性 3 1.3 示例程序1:显示一条消息 3 1.4 示例程序2:两个数相加 6 1.5 示例程序3:利息计算 7 1.6 示例程序4:子例程的使用 9 1.7 示例程序5:数学函数的使用 10 1.8 C程序的基本结构 11 1.9 编程风格 12 1.10 运行C程序 13 1.11 在UNIX系统环境下 14 1.11.1 创建程序 14 1.11.2 编译与链接 14 1.11.3 运行程序 15 1.11.4 创建自己的可运行文件 15 1.11.5 多个源文件问题 15 1.12 在MS-DOS系统环境下 16 复习题 17 编程练习 19 第2章 常量、变量及数据类型 21 2.1 概述 21 2.2 字符集 21 2.3 C标记符 23 2.4 关键字与标识符 23 2.5 常量 24 2.5.1 整型常量 24 2.5.2 实数常量 26 2.5.3 单字符常量 27 2.5.4 字符串常量 27 2.5.5 反斜杠字符常量 27 2.6 变量 28 2.7 数据类型 29 2.7.1 整型 30 2.7.2 浮点型 31 2.7.3 void类型 31 2.7.4 字符类型 32 2.8 变量的声明 32 2.8.1 基本类型的声明 32 2.8.2 自定义类型的声明 34 2.9 存储类型的声明 35 2.10 变量的赋值 36 2.10.1 赋值语句 36 2.10.2 从键盘读取数据 38 2.11 符号常量的定义 41 2.11.1 可修改性 41 2.11.2 可理解性 41 2.12 将变量声明为常量 42 2.13 将变量声明为可变的 42 2.14 数据的溢出 43 2.15 案例学习 44 2.15.1 平均数计算 44 2.15.2 温度转换问题 44 复习题 45 编程练习 47 第3章 运算符与表达式 49 3.1 概述 49 3.2 算术运算符 49 3.2.1 整数算术运算 50 3.2.2 实数算术运算 51 3.2.3 混合算术运算 52 3.3 关系运算符 52 3.4 逻辑运算符 53 3.5 赋值运算符 54 3.6 递增和递减运算符 56 3.7 条件运算符 57 3.8 逐位运算符 57 3.9 特殊运算符 58 3.9.1 逗号运算符 58 3.9.2 sizeof运算符 58 3.10 算术表达式 60 3.11 表达式的计算 60 3.12 算术表达式的优先级 61 3.13 一些可计算性问题 63 3.14 表达式中的类型转换 64 3.14.1 隐式类型转换 64 3.14.2 显式类型转换 65 3.15 运算符的优先级及其关联性 67 3.16 数学函数 69 3.17 案例学习 70 3.17.1 销售人员的工资 70 3.17.2 二次方程的求解 71 复习题 72 编程练习 76 第4章 输入输出操作管理 79 4.1 概述 79 4.2 读取一个字符 80 4.3 写一个字符 82 4.4 格式化输入 83 4.4.1 整数输入 84 4.4.2 实数输入 86 4.4.3 字符串输入 87 4.4.4 混合数据类型的读取 89 4.4.5 错误输入的检测 89 4.4.6 使用scanf函数时应记住的几个要点 91 4.5 格式化输出 92 4.5.1 整数的输出 93 4.5.2 实数的输出 94 4.5.3 单个字符的显示 95 4.5.4 字符串的显示 96 4.5.5 混合数据的输出 97 4.5.6 提高输出的可读性 98 4.6 案例学习 99 4.6.1 库存报告 99 4.6.2 可靠性图形 100 复习题 102 编程练习 105 第5章 判断与分支 107 5.1 概述 107 5.2 if判断语句 107 5.3 简单if语句 108 5.4 if…else语句 111 5.5 嵌套if…else语句 114 5.6 阶梯式else if语句 117 5.7 switch语句 120 5.8 ?:运算符 124 5.9 goto语句 128 5.10 案例学习 131 5.10.1 数值的分布范围 131 5.10.2 账单计算 132 练习题 135 编程练习 139 第6章 判断与循环 143 6.1 概述 143 6.2 while语句 145 6.3 do语句 147 6.4 for语句 149 6.4.1 简单的for循环 149 6.4.2 for循环的其他特性 153 6.4.3 for循环的嵌套 154 6.5 循环中的跳转 158 6.5.1 跳出循环 158 6.5.2 跳过循环的一部分 162 6.5.3 避免使用goto语句 164 6.5.4 跳出程序 164 6.6 简洁的测试表达式 164 6.7 案例学习 166 6.7.1 二项式系数表 166 6.7.2 柱状图 167 6.7.3 最小成本 169 6.7.4 描绘两函数的曲线图 170 复习题 172 编程练习 175 第7章 数组 179 7.1 概述 179 7.2 一维数组 180 7.3 一维数组的声明 182 7.4 一维数组的初始化 184 7.4.1 编译时初始化 184 7.4.2 运行时初始化 185 7.5 二维数组 189 7.6 二维数组的初始化 192 7.7 多维数组 200 7.8 动态数组 200 7.9 与数组相关的其他内容 201 7.10 案例学习 202 7.10.1 数列的中值问题 202 7.10.2 标准差的计算 204 7.10.3 测试评分 205 7.10.4 产品与销售分析 207 复习题 213 编程练习 215 第8章 字符数组与字符串 219 8.1 概述 219 8.2 字符串变量的声明与初始化 220 8.3 从终端读取字符串 221 8.3.1 使用scanf函数 221 8.3.2 读取文本行 223 8.3.3 使用getchar和gets函数 223 8.4 在屏幕上显示字符串 227 8.4.1 使用printf函数 227 8.4.2 使用putchar和puts函数 230 8.5 字符的算术运算 231 8.6 将字符串组合在一起 232 8.7 两个字符串的比较 234 8.8 字符串处理函数 234 8.8.1 strcat函数 234 8.8.2 strcmp函数 236 8.8.3 strcpy函数 236 8.8.4 strlen函数 236 8.8.5 其他字符串函数 238 8.9 字符串表 240 8.10 字符串的其他特性 242 8.11 案例学习 243 8.11.1 计算文本中的单词数 243 8.11.2 客户列表处理程序 244 复习题 246 编程练习 249 第9章 用户自定义函数 251 9.1 概述 251 9.2 为什么需要自定义函数 251 9.3 多函数程序 252 9.4 自定义函数的元素 254 9.5 函数定义 255 9.5.1 函数头 256 9.5.2 函数体 257 9.6 返回值及其类型 257 9.7 函数调用 258 9.8 函数声明 260 9.9 函数的类型 262 9.10 无参数无返回值的函数 262 9.11 有参数无返回值的函数 264 9.12 有参数有返回值的函数 267 9.13 无参数但有一个返回值的函数 271 9.14 返回多个值的函数 271 9.15 函数的嵌套 272 9.16 函数的递归 273 9.17 将数组传递给函数 275 9.17.1 一维数组 275 9.17.2 二维数组 278 9.18 将字符串传递给函数 279 9.19 变量的作用域、可见性和生存期 279 9.19.1 自动变量 280 9.19.2 外部变量 281 9.19.3 外部声明 284 9.19.4 静态变量 285 9.19.5 寄存器变量 286 9.19.6 嵌套代码块 287 9.20 多文件程序 288 9.21 案例学习 290 复习题 293 编程练习 297 第10章 结构体与共用体 299 10.1 概述 299 10.2 结构体的定义 299 10.3 声明结构体变量 301 10.4 访问结构体成员 303 10.5 结构体的初始化 304 10.6 结构体变量的复制与比较 305 10.7 单个成员的运算 307 10.8 结构体数组 308 10.9 结构体中的数组 310 10.10 结构体中的结构体 311 10.11 结构体与函数 313 10.12 共用体 316 10.13 结构体的大小 317 10.14 位域 317 10.15 案例学习 321 复习题 324 编程练习 327 第11章 指针 331 11.1 概述 331 11.2 理解指针 331 11.3 访问变量的地址 333 11.4 指针变量的声明 334 11.5 指针变量的初始化 336 11.6 通过指针访问变量 337 11.7 指针链 339 11.8 指针表达式 340 11.9 指针的递增与比例因子 341 11.10 指针与数组 342 11.11 指针与字符串 345 11.12 指针数组 347 11.13 将指针作为函数的参数 348 11.14 函数返回指针 351 11.15 指向函数的指针 352 11.16 指针与结构体 354 11.17 指针存在的问题 357 11.18 案例学习 358 11.18.1 考试成绩处理程序 358 11.18.2 库存更新程序 362 复习题 363 编程练习 366 第12章 文件管理 367 12.1 概述 367 12.2 定文并打开文件 368 12.3 关闭文件 369 12.4 文件的输入输出操作 370 12.4.1 getc与putc函数 370 12.4.2 getw和putw函数 371 12.4.3 fprintf与fscanf函数 373 12.5 I/O操作的错误处理 375 12.6 随机访问文件 377 12.7 命令行参数 382 复习题 385 编程练习 386 第13章 动态内存分配与链表 387 13.1 概述 387 13.2 动态内存分配 387 13.3 用malloc函数分配一块内存 388 13.4 用calloc函数分配多个内存块 390 13.5 用free函数释放已用的空间 391 13.6 用realloc函数改变内存块的大小 391 13.7 链表的概念 393 13.8 链表的优点 395 13.9 链表的种类 396 13.10 再论指针 397 13.11 创建链表 399 13.12 插入一个数据项 402 13.13 删除一个数据项 405 13.14 链表的应用 407 13.15 案例学习 408 13.15.1 在已排序链表中插入数据 408 13.15.2 构建已排序的链表 411 复习题 413 编程练习 415 第14章 预处理器 417 14.1 概述 417 14.2 宏替换指令 418 14.2.1 简单宏替换 418 14.2.2 带参数的宏 420 14.2.3 宏嵌套 421 14.2.4 取消宏定义 422 14.3 文件包含 422 14.4 编译器控制指令 423 14.4.1 情形1 423 14.4.2 情形2 424 14.4.3 情形3 425 14.4.4 情形4 425 14.5 ANSI C的其他预处理指令 426 14.5.1 #elif指令 426 14.5.2 #pragma指令 427 14.5.3 #error指令 427 14.5.4 字符串化运算符# 427 14.5.5 标记符粘贴运算符## 428 复习题 429 编程练习 430 第15章 C程序开发的一些指导原则 431 15.1 概述 431 15.2 程序设计 431 15.2.1 问题分析 431 15.2.2 勾勒出程序的结构 432 15.2.3 算法开发 432 15.2.4 控制结构的选择 433 15.3 程序编码 433 15.3.1 自身文档化 433 15.3.2 语句的构造 434 15.3.3 输入/输出格式 434 15.3.4 程序的通用性 435 15.4 常见的程序错误 435 15.4.1 丢失分号 435 15.4.2 误用分号 435 15.4.3 丢失括号 436 15.4.4 丢失引号 437 15.4.5 误用引号 437 15.4.6 使用不正确的注释字符 437 15.4.7 未声明变量 438 15.4.8 忽视了运算符的优先级 438 15.4.9 忽视了递增递减运算符的计算顺序 439 15.4.10 忽视了函数参数的说明 439 15.4.11 在函数调用中实参和形参类型不匹配 439 15.4.12 函数未声明 439 15.4.13 在scanf函数的参数中丢失了&运算符 440 15.4.14 超出了数组的边界 440 15.4.15 忘记了给字符串的空字符留出空间 441 15.4.16 使用未初始化的指针 441 15.4.17 丢失了间接运算符和地址运算符 441 15.4.18 在指针表达式中丢失括号 442 15.4.19 宏定义语句中的参数遗漏了括号 442 15.5 程序测试与调试 442 15.5.1 错误的类型 443 15.5.2 程序测试 443 15.5.3 程序调试 444 15.6 程序的效率 444 15.6.1 运行时间 445 15.6.2 内存需求 445 复习题 445 附录A 位级程序设计 447 附录B 字符的ASCII值 453 附录C ANSI C语言的库函数 455 附录D 项目设计 459 附录E C99的特性 501

2019-03-23

GPU编程与优化:大众高性能计算.方民权(带详细书签).pdf

本书第一篇系统地介绍GPU编程的相关知识,帮助读者快速入门,并构建GPU知识体系;第二篇和第三篇给出大量实例,对每个实例进行循序渐进的并行和优化实践,为读者提供GPU编程和优化参考;第四篇总结影响GPU性能的关键要素(执行核心和存储体系),量化测评GPU的核心性能参数,给出CPU/GPU异构系统上覆盖完全的各种混合并行模式及其实践,帮助读者真正透彻理解GPU。 本书适合作为计算机及相关专业的教材,也可作为GPU程序开发人员和科研人员的参考书。本书封面贴有清华大学出版社防伪标签,无标签者不得销售。 第一篇 理论篇 1 第1章 高性能计算概述 3 1.1 高性能计算概念辨析 3 1.1.1 并行计算、高性能计算和超级计算 3 1.1.2 超级计算机与超级计算中心 4 1.2 计算科学 5 1.3 高性能计算发展史 5 1.4 高性能计算简介 6 1.5 向量机与阵列机 8 1.6 本章小结 9 第2章 GPU概述 10 2.1 GPU是什么 10 2.2 协处理器 10 2.3 GPU与显卡的关系 11 2.4 GPU/显卡购买注意事项 11 2.5 为什么要学GPU编程 12 2.6 GPU与CPU辨析 13 2.7 GPU发展简史 14 2.8 GPU编程方法 14 2.9 CPU/GPU异构系统 16 第3章 GPU硬件架构 17 3.1 GPU架构 17 3.1.1 Tesla架构 18 3.1.2 Fermi架构 20 3.1.3 Kepler架构 21 3.1.4 Maxwell架构 23 3.1.5 Pascal架构243.2Kernel的硬件映射 28 3.3 GPU存储体系 29 3.4 GPU计算能力 30 GPU编程与优化——大众高性能计算目录第4章GPU软件体系 33 4.1 GPU软件生态系统 33 4.2 CUDA Toolkit 34 4.2.1 NVCC编译器 34 4.2.2 cuobjdump 35 4.3 CUDA环境安装 36 4.3.1 Windows 7安装CUDA 4.2 36 4.3.2 Linux下安装CUDA 38 第5章 CUDA C编程 41 5.1 CUDA编程模型 41 5.2 CUDA编程七步曲 42 5.3 驱动API与运行时API 42 5.4 CUDA运行时函数 43 5.4.1 设备管理函数 43 5.4.2 存储管理函数 45 5.4.3 数据传输函数 48 5.4.4 线程管理函数 51 5.4.5 流管理函数 52 5.4.6 事件管理函数 52 5.4.7 纹理管理函数 53 5.4.8 执行控制函数 55 5.4.9 错误处理函数 55 5.4.10 图形学互操作函数 57 5.4.11 OpenGL互操作函数 58 5.4.12 Direct3D互操作函数 59 5.5 CUDA C语言扩展 60 5.6 gridblockthread三维模型 61 第二篇 入门篇 65 第6章 向量加法 67 6.1 向量加法及其串行代码 67 6.2 单block单thread向量加 68 6.3 单block多thread向量加 68 6.4 多block多thread向量加 69 6.5 CUBLAS库向量加法 70 6.6 实验结果分析与结论 71 6.6.1 本书实验平台 71 6.6.2 实验结果 71 6.6.3 结论 71 6.7 知识点总结 72 6.8 扩展练习 75 第7章 归约: 向量内积 76 7.1 向量内积及其串行代码 76 7.2 单block分散归约向量内积 77 7.3 单block低线程归约向量内积 78 7.4 多block向量内积(CPU二次归约) 79 7.5 多block向量内积(GPU二次归约) 81 7.6 基于原子操作的多block向量内积 81 7.7 计数法实现多block向量内积 84 7.8 CUBLAS库向量内积 85 7.9 实验结果与结论 86 7.9.1 实验结果 86 7.9.2 结论 86 7.10 归约的深入优化探讨 87 7.10.1 block数量和thread数量对归约性能的影响 87 7.10.2 算术运算优化 88 7.10.3 减少同步开销 89 7.10.4 循环展开 90 7.10.5 总结 91 7.11 知识点总结 91 7.12 扩展练习 94 第8章 矩阵乘法 95 8.1 矩阵乘法及其3种串行代码 95 8.1.1 一般矩阵乘法 95 8.1.2 循环交换矩阵乘法 97 8.1.3 转置矩阵乘法 98 8.1.4 实验结果与最优串行矩阵乘 99 8.2 grid线程循环矩阵乘法 100 8.3 block线程循环矩阵乘法 101 8.4 行共享存储矩阵乘法 101 8.5 棋盘阵列矩阵乘法 103 8.6 判断移除 105 8.7 CUBLAS矩阵乘法 106 8.8 实验结果分析与结论 108 8.8.1 矩阵乘精度分析 108 8.8.2 实验结果分析 110 8.8.3 浮点运算能力分析 111 8.9 行共享存储矩阵乘法改进 111 8.10 知识点总结 113 8.11 扩展练习 115 第9章 矩阵转置 116 9.1 矩阵转置及其串行代码 116 9.21 D矩阵转置 117 9.32 D矩阵转置 118 9.4 共享存储2D矩阵转置 119 9.5 共享存储2D矩阵转置diagonal优化 120 9.6 实验结果分析与结论 121 9.7 共享存储2D矩阵转置的深入优化 122 9.8 知识点总结 124 9.9 扩展练习 125 第三篇 提高篇 127 第10章 卷积 129 10.1 卷积及其串行实现 129 10.1.1 一维卷积 129 10.1.2 二维卷积 131 10.2 GPU上1D卷积 134 10.3 M常量1D卷积 135 10.4 M共享1D卷积 136 10.5 N共享1D卷积 137 10.6 实验结果分析 139 10.6.1 扩展法1D卷积实验结果分析 139 10.6.2 判断法与扩展法1D卷积对比 140 10.6.3 加速比分析 141 10.6.4 线程维度对性能的影响 141 10.72 D卷积的GPU移植与优化 142 10.7.1 GPU上2D卷积 142 10.7.2 M常量2D卷积 143 10.7.3 M常量N共享2D卷积 143 10.7.42 D卷积实验结果分析 145 10.8 知识点总结 145 10.9 扩展练习 147 第11章 曼德博罗特集 148 11.1 曼德博罗特集及其串行实现 148 11.2 曼德博罗特集的GPU映射 150 11.3 一些优化尝试及效果 152 11.3.1 访存连续 152 11.3.2 uchar4访存合并 153 11.3.34 种零拷贝 153 11.3.4 总结分析 155 11.4 计算通信重叠优化 156 11.5 突破kernel执行时间限制 159 11.6 知识点总结 160 11.7 扩展练习 162 第12章 扫描: 前缀求和 163 12.1 前缀求和及其串行代码 163 12.2 KoggeStone并行前缀和 164 12.2.1 直接KoggeStone分段前缀和 164 12.2.2 交错KoggeStone分段前缀和 165 12.2.3 完整KoggeStone前缀和 166 12.3 BrentKung并行前缀和 168 12.3.1 BrentKung分段前缀和 169 12.3.2 两倍数据的BrentKung分段前缀和 170 12.3.3 避免bank conflict的两倍数据BrentKung分段前缀和 171 12.3.4 完整BrentKung前缀和 173 12.4 warp分段的KoggeStone前缀求和 174 12.5 实验结果分析与结论 177 12.6 知识点总结 179 12.7 扩展练习180第13章排序 181 13.1 串行排序及其性能 181 13.1.1 选择排序 181 13.1.2 冒泡排序 182 13.1.3 快速排序 182 13.1.4 基数排序 183 13.1.5 双调排序网络 185 13.1.6 合并排序 186 13.1.7 串行排序性能对比 187 13.2 基数排序 188 13.2.1 基数排序概述 188 13.2.2 单block基数排序 189 13.2.3 基于thrust库的基数排序 196 13.3 双调排序网络 197 13.3.1 双调排序网络概述 197 13.3.2 单block双调排序网络 199 13.3.3 多block双调排序网络 202 13.4 快速排序 206 13.5 合并排序 207 13.6 实验结果分析与结论 208 13.7 知识点总结 209 13.8 扩展练习 210 第14章 几种简单图像处理 211 14.1 图像直方图统计 211 14.1.1 串行直方图统计 211 14.1.2 并行直方图统计 211 14.1.3 实验结果与分析 212 14.2 中值滤波 213 14.2.1 串行中值滤波 214 14.2.21 D并行中值滤波 215 14.2.3 共享1D中值滤波 216 14.2.4 双重共享1D中值滤波 218 14.2.52 D并行中值滤波 221 14.2.6 共享2D中值滤波 222 14.2.7 共享2D中值滤波的改进 227 14.2.8 实验结果与分析 229 14.3 均值滤波 231 14.3.1 串行均值滤波 231 14.3.2 并行均值滤波 232 14.3.3 实验结果与分析 233 第四篇 核心篇 235 第15章 GPU执行核心 237 15.1 概述 237 15.2 算术运算支持 238 15.2.1 整数运算 238 15.2.2 浮点运算 239 15.3 算术运算性能 240 15.4 分支处理 242 15.5 同步与测时 246 15.5.1 同步 246 15.5.2 测时 247 15.6 数学函数 247 15.7 warp与block原语 249 15.7.1 warp原语 249 15.7.2 block原语 250 15.8 kernel启动、线程切换和循环处理 251 第16章 GPU存储体系 254 16.1 概述 254 16.2 寄存器 259 16.3 局部存储 261 16.4 共享存储器 264 16.4.1 共享存储使用 264 16.4.2 bank conflict 265 16.4.3 volatile关键字 266 16.4.4 共享存储原子操作 267 16.5 常量存储 268 16.6 全局存储 269 16.6.1 全局存储的使用 269 16.6.2 全局存储的合并访问 271 16.6.3 利用纹理缓存通道访问全局存储 271 16.7 纹理存储 273 16.7.1 CUDA数组 273 16.7.2 纹理存储的操作和限制 274 16.7.3 读取模式、纹理坐标、滤波模式和寻址模式 276 16.7.4 表面存储 278 16.8 主机端内存 281 16.9 零拷贝操作 283 第17章 GPU关键性能测评 284 17.1 GPU性能测评概述 284 17.2 GPU参数获取 286 17.2.1 GPU选择 286 17.2.2 详细设备参数获取 287 17.3 精确测时方法汇总 288 17.3.1 clock测时 289 17.3.2 gettimeofday测时 289 17.3.3 CUDA事件测时 289 17.3.4 cutil库函数测时 290 17.4 GPU预热与启动开销 290 17.5 GPU浮点运算能力 291 17.6 GPU访存带宽 293 17.7 GPU通信带宽 295 17.8 NVIDIA Visual Profiler 296 17.9 程序性能对比约定 298 第18章 CPUs和GPUs协同 299 18.1 协同优化基点 299 18.1.1 CPU并行矩阵乘基点 299 18.1.2 GPU并行矩阵乘基点 300 18.2 CPU/GPU协同 300 18.3 多GPU协同 305 18.3.1 CUDA版本 306 18.3.2 OpenMP+CUDA 308 18.3.3 MPI+CUDA 311 18.4 CPUs/GPUs协同 314 18.4.1 CUDA版本 314 18.4.2 OpenMP+CUDA 319 18.4.3 MPI+OpenMP+CUDA 324 18.5 本章小结 329 附录 331 附录A 判断法1D卷积代码 333 附录A.1 判断法1D卷积basic版 333 附录A.2 判断法1D卷积constant版 334 附录A.3 判断法1D卷积shared版 336 附录A.4 判断法1D卷积cache版 337 附录B 曼德博罗特集的系列优化代码 340 附录B.1 完整版串行C代码 340 附录B.2 cuda_1_0 343 附录B.3 cuda_0_2 345 附录B.4 cuda_zerocopy 346 附录B.5 cuda_1_0_zerocopy 348 附录B.6 cuda_0_0_zerocopy 349 附录B.7 cuda_0_2_zerocopy 351 附录B.8 cuda_2 352 附录B.9 cuda_1_2 354 附录C 几种图像处理完整源码 357 附录C.1 BMP图像读写头文件 357 附录C.2 图像直方图串行代码 373 附录C.3 串行中值滤波代码 374 附录C.4 并行均值滤波相关代码 376 附录D nvprof帮助菜单 383 附录E NVCC帮助菜单 388 附录F 几种排序算法源代码 399 附录F.1 bitonic_sort_block函数 399 附录F.2 GPU快速排序完整代码 400 附录F.3 GPU合并排序完整代码 408 参考文献 417

2019-03-23

Java并发编程实战.[美]Brian Goetz(带详细书签).pdf

本书深入浅出地介绍了Java线程和并发,是一本完美的Java并发参考手册。书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险、构造线程安全的类及验证线程安全的规则,如何将小的线程安全类组合成更大的线程安全类,如何利用线程来提高并发应用程序的吞吐量,如何识别可并行执行的任务,如何提高单线程子系统的响应性,如何确保并发程序执行预期任务,如何提高并发代码的性能和可伸缩性等内容,最后介绍了一些高级主题,如显式锁、原子变量、非阻塞算法以及如何开发自定义的同步工具类。 本书适合Java程序开发人员阅读。 第1章 简介1 1.1 并发简史1 1.2 线程的优势2 1.2.1 发挥多处理器的强大能力2 1.2.2 建模的简单性3 1.2.3 异步事件的简化处理3 1.2.4 响应更灵敏的用户界面4 1.3 线程带来的风险4 1.3.1 安全性问题5 1.3.2 活跃性问题7 1.3.3 性能问题7 1.4 线程无处不在7 第一部分 基础知识 第2章 线程安全性11 2.1 什么是线程安全性13 2.2 原子性14 2.2.1 竞态条件15 2.2.2 示例:延迟初始化中的竞态条件16 2.2.3 复合操作17 2.3 加锁机制18 2.3.1 内置锁20 2.3.2 重入21 2.4 用锁来保护状态22 2.5 活跃性与性能23 第3章 对象的共享27 3.1 可见性27 3.1.1 失效数据28 3.1.2 非原子的64位操作29 3.1.3 加锁与可见性30 3.1.4 Volatile变量 30 3.2 发布与逸出32 3.3 线程封闭35 3.3.1 Ad-hoc线程封闭35 3.3.2 栈封闭36 3.3.3 ThreadLocal类37 3.4 不变性38 3.4.1 Final域39 3.4.2 示例:使用Volatile类型来发布不可变对象40 3.5 安全发布41 3.5.1 不正确的发布:正确的对象被破坏42 3.5.2  不可变对象与初始化安全性42 3.5.3 安全发布的常用模式43 3.5.4 事实不可变对象44 3.5.5 可变对象44 3.5.6 安全地共享对象44 第4章 对象的组合46 4.1 设计线程安全的类46 4.1.1 收集同步需求47 4.1.2 依赖状态的操作48 4.1.3 状态的所有权48 4.2 实例封闭49 4.2.1 Java监视器模式51 4.2.2 示例:车辆追踪51 4.3 线程安全性的委托53 4.3.1 示例:基于委托的车辆追踪器54 4.3.2 独立的状态变量55 4.3.3 当委托失效时56 4.3.4 发布底层的状态变量57 4.3.5 示例:发布状态的车辆追踪器58 4.4 在现有的线程安全类中添加功能59 4.4.1 客户端加锁机制60 4.4.2 组合62 4.5 将同步策略文档化62 第5章 基础构建模块66 5.1 同步容器类66 5.1.1 同步容器类的问题66 5.1.2 迭代器与Concurrent-ModificationException68 5.1.3 隐藏迭代器69 5.2 并发容器70 5.2.1 ConcurrentHashMap71 5.2.2 额外的原子Map操作72 5.2.3 CopyOnWriteArrayList72 5.3 阻塞队列和生产者-消费者模式73 5.3.1 示例:桌面搜索75 5.3.2 串行线程封闭76 5.3.3 双端队列与工作密取77 5.4 阻塞方法与中断方法77 5.5 同步工具类78 5.5.1 闭锁79 5.5.2 FutureTask80 5.5.3 信号量82 5.5.4 栅栏83 5.6 构建高效且可伸缩的结果缓存85 第二部分 结构化并发应用程序 第6章 任务执行93 6.1 在线程中执行任务93 6.1.1 串行地执行任务94 6.1.2 显式地为任务创建线程94 6.1.3 无限制创建线程的不足95 6.2 Executor框架96 6.2.1 示例:基于Executor的Web服务器97 6.2.2 执行策略98 6.2.3 线程池98 6.2.4 Executor的生命周期99 6.2.5 延迟任务与周期任务101 6.3 找出可利用的并行性102 6.3.1 示例:串行的页面渲染器102 6.3.2 携带结果的任务Callable与Future103 6.3.3 示例:使用Future实现页面渲染器104 6.3.4 在异构任务并行化中存在的局限106 6.3.5 CompletionService:Executor与BlockingQueue106 6.3.6 示例:使用CompletionService实现页面渲染器107 6.3.7 为任务设置时限108 6.3.8 示例:旅行预定门户网站109 第7章 取消与关闭111 7.1 任务取消111 7.1.1 中断113 7.1.2 中断策略116 7.1.3 响应中断117 7.1.4 示例:计时运行118 7.1.5 通过Future来实现取消120 7.1.6 处理不可中断的阻塞121 7.1.7 采用newTaskFor来封装非标准的取消122 7.2 停止基于线程的服务124 7.2.1 示例:日志服务124 7.2.2 关闭ExecutorService127 7.2.3 “毒丸”对象128 7.2.4 示例:只执行一次的服务129 7.2.5 shutdownNow的局限性130 7.3 处理非正常的线程终止132 7.4 JVM关闭135 7.4.1 关闭钩子135 7.4.2 守护线程136 7.4.3 终结器136 第8章 线程池的使用138 8.1 在任务与执行策略之间的隐性耦合138 8.1.1 线程饥饿死锁139 8.1.2 运行时间较长的任务140 8.2 设置线程池的大小140 8.3 配置ThreadPoolExecutor141 8.3.1 线程的创建与销毁142 8.3.2 管理队列任务142 8.3.3 饱和策略144 8.3.4 线程工厂146 8.3.5 在调用构造函数后再定制ThreadPoolExecutor147 8.4 扩展 ThreadPoolExecutor148 8.5 递归算法的并行化149 第9章 图形用户界面应用程序156 9.1 为什么GUI是单线程的156 9.1.1 串行事件处理157 9.1.2 Swing中的线程封闭机制158 9.2 短时间的GUI任务160 9.3 长时间的GUI任务161 9.3.1 取消162 9.3.2 进度标识和完成标识163 9.3.3 SwingWorker165 9.4 共享数据模型165 9.4.1 线程安全的数据模型166 9.4.2 分解数据模型166 9.5 其他形式的单线程子系统167 第三部分 活跃性、性能与测试 第10章 避免活跃性危险169 10.1 死锁169 10.1.1 锁顺序死锁170 10.1.2 动态的锁顺序死锁171 10.1.3 在协作对象之间发生的死锁174 10.1.4 开放调用175 10.1.5 资源死锁177 10.2 死锁的避免与诊断178 10.2.1 支持定时的锁178 10.2.2 通过线程转储信息来分析死锁178 10.3 其他活跃性危险180 10.3.1 饥饿180 10.3.2 糟糕的响应性181 10.3.3 活锁181 第11章 性能与可伸缩性183 11.1 对性能的思考183 11.1.1 性能与可伸缩性184 11.1.2 评估各种性能权衡因素185 11.2 Amdahl定律186 11.2.1 示例:在各种框架中隐藏的串行部分188 11.2.2 Amdahl定律的应用189 11.3 线程引入的开销189 11.3.1 上下文切换190 11.3.2 内存同步190 11.3.3 阻塞192 11.4 减少锁的竞争192 11.4.1 缩小锁的范围(“快进快出”)193 11.4.2 减小锁的粒度195 11.4.3 锁分段196 11.4.4 避免热点域197 11.4.5 一些替代独占锁的方法198 11.4.6 监测CPU的利用率199 11.4.7 向对象池说“不”200 11.5 示例:比较Map的性能200 11.6 减少上下文切换的开销201 第12章 并发程序的测试204 12.1 正确性测试205 12.1.1 基本的单元测试206 12.1.2 对阻塞操作的测试207 12.1.3 安全性测试208 12.1.4 资源管理的测试212 12.1.5 使用回调213 12.1.6 产生更多的交替操作214 12.2 性能测试215 12.2.1 在PutTakeTest中增加计时功能215 12.2.2 多种算法的比较217 12.2.3 响应性衡量218 12.3 避免性能测试的陷阱220 12.3.1 垃圾回收220 12.3.2 动态编译220 12.3.3 对代码路径的不真实采样222 12.3.4 不真实的竞争程度222 12.3.5 无用代码的消除223 12.4 其他的测试方法224 12.4.1 代码审查224 12.4.2 静态分析工具224 12.4.3 面向方面的测试技术226 12.4.4 分析与监测工具226 第四部分 高级主题 第13章 显式锁227 13.1 Lock与 ReentrantLock227 13.1.1 轮询锁与定时锁228 13.1.2 可中断的锁获取操作230 13.1.3 非块结构的加锁231 13.2 性能考虑因素231 13.3 公平性232 13.4 在synchronized和ReentrantLock之间进行选择234 13.5 读-写锁235 第14章 构建自定义的同步工具238 14.1 状态依赖性的管理238 14.1.1 示例:将前提条件的失败传递给调用者240 14.1.2 示例:通过轮询与休眠来实现简单的阻塞241 14.1.3 条件队列243 14.2 使用条件队列244 14.2.1 条件谓词244 14.2.2 过早唤醒245 14.2.3 丢失的信号246 14.2.4 通知247 14.2.5 示例:阀门类248 14.2.6 子类的安全问题249 14.2.7 封装条件队列250 14.2.8 入口协议与出口协议250 14.3 显式的Condition对象251 14.4 Synchronizer剖析253 14.5 AbstractQueuedSynchronizer254 14.6 java.util.concurrent同步器类中的 AQS257 14.6.1 ReentrantLock257 14.6.2 Semaphore与CountDownLatch258 14.6.3 FutureTask259 14.6.4 ReentrantReadWriteLock259 第15章 原子变量与非阻塞同步机制261 15.1 锁的劣势261 15.2 硬件对并发的支持262 15.2.1 比较并交换263 15.2.2 非阻塞的计数器264 15.2.3 JVM对CAS的支持265 15.3 原子变量类265 15.3.1 原子变量是一种“更好的volatile”266 15.3.2 性能比较:锁与原子变量267 15.4 非阻塞算法270 15.4.1 非阻塞的栈270 15.4.2 非阻塞的链表272 15.4.3 原子的域更新器274 15.4.4 ABA问题275 第16章 Java内存模型277 16.1 什么是内存模型,为什么需要它277 16.1.1 平台的内存模型278 16.1.2 重排序278 16.1.3 Java内存模型简介280 16.1.4 借助同步281 16.2 发布283 16.2.1 不安全的发布283 16.2.2 安全的发布284 16.2.3 安全初始化模式284 16.2.4 双重检查加锁286 16.3 初始化过程中的安全性287 附录A 并发性标注289 参考文献291

2019-03-22

TensorFlow+Keras深度学习人工智能实践应用.林大贵(带详细书签).pdf

本书提供安装、上机操作指南,同时辅以大量范例程序介绍TensorFlow + Keras深度学习方面的知识。本书分9部分,共21章,内容主要包括基本概念介绍、TensorFlow 与 Keras 的安装、Keras MNIST手写数字识别、Keras CIFAR-10照片图像物体识别、Keras多层感知器预测泰坦尼克号上旅客的生存概率、使用Keras MLP、RNN、LSTM进行IMDb自然语言处理与情感分析、以TensorFlow张量运算仿真神经网络的运行、TensorFlow MNIST手写数字识别、使用GPU大幅加快深度学习训练。 TensorFlow + Keras深度学习方面的知识不需要具备高等数学模型、算法等专业知识,读者只需要具备基本的Python程序设计能力,按照本书的步骤循序渐进地学习,就可以了解深度学习的基本概念,进而实际运用深度学习的技术。 第1章 人工智能、机器学习与深度学习简介 1 1.1 人工智能、机器学习、深度学习的关系 2 1.2 机器学习介绍 4 1.3 机器学习分类 4 1.4 深度学习简介 7 1.5 结论 8 第2章 深度学习的原理 9 2.1 神经传导的原理 10 2.2 以矩阵运算仿真神经网络 13 2.3 多层感知器模型 14 2.4 使用反向传播算法进行训练 16 2.5 结论 21 第3章 TensorFlow与Keras介绍 22 3.1 TensorFlow架构图 23 3.2 TensorFlow简介 24 3.3 TensorFlow程序设计模式 26 3.4 Keras介绍 27 3.5 Keras程序设计模式 28 3.6 Keras与TensorFlow比较 29 3.7 结论 30 第4章 在Windows中安装TensorFlow与Keras 31 4.1 安装Anaconda 32 4.2 启动命令提示符 35 4.3 建立TensorFlow的Anaconda虚拟环境 37 4.4 在Anaconda虚拟环境安装TensorFlow与Keras 40 4.5 启动Jupyter Notebook 42 4.6 结论 48 第5章 在Linux Ubuntu中安装TensorFlow与Keras 49 5.1 安装Anaconda 50 5.2 安装TensorFlow与Keras 52 5.3 启动Jupyter Notebook 53 5.4 结论 54 第6章 Keras MNIST手写数字识别数据集 55 6.1 下载MNIST数据 56 6.2 查看训练数据 58 6.3 查看多项训练数据images与label 60 6.4 多层感知器模型数据预处理 62 6.5 features数据预处理 62 6.6 label数据预处理 64 6.7 结论 65 第7章 Keras多层感知器识别手写数字 66 7.1 Keras多元感知器识别MNIST手写数字图像的介绍 67 7.2 进行数据预处理 69 7.3 建立模型 69 7.4 进行训练 73 7.5 以测试数据评估模型准确率 77 7.6 进行预测 78 7.7 显示混淆矩阵 79 7.8 隐藏层增加为1000个神经元 81 7.9 多层感知器加入DropOut功能以避免过度拟合 84 7.10 建立多层感知器模型包含两个隐藏层 86 7.11 结论 89 第8章 Keras卷积神经网络识别手写数字 90 8.1 卷积神经网络简介 91 8.2 进行数据预处理 97 8.3 建立模型 98 8.4 进行训练 101 8.5 评估模型准确率 104 8.6 进行预测 104 8.7 显示混淆矩阵 105 8.8 结论 107 第9章 Keras CIFAR-10图像识别数据集 108 9.1 下载CIFAR-10数据 109 9.2 查看训练数据 111 9.3 查看多项images与label 112 9.4 将images进行预处理 113 9.5 对label进行数据预处理 114 9.6 结论 115 第10章 Keras卷积神经网络识别CIFAR-10图像 116 10.1 卷积神经网络简介 117 10.2 数据预处理 118 10.3 建立模型 119 10.4 进行训练 123 10.5 评估模型准确率 126 10.6 进行预测 126 10.7 查看预测概率 127 10.8 显示混淆矩阵 129 10.9 建立3次的卷积运算神经网络 132 10.10 模型的保存与加载 135 10.11 结论 136 第11章 Keras泰坦尼克号上的旅客数据集 137 11.1 下载泰坦尼克号旅客数据集 138 11.2 使用Pandas DataFrame读取数据并进行预处理 140 11.3 使用Pandas DataFrame进行数据预处理 142 11.4 将DataFrame转换为Array 143 11.5 将ndarray特征字段进行标准化 145 11.6 将数据分为训练数据与测试数据 145 11.7 结论 147 第12章 Keras多层感知器预测泰坦尼克号上旅客的生存概率 148 12.1 数据预处理 149 12.2 建立模型 150 12.3 开始训练 152 12.4 评估模型准确率 155 12.5 加入《泰坦尼克号》电影中Jack与Rose的数据 156 12.6 进行预测 157 12.7 找出泰坦尼克号背后的感人故事 158 12.8 结论 160 第13章 IMDb网络电影数据集与自然语言处理 161 13.1 Keras自然语言处理介绍 163 13.2 下载IMDb数据集 167 13.3 读取IMDb数据 169 13.4 查看IMDb数据 172 13.5 建立token 173 13.6 使用token将“影评文字”转换成“数字列表” 174 13.7 让转换后的数字长度相同 174 13.8 结论 176 第14章 Keras建立MLP、RNN、LSTM模型进行IMDb情感分析 177 14.1 建立多层感知器模型进行IMDb情感分析 178 14.2 数据预处理 179 14.3 加入嵌入层 180 14.4 建立多层感知器模型 181 14.5 训练模型 182 14.6 评估模型准确率 184 14.7 进行预测 185 14.8 查看测试数据预测结果 185 14.9 查看《美女与野兽》的影评 187 14.10 预测《美女与野兽》的影评是正面或负面的 190 14.11 文字处理时使用较大的字典提取更多文字 192 14.12 RNN模型介绍 193 14.13 使用Keras RNN模型进行IMDb情感分析 195 14.14 LSTM模型介绍 197 14.15 使用Keras LSTM模型进行IMDb情感分析 199 14.16 结论 200 第15章 TensorFlow程序设计模式 201 15.1 建立“计算图” 202 15.2 执行“计算图” 204 15.3 TensorFlow placeholder 206 15.4 TensorFlow数值运算方法介绍 207 15.5 TensorBoard 208 15.6 建立一维与二维张量 211 15.7 矩阵基本运算 212 15.8 结论 214 第16章 以TensorFlow张量运算仿真神经网络的运行 215 16.1 以矩阵运算仿真神经网络 216 16.2 以placeholder传入X值 220 16.3 创建layer函数以矩阵运算仿真神经网络 222 16.4 建立layer_debug函数显示权重与偏差 225 16.5 结论 226 第17章 TensorFlow MNIST手写数字识别数据集 227 17.1 下载MNIST数据 228 17.2 查看训练数据 229 17.3 查看多项训练数据images与labels 232 17.4 批次读取MNIST数据 234 17.5 结论 235 第18章 TensorFlow多层感知器识别手写数字 236 18.1 TensorFlow建立多层感知器辨识手写数字的介绍 237 18.2 数据准备 239 18.3 建立模型 239 18.4 定义训练方式 242 18.5 定义评估模型准确率的方式 243 18.6 进行训练 244 18.7 评估模型准确率 249 18.8 进行预测 249 18.9 隐藏层加入更多神经元 250 18.10 建立包含两个隐藏层的多层感知器模型 251 18.11 结论 252 第19章 TensorFlow卷积神经网络识别手写数字 253 19.1 卷积神经网络简介 254 19.2 进行数据预处理 255 19.3 建立共享函数 256 19.4 建立模型 258 19.5 定义训练方式 264 19.6 定义评估模型准确率的方式 264 19.7 进行训练 265 19.8 评估模型准确率 266 19.9 进行预测 267 19.10 TensorBoard 268 19.11 结论 270 第20章 TensorFlow GPU版本的安装 271 20.1 确认显卡是否支持CUDA 273 20.2 安装CUDA 274 20.3 安装cuDNN 278 20.4 将cudnn64_5.dll存放的位置加入Path环境变量 281 20.5 在Anaconda建立TensorFlow GPU虚拟环境 283 20.6 安装TensorFlow GPU版本 285 20.7 安装Keras 286 20.8 结论 286 第21章 使用GPU加快TensorFlow与Keras训练 287 21.1 启动TensorFlow GPU环境 288 21.2 测试GPU与CPU执行性能 293 21.3 超出显卡内存的限制 296 21.4 以多层感知器的实际范例比较CPU与GPU的执行速度 297 21.5 以CNN的实际范例比较CPU与GPU的执行速度 299 21.6 以Keras Cifar CNN的实际范例比较CPU与GPU的执行速度 302 21.7 结论 304 附录A 本书范例程序的下载与安装说明 305 A.1 在Windows系统中下载与安装范例程序 306 A.2 在Ubuntu Linux系统中下载与安装范例程序 310

2019-03-22

明解C语言(第3版)入门篇.[日]柴田望洋(带详细书签).pdf 【半高清】

《明解C语言 第3版 入门篇》是日本的C语言经典教材,自出版以来不断重印、修订,被誉为“C语言圣经”。 《明解C语言 第3版 入门篇》图文并茂,示例丰富,第3版从190段代码和164幅图表增加到205段代码和220幅图表,对C语言的基础知识进行了彻底剖析,内容涉及数组、函数、指针、文件操作等。对于C语言语法以及一些难以理解的概念,均以精心绘制的示意图,清晰、通俗地进行讲解。原著在日本广受欢迎,始终位于网上书店C语言著作排行榜首位。 第1章 初识C语言 1 1-1 显示计算结果 2 计算整数的和并显示结果 2 程序和编译 2 注释 3 固定代码 4 printf函数:格式化输出函数 4 语句 5 计算并显示整数的差 5 格式化字符串和转换说明 6 符号的称呼 8 无格式化输出 8 字符串常量 10 转义字符 10 1-2 变量 11 变量和声明 11 赋值 12 初始化 13 声明时初始化 14 初始化和赋值 14 1-3 输入和显示 16 通过键盘进行输入 16 格式化输入函数scanf 16 乘法运算 17 输出函数puts 18 总结 21 第2章 运算和数据类型 23 2-1 运算 24 运算符和操作数 24 乘除运算符和加减运算符 25 除法运算的商和余数 25 使用printf函数打印% 26 获取整数的最后一位数字 26 多个转换说明 27 单目运算符 28 赋值运算符 29 表达式和赋值表达式 30 表达式语句 30 2-2 数据类型 31 求平均值 31 数据类型 32 数据类型和对象 33 整型常量和浮点型常量 34 double类型的运算 34 数据类型和运算 35 类型转换 37 转换说明 39 总结 42 第3章 分支结构程序 45 3-1 if语句 46 if语句·其1 46 奇数的判定 47 if语句·其2 48 奇数·偶数的判断 49 非0的判断 49 if语句的结构图 50 相等运算符 52 余数的判断 53 关系运算符 54 嵌套的if语句 55 判断 57 计算较大值 58 计算三个数的最大值 59 条件运算符 60 差值计算 61 复合语句(程序块) 62 逻辑运算符 65 短路求值 67 3-2 switch语句 70 switch语句和break语句 70 复杂的switch语句 72 switch语句和if语句 73 选择语句 74 总结 75 第4章 程序的循环控制 77 4-1 do语句 78 do语句 78 复合语句(程序块)中的声明 79 读取一定范围内的值 80 逻辑非运算符·德摩根定律 81 德摩根定律 81 求多个整数的和及平均值 82 复合赋值运算符 84 后置递增运算符和后置递减运算符 85 4-2 while语句 87 while语句 87 用递减运算符简化程序代码 88 数据递增 90 限定次数的循环操作 91 字符常量和putchar函数 92 do语句和while语句 93 前置递增运算符和前置递减运算符 93 do语句的显示 95 逆向显示整数值 96 4-3 for语句 99 for语句 99 使用for语句实现固定次数的循环 101 偶数的枚举 103 约数的枚举 104 表达式语句和空语句 104 循环语句 105 4-4 多重循环 107 二重循环 107 用break语句强制结束循环 108 显示图形 109 多重循环 111 4-5 程序的组成元素和格式 114 关键字 114 运算符 114 标识符 114 分隔符 115 常量和字符串常量 115 自由的书写格式 116 连接相邻的字符串常量 117 缩进 117 总结 118 第5章 数组 121 5-1 数组 122 数组 122 数组的声明(使用数组前的准备) 123 访问数组(数组的使用方法) 123 数组的遍历 124 数组初始化 126 数组的复制 127 输入数组元素的值 129 对数组的元素进行倒序排列 129 使用数组进行成绩处理 131 对象式宏 131 数组元素的最大值和最小值 133 赋值表达式的判断 134 数组的元素个数 135 5-2 多维数组 138 多维数组 138 总结 142 第6章 函数 145 6-1 什么是函数 146 main函数和库函数 146 什么是函数 146 函数定义 147 函数调用 148 三个数中的最大值 151 将函数的返回值作为参数传递给函数 152 调用其他函数 154 值传递 155 6-2 函数设计 158 没有返回值的函数 158 通用性 159 不含形参的函数 160 函数返回值的初始化 161 作用域 161 文件作用域 162 声明和定义 163 函数原型声明 163 头文件和文件包含指令 164 函数的通用性 165 数组的传递 166 函数的传递和const类型的修饰符 168 线性查找(顺序查找) 170 哨兵查找法 172 多维数组的传递 175 6-3 作用域和存储期 178 作用域和标识符的可见性 178 存储期 180 总结 185 第7章 基本数据类型 189 7-1 基本数据类型和数 190 算数类型和基本数据类型 190 基数 191 基数转换 192 7-2 整型和字符型 195 整型和字符型 195 头文件 196 字符型 199 位和CHAR_BIT 200 sizeof运算符 200 size_t型和typedef声明 202 整型的灵活运用 202 整型的内部表示 204 无符号整数的内部表示 205 有符号整数的内部表示 207 按位操作的逻辑运算 209 位移运算符 212 整型常量 216 整型常量的数据类型 218 整数的显示 218 数据溢出和异常 220 7-3 浮点型 221 浮点型 221 浮点型常量 223 头文件 224 循环的控制 225 7-4 运算和运算符 228 运算符的优先级和结合性 228 优先级 228 结合性 228 数据类型转换 230 总结 232 第8章 动手编写各种程序吧 235 8-1 函数式宏 236 函数和数据类型 236 函数式宏 237 函数和函数式宏 238 不带参数的函数式宏 239 函数式宏和逗号运算符 240 8-2 排序 243 冒泡排序法 243 8-3 枚举类型 246 枚举类型 246 枚举常量 248 命名空间 250 8-4 递归函数 251 函数和类型 251 阶乘 252 8-5 输入输出和字符 255 getchar函数和EOF 255 从输入复制到输出 256 数字字符计数 256 字符 258 转义字符 261 总结 263 第9章 字符串的基本知识 265 9-1 什么是字符串 266 字符串字面量 266 字符串字面量的长度 266 字符串 268 字符数组的初始化赋值 269 空字符串 270 字符串的读取 270 格式化显示字符串 271 9-2 字符串数组 273 字符串数组 273 读取字符串数组中的字符串 274 9-3 字符串处理 275 字符串长度 275 显示字符串 277 数字字符的出现次数 278 大小写字符转换 279 字符串数组的参数传递 280 总结 283 第10章 指针 285 10-1 指针 286 函数的参数 286 对象和地址 287 取址运算符 288 指针 289 指针运算符 291 10-2 指针和函数 293 作为函数参数的指针 293 计算和与差 294 二值互换 296 将两个值排序 297 scanf函数和指针 298 指针的类型 299 空指针 300 标量型 301 10-3 指针和数组 302 指针和数组 302 指针运算符和下标运算符 304 数组和指针的不同点 306 数组的传递 308 总结 311 第11章 字符串和指针 315 11-1 字符串和指针 316 用数组实现的字符串和用指针实现的字符串 316 用数组实现的字符串和用指针实现的字符串的不同点 318 字符串数组 320 11-2 通过指针操作字符串 323 判断字符串长度 323 字符串的复制 325 不正确的字符串复制 328 返回指针的函数 329 11-3 字符串处理库函数 330 strlen函数:求字符串的长度 330 strcpy函数、strncpy函数:复制字符串 331 strcat函数、strncat函数:连接字符串 332 strcmp函数、strncmp函数:比较字符串的大小关系 332 atoi函数、atol函数、atof函数:转换字符串 333 总结 336 第12章 结构体 339 12-1 结构体 340 数据关联性 340 结构体 342 结构体成员和运算符 344 成员的初始化 345 结构体成员和->运算符 346 结构体和typedef 348 结构体和程序 350 聚合类型 351 返回结构体的函数 351 命名空间 353 结构体数组 353 派生类型 355 12-2 作为成员的结构体 356 表示坐标的结构体 356 具有结构体成员的结构体 357 总结 361 第13章 文件处理 363 13-1 文件与流 364 文件与流 364 标准流 365 FILE型 365 打开文件 365 关闭文件 368 打开与关闭文件示例 369 文件数据汇总 370 写入日期和时间 372 获取上一次运行时的信息 376 显示文件内容 378 文件的复制 380 13-2 文本和二进制 382 在文本文件中保存实数 382 文本文件和二进制文件 383 在二进制文件中保存实数 384 显示文件自身 386 13-3 printf函数与scanf函数 389 printf函数:带格式输出 389 scanf函数:带格式的输入 393 总结 397 附录 C语言简介 399 C语言的历史 400 K&R——C语言的圣经 400 C语言标准规范 400 结语 402 参考文献 405

2019-03-22

机器学习实践测试驱动的开发方法.[美]Matthew Kirk(带书签文字版).pdf.rar

《机器学习实践:测试驱动的开发方法》面技术开发人员、CTO和咨询顾问人员,介绍了机器学习的基本原理,涵盖了测试驱动的机器学习、机器学习概述、K近邻分类、朴素贝叶斯分类、隐马尔科夫模型、支持向量机、神经网络、聚类、核岭回归、模型改进与数据提取等内容。 第1章 测试驱动的机器学习 1 第2章 机器学习概述 13 第3章 K 近邻分类 17 第4章 朴素贝叶斯分类 45 第5章 隐马尔可夫模型 67 第6章 支持向量机 89 第7章 神经网络 113 第8章 聚类 137 第9章 核岭回归 153 第10章 模型改进与数据提取 169 第11章 结语 185

2019-03-20

机器70年:互联网、大数据、人工智能带来的人类变革.徐曦(带书签高清文字版).pdf

《机器70年 互联网、大数据、人工智能带来的人类变革》试图梳理我们的生活被一种社会实践力量改变的过程,这力量是以互联网、大数据、人工智能为代表的技术变革。尤其在近10年,技术发生了很多重要的变化,工具和平台都发生了实质性的演进,这些演进反映到社会和实际生活中被放大、不被理解、或被误解,并被错用、滥用。我专门著书探讨以互联网、大数据、人工智能为代表的技术变革,是因为这太重要了,足以在接下来的几年中“翻江倒海,换了人间”。 开篇章重建 001 文明重建和效率对决 002 是什么让我们不得不面对计算机带来的挑战 006 漫长的白手起家与短暂的权利让渡 009 数字殖民 010 从技术加速到加速的技术 013 工业4.0后机器与劳动力的博弈 016 遥远的成熟期 018 第一章质疑 025 机器的生命体征 026 失速的“摩尔定律” 028 夜不闭户 032 沉默的大多数 035 年轻人的崛起 036 社交网络对传播的全面改变 038 第二章势态 041 停不下来的革命 042 从效率工具到弥漫的空气 043 我们已被数字化 047 想象力比知识更重要 049 互联网是个有机智慧体 051 网络世界充斥着数学的逻辑 054 最了不起的生意 056 网络世界中的“基础设施” 061 从虚拟到模仿真实 064 第三章进退 067 保留精神,摆脱肉体 068 “盲目”之下的技术迷信 070 互联网确认了基于统计原则的社会形成 074 世界站在了规则的肩膀上 076 从PC到移动的数字鸿沟 080 大脑和机器的对接 083 第四章接入 087 快速发展的注意力经济 088 从独享到分享 091 从分享到免费 096 从信息驱动到沟通驱动 100 商业引擎 103 信息的社交化 105 第五章预知 109 互联网加速了权力崇拜 110 小小世界,没有烦恼 112 决策和影响集体的建议 115 人类进入了互联网时代,我们重新审视“合作”的意义 120 体系中的原体如何追逐互动 124 网络时代“听话”意味着什么 128 网络世界1 1<2的原理 132 一个线上的前现代社会 135 第六章数据 139 物理世界和信息世界的闸门 140 大数据改变我们的研究方式 142 数据是世界语言 145 大数据对商业的改造 147 数据到底应该“值多少钱” 151 最不可替代的人和最稀缺的资源 154 第七章治理 157 争论中的互联网治理 158 互联网是否有罪 159 从蛮荒到制度化 161 IP:互联网协议和知识产权 163 直到此刻我们才会注意安全 166 不该看的不看 168 关键互联网资源(CIR)的国际争端 170 捍卫公共利益 172 “ISIS成员行动安全手册”与网络治理边界的探讨 174 第八章争夺 179 人类改造计划的路线之争 180 技术和想象如何能塑造美好的虚拟世界 182 关于虚拟技术(VR AR)应用的诸多误解 186 从“GoogleCardboard VR 设计则例”解读出的不确定 189 对虚拟体验的所有想象 190 人类的小伙伴—人工智能(AI) 194 人工智能(AI)的理想 196 人工智能(AI)的机会 200 围绕AlphaGo我们还能想到些什么 203

2019-03-20

Excel疑难妙解(函数版).陈锡卢(带详细书签).pdf

《Excel疑难妙解(函数版)》的内容源自作者个人的经验、经历和观点,因此,作者选择用自己的语言来讲述个人以及很多网友关于Excel函数和公式方面遇到的实际问题。笔者力图以轻松、自然的语言和案例使行文简洁易读,减少读者对专业知识的理解难度,增加读者学习的兴趣和热情。《Excel疑难妙解(函数版)》共包括四篇,各篇内容按照读者学习流程循序渐进、环环相扣。 《Excel疑难妙解(函数版)》适用于各类需要使用Excel函数和公式高效办公的职场人士,包括:经常需要处理大量数据的专业数据分析人士,如市场、销售、财务、人力资源等方面的分析人员;各类市场研究人员、金融研究人员、管理顾问等专业人士;希望能高效、快速地解决工作表格数据的办公室白领人士;为进入职场做准备的学生朋友。 第一篇 初体验 第1章 求和函数 2 1.1 统计总销售量(SUM函数) 2 1.2 统计上海公司的销售量(SUMIF函数) 6 1.3 统计销售量在500至700的和(SUMIFS函数) 13 1.4 统计总销售金额(SUMPRODUCT函数) 16 第2章 计数函数 19 2.1 统计上班天数(COUNTA函数) 19 2.2 考勤统计(COUNTIF函数) 21 2.3 统计性别为男、学历为大专的人数(COUNTIFS函数) 23 第3章 逻辑函数 27 3.1 猴子分桃(IF函数) 27 3.2 旅游必备条件(AND函数) 29 3.3 让女朋友开心的条件(OR函数) 31 第4章 查找引用函数 34 4.1 根据姓名查询快递单号(VLOOKUP函数) 34 4.2 根据客户号逆向查询客户姓名(LOOKUP函数) 39 4.3 查询生肖的排位(MATCH函数) 44 4.4 路程导航(OFFSET函数) 47 4.5 间接引用多个表的合计(INDIRECT函数) 52 第5章 文本函数 57 5.1 姓名分离(LEFT/RIGHT函数) 57 5.2 获取省份(FIND函数) 59 5.3 区分手机与电话号码(LEN函数) 60 5.4 手机号加密(REPLACE函数) 63 第6章 日期和时间函数 66 6.1 日期运算 66 6.2 今天的日期及时间(TODAY/NOW函数) 69 6.3 获取间隔 N 个月的日期(DATE 函数) 71 6.4 计算工龄(DATEDIF函数) 73 第二篇 深了解 第7章 字符分离与合并 80 7.1 文字与数字分离(LEN函数) 80 7.2 提取金额(MIDB函数) 83 7.3 提取百分比数字(TEXT函数) 88 7.4 将数字拆分到每个单元格(COLUMN函数) 93 7.5 提取最后一个分割符的内容(TRIM函数) 95 7.6 将多列内容合并成一列(CONCATENATE函数) 98 7.7 将标题与内容合并在一个单元格换行显示(CHAR函数) 101 第8章 查找系列 105 8.1 查找单位与金额 105 8.2 查找数量最后及最早出现的时间 108 8.3 多条件查找对应的数量 112 8.4 根据产品编号查询产品名称及单价 115 8.5 根据姓名或者工号查询工资 118 8.6 根据姓名及月份查询工资 121 8.7 多表查询各地区店名的工程造价 123 8.8 员工信息查询,且带图片 127 8.9 取最接近 100 的数值 131 8.10 根据城市查询省份 136 8.11 将外币转换成人民币并汇总金额 138 第9章 求和计数系列 142 9.1 计算文本表达式的和 142 9.2 对带颜色的项目进行求和 149 9.3 对产品进行统计并引用自定义数字格式 153 9.4 动态统计金额 155 9.5 包含单位的金额求和 157 9.6 含姓名求总金额 161 9.7 含错误值求总数量 164 9.8 根据姓氏统计产量 167 9.9 同一单元格数据累加 171 9.10 统计销量前5名的和 174 9.11 统计各费用项目的计划和实际的合计数 176 9.12 统计不重复金额的和 179 9.13 统计每个应聘岗位的人数 181 9.14 客户号超过15位的统计次数出错 184 9.15 统计不重复产品名称的个数 186 9.16 统计组别为A3的不重复型号个数 189 9.17 SUM函数的取代函数SUMPRODUCT 192 第10章 提取不重复值及筛选符合条件的项目 195 10.1 提取不重复公司名称 195 10.2 将不重复数据从大到小排序 199 10.3 提取只去过1次的学校 202 10.4 查询工程师对应的所有奖金 205 10.5 依次查找每个店面对应的品牌和数量 209 第三篇 活运用 第11章 数据处理 214 11.1 标准日期格式大转换 214 11.2 统计指定日期的出货数 220 11.3 年度数据统计 223 11.4 年度数据核对 228 11.5 隆成小天使订单跟出货情况 232 11.6 各产品订单跟出货汇总 237 11.7 根据AQL抽样基准确认抽检数量 240 11.8 根据AQL抽样基准确认允许最大不良数 243 11.9 供应商分类管理 246 第12章 辅助图表展现 252 12.1 产品不良柏拉图 252 12.2 产品使用寿命直方图 257 12.3 供应商出货数量动态图 261 第13章 辅助数据透视表分析 264 13.1 统计每个等级的次数 264 13.2 统计每种颜色的出货数 265 13.3 统计每个月的检查时间 267 第四篇 解疑难 第14章 表格模板设计 272 14.1 动态汇总每个区域每个月的收入 272 14.2 提取42个表格名称并汇总数量 281 第15章 函数的瓶颈 285 15.1 多个工作簿合并汇总 285 15.2 几十万行数据的查询 290

2019-03-19

Javascript框架设计.司徒正美(带详细书签).pdf

《JavaScript框架设计》是一本全面讲解JavaScript框架设计的图书,详细地讲解了设计框架需要具备的知识,主要包括的内容为:框架与库、JavaScript框架分类、JavaScript框架的主要功能、种子模块、模块加载系统、语言模块、浏览器嗅探与特征侦测、样式的支持侦测、类工厂、JavaScript对类的支撑、选择器引擎、浏览器内置的寻找元素的方法、节点模块、一些有趣的元素节点、数据缓存系统、样式模块、个别样式的特殊处理、属性模块、jQuery的属性系统、事件系统、异步处理、JavaScript异步处理的前景、数据交互模块、一个完整的Ajax实现、动画引擎、API的设计、插件化、当前主流MVVM框架介绍、监控数组与子模板等。 《JavaScript框架设计》适合前端设计人员、JavaScript开 发者、移动UI设计者、程序员和项目经理阅读,也可作为大中专院校相关专业的师生学习用书和培训学校的教材。 第1章 种子模块 1 1.1 命名空间 1 1.2 对象扩展 3 1.3 数组化 4 1.4 类型的判定 6 1.5 主流框架引入的机制——domReady 14 1.6 无冲突处理 16 第2章 模块加载系统 18 2.1 AMD规范 18 2.2 加载器所在路径的探知 19 2.3 require方法 21 2.4 define方法 27 第3章 语言模块 31 3.1 字符串的扩展与修复 31 3.2 数组的扩展与修复 43 3.3 数值的扩展与修复 50 3.4 函数的扩展与修复 56 3.5 日期的扩展与修复 61 第4章 浏览器嗅探与特征侦测 64 4.1 判定浏览器 64 4.2 事件的支持侦测 67 4.3 样式的支持侦测 69 4.4 jQuery一些常用特征的含义 70 第5章 类工厂 72 5.1 JavaScript对类的支撑 72 5.2 各种类工厂的实现 77 5.2.1 相当精巧的库——P.js 77 5.2.2 JS.Class 80 5.2.3 simple-inheritance 82 5.2.4 体现JavaScript灵活性的库——def.js 84 5.3 es5属性描述符对OO库的冲击 88 第6章 选择器引擎 100 6.1 浏览器内置的寻找元素的方法 100 6.2 getElementsBySelector 102 6.3 选择器引擎涉及的知识点 106 6.4 选择器引擎涉及的通用函数 114 6.4.1 isXML 114 6.4.2 contains 115 6.4.3 节点排序与去重 117 6.4.4 切割器 121 6.4.5 属性选择器对于空白字符的匹配策略 123 6.4.6 子元素过滤伪类的分解与匹配 125 6.5 Sizzle引擎 127 第7章 节点模块 137 7.1 节点的创建 138 7.2 节点的插入 149 7.3 节点的复制 155 7.4 节点的移除 158 7.5 innerHTML、innerText与outerHTML的处理 161 7.6 一些奇葩的元素节点 164 7.6.1 iframe元素 164 7.6.2 object元素 174 7.6.3 video标签 179 第8章 数据缓存系统 185 8.1 jQuery的第1代缓存系统 185 8.2 jQuery的第2代缓存系统 190 8.3 mass Framework的第1代数据缓存系统 193 8.4 mass Framework的第2代数据缓存系统 196 8.5 mass Framework的第3代数据缓存系统 198 8.6 总结 199 第9章 样式模块 200 9.1 主体结构 201 9.2 样式名的修正 205 9.3 个别样式的特殊处理 206 9.3.1 opacity 206 9.3.2 user-select 208 9.3.3 background-position 208 9.3.4 z-index 209 9.3.5 盒子模型 210 9.3.6 元素的尺寸 211 9.3.7 元素的显隐 218 9.3.8 元素的坐标 222 9.4 元素的滚动条的坐标 228 第10章 属性模块 229 10.1 如何区分固有属性与自定义属性 231 10.2 如何判定浏览器是否区分固有属性与自定义属性 233 10.3 IE的属性系统的三次演变 234 10.4 className的操作 235 10.5 Prototype.js的属性系统 240 10.6 jQuery的属性系统 246 10.7 mass Framework的属性系统 249 10.8 value的操作 253 第11章 事件系统 256 11.1 onXXX绑定方式的缺陷 257 11.2 attachEvent的缺陷 258 11.3 addEventListener的缺陷 259 11.4 Dean Edward的addEvent.js源码分析 260 11.5 jquery1.8.2的事件模块概览 263 11.6 jQuery.event.add的源码解读 266 11.7 jQuery.event.remove的源码解读 269 11.8 jQuery.event.dispatch的源码解读 271 11.9 jQuery.event.trigger的源码解读 276 11.10 jQuery对事件对象的修复 280 11.11 滚轮事件的修复 286 11.12 mouseenter与mouseleave事件的修复 290 11.13 focusin与focusout事件的修复 293 11.14 旧版本IE下submit的事件代理的实现 295 11.15 oninput事件的兼容性处理 296 第12章 章异步处理 298 12.1 setTimeout与setInterval 299 12.2 Mochikit Deferred 301 12.3 JSDeferred 309 12.3.1 得到一个Deferred实例 310 12.3.2 Deferred链的实现 312 12.3.3 JSDeferred的并归结果 316 12.3.4 JSDeferred的性能提速 318 12.4 jQuery Deferred 321 12.5 Promise/A与mmDeferred 327 12.6 JavaScript异步处理的前景 334 第13章 数据交互模块 339 13.1 Ajax概览 339 13.2 优雅地取得XMLHttpRequest对象 339 13.3 XMLHttpRequest对象的事件绑定与状态维护 342 13.4 发送请求与数据 344 13.5 接收数据 346 13.6 上传文件 349 13.7 一个完整的Ajax实现 351 第14章 动画引擎 363 14.1 动画的原理 363 14.2 缓动公式 365 14.3 API的设计 368 14.4 mass Framework基于JavaScript的动画引擎 369 14.5 requestAnimationFrame 377 14.6 CSS3 transition 383 14.7 CSS3 animation 388 14.8 mass Framework基于CSS的动画引擎 390 第15章 插件化 398 15.1 jQuery的插件的一般写法 398 15.2 jQuery UI对内部类的操作 401 15.3 jQuery easy UI的智能加载与个别化制定 403 15.4 更直接地操作UI实例 406 第16章 MVVM 409 16.1 当前主流MVVM框架介绍 410 16.2 属性变化的监听 416 16.3 ViewModel 418 16.4 绑定 429 16.5 监控数组与子模板 437

2019-03-18

深入理解Java内存模型.程晓明(带书签文字版).pdf

基础 4 并发编程模型的分类 4 Java 内存模型的抽象 4 重排序 6 处理器重排序与内存屏障指令 7 happens-before 10 重排序 13 数据依赖性 13 as-if-serial 语义 13 程序顺序规则 15 重排序对多线程的影响 15 顺序一致性 19 数据竞争与顺序一致性保证 19 顺序一致性内存模型 19 同步程序的顺序一致性效果 22 未同步程序的执行特性 24 VOLATILE 28 volatile 的特性 28 volatile 写-读建立的 happens before 关系 30 volatile 写-读的内存语义 32 volatile 内存语义的实现 35 JSR-133 为什么要增强 volatile 的内存语义 40 锁 42 锁的释放-获取建立的 happens before 关系 42 锁释放和获取的内存语义 44 锁内存语义的实现 45 concurrent 包的实现 52 FINAL 55 写 final 域的重排序规则 56 读 final 域的重排序规则 57 如果 final 域是引用类型 60 为什么 final 引用不能从构造函数内“逸出” 63 final 语义在处理器中的实现 65 JSR-133 为什么要增强 final 的语义 65 总结 66 处理器内存模型 66 JMM,处理器内存模型与顺序一致性内存模型之间的关系 68 JMM 的设计 69 JMM 的内存可见性保证 72 JSR-133 对旧内存模型的修补 73 个人简介 74 参考文献 74

2019-03-18

代码之殇(原书第2版).[美]Eric Brechner(带书签文字版).pdf

如果你想了解礼仪,你会直接光顾网站MissManners;如果你在恋爱上遇到什么麻烦,你可能就会浏览论坛DearAbby; 如果你想了解微软到底出了什么状况以及一位名叫I.M.Wright的大个头到底是怎么办事的,那么这本书就是为你而写的。I.M.Wright就是在微软众所周知的EricBrechner。 《代码之殇(原书第2版)》是《代码大全》的姊妹篇,资深软件开发专家30余年工作经验结晶,被誉为“软件行业的财富”,微软公司软件工程师必读之书。 它从软件开发流程、技术、方法、项目管理、团队管理、人际沟通等多角度总结出90余个具有代表性的问题(大多数问题可能会给公司或软件项目带来毁灭性灾难),并给出了问题的解决方案和最佳实践,值得所有软件工程师和项目管理者研读。 本书根据主题的不同,将这90余个问题分为10章:第1章讨论如何通过管理风险、范围和沟通来保障项目按时完成;第2章介绍消除经验主义的大量过程改进的方法与技巧;第3章讨论消除低效率的策略;第4章主要讨论开发者与其他工种之间的关系; 第5章重点阐释软件质量问题;第6章解析软件设计的基本原理和错综复杂的本性;第7章探讨如何规划职业生涯;第8章分析工作与生活中存在的缺点的原因与纠正措施;第9章讨论如何进行有效管理;第10章分析如何成功应对一个软件业务所面临的挑战。 本书赞誉 译者序 序 前言 第1版前言 第1章 项目管理失当 2001年6月1日:“开发时间表、飞猪和其他幻想” 2001年10月1日:“竭尽所能,再论开发时间表” 2002年5月1日:“我们还开心吗?分诊的乐趣” 2004年12月1日:“向死亡进军” 2005年10月1日:“揭露真相” 2008年9月1日:“我得估算一下” 2009年5月1日:“一切从产品开始” 2009年9月1日:“按计划行事” 2010年5月1日:“敏捷的团队合作” 第2章 过程改进,没有灵丹妙药 2002年9月2日:“六西格玛?饶了我吧!” 2004年10月1日:“精益:比五香熏牛肉还好” 2005年4月1日:“客户不满” 2006年3月1日:“敏捷子弹” 2007年10月1日:“你怎么度量你自己?” 2010年10月1日:“有我呢。” 2010年11月1日:“我在缠着你吗?Bug报告。” 2010年12月1日:“生产第一” 2011年2月1日:“周期长度--生产力的老生常谈” 第3章 根除低下的效率 2001年7月1日:“迟到的规范书:生活现实或先天不足” 2002年6月1日:“闲置人手” 2004年6月1日:“我们开会的时候” 2006年7月1日:“停止写规范书,跟功能小组呆在一起” 2007年2月1日:“糟糕的规范书:该指责谁?” 2008年2月1日:“路漫漫,其修远--分布式开发” 2008年12月1日:“伪优化” 2009年4月1日:“世界,尽在掌握” 2011年4月1日:“你必须做个决定” 第4章 跨越工种 2002年4月1日:“现代临时夫妇?开发与测试” 2004年7月1日:“感觉性急--测试者的角色” 2005年5月1日:“模糊逻辑--君子之道” 2005年11月1日:“废除工种--有什么理由搞专业化?” 2009年1月1日:“持续工程的鬼话” 2011年5月1日:“测试不该不受尊重” 第5章 软件质量不是梦 2002年3月1日:“你对你的安全放心吗” 2002年11月1日:“牛肉在哪里?为什么我们要质量” 2004年4月1日:“软件发展之路--从手工艺到工程” 2005年7月1日:“复审一下这个--审查” 2006年10月1日:“对质量的大胆预测” 2008年5月1日:“碰撞测试:恢复” 2008年10月1日:“盯紧标称” 第6章 有时间就做软件设计 2001年9月1日:“错误处理的灾难” 2002年2月1日:“太多的厨师弄馊了一锅好汤--唯一权威” 2004年5月1日:“通过设计解决” 2006年2月1日:“质量的另一面--设计师和架构师” 2006年8月1日:“美妙隔离--更好的设计” 2007年11月1日:“软件性能:你在等什么?” 2008年4月1日:“为您效劳” 2008年8月1日:“我的试验成功了!(原型设计)” 2009年2月1日:“绿野中长满蛆了” 第7章 职业生涯历险记 2001年12月1日:“当熟练就是目标” 2002年10月1日:“人生是不公平的--考核曲线” 2006年11月1日:“职业阶段上的角色” 2007年5月1日:“与世界相连” 2007年11月1日:“找个好工作--发现新角色” 2007年12月1日:“要么带头做事,要么唯命是从,要么赶紧离开” 2008年7月1日:“猩猩套装中的机遇” 2010年3月1日:“我是很负责的” 2010年4月1日:“新来的伙计” 2010年6月1日:“升级” 2010年9月1日:“辉煌时代” 2011年1月1日:“个体领导者” 第8章 自我完善 2002年12月1日:“合作还是分道扬镳--协商” 2005年2月1日:“最好学会平衡生活” 2005年6月1日:“有的是时间” 2005年8月1日:“寓利于乐,控制你的上司” 2006年4月1日:“你在跟我讲吗?沟通的基础” 2007年3月1日:“不是公开与诚实那么简单” 2009年3月1日:“我听着呢” 2009年7月1日:“幻灯片” 2009年12月1日:“不要悲观” 2010年8月1日:“我捅娄子了” 2011年3月1日:“你也不赖” 第9章 成为管理者,而不是邪恶的化身 2003年2月1日:“不仅仅是数字--生产力” 2004年9月1日:“面试流程之外” 2004年11月1日:“最难做的工作--绩效不佳者” 2005年9月1日:“随波逐流--人才的保持和流动” 2005年12月1日:“管理我在行” 2006年5月1日:“比较的恶果--病态团队” 2008年3月1日:“必须改变:掌控改变” 2009年6月1日:“奖赏,很难” 2009年10月1日:“招人总是后悔” 2009年11月1日:“管理馊了” 2010年1月1日:“一对一与多对多” 2010年7月1日:“文化冲击” 第10章 微软,你会喜欢它的 2001年11月1日:“我是怎样懂得不再焦虑并爱上重组的” 2005年3月1日:“你的产品单元经理是个游民吗?” 2006年9月1日:“有幸成为Windows的主宰者” 2006年12月1日:“Google:严重的威胁还是糟糕的拼写?” 2007年4月1日:“中年危机” 2008年11月1日:“虚无主义及其他的创新毒药” 2010年2月1日:“我们是功能型的吗?” 术语表

2019-05-06

Redis设计与实现.黄健宏(epub+mobi+azw3).zip

《redis设计与实现》全面而完整地讲解了redis的内部机制与实现方式,对redis的大多数单机功能以及所有多机功能的实现原理进行了介绍,展示了这些功能的核心数据结构以及关键的算法思想,图示丰富,描述清晰,并给出大量参考信息。通过阅读本书,读者可以快速 有效地了解redis的内部构造以及运作机制,更好 更高效地使用redis。 《redis设计与实现》主要分为四大部分。第一部分“数据结构与对象”介绍了redis中的各种对象及其数据结构,并说明这些数据结构如何影响对象的功能和性能。第二部分“单机数据库的实现”对redis实现单机数据库的方法进行了介绍,包括数据库 rdb持久化 aof持久化 事件等。第三部分“多机数据库的实现”对redis的sentinel 复制 集群三个多机功能进行了介绍。第四部分“独立功能的实现”对redis中各个相对独立的功能模块进行了介绍,涉及发布与订阅 事务 lua脚本 排序 二进制位数组 慢查询日志 监视器等。本书作者专门维护了www.redisbook.com网站,提供带有详细注释的redis源代码,以及本书相关的更新内容。

2019-04-29

大数据基础编程、实验和案例教程.林子雨(带详细书签).pdf

本书以大数据分析全流程为主线,介绍了数据采集、数据存储与管理、数据处理与分析、数据可视化等环节典型软件的安装、使用和基础编程方法。本书内容涵盖操作系统(Linux和Windows)、开发工具(Eclipse)以及大数据相关技术、软件(Sqoop、Kafka、Flume、Hadoop、HDFS、MapReduce、HBase、Hive、Spark、MySQL、MongoDB、Redis、R、Easel.ly、D3、魔镜、ECharts、Tableau)等。同时,本书还提供了丰富的课程实验和综合案例,以及大量免费的在线教学资源,可以较好地满足高等院校大数据教学实际需求。 本书是《大数据技术原理与应用——概念、存储、处理、分析与应用》的“姊妹篇”,可以作为高等院校计算机、信息管理等相关专业的大数据课程辅助教材,用于指导大数据编程实践;也可供相关技术人员参考。 第1章 大数据技术概述 1 1.1 大数据时代 1 1.2 大数据关键技术 2 1.3 大数据软件 3 1.3.1 Hadoop 4 1.3.2 Spark 5 1.3.3 NoSQL数据库 5 1.3.4 数据可视化 6 1.4 内容安排 7 1.5 在线资源 8 1.5.1 在线资源一览表 9 1.5.2 下载专区 9 1.5.3 在线视频 10 1.5.4 拓展阅读 11 1.5.5 大数据课程公共服务平台 11 1.6 本章小结 12 第2章 Linux系统的安装和使用 13 2.1 Linux系统简介 13 2.2 Linux系统安装 13 2.2.1 下载安装文件 14 2.2.2 Linux系统的安装方式 14 2.2.3 安装Linux虚拟机 15 2.2.4 生成Linux虚拟机镜像文件 36 2.3 Linux系统及相关软件的基本使用方法 38 2.3.1 Shell 38 2.3.2 root用户 38 2.3.3 创建普通用户 38 2.3.4 sudo命令 39 2.3.5 常用的Linux系统命令 40 2.3.6 文件解压缩 40 2.3.7 常用的目录 41 2.3.8 目录的权限 41 2.3.9 更新APT 41 2.3.10 切换中英文输入法 43 2.3.11 vim编辑器的使用方法 43 2.3.12 在Windows系统中使用SSH方式登录Linux系统 44 2.3.13 在Linux中安装Eclipse 48 2.3.14 其他使用技巧 49 2.4 关于本书内容的一些约定 49 2.5 本章小结 50 第3章 Hadoop的安装和使用 51 3.1 Hadoop简介 51 3.2 安装Hadoop前的准备工作 52 3.2.1 创建hadoop用户 52 3.2.2 更新APT 52 3.2.3 安装SSH 52 3.2.4 安装Java环境 53 3.3 安装Hadoop 55 3.3.1 下载安装文件 55 3.3.2 单机模式配置 56 3.3.3 伪分布式模式配置 57 3.3.4 分布式模式配置 66 3.3.5 使用Docker搭建Hadoop分布式集群 75 3.4 本章小结 87 第4章 HDFS操作方法和基础编程 88 4.1 HDFS操作常用Shell命令 88 4.1.1 查看命令使用方法 88 4.1.2 HDFS目录操作 90 4.2 利用HDFS的Web管理界面 92 4.3 HDFS编程实践 92 4.3.1 在Eclipse中创建项目 93 4.3.2 为项目添加需要用到的JAR包 94 4.3.3 编写Java应用程序 96 4.3.4 编译运行程序 98 4.3.5 应用程序的部署 100 4.4 本章小结 102 第5章 HBase的安装和基础编程 103 5.1 安装HBase 103 5.1.1 下载安装文件 103 5.1.2 配置环境变量 104 5.1.3 添加用户权限 104 5.1.4 查看HBase版本信息 104 5.2 HBase的配置 105 5.2.1 单机模式配置 105 5.2.2 伪分布式配置 107 5.3 HBase常用Shell命令 109 5.3.1 在HBase中创建表 109 5.3.2 添加数据 110 5.3.3 查看数据 110 5.3.4 删除数据 111 5.3.5 删除表 112 5.3.6 查询历史数据 112 5.3.7 退出HBase数据库 112 5.4 HBase编程实践 113 5.4.1 在Eclipse中创建项目 113 5.4.2 为项目添加需要用到的JAR包 116 5.4.3 编写Java应用程序 117 5.4.4 编译运行程序 123 5.4.5 应用程序的部署 124 5.5 本章小结 124 第6章 典型NoSQL数据库的安装和使用 125 6.1 Redis安装和使用 125 6.1.1 Redis简介 125 6.1.2 安装Redis 125 6.1.3 Redis实例演示 127 6.2 MongoDB的安装和使用 128 6.2.1 MongDB简介 129 6.2.2 安装MongoDB 129 6.2.3 使用Shell命令操作MongoDB 130 6.2.4 Java API编程实例 136 6.3 本章小结 139 第7章 MapReduce基础编程 140 7.1 词频统计任务要求 140 7.2 MapReduce程序编写方法 141 7.2.1 编写Map处理逻辑 141 7.2.2 编写Reduce处理逻辑 141 7.2.3 编写main方法 142 7.2.4 完整的词频统计程序 143 7.3 编译打包程序 144 7.3.1 使用命令行编译打包词频统计程序 145 7.3.2 使用Eclipse编译运行词频统计程序 145 7.4 运行程序 154 7.5 本章小结 156 第8章 数据仓库Hive的安装和使用 157 8.1 Hive的安装 157 8.1.1 下载安装文件 157 8.1.2 配置环境变量 158 8.1.3 修改配置文件 158 8.1.4 安装并配置MySQL 159 8.2 Hive的数据类型 161 8.3 Hive基本操作 162 8.3.1 创建数据库、表、视图 162 8.3.2 删除数据库、表、视图 163 8.3.3 修改数据库、表、视图 164 8.3.4 查看数据库、表、视图 165 8.3.5 描述数据库、表、视图 165 8.3.6 向表中装载数据 166 8.3.7 查询表中数据 166 8.3.8 向表中插入数据或从表中导出数据 166 8.4 Hive应用实例: WordCount 167 8.5 Hive编程的优势 167 8.6 本章小结 168 第9章 Spark的安装和基础编程 169 9.1 基础环境 169 9.2 安装Spark 169 9.2.1 下载安装文件 169 9.2.2 配置相关文件 170 9.3 使用 Spark Shell编写代码 171 9.3.1 启动Spark Shell 171 9.3.2 读取文件 172 9.3.3 编写词频统计程序 174 9.4 编写Spark独立应用程序 174 9.4.1 用Scala语言编写Spark独立应用程序 175 9.4.2 用Java语言编写Spark独立应用程序 178 9.5 本章小结 182 第10章典型的可视化工具的使用方法 183 10.1 Easel.ly信息图制作方法 183 10.1.1 信息图 183 10.1.2 信息图制作基本步骤 183 10.2 D3可视化库的使用方法 186 10.2.1 D3可视化库的安装 187 10.2.2 基本操作 187 10.3 可视化工具Tableau使用方法 194 10.3.1 安装Tableau 195 10.3.2 界面功能介绍 195 10.3.3 Tableau简单操作 197 10.4 使用“魔镜”制作图表 202 10.4.1 “魔镜”简介 202 10.4.2 简单制作实例 202 10.5 使用ECharts图表制作 206 10.5.1 ECharts简介 206 10.5.2 ECharts图表制作方法 206 10.5.3 两个实例 210 10.6 本章小结 217 第11章 数据采集工具的安装和使用 218 11.1 Flume 218 11.1.1 安装Flume 218 11.1.2 两个实例 220 11.2 Kafka 225 11.2.1 Kafka相关概念 225 11.2.2 安装Kafka 225 11.2.3 一个实例 225 11.3 Sqoop 227 11.3.1 下载安装文件 227 11.3.2 修改配置文件 228 11.3.3 配置环境变量 228 11.3.4 添加MySQL驱动程序 228 11.3.5 测试与MySQL的连接 229 11.4 实例: 编写Spark程序使用Kafka数据源 230 11.4.1 Kafka准备工作 230 11.4.2 Spark准备工作 232 11.4.3 编写Spark程序使用Kafka数据源 234 11.5 本章小结 239 第12章 大数据课程综合实验案例 241 12.1 案例简介 241 12.1.1 案例目的 241 12.1.2 适用对象 241 12.1.3 时间安排 241 12.1.4 预备知识 241 12.1.5 硬件要求 242 12.1.6 软件工具 242 12.1.7 数据集 242 12.1.8 案例任务 242 12.2 实验环境搭建 243 12.3 实验步骤概述 244 12.4 本地数据集上传到数据仓库Hive 245 12.4.1 实验数据集的下载 245 12.4.2 数据集的预处理 246 12.4.3 导入数据库 249 12.5 Hive数据分析 253 12.5.1 简单查询分析 253 12.5.2 查询条数统计分析 255 12.5.3 关键字条件查询分析 256 12.5.4 根据用户行为分析 258 12.5.5 用户实时查询分析 259 12.6 Hive、MySQL、HBase数据互导 260 12.6.1 Hive预操作 260 12.6.2 使用Sqoop将数据从Hive导入MySQL 261 12.6.3 使用Sqoop将数据从MySQL导入HBase 265 12.6.4 使用HBase Java API把数据从本地导入到HBase中 269 12.7 利用R进行数据可视化分析 275 12.7.1 安装R 275 12.7.2 安装依赖库 277 12.7.3 可视化分析 278 12.8 本章小结 283 第13章 实验 284 13.1 实验一: 熟悉常用的Linux操作和Hadoop操作 284 13.1.1 实验目的 284 13.1.2 实验平台 284 13.1.3 实验步骤 284 13.1.4 实验报告 286 13.2 实验二: 熟悉常用的HDFS操作 286 13.2.1 实验目的 286 13.2.2 实验平台 286 13.2.3 实验步骤 287 13.2.4 实验报告 287 13.3 实验三: 熟悉常用的HBase操作 288 13.3.1 实验目的 288 13.3.2 实验平台 288 13.3.3 实验步骤 288 13.3.4 实验报告 290 13.4 实验四: NoSQL和关系数据库的操作比较 290 13.4.1 实验目的 290 13.4.2 实验平台 290 13.4.3 实验步骤 290 13.4.4 实验报告 293 13.5 实验五: MapReduce初级编程实践 294 13.5.1 实验目的 294 13.5.2 实验平台 294 13.5.3 实验步骤 294 13.5.4 实验报告 297 附录A 大数据课程实验答案 298 A.1 实验一: 熟悉常用的Linux操作和Hadoop操作 298 A.1.1 实验目的 298 A.1.2 实验平台 298 A.1.3 实验步骤 298 A.2 实验二: 熟悉常用的HDFS操作 303 A.2.1 实验目的 303 A.2.2 实验平台 303 A.2.3 实验步骤 303 A.3 实验三: 熟悉常用的HBase操作 323 A.3.1 实验目的 323 A.3.2 实验平台 323 A.3.3 实验步骤 323 A.4 实验四: NoSQL和关系数据库的操作比较 331 A.4.1 实验目的 331 A.4.2 实验平台 331 A.4.3 实验步骤 332 A.5 实验五: MapReduce初级编程实践 349 A.5.1 实验目的 349 A.5.2 实验平台 349 A.5.3 实验步骤 350 附录B Linux系统中的MySQL安装及常用操作 360 B.1 安装MySQL 360 B.2 MySQL常用操作 363 参考文献 367

2019-04-16

深入RabbitMQ.[美]Gavin M.Roy(带详细书签).pdf

本书对 RabbitMQ 这一业界主流的消息中间件做了全面介绍,给出了如何使用 RabbitMQ 构建消息通信系统的方法和实践。本书从 AMQP 协议出发,深入介绍各种消息属性,给出 RabbitMQ 在发送和消费消息上的特性和最佳实践,并阐述基于 RabbitMQ 所特有的交换器组件实现灵活的消息路由机制。同时,本书也讨论了如何利用 RabbitMQ 强大的集群机制实现分布式环境下的消息通信,并展示了如何在 RabbitMQ中,使用其他传输协议以及数据库集成等功能来实现各种定制化需求。本书的读者对象为从事互联网行业中各种分布式和服务化系统开发的研究人员、高等院校计算机相关专业的研究生和本科生,以及广大的 IT 爱好者。 第一篇 RabbitMQ和应用程序体系结构 1 第1章 RabbitMQ基础 3 1.1 RabbitMQ特性以及好处 4 1.1.1 RabbitMQ与Erlang 5 1.1.2 RabbitMQ与AMQP 6 1.2 谁在使用RabbitMQ,在怎么用 7 1.3 松耦合架构的优势 8 1.3.1 解耦你的应用 10 1.3.2 解耦数据库写入 11 1.3.3 无缝添加新功能 12 1.3.4 复制数据与事件 12 1.3.5 多主(Multi-Master)互联化数据与事件 13 1.3.6 高级消息队列模型 14 1.4 小结 16 第2章 使用AMQ协议与Rabbit进行交互 18 2.1 AMQP作为一种RPC传输机制 19 2.1.1 启动会话 20 2.1.2 调整正确的信道 20 2.2 AMQP RPC帧结构 21 2.2.1 AMQP帧组件 21 2.2.2 帧类型 22 2.2.3 将消息编组成帧 23 2.2.4 方法帧结构 24 2.2.5 内容头帧 26 2.2.6 消息体帧 26 2.3 使用协议 27 2.3.1 声明交换器 27 2.3.2 声明队列 28 2.3.3 绑定队列到交换器 29 2.3.4 发布消息到RabbitMQ 29 2.3.5 从RabbitMQ中消费消息 30 2.4 用Python编写消息发布者 32 2.5 从RabbitMQ中获取消息 36 2.6 小结 37 第3章 消息属性详解 38 3.1 合理使用属性 39 3.2 使用content-type属性创建显式的消息契约 41 3.3 通过gzip和content-encoding属性压缩消息大小 43 3.4 使用message-id和correlation-id引用消息 45 3.4.1 Message-id 45 3.4.2 Correlation-id 45 3.5 创建时间:timestamp属性 46 3.6 消息自动过期 47 3.7 使用delivery-mode平衡速度和安全性 48 3.8 使用app-id和user-id验证消息来源 49 3.8.1 app-id 50 3.8.2 user-id 51 3.9 使用type属性获取明细 51 3.10 使用reply-to属性实现动态工作流 52 3.11 使用消息头自定义属性 53 3.12 优先级属性 54 3.13 不能使用的属性:cluster-id/reserved 54 3.14 小结 55 第4章 消息发布的性能权衡 58 4.1 平衡投递速度与可靠投递 59 4.1.1 如果没有保证机制我们能期待什么 60 4.1.2 使用mandatory设置,RabbitMQ将不接受不可路由消息 62 4.1.3 发布者确认作为事务的轻量级替代方法 64 4.1.4 使用备用交换器处理无法路由的消息 66 4.1.5 基于事务的批量处理 68 4.1.6 使用HA队列避免节点故障 70 4.1.7 HA队列与事务 72 4.1.8 通过设置delivery-mode为2将消息持久化到磁盘 72 4.2 RabbitMQ回推 75 4.2.1 使用rabbitpy来检测连接状态 77 4.2.2 使用管理API管理连接状态 77 4.3 小结 78 第5章 消费消息,避免拉取 79 5.1 对比Basic.Get 和Basic.Consume 80 5.1.1 Basic.Get 80 5.1.2 Basic.Consume 82 5.2 优化消费者性能 84 5.2.1 使用no-ack模式实现更快的吞吐量 85 5.2.2 通过服务质量设置控制消费者预取 86 5.2.3 消费者使用事务 89 5.3 拒绝消息 90 5.3.1 Basic.Reject 90 5.3.2 Basic.Nack 91 5.3.3 死信交换器 92 5.4 控制队列 94 5.4.1 临时队列 94 5.4.2 永久队列 97 5.4.3 任意队列设置 99 5.5 小结 99 第6章 消息路由模式 101 6.1 通过direct交换器路由消息 102 6.1.1 创建应用架构 103 6.1.2 创建RPC工作者 107 6.1.3 编写简单的RPC发布者 110 6.2 通过fanout交换器广播消息 115 6.2.1 修改面部检测消费者 116 6.2.2 创建一个简单的图片哈希消费者 117 6.3 使用topic交换器有选择地路由消息 119 6.4 使用headers交换器有选择地路由消息 122 6.5 交换器性能基准 124 6.6 交换器间路由 125 6.7 使用一致性哈希交换器路由消息 127 6.8 小结 131 第二篇 管理数据中心或云中的RabbitMQ 133 第7章 RabbitMQ集群 135 7.1 集群简介 136 7.1.1 集群和管理界面 137 7.1.2 集群节点类型 138 7.1.3 集群和队列行为 139 7.2 集群设置 142 7.2.1 虚拟机设置 143 7.2.2 向集群中添加节点 144 7.3 小结 147 第8章 跨集群的消息分发 148 8.1 联合交换器和联合队列 149 8.1.1 联合交换器 149 8.1.2 联合队列 152 8.2 创建RabbitMQ虚拟机 153 8.2.1 创建首个实例 153 8.2.2 复制EC2实例 159 8.3 连接上游节点 162 8.3.1 定义联合中的上游节点 162 8.3.2 定义策略 164 8.3.3 利用上游集合 167 8.3.4 双向联合交换器 170 8.3.5 使用联合来升级集群 171 8.4 小结 173 第三篇 集成与定制 175 第9章 使用替代协议 177 9.1 MQTT和RabbitMQ 178 9.1.1 MQTT协议 178 9.1.2 通过MQTT发送消息 182 9.1.3 MQTT订阅者 184 9.1.4 MQTT插件配置 187 9.2 STOMP和RabbitMQ 189 9.2.1 STOMP协议 190 9.2.2 发布消息 191 9.2.3 消费消息 195 9.2.4 配置STOMP插件 198 9.2.5 在Web浏览器中使用STOMP 199 9.3 通过HTTP进行无状态发布 200 9.3.1 statelessd的由来 200 9.3.2 使用statelessd 201 9.3.3 运营架构 202 9.3.4 通过statelessd来发布消息 203 9.4 小结 203 第10章 数据库集成 205 10.1 PostgreSQL扩展:pg_amqp 206 10.1.1 安装pg_amqp扩展 207 10.1.2 配置pg_amqp扩展 209 10.1.3 通过pg_amqp发送消息 210 10.2 监听PostgreSQL通知 212 10.2.1 安装PostgreSQL LISTEN交换器 213 10.2.2 基于策略的配置 215 10.2.3 创建交换器 217 10.2.4 创建并绑定测试队列 217 10.2.5 通过NOTIFY发送消息 218 10.3 将消息存入InfluxDB中 219 10.3.1 InfluxDB的安装与设置 220 10.3.2 安装InfluxDB存储交换器 222 10.3.3 创建测试交换器 223 10.3.4 测试交换器 224 10.4 小结 227 附录 准备就绪 228 A.1 安装VirtualBox 228 A.2 安装Vagrant 230 A.3 设置Vagrant虚拟机 233 A.4 确认安装 234 A.5 小结 236

2019-04-11

渗透测试高手:打造固若金汤的安全网络.[美]Wil Allsopp(带详细书签).pdf

如何使用专业黑客的技术构建不可逾越的防线传统的渗透测试往往过于刻板,仅快速审计目标网络和应用程序的安全性。高价值目标必须进一步加固自己的IT基础设施以防御当前高度积极和专业的攻击者,而这只能依靠精通专业的攻击者手段和渗透测试技术的安全分析师与工程师来实现。 《渗透测试高手 打造固若金汤的安全网络》由曾为《财富》世界100强企业执行入侵与渗透测试的顶级安全专家撰写,旨在向读者传授证书培训或常规防御扫描器未涉及的针对并攻陷高安全性环境的技术。作者Wil Allsopp并未局限于Kali linux和Metasploit,而是向读者提供了一个复杂且高度现实的攻击模拟。他综合社会工程学、编程及漏洞利用等多学科的知识,向读者介绍如何: ● 发现并创建攻击向量 ● 在目标企业中隐蔽地移动,侦察网络和操作系统信息,并测试架构 ● 通过社会工程学策略完成初始攻击 ● 攻陷目标机器并在其上部署稳健的命令与控制基础设施 ● 使用高级数据渗漏技术——即使目标并未直接连接到互联网 ● 使用高级权限提升方法 ● 利用收集到的用户名和密码等凭据渗透至网络及操作系统 ● 使用VBA、Windows Scripting Host、C、Java、JavaScript及Flash等编写自定义的代码 第1章 医疗记录的安全性 1 1.1 高级持续性威胁仿真介绍 2 1.2 背景与任务简介 2 1.3 攻击载荷传递第一部分:学会使用VBA宏指令 5 1.3.1 如何不发动VBA攻击 5 1.3.2 检查VBA代码 9 1.3.3 避免使用shellcode 9 1.3.4 自动执行代码 10 1.3.5 使用VBA/VBS双传输器 11 1.3.6 尽量保持代码的通用 11 1.3.7 代码混淆 12 1.3.8 引诱用户 13 1.4 命令与控制第一部分:基础知识与要领 16 1.5 攻击 19 1.6 小结 22 1.7 练习 23 第2章 数据窃取研究 25 2.1 背景与任务介绍 26 2.2 攻击载荷传递第二部分:使用Java小程序 27 2.2.1 Java代码签名 27 2.2.2 编写一个Java小程序传输器 30 2.2.3 编造令人信服的借口 33 2.2.4 对传输器签名 34 2.3 攻击载荷持久性的相关要点 35 2.3.1 Windows操作系统 35 2.3.2 Linux操作系统 36 2.3.3 OSX操作系统 38 2.4 命令与控制第二部分:高级攻击管理 39 2.4.1 隐蔽性增强及多系统管理 39 2.4.2 实现命令结构 40 2.4.3 创建管理界面 41 2.5 攻击 42 2.5.1 态势感知 42 2.5.2 通过活动目录收集情报 43 2.5.3 分析活动目录的输出 44 2.5.4 攻击脆弱的二级系统 45 2.5.5 通过密码重用攻击主要的目标系统 46 2.6 小结 47 2.7 练习 47 第3章 21世纪的抢劫 49 3.1 可能奏效的方式 49 3.2 一切皆不安全 50 3.3 部门政治 50 3.4 APT建模与传统渗透测试 51 3.5 背景与任务简介 51 3.6 命令与控制第三部分:高级通道与数据窃取 52 3.6.1 有关入侵检测和安全运维中心的注意事项 55 3.6.2 SOC小组 56 3.6.3 SOC的运转机制 56 3.6.4 SOC反应时间与干扰 57 3.6.5 规避入侵检测系统 57 3.6.6 事件误报 58 3.7 攻击载荷传递第三部分:物理媒介 58 3.7.1 一种全新的社会工程学攻击方式 59 3.7.2 目标位置分析 59 3.7.3 收集目标 59 3.8 攻击 62 3.9 小结 64 3.10 练习 64 第4章 制药业 65 4.1 背景与任务简介 66 4.2 攻击载荷传递第四部分:客户端利用 67 4.2.1 Flash的诅咒 67 4.2.2 至少你可以弃用Flash 68 4.2.3 内存崩溃缺陷:相关注意事项 68 4.2.4 寻找攻击目标 70 4.3 命令与控制第四部分:集成Metasploit 72 4.3.1 基本的Metasploit集成 72 4.3.2 服务器配置 73 4.3.3 黑帽子/白帽子 73 4.3.4 反病毒软件 74 4.3.5 跳板攻击 75 4.4 攻击 75 4.4.1 硬盘防火墙失效 75 4.4.2 Metasploit验证 76 4.4.3 实质 77 4.4.4 Admin的益处 78 4.4.5 典型的子网克隆 81 4.4.6 恢复密码 81 4.4.7 创建数据清单 83 4.5 小结 85 4.6 练习 85 第5章 枪支弹药 87 5.1 背景与任务简介 88 5.2 攻击载荷传递第五部分:仿真勒索软件攻击 89 5.2.1 勒索软件简介 90 5.2.2 仿真勒索软件攻击的原因 90 5.2.3 勒索软件仿真模型 90 5.2.4 非对称加密 91 5.2.5 远程生成密钥 92 5.2.6 锁定目标文件 92 5.2.7 索要赎金 93 5.2.8 维持C2 94 5.2.9 结语 94 5.3 命令与控制第五部分:创建隐蔽的C2解决方案 94 5.3.1 洋葱路由器简介 94 5.3.2 torrc文件 95 5.3.3 配置C2代理使用Tor网络 96 5.3.4 Tor网桥 97 5.4 有关隐蔽性及部署的新策略 97 5.4.1 VBA Redux:另一种命令行攻击向量 97 5.4.2 PowerShell 98 5.4.3 FTP 98 5.4.4 Windows脚本宿主(WSH) 99 5.4.5 BITSadmin 99 5.4.6 对攻击载荷进行简单混淆 100 5.4.7 规避反病毒软件的其他策略 102 5.5 攻击 105 5.5.1 枪械设计工程师的回答 105 5.5.2 识别玩家 106 5.5.3 (更)灵活的VBA文档部署 108 5.5.4 电子邮件与保存的密码 109 5.5.5 键盘记录器与cookies 111 5.5.6 总结 111 5.6 小结 112 5.7 练习 113 第6章 犯罪情报 115 6.1 攻击载荷传递第六部分:使用HTA部署 116 6.2 在Microsoft Windows系统中提升权限 118 6.2.1 通过本地漏洞利用提升权限 119 6.2.2 利用自动化操作系统安装 122 6.2.3 利用任务调度器 123 6.2.4 利用易受攻击的服务 124 6.2.5 DLL劫持 126 6.2.6 挖掘Windows注册表 129 6.3 命令与控制第六部分:爬虫盒 129 6.3.1 爬虫盒说明书 130 6.3.2 Raspberry Pi及其组件介绍 130 6.3.3 通用输入/输出 131 6.3.4 选择操作系统 132 6.3.5 配置全硬盘加密 132 6.3.6 隐蔽性 136 6.3.7 使用3G/4G配置带外命令与控制 136 6.3.8 创建透明网桥 139 6.3.9 将Raspberry Pi用作远程键盘记录器的无线访问点 140 6.4 攻击 143 6.5 小结 145 6.6 练习 145 第7章 战争游戏 147 7.1 背景与任务简介 148 7.2 攻击载荷传递第七部分:USB霰弹攻击法 149 7.2.1 USB存储媒介 149 7.2.2 简单的社会工程学 151 7.3 命令与控制第七部分:高级自主数据渗漏 151 7.3.1 “自主”的含义 151 7.3.2 不同的数据出口方式 151 7.4 攻击 155 7.4.1 构建攻击保密网络的攻击载荷 157 7.4.2 隐蔽安装3G/4G软件 157 7.4.3 攻击目标并部署攻击载荷 158 7.4.4 有效的“突发式”数据渗漏 159 7.5 小结 159 7.6 练习 160 第8章 攻击出版社 161 8.1 简介 161 8.2 社会工程学中的高级概念 162 8.3 命令与控制中的实验概念 166 8.3.1 方案一:C2服务器引导代理管理 166 8.3.2 方案二:半自主C2代理管理 168 8.4 攻击载荷传递第八部分:令人眼花缭乱的网页内容 170 8.4.1 Java Web Start 171 8.4.2 Adobe Air 171 8.4.3 浅谈HTML5 172 8.5 攻击 172 8.6 小结 175 8.7 练习 175

2019-04-11

深度学习之PyTorch实战计算机视觉.唐进民(带详细书签).pdf

计算机视觉、自然语言处理和语音识别是目前深度学习领域很热门的三大应用方向,《深度学习之PyTorch实战计算机视觉》旨在帮助零基础或基础较为薄弱的读者入门深度学习,达到能够独立使用深度学习知识处理计算机视觉问题的水平。通过阅读本书,读者将学到人工智能的基础概念及Python 编程技能,掌握PyTorch 的使用方法,学到深度学习相关的理论知识,比如卷积神经网络、循环神经网络、自动编码器,等等。在掌握深度学习理论和编程技能之后,读者还会学到如何基于PyTorch 深度学习框架实战计算机视觉。《深度学习之PyTorch实战计算机视觉》中的大量实例可让读者在循序渐进地学习的同时,不断地获得成就感。 《深度学习之PyTorch实战计算机视觉》面向对深度学习技术感兴趣、但是相关基础知识较为薄弱或者零基础的读者。 第1章 浅谈人工智能、神经网络和计算机视觉 1 1.1 人工还是智能 1 1.2 人工智能的三起两落 2 1.2.1 两起两落 2 1.2.2 卷土重来 3 1.3 神经网络简史 5 1.3.1 生物神经网络和人工神经网络 5 1.3.2 M-P模型 6 1.3.3 感知机的诞生 9 1.3.4 你好,深度学习 10 1.4 计算机视觉 11 1.5 深度学习+ 12 1.5.1 图片分类 12 1.5.2 图像的目标识别和语义分割 13 1.5.3 自动驾驶 13 1.5.4 图像风格迁移 14 第2章 相关的数学知识 15 2.1 矩阵运算入门 15 2.1.1 标量、向量、矩阵和张量 15 2.1.2 矩阵的转置 17 2.1.3 矩阵的基本运算 18 2.2 导数求解 22 2.2.1 一阶导数的几何意义 23 2.2.2 初等函数的求导公式 24 2.2.3 初等函数的和、差、积、商求导 26 2.2.4 复合函数的链式法则 27 第3章 深度神经网络基础 29 3.1 监督学习和无监督学习 29 3.1.1 监督学习 30 3.1.2 无监督学习 32 3.1.3 小结 33 3.2 欠拟合和过拟合 34 3.2.1 欠拟合 34 3.2.2 过拟合 35 3.3 后向传播 36 3.4 损失和优化 38 3.4.1 损失函数 38 3.4.2 优化函数 39 3.5 激活函数 42 3.5.1 Sigmoid 44 3.5.2 tanh 45 3.5.3 ReLU 46 3.6 本地深度学习工作站 47 3.6.1 GPU和CPU 47 3.6.2 配置建议 49 第4章 卷积神经网络 51 4.1 卷积神经网络基础 51 4.1.1 卷积层 51 4.1.2 池化层 54 4.1.3 全连接层 56 4.2 LeNet模型 57 4.3 AlexNet模型 59 4.4 VGGNet模型 61 4.5 GoogleNet 65 4.6 ResNet 69 第5章 Python基础 72 5.1 Python简介 72 5.2 Jupyter Notebook 73 5.2.1 Anaconda的安装与使用 73 5.2.2 环境管理 76 5.2.3 环境包管理 77 5.2.4 Jupyter Notebook的安装 79 5.2.5 Jupyter Notebook的使用 80 5.2.6 Jupyter Notebook常用的快捷键 86 5.3 Python入门 88 5.3.1 Python的基本语法 88 5.3.2 Python变量 92 5.3.3 常用的数据类型 94 5.3.4 Python运算 99 5.3.5 Python条件判断语句 107 5.3.6 Python循环语句 109 5.3.7 Python中的函数 113 5.3.8 Python中的类 116 5.4 Python中的NumPy 119 5.4.1 NumPy的安装 119 5.4.2 多维数组 119 5.4.3 多维数组的基本操作 125 5.5 Python中的Matplotlib 133 5.5.1 Matplotlib的安装 133 5.5.2 创建图 133 第6章 PyTorch基础 142 6.1 PyTorch中的Tensor 142 6.1.1 Tensor的数据类型 143 6.1.2 Tensor的运算 146 6.1.3 搭建一个简易神经网络 153 6.2 自动梯度 156 6.2.1 torch.autograd和Variable 156 6.2.2 自定义传播函数 159 6.3 模型搭建和参数优化 162 6.3.1 PyTorch之torch.nn 162 6.3.2 PyTorch之torch.optim 167 6.4 实战手写数字识别 169 6.4.1 torch和torchvision 170 6.4.2 PyTorch之torch.transforms 171 6.4.3 数据预览和数据装载 173 6.4.4 模型搭建和参数优化 174 第7章 迁移学习 180 7.1 迁移学习入门 180 7.2 数据集处理 181 7.2.1 验证数据集和测试数据集 182 7.2.2 数据预览 182 7.3 模型搭建和参数优化 185 7.3.1 自定义VGGNet 185 7.3.2 迁移VGG16 196 7.3.3 迁移ResNet50 203 7.4 小结 219 第8章 图像风格迁移实战 220 8.1 风格迁移入门 220 8.2 PyTorch图像风格迁移实战 222 8.2.1 图像的内容损失 222 8.2.2 图像的风格损失 223 8.2.3 模型搭建和参数优化 224 8.2.4 训练新定义的卷积神经网络 226 8.3 小结 232 第9章 多模型融合 233 9.1 多模型融合入门 233 9.1.1 结果多数表决 234 9.1.2 结果直接平均 236 9.1.3 结果加权平均 237 9.2 PyTorch之多模型融合实战 239 9.3 小结 246 第10章 循环神经网络 247 10.1 循环神经网络入门 247 10.2 PyTorch之循环神经网络实战 249 10.3 小结 257 第11章 自动编码器 258 11.1 自动编码器入门 258 11.2 PyTorch之自动编码实战 259 11.2.1 通过线性变换实现自动编码器模型 260 11.2.2 通过卷积变换实现自动编码器模型 267 11.3 小结 273

2019-04-10

极简算法史:从数学到机器的故事.[法]吕克·德·布拉班迪尔(带书签文字版).pdf

数学、逻辑学、计算机科学三大领域实属一家,彼此成就,彼此影响。从古希腊哲学到“无所不能”的计算机,数字、计算、推理这些貌似简单的概念在三千年里融汇、碰撞。如何将逻辑赋予数学意义?如何从简单运算走向复杂智慧?这背后充满了人类智慧的闪光:从柏拉图、莱布尼茨、罗素、香农到图灵都试图从数学公式中证明推理的合理性,缔造完美的思维体系。他们是凭天赋制胜,还是鲁莽地大胆一搏?本书描绘了一场人类探索数学、算法与逻辑思维,并最终走向人工智能的梦想之旅,展现了哲学家、逻辑学家与数学家独特的思维方式,探讨了算法与人工智能对科学和社会的巨大影响。 第一部分 莱布尼茨之梦  1 从前的数学故事  3 最美的逻辑故事  13 有缘无分,只因意气不相投  23 第二部分 三座丰碑  43 托马斯·贝叶斯,真正的互联网巨星  45 香农证明,如何计算1 + 1  57 诺伯特·维纳与控制论  69 第三部分 自动化理性批判  79 连接互联网,却脱离现实  83 算法“布鲁斯”  88 诺查丹玛斯与大数据  95 全球化管理的重要性  100 死亡电脑社  107 人工智能:许多问题之一  112 后记  119 附录  125 答案  126 参考文献  133 人名索引  134

2019-04-08

Visual FoxPro9.0程序设计教程.金勤(带书签文字版).pdf

《Visual FoxPro9.0程序设计教程》《Visual FoxPro9.0程序设计教程》共分11章,主要内容包括:数据库系统概述,Visual FoxPro语言基础,数据表的建立与操作,数据库的基本操作,结构化程序设计基础,子程序与自定义函数,面向对象程序设计基础,常用表单控件的使用,表单设计应用,查询、视图及报表设计,应用程序的管理及编译等。

2019-04-07

Java Web从入门到精通(第2版).明日科技(带详细书签).pdf

《Java Web从入门到精通(第2版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了进行Java Web应用程序开发应该掌握的各方面技术。《Java Web从入门到精通(第2版)》共分21章,包括Java Web应用开发概述、HTML与CSS网页开发基础、JavaScript脚本语言、搭建开发环境、JSP基本语法、JSP内置对象、JavaBean技术、Servlet技术、过滤器和监听器、Java Web的数据库操作、EL(表达式语言)、JSTL标签、Ajax技术、Struts2基础、Struts2高级技术、Hibernate技术、Hibernate高级应用、Spring核心之IoC、Spring核心之AOP、JSP操作XML、清爽夏日九宫格日记网等。所有知识都结合具体实例进行介绍,涉及的程序代码给出了详细的注释,可以使读者轻松领会Java Web应用程序开发的精髓,快速提高开发技能。 《Java Web从入门到精通(第2版)》可作为软件开发入门者的自学用书,也可作为高等院校相关专业的教学参考书,还可供开发人员查阅、参考。 第1篇 Web开发基础 1 第1章 Java Web应用开发概述 2 1.1 程序开发体系结构 3 1.1.1 C/S体系结构介绍 3 1.1.2 B/S体系结构介绍 3 1.1.3 两种体系结构的比较 4 1.2 Web应用程序的工作原理 4 1.3 Web应用技术 5 1.3.1 客户端应用的技术 6 1.3.2 服务器端应用的技术 8 1.4 Java Web成功案例 9 1.5 常用网上资源 10 1.5.1 常用资源下载网 10 1.5.2 技术社区 11 1.6 小结 11 第2章 HTML与CSS网页开发基础 12 2.1 HTML标记语言 13 2.1.1 创建第一个HTML文件 13 2.1.2 HTML文档结构 14 2.1.3 HTML常用标记 15 2.1.4 表格标记 18 2.1.5 HTML表单标记 20 2.1.6 超链接与图片标记 25 2.2 HTML 5新增内容 26 2.2.1 新增的元素 27 2.2.2 新增的input元素类型 28 2.3 CSS样式表 28 2.3.1 CSS规则 29 2.3.2 CSS选择器 29 2.3.3 在页面中包含CSS 31 2.4 CSS 3的新特征 33 2.4.1 模块与模块化结构 33 2.4.2 一个简单的CSS 3实例 34 2.5 小结 36 2.6 实践与练习 36 第3章 JavaScript脚本语言 37 3.1 JavaScript概述 38 3.1.1 什么是JavaScript 38 3.1.2 JavaScript的主要特点 38 3.2 JavaScript语言基础 39 3.2.1 JavaScript的语法 39 3.2.2 JavaScript中的关键字 40 3.2.3 JavaScript的数据类型 41 3.2.4 变量的定义及使用 43 3.2.5 运算符的应用 44 3.3 流程控制语句 47 3.3.1 if条件判断语句 47 3.3.2 switch多分支语句 50 3.3.3 for循环语句 52 3.3.4 while循环语句 53 3.3.5 do…while循环语句 55 3.3.6 break与continue语句 56 3.4 函数 57 3.4.1 函数的定义 57 3.4.2 函数的调用 58 3.5 事件处理 59 3.5.1 什么是事件处理程序 59 3.5.2 JavaScript常用事件 59 3.5.3 事件处理程序的调用 60 3.6 常用对象 61 3.6.1 Window对象 61 3.6.2 String对象 65 3.6.3 Date对象 69 3.7 DOM技术 71 3.7.1 DOM的分层结构 71 3.7.2 遍历文档 72 3.7.3 获取文档中的指定元素 74 3.7.4 操作文档 75 3.8 小结 77 3.9 实践与练习 77 第4章 搭建开发环境 78 4.1 Java Web应用的开发环境概述 79 4.2 Tomcat的安装与配置 79 4.2.1 下载Tomcat 79 4.2.2 Tomcat的目录结构 81 4.2.3 修改Tomcat的默认端口 81 4.2.4 部署Web应用 81 4.3 Eclipse的下载与使用 82 4.3.1 Eclipse的下载与安装 82 4.3.2 启动Eclipse 84 4.3.3 Eclipse工作台 85 4.3.4 使用Eclipse开发Web应用 85 4.4 小结 90 4.5 实践与练习 90 第2篇 JSP语言基础 91 第5章 JSP基本语法 92 5.1 JSP页面概述 93 5.2 指令标识 94 5.2.1 page指令 95 5.2.2 include指令 97 5.2.3 taglib指令 99 5.3 脚本标识 99 5.3.1 JSP表达式 100 5.3.2 声明标识 100 5.3.3 代码片段 101 5.4 JSP注释 102 5.4.1 HTML中的注释 102 5.4.2 带有JSP表达式的注释 103 5.4.3 隐藏注释 105 5.4.4 动态注释 106 5.5 动作标识 106 5.5.1 包含文件标识 106 5.5.2 请求转发标识 109 5.5.3 传递参数标识 111 5.6 小结 112 5.7 实践与练习 112 第6章 JSP内置对象 113 6.1 JSP内置对象概述 114 6.2 request对象 114 6.2.1 访问请求参数 114 6.2.2 在作用域中管理属性 115 6.2.3 获取cookie 117 6.2.4 解决中文乱码 119 6.2.5 获取客户端信息 120 6.2.6 显示国际化信息 121 6.3 response对象 122 6.3.1 重定向网页 122 6.3.2 处理HTTP文件头 123 6.3.3 设置输出缓冲 123 6.4 session对象 124 6.4.1 创建及获取客户的会话 125 6.4.2 从会话中移动指定的绑定对象 125 6.4.3 销毁session 126 6.4.4 会话超时的管理 126 6.4.5 session对象的应用 126 6.5 application对象 128 6.5.1 访问应用程序初始化参数 129 6.5.2 管理应用程序环境属性 130 6.6 out对象 130 6.6.1 向客户端输出数据 130 6.6.2 管理响应缓冲 131 6.7 其他内置对象 132 6.7.1 获取会话范围的pageContext对象 132 6.7.2 读取web.xml配置信息的config对象 132 6.7.3 应答或请求的page对象 133 6.7.4 获取异常信息的exception对象 134 6.8 小结 135 6.9 实践与练习 135 第7章 JavaBean技术 136 7.1 JavaBean介绍 137 7.1.1 JavaBean概述 137 7.1.2 JavaBean种类 138 7.2 JavaBean的应用 141 7.2.1 获取JavaBean属性信息 141 7.2.2 对JavaBean属性赋值 143 7.2.3 在JSP页面中应用JavaBean 144 7.3 在JSP中应用JavaBean 148 7.3.1 解决中文乱码的JavaBean 148 7.3.2 在JSP页面中用来显示时间的JavaBean 151 7.3.3 数组转换成字符串 154 7.4 小结 157 7.5 实践与练习 157 第8章 Servlet技术 158 8.1 Servlet基础 159 8.1.1 Servlet结构体系 159 8.1.2 Servlet技术特点 159 8.1.3 Servlet与JSP的区别 160 8.1.4 Servlet代码结构 161 8.2 Servlet API编程常用接口和类 162 8.2.1 Servlet接口 162 8.2.2 ServletConfig接口 163 8.2.3 HttpServletRequest接口 163 8.2.4 HttpServletResponse接口 164 8.2.5 GenericServlet类 164 8.2.6 HttpServlet类 165 8.3 Servlet开发 165 8.3.1 Servlet创建 165 8.3.2 Servlet配置 166 8.4 小结 168 8.5 实践与练习 168 第9章 过虑器和监听器 169 9.1 Servlet过滤器 170 9.1.1 什么是过滤器 170 9.1.2 过滤器核心对象 171 9.1.3 过滤器创建与配置 172 9.1.4 字符编码过滤器 175 9.2 Servlet监听器 180 9.2.1 Servlet监听器简介 180 9.2.2 Servlet监听器的原理 180 9.2.3 Servlet上下文监听 180 9.2.4 HTTP会话监听 181 9.2.5 Servlet请求监听 182 9.2.6 Servlet监听器统计在线人数 183 9.3 Servlet 3.0新特性 186 9.3.1 新增注释 186 9.3.2 对文件上传的支持 191 9.3.3 异步处理 193 9.4 小结 194 9.5 实践与练习 194 第3篇 JSP高级内容 195 第10章 Java Web的数据库操作 196 10.1 JDBC技术 197 10.1.1 JDBC简介 197 10.1.2 JDBC连接数据库的过程 197 10.2 JDBC API 199 10.2.1 Connection接口 199 10.2.2 DriverManager类 200 10.2.3 Statement接口 201 10.2.4 PreparedStatement接口 202 10.2.5 ResultSet接口 203 10.3 JDBC操作数据库 204 10.3.1 添加数据 204 10.3.2 查询数据 207 10.3.3 修改数据 211 10.3.4 删除数据 213 10.3.5 批处理 215 10.3.6 调用存储过程 218 10.4 JDBC在Java Web中的应用 221 10.4.1 开发模式 221 10.4.2 分页查询 222 10.5 小结 229 10.6 实践与练习 229 第11章 EL(表达式语言) 230 11.1 EL概述 231 11.1.1 EL的基本语法 231 11.1.2 EL的特点 232 11.2 与低版本的环境兼容—禁用EL 232 11.2.1 使用斜杠“\”符号 232 11.2.2 使用page指令 233 11.2.3 在web.xml文件中配置元素 233 11.3 保留的关键字 233 11.4 EL的运算符及优先级 234 11.4.1 通过EL访问数据 235 11.4.2 在EL中进行算术运算 236 11.4.3 在EL中判断对象是否为空 237 11.4.4 在EL中进行逻辑关系运算 237 11.4.5 在EL中进行条件运算 239 11.5 EL的隐含对象 240 11.5.1 页面上下文对象 240 11.5.2 访问作用域范围的隐含对象 242 11.5.3 访问环境信息的隐含对象 243 11.6 定义和使用EL函数 246 11.6.1 定义和使用函数 246 11.6.2 定义和使用EL函数时常见的错误 248 11.7 小结 250 11.8 实践与练习 250 第12章 JSTL标签 251 12.1 JSTL标签库简介 252 12.2 JSTL的配置 253 12.3 表达式标签 255 12.3.1 输出标签 255 12.3.2 变量设置标签 257 12.3.3 变量移除标签 260 12.3.4 捕获异常标签 261 12.4 URL相关标签 263 12.4.1 导入标签 263 12.4.2 动态生成URL标签 265 12.4.3 重定向标签 266 12.4.4 传递参数标签 267 12.5 流程控制标签 268 12.5.1 条件判断标签 268 12.5.2 条件选择标签 270 12.5.3 条件测试标签 271 12.5.4 其他条件标签 272 12.6 循环标签 274 12.6.1 循环标签 274 12.6.2 迭代标签 276 12.7 小结 278 12.8 实践与练习 278 第13章 Ajax技术 279 13.1 当下谁在用Ajax 280 13.1.1 百度搜索提示 280 13.1.2 淘宝新会员免费注册 280 13.1.3 明日科技编程词典服务网 280 13.2 Ajax开发模式与传统开发模式的比较 281 13.3 Ajax使用的技术 282 13.4 使用XMLHttpRequest对象 284 13.4.1 初始化XMLHttpRequest对象 284 13.4.2 XMLHttpRequest对象的常用方法 285 13.4.3 XMLHttpRequest对象的常用属性 287 13.5 与服务器通信—发送请求与处理响应 288 13.5.1 发送请求 288 13.5.2 处理服务器响应 290 13.5.3 一个完整的实例—检测用户名是否唯一 291 13.6 解决中文乱码问题 294 13.6.1 发送请求时出现中文乱码 294 13.6.2 获取服务器的响应结果时出现中文乱码 295 13.7 Ajax重构 295 13.7.1 Ajax重构的步骤 295 13.7.2 应用Ajax重构实现实时显示公告信息 297 13.8 Ajax常用实例 298 13.8.1 级联下拉列表 298 13.8.2 显示进度条 302 13.9 小结 305 13.10 实践与练习 305 第4篇 流行框架与XML技术 306 第14章 Struts2基础 307 14.1 Struts2概述 308 14.1.1 理解MVC原理 308 14.1.2 Struts2框架的产生 309 14.1.3 Struts2的结构体系 309 14.2 Struts2入门 310 14.2.1 Struts2的获取与放置 310 14.2.2 第一个Struts2程序 311 14.3 Action对象 314 14.3.1 认识Action对象 314 14.3.2 请求参数的注入原理 315 14.3.3 Action的基本流程 315 14.3.4 什么是动态Action 316 14.3.5 动态Action的应用 317 14.4 Struts2的配置文件 320 14.4.1 Struts2的配置文件类型 320 14.4.2 Struts2的包配置 320 14.4.3 名称空间配置 321 14.4.4 Action相关配置 321 14.4.5 通配符实现简化配置 323 14.4.6 返回结果的配置 324 14.5 Struts2的开发模式 325 14.5.1 实现与Servlet API的交互 325 14.5.2 域模型DomainModel 326 14.5.3 驱动模型ModelDriven 327 14.6 典型应用 328 14.6.1 Struts2处理表单数据 328 14.6.2 使用Map类型的request、session和application 331 14.7 小结 334 14.8 实践与练习 334 第15章 Struts2高级技术 335 15.1 OGNL表达式语言 336 15.1.1 认识OGNL 336 15.1.2 Struts2框架中的OGNL 336 15.1.3 操作普通的属性与方法 338 15.1.4 访问静态方法与属性 341 15.1.5 访问数组 341 15.1.6 访问List、Set、Map集合 342 15.1.7 投影与选择 342 15.2 Struts2的标签库 343 15.2.1 数据标签的应用 343 15.2.2 控制标签的应用 347 15.2.3 表单标签的应用 349 15.3 拦截器的使用 350 15.3.1 了解拦截器 350 15.3.2 拦截器API 351 15.3.3 使用拦截器 352 15.4 数据验证机制 354 15.4.1 手动验证的实现 354 15.4.2 验证文件的命名规则 354 15.4.3 验证文件的编写风格 355 15.5 典型应用 356 15.5.1 Struts2标签下的用户注册 356 15.5.2 使用验证框架对数据校验 359 15.6 小结 361 15.7 实践与练习 361 第16章 Hibernate技术 362 16.1 初识Hibernate 363 16.1.1 理解ORM原理 363 16.1.2 Hibernate简介 363 16.2 Hibernate入门 364 16.2.1 获取Hibernate 364 16.2.2 Hibernate配置文件 365 16.2.3 了解并编写持久化类 366 16.2.4 Hibernate映射 367 16.2.5 Hibernate主键策略 368 16.3 Hibernate数据持久化 369 16.3.1 Hibernate实例状态 369 16.3.2 Hibernate初始化类 370 16.3.3 保存数据 371 16.3.4 查询数据 373 16.3.5 删除数据 374 16.3.6 修改数据 375 16.3.7 关于延迟加载 376 16.4 使用Hibernate的缓存 377 16.4.1 一级缓存的使用 377 16.4.2 配置并使用二级缓存 378 16.5 小结 380 16.6 实践与练习 380 第17章 Hibernate高级应用 381 17.1 实体关联关系映射 382 17.1.1 数据模型与领域模型 382 17.1.2 理解并配置多对一单向关联 382 17.1.3 理解并配置多对一双向关联 384 17.1.4 理解并配置一对一主键关联 386 17.1.5 理解并配置一对一外键关联 387 17.1.6 理解并配置多对多关联关系 389 17.1.7 了解级联操作 391 17.2 实体继承关系映射 392 17.2.1 类继承树映射成一张表 392 17.2.2 每个子类映射成一张表 394 17.2.3 每个具体类映射成一张表 395 17.3 Hibernate查询语言 396 17.3.1 了解HQL语言 396 17.3.2 实体对象查询 397 17.3.3 条件查询 398 17.3.4 HQL参数绑定机制 399 17.3.5 排序查询 399 17.3.6 聚合函数的应用 399 17.3.7 分组方法 400 17.3.8 联合查询 400 17.3.9 子查询 401 17.4 小结 402 17.5 实践与练习 402 第18章 Spring核心之IoC 403 18.1 Spring概述 404 18.1.1 初识Spring 404 18.1.2 Spring的获取 405 18.1.3 简单配置Spring 405 18.1.4 使用BeanFactory管理bean 406 18.1.5 AplicationContext的应用 407 18.2 依赖注入 408 18.2.1 什么是控制反转与依赖注入 409 18.2.2 bean的配置 410 18.2.3 Setter注入 410 18.2.4 构造器注入 411 18.2.5 引用其他的bean 412 18.2.6 匿名内部JavaBean的创建 413 18.3 自动装配 414 18.3.1 按bean名称装配 414 18.3.2 按bean类型装配 415 18.3.3 自动装配的其他方式 416 18.4 bean的作用域 417 18.4.1 了解Spring中的bean 417 18.4.2 singleton的作用域 418 18.4.3 prototype的作用域 419 18.5 对bean的特殊处理 419 18.5.1 初始化与销毁 420 18.5.2 自定义属性编辑器 420 18.6 小结 423 18.7 实践与练习 423 第19章 Spring核心之AOP 424 19.1 AOP概述 425 19.1.1 了解AOP 425 19.1.2 AOP的简单实现 427 19.2 Spring的切入点 428 19.2.1 静态切入点与动态切入点 428 19.2.2 深入静态切入点 429 19.2.3 深入切入点底层 430 19.2.4 Spring中其他切入点 430 19.3 Aspect对AOP的支持 431 19.3.1 了解Aspect 431 19.3.2 Spring中的Aspect 432 19.3.3 DefaultPointcutAdvisor切入点配置器 432 19.3.4 NameMatchMethodPointcutAdvisor切入点配置器 433 19.4 Spring持久化 433 19.4.1 DAO模式介绍 434 19.4.2 Spring的DAO理念 434 19.4.3 事务应用的管理 437 19.4.4 应用JdbcTemplate操作数据库 440 19.4.5 与Hibernate整合 441 19.5 小结 444 19.6 实践与练习 444 第20章 JSP操作XML 445 20.1 XML简介 446 20.1.1 XML文档结构 446 20.1.2 XML语法要求 447 20.1.3 为XML文档中的元素定义属性 448 20.1.4 XML的注释 448 20.1.5 处理字符数据 449 20.2 dom4j概述 451 20.2.1 dom4j简介 451 20.2.2 dom4j的下载与配置 451 20.3 创建XML文档 452 20.3.1 创建XML文档对象 452 20.3.2 创建根节点 453 20.3.3 添加注释 454 20.3.4 添加属性 454 20.3.5 创建子节点 454 20.3.6 设置节点的内容 455 20.3.7 设置编码 456 20.3.8 设置输出格式 456 20.3.9 输出XML文档 456 20.4 解析XML文档 457 20.4.1 构建XML文档对象 458 20.4.2 获取根节点 458 20.4.3 获取子节点 458 20.5 修改XML文档 459 20.5.1 修改节点 460 20.5.2 删除节点 461 20.6 典型应用 461 20.6.1 保存公告信息到XML文件 461 20.6.2 对保存到XML文件中的公告信息进行管理 464 20.7 小结 472 20.8 实践与练习 472 第5篇 项目实战 473 第21章 清爽夏日九宫格日记网 474 21.1 项目设计思路 475 21.1.1 功能阐述 475 21.1.2 网站预览 475 21.1.3 功能结构 476 21.1.4 文件夹组织结构 477 21.2 数据库和数据表设计 478 21.2.1 数据库设计 478 21.2.2 数据表设计 478 21.3 公共模块设计 479 21.3.1 编写数据库连接及操作的类 479 21.3.2 编写保存分页代码的JavaBean 482 21.3.3 配置解决中文乱码的过滤器 484 21.3.4 编写实体类 485 21.4 主界面设计 486 21.4.1 主界面概述 486 21.4.2 让采用DIV CSS布局的页面内容居中 487 21.4.3 主界面的实现过程 488 21.5 用户模块设计 489 21.5.1 用户模块概述 489 21.5.2 实现Ajax重构 490 21.5.3 用户注册的实现过程 492 21.5.4 用户登录的实现过程 502 21.5.5 退出登录的实现过程 505 21.5.6 找回密码的实现过程 506 21.6 显示九宫格日记列表模块设计 509 21.6.1 显示九宫格日记列表概述 509 21.6.2 展开和收缩图片 509 21.6.3 查看日记原图 512 21.6.4 对日记图片进行左转和右转 512 21.6.5 显示全部九宫格日记的实现过程 515 21.6.6 我的日记的实现过程 519 21.6.7 删除我的日记的实现过程 520 21.7 写九宫格日记模块设计 521 21.7.1 写九宫格日记模块概述 521 21.7.2 应用jQuery让PNG图片在IE 6下背景透明(选学) 522 21.7.3 填写日记信息的实现过程 523 21.7.4 预览生成的日记图片的实现过程 528 21.7.5 保存日记图片的实现过程 532 21.8 项目发布 534 21.9 小结 535

2019-04-07

C++语法详解.黄勇(带详细书签).pdf

《C++语法详解》对C++的语法进行了全面介绍和深入讲解,内容包括:C++整型、字符型、浮点型、声明、定义、typedef、运算符、表达式、左值、选择语句、循环语句、指针、数组、函数和标识符的作用域、类基础、类作用域及相关运算符、构造函数、复制构造函数、析构函数、名称空间、类中的成员、运算符(操作符)重载、继承、虚函数、多态性、对象模型、虚函数表、模板、I/O、异常、预处理器、typeid、强制类型转换和string类等。《C++语法详解》层次分明,由浅入深,各章节相对独立,语法示例短小精悍,方便对有疑惑的语法进行速查。学习完《C++语法详解》,读者不会再对C++的各种语法感到困惑。 《C++语法详解》适合有一定C++基础、对C++的语法有疑惑、想深入了解C++语法细节的人员阅读。《C++语法详解》同时也可以作为解决C++语法问题的参考书;对于学习过C++或已精通C++的人员,也是一本不错的资料查阅手册。 第1章 C++快速入门 第2章 整型、字符型和浮点型专题 2.1 基础 2.2 整型和sizeof 操作符 2.3 char(字符型) 2.4 bool(布尔型) 2.5 浮点型 2.6 符号常量和#define 预处理指令简介 第3章 声明、定义、复杂声明和typedef 专题 3.1 声明与定义 3.2 复杂声明和typedef 的使用 3.2.1 复杂声明 3.2.2 typedef 第4章 运算符、表达式和左值专题 4.1 赋值、左值和右值 4.2 表达式和运算符 4.2.1 基础 4.2.2 表达式的副作用和顺序点 4.2.3 运算符的优先级、结合性和操作数的求值顺序 4.2.4 运算符性质总结 4.3 运算符 4.3.1 二元算术运算符 4.3.2 关系运算符 4.3.3 逻辑运算符 4.3.4 赋值运算符 4.3.5 复合赋值运算符 4.3.6 递增和递减运算符 4.3.7 位运算符 4.3.8 条件运算符 4.3.9 逗号运算符 4.3.10 sizeof 运算符 4.4 类型转换 4.4.1 基础 4.4.2 各种类型转换 4.4.3 转换溢出处理 4.4.4 强制类型转换运算符 第5章 选择语句和循环语句专题 5.1 语句概念 5.2 if 语句 5.3 switch 语句 5.4 while 和do-while 语句 5.5 for 语句 5.6 continue 和break 语句 5.7 循环语句头定义的变量的作用域 5.8 goto 跳转语句简介 第6章 指针和数组专题 6.1 指针 6.1.1 指针的概念 6.1.2 &与*运算符 6.1.3 指针(变量)的声明、初始化 6.1.4 各种指针 6.1.5 指针的简单运算 6.2 数组 6.2.1 一维数组 6.2.2 多维数组 6.3 指针与数组 6.3.1 理解数组名 6.3.2 指针与数组的混合运算 6.3.3 数组指针(*p)[]和指针数组*p[] 6.4 动态分配内存new 关键字 6.4.1 内存管理基础 6.4.2 使用new 动态分配单个对象 6.4.3 使用new 动态创建数组 6.4.4 使用new 动态分配内存的类型分析 6.4.5 使用多级指针动态创建多维数组 6.4.6 delete 常见错误及内存错误 6.4.7 使用malloc/free 动态创建和释放内存简介 6.5 C 风格字符串 6.5.1 C 风格字符串 6.5.2 C 风格字符串的标准库函数 6.5.3 C 风格字符串的输入/输出 第7章 函数和标识符的作用域专题 7.1 函数基本语法规则. 7.1.1 函数声明、定义及形参的语法规则 7.1.2 函数调用、实参、返回值、return 语句语法规则 7.2 函数参数传递 7.2.1 指针形参和引用形参 7.2.2 数组形参 7.2.3 函数指针 7.2.4 默认参数与可变形参 7.2.5 内联函数、main 函数、extern"C"链接指示符 7.3 函数重载 7.4 函数匹配(或函数重载解析) 7.4.1 函数匹配的过程 7.4.2 候选函数的确定方法 7.4.3 确定最佳匹配函数的方法 7.4.4 完全匹配详解 7.5 作用域、存储持续期、链接性和存储类区分符 7.5.1 作用域 7.5.2 存储持续期、链接性与作用域 7.5.3 将程序写在多个文件中 第8章 类基础、类作用域及相关运算符专题 8.1 面向对象程序设计基本概念 8.2 类的声明/定义、类成员简介及相关运算符 8.2.1 类和对象的声明、定义 8.2.2 类成员简介、成员运算符、作用域解析运算符、访问控制符 8.3 类作用域 8.3.1 类作用域中的名称 8.3.2 类作用域中的名称解析 第9章 构造函数、复制构造函数和析构函数专题 9.1 构造函数与析构函数简介 9.1.1 构造函数、默认构造函数、单形参构造函数、explicit 关键字 9.1.2 析构函数 9.2 对象初始化 9.2.1 使用构造函数、默认构造函数初始化对象 9.2.2 使用成员初始化表初始化数据成员 9.2.3 使用复制构造函数初始化对象及临时对象 第10章 名称空间专题 10.1 名称空间基础 10.2 名称空间的分类 10.3 访问名称空间中的名称 10.4 名称空间中的名称解析 第11章 类中的成员专题 11.1 静态成员 11.1.1 静态数据成员 11.1.2 静态成员函数 11.2 const 成员、mutable 关键字、this 指针 11.3 对象数组、对象成员、数组成员和对象数组成员 11.3.1 对象数组 11.3.2 对象成员、数组成员和对象数组成员 11.4 嵌套类、局部类、友元. 11.4.1 嵌套类 11.4.2 局部类 11.4.3 友元 11.5 指向类成员的指针 11.6 枚举、联合(共用体)、位段(域) 11.6.1 枚举类型 11.6.2 联合(共用体)类型 11.6.3 位段(域) 第12章 运算符(操作符)重载专题 12.1 运算符重载基本概念 12.2 运算符重载示例 12.3 转换函数和重载解析 12.3.1 转换函数 12.3.2 有转换函数时的函数重载解析 12.3.3 带有类类型实参和在类作用域中调用函数时函数重载解析 12.3.4 重载运算符函数时的重载解析 12.3.5 仿函数与重载解析 12.4 重载new/delete 运算符和定位new/delete 12.4.1 重载new/delete 运算符 12.4.2 定位(布局)new 和delete 12.4.3 new 表达式和new 运算符函数总结 第13章 继承、虚函数与多态性专题 13.1 继承 13.1.1 继承基础及继承后的访问级别 13.1.2 继承下的构造函数与复制控制 13.1.3 父类与子类间的转换 13.1.4 继承下的名称解析、名称隐藏及函数重载解析 13.1.5 多重继承与虚基类 13.2 虚函数与多态性 13.2.1 多态性原理 13.2.2 虚函数 第14章 对象模型与虚函数表专题 14.1 对象模型与虚函数表基础、内存对齐、函数内部转换 14.1.1 对象模型简介 14.1.2 类成员的存储次序与内存对齐 14.1.3 编译器对函数的内部转换与名称改编 14.1.4 指向虚成员函数的指针 14.1.5 对成员函数的各种转换总结 14.2 各种C++对象模型 14.2.1 指针与类型的关系 14.2.2 VC++ 2010 访问虚函数表的三种方法 14.2.3 单继承下的对象模型 14.2.4 多重继承下的对象模型与this 指针调整 14.2.5 虚继承下的对象模型 14.3 编译器合成的各种构造函数和析构函数 14.3.1 编译器合成的默认构造函数 14.3.2 编译器合成的复制构造函数与按成员初始化 14.3.3 编译器合成的复制赋值操作符函数 14.3.4 编译器合成的析构函数 14.4 类对象创建和销毁时编译器实现原理 第15章 模板专题 15.1 模板基础 15.2 模板形参与模板实参详解 15.2.1 类型形/实参与非类型形/实参 15.2.2 默认模板实参 15.2.3 模板模板形/实参 15.3 模板实参推演与显式模板实参 15.3.1 基础 15.3.2 模板实参推演 15.3.3 显式模板实参 15.4 名称的识别与依赖实参的查询 15.4.1 依赖实参的查询(ADL) 15.4.2 typename 前缀和template 前缀 15.5 实例化 15.5.1 实例化基本规则 15.5.2 实例化的时机和位置点及两段式名称查询 15.5.3 显式实例化 15.6 类模板中的成员 15.7 模板特化 15.7.1 全局特化与局部特化 15.7.2 类模板成员的特化及定义 15.8 有模板时的函数重载解析 15.9 模板与友元 15.9.1 基础 15.9.2 把模板或其实例声明为友元 15.10 模板与继承 第16章 I/O 专题 16.1 I/O 流模型及I/O 类组织结构 16.1.1 I/O 流模型 16.1.2 I/O 类组织结构 16.2 标准输出流(ostream 类) 16.2.1 使用ostream 类的成员函数进行输出 16.2.2 控制输出时的格式 16.3 标准输入流(istream 类) 16.3.1 流状态 16.3.2 使用istream 类的成员函数进行输入 16.4 文件流 16.5 字符串流 16.6 C 风格字符串流 第17章 异常专题 第18章 预处理器、typeid 和强制类型转换专题 第19章 string 类专题 参考文献

2019-04-07

SQL经典实例.[美]Anthony Molinaro(带详细书签).pdf

本书详细介绍了各种数据库的SQL查询技术和一些基础的SQL查询语句,并且通过实例操作的方式讲解了如何插入、更新和删除数据等相关知识。另外,本书还介绍了如何使用SQL语句进行日期处理,以及一些其他的SQL语句查询操作,能够帮助你掌握相关的SQL知识。 第1章 检索记录 1 1.1 检索所有行和列 1 1.2 筛选行 2 1.3 查找满足多个查询条件的行 2 1.4 筛选列 3 1.5 创建有意义的列名 3 1.6 在WHERE 子句中引用别名列 4 1.7 串联多列的值 5 1.8 在SELECT 语句里使用条件逻辑 6 1.9 限定返回行数 6 1.10 随机返回若干行记录 8 1.11 查找Null 值 9 1.12 把Null 值转换为实际值 10 1.13 查找匹配项 10 第2章 查询结果排序 12 2.1 以指定顺序返回查询结果 12 2.2 多字段排序 13 2.3 依据子串排序 14 2.4 对含有字母和数字的列排序 15 2.5 排序时对Null 值的处理 17 2.6 依据条件逻辑动态调整排序项 23 第3章 多表查询 25 3.1 叠加两个行集 25 3.2 合并相关行 27 3.3 查找两个表中相同的行 28 3.4 查找只存在于一个表中的数据 30 3.5 从一个表检索与另一个表不相关的行 33 3.6 新增连接查询而不影响其他连接查询 34 3.7 确定两个表是否有相同的数据 36 3.8 识别并消除笛卡儿积 42 3.9 组合使用连接查询与聚合函数 44 3.10 组合使用外连接查询与聚合函数 48 3.11 从多个表中返回缺失值 51 3.12 在运算和比较中使用Null 54 第4章 插入、更新和删除 56 4.1 插入新记录 57 4.2 插入默认值 57 4.3 使用Null 覆盖默认值 58 4.4 复制数据到另一个表 59 4.5 复制表定义 59 4.6 多表插入 60 4.7 禁止插入特定列 62 4.8 更新记录 63 4.9 当相关行存在时更新记录 64 4.10 使用另一个表的数据更新记录 64 4.11 合并记录 67 4.12 删除全表记录 69 4.13 删除指定记录 69 4.14 删除单行记录 69 4.15 删除违反参照完整性的记录 70 4.16 删除重复记录 70 4.17 删除被其他表参照的记录 72 第5章 元数据查询 74 5.1 列举模式中的表 74 5.2 列举字段 75 5.3 列举索引列 76 5.4 列举约束 77 5.5 列举非索引外键 78 5.6 用SQL 生成SQL 81 5.7 描述Oracle 数据字典视图 83 第6章 字符串处理 85 6.1 遍历字符串 85 6.2 嵌入引号 87 6.3 统计字符出现的次数 88 6.4 删除不想要的字符 89 6.5 分离数字和字符数据 91 6.6 判断含有字母和数字的字符串 94 6.7 提取姓名的首字母 99 6.8 按照子字符串排序 102 6.9 根据字符串里的数字排序 103 6.10 创建分隔列表 109 6.11 分隔数据转换为多值IN 列表 114 6.12 按字母表顺序排列字符 119 6.13 识别字符串里的数字字符 124 6.14 提取第n 个分隔子字符串 130 6.15 解析IP 地址 136 第7章 数值处理 139 7.1 计算平均值 139 7.2 查找最小值和最大值 141 7.3 求和 142 7.4 计算行数 144 7.5 计算非Null 值的个数 146 7.6 累计求和 146 7.7 计算累计乘积 149 7.8 计算累计差 151 7.9 计算众数 152 7.10 计算中位数 155 7.11 计算百分比 158 7.12 聚合Null 列 160 7.13 计算平均值时去掉最大值和最小值 161 7.14 将含有字母和数字的字符串转换为数字 163 7.15 修改累计值 165 第8章 日期运算 168 8.1 年月日加减法 168 8.2 计算两个日期之间的天数 170 8.3 计算两个日期之间的工作日天数 172 8.4 计算两个日期之间相差的月份和年份 176 8.5 计算两个日期之间相差的秒数、分钟数和小时数 178 8.6 统计一年中有多少个星期一 180 8.7 计算当前记录和下一条记录之间的日期差 191 第9章 日期处理 196 9.1 判断闰年 196 9.2 计算一年有多少天 203 9.3 从给定日期值里提取年月日时分秒 205 9.4 计算一个月的第 一天和最后一天 207 9.5 列出一年中所有的星期五 209 9.6 找出当前月份的第 一个和最后一个星期一 216 9.7 生成日历 222 9.8 列出一年中每个季度的开始日期和结束日期 239 9.9 计算一个季度的开始日期和结束日期 243 9.10 填补缺失的日期 249 9.11 依据特定时间单位检索数据 258 9.12 比较特定的日期要素 259 9.13 识别重叠的日期区间 262 第10章 区间查询 268 10.1 定位连续的值区间 268 10.2 计算同一组或分区的行之间的差 273 10.3 定位连续值区间的开始值和结束值 281 10.4 为值区间填充缺失值 285 10.5 生成连续的数值 289 第11章 高级查询 293 11.1 结果集分页 293 11.2 跳过n 行记录 296 11.3 在外连接查询里使用OR 逻辑 298 11.4 识别互逆的记录 301 11.5 提取最靠前的n 行记录 302 11.6 找出最大和最小的记录 304 11.7 查询未来的行 305 11.8 行值轮转 308 11.9 对结果排序 311 11.10 删除重复项 312 11.11 查找骑士值 314 11.12 生成简单的预测 321 第12章 报表和数据仓库 329 12.1 变换结果集成一行 329 12.2 变换结果集成多行 331 12.3 反向变换结果集 339 12.4 反向变换结果集成一列 340 12.5 删除重复数据 343 12.6 变换结果集以实现跨行计算 346 12.7 创建固定大小的数据桶 347 12.8 创建预定数目的桶 351 12.9 创建水平直方图 355 12.10 创建垂直直方图 357 12.11 返回非分组列 360 12.12 计算简单的小计 365 12.13 计算所有可能的表达式组合的小计 368 12.14 识别非小计行 377 12.15 使用CASE 表达式标记行数据 379 12.16 创建稀疏矩阵 380 12.17 按照时间单位分组 382 12.18 多维度聚合运算 385 12.19 动态区间聚合运算 387 12.20 变换带有小计的结果集 394 第13章 层次查询 398 13.1 展现父子关系 399 13.2 展现祖孙关系 402 13.3 创建层次视图 407 13.4 找出给定的父节点对应的所有子节点 414 13.5 确认叶子节点、分支节点和根节点 418 第14章 杂项 426 14.1 使用SQL Server 的PIVOT 操作符创建交叉报表 426 14.2 使用SQL Server 的UNPIVOT 操作符逆向转换交叉报表 428 14.3 使用Oracle 的MODEL 子句变换结果集 430 14.4 从不固定位置提取字符串的元素 433 14.5 计算一年有多少天 436 14.6 查找含有数字和字母的字符串 437 14.7 在Oracle 中把整数转换成二进制 439 14.8 变换已排名的结果集 442 14.9 为两次变换后的结果集增加列标题 445 14.10 在Oracle 中把标量子查询转换为复合子查询 456 14.11 解析串行化的数据 458 14.12 计算比重 462 14.13 从Oracle 中生成CSV 格式的输出 464 14.14 找出不匹配某个格式的文本 469 14.15 使用内嵌视图转换数据 471 14.16 测试一组数据中是否存在某个值 472 附录A 窗口函数简介1 476 附录B 重温Rozenshtein 500

2019-04-01

没什么难的Docker入门与开发实战.熊昌隆(带详细书签).pdf

作为引领近几年容器虚拟化领域的技术,Docker的发展方兴未艾。但由于其出现不过数年,关于它的资料,特别是中文资料仍然相对匮乏,导致国内许多开发者对其感到陌生。本书正是以布道Docker为理念,由浅入深地从阐述Docker的基本概念、讲解常规使用方法、进行操作实践的演示、展示提高和进阶用法、剖析内部原理和底层架构等多个方面,全方面的展现Docker所具有的魅力。本书由概念及至实践,从不同方面向读者展现了Docker,实用性非常强,既可以作为一本学习Docker的入门教材,也能作为进行Docker操作实践的说明书,甚至可以作为提高和进阶的知识宝库。不论是对Docker认知程度不同,有着不同知识储备的人,还是处于程序软件研发部署流程中的开发人员、测试人员或运维人员,本书都有着很强的可阅读性。 第一部分 基础篇 1 第1章 初识Docker 1 1.1 虚拟化 2 1.1.1 虚拟化技术 2 1.1.2 虚拟化的分类 4 1.2 容器技术与Docker 6 1.2.1 容器技术 6 1.2.2 Docker简介 8 1.2.3 改变世界的发明 10 1.3 Docker的安装 10 1.3.1 在Ubuntu中安装Docker 11 1.3.2 在CentOS中安装Docker 12 1.3.3 在Windows中安装Docker 13 1.3.4 在Mac OS中安装Docker 15 1.3.5 在其他系统中安装Docker 16 1.4 Docker的优势 17 1.4.1 革命性的虚拟化方案 17 1.4.2 高效的容器技术 18 1.4.3 社区的力量 19 1.5 Docker的应用场景 20 1.5.1 超短时间部署运行 20 1.5.2 节约迁移时间 21 1.6 本章小结 21 第2章 镜像与仓库 22 2.1 镜像的概念 22 2.1.1 联合文件系统 22 2.1.2 Docker中的镜像 23 2.1.3 镜像的分层结构 24 2.1.4 镜像的写时复制 25 2.2 使用和管理镜像 26 2.2.1 获取镜像 26 2.2.2 列出镜像 28 2.2.3 获得镜像的详细信息 28 2.2.4 删除镜像 31 2.2.5 镜像的迁移 32 2.3 Docker Hub 33 2.3.1 镜像仓库 33 2.3.2 Docker Hub 34 2.3.3 注册Docker Hub账号 35 2.3.4 搜索镜像 36 2.3.5 共享自动构建镜像 38 2.4 搭建私有仓库 40 2.4.1 镜像分发服务 40 2.4.2 Docker Registry HTTP API 41 2.4.3 部署私有仓库 42 2.5 本章小结 44 第3章 管理和使用容器 45 3.1 管理容器 45 3.1.1 创建容器 45 3.1.2 容器的启动过程 48 3.1.3 列出容器 49 3.1.4 容器的命名 51 3.1.5 启动和停止 52 3.1.6 暂停和恢复 53 3.1.7 重启容器 54 3.1.8 删除容器 55 3.2 连接到容器 55 3.2.1 查看进程信息 56 3.2.2 查看容器信息 56 3.2.3 容器日志 62 3.2.4 衔接到容器 63 3.2.5 在容器中执行命令 64 3.3 容器的保存与迁移 65 3.3.1 提交容器更改 65 3.3.2 容器的导入/导出 68 3.4 本章小结 70 第4章 数据卷与网络 71 4.1 数据卷 71 4.1.1 关于数据卷 71 4.1.2 数据卷的特点 72 4.1.3 创建数据卷 73 4.1.4 挂载数据卷 74 4.1.5 删除数据卷 76 4.2 数据卷容器 77 4.2.1 关于数据卷容器 77 4.2.2 创建数据卷容器 78 4.2.3 连接数据卷容器 79 4.2.4 数据卷的迁移 80 4.3 网络基础 82 4.3.1 网络简介 82 4.3.2 查看网络配置 83 4.4 网络访问 85 4.4.1 宿主机端口映射 85 4.4.2 容器连接 87 4.5 本章小结 90 第5章 制作镜像 91 5.1 了解Dockerfile 91 5.1.1 Dockerfile简介 92 5.1.2 使用Dockerfile创建镜像 94 5.2 基础指令 96 5.2.1 FROM 97 5.2.2 MAINTAINER 97 5.3 控制指令 97 5.3.1 RUN 97 5.3.2 WORKDIR 99 5.3.3 ONBUILD 99 5.4 引入指令 100 5.4.1 ADD 100 5.4.2 COPY 102 5.5 执行指令 102 5.5.1 CMD 102 5.5.2 ENTRYPOINT 104 5.6 配置指令 107 5.6.1 EXPOSE 108 5.6.2 ENV 108 5.6.3 LABEL 109 5.6.4 USER 110 5.6.5 ARG 111 5.6.6 STOPSIGNAL 112 5.6.7 SHELL 113 5.7 特殊用法 113 5.7.1 环境变量 113 5.7.2 指令解析 114 5.7.3 忽略文件 116 5.8 本章小结 117 第二部分 实践篇 118 第6章 SSH服务 118 6.1 在Docker中使用SSH 118 6.1.1 SSH简介 119 6.1.2 SSH使用方法简介 119 6.1.3 数据卷管理容器 121 6.1.4 使用SSH服务容器 122 6.2 构建SSH服务镜像 124 6.2.1 构建方式比较 124 6.2.2 通过提交构建 125 6.2.3 使用Dockerfile构建 127 6.3 本章小结 131 第7章 Web服务器 132 7.1 Web服务简介 132 7.1.1 万维网与网站 132 7.1.2 Web服务 133 7.1.3 Web服务程序 135 7.2 Apache 135 7.2.1 Apache简介 135 7.2.2 安装Apache 136 7.2.3 构建Apache镜像 139 7.2.4 测试Apache容器 142 7.3 Nginx 143 7.3.1 关于Nginx 143 7.3.2 安装Nginx 144 7.3.3 构建Nginx镜像 146 7.3.4 测试Nginx镜像 148 7.4 Tomcat 148 7.4.1 Tomcat简介 149 7.4.2 安装Tomcat 149 7.4.3 构建Tomcat镜像 152 7.5 本章小结 153 第8章 数据库程序 155 8.1 MySQL 155 8.1.1 MySQL简介 156 8.1.2 安装MySQL 156 8.1.3 构建MySQL镜像 162 8.1.4 测试MySQL容器 164 8.2 MongoDB 166 8.2.1 MongoDB简介 166 8.2.2 安装MongoDB 167 8.2.3 构建MongoDB镜像 171 8.2.4 测试MongoDB容器 173 8.3 本章小结 176 第9章 缓存工具 177 9.1 Memcached 178 9.1.1 Memcached简介 178 9.1.2 安装Memcached 179 9.1.3 构建Memcached镜像 184 9.1.4 测试Memcached容器 186 9.2 Redis 188 9.2.1 Redis简介 188 9.2.2 安装Redis 188 9.2.3 构建Redis镜像 193 9.2.4 测试Redis容器 195 9.3 本章小结 196 第10章 动态处理程序 197 10.1 Java 197 10.1.1 Java简介 198 10.1.2 安装Java 198 10.1.3 构建Java镜像 204 10.1.4 测试Java容器 206 10.2 PHP 207 10.2.1 PHP简介 207 10.2.2 安装PHP 208 10.2.3 构建PHP镜像 214 10.2.4 测试PHP容器 216 10.3 Python 217 10.3.1 Python简介 217 10.3.2 安装Python 218 10.3.3 构建Python镜像 223 10.3.4 测试Python容器 224 10.4 Node.js 225 10.4.1 Node.js简介 225 10.4.2 安装Node.js 226 10.4.3 构建Node.js镜像 228 10.4.4 测试Node.js容器 230 10.5 本章小结 231 第11章 综合演练 232 11.1 演练目标 232 11.1.1 目标概述 232 11.1.2 代码编写 233 11.2 环境搭建 237 11.2.1 准备镜像 237 11.2.2 程序配置 239 11.3 项目运行 248 11.3.1 启动容器 248 11.3.2 测试项目 249 11.4 本章小结 253 第三部分 提高篇 254 第12章 网络进阶 254 12.1 网络实现 254 12.1.1 容器网络基础 255 12.1.2 网络模型 257 12.2 Docker中的网络 258 12.2.1 默认网络 258 12.2.2 自定义网络 261 12.2.3 容器与外部通信 262 12.2.4 容器间通信 264 12.3 网络实践 265 12.3.1 管理容器网络 265 12.3.2 容器连接网络 267 12.3.3 配置docker0网桥 269 12.3.4 自定义网桥 271 12.3.5 配置DNS 271 12.3.6 使用IPv6 273 12.4 本章小结 274 第13章 安全加固 275 13.1 深入理解Docker安全 275 13.1.1 命名空间隔离 276 13.1.2 资源控制组 277 13.1.3 内核能力机制 277 13.2 资源使用限制 278 13.2.1 通过控制组限制 278 13.2.2 通过ulimit限制 280 13.2.3 网络访问限制 280 13.3 校验与监控 281 13.3.1 镜像签名 281 13.3.2 运行状态监控 283 13.4 联级防护 284 13.4.1 组合虚拟化 284 13.4.2 文件系统安全 284 13.5 内核安全技术 285 13.5.1 Capability 286 13.5.2 SELinux 287 13.5.3 AppArmor 288 13.6 本章小结 289 第14章 Docker API 290 14.1 关于Docker API 290 14.1.1 通用操作接口 290 14.1.2 关于RESTful 291 14.1.3 Docker API的优势 292 14.1.4 Docker API的分类 293 14.2 使用Docker Remote API 293 14.2.1 关于Docker Remote API 294 14.2.2 Docker Remote API的版本 299 14.2.3 通过Remote API列出容器 300 14.2.4 通过Remote API列出镜像 302 14.3 使用Docker Registry API 303 14.3.1 关于Docker Registry API 304 14.3.2 Docker Registry API的主要功能 304 14.3.3 Docker Registry API的版本 305 14.3.4 通过Registry API拉取镜像 306 14.3.5 通过Registry API推送镜像 307 14.4 本章小结 309 第15章 管理工具 310 15.1 Docker Compose 310 15.1.1 Docker Compose简介 311 15.1.2 安装Docker Compose 313 15.1.3 Docker Compose配置文件 314 15.1.4 常用的Docker Compose命令 315 15.2 Docker Machine 318 15.2.1 Docker Machine简介 318 15.2.2 安装Docker Machine 320 15.2.3 Docker Machine常见命令 321 15.3 Docker Swarm 322 15.3.1 Docker Swarm简介 322 15.3.2 Docker Swarm结构 323 15.3.3 使用Docker Swarm 323 15.3.4 Docker Swarm常见命令 325 15.4 本章小结 327 第16章 Docker的技术架构 328 16.1 命名空间 328 16.1.1 关于Linux命名空间 328 16.1.2 命名空间的系统调用 329 16.1.3 命名空间的分类 330 16.2 控制组 332 16.2.1 关于Linux控制组 332 16.2.2 Cgroups的组成 333 16.2.3 容器与控制组 334 16.3 联合文件系统 336 16.3.1 关于UFS 336 16.3.2 Docker中的UFS 337 16.4 Docker Engine架构 338 16.4.1 Docker Engine的组成结构 338 16.4.2 Docker Daemon 339 16.4.3 Docker CLI 342 16.5 本章小结 344

2019-04-01

SSH框架整合实战教程.传智播客高教产品研发部(带详细书签).pdf

本书详细讲解了JavaEE中Struts2、Hibernate和Spring三大框架的基本知识和使用方法。对知识点的描述由浅入深、通俗易懂,使得原本复杂难于理解的知识,变得易于掌握。同时,在教材中配备了大量的案例,通过案例的演示,可以帮助读者更快理解和掌握SSH的核心技术。本书共17章,第1~6章主要讲解Struts2的相关知识,包括Struts2的基础知识、核心配置、拦截器、标签库、OGNL表达式和值栈、Struts2的文件上传和下载。第7~11章主要讲解Hibernate的起源、核心文件、持久化对象状态和一级缓存、Hibernate的关联关系映射、Hibernate的检索方式、Hibernate的事务处理和二级缓存等。第12~16章主要讲解Spring的基本应用、Spring中的Bean、Spring?AOP、Spring的数据库开发以及Spring的事务管理。第17章结合添加用户的案例对SSH框架的整合进行讲解。掌握了SSH框架技术,能够很好地适应企业开发的技术需要,为大型项目的开发奠定基础。 第1章 Struts2框架入门 1 1.1 Struts2简介 1 1.1.1 什么是Struts2 1 1.1.2 Struts2的下载和安装 2 1.2 Struts2的入门案例 5 1.3 Struts2的执行流程分析 10 1.4 本章小结 13 第2章 Struts2的核心配置 14 2.1 配置struts.xml文件 14 2.1.1 struts.xml文件 14 2.1.2 常量配置 15 2.1.3 包配置 17 2.1.4 包含配置 17 2.2 Action的配置 18 2.2.1 实现Action控制类 18 2.2.2 配置Action 20 2.2.3 使用通配符 21 2.3 Action访问Servlet API 22 2.4 Action处理请求参数 29 2.4.1 属性驱动 29 2.4.2 模型驱动 33 2.5 Result结果类型 34 2.5.1 配置Result 34 2.5.2 预定义的结果类型 35 2.5.3 dispatcher结果类型 36 2.5.4 redirect结果类型 36 2.6 本章小结 38 第3章 Struts2的拦截器 39 3.1 拦截器简介 39 3.1.1 拦截器概述 39 3.1.2 拦截器的工作原理 39 3.1.3 拦截器的配置 40 3.2 Struts2的内建拦截器 42 3.2.1 内建拦截器的介绍 42 3.2.2 内建拦截器的配置 44 3.3 自定义拦截器 45 3.3.1 实现自定义拦截器 45 3.3.2 应用案例——使用拦截器实现权限控制 46 3.4 本章小结 52 第4章 Struts2的标签库 53 4.1 Struts2标签库概述 53 4.1.1 Struts2标签库的分类 53 4.1.2 Struts2标签的使用 54 4.2 Struts2的控制标签 54 4.2.1 <s:if>标签、<s:elseif>标签、<s:else>标签 54 4.2.2 <s:iterator>标签 55 4.3 Struts2的数据标签 57 4.3.1 <s:property>标签 57 4.3.2 <s:a>标签 58 4.3.3 <s:debug>标签 58 4.3.4 <s:include>标签 59 4.3.5 <s:param>标签 60 4.4 Struts2的模板和主题 61 4.5 Struts2的表单标签 61 4.5.1 表单标签的公共属性 62 4.5.2 <s:form>标签 62 4.5.3 <s:submit>标签 63 4.5.4 <s:textfield>标签和<s:textarea>标签 63 4.5.5 <s:password>标签 63 4.5.6 <s:radio>标签 64 4.5.7 <s:checkbox>标签 65 4.5.8 <s:checkboxlist>标签 66 4.5.9 <s:select>标签 67 4.5.10 <s:optgroup>标签 68 4.5.11 <s:file>标签 69 4.5.12 <s:hidden>标签 70 4.5.13 <s:reset>标签 70 4.6 Struts2的非表单标签 72 4.7 本章小结 73 第5章 OGNL表达式和值栈 74 5.1 OGNL表达式 74 5.1.1 什么是OGNL 74 5.1.2 使用OGNL访问对象方法和静态方法 78 5.2 值栈 82 5.2.1 什么是值栈 82 5.2.2 值栈的内部结构 83 5.2.3 值栈在开发中的应用 85 5.2.4 通过EL访问值栈的数据 90 5.3 本章小结 91 第6章 Struts2的文件上传和下载 92 6.1 文件上传 92 6.1.1 文件上传的概述 92 6.1.2 应用案例——单文件上传 94 6.1.3 限制文件的大小和类型 97 6.2 文件下载 100 6.2.1 文件下载的概述 101 6.2.2 应用案例——文件下载 102 6.2.3 中文文件的下载 103 6.3 本章小结 106 第7章 初识Hibernate 107 7.1 Hibernate简介 107 7.1.1 为什么使用Hibernate 107 7.1.2 Hibernate的下载和目录结构 108 7.1.3 Hibernate的执行流程 110 7.2 第一个Hibernate程序 111 7.2.1 创建项目并导入JAR包 111 7.2.2 创建数据库及表 112 7.2.3 编写实体类(持久化类) 112 7.2.4 编写映射文件Customer.hbm.xml 114 7.2.5 编写核心配置文件hibernate.cfg.xml 115 7.2.6 编写测试类,进行增删改查操作 116 7.3 Hibernate的核心文件 122 7.3.1 Hibernate的映射文件.hbm.xml详解 122 7.3.2 Hibernate的配置文件hibernate.cfg.xml详解 126 7.4 Hibernate的核心API 129 7.4.1 Configuration 129 7.4.2 SessionFactory 130 7.4.3 Session 131 7.4.4 Transaction 131 7.4.5 Query 132 7.4.6 Criteria 134 7.5 本章小结 136 第8章 持久化对象状态和一级缓存 137 8.1 Hibernate持久化对象的状态 137 8.1.1 持久化对象的状态 137 8.1.2 持久化对象状态转换 142 8.2 Hibernate的一级缓存 143 8.2.1 什么是一级缓存 144 8.2.2 一级缓存常用操作 148 8.3 本章小结 151 第9章 Hibernate的关联关系映射 152 9.1 系统模型中实体设计的三种关联关系 152 9.1.1 一对多关联关系映射 153 9.1.2 多对多关联关系映射 159 9.2 关联关系中的反转与级联 164 9.2.1 反转操作 164 9.2.2 级联操作 166 9.3 本章小结 173 第10章 Hibernate的检索方式 175 10.1 Hibernate检索方式的概述 175 10.1.1 导航对象图检索方式 175 10.1.2 OID检索方式 175 10.1.3 HQL检索方式 175 10.1.4 QBC检索方式 176 10.1.5 本地SQL检索方式 177 10.2 HQL检索 177 10.2.1 指定别名 177 10.2.2 投影查询 179 10.2.3 动态实例查询 179 10.2.4 条件查询 181 10.2.5 分页查询 184 10.3 QBC检索 185 10.3.1 组合查询 185 10.3.2 分页查询 187 10.4 本章小结 188 第11章 Hibernate的事务处理和二级缓存 189 11.1 事务的概述 189 11.1.1 事务的特性 189 11.1.2 事务的并发问题 190 11.1.3 事务的隔离级别 190 11.2 Hibernate的事务处理 191 11.2.1 Hibernate中的事务配置 191 11.2.2 Hibernate事务处理方式之悲观锁 191 11.2.3 Hibernate事务处理方式之乐观锁 198 11.3 Hibernate的二级缓存 201 11.3.1 二级缓存的原理和分类 201 11.3.2 二级缓存的结构 201 11.3.3 二级缓存的并发访问策略和供应商 202 11.3.4 二级缓存的配置和使用 203 11.4 本章小结 207 第12章 Spring的基本应用 208 12.1 Spring基本知识 208 12.1.1 什么是Spring 208 12.1.2 Spring框架的优点 208 12.1.3 Spring的体系结构 209 12.1.4 Spring的下载及目录结构 210 12.2 Spring的IoC容器 213 12.2.1 BeanFactory 213 12.2.2 ApplicationContext 214 12.3 第一个Spring程序 214 12.4 依赖注入 217 12.5 本章小结 219 第13章 Spring中的Bean 220 13.1 Bean的配置 220 13.2 Bean的实例化 221 13.2.1 构造器实例化 221 13.2.2 静态工厂方式实例化 223 13.2.3 实例工厂方式实例化 224 13.3 Bean的作用域 226 13.3.1 作用域的种类 226 13.3.2 Singleton作用域 227 13.3.3 Prototype作用域 228 13.4 Bean的生命周期 228 13.5 Bean的装配方式 230 13.5.1 基于XML的装配 230 13.5.2 基于Annotation的装配 232 13.5.3 自动装配 236 13.6 本章小结 238 第14章 面向切面编程(Spring AOP) 239 14.1 Spring AOP简介 239 14.1.1 什么是AOP 239 14.1.2 AOP术语 239 14.2 手动代理 240 14.2.1 JDK动态代理 240 14.2.2 CGLIB代理 243 14.3 声明式工厂Bean 246 14.3.1 Spring通知类型 246 14.3.2 声明式Spring AOP 246 14.4 AspectJ开发 249 14.4.1 基于XML的声明式AspectJ 249 14.4.2 基于Annotation的声明式AspectJ 253 14.5 本章小结 256 第15章 Spring的数据库开发 258 15.1 Spring JDBC 258 15.1.1 Spring JDBCTemplate的解析 258 15.1.2 Spring JDBCTemplate的常用方法 260 15.2 本章小结 271 第16章 Spring事务管理 272 16.1 Spring事务管理的三个核心接口 272 16.2 TransactionProxyFactoryBean 274 16.3 Spring AOP XML方式 280 16.4 Spring AOP Annotation方式 282 16.5 本章小结 284 第17章 SSH框架整合 285 17.1 准备整合环境 285 17.1.1 准备数据库环境 285 17.1.2 配置Strust2环境 286 17.1.3 配置Spring环境 288 17.1.4 配置Hibernate环境 290 17.2 Spring和Hibernate的整合 291 17.2.1 介绍 292 17.2.2 使用hibernate.cfg.xml 文件 292 17.2.3 不使用hibernate.cfg.xml 298 17.3 Spring与Struts2的整合 301 17.3.1 介绍 301 17.3.2 Action创建交予Spring 301 17.3.3 Struts2自身创建Action 304 17.4 注解 306 17.5 本章小结 311

2019-03-31

Java Web编程从入门到实践.徐林林(带详细书签).pdf

Java Web开发是目前最流行的网络开发技术之一。本书由浅入深,结合大量的实例系统地讲解了关于Java Web开发方面的知识。全书内容包括Java Web开发的基础知识、Java Web开发环境的搭建、JSP技术详解、Servlet技术详解、JSP+Servlet+JavaBean开发模式、JDBC接口的使用方法、Hibernate持续层的使用方法、Struts 2技术详解、Spring框架详解、Spring+Hibernate+Struts 2开发实例等。为了便于读者理解,本书在讲解知识点时引用了大量的实例,并且通过一个在线购物系统的开发实例让读者对Java Web项目的开发有了更全面、深入的认识。 本书适合Java Web初、中级读者,如大中专院校学生、培训学校学员、网站开发爱好者、Java程序开发人员等。同时本书配以PPT教案,非常适合大中专院校作为教材使用。 第1篇 Java Web开发基础篇 1 第1章 Java Web开发概述 2 1.1 Java语言简介 2 1.1.1 Java语言概述 2 1.1.2 Java语言的特性 2 1.1.3 Java语言的发展历程 3 1.1.4 Java语言的发展前景 4 1.2 Java Web开发基本知识 4 1.2.1 Web应用程序的运行原理 4 1.2.2 Web服务器汇总 4 1.2.3 Java Web开发中的组件简介 5 1.3 .NET与J2EE两大主流平台简介 6 1.3.1 介绍.NET平台 7 1.3.2 介绍J2EE(Java的企业级版本) 7 1.4 常见问题及解答 7 1.5 小结 8 1.6 习题 8 第2章 搭建Java Web开发环境 9 2.1 下载安装JDK并配置环境变量 9 2.1.1 下载安装JDK 9 2.1.2 环境变量设置 10 2.2 用HelloWorld例子体验Java编译和运行 11 2.3 下载安装并测试Tomcat服务器 12 2.3.1 下载apache-tomcat-6.0.16 12 2.3.2 安装Tomcat 12 2.3.3 通过一个JSP文件测试Tomcat 12 2.4 安装MySQL数据库 13 2.4.1 下载MySQL 5.0 13 2.4.2 安装MySQL 5.0 14 2.4.3 安装MySQL数据库的JDBC驱动程序 15 2.5 Ant入门 15 2.5.1 下载并安装Ant 16 2.5.2 设置环境变量 16 2.5.3 分析Ant工程模板中的build.xml文件 17 2.5.4 分析Ant工程模板的目录结构 18 2.6 本章实例 20 2.6.1 编写一个JSP+MySQL的Java Web程序 20 2.6.2 使用Ant编译、部署示例2-3 22 2.7 上机实践 24 2.8 常见问题及解答 25 2.9 小结 26 2.10 习题 26 第3章 Eclipse入门 27 3.1 Eclipse概述 27 3.2 Eclipse开发环境的建立 27 3.2.1 Eclipse的下载和安装 27 3.2.2 下载和安装Tomcat插件 28 3.2.3 在Eclipse中集成Ant 29 3.3 用Eclipse开发一个简单的Java Web应用程序 31 3.4 上机实践 34 3.5 常见问题及解答 34 3.6 小结 35 3.7 习题 35 第2篇 JSP技术应用开发篇 37 第4章 JSP技术概述 38 4.1 动态网页技术 38 4.1.1 ASP技术 38 4.1.2 PHP技术 39 4.1.3 JSP技术 40 4.2 JSP的运行原理 41 4.2.1 使用JSP出现的现象 41 4.2.2 根据现象揭示JSP的工作原理 43 4.3 为什么要使用JSP技术 45 4.4 开发第一个JSP页面 46 4.5 上机实践 48 4.6 常见问题及解答 49 4.7 小结 49 4.8 习题 49 第5章 JSP语法及应用分析 50 5.1 JSP文件的构成元素分析 50 5.1.1 一个典型的JSP文件 50 5.1.2 分析JSP文件中的注释 51 5.1.3 模板元素 52 5.1.4 脚本元素 53 5.1.5 指令元素 53 5.1.6 动作元素 54 5.2 脚本元素详解 54 5.2.1 脚本元素中的声明(Declaration) 54 5.2.2 脚本元素中的表达式(Expression) 55 5.2.3 脚本元素中的Scriptlet 55 5.3 指令元素详解 57 5.3.1 页面(page)指令元素 57 5.3.2 包含(include)指令元素 59 5.3.3 自定义标签(taglib)指令元素 61 5.4 动作元素详解 62 5.4.1 参数元素<jsp:param> 62 5.4.2 包含元素<jsp:include> 62 5.4.3 转发元素<jsp:forward> 64 5.4.4 属性设置元素<jsp:setProperty> 65 5.4.5 属性获取元素<jsp:getProperty> 66 5.4.6 JavaBean调用元素<jsp:useBean> 67 5.5 创建一个完整的JSP文件 69 5.6 上机实践 71 5.7 常见问题及解答 72 5.8 小结 72 5.9 习题 73 第6章 JSP内建对象讲解及实例讲解 74 6.1 内建对象介绍 74 6.1.1 使用out对象 74 6.1.2 使用request对象 75 6.1.3 使用response对象 76 6.1.4 使用sessioin对象 78 6.1.5 使用pageContext对象 80 6.1.6 使用application对象 82 6.1.7 使用exception对象 84 6.2 内建对象使用实例 85 6.2.1 不同页面数据共享 85 6.2.2 不同用户之间通信 87 6.3 上机实践 88 6.4 常见问题及解答 89 6.5 小结 89 6.6 习题 90 第7章 初步认识JavaBean 91 7.1 JavaBean基础 91 7.1.1 什么是JavaBean 91 7.1.2 JavaBean的特点 91 7.1.3 JavaBean的属性 92 7.1.4 JavaBean的方法 94 7.2 在JSP中使用JavaBean 94 7.3 使用JavaBean连接数据库 97 7.4 上机实践 101 7.5 常见问题及解答 102 7.6 小结 102 7.7 习题 102 第3篇 Servlet技术与Tomcat服务器篇 103 第8章 Servlet基础 104 8.1 Servlet介绍 104 8.1.1 什么是Servlet 104 8.1.2 Servlet的特点 105 8.1.3 JSP与Servlet的关系 106 8.2 Servlet的生命周期 109 8.3 开发、部署一个简单的Servlet程序 110 8.4 上机实践 113 8.5 常见问题及解答 114 8.6 小结 115 8.7 习题 115 第9章 Servlet的配置与使用 116 9.1 Servlet的基本配置 116 9.1.1 Servlet的名字、类和其他杂项的设置 116 9.1.2 Servlet初始化参数的设置 117 9.1.3 启动装入优先级的设置 119 9.1.4 Servlet的映射 120 9.2 使用HttpServlet处理客户端请求 121 9.2.1 处理Get请求doGet 121 9.2.2 处理Post请求doPost 122 9.2.3 HttpServlet的高级处理方法 123 9.3 使用Servlet监听 123 9.3.1 监听Servlet上下文信息 124 9.3.2 监听HTTP会话信息 125 9.3.3 监听客户端请求信息 127 9.4 开发Web应用过滤器 129 9.5 使用Servlet开发一个编码过滤器 131 9.6 上机实践 132 9.7 常见问题及解答 133 9.8 小结 134 9.9 习题 134 第10章 JSP、JavaBean和Servlet的配合使用 135 10.1 两种模式的分工方法 135 10.1.1 模式一(JSP+JavaBean)分工方法 135 10.1.2 模式二(JSP+JavaBean+Servlet)分工方法 135 10.2 两种模式的比较 136 10.2.1 两种模式的特点 136 10.2.2 应用特征的比较 137 10.3 JSP+JavaBean实例分析 137 10.3.1 案例说明 137 10.3.2 表示留言数据的JavaBean 138 10.3.3 用于执行数据库操作的JavaBean 140 10.3.4 填写留言板的界面 142 10.3.5 处理添加留言的JSP页面 143 10.3.6 查看留言消息的JSP 144 10.3.7 使用Ant编译和部署程序 145 10.3.8 运行 146 10.4 JSP+JavaBean+Servlet实例分析 146 10.5 上机实践 152 10.6 常见问题及解答 155 10.7 小结 155 10.8 习题 155 第4篇 数据库技术与Hibernate篇 157 第11章 数据库技术基本知识 158 11.1 主流数据库及常用SQL语句介绍 158 11.1.1 创建和删除数据库 158 11.1.2 创建和删除数据表 159 11.1.3 更改表的结构 160 11.1.4 向表中插入一条数据 160 11.1.5 从表中删除数据 160 11.1.6 更新表中的数据 161 11.1.7 创建和删除视图 161 11.2 JDBC技术及驱动程序概述 161 11.2.1 介绍JDBC 162 11.2.2 数据库驱动程序介绍 162 11.3 JDBC API使用介绍 163 11.3.1 使用Driver接口 163 11.3.2 使用DriverManager接口 164 11.3.3 使用Connection接口 165 11.3.4 使用Statement和PrepareStatement 165 11.3.5 使用ResultSet接口 166 11.4 本章实例 167 11.4.1 使用JDBC连接到MySQL 168 11.4.2 使用JDBC连接到SQL Server 2005 169 11.4.3 使用JDBC连接到SQL Server 2000 169 11.4.4 使用JDBC连接到Oracle 170 11.5 上机实践 170 11.6 常见问题及解答 171 11.7 小结 171 11.8 习题 171 第12章 使用JSP和Servlet调用JDBC 172 12.1 在JSP中使用JDBC访问数据库 172 12.1.1 JSP插入数据操作 172 12.1.2 JSP查询数据库操作 174 12.1.3 JSP更新数据操作 175 12.1.4 JSP删除数据操作 176 12.1.5 JSP其他数据库操作 176 12.2 JSP调用JavaBean访问数据库 177 12.3 在Servlet中使用JDBC访问数据库 180 12.4 使用JDBC实现数据分页显示 183 12.4.1 编写Servlet:PageCustomerServlet 183 12.4.2 编写JavaBean:PageBean、CustomerBean 184 12.4.3 编写JSP:pageContent、pagePlugin 186 12.4.4 运行分页显示实例 188 12.5 上机实践 188 12.6 常见问题及解答 189 12.7 小结 189 12.8 习题 189 第13章 Hibernate概述及实例分析 190 13.1 什么是数据持久化和ORM 190 13.2 Hibernate简介 191 13.3 配置Hibernate的开发环境 191 13.4 在线购物系统开发概述 192 13.5 开发在线购物系统 193 13.5.1 需求分析 193 13.5.2 概念机构设计 193 13.5.3 逻辑机构设计 194 13.6 创建JavaBean组件 195 13.7 创建Hibernate映射文件 197 13.8 创建Hibernate配置文件 199 13.9 创建数据库操作类:DBOperator 199 13.10 测试系统功能 203 13.11 上机实践 205 13.12 常见问题及解答 205 13.13 小结 206 13.14 习题 206 第14章 Hibernate的体系结构及接口 207 14.1 熟悉Hibernate的体系结构 207 14.2 掌握Hibernate实体对象的生命周期 208 14.2.1 瞬态(Transient) 208 14.2.2 持久态(Persistent) 208 14.2.3 游离态(Detached) 209 14.2.4 实体对象的状态转换 209 14.3 学会使用Hibernate API 212 14.3.1 使用Configuration类 212 14.3.2 使用SessionFactory接口 213 14.3.3 使用Session接口 213 14.3.4 使用Transaction接口 214 14.3.5 使用Query接口 214 14.3.6 使用Criteria接口 216 14.4 本章实例 216 14.5 上机实践 218 14.6 常见问题及解答 218 14.7 小结 219 14.8 习题 219 第15章 Hibernate的映射技巧 220 15.1 映射文件的配置 220 15.1.1 映射文件的格式 220 15.1.2 装载映射文件 223 15.2 映射一对多关联关系 224 15.2.1 多对一单向关联 224 15.2.2 实现双向关联 227 15.3 映射多对多关联关系 230 15.3.1 映射单向多对多关联 230 15.3.2 映射双向多对多关联 233 15.4 映射一对一关联关系 234 15.5 映射继承关系 237 15.6 本章实例 240 15.7 上机实践 242 15.8 常见问题及解答 243 15.9 小结 243 15.10 习题 244 第16章 Hibernate事务处理和缓存管理 245 16.1 Hibernate的事务处理 245 16.1.1 数据库事务的概念 245 16.1.2 数据库的隔离级别 246 16.1.3 了解Hibernate中的事务处理 247 16.1.4 并发控制 248 16.2 管理Hibernate缓存 249 16.2.1 缓存的基本原理 249 16.2.2 Hibernate的二级缓存结构 250 16.2.3 管理Hibernate的第一级缓存 251 16.2.4 管理Hibernate的第二级缓存 252 16.3 本章实例 255 16.3.1 在Hibernate中使用悲观锁 256 16.3.2 在Hibernate中使用乐观锁 259 16.4 上机实践 260 16.5 常见问题及解答 261 16.6 小结 262 16.7 习题 262 第5篇 Struts 2架构详解篇 263 第17章 MVC模式与Struts 2框架 264 17.1 MVC模式概述 264 17.1.1 MVC设计模式的思想 264 17.1.2 MVC处理请求的过程 265 17.1.3 MVC的优点 265 17.1.4 MVC和模式二(JSP+JavaBean+Servlet) 266 17.2 Struts 1简介 266 17.2.1 Struts 1的框架结构 266 17.2.2 Struts 1的处理流程 268 17.2.3 Struts 1的优缺点 268 17.3 Struts 2框架介绍 269 17.3.1 Struts 2的历史 269 17.3.2 Struts 2框架结构 269 17.3.3 Struts 2的配置文件 270 17.3.4 Struts 2控制器 272 17.3.5 Struts 2标签库 273 17.3.6 Struts 2和Struts 1的比较 273 17.4 常见问题及解答 274 17.5 小结 274 17.6 习题 274 第18章 Struts 2实例分析 275 18.1 搭建Struts 2开发环境 275 18.1.1 安装Struts 2 275 18.1.2 测试Struts 2是否正常工作 276 18.1.3 Struts 2和Eclipse集成 277 18.2 项目简介 278 18.3 编写配置文件 279 18.3.1 配置web.xml文件 279 18.3.2 配置struts.xml文件 280 18.4 创建控制器(Action类) 280 18.5 创建视图层 282 18.5.1 用于注册的register.jsp文件 282 18.5.2 用于显示注册成功的success.jsp 283 18.6 运行程序 283 18.7 使用ActionSupport类实现数据验证 284 18.8 运行验证 286 18.9 上机实践 286 18.10 常见问题及解答 287 18.11 小结 288 18.12 习题 288 第19章 Struts 2核心剖析 289 19.1 Struts 2的工作流程 289 19.2 Struts 2配置文件详解 295 19.2.1 web.xml的配置 295 19.2.2 struts.xml的配置 296 19.2.3 struts.properties配置文件 305 19.3 Struts 2的Action类 305 19.3.1 业务控制器Action的实现类 305 19.3.2 使用Struts 2框架提供的接口 307 19.3.3 使用Action类访问Servlet API 309 19.3.4 Action的配置 310 19.3.5 Action类方法的动态调用 311 19.4 拦截器 313 19.4.1 拦截器的思想 314 19.4.2 使用拦截器 314 19.5 Struts 2中使用ONGL 318 19.5.1 对象导航语言ONGL简介 318 19.5.2 Struts 2中使用ONGL 319 19.6 本章实例 321 19.7 上机实践 322 19.8 常见问题及解答 323 19.9 小结 323 19.10 习题 324 第20章 Struts 2框架技术 325 20.1 Struts 2的国际化操作 325 20.1.1 Struts 2实现国际化的原理 325 20.1.2 Struts 2实现国际化的一般步骤 326 20.1.3 使用不同范围的资源文件 331 20.1.4 加载资源文件的顺序 333 20.2 Struts 2的类型转换 334 20.2.1 预定义类型和日期类型的转换 334 20.2.2 复合类型的转换 336 20.2.3 复合类型集合的转换 339 20.2.4 Struts 2类型转换异常处理 341 20.3 Struts 2数据验证 341 20.3.1 使用validate()方法进行验证 341 20.3.2 使用配置文件进行验证 344 20.4 数据验证时国际化操作的实例分析 347 20.5 上机实践 349 20.6 常见问题及解答 351 20.7 小结 351 20.8 习题 351 第21章 Struts 2标签库 352 21.1 Struts 2标签库概述 352 21.1.1 什么是Struts 2标签 352 21.1.2 Struts 2标签库的组成 352 21.1.3 Struts 2标签库的使用 353 21.1.4 Struts 2和Struts 1标签的区别 354 21.2 Struts 2控制标签 354 21.2.1 循环标签iterator 354 21.2.2 选择标签if/elseif/else 357 21.2.3 集合连接标签append 358 21.2.4 子集标签subset 360 21.2.5 排序标签sort 361 21.3 数据标签 362 21.3.1 控制器调用标签action 362 21.3.2 JavaBean调用标签bean 364 21.3.3 值栈置顶标签push 366 21.3.4 调试标签debug 366 21.3.5 包含标签include 367 21.3.6 参数传递标签param 367 21.3.7 变量赋值标签set 367 21.3.8 地址标签url 368 21.3.9 值输出标签property 369 21.4 表单标签 369 21.4.1 复选框标签checkbox 369 21.4.2 复选框集合标签checkboxlist 370 21.4.3 组合框标签combobox 371 21.4.4 日期选择标签datetimepicker 372 21.4.5 下拉列表框标签select 373 21.4.6 单选框标签radio 374 21.4.7 选项组标签optgroup 374 21.4.8 其他常用表单标签 374 21.5 非表单标签 375 21.5.1 信息显示标签actionerrror和actionmessage 375 21.5.2 树形结构标签tree和treenode 376 21.6 本章实例 377 21.7 上机实践 379 21.8 常见问题及解答 379 21.9 小结 380 21.10 习题 380 第6篇 Spring框架及其使用篇 381 第22章 Spring基础 382 22.1 Spring架构概述 382 22.2 Spring的特点 383 22.3 Spring开发环境的简单配置 384 22.3.1 下载Spring 384 22.3.2 简单介绍Spring包 384 22.3.3 在Eclipse中配置Spring 385 22.4 开发一个简单的Spring应用程序 387 22.4.1 编写接口文件Hello.Java 387 22.4.2 编写实现接口的类 388 22.4.3 创建Spring的配置文件config.xml 389 22.4.4 创建用于主函数类 389 22.4.5 运行程序 390 22.5 常见问题及解答 391 22.6 小结 391 22.7 习题 391 第23章 Spring的Web架构 392 23.1 第一个Spring MVC例子 392 23.1.1 配置web.xml文件 392 23.1.2 编写用于输出的页面 393 23.1.3 创建控制器 393 23.1.4 创建Spring的配置文件 394 23.1.5 运行Spring MVC示例 395 23.1.6 使用JSTL视图技术 395 23.1.7 使用Ant实现这个例子 396 23.2 Spring MVC的控制器 398 23.2.1 核心控制器DispatcherServlet 398 23.2.2 控制器接口Controller 399 23.2.3 表单控制器SimpleFormController 399 23.3 Spring MVC视图 401 23.3.1 模型视图类ModelAndView 402 23.3.2 支持不同的视图 403 23.4 使用拦截器 404 23.5 数据验证 407 23.6 Spring和Struts 2整合 408 23.6.1 整合原理 408 23.6.2 整合步骤 409 23.7 一个Spring+Struts 2的开发实例 410 23.8 上机实践 412 23.9 常见问题及解析 413 23.10 小结 414 23.11 习题 414 第24章 使用Spring操作数据库 415 24.1 Spring框架的事务处理 415 24.1.1 传统的JDBC事务处理 415 24.1.2 Spring框架的事务处理 416 24.2 数据源DataSource的注入 421 24.3 PlatformTransactionManager接口的作用 422 24.4 使用JdbcTemplate访问数据 424 24.4.1 Template模式简介 424 24.4.2 JdbcTemplate的实现方式 425 24.5 Spring+Hibernate实例分析 427 24.6 上机实践 431 24.7 常见问题及解答 433 24.8 小结 433 24.9 习题 433 第25章 Spring+Hibernate+Struts 集成实例分析 434 25.1 项目需求和系统框架 434 25.1.1 项目需求概述 434 25.1.2 系统框架 434 25.2 数据库的设计 436 25.3 配置开发环境 436 25.3.1 web.xml文件的配置 436 25.3.2 Spring配置文件applicationContext.xml的配置 437 25.3.3 Struts 2配置文件struts.xml的配置 438 25.3.4 其他文件的配置 438 25.4 编写JavaBean组件 439 25.5 建立数据库访问组件(DBOperator) 439 25.5.1 定义接口Shopping 439 25.5.2 定义接口的实现类HibernateShopping 440 25.5.3 在Action类中调用HibernateShopping类 441 25.6 创建业务控制器 442 25.6.1 业务控制器的执行流程 442 25.6.2 在线购物系统Action类分析 445 25.7 创建视图组件 446 25.7.1 用户注册界面 446 25.7.2 修改用户信息界面 447 25.7.3 浏览商品详细信息界面 448 25.7.4 显示用户订单列表界面 449 25.8 运行在线购物系统 449 25.9 上机实践 450 25.10 常见问题及解答 450 25.11 小结 450 25.12 习题 451

2019-03-31

21天学通Java Web开发.卜炟(带详细书签).pdf

本书是Java Web开发的基础教程,针对没有接触过或还不是特别熟悉Java Web开发的读者,详细介绍了Java Web开发的基础概念及技术要点。全书分为6篇共21章内容,第一篇为Java Web基础篇,介绍了执行环境和开发环境的搭建及JSP的语法基础。第二篇为JSP 2.0开发篇,介绍了JSP指令元素、JSP动作元素、JSP内置对象、JSP和JavaBean等内容。第三篇为Servlet开发篇,介绍了Servlet的基础知识及Servlet监听器,以及过滤器的开发等内容。第四篇为使用设计模式篇,介绍了DAO和MVC这两个经典设计模式。第五篇为框架技术篇,介绍了Struts 2、Hibernate、Spring这三个目前非常流行的轻量级Java Web开发框架。第六篇为项目实战篇,通过整合前面的三个框架,开发一套用户管理系统。. 本书适合Java Web开发技术的初学者,也可作为大、中院校学生和培训班的教材。对于有一定Java Web开发技术基础,但还需要进一步学习的人员,本书也有较大的参考价值。 第一篇 Java Web基础篇 23 第1章 搭建开发环境(教学视频:53分钟) 23 1.1 下载并安装JDK 23 1.1.1 下载JDK 23 1.1.2 安装JDK 25 1.1.3 配置环境变量 26 1.1.4 一个简单的Java程序 27 1.2 下载并安装Tomcat 28 1.2.1 下载Tomcat 28 1.2.2 安装Tomcat 28 1.2.3 配置虚拟目录 30 1.2.4 一个简单的JSP程序 30 1.3 下载并安装Eclipse 30 1.3.1 下载Eclipse 31 1.3.2 安装Eclipse 31 1.4 下载并安装MyEclipse 31 1.4.1 下载MyEclipse 32 1.4.2 安装MyEclipse 32 1.5 使用MyEclipse进行Web开发 33 1.5.1 使用MyEclipse新建Web项目 33 1.5.2 MyEclipse中新建JSP页面 34 1.5.3 MyEclipse整合Tomcat 35 1.5.4 MyEclipse部署项目 38 1.6 小结 39 第2章 JSP的基础语法(教学视频:27分钟) 40 2.1 JSP简介 40 2.2 JSP运行机制 41 2.3 JSP脚本元素 42 2.3.1 JSP声明语句 43 2.3.2 JSP Scriptlets 43 2.3.3 JSP表达式 44 2.4 注释 45 2.5 综合练习 46 2.6 小结 48 2.7 习题 48 第二篇 JSP 2.0开发篇 50 第3章 JSP指令元素(教学视频:37分钟) 50 3.1 page指令 50 3.1.1 language属性 50 3.1.2 extends属性 51 3.1.3 import属性 51 3.1.4 session属性 52 3.1.5 buffer属性 52 3.1.6 autoFlush属性 52 3.1.7 isThreadSafe属性 52 3.1.8 info属性 52 3.1.9 errorPage属性 53 3.1.10 isErrorPage属性 53 3.1.11 contentType属性 53 3.1.12 pageEncoding属性 54 3.1.13 isELIgnored属性 55 3.2 include指令 55 3.2.1 包含文本文件 55 3.2.2 包含HTML文件 57 3.2.3 包含JSP文件 58 3.3 taglib指令 59 3.4 综合练习 60 3.5 小结 61 3.6 习题 61 第4章 JSP动作元素(教学视频:31分钟) 63 4.1 JSP动作元素分类 63 4.2 [jsp:include]动作元素 63 4.2.1 使用[jsp:include]动作元素包含静态的文件 64 4.2.2 使用[jsp:include]动作元素包含动态的文件 64 4.2.3 [jsp:include]和[%@ include%]的区别 65 4.3 [jsp:forward]动作元素 67 4.3.1 使用[jsp: forward ]动作元素实现页面跳转 67 4.3.2 跳转执行流程 68 4.4 [jsp:param]动作元素 69 4.4.1 [jsp:include]动作元素搭配[jsp:param]动作元素 69 4.4.2 [jsp:forward]动作元素搭配[jsp:param]动作元素 71 4.5 [jsp:plugin]、[jsp:params]和[jsp:fallback] 73 4.5.1 [jsp:plugin]动作元素 73 4.5.2 [jsp:params]动作元素 75 4.5.3 [jsp:fallback]动作元素 76 4.6 综合练习 77 4.7 小结 78 4.8 习题 78 第5章 JSP内置对象(教学视频:51分钟) 80 5.1 JSP内置对象分类 80 5.2 属性保存范围 81 5.2.1 page范围 81 5.2.2 request范围 82 5.2.3 session范围 84 5.2.4 application范围 86 5.2.5 移除属性 87 5.3 request对象 88 5.3.1 获得客户端请求参数 88 5.3.2 获得所有的参数名称 90 5.3.3 获得参数的所有参数值 92 5.3.4 获得封装所有参数值的Map 93 5.3.5 request对象的其他方法 94 5.4 response对象 95 5.4.1 实现页面跳转 95 5.4.2 实现页面自动刷新 96 5.4.3 实现页面自动跳转 96 5.5 out对象 97 5.5.1 使用out对象进行页面输出 97 5.5.2 使用out对象求得缓冲区使用大小 98 5.6 session对象 99 5.6.1 设置并获得session生命周期 99 5.6.2 获得session的其他信息 100 5.7 application对象 101 5.7.1 通过application对象获得服务器版本 101 5.7.2 通过application对象获得其他信息 102 5.8 pageContext对象 103 5.9 page对象 104 5.10 config对象 105 5.11 exception对象 105 5.12 综合练习 107 5.13 小结 109 5.14 习题 109 第6章 数据库操作(教学视频:9分钟) 111 6.1 下载并安装MySQL 111 6.1.1 下载MySQL 111 6.1.2 安装MySQL 112 6.2 JDBC驱动程序 112 6.2.1 下载并安装MySQL的JDBC驱动程序 112 6.2.2 加载JDBC驱动程序 113 6.3 JDBC连接MySQL数据库 114 6.3.1 创建数据库和数据表 114 6.3.2 连接MySQL数据库 115 6.4 语句对象Statement 116 6.4.1 添加记录 117 6.4.2 更新记录 118 6.4.3 删除记录 119 6.5 ResultSet结果集 120 6.5.1 获得所有记录 120 6.5.2 获得指定字段记录 122 6.5.3 获得指定起始位置和条数的记录 123 6.6 数据库的关闭操作 124 6.7 预处理语句对象PreparedStatement 125 6.7.1 添加记录 126 6.7.2 更新记录 127 6.7.3 删除记录 129 6.7.4 获得指定记录 130 6.8 综合练习 132 6.9 小结 134 6.10 习题 134 第7章 JSP和JavaBean(教学视频:34分钟) 135 7.1 JavaBean简单使用 135 7.1.1 JavaBean简介 135 7.1.2 定义JavaBean 135 7.1.3 在JSP中调用JavaBean 136 7.2 设置JavaBean属性 137 7.2.1 根据所有参数设置JavaBean属性 137 7.2.2 根据指定参数设置JavaBean属性 139 7.2.3 根据指定参数设置指定JavaBean属性 140 7.2.4 设置指定JavaBean属性为指定值 141 7.3 获得JavaBean属性 142 7.4 设置JavaBean的范围 143 7.4.1 设置page范围的JavaBean 143 7.4.2 设置request范围的JavaBean 144 7.4.3 设置session范围的JavaBean 145 7.4.4 设置application范围的JavaBean 147 7.5 移除JavaBean 148 7.6 综合练习 150 7.7 小结 151 7.8 习题 151 第8章 EL表达式(教学视频:49分钟) 153 8.1 EL运算符 153 8.1.1 算术运算符 153 8.1.2 关系运算符 154 8.1.3 逻辑运算符 155 8.1.4 条件运算符 157 8.1.5 验证运算符 158 8.1.6 括号运算符及运算符的优先级 159 8.2 EL内置对象 160 8.2.1 .与[ ]运算符 160 8.2.2 与存储有关的内置对象 161 8.2.3 与输入有关的内置对象 162 8.2.4 cookie内置对象 163 8.2.5 header内置对象 165 8.2.6 initParam内置对象 165 8.2.7 pageContext内置对象 166 8.3 EL存取器 167 8.3.1 使用存取器读取JavaBean中的数据 167 8.3.2 使用存取器读取Map中的数据 170 8.3.3 使用存取器读取数组中的数据 171 8.3.4 存取器复杂应用 172 8.4 综合练习 173 8.5 小结 175 8.6 习题 175 第9章 JSTL标签库(教学视频:75分钟) 177 9.1 JSTL核心标签 177 9.1.1 [c:set]标签 177 9.1.2 [c:out]标签 177 9.1.3 [c:remove]标签 178 9.1.4 [c:if]标签 179 9.1.5 [c:choose]、[c:when]、[c:otherwise]标签 179 9.1.6 [c:forEach]标签 180 9.1.7 [c:forTokens]标签 181 9.1.8 [c:import]标签 181 9.1.9 [c:param]标签 181 9.1.10 [c:url]标签 182 9.1.11 [c:redirect]标签 182 9.2 数据库标签库 182 9.2.1 [sql:setDataSource]标签 183 9.2.2 [sql:update]标签 183 9.2.3 [sql:query]标签 184 9.2.4 [sql:param]和[sql:dateParam]标签 186 9.2.5 [sql:transaction ]标签 187 9.3 I18N格式化标签库 188 9.3.1 [fmt: formatNumber]标签 188 9.3.2 [fmt: parseNumber]标签 190 9.3.3 [fmt: formatDate]标签 190 9.3.4 [fmt: parseDate]标签 191 9.3.5 [fmt: setTimeZone]标签 191 9.3.6 [fmt: timeZone]标签 192 9.3.7 [fmt: setLocale]标签 192 9.3.8 [fmt: requestEncoding]标签 193 9.3.9 [fmt: setBundle]标签 193 9.3.10 [fmt: message]标签 193 9.3.11 [fmt: param] 194 9.3.12 [fmt: bundle] 194 9.4 XML标签库 194 9.4.1 下载并安装进行XML操作必需的JAR文件 194 9.4.2 [x:parse]标签 195 9.4.3 [x:out]标签 196 9.4.4 [x:set]标签 197 9.4.5 [x:if]标签 197 9.4.6 [x:choose]标签 198 9.4.7 [x:forEach]标签 199 9.5 综合练习 199 9.6 小结 200 9.7 习题 200 第三篇 Servlet开发篇 202 第10章 Servlet开发基础( 教学视频:41分钟) 202 10.1 Servlet基础 202 10.1.1 Servlet简介 202 10.1.2 第一个Servlet程序 202 10.1.3 Servlet生命周期 203 10.2 HttpServlet常用方法 204 10.2.1 doGet方法 204 10.2.2 doPost方法 206 10.2.3 service方法.. 207 10.3 Servlet常用接口 209 10.3.1 HttpServletRequest接口 209 10.3.2 HttpServletResponse接口 211 10.3.3 HttpSession接口 212 10.3.4 ServletContext接口 214 10.4 综合练习 216 10.5 小结 217 10.6 习题 217 第11章 Filter开发(教学视频:41分钟) 219 11.1 Filter基础 219 11.1.1 Filter简介 219 11.1.2 第一个Filter程序 219 11.1.3 Filter生命周期 220 11.2 常用Filter 221 11.2.1 非法文字过滤器 222 11.2.2 字符编码过滤器 224 11.2.3 登录验证过滤器 226 11.3 综合练习 229 11.4 小结 230 11.5 习题 230 第12章 Listener开发( 教学视频:26分钟) 231 12.1 Listener简介 231 12.2 ServletContext Listener 231 12.2.1 ServletContextListener接口 231 12.2.2 ServletContextAttributeListener接口 232 12.3 HttpSession Listener 234 12.3.1 HttpSessionListener接口 234 12.3.2 HttpSessionAttributeListener接口 235 12.4 综合练习 236 12.5 小结 239 12.6 习题 239 第四篇 使用设计模式篇 241 第13章 DAO设计模式(教学视频:21分钟) 241 13.1 DAO简介 241 13.2 DAO各部分详解 241 13.2.1 数据库连接类 241 13.2.2 VO类 242 13.2.3 DAO接口 243 13.2.4 DAO实现类 244 13.2.5 DAO工厂类 246 13.3 使用DAO完成数据库操作 247 13.3.1 添加记录 247 13.3.2 更新记录 248 13.3.3 删除记录 248 13.3.4 按ID查询记录 249 13.4 综合练习 250 13.5 小结 251 13.6 习题 251 第14章 MVC设计模式(教学视频:22分钟) 252 14.1 MVC简介 252 14.2 Model 1和Model 2 252 14.3 使用MVC模式改进用户登录案例 254 14.3.1 用户登录页面 254 14.3.2 用户登录成功和失败页面 255 14.3.3 业务逻辑组件 256 14.3.4 Servlet控制器 256 14.4 综合练习 258 14.5 小结 260 14.6 习题 260 第五篇 框架技术篇 261 第15章 Struts 2基础(教学视频:41分钟) 261 15.1 Struts 2简介 261 15.2 Struts 2框架的下载和安装 262 15.2.1 下载Struts 2框架 262 15.2.2 安装Struts 2框架 263 15.3 基于Struts 2框架实现登录案例 264 15.3.1 准备工作 264 15.3.2 新建控制类Action 264 15.3.3 配置Action 265 15.3.4 程序执行流程 266 15.4 改进控制器 266 15.4.1 实现Action接口 267 15.4.2 配置Action 268 15.5 完成输入校验 268 15.5.1 使用Struts 2标签库简化表单 268 15.5.2 继承ActionSupport完成输入校验 270 15.6 程序国际化 272 15.6.1 输出中文的校验错误信息 272 15.6.2 国际化资源文件 273 15.6.3 加载资源文件 275 15.6.4 输出国际化信息 275 15.6.5 输出国际化的校验错误信息 277 15.7 综合练习 278 15.8 小结 279 15.9 习题 279 第16章 Struts 2高级应用(教学视频:51分钟) 281 16.1 Struts 2内建的类型转换器 281 16.1.1 内建转换器介绍 281 16.1.2 基本数据类型转换器 281 16.1.3 基本数据类型的封装类转换器 285 16.1.4 数组类型转换器 287 16.1.5 集合类型转换器 289 16.2 服务器端校验 290 16.2.1 服务器端校验的重要性 290 16.2.2 完成服务器端输入校验 291 16.2.3 使页面保留提交信息 295 16.2.4 使用addFieldError来添加错误信息 297 16.2.5 输入校验与类型转换关系 300 16.3 使用校验框架完成输入校验 301 16.3.1 完成输入校验 301 16.3.2 增加客户端校验 306 16.3.3 国际化提示信息 308 16.3.4 客户端校验与国际化问题 310 16.3.5 校验短路 313 16.3.6 校验规则文件搜索规则 315 16.4 综合练习 316 16.5 小结 316 16.6 习题 317 第17章 持久化框架Hibernate(教学视频:35分钟) 318 17.1 初涉Hibernate 318 17.1.1 ORM简介 318 17.1.2 Hibernate框架的优势 319 17.1.3 下载和安装Hibernate 319 17.1.4 Hibernate架构概述 319 17.2 Hibernate的配置和相关类 321 17.2.1 Configuration类 321 17.2.2 Hibernate配置文件 321 17.2.3 SessionFactory类 322 17.3 Hibernate中的对象 322 17.3.1 对象在Hibernate中的状态 323 17.3.2 持久化类 324 17.3.3 对象识别 325 17.4 Hibernate开发 325 17.4.1 创建Hibernate配置文件 325 17.4.2 创建持久化类 326 17.4.3 创建对象关系映射文件 327 17.4.4 创建数据库表 328 17.4.5 插入数据 329 17.4.6 更新数据 330 17.4.7 删除数据 331 17.4.8 查询数据 332 17.4.9 使用Hibernate工具类 334 17.5 综合练习 335 17.6 小结 336 17.7 习题 336 第18章 Struts 2整合Hibernate开发(教学视频:28分钟) 337 18.1 Struts 2和Hibernate的整合策略 337 18.2 持久层设计 338 18.2.1 DAO接口 338 18.2.2 DAO实现类 338 18.2.3 DAO工厂类 340 18.3 业务逻辑组件 340 18.3.1 业务逻辑组件接口 341 18.3.2 业务逻辑组件实现类 341 18.3.3 业务逻辑组件工厂类 342 18.4 整合应用 343 18.4.1 查询所有产品 343 18.4.2 添加产品 345 18.4.3 删除产品 347 18.4.4 更新产品 348 18.5 小结 350 18.6 习题 350 第19章 Spring开发(教学视频:39分钟) 351 19.1 初探Spring 351 19.1.1 Spring简介 351 19.1.2 下载和安装Spring 352 19.1.3 Spring的IoC应用 353 19.2 Spring的依赖注入 356 19.2.1 通过Set方法注入依赖 356 19.2.2 引用其他的Bean 358 19.2.3 使用构造函数注入依赖 360 19.3 Spring的自动装配 361 19.3.1 自动装配分类 362 19.3.2 byName自动装配 362 19.3.3 byType自动装配 363 19.3.4 constructor自动装配 363 19.4 Spring核心理论:面向切面编程介绍 364 19.4.1 面向切面编程基础知识 364 19.4.2 在Spring中创建前置通知 365 19.4.3 在Spring中创建后置通知 367 19.4.4 在Spring中创建拦截通知 369 19.4.5 在Spring中创建异常通知 371 19.4.6 使用Spring静态切入点 373 19.5 综合练习 373 19.6 小结 375 19.7 习题 375 第20章 Struts 2整合Spring开发(教学视频:32分钟) 376 20.1 安装Spring插件完成整合 376 20.2 整合策略 376 20.3 整合Spring完成登录案例 378 20.3.1 修改控制器Action及配置 378 20.3.2 依赖注入业务逻辑组件 378 20.4 整合Spring完成产品管理案例 379 20.4.1 使用Spring容器管理SessionFactory 379 20.4.2 使用HibernateTemplate进行数据库操作 380 20.4.3 依赖注入DAO组件 381 20.4.4 依赖注入业务逻辑组件 382 20.4.5 完成Action配置 385 20.5 小结 385 20.6 习题 386 第六篇 项目实战篇 387 第21章 SSH整合开发用户管理系统 387 21.1 系统分析 387 21.1.1 应用背景及系统功能介绍 387 21.1.2 系统结构 387 21.1.3 系统功能模块 388 21.2 Hibernate持久层设计 388 21.2.1 创建持久化PO类 388 21.2.2 创建映射文件 389 21.3 DAO层设计 390 21.3.1 Spring管理SessionFactory 390 21.3.2 创建DAO接口 391 21.3.3 创建DAO实现类 391 21.3.4 配置DAO组件 392 21.4 业务逻辑层设计 392 21.4.1 创建业务逻辑组件接口 392 21.4.2 创建业务逻辑组件实现类 392 21.4.3 配置业务逻辑组件 393 21.5 完成查看所有用户信息模块 394 21.5.1 整合Struts 2和Spring 394 21.5.2 创建查看全部用户信息控制器 394 21.5.3 创建全部用户信息显示页 395 21.5.4 配置查看全部用户信息控制器 395 21.5.5 测试查看所有用户信息 396 21.6 完成查看用户详细信息模块 396 21.6.1 创建查看用户详细信息控制器 396 21.6.2 创建查看用户详细信息显示页 397 21.6.3 配置用户详细信息控制器 398 21.6.4 测试查看用户详细信息 398 21.7 完成添加用户模块 398 21.7.1 创建用户添加页 398 21.7.2 创建用户添加控制器 399 21.7.3 配置用户添加控制器 400 21.7.4 创建校验规则文件 400 21.7.5 测试添加用户 402 21.8 完成删除用户模块 403 21.8.1 创建用户删除控制器 403 21.8.2 配置用户删除控制器 403 21.8.3 测试删除用户 404 21.9 完成更新用户模块 404 21.9.1 创建用户更新页 404 21.9.2 创建用户更新控制器 405 21.9.3 配置用户更新控制器 406 21.9.4 创建校验规则文件 406 21.9.5 测试更新用户 406 21.10 小结 407

2019-03-30

Java ME嵌入式程序设计.张家耀(带详细书签).pdf

《高等学校工程创新型"十二五"规划计算机教材:Java ME嵌入式程序设计》共11章,内容包括:Java ME概述,Java ME开发环境与工具,图形用户界面体系结构,高级用户界面设计,低级图形用户界面,MIDP游戏程序设计基础,MIDP网络编程,MIDP记录存储器,MMAPI多媒体程序设计,无线消息程序设计,应用程序管理软件。《高等学校工程创新型"十二五"规划计算机教材:Java ME嵌入式程序设计》内容涵盖Java ME嵌入式程序设计的主要领域,并反映Java ME程序设计的新成果。书中例题全部经过精心设计,既能帮助理解基础知识,同时具有启发性,程序略加修改就可以应用到实际手机上。 第1章 Java ME概述 1 1.1 Java ME平台 1 1.2 Java ME体系结构 1 1.3 移动信息设备简表 3 1.3.1 MIDP目标设备的特性 4 1.3.2 MIDP的功能范围 4 1.3.3 MIDP类库 4 1.4 MIDP应用程序——MIDlet 5 1.5 MIDlet套件 7 1.5.1 清单文件 8 1.5.2 JAD文件 9 1.5.3 Java应用程序管理器——JAM或AMS 10 1.6 Java ME的标准规范 11 习题1 12 第2章 Java ME开发环境与工具 13 2.1 安装无线工具包WTK 13 2.2 使用WTK开发MIDP应用程序 15 2.2.1 编写程序源代码 15 2.2.2 简单开发周期 16 2.2.3 设置WTK开发环境 18 2.2.4 完整开发周期 21 2.3 使用Eclipse开发环境开发MIDP应用程序 22 2.3.1 Eclipse概述 22 2.3.2 安装Eclipse和EclipseME 22 2.3.3 配置Eelipse 26 2.3.4 使用Eclipse创建MIDlet套件 28 2.3.5 创建MIDlet 30 2.3.6 运行MIDlet 31 2.3.7 打包与混淆 33 习题2 34 第3章 图形用户界面体系结构 35 3.1 LCDUI体系结构 35 3.2 Display类 36 3.3 Displayable类 39 3.4 Command类和CommandListener接口 41 3.4.1 Command类 41 3.4.2 CommandListener接口 42 习题3 44 第4章 高级用户界面设计 45 4.1 高级用户界面——Screen类 45 4.1.1 Screen类概述 45 4.1.2 文本框——TextBox类 46 4.1.3 信息窗口——Alert类 49 4.2 选择实现——Choice接口 51 4.2.1 构造方法 51 4.2.2 编辑Choice对象 52 4.2.3 Choice对象的选项类型 52 4.3 选择列表——List类 53 4.3.1 构造方法 53 4.3.2 列表选项的编辑 53 4.3.3 列表选项的类型 55 4.4 容器控件——Form类 57 4.4.1 Form类概述 58 4.4.2 组件——Item类 59 4.4.3 StringItem类 61 4.4.4 文本区域——TextField类 63 4.4.5 图像操作——ImageItem类 65 4.4.6 空间填充控件——Spacer类 68 4.4.7 选择组组件——ChoiceGroup类 68 4.4.8 处理日期和时间组件——DateField类 71 4.4.9 进度条——Gauge类 73 4.4.10 自定义组件——CustomItem类 75 习题4 75 第5章 低级图形用户界面 78 5.1 画布Canvas类 78 5.1.1 Canvas类概述 78 5.1.2 画布规格与布局 78 5.1.3 绘制和重绘制 79 5.1.4 画布可视化 79 5.2 图形绘制Graphics类 81 5.2.1 绘制简单图形 82 5.2.2 绘制文本 89 5.2.3 图像绘制 93 5.2.4 计时器 98 5.3 低级事件处理 102 5.3.1 标准键盘事件 102 5.3.2 游戏动作按键事件 104 5.3.3 指针事件 106 习题5 111 第6章 MIDP游戏程序设计基础 112 6.1 游戏程序设计概述 112 6.2 游戏画布 113 6.3 游戏画布上的按键处理 117 6.4 图层Layer类 121 6.4.1 分块图层TiledLayer类 122 6.4.2 精灵Sprite类 129 6.4.3 图层管理LayerManager类 142 6.4.4 简单游戏举例 144 习题6 144 第7章 MIDP网络编程 145 7.1 移动网络编程概述 145 7.1.1 CLDC的通用连接框架 145 7.1.2 通用连接框架中的类 146 7.2 HTTP编程 148 7.2.1 MIDlet连接HTTP服务器 148 7.2.2 获取HTTP连接的基本信息 149 7.2.3 手机客户端与HTTP服务器通信 151 7.3 套接字编程 161 7.3.1 客户端与服务器的套接字连接 162 7.3.2 套接字连接可以得到的基本信息 162 7.3.3 套接字连接通信 165 7.4 UDP数据报编程 172 7.4.1 客户端与服务器端数据报连接 172 7.4.2 数据报的传递 173 习题7 180 第8章 MIDP记录存储器 181 8.1 RMS概述 181 8.2 记录存储器 182 8.2.1 管理记录存储器 182 8.2.2 RecordStore类中存取记录存储器信息的常用方法 183 8.3 记录的基本操作 187 8.3.1 简单记录的读/写 187 8.3.2 复杂记录的处理 192 8.4 记录的遍历、查询和排序 199 8.4.1 记录的遍历 199 8.4.2 建立和使用过滤器 200 8.4.3 建立和使用排序器 200 8.5 记录存储器的事件处理 207 8.6 综合实例 207 习题8 207 第9章 MMAPI多媒体程序设计 208 9.1 MMAPI概述 208 9.1.1 MMAPI的体系结构 208 9.1.2 管理器Manager类 209 9.1.3 播放器Player接口 210 9.1.4 数据源DataSource类 211 9.1.5 控制器Control接口 211 9.2 音频播放 212 9.3 视频播放 216 9.4 手机拍照的实现 221 习题9 226 第10章 无线消息程序设计 227 10.1 无线消息概述 227 10.1.1 GSM短消息服务 227 10.1.2 GSM小区广播 228 10.2 WMA概述 228 10.3 使用WTK中的WMA控制台 229 10.3.1 配置和启动WTK中的WMA控制台 229 10.3.2 使用WMA控制台发送文本消息 231 10.3.3 使用WMA控制台发送小区广播 232 10.3.4 使用WMA控制台发送多媒体消息 233 10.4 编写利用WMA控制台收发短消息的程序 234 10.4.1 发送和接收SMS消息 234 10.4.2 发送和接收二进制消息 239 10.4.3 发送和接收多媒体消息 245 习题10 251 第11章 应用程序管理软件 253 11.1 MIDP应用程序经OTA下载安装 253 11.1.1 OTA下载安装过程 253 11.1.2 在Eclipse中形成JAR文件和JAD文件 253 11.1.3 在服务器中搭建OTA下载环境 254 11.1.4 从服务器中OTA下载应用程序 254 11.2 Push技术 256 11.2.1 概述 257 11.2.2 PushRegistry类的主要方法 257 11.2.3 静态注册方式 258 11.2.4 动态注册方式 263 11.2.5 使用Push技术应注意的问题 265 习题11 265 参考文献 266

2019-03-30

Eclipse WTP Web应用开发.[美]Naci Dai(带详细书签).pdf

本书全面介绍了当前强大的开源Web开发工具项目Eclipse WTP,包括项目的由来、结构以及WTP工作环境的配置和使用方法。书中最引人入胜的部分是通过介绍一个虚拟但内容翔实的网站开发步骤,逐步地讲解了Web项目开发的全过程。其中涉及许多开发中的最佳实践,诸如商业模型的建立、分层的Web应用架构、Web服务和测试与构建自动化等。对于有兴趣进一步了解和掌握WTP的读者,本书还介绍了对WTP进行扩展的方法,以及WTP未来的发展方向。 本书适用于使用Eclipse创建Web应用程序的Eclipse和EJB开发者,以及将Eclipse技术应用于其他产品的技术人员。 第1部分 入门指南 1 第1章 导言 3 1.1 Java Web应用程序开发和Eclipse 3 1.2 本书所包含的内容 3 1.3 本书的组织方式 4 1.4 源代码实例 6 1.5 League Planet简介 7 1.6 小结 8 第2章 Eclipse Web工具平台项目基础 9 2.1 WTP的产生 9 2.2 WTP经济学 11 2.2.1 降低开发费用 11 2.2.2 获得收入 13 2.3 WTP的结构 16 2.3.1 WTP的范围 16 2.3.2 WTP子项目 17 2.3.3 WTP体系结构 19 2.3.4 WST子项目 20 2.3.5 JST子项目 25 2.4 为WTP做贡献 27 2.4.1 成为一个用户 27 2.4.2 关注新闻组 27 2.4.3 报告错误 27 2.4.4 改进建议 28 2.4.5 修复程序缺陷 28 2.4.6 编写文章和教程 29 2.4.7 成为一个提交者 29 2.4.8 发展社区 29 2.5 小结 30 第3章 快速导航 31 3.1 概述 31 3.2 迭代1:J2EE Web应用程序 33 3.2.1 添加一个服务器运行时环境 34 3.2.2 创建一个动态Web项目 38 3.2.3 创建并编辑一个JSP 42 3.2.4 在服务器上运行JSP 43 3.2.5 迭代1小结 44 3.3 迭代2:Servlets和小脚本 45 3.3.1 在JSP中增加一个Java小脚本 46 3.3.2 调试JSP 47 3.3.3 创建一个Servlet 49 3.3.4 调试一个Servlet 53 3.3.5 迭代2小结 54 3.4 迭代3:数据库访问 55 3.4.1 连接一个数据库 56 3.4.2 执行SQL语句 58 3.4.3 在Web应用程序中添加数据库访问 60 3.4.4 迭代3小结 65 3.5 迭代4:Web服务 65 3.5.1 部署一个Web服务 66 3.5.2 使用测试客户端 68 3.5.3 监视SOAP消息 69 3.5.4 迭代4小结 69 3.6 小结 70 第4章 配置自己的工作空间 71 4.1 安装和更新WTP 71 4.1.1 WTP可安装的组件 71 4.1.2 WTP版本类型 72 4.1.3 通过更新管理器安装 74 4.1.4 通过zip文件安装 76 4.1.5 安装第三方内容 78 4.1.6 JDK安装 80 4.1.7 验证安装 81 4.1.8 更新WTP 81 4.2 配置WTP 82 4.2.1 数据首选项 82 4.2.2 互联网首选项 83 4.2.3 服务器首选项 83 4.2.4 验证首选项 83 4.2.5 Web和XML首选项 83 4.2.6 Web服务首选项 84 4.2.7 XDoclet首选项 85 4.2.8 共享设置 85 4.3 小结 85 第2部分 Java Web应用程序开发 87 第5章 Web应用程序架构和设计 89 5.1 Web的前景 89 5.2 Web应用程序 90 5.2.1 Java Web应用程序 91 5.2.2 设计Java Web应用程序 92 5.2.3 分层Web应用程序设计 94 5.2.4 Web下的MVC框架 96 5.2.5 Java应用程序框架 100 5.3 面向服务的架构(SOA) 102 5.4 案例研究:League Planet 104 5.5 小结 105 第6章 组织开发项目 107 6.1 Web项目类型和J2EE应用程序 108 6.1.1 Web项目 108 6.1.2 J2EE模块 109 6.1.3 创建应用程序 110 6.1.4 创建Web应用程序 110 6.1.5 创建EJB应用程序 116 6.1.6 创建企业应用程序 120 6.2 高级Web项目 126 6.3 示例项目 130 6.3.1 基本的企业应用程序 130 6.3.2 将Web模块划分为多个项目 134 6.3.3 在Web应用程序开发中使用Maven 142 6.4 小结 158 第7章 表示层 159 7.1 引言 159 7.2 交互设计 160 7.3 图形设计 161 7.4 表示层的结构 163 7.5 迭代1:静态Web项目、HTML和结构化源代码编辑器 165 7.5.1 静态Web项目 165 7.5.2 HTML 168 7.5.3 结构化源代码编辑器 174 7.5.4 模板 177 7.5.5 代码片段 178 7.5.6 迭代1小结 182 7.6 迭代2:CSS 183 迭代2小结 187 7.7 迭代3:JavaScript 187 7.7.1 E-mail地址模糊化 188 7.7.2 表单输入验证 190 7.7.3 迭代3小结 200 7.8 迭代4:XML和XSLT 200 7.8.1 XML 200 7.8.2 XSLT 204 7.8.3 迭代4小结 208 7.9 迭代5:DTD 208 迭代5小结 211 7.10 迭代6:服务器、动态Web项目和Servlet 211 7.10.1 服务器 211 7.10.2 动态Web项目 217 7.10.3 Servlets 218 7.10.4 迭代6小结 226 7.11 迭代7:JSP 226 迭代7小结 235 7.12 迭代8:监听HTTP会话 235 7.12.1 HTTP会话 235 7.12.2 TCP/IP监听器 235 7.12.3 使用TCP/IP监听器查看HTTP会话 236 7.12.4 修改并重发信息 238 7.12.5 迭代8小结 240 7.13 小结 240 第8章 业务逻辑层 241 8.1 通用的业务逻辑层设计 243 8.2 迭代1:领域模型 244 8.2.1 J2EE公共工具项目 244 8.2.2 对象模型 246 8.2.3 服务层 251 8.2.4 数据访问层 255 8.2.5 测试 262 8.2.6 迭代1小结 265 8.3 迭代2:开发会话EJB 266 8.3.1 添加JBoss 269 8.3.2 XDoclet 270 8.3.3 EJB项目 273 8.3.4 创建会话Bean 276 8.3.5 构建一个Web客户端 283 8.3.6 运行应用程序 286 8.3.7 用WTP开发EJB 3.0 289 8.3.8 迭代2小结 291 8.4 迭代3:消息驱动Bean 291 8.4.1 MDB简介 292 8.4.2 创建一个MDB 292 8.4.3 在JBoss中添加一个队列 296 8.4.4 创建一个JMS Web客户端 296 8.4.5 迭代3小结 300 8.5 小结 300 第9章 持久层 301 9.1 持久层设计 302 9.1.1 使用JDBC API实现对象与数据库的映射 303 9.1.2 使用实体Bean实现对象与数据库的映射 303 9.1.3 使用O/R框架实现对象到数据库的映射 304 9.2 迭代概述 305 9.3 迭代1:创建一个数据库 305 迭代1小结 313 9.4 迭代2:数据层 313 迭代2小结 319 9.5 迭代3:实体Bean 319 9.5.1 准备JBoss、Derby和XDoclet 320 9.5.2 添加一个CMP 323 9.5.3 添加ejbCreate和finder方法 327 9.5.4 添加冰球CMP数据访问对象 334 9.5.5 测试CMP实现 337 9.5.6 用WTP开发JPA 341 9.5.7 迭代3小结 345 9.6 小结 345 第10章 Web服务 346 10.1 WSDL 347 10.2 SOAP 347 10.3 REST 348 10.4 REST风格的Web服务 350 10.5 迭代概述 351 10.6 迭代1:自顶向下开发Web服务 351 10.6.1 XSD 352 10.6.2 WSDL 358 10.6.3 部署Web服务 361 10.6.4 实现Web服务 366 10.6.5 用Web服务管理器测试 372 10.6.6 迭代1小结 375 10.7 迭代2:自底向上开发Web服务 375 10.7.1 开发Java服务实现 375 10.7.2 部署服务 380 10.7.3 迭代2小结 383 10.8 迭代3:生成Web服务的客户端代理 383 10.8.1 生成一个Java客户端代理和JSP测试客户端 384 10.8.2 使用JSP测试客户端 387 10.8.3 迭代3小结 389 10.9 迭代4:测试Web服务的互操作性 389 10.9.1 检查消息的WS-I兼容性 390 10.9.2 迭代4小结 394 10.10 迭代5:在Web应用程序中使用Web服务 395 10.10.1 为Web服务Query生成客户端 395 10.10.2 创建Servlet 395 10.10.3 导入用户界面代码 397 10.10.4 测试用户界面 409 10.10.5 迭代5小结 411 10.11 迭代6:发现和发布Web服务 413 10.11.1 UDD I 413 10.11.2 WSIL 419 10.11.3 迭代6小结 425 10.12 小结 425 第11章 测试 426 11.1 自动化测试 427 11.2 迭代概述 428 11.3 迭代1:基于JUnit的单元测试 428 11.3.1 创建一个测试项目 429 11.3.2 JUnit测试用例 430 11.3.3 JUnit测试套件 433 11.3.4 迭代1小结 435 11.4 迭代2:基于Cactus的集成测试 435 迭代2小结 441 11.5 迭代3:基于HttpUnit的系统测试 442 迭代3小结 446 11.6 迭代4:基于TPTP的性能测试 446 11.6.1 创建一个性能测试项目 448 11.6.2 HTTP记录测试 448 11.6.3 生成报表 450 11.6.4 迭代4小结 451 11.7 迭代5:使用TPTP进行剖析 451 迭代5小结 455 11.8 小结 456 第3部分 扩展WTP 457 第12章 添加新的服务器 459 12.1 添加通用服务器适配器 461 12.2 GlassFish服务器运行时环境 462 12.3 服务器适配器插件 463 12.4 添加对新服务器运行时的支持 465 12.5 为运行时环境添加一个新的服务器类型 467 12.6 添加新运行时的目标句柄 468 12.7 刻面和运行时组件 468 12.8 扩展服务器工具的UI 471 12.9 通用服务器定义 472 12.10 发布器 476 12.11 测试服务器适配器 479 12.12 小结 486 第13章 支持新文件类型 487 13.1 创建DocBook扩展插件 488 13.2 DocBook验证器 489 13.2.1 WTP验证框架 490 13.2.2 实现DocBook验证器 490 13.3 创建一个自定义的标记类型 499 13.4 声明DocBook内容类型 501 13.5 小结 504 第14章 创建WSDL扩展 505 14.1 创建WSDL扩展插件 509 14.2 扩展WSDL编辑器 510 14.2.1 自定义编辑器设计视图中可扩展元素的外观 511 14.2.2 为编辑器添加一个可扩展元素 513 14.2.3 在WSDL编辑器的设计视图中添加自定义操作 521 14.3 扩展WSDL验证 527 14.3.1 为WSDL 1.1验证做贡献 528 14.3.2 贡献自定义的验证规则 531 14.4 小结 534 第15章 自定义资源解析 535 15.1 创建资源解析扩展插件 537 15.2 为XML目录提供资源 537 15.2.1 XML目录 539 15.2.2 在XML目录中添加一个独立的资源 539 15.2.3 将一个资源目录添加到XML目录中 542 15.3 实现一个自定义资源解析策略 545 15.3.1 URI解析框架 546 15.3.2 创建文件夹URI解析器 548 15.4 小结 551 第4部分 产品和计划 553 第16章 其他基于Eclipse的Web工具 555 16.1 Java Web工具 555 16.1.1 BEA Workshop 556 16.1.2 CodeGear JBuilder 556 16.1.3 Exadel Studio 556 16.1.4 IBM Rational Application Developer for WebSphere Software 556 16.1.5 JBoss IDE for Eclipse 557 16.1.6 MyEclipse 557 16.1.7 ObjectWeb Lomboz 558 16.1.8 SAP NetWeaver Developer Studio 558 16.1.9 W4T Eclipse 558 16.2 Perl Web工具 559 16.3 PHP Web工具 559 16.3.1 Eclipse PHP开发工具项目 560 16.3.2 PHPEclipse 560 16.4 Python Web工具 560 16.5 Ruby Web工具 560 16.6 小结 561 第17章 未来之路 562 17.1 Eclipse数据工具平台(DTP)项目 563 17.2 Eclipse Java Server Faces(JSF)工具项目 563 17.3 Eclipse Dali Java持久性架构(JPA)工具项目 563 17.4 Eclipse AJAX工具框架(ATF)项目 564 17.5 Java企业版5 564 17.6 Apache Axis2和W3C WSDL 2.0 564 17.7 Eclipse PHP开发工具项目 565 17.8 Eclipse SOA工具平台(STP)项目 565 17.9 结束语 566 术语表 567

2019-03-30

小程序,巧应用:微信小程序开发实战.熊普江(带详细书签).pdf

本书全面介绍小程序的开发技术、案例与优化,涉及小程序开发的方方面面。主要内容包括:小程序基础开发技术,包括入口、界面、后台、目录结构、配置、逻辑层、API、视图层、组件等,小程序高级开发技术,包括UI与视觉特性设计与开发、应用功能开发、排错、相关工具与文档等,经典案例分析,小程序优化与演进。本书内容丰富、讲解细腻、实用性强,可帮助读者快速入门小程序开发,并提高产品质量。 第1章 创建自己的第一个小程序 1 1.1 准备工作 1 1.1.1 成为微信公众平台开发者 1 1.1.2 获取小程序AppID 4 1.1.3 安装开发者工具包 4 1.2 创建第一个小程序——Hello WXapplet 6 1.3 微信Web开发者工具的操作与使用 7 1.3.1 界面与操作 7 1.3.2 编辑功能 8 1.3.3 调试功能 10 1.3.4 项目功能 15 1.3.5 运行小程序 15 第2章 小程序初体验 17 2.1 理解小程序 17 2.1.1 Hello WXapplet项目目录及文件构成 18 2.1.2 Hello WXapplet项目的代码实现 19 2.2 小程序的线程架构与开发步骤 24 2.2.1 小程序线程架构 24 2.2.2 小程序开发步骤 26 2.2.3 为Hello WXapplet添加新页面及示例代码 27 2.3 进一步了解小程序开发框架 30 2.3.1 MINA框架 30 2.3.2 目录结构 32 2.3.3 逻辑层 32 2.3.4 视图层 33 2.3.5 数据层 33 2.4 小程序的发布与使用 34 2.4.1 小程序预览、上传、审核与发布 34 2.4.2 小程序加载运行 37 2.5 深入理解小程序的应用场景 38 2.5.1 小程序入口与界面 38 2.5.2 小程序与HTML 5应用开发的差异 38 2.5.3 小程序的最佳应用场景 40 2.5.4 小程序对企业、开发者的意义与影响 41 2.5.5 开发者角色与技能要求 42 第3章 小程序开发基础 43 3.1 配置 43 3.1.1 全局配置~app.json 43 3.1.2 页面配置~page.json 47 3.2 逻辑层 48 3.2.1 注册程序~App()方法 49 3.2.2 注册页面~Page()方法 50 3.2.3 模块及调用 56 3.2.4 微信原生API 57 3.3 视图层 59 3.3.1 WXML详解 60 3.3.2 WXSS详解 75 3.3.3 框架组件 79 第4章 框架组件的开发应用 81 4.1 视图容器组件 81 4.1.1 view 81 4.1.2 scroll-view 82 4.1.3 swiper 84 4.1.4 swiper-item 85 4.2 基础内容组件 86 4.2.1 icon 86 4.2.2 text 87 4.2.3 progress 88 4.3 表单组件 89 4.3.1 button 90 4.3.2 checkbox-group 91 4.3.3 checkbox 92 4.3.4 form 93 4.3.5 input 95 4.3.6 label 98 4.4 互动操作组件 110 4.4.1 action-sheet 110 4.4.2 modal 111 4.4.3 toast 112 4.4.4 loading 114 4.5 页面导航组件 115 4.6 媒体组件 117 4.6.1 image 117 4.6.2 audio 122 4.6.3 video 125 4.7 地图组件 128 4.8 画布组件 130 4.9 WXML组件与HTML的差异 131 第5章 API接口的开发应用 133 5.1 网络API 133 5.2 媒体API 139 5.2.1 图片API 139 5.2.2 录音API 141 5.2.3 音频播放控制API 142 5.2.4 音乐播放控制API 145 5.2.5 文件API 147 5.2.6 视频API 150 5.3 数据存储API 153 5.4 位置API 157 5.5 设备信息API 159 5.6 界面API 161 5.6.1 交互反馈API 161 5.6.2 页面导航API 164 5.6.3 动画API 165 5.6.4 绘图API 169 5.6.5 其他API 180 5.7 开放API 180 5.7.1 登录API 180 5.7.2 用户信息API 185 5.7.3 微信支付API 186 5.7.4 模板信息API 186 第6章 小程序开发纲要 193 6.1 界面 193 6.2 网络 195 6.3 本地数据及缓存 196 6.4 设备硬件 199 6.5 微信开放接口 200 6.6 媒体 201 6.7 后端开发与设计 204 第7章 小程序经典案例 205 7.1 文件上传与下载——小相册 205 7.1.1 功能详解 205 7.1.2 程序结构 205 7.1.3 程序细化 208 7.1.4 程序体验 218 7.2 流媒体转码与播放——视频点播 222 7.2.1 功能详解 222 7.2.2 程序目录结构 222 7.2.3 程序细化 223 7.3 互动——高冷机器人 226 7.3.1 功能详解 226 7.3.2 程序目录结构 226 7.3.3 程序细化 226 7.4 LBS应用——周边信息点 230 7.4.1 功能详解 230 7.4.2 程序结构 230 7.4.3 程序细化 233 7.5 WebSocket高级应用——远程控制设备 240 7.5.1 应用场景 240 7.5.2 开发实现 240 7.5.3 案例总结 244 第8章 小程序优化与演进 245 8.1 为什么选择小程序,而不是公众号或App 245 8.2 未来演进方向探讨 245 8.3 小程序持续优化方法 246 附录A 微信小程序平台运营规范 249 附录B 微信小程序平台常见拒绝情形 259 附录C 沟通联络方法 264

2019-03-29

零基础学数据结构(第2版).陈锐(带详细书签).pdf

数据结构是计算机专业的专业基础课和核心课程。本书内容全面,语言通俗易懂,案例典型、丰富,结构清晰,重难点突出,所有算法都有完整程序,能直接运行。《零基础学编程:零基础学数据结构(第2版)》内容包括数据结构概述、常用的C程序开发环境、线性表、栈、队列、串、数组、广义表、树、图、查找及排序。本书可作为学习数据结构与算法、从事计算机软件开发、准备考取计算机专业研究生和参加软考的人员的参考书,也可以作为计算机及相关专业的数据结构课程教材。 第一篇 基础知识 1 第1章 数据结构概述 1 1.1 为什么要学习数据结构 1 1.2 基本概念和术语 2 1.3 数据的逻辑结构与存储结构 4 1.3.1 逻辑结构 4 1.3.2 存储结构 4 1.4 抽象数据类型及其描述 5 1.4.1 什么是抽象数据类型 5 1.4.2 抽象数据类型的描述 6 1.5 算法 8 1.5.1 数据结构与算法的关系 8 1.5.2 什么是算法 8 1.5.3 算法的五大特性 9 1.5.4 算法的描述 9 1.6 算法分析 10 1.6.1 算法设计的4个目标 11 1.6.2 算法效率评价 11 1.6.3 算法的时间复杂度 12 1.6.4 算法的空间复杂度 14 1.7 学好数据结构的秘诀 14 1.8 习题 15 第2章 C语言基础 17 2.1 C语言开发环境 17 2.1.1 Turbo C 2.0开发环境 17 2.1.2 Visual C++ 6.0开发环境 19 2.2 递归与非递归 22 2.2.1 函数的递归调用 22 2.2.2 递归应用举例 23 2.2.3 迭代与递归 26 2.3 指针 27 2.3.1 什么是指针 27 2.3.2 指针变量的间接引用 28 2.3.3 指针与数组 29 2.3.4 指针函数与函数指针 34 2.4 参数传递 40 2.4.1 传值调用 40 2.4.2 传地址调用 42 2.5 结构体与联合体 44 2.5.1 结构体的定义 45 2.5.2 指向结构体的指针 47 2.5.3 用typedef定义数据类型 48 2.5.4 联合体 49 2.6 链表 54 2.6.1 内存的动态分配与释放 54 2.6.2 什么是链表 55 2.6.3 创建链表 55 2.6.4 链表的输出操作 58 2.6.5 链表的插入操作 60 2.6.6 链表的删除操作 64 2.6.7 链表的综合操作 66 2.6.8 链表应用举例:一元多项式的相加 67 2.7 小结 73 2.8 习题 74 第二篇 线性数据结构 77 第3章 线性表 77 3.1 线性表的定义及抽象数据类型 77 3.1.1 线性表的逻辑结构 77 3.1.2 线性表的抽象数据类型 78 3.2 线性表的顺序表示与实现 79 3.2.1 线性表的顺序存储结构 79 3.2.2 顺序表的基本运算 80 3.2.3 顺序表的实现算法分析 83 3.2.4 顺序表的优缺点 83 3.2.5 顺序表应用举例 84 3.3 线性表的链式表示与实现 89 3.3.1 单链表的存储结构 90 3.3.2 单链表上的基本运算 91 3.3.3 单链表存储结构与顺序存储结构的优缺点 96 3.3.4 单链表应用举例 97 3.4 循环单链表 104 3.4.1 循环链表的链式存储 104 3.4.2 循环单链表应用举例 106 3.5 双向链表 108 3.5.1 双向链表的存储结构 108 3.5.2 双向链表的插入和删除操作 109 3.5.3 双向链表应用举例 111 3.6 静态链表 113 3.6.1 静态链表的存储结构 114 3.6.2 静态链表的基本运算 114 3.6.3 静态链表应用举例 117 3.7 综合案例:一元多项式的表示与相乘 118 3.7.1 一元多项式的表示 118 3.7.2 一元多项式相乘 119 3.8 小结 123 3.9 习题 123 第4章 栈 127 4.1 栈的定义与抽象数据类型 127 4.1.1 什么是栈 127 4.1.2 栈的抽象数据类型 128 4.2 栈的顺序表示与实现 128 4.2.1 栈的顺序存储结构 128 4.2.2 顺序栈的基本运算 129 4.2.3 顺序栈应用举例 131 4.3 栈的链式表示与实现 136 4.3.1 栈的链式存储结构 137 4.3.2 链栈的基本运算 137 4.3.3 链栈应用举例 140 4.4 栈的典型应用 141 4.4.1 括号匹配 141 4.4.2 求算术表达式的值 144 4.4.3 迷宫求解 151 4.5 栈与递归 156 4.5.1 递归 156 4.5.2 消除递归 160 4.6 小结 162 4.7 习题 163 第5章 队列 165 5.1 队列的定义与抽象数据类型 165 5.1.1 什么是队列 165 5.1.2 队列的抽象数据类型 165 5.2 队列的顺序存储及实现 166 5.2.1 顺序队列的表示 166 5.2.2 顺序队列的“假溢出” 167 5.2.3 顺序循环队列的表示 167 5.2.4 顺序循环队列的基本运算 169 5.2.5 顺序循环队列举例 170 5.3 队列的链式存储及实现 172 5.3.1 链式队列的表示 172 5.3.2 链式队列的基本运算 173 5.3.3 链式队列举例 175 5.4 双端队列 179 5.4.1 什么是双端队列 179 5.4.2 双端队列的应用 179 5.5 综合案例:动画模拟停车场管理系统 181 5.6 小结 194 5.7 习题 194 第6章 串 197 6.1 串的定义及抽象数据类型 197 6.1.1 什么是串 197 6.1.2 串的抽象数据类型 198 6.2 串的顺序表示与实现 199 6.2.1 串的顺序存储结构 199 6.2.2 顺序串的基本运算 200 6.2.3 顺序串应用举例 203 6.3 串的堆分配表示与实现 205 6.3.1 堆分配的存储结构 205 6.3.2 堆串的基本运算 205 6.4 串的块链式存储表示与实现 208 6.4.1 串的块链式存储结构 208 6.4.2 块链串的基本运算 209 6.5 串的模式匹配 212 6.5.1 朴素模式匹配算法——Brute-Force 212 6.5.2 KMP算法 214 6.5.3 模式匹配应用举例 219 6.6 小结 223 6.7 习题 224 第7章 数组 226 7.1 数组的定义及抽象数据类型 226 7.1.1 重新认识数组 226 7.1.2 数组的抽象数据类型 227 7.2 数组的顺序表示与实现 227 7.2.1 数组的顺序存储结构 227 7.2.2 数组的基本运算 229 7.2.3 数组应用举例 231 7.3 特殊矩阵的压缩存储 233 7.3.1 对称矩阵的压缩存储 233 7.3.2 三角矩阵的压缩存储 233 7.3.3 对角矩阵的压缩存储 235 7.4 稀疏矩阵的压缩存储 236 7.4.1 什么是稀疏矩阵 236 7.4.2 稀疏矩阵抽象数据类型 236 7.4.3 稀疏矩阵的三元组表示 236 7.4.4 稀疏矩阵的三元组实现 237 7.5 稀疏矩阵应用举例 241 7.5.1 三元组表示的稀疏矩阵相加 241 7.5.2 三元组表示的稀疏矩阵相乘 244 7.6 稀疏矩阵的十字链表表示与实现 249 7.6.1 稀疏矩阵的十字链表表示 249 7.6.2 十字链表的基本运算 250 7.7 小结 252 7.8 习题 252 第8章 广义表 254 8.1 广义表的定义及抽象数据类型 254 8.1.1 什么是广义表 254 8.1.2 广义表的抽象数据类型 255 8.2 广义表的头尾链表表示与实现 255 8.2.1 广义表的头尾链表存储结构 255 8.2.2 广义表的基本运算 256 8.2.3 广义表应用举例(采用头尾链表存储结构) 259 8.3 广义表的扩展线性链表表示与实现 263 8.3.1 广义表的扩展线性链表存储结构 263 8.3.2 广义表的基本运算 264 8.3.3 广义表应用举例(扩展线性链表存储结构) 266 8.4 小结 269 8.5 习题 269 第三篇 非线性数据结构 271 第9章 树 271 9.1 树的相关概念及抽象数据类型 271 9.1.1 什么是树 271 9.1.2 树的相关概念 272 9.1.3 树的逻辑表示 272 9.1.4 树的抽象数据类型 273 9.1.5 树的存储结构 274 9.2 二叉树的相关概念及抽象数据类型 277 9.2.1 什么是二叉树 277 9.2.2 二叉树的性质 277 9.2.3 二叉树的抽象数据类型 280 9.3 二叉树的存储表示与实现 281 9.3.1 二叉树的顺序存储 281 9.3.2 二叉树的链式存储 282 9.3.3 二叉树的基本运算 282 9.4 遍历二叉树 285 9.4.1 什么是遍历二叉树 285 9.4.2 遍历二叉树 286 9.4.3 非递归遍历二叉树——基于栈的递归消除 288 9.5 遍历二叉树的应用 290 9.5.1 按层次输出二叉树 290 9.5.2 二叉树的计数 291 9.5.3 求叶子结点的最大最小枝长 293 9.5.4 判断两棵二叉树是否相似 294 9.5.5 交换二叉树的左右子树 294 9.5.6 求根结点到r结点之间的路径 294 9.6 线索二叉树 296 9.6.1 什么是线索化二叉树 296 9.6.2 线索二叉树 297 9.6.3 遍历线索二叉树 298 9.6.4 线索二叉树应用举例 300 9.7 树、森林与二叉树 304 9.7.1 树转换为二叉树 304 9.7.2 森林转换为二叉树 305 9.7.3 二叉树转换为树和森林 306 9.7.4 树和森林的遍历 306 9.7.5 树与二叉树应用举例 307 9.8 综合案例:哈夫曼树 320 9.8.1 什么是哈夫曼树 320 9.8.2 哈夫曼编码 322 9.8.3 哈夫曼编码算法的实现 322 9.9 小结 326 9.10 习题 327 第10章 图 330 10.1 图的定义与相关概念 330 10.1.1 什么是图 330 10.1.2 图的相关概念 331 10.1.3 图的抽象数据类型 333 10.2 图的存储结构 334 10.2.1 邻接矩阵(数组表示法) 334 10.2.2 邻接表 338 10.2.3 十字链表 343 10.2.4 邻接多重链表 344 10.3 图的遍历 345 10.3.1 图的深度优先搜索 345 10.3.2 图的广度优先搜索 348 10.4 图的连通性问题 349 10.4.1 无向图的连通分量与最小生成树 349 10.4.2 最小生成树 351 10.5 有向无环图 359 10.5.1 AOV网与拓扑排序 360 10.5.2 AOE网与关键路径 362 10.6 最短路径 367 10.6.1 从某个顶点到其余各顶点的最短路径 367 10.6.2 每一对顶点之间的最短路径 372 10.6.3 最短路径应用举例 374 10.7 图的应用举例 375 10.8 小结 383 10.9 习题 383 第四篇 查找与排序 387 第11章 查找 387 11.1 基本概念 387 11.2 静态查找 388 11.2.1 顺序表的查找 388 11.2.2 有序顺序表的查找 389 11.2.3 索引顺序表的查找 391 11.2.4 静态查找应用举例 393 11.3 动态查找 395 11.3.1 二叉排序树 395 11.3.2 平衡二叉树 402 11.4 B-树与B+树 408 11.4.1 B-树 408 11.4.2 B+树 415 11.5 哈希表 415 11.5.1 什么是哈希表 416 11.5.2 哈希函数的构造方法 416 11.5.3 处理冲突的方法 417 11.5.4 哈希表应用举例 419 11.6 小结 422 11.7 习题 423 第12章 内排序 425 12.1 基本概念 425 12.2 插入排序 426 12.2.1 直接插入排序 426 12.2.2 折半插入排序 428 12.2.3 希尔排序 430 12.2.4 插入排序应用举例 431 12.3 交换排序 434 12.3.1 冒泡排序 434 12.3.2 快速排序 437 12.3.3 交换排序应用举例 439 12.4 选择排序 442 12.4.1 简单选择排序 443 12.4.2 堆排序 444 12.4.3 选择排序应用举例 448 12.5 归并排序 451 12.5.1 2路归并排序算法 452 12.5.2 归并排序应用举例 453 12.6 基数排序 455 12.6.1 基数排序算法 455 12.6.2 基数排序应用举例 458 12.7 小结 462 12.8 习题 462 第13章 外排序 464 13.1 外存的存取特性 464 13.2 磁盘排序 465 13.2.1 归并排序的基本方法 466 13.2.2 多路归并排序 467 13.3 磁带排序 468 13.3.1 2路归并排序 468 13.3.2 多路非平衡归并排序 469 13.4 小结 470 参考文献 471

2019-03-29

零基础学算法(第3版).戴艳(带详细书签).pdf

本书分为上、下两篇,共10章。上篇用5章的篇幅介绍了算法和数据结构的基础知识,包括基础算法思想、简单数据结构、复杂数据结构、排序和查找算法等内容;下篇用5章的篇幅介绍了用数据结构解决实际问题的相关程序,包括解决数学问题、数据结构问题、算法经典问题等内容以及信息学奥赛部分试题的程序,最后一章介绍了与算法和数据结构相关的常见面试题。 本书案例实用性强、结构清晰、实例代码讲解详尽,可作为大中专院校学生学习数据结构以及做课程设计的参考书,也可以作为有一定程序设计基础的程序员的参考书,还可作为参加信息学奥赛选手的参考书。 上篇 算法与数据结构基础 1 第1章 基础算法思想 1 1.1 编程的灵魂:数据结构+算法 1 1.2 算法的作用:猜价格游戏 2 1.2.1 算法的作用 2 1.2.2 实例:看商品猜价格 2 1.3 枚举(穷举)算法思想 6 1.3.1 算法思路 6 1.3.2 实例:填数游戏 6 1.3.3 实例:填运算符 8 1.4 递推算法思想 11 1.4.1 算法思路 11 1.4.2 顺推实例:斐波那契数列 11 1.4.3 逆推实例:该存多少钱 13 1.5 递归算法思想 14 1.5.1 算法思路 14 1.5.2 实例:求阶乘 15 1.5.3 实例:数制转换 17 1.6 分治算法思想 19 1.6.1 算法思路 19 1.6.2 实例:乒乓球比赛日程安排 20 1.7 贪婪算法思想 23 1.7.1 算法思路 24 1.7.2 实例:换零钱 24 1.8 试探法算法思想 26 1.8.1 算法思路 26 1.8.2 实例:生成彩票号码组合 27 1.9 模拟算法 30 1.9.1 算法思路 30 1.9.2 实例:猜数游戏 30 1.9.3 实例:模拟掷骰子游戏 31 1.10 算法的评价 32 1.10.1 算法评价原则 32 1.10.2 算法的效率 33 1.11 上机实践 34 第2章 简单数据结构 36 2.1 最简单的结构:线性表 36 2.1.1 线性表的概念 36 2.1.2 操作顺序表 37 2.1.3 操作链表 44 2.1.4 实例:用链表制作通讯录 53 2.2 后进先出结构:栈 56 2.2.1 栈的概念 56 2.2.2 操作栈 57 2.2.3 实例:算术表达式求值 62 2.3 先进先出结构:队列 68 2.3.1 什么是队列 68 2.3.2 操作队列 69 2.3.3 循环队列的操作 72 2.3.4 实例:银行排号程序 74 2.4 上机实践 77 第3章 复杂数据结构 79 3.1 层次关系结构:树 79 3.1.1 树的概念 79 3.1.2 二叉树的概念 80 3.1.3 二叉树的存储 82 3.1.4 操作二叉树 84 3.1.5 遍历二叉树 88 3.1.6 测试二叉树 92 3.1.7 线索二叉树 95 3.1.8 最优二叉树(赫夫曼树) 102 3.2 网状关系:图 111 3.2.1 图的定义和基本术语 111 3.2.2 图的存储 115 3.2.3 图的创建 117 3.2.4 图的遍历 123 3.2.5 最小生成树 128 3.2.6 最短路径 132 3.3 上机实践 136 第4章 常用算法——排序 137 4.1 排序概述 137 4.1.1 排序算法分类 137 4.1.2 数据准备 138 4.2 冒泡排序法 139 4.2.1 冒泡排序法概述 139 4.2.2 改进的冒泡排序法 142 4.3 快速排序法 143 4.3.1 算法描述 143 4.3.2 算法实现 144 4.4 简单选择排序法 146 4.5 堆排序法 148 4.5.1 算法描述 148 4.5.2 算法实现 150 4.6 直接插入排序法 152 4.6.1 算法描述 152 4.6.2 算法实现 153 4.7 希尔(Shell)排序法 154 4.7.1 算法描述 154 4.7.2 算法实现 155 4.8 合并排序法 157 4.8.1 算法描述 157 4.8.2 算法实现 158 4.9 排序算法的选择 161 4.9.1 选择基准 161 4.9.2 各种排序算法的优缺点 162 4.10 上机实践 163 第5章 常用算法——查找 164 5.1 查找的基本概念 164 5.2 简单查找 165 5.2.1 顺序查找 165 5.2.2 折半查找 167 5.3 二叉排序树 170 5.3.1 二叉排序树的定义 170 5.3.2 插入节点 170 5.3.3 查找节点 173 5.3.4 删除节点 174 5.4 索引查找 178 5.4.1 索引的概念 178 5.4.2 索引查找算法 180 5.5 散列表 184 5.5.1 散列表概述 184 5.5.2 构造散列函数 185 5.5.3 处理冲突 187 5.5.4 创建和查找散列表 188 5.6 上机实践 190 下篇 用数据结构解决实际问题 191 第6章 数学问题 191 6.1 有趣的整数 191 6.1.1 完数 191 6.1.2 亲密数 193 6.1.3 水仙花数 195 6.1.4 自守数 196 6.1.5 最大公约数和最小公倍数 197 6.2 素数 200 6.2.1 求素数 200 6.2.2 回文数 203 6.2.3 哥德巴赫猜想 206 6.3 阶乘 209 6.3.1 用递归计算阶乘 210 6.3.2 大数阶乘 211 6.4 求π的近似值 214 6.4.1 概率法 214 6.4.2 割圆法 216 6.4.3 公式法 217 6.4.4 计算任意位数的π 218 6.5 方程求解 222 6.5.1 高斯消元法解线性方程组 222 6.5.2 二分法解非线性方程 227 6.5.3 牛顿迭代法解非线性方程 228 6.6 矩阵的运算 230 6.6.1 矩阵加法和乘法运算 230 6.6.2 多维矩阵转一维矩阵 233 6.6.3 逆矩阵 235 6.6.4 稀疏矩阵 238 6.7 一元多项式的运算 240 6.7.1 多项式加法 241 6.7.2 多项式减法 245 6.8 上机实践 248 第7章 数据结构问题 250 7.1 约瑟夫环 250 7.2 大整数四则运算 252 7.2.1 使用数组进行大整数运算 252 7.2.2 使用链表进行大整数运算 264 7.3 进制转换 271 7.3.1 进制转换的分析 272 7.3.2 进制转换实现代码 272 7.4 括号匹配 277 7.5 中序式转后序式 280 7.5.1 后序表达式 280 7.5.2 算法实现 281 7.5.3 后序表达式求值 284 7.6 停车场管理 286 7.6.1 问题分析 287 7.6.2 算法实现 287 7.7 迷宫求解 297 7.7.1 迷宫问题 297 7.7.2 算法实现 297 7.7.3 求迷宫所有路径 304 7.8 LZW压缩的实现 307 7.8.1 LZW的相关概念 308 7.8.2 LZW压缩过程 308 7.8.3 LZW压缩的实现 310 7.8.4 LZW解压缩过程 314 7.8.5 解压缩函数 315 7.8.6 集成压缩和解压缩功能 318 7.9 上机实践 320 第8章 算法经典问题 321 8.1 不定方程问题 321 8.1.1 百钱买百鸡 321 8.1.2 存钱利息最大化 323 8.1.3 求阶梯数 326 8.1.4 五家共井 327 8.1.5 鸡兔同笼 328 8.2 推算问题 329 8.2.1 猴子吃桃 329 8.2.2 舍罕王的赏赐 330 8.3 魔术方阵 332 8.3.1 简捷连续填数法 332 8.3.2 双向翻转法 335 8.3.3 井字调整法 337 8.4 智力趣题 340 8.4.1 汉诺塔 341 8.4.2 背包问题 345 8.4.3 马踏棋盘 352 8.4.4 八皇后问题 361 8.4.5 青蛙过河 366 8.4.6 三色旗 369 8.5 趣味游戏 371 8.5.1 取石子游戏 372 8.5.2 生命游戏 375 8.5.3 洗扑克牌 379 8.5.4 黑白棋 381 8.5.5 凑24点游戏 391 8.5.6 10点半游戏 396 8.6 上机实践 401 第9章 信息学奥赛试题精解 403 9.1 NOIP普及组试题精解 403 9.1.1 求级数之和 403 9.1.2 求素数组合 406 9.1.3 计算卒的路线 409 9.1.4 检查校验码 411 9.1.5 排座位 413 9.1.6 击鼓传花 416 9.1.7 绘制模拟立体图 418 9.1.8 公路上的树 422 9.1.9 采药 423 9.1.10 求等价表达式 425 9.1.11 不开心的龙龙 429 9.1.12 孙悟空摘桃 431 9.1.13 FBI树 433 9.1.14 外星人的语言 435 9.2 NOIP提高组试题精解 440 9.2.1 砝码称重 440 9.2.2 阿明的零花钱 442 9.2.3 购买年货 445 9.2.4 调整队形 448 9.2.5 均分纸牌 450 9.2.6 最小矩形面积 452 9.2.7 低价买股票 460 9.2.8 数字金字塔 463 9.2.9 方格取数 465 9.2.10 导弹防御系统 468 9.3 上机实践 471 第10章 常见面试题及解答 473 10.1 数据结构类面试题 473 10.1.1 选择题 473 10.1.2 编程题 475 10.2 经典算法类面试题 482 附录 Dev-C++开发环境的使用 489

2019-03-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除