自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yimaneililiaiyong的专栏

开发技术门交流

  • 博客(3)
  • 资源 (17)
  • 收藏
  • 关注

原创 Vmware虚拟机Centos7修改网卡名

场景:如果安装好的虚拟机需要更改网络配置,可能需要修改虚拟机的网上名称1,通过#ip a 命令查看虚拟机网络信息2,重命名虚拟机网络配置文件名3,禁用网卡一致性命名规则修改/etc/sysconfig/grub,添加net.ifnames=0 biosdevname=04,运行命令grub2-mkconfig -o /boot/grub2/grub.cfg 来重新生成GRUB配置并更新内核参数。5...

2018-03-30 13:58:11 2359

原创 Vmware虚拟机Cenots 7主机模式网络配置

虚拟机Cenots 7主机模式网络配置1,虚拟机Cenots7网络配置文件配置项注意:保证以下所有的配置项都正确,其中MAC地址如果没有需要手动添加,可以 #ip a命令查看此地址。2,确认70-persistent-net.rules配置文件中的配置正确注意:该配置如果被注释需要先去掉注释,然后根据/etc/sysconfig/network-scripts/ifcfg-eth0配置文件中的网络...

2018-03-30 11:34:51 293

转载 Mysql--Docker主从环境搭建及相关问题解析

1. 编写主MySQL的Docker文件新建文件夹,命名为mysql-master-v1。在文件夹mysql-master-v1中新建文件Dockerfile和master.cnf。笔者推荐使用的编辑器是Visual Studio Code。利用编辑器将这两个文件的编码设置成UTF-8。因为本文介绍安装到linux系统下,所以笔者建议读者把换行符设置成LF,以兼顾Linux操作系统。按照如下内容编...

2018-03-14 11:24:24 188

Python核心编程(第三版)--高清中文版PDF-高清英文版PDF-源代码

《Python核心编程(第3版)》是经典畅销图书《Python核心编程(第二版)》的全新升级版本,总共分为3部分。第1部分为讲解了Python的一些通用应用,包括正则表达式、网络编程、Internet客户端编程、多线程编程、GUI编程、数据库编程、Microsoft Office编程、扩展Python等内容。第2部分讲解了与Web开发相关的主题,包括Web客户端和服务器、CGI和WSGI相关的Web编程、Django Web框架、云计算、高级Web服务。第3部分则为一个补充/实验章节,包括文本处理以及一些其他内容。 《Python核心编程(第3版)》适合具有一定经验的Python开发人员阅读。 第1部分 通用应用主题 第1章 正则表达式 2 1.1 简介/动机 3 1.2 特殊符号和字符 5 1.2.1 使用择一匹配符号匹配多个正则表达式模式 6 1.2.2 匹配任意单个字符 6 1.2.3 从字符串起始或者结尾或者单词边界匹配 7 1.2.4 创建字符集 8 1.2.5 限定范围和否定 8 1.2.6 使用闭包操作符实现存在性和频数匹配 9 1.2.7 表示字符集的特殊字符 10 1.2.8 使用圆括号指定分组 10 1.2.9 扩展表示法 11 1.3 正则表达式和Python语言 11 1.3.1 re模块:核心函数和方法 12 1.3.2 使用compile()函数编译正则表达式 13 1.3.3 匹配对象以及group()和groups()方法 14 1.3.4 使用match()方法匹配字符串 14 1.3.5 使用search()在一个字符串中查找模式(搜索与匹配的对比) 15 1.3.6 匹配多个字符串 16 1.3.7 匹配任何单个字符(.) 16 1.3.8 创建字符集([ ]) 17 1.3.9 重复、特殊字符以及分组 18 1.3.10 匹配字符串的起始和结尾以及单词边界 20 1.3.11 使用findall()和finditer()查找每一次出现的位置 21 1.3.12 使用sub()和subn()搜索与替换 22 1.3.13 在限定模式上使用split()分隔字符串 23 1.3.14 扩展符号 24 1.3.15 杂项 27 1.4 一些正则表达式示例 28 1.5 更长的正则表达式示例 33 1.5.1 匹配字符串 35 1.5.2 搜索与匹配……还有贪婪 37 1.6 练习 39 第2章 网络编程 42 2.1 简介 43 2.2 客户端/服务器架构 43 2.2.1 硬件客户端/服务器架构 43 2.2.2 软件客户端/服务器架构 44 2.2.3 银行出纳员作为服务器吗 44 2.2.4 客户端/服务器网络编程 45 2.3 套接字:通信端点 46 2.3.1 套接字 46 2.3.2 套接字地址:主机-端口对 47 2.3.3 面向连接的套接字与无连接的套接字 47 2.4 Python中的网络编程 48 2.4.1 socket()模块函数 49 2.4.2 套接字对象(内置)方法 49 2.4.3 创建TCP服务器 51 2.4.4 创建TCP客户端 54 2.4.5 执行TCP服务器和客户端 56 2.4.6 创建UDP服务器 58 2.4.7 创建UDP客户端 59 2.4.8 执行UDP服务器和客户端 60 2.4.9 socket模块属性 61 2.5 *SocketServer模块 62 2.5.1 创建SocketServer TCP服务器 63 2.5.2 创建SocketServer TCP客户端 64 2.5.3 执行TCP服务器和客户端 65 2.6 *Twisted框架介绍 66 2.6.1 创建Twisted Reactor TCP服务器 66 2.6.2 创建Twisted Reactor TCP客户端 67 2.6.3 执行TCP服务器和客户端 69 2.7 相关模块 69 2.8 练习 70 第3章 因特网客户端编程 74 3.1 因特网客户端简介 75 3.2 文件传输 75 3.2.1 文件传输因特网协议 75 3.2.2 文件传输协议 76 3.2.3 Python和FTP 77 3.2.4 ftplib.FTP类的方法 77 3.2.5 交互式FTP示例 78 3.2.6 客户端FTP程序示例 79 3.2.7 FTP的其他内容 80 3.3 网络新闻 81 3.3.1 Usenet与新闻组 81 3.3.2 网络新闻传输协议 82 3.3.3 Python和NNTP 83 3.3.4 nntplib.NNTP类方法 83 3.3.5 交互式NNTP示例 84 3.3.6 客户端程序NNTP示例 85 3.3.7 NNTP的其他内容 89 3.4 电子邮件 90 3.4.1 电子邮件系统组件和协议 90 3.4.2 发送电子邮件 91 3.4.3 Python和SMTP 92 3.4.4 smtplib.SMTP类方法 92 3.4.5 交互式SMTP示例 93 3.4.6 SMTP的其他内容 94 3.4.7 接收电子邮件 94 3.4.8 POP和IMAP 95 3.4.9 Python和POP3 95 3.4.10 交互式POP3示例 96 3.4.11 poplib.POP3类方法 97 3.4.12 客户端程序SMTP和POP3示例 98 3.4.13 Python和IMAP4 100 3.4.14 交互式IMAP4示例 100 3.4.15 imaplib.IMAP4类中的常用方法 101 3.5 实战 102 3.5.1 生成电子邮件 102 3.5.2 解析电子邮件 104 3.5.3 基于Web的云电子邮件服务 105 3.5.4 最佳实践:安全、重构 106 3.5.5 Yahoo! Mail 108 3.5.6 Gmail 112 3.6 相关模块 115 3.6.1 电子邮件 115 3.6.2 其他因特网客户端协议 115 3.7 练习 116 第4章 多线程编程 122 4.1 简介/动机 123 4.2 线程和进程 124 4.2.1 进程 124 4.2.2 线程 124 4.3 线程和Python 125 4.3.1 全局解释器锁 125 4.3.2 退出线程 126 4.3.3 在Python中使用线程 126 4.3.4 不使用线程的情况 126 4.3.5 Python的threading模块 128 4.4 thread模块 128 4.5 threading模块 132 4.5.1 Thread类 133 4.5.2 threading模块的其他函数 139 4.6 单线程和多线程执行对比 140 4.7 多线程实践 142 4.7.1 图书排名示例 142 4.7.2 同步原语 149 4.7.3 锁示例 149 4.7.4 信号量示例 156 4.8 生产者-消费者问题和Queue/queue模块 159 4.9 线程的替代方案 162 4.9.1 subprocess模块 163 4.9.2 multiprocessing模块 163 4.9.3 concurrent.futures模块 163 4.10 相关模块 165 4.11 练习 165 第5章 GUI编程 168 5.1 简介 169 5.1.1 Tcl、Tk和Tkinter 169 5.1.2 安装和使用Tkinter 170 5.1.3 客户端/服务端架构 170 5.2 Tkinter和Python编程 170 5.2.1 Tkinter模块:添加Tk到应用中 171 5.2.2 GUI编程介绍 171 5.2.3 顶层窗口:Tkinter.Tk() 173 5.2.4 Tk控件 173 5.3 Tkinter示例 174 5.3.1 Label控件 174 5.3.2 Button控件 175 5.3.3 Label和Button控件 175 5.3.4 Label、Button和Scale控件 176 5.3.5 偏函数应用示例 178 5.3.6 中级Tkinter示例 180 5.4 其他GUI简介 185 5.4.1 Tk接口扩展(Tix) 187 5.4.2 Python MegaWidgets(PMW) 188 5.4.3 wxWidgets和wxPython 188 5.4.4 GTK+和PyGTK 190 5.4.5 Tile/Ttk 192 5.5 相关模块和其他GUI 194 5.6 练习 196 第6章 数据库编程 198 6.1 简介 199 6.1.1 持久化存储 199 6.1.2 数据库基本操作和SQL 199 6.1.3 数据库和Python 201 6.2 Python的DB-API 203 6.2.1 模块属性 203 6.2.2 Connection对象 205 6.2.3 Cursor对象 206 6.2.4 类型对象和构造函数 207 6.2.5 关系数据库 209 6.2.6 数据库和Python:适配器 210 6.2.7 使用数据库适配器的示例 210 6.2.8 数据库适配器示例应用 215 6.3 ORM 226 6.3.1 考虑对象,而不是SQL 227 6.3.2 Python和ORM 227 6.3.3 员工角色数据库示例 228 6.3.4 SQLAlchemy 229 6.3.5 SQLObject 240 6.4 非关系数据库 245 6.4.1 NoSQL介绍 245 6.4.2 MongoDB 246 6.4.3 PyMongo:MongoDB和Python 246 6.4.4 总结 250 6.5 相关文献 250 6.6 练习 252 第7章 *Microsoft Office编程 256 7.1 简介 257 7.2 使用Python进行COM客户端编程 257 7.2.1 客户端COM编程 258 7.2.2 入门 258 7.3 入门示例 259 7.3.1 Excel 259 7.3.2 Word 261 7.3.3 PowerPoint 262 7.3.4 Outlook 264 7.4 中级示例 266 7.4.1 Excel 266 7.4.2 Outlook 268 7.4.3 PowerPoint 273 7.4.4 总结 280 7.5 相关模块/包 281 7.6 练习 281 第8章 扩展Python 286 8.1 简介和动机 287 8.1.1 Python扩展简介 287 8.1.2 什么情况下需要扩展Python 288 8.1.3 什么情况下不应该扩展Python 288 8.2 编写Python扩展 289 8.2.1 创建应用代码 289 8.2.2 根据样板编写封装代码 291 8.2.3 编译 296 8.2.4 导入并测试 297 8.2.5 引用计数 300 8.2.6 线程和全局解释器锁 301 8.3 相关主题 302 8.3.1 SWIG 302 8.3.2 Pyrex 302 8.3.3 Cython 302 8.3.4 Psyco 303 8.3.5 PyPy 303 8.3.6 嵌入Python 304 8.4 练习 304 第2部分 Web开发 第9章 Web客户端和服务器 306 9.1 简介 307 9.1.1 Web应用:客户端/服务器计算 307 9.1.2 因特网 308 9.2 Python Web客户端工具 310 9.2.1 统一资源定位符 310 9.2.2 urlparse模块 312 9.2.3 urllib模块/包 313 9.2.4 使用urllib2 HTTP验证的示例 317 9.2.5 将HTTP验证示例移植到Python 3中 319 9.3 Web客户端 322 9.3.1 一个简单的Web爬虫/蜘蛛/机器人 322 9.3.2 解析Web页面 328 9.3.3 可编程的Web浏览 333 9.4 Web(HTTP)服务器 336 9.5 相关模块 339 9.6 练习 341 第10章 Web编程:CGI和WSGI 345 10.1 简介 346 10.2 帮助Web服务器处理客户端数据 346 10.2.1 CGI简介 346 10.2.2 CGI应用程序 347 10.2.3 cgi模块 348 10.2.4 cgitb模块 348 10.3 构建CGI应用程序 349 10.3.1 构建Web服务器 349 10.3.2 建立表单页 351 10.3.3 生成结果页面 352 10.3.4 生成表单和结果页面 353 10.3.5 全面交互的Web站点 357 10.4 在CGI中使用Unicode 362 10.5 高级CGI 364 10.5.1 mulitipart表单提交和文件上传 364 10.5.2 多值字段 364 10.5.3 cookie 365 10.5.4 cookie和文件上传 365 10.6 WSGI简介 373 10.6.1 动机(替代CGI) 373 10.6.2 服务器集成 374 10.6.3 外部进程 374 10.6.4 WSGI简介 375 10.6.5 WSGI服务器 376 10.6.6 参考服务器 377 10.6.7 WSGI应用示例 378 10.6.8 中间件及封装WSGI应用 378 10.6.9 在Python 3中使用WSGI 379 10.7 现实世界中的Web开发 380 10.8 相关模块 380 10.9 练习 381 第11章 Web框架:Django 384 11.1 简介 385 11.2 Web框架 385 11.3 Django简介 386 11.4 项目和应用 390 11.4.1 在Django中创建项目 390 11.4.2 运行开发服务器 393 11.5 “Hello World”应用(一个博客) 394 11.6 创建模型来添加数据库服务 396 11.6.1 设置数据库 396 11.6.2 创建表 398 11.7 Python 应用shell 400 11.7.1 在Django中使用Python shell 400 11.7.2 测试数据模型 402 11.8 Django管理应用 403 11.8.1 设置admin 403 11.8.2 使用admin 404 11.9 创建博客的用户界面 410 11.9.1 创建模板 411 11.9.2 创建URL模式 412 11.9.3 创建视图函数 415 11.10 改进输出 418 11.11 处理用户输入 422 11.11.1 模板:添加HTML表单 423 11.11.2 添加URLconf项 423 11.11.3 视图:处理用户输入 423 11.11.4 跨站点请求伪造 424 11.12 表单和模型表单 426 11.12.1 Django表单简介 426 11.12.2 模型表单示例 427 11.12.3 使用ModelForm来生成HTML表单 427 11.12.4 处理ModelForm数据 428 11.13 视图进阶 429 11.14 *改善外观 431 11.15 *单元测试 432 11.15.1 blog应用的代码审查 434 11.15.2 blog应用总结 439 11.16 *中级Django应用:TweetApprover 439 11.16.1 创建项目文件结构 440 11.16.2 安装Twython库 445 11.16.3 URL结构 446 11.16.4 数据模型 449 11.16.5 提交新推文以便审核 453 11.16.6 审核推文 457 11.17 资源 465 11.18 总结 465 11.19 练习 466 第12章 云计算:Google App Engine 470 12.1 简介 471 12.2 云计算 471 12.2.1 云计算服务的层次 472 12.2.2 App Engine 473 12.3 沙盒和App Engine SDK 476 12.4 选择一个App Engine框架 479 12.5 Python 2.7支持 485 12.5.1 一般差异 486 12.5.2 代码中的差异 486 12.6 与Django比较 487 12.6.1 开始“Hello World” 487 12.6.2 手动创建“Hello World”(Zip文件用户) 488 12.7 将“Hello World”改成一个 简单的博客 489 12.7.1 快速发现改动:30秒内将纯文本转成HTML 489 12.7.2 添加表单 490 12.7.3 添加Datastore服务 492 12.7.4 迭代改进 496 12.7.5 开发/SDK控制台 496 12.8 添加Memcache服务 502 12.9 静态文件 505 12.10 添加用户服务 505 12.10.1 Google账号验证 506 12.10.2 联合验证 507 12.11 远程API shell 507 12.12 问与答(Python实现) 509 12.12.1 发送电子邮件 509 12.12.2 接收电子邮件 510 12.13 使用XMPP发送即时消息 512 12.14 处理图片 514 12.15 任务队列(非定期任务) 514 12.15.1 创建任务 515 12.15.2 配置app.yaml 515 12.15.3 其他任务创建选项 516 12.15.4 将发送电子邮件作为任务 517 12.15.5 deferred包 519 12.16 使用Appstats进行分析 520 12.16.1 在app.yaml中添加标准处理程序 521 12.16.2 添加自定义Admin Console页面 521 12.16.3 作为内置界面启用界面 521 12.17 URLfetch服务 522 12.18 问与答(无Python实现) 522 12.18.1 Cron服务(计划任务作业) 523 12.18.2 预热请求 523 12.18.3 DoS保护 524 12.19 厂商锁定 524 12.20 资源 525 12.21 总结 526 12.22 练习 527 第13章 Web服务 530 13.1 简介 531 13.2 Yahoo!金融股票报价服务器 531 13.3 Twitter微博 534 13.3.1 社交网络 534 13.3.2 Twitter和Python 535 13.3.3 稍微长一点的API组合应用示例 537 13.3.4 总结 547 13.3.5 额外在线资源 548 13.4 练习 548 第3部分 补充/实验章节 第14章 文本处理 553 14.1 逗号分隔值(CSV) 554 14.1.1 CSV简介 554 14.1.2 再论股票投资组合示例 556 14.2 JSON 557 14.3 可扩展标记语言 561 14.3.1 XML简介 562 14.3.2 Python和XML 562 14.3.3 XML实战 566 14.3.4 *使用XML-RPC的客户端-服务器服务 569 14.4 参考文献 573 14.5 相关模块 574 14.6 练习 574 第15章 其他内容 577 15.1 Jython 578 15.1.1 Jython简介 578 15.1.2 Swing GUI开发示例 579 15.2 Google+ 581 15.2.1 Google+平台简介 582 15.2.2 Python和Google+API 582 15.2.3 一个简单的社交媒体分析工具 582 15.3 练习 590 附录A 部分练习参考答案 593 附录B 参考表 597 B.1 Python关键字 597 B.2 Python标准操作符和函数 598 B.3 数值类型操作符和函数 599 B.4 序列类型操作符和函数 600 B.5 字符串格式化操作符转换符号 602 B.6 字符串格式化操作符指令 603 B.7 字符串类型内置方法 603 B.8 列表类型内置方法 605 B.9 字典类型内置方法 605 B.10 集合类型操作符和内置函数 606 B.11 文件对象方法和数据属性 607 B.12 Python异常 608 B.13 类的特殊方法 610 B.14 Python操作符汇总 612 附录C Python 3:一种编程语言进化的产物 614 C.1 为何Python在变化 614 C.2 都发生了哪些变化 615 C.2.1 print变成了print() 615 C.2.2 字符串:默认为Unicode编码 616 C.2.3 单类类型 616 C.2.4 更新异常的语法 617 C.2.5 整数的更新 618 C.2.6 迭代器无处不在 619 C.3 迁移工具 619 C.3.1 2to3工具 619 C.3.2 Python 2.6+ 620 C.4 结论 620 C.5 参考资料 620 附录D 利用Python 2.6+向Python 3迁移 622 D.1 Python 3:Python的下一代 622 D.2 整数 623 D.2.1 单整数类型 624 D.2.2 新型二进制和改进的八进制字符 624 D.2.3 经典除法或真除法 625 D.3 内置函数 626 D.3.1 print语句或print()函数 626 D.3.2 reduce()转移到了functools模块中 627 D.3.3 其他更新 627 D.4 面向对象编程:两种不同的类对象 628 D.5 字符串 629 D.6 异常 630 D.6.1 处理异常(使用as) 630 D.6.2 抛出异常 630 D.7 其他转换工具和技巧 631 D.8 编写兼容版本2.x和3.x的代码 632 D.8.1 对比print和print() 632 D.8.2 将你的方法导入解决方案中 633 D.8.3 整合在一起 634 D.9 结论 635

2019-04-02

Python编程从入门到实践--高清PDF+源代码

本书是一本针对所有层次的Python 读者而作的Python 入门书。全书分两部分:第一部分介绍用Python 编程所必须了解的基本概念,包括matplotlib、NumPy 和Pygal 等强大的Python 库和工具介绍,以及列表、字典、if 语句、类、文件与异常、代码测试等内容;第二部分将理论付诸实践,讲解如何开发三个项目,包括简单的Python 2D 游戏开发如何利用数据生成交互式的信息图,以及创建和定制简单的Web 应用,并帮读者解决常见编程问题和困惑。 第一部分 基础知识 第1章 起步  2 1.1 搭建编程环境  2 1.1.1 Python 2和Python 3  2 1.1.2 运行Python代码片段  3 1.1.3 Hello World程序  3 1.2 在不同操作系统中搭建Python编程环境  3 1.2.1 在Linux系统中搭建Python编程环境  3 1.2.2 在OS X系统中搭建Python编程环境  6 1.2.3 在Windows系统中搭建Python编程环境  8 1.3 解决安装问题  12 1.4 从终端运行Python程序  13 1.4.1 在Linux和OS X系统中从终端运行Python程序  13 1.4.2 在Windows系统中从终端运行Python程序  13 1.5 小结  14 第2章 变量和简单数据类型  15 2.1 运行hello_world.py时发生的情况  15 2.2 变量  16 2.2.1 变量的命名和使用  16 2.2.2 使用变量时避免命名错误  17 2.3 字符串  18 2.3.1 使用方法修改字符串的大小写  19 2.3.2 合并(拼接)字符串  19 2.3.3 使用制表符或换行符来添加空白  20 2.3.4 删除空白  21 2.3.5 使用字符串时避免语法错误  22 2.3.6 Python 2中的print语句  23 2.4 数字  24 2.4.1 整数  24 2.4.2 浮点数  25 2.4.3 使用函数str()避免类型错误  25 2.4.4 Python 2中的整数  26 2.5 注释  27 2.5.1 如何编写注释  27 2.5.2 该编写什么样的注释  28 2.6 Python之禅  28 2.7 小结  30 第3章 列表简介  31 3.1 列表是什么  31 3.1.1 访问列表元素  32 3.1.2 索引从0而不是1开始  32 3.1.3 使用列表中的各个值  33 3.2 修改、添加和删除元素  33 3.2.1 修改列表元素  34 3.2.2 在列表中添加元素  34 3.2.3 从列表中删除元素  35 3.3 组织列表  39 3.3.1 使用方法sort()对列表进行永久性排序  39 3.3.2 使用函数sorted()对列表进行临时排序  40 3.3.3 倒着打印列表  41 3.3.4 确定列表的长度  41 3.4 使用列表时避免索引错误  42 3.5 小结  43 第4章 操作列表  44 4.1 遍历整个列表  44 4.1.1 深入地研究循环  45 4.1.2 在for循环中执行更多的操作  46 4.1.3 在for循环结束后执行一些操作  47 4.2 避免缩进错误  47 4.2.1 忘记缩进  48 4.2.2 忘记缩进额外的代码行  48 4.2.3 不必要的缩进  49 4.2.4 循环后不必要的缩进  49 4.2.5 遗漏了冒号  50 4.3 创建数值列表  51 4.3.1 使用函数range()  51 4.3.2 使用range()创建数字列表  51 4.3.3 对数字列表执行简单的统计计算  53 4.3.4 列表解析  53 4.4 使用列表的一部分  54 4.4.1 切片  54 4.4.2 遍历切片  56 4.4.3 复制列表  56 4.5 元组  59 4.5.1 定义元组  59 4.5.2 遍历元组中的所有值  59 4.5.3 修改元组变量  60 4.6 设置代码格式  61 4.6.1 格式设置指南  61 4.6.2 缩进  61 4.6.3 行长  61 4.6.4 空行  62 4.6.5 其他格式设置指南  62 4.7 小结  63 第5章 if语句  64 5.1 一个简单示例  64 5.2 条件测试  65 5.2.1 检查是否相等  65 5.2.2 检查是否相等时不考虑大小写  65 5.2.3 检查是否不相等  66 5.2.4 比较数字  67 5.2.5 检查多个条件  67 5.2.6 检查特定值是否包含在列表中  68 5.2.7 检查特定值是否不包含在列表中  69 5.2.8 布尔表达式  69 5.3 if语句  70 5.3.1 简单的if语句  70 5.3.2 if-else语句  71 5.3.3 if-elif-else结构  72 5.3.4 使用多个elif代码块  73 5.3.5 省略else代码块  74 5.3.6 测试多个条件  74 5.4 使用if语句处理列表  76 5.4.1 检查特殊元素  77 5.4.2 确定列表不是空的  78 5.4.3 使用多个列表  78 5.5 设置if语句的格式  80 5.6 小结  80 第6章 字典  81 6.1 一个简单的字典  81 6.2 使用字典  82 6.2.1 访问字典中的值  82 6.2.2 添加键—值对  83 6.2.3 先创建一个空字典  83 6.2.4 修改字典中的值  84 6.2.5 删除键—值对  85 6.2.6 由类似对象组成的字典  86 6.3 遍历字典  87 6.3.1 遍历所有的键—值对  87 6.3.2 遍历字典中的所有键  89 6.3.3 按顺序遍历字典中的所有键  91 6.3.4 遍历字典中的所有值  91 6.4 嵌套  93 6.4.1 字典列表  93 6.4.2 在字典中存储列表  95 6.4.3 在字典中存储字典  97 6.5 小结  99 第7章 用户输入和while循环  100 7.1 函数input()的工作原理  100 7.1.1 编写清晰的程序  101 7.1.2 使用int()来获取数值输入  102 7.1.3 求模运算符  103 7.1.4 在Python 2.7中获取输入  104 7.2 while循环简介  104 7.2.1 使用while循环  104 7.2.2 让用户选择何时退出  105 7.2.3 使用标志  106 7.2.4 使用break退出循环  107 7.2.5 在循环中使用continue  108 7.2.6 避免无限循环  109 7.3 使用while循环来处理列表和字典  110 7.3.1 在列表之间移动元素  110 7.3.2 删除包含特定值的所有列表元素  111 7.3.3 使用用户输入来填充字典  112 7.4 小结  113 第8章 函数  114 8.1 定义函数  114 8.1.1 向函数传递信息  115 8.1.2 实参和形参  115 8.2 传递实参  116 8.2.1 位置实参  116 8.2.2 关键字实参  118 8.2.3 默认值  118 8.2.4 等效的函数调用  119 8.2.5 避免实参错误  120 8.3 返回值  121 8.3.1 返回简单值  121 8.3.2 让实参变成可选的  122 8.3.3 返回字典  123 8.3.4 结合使用函数和while循环  124 8.4 传递列表  126 8.4.1 在函数中修改列表  126 8.4.2 禁止函数修改列表  129 8.5 传递任意数量的实参  130 8.5.1 结合使用位置实参和任意数量实参  131 8.5.2 使用任意数量的关键字实参  131 8.6 将函数存储在模块中  133 8.6.1 导入整个模块  133 8.6.2 导入特定的函数  134 8.6.3 使用as给函数指定别名  134 8.6.4 使用as给模块指定别名  135 8.6.5 导入模块中的所有函数  135 8.7 函数编写指南  136 8.8 小结  137 第9章 类  138 9.1 创建和使用类  138 9.1.1 创建Dog类  139 9.1.2 根据类创建实例  140 9.2 使用类和实例  142 9.2.1 Car类  143 9.2.2 给属性指定默认值  143 9.2.3 修改属性的值  144 9.3 继承  147 9.3.1 子类的方法__init__()  147 9.3.2 Python 2.7中的继承  149 9.3.3 给子类定义属性和方法  149 9.3.4 重写父类的方法  150 9.3.5 将实例用作属性  150 9.3.6 模拟实物  152 9.4 导入类  153 9.4.1 导入单个类  153 9.4.2 在一个模块中存储多个类  155 9.4.3 从一个模块中导入多个类  156 9.4.4 导入整个模块  157 9.4.5 导入模块中的所有类  157 9.4.6 在一个模块中导入另一个模块  157 9.4.7 自定义工作流程  158 9.5 Python标准库  159 9.6 类编码风格  161 9.7 小结  161 第10章 文件和异常  162 10.1 从文件中读取数据  162 10.1.1 读取整个文件  162 10.1.2 文件路径  164 10.1.3 逐行读取  165 10.1.4 创建一个包含文件各行内容的列表  166 10.1.5 使用文件的内容  166 10.1.6 包含一百万位的大型文件  168 10.1.7 圆周率值中包含你的生日吗  168 10.2 写入文件  169 10.2.1 写入空文件  170 10.2.2 写入多行  170 10.2.3 附加到文件  171 10.3 异常  172 10.3.1 处理ZeroDivisionError异常  172 10.3.2 使用try-except 代码块  173 10.3.3 使用异常避免崩溃  173 10.3.4 else 代码块  174 10.3.5 处理FileNotFoundError异常  175 10.3.6 分析文本  176 10.3.7 使用多个文件  177 10.3.8 失败时一声不吭  178 10.3.9 决定报告哪些错误  179 10.4 存储数据  180 10.4.1 使用json.dump()和json.load()  180 10.4.2 保存和读取用户生成的数据  181 10.4.3 重构  183 10.5 小结  186 第11章 测试代码  187 11.1 测试函数  187 11.1.1 单元测试和测试用例  188 11.1.2 可通过的测试  188 11.1.3 不能通过的测试  190 11.1.4 测试未通过时怎么办  191 11.1.5 添加新测试  191 11.2 测试类  193 11.2.1 各种断言方法  193 11.2.2 一个要测试的类  194 11.2.3 测试AnonymousSurvey类  195 11.2.4 方法setUp()  197 11.3 小结  199 第二部分 项 目 项目1 外星人入侵  202 第12章 武装飞船  203 12.1 规划项目  203 12.2 安装Pygame  204 12.2.1 使用pip安装Python包  204 12.2.2 在Linux系统中安装Pygame  206 12.2.3 在OS X系统中安装Pygame  207 12.2.4 在Windows系统中安装Pygame  207 12.3 开始游戏项目  207 12.3.1 创建Pygame窗口以及响应用户输入  208 12.3.2 设置背景色  209 12.3.3 创建设置类  210 12.4 添加飞船图像  211 12.4.1 创建Ship类  212 12.4.2 在屏幕上绘制飞船  213 12.5 重构:模块game_functions  214 12.5.1 函数check_events()  214 12.5.2 函数update_screen()  215 12.6 驾驶飞船  216 12.6.1 响应按键  216 12.6.2 允许不断移动  217 12.6.3 左右移动  219 12.6.4 调整飞船的速度  220 12.6.5 限制飞船的活动范围  221 12.6.6 重构check_events()  222 12.7 简单回顾  223 12.7.1 alien_invasion.py  223 12.7.2 settings.py  223 12.7.3 game_functions.py  223 12.7.4 ship.py  223 12.8 射击  224 12.8.1 添加子弹设置  224 12.8.2 创建Bullet类  224 12.8.3 将子弹存储到编组中  226 12.8.4 开火  227 12.8.5 删除已消失的子弹  228 12.8.6 限制子弹数量  229 12.8.7 创建函数update_bullets()  229 12.8.8 创建函数fire_bullet()  230 12.9 小结  231 第13章 外星人  232 13.1 回顾项目  232 13.2 创建第一个外星人  233 13.2.1 创建Alien类  233 13.2.2 创建Alien实例  234 13.2.3 让外星人出现在屏幕上  235 13.3 创建一群外星人  236 13.3.1 确定一行可容纳多少个外星人  236 13.3.2 创建多行外星人  236 13.3.3 创建外星人群  237 13.3.4 重构create_fleet()  239 13.3.5 添加行  240 13.4 让外星人群移动  242 13.4.1 向右移动外星人  243 13.4.2 创建表示外星人移动方向的设置  244 13.4.3 检查外星人是否撞到了屏幕边缘  244 13.4.4 向下移动外星人群并改变移动方向  245 13.5 射杀外星人  246 13.5.1 检测子弹与外星人的碰撞  246 13.5.2 为测试创建大子弹  247 13.5.3 生成新的外星人群  248 13.5.4 提高子弹的速度  249 13.5.5 重构update_bullets()  249 13.6 结束游戏  250 13.6.1 检测外星人和飞船碰撞  250 13.6.2 响应外星人和飞船碰撞  251 13.6.3 有外星人到达屏幕底端  254 13.6.4 游戏结束  255 13.7 确定应运行游戏的哪些部分  255 13.8 小结  256 第14章 记分  257 14.1 添加Play 按钮  257 14.1.1 创建Button类  258 14.1.2 在屏幕上绘制按钮  259 14.1.3 开始游戏  261 14.1.4 重置游戏  261 14.1.5 将Play 按钮切换到非活动状态  263 14.1.6 隐藏光标  263 14.2 提高等级  264 14.2.1 修改速度设置  264 14.2.2 重置速度  266 14.3 记分  267 14.3.1 显示得分  267 14.3.2 创建记分牌  268 14.3.3 在外星人被消灭时更新得分  270 14.3.4 将消灭的每个外星人的点数都计入得分  271 14.3.5 提高点数  271 14.3.6 将得分圆整  272 14.3.7 最高得分  274 14.3.8 显示等级  276 14.3.9 显示余下的飞船数  279 14.4 小结  283 项目2 数据可视化  284 第15章 生成数据  285 15.1 安装matplotlib  285 15.1.1 在Linux系统中安装matplotlib  286 15.1.2 在OS X系统中安装matplotlib  286 15.1.3 在Windows系统中安装matplotlib  286 15.1.4 测试matplotlib  287 15.1.5 matplotlib画廊  287 15.2 绘制简单的折线图  287 15.2.1 修改标签文字和线条粗细  288 15.2.2 校正图形  289 15.2.3 使用scatter()绘制散点图并设置其样式  290 15.2.4 使用scatter()绘制一系列点  291 15.2.5 自动计算数据  292 15.2.6 删除数据点的轮廓  293 15.2.7 自定义颜色  293 15.2.8 使用颜色映射  294 15.2.9 自动保存图表  295 15.3 随机漫步  295 15.3.1 创建RandomWalk()类  296 15.3.2 选择方向  296 15.3.3 绘制随机漫步图  297 15.3.4 模拟多次随机漫步  298 15.3.5 设置随机漫步图的样式  299 15.3.6 给点着色  299 15.3.7 重新绘制起点和终点  300 15.3.8 隐藏坐标轴  301 15.3.9 增加点数  301 15.3.10 调整尺寸以适合屏幕  302 15.4 使用Pygal模拟掷骰子  303 15.4.1 安装Pygal  304 15.4.2 Pygal画廊  304 15.4.3 创建Die类  304 15.4.4 掷骰子  305 15.4.5 分析结果  305 15.4.6 绘制直方图  306 15.4.7 同时掷两个骰子  307 15.4.8 同时掷两个面数不同的骰子  309 15.5 小结  311 第16章 下载数据  312 16.1 CSV文件格式  312 16.1.1 分析CSV文件头  313 16.1.2 打印文件头及其位置  314 16.1.3 提取并读取数据  314 16.1.4 绘制气温图表  315 16.1.5 模块datetime  316 16.1.6 在图表中添加日期  317 16.1.7 涵盖更长的时间  318 16.1.8 再绘制一个数据系列  319 16.1.9 给图表区域着色  320 16.1.10 错误检查  321 16.2 制作世界人口地图:JSON格式  324 16.2.1 下载世界人口数据  324 16.2.2 提取相关的数据  324 16.2.3 将字符串转换为数字值  326 16.2.4 获取两个字母的国别码  327 16.2.5 制作世界地图  329 16.2.6 在世界地图上呈现数字数据  330 16.2.7 绘制完整的世界人口地图  331 16.2.8 根据人口数量将国家分组  333 16.2.9 使用Pygal设置世界地图的样式  334 16.2.10 加亮颜色主题  335 16.3 小结  337 第17章 使用API  338 17.1 使用Web API  338 17.1.1 Git和GitHub  338 17.1.2 使用API调用请求数据  339 17.1.3 安装requests  339 17.1.4 处理API响应  340 17.1.5 处理响应字典  340 17.1.6 概述最受欢迎的仓库  342 17.1.7 监视API的速率限制  343 17.2 使用Pygal可视化仓库  344 17.2.1 改进Pygal图表  346 17.2.2 添加自定义工具提示  347 17.2.3 根据数据绘图  349 17.2.4 在图表中添加可单击的链接  350 17.3 Hacker News API  350 17.4 小结  353 项目3 Web 应用程序  354 第18章 Django入门  355 18.1 建立项目  355 18.1.1 制定规范  355 18.1.2 建立虚拟环境  356 18.1.3 安装virtualenv  356 18.1.4 激活虚拟环境  357 18.1.5 安装Django  357 18.1.6 在Django中创建项目  357 18.1.7 创建数据库  358 18.1.8 查看项目  359 18.2 创建应用程序  360 18.2.1 定义模型  360 18.2.2 激活模型  362 18.2.3 Django管理网站  363 18.2.4 定义模型Entry  365 18.2.5 迁移模型Entry  366 18.2.6 向管理网站注册Entry  366 18.2.7 Django shell  367 18.3 创建网页:学习笔记主页  369 18.3.1 映射URL  369 18.3.2 编写视图  371 18.3.3 编写模板  372 18.4 创建其他网页  373 18.4.1 模板继承  373 18.4.2 显示所有主题的页面  375 18.4.3 显示特定主题的页面  378 18.5 小结  381 第19章 用户账户  382 19.1 让用户能够输入数据  382 19.1.1 添加新主题  382 19.1.2 添加新条目  386 19.1.3 编辑条目  390 19.2 创建用户账户  392 19.2.1 应用程序users  393 19.2.2 登录页面  394 19.2.3 注销  396 19.2.4 注册页面  397 19.3 让用户拥有自己的数据  400 19.3.1 使用@login_required限制访问  400 19.3.2 将数据关联到用户  402 19.3.3 只允许用户访问自己的主题  405 19.3.4 保护用户的主题  405 19.3.5 保护页面edit_entry  406 19.3.6 将新主题关联到当前用户  406 19.4 小结  408 第20章 设置应用程序的样式并对其进行部署  409 20.1 设置项目“学习笔记”的样式  409 20.1.1 应用程序django-bootstrap3  410 20.1.2 使用Bootstrap来设置项目“学习笔记”的样式  411 20.1.3 修改base.html  411 20.1.4 使用jumbotron设置主页的样式  414 20.1.5 设置登录页面的样式  415 20.1.6 设置new_topic页面的样式  416 20.1.7 设置topics页面的样式  417 20.1.8 设置topic页面中条目的样式  417 20.2 部署“学习笔记”  419 20.2.1 建立Heroku账户  420 20.2.2 安装Heroku Toolbelt  420 20.2.3 安装必要的包  420 20.2.4 创建包含包列表的文件requirements.txt  421 20.2.5 指定Python版本  422 20.2.6 为部署到Herohu而修改settings.py  422 20.2.7 创建启动进程的Procfile  423 20.2.8 为部署到Herohu而修改wsgi.py  423 20.2.9 创建用于存储静态文件的目录  424 20.2.10 在本地使用gunicorn服务器  424 20.2.11 使用Git跟踪项目文件  425 20.2.12 推送到Heroku  426 20.2.13 在Heroku上建立数据库  427 20.2.14 改进Heroku部署  428 20.2.15 确保项目的安全  429 20.2.16 提交并推送修改  430 20.2.17 创建自定义错误页面  431 20.2.18 继续开发  434 20.2.19 设置SECRET_KEY  434 20.2.20 将项目从Heroku删除  434 20.3 小结  435 附录A 安装Python  436 附录B 文本编辑器  441 附录C 寻求帮助  447 附录D 使用Git进行版本控制  451 后记  460

2019-04-02

《流畅的Python》(高清中文和英文版PDF+源代码)

【技术大咖推荐】 “很荣幸担任这本优秀图书的技术审校。这本书能帮助很多中级Python程序员掌握这门语言,我也从中学到了相当多的知识!”——Alex Martelli,Python软件基金会成员 “对于想要扩充知识的中级和高级Python程序员来说,这本书是充满了实用编程技巧的宝藏。”——Daniel Greenfeld和Audrey Roy Greenfeld,Two Scoops of Django作者 【本书特色】 本书由奋战在Python开发一线近20年的Luciano Ramalho执笔,Victor Stinner、Alex Martelli等Python大咖担纲技术审稿人,从语言设计层面剖析编程细节,兼顾Python 3和Python 2,告诉你Python中不亲自动手实践就无法理解的语言陷阱成因和解决之道,教你写出风格地道的Python代码。 ● Python数据模型:理解为什么特殊方法是对象行为一致的关键。 ● 数据结构:充分利用内置类型,理解Unicode文本和字节二象性。 ● 把函数视作对象:把Python函数视作一等对象,并了解这一点对流行的设计模式的影响。 ● 面向对象习惯用法:通过构建类学习引用、可变性、接口、运算符重载和多重继承。 ● 控制流程:学习使用上下文管理器、生成器、协程,以及通过concurrent.futures和asyncio包实现的并发。 ● 元编程:理解特性、描述符、类装饰器和元类的工作原理。 【主要内容】 本书致力于帮助Python开发人员挖掘这门语言及相关程序库的优秀特性,避免重复劳动,同时写出简洁、流畅、易读、易维护,并且具有地道Python风格的代码。本书尤其深入探讨了Python语言的高级用法,涵盖数据结构、Python风格的对象、并行与并发,以及元编程等不同的方面。 本书适合中高级Python软件开发人员阅读参考。 【译者简介】 安道 专注于现代计算机技术的自由翻译,译有《Flask Web 开发》《Python 网络编程攻略》《Ruby on Rails 教程》等书

2019-04-02

代码大全2中文版(高清晰完美PDF版,索引完整)

第2版的《代码大全》是著名IT畅销书作者史蒂夫·迈克康奈尔11年前的经典著作的全新演绎:第2版不是第一版的简单修订增补,而是完全进行了重写;增加了很多与时俱进的内容。这也是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。它从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。这本书中所论述的技术不仅填补了初级与高级编程技术之间的空白,而且也为程序员们提供了一个有关编程技巧的信息来源。这本书对经验丰富的程序员、技术带头人、自学的程序员及几乎不懂太多编程技巧的学生们都是大有裨益的。可以说,无论是什么背景的读者,阅读这本书都有助于在更短的时间内、更容易地写出更好的程序。 第 1 章 欢迎进入软件构建的世界  3 第 2 章 用隐喻来更充分地理解软件开发  9 第 3 章 三思而后行:前期准备  23 第 4 章 关键的“构建”决策  61 第 5 章 软件构建中的设计  73 第 6 章 可以工作的类  125 第 7 章 高质量的子程序  161 第 8 章 防御式编程  187 第 9 章 伪代码编程过程  215 第 10 章 使用变量的一般事项  237 第 11 章 变量名的力量  259 第 12 章 基本数据类型  291 第 13 章 不常见的数据类型  319 第 14 章 组织直线型代码  347 第 15 章 使用条件语句  355 第 16 章 控制循环  367 第 17 章 不常见的控制结构  391 第 18 章 表驱动法  411 第 19 章 一般控制问题  431 第 20 章 软件质量概述  463 第 21 章 协同构建  479 第 22 章 开发者测试  499 第 23 章 调试  535 第 24 章 重构  563 第 25 章 代码调整策略  587 第 26 章 代码调整技术  609 第 27 章 程序规模对构建的影响  649 第 28 章 管理构建  661 第 29 章 集成  689 第 30 章 编程工具  709 第 31 章 布局与风格  729 第 32 章 自说明代码  777 第 33 章 个人性格  819 第 34 章 软件工艺的话题  837 第 35 章 何处有更多信息  855 参考文献   863 索引 883

2019-04-02

实战Gradle_中文完整版---高清---有书签

Gradle 是Java 软件开发中的自动化构建工具,类似于传统工具如Ant 和Maven。Gradle 吸收或沿用了Maven 中比较成功的一些实践,但相对于Maven 或Ant 又有极强的扩展。 《实战Gradle》(Gradle in Action)全方位地讲解了Gradle 工具相关的知识,包括Gradle 的基本知识、自动化构建的基本概念和最佳实践,以实际案例的方式解释如何使用Gradle 进行软件项目构建。除了基础知识外,由于软件开发绝对不仅仅是实现业务逻辑代码,《实战Gradle》还介绍了一些解决软件开发中常见问题的实践,如多语言、多项目构建,Gradle 在持续集成和持续交付中的应用,Gradle 构建JVM 其他语言,以及Gradle 集成JavaScript 构建等。 云计算和DevOps 的兴起,给软件行业带来了翻天覆地的变化,《实战Gradle》对于云计算平台、开源社区中的一些工具与Gradle 的结合使用也做了相关的介绍。 因为Groovy 用于编写Gradle 构建配置的DSL,所以为了帮助读者更好地理解Gradle,《实战Gradle》还讲解了Groovy 的基本知识,虽然不是全方位地讲解Groovy,但是理解Gradle 足矣。

2019-04-02

HTML5权威指南 高清中文PDF扫描版

高清版,自带目录书签方便大家阅读 《HTML5 权威指南》是系统学习网页设计的权威参考图书。本书分为五部分:第一部分介绍学习本书的预备知识和HTML、CSS 和JavaScript的最新进展;第二部分讨论HTML 元素,并详细说明了HTML5中新增和修改的元素;第三部分阐述CSS,涵盖了所有控制内容样式的CSS 选择器和属性,并辅以大量代码示例和图示;第四部分介绍DOM,剖析如何用JavaScript 操纵HTML 内容;第五部分讲解Ajax、多媒体和canvas 元素等HTML5 高级特性。 本书面向初学者和中等水平Web 开发人员,是牢固掌握HTML5、CSS3 和JavaScript 的必读之作。

2018-06-07

Java程序设计语言(第4版)高清晰书签PDF

带书签目录,高清晰版!!!! Java是近年来十分流行的程序设计语言,还是一门通用的网络编程语言,在Internet上有着广泛的应用。本书全面介绍了Java语言的功能和特点,主要内容包括: Java语言基础知识、Java语法构成、面向对象编程技术、常用系统类的使用、图形用户界面设计、图形与多媒体处理、异常处理、多线程技术和访问数据库技术等内容。 [1] 目录 第1章Java快速入门1 1.1Java简介1 1.1.1Java的定义1 1.1.2Java的起源和发展2 1.1.3Java的语言特点3 1.1.4Java的用途5 1.2Java开发与运行环境6 1.2.1JDK的下载与安装6 1.2.2JRE与JVM10 1.2.3在Windows中配置Java运行环境11 1.3编写与运行Java程序13 1.3.1Java的编程风格13 1.3.2编写第一个Java源程序14 1.3.3在“命令提示符”窗口编译与运行 Java程序15 1.4知识拓展——使用Eclipse16 1.4.1Eclipse的下载与安装16 1.4.2在Eclipse中编写与运行Java文件17 习题120 第2章Java基本语法22 2.1标识符、关键字与分隔符22 2.1.1标识符23 2.1.2关键字24 2.1.3分隔符24 2.2基本数据类型与变量26 2.2.1基本数据类型26 2.2.2常量27 2.2.3变量28 2.2.4数据类型的转换31 2.3表达式与运算符32 2.3.1赋值运算符32 2.3.2算术运算符33 2.3.3关系运算符34 2.3.4逻辑运算符35 2.3.5条件运算符36 2.3.6位运算符36 2.3.7其他运算符37 2.3.8运算符的优先级37 2.4数组与枚举39 2.4.1一维数组的声明39 2.4.2一维数组的创建与初始化39 2.4.3多维数组41 2.5知识拓展——foreach语法与枚举41 2.5.1foreach语法41 2.5.2枚举类型42 习题243 第3章Java语句及其控制结构45 3.1Java语句的类型45 3.1.1Java程序构成45 3.1.2Java语句的种类46 3.2选择语句48 3.2.1单分支选择语句(if语句)48 3.2.2二分支选择语句(if…else语句)48 3.2.3多分支选择语句(if…elseif…else语句)49 3.2.4嵌套的if…else语句50 3.2.5开关语句(switch语句)51 3.2.6在switch语句中应用枚举类型53 3.3循环语句54 3.3.1确定次数循环语句(for循环)54 3.3.2foreach循环语句56 3.3.3先判定后执行循环语句(while循环)57 3.3.4先执行后判定循环语句(do…while循环)58 3.3.5嵌套使用循环语句59 3.3.6循环语句小结59 3.4跳转语句60 3.4.1break语句60 3.4.2continue语句60 3.4.3带标号的continue语句61 3.4.4return语句62 3.5知识拓展——注解62 3.5.1注解概述63 3.5.2内置注解与元注解63 3.5.3自定义注解65 习题365 第4章面向对象编程68 4.1面向对象基本概念68 4.1.1对象与类68 4.1.2封装与消息70 4.1.3继承与多态71 4.1.4接口72 4.1.5面向对象的Java程序72 4.2类与对象74 4.2.1类的声明与修饰74 4.2.2不同含义的类77 4.2.3创建对象80 4.2.4构造方法84 4.3成员变量与访问控制85 [2] 4.3.2成员变量的修饰86 4.3.3成员变量与局部变量的区别88 4.4成员方法与参数传递机制90 4.4.1成员方法的设计90 4.4.2成员方法的声明与修饰92 4.4.3方法参数的传值方式94 4.4.4Java新特性——方法中的可变参数96 4.4.5方法小结97 4.5知识拓展——UML类图98 习题499 第5章深入类102 5.1类的继承性102 5.1.1类的层次关系103 5.1.2成员变量的继承和隐藏104 5.1.3成员方法的继承与覆盖106 5.1.4This和super关键字107 5.2类的多态性110 5.2.1成员方法的重载110 5.2.2构造方法的重载111 5.2.3避免重载出现歧义112 5.2.4向上转型113 5.3接口114 5.3.1实现系统提供的接口114 5.3.2创建自定义接口116 5.3.3接口的多继承118 5.3.4接口变量与接口回调118 5.3.5接口的默认方法119 5.3.6接口与抽象类的对比120 5.3.7面向接口的UML图121 5.4包121 5.4.1包机制121 5.4.2Java的API系统包122 5.4.3包引用125 5.4.4创建自定义包126 5.5知识拓展——Java设计模式127 5.5.1设计模式的分类127 5.5.2Java设计原则129 习题5129 第6章Java的异常处理机制132 6.1异常处理机制概述132 6.1.1错误与异常132 6.1.2异常发生的原因133 6.1.3如何处理异常133 6.2异常类的层次结构134 6.2.1Exception异常类的子类135 6.2.2Error错误类的子类136 6.3异常的处理136 6.3.1catch子句136 6.3.2throw语句139 6.3.3throws子句139 6.3.4finally语句142 6.3.5编译时对异常情况的检查143 6.4创建自己的异常类143 6.4.1创建自定义异常类143 6.4.2异常的使用原则144 6.5知识拓展——异常处理的新特性145 6.5.1try…with…resources语句145 6.5.2捕获多个异常146 6.5.3简单处理反射方法的异常类147 习题6148 第7章Java泛型与集合150 7.1泛型150 7.1.1泛型概述151 7.1.2泛型类152 7.1.3泛型接口153 7.1.4泛型方法154 7.1.5有界类型155 7.1.6通配符157 7.2Java集合概述158 [2] 7.2.2集合的框架159 7.2.3集合主要接口与实现类160 7.2.4Collection接口的应用161 7.3三种典型集合162 7.3.1Set集163 7.3.2List序列165 7.3.3Map映射166 7.4知识拓展——函数式接口与Lambda表达式169 7.4.1函数式接口169 7.4.2Lambda表达式170 7.4.3方法引用171 习题7172 第8章常用系统类173 8.1字符串类173 8.1.1字符串类的特点173 8.1.2字符串类的应用174 8.1.3String类的常用方法175 8.1.4StringBuffer类的常用方法179 8.2Java输入输出流类180 8.2.1Java的标准输入输出180 8.2.2输入输出流框架181 8.2.3输入输出流类的应用184 8.2.4RandomAccessFile类185 8.2.5对象序列化与对象流类186 8.2.6使用输入输出流小结188 8.3其他常用类189 8.3.1数学函数类Math189 8.3.2新日期类190 8.3.3随机数类Random191 8.3.4运行时Runtime类191 8.3.5控制台输入Scanner类192 8.3.6拆箱装箱的包装类193 8.3.7定时器Timer类和定时任务 TimerTask类194 8.4知识拓展——反射机制相关的类195 8.4.1Class类195 8.4.2java.lang.reflect包中的重要类195 8.4.3反射机制的应用196 习题8198 第9章多线程机制201 9.1多线程的概念201 9.1.1程序、进程和多任务201 9.1.2线程202 9.1.3多线程202 9.1.4线程的生命周期与Java的多线程机制202 9.2创建线程对象203 9.2.1通过继承Thread类创建线程对象203 9.2.2通过Runnable接口创建线程对象205 9.3线程的优先级与状态205 9.3.1线程类的方法206 9.3.2控制线程的优先级207 9.3.3控制线程的状态208 9.4Java的线程同步机制与应用模型209 9.4.1线程的同步机制210 9.4.2生产消费模型210 9.4.3共用公司银行账户模型214 9.4.4线程通信——水塘模型215 9.5使用多线程应注意的问题218 9.5.1防止线程死锁218 9.5.2使用多线程的代价219 9.6知识拓展——多线程的新特性219 9.6.1线程池219 9.6.2通过Callable接口创建有返回值的线程221 习题9222 第10章图形用户界面224 10.1图形用户界面概述224 10.1.1Swing与AWT组件224 10.1.2Swing类的层次结构225 10.1.3布局管理器225 10.1.4Java的事件处理机制227 10.2容器229 10.2.1窗口229 10.2.2对话框与精确定位组件229 10.2.3面板230 10.2.4分隔面板与边界管理器应用231 10.2.5选项卡面板233 10.3基本组件234 10.3.1标签文本框与网格管理器应用234 10.3.2按钮与自建监听器235 10.3.3单选按钮与内建监听器237 10.3.4复选框238 10.3.5下拉列表框与匿名监听器240 10.3.6文本区与滚动条241 10.3.7创建容器与组件小结243 10.4菜单组件243 10.4.1菜单栏243 10.4.2多级菜单245 10.4.3文件选择器与执行命令的菜单246 [2]

2018-06-07

代码大全中文第二版PDF清晰扫描版带书签目录++源码

代码大全(第二版) 是著名IT畅销书作者Steve McConnell十一年前的经典著作的全新演绎:第二版不是第一版的简单修订增补,而是完全进行了重写;增加了很多与时俱进的内容。这也是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。它从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。本书中所论述的技术不仅填补 了初级与高级编程技术之间的空白,而且也为程序员们提供了一个有关编程技巧的信息来源。本书对经验丰富的程序员、技术带头人、自学的程序员及几乎不懂太多编程技巧的学生们都是大有裨益的。可以说,无论你是什么背景,阅读本书都会让你在更短的时间内、更容易地写出更好的程序 第1部分 打好基础 第1章 欢迎进入软件构建的世界 1.1 什么是软件构建 1.2 软件构建为何如此重要 1.3 如何阅读本书 关键点 第2章 用隐喻来更充分地理解软件开发 2.1 隐喻的重要性 2.2 如何使用软件隐喻 2.3 常见的软件隐喻 软件中的书法:写作代码 软件的耕作法:培植系统 软件的牡蛎养殖观点:系统生长 软件构建:建造软件 应用软件技术:智慧工具箱 组合各个隐喻 更多资源 关键点 第3章 三思而后行:前期准备 3.1 前期准备的重要性 前期准备适用于现代软件项目吗 准备不周全的诱因 关于开始构建之前要做前期准备的绝对有力且简明的论据 3.2 辨明你所从事的软件的类型 迭代开发法对前期准备的影响 在序列式开发法和迭代式开发法之间做出选择 3.3 问题定义的先决条件 3.4 需求的先决条件 为什么要有正式的需求 稳定需求的神话 在构建期间处理需求变更 3.5 架构的先决条件 架构的典型组成部分 3.6 花费在前期准备上的时间长度 更多资源 关键点 第4章 关键的“构建”决策 4.1 选择编程语言 语言描述 4.2 编程约定 4.3 你在技术浪潮中的位置 “深入一种语言去编程”的例子 4.4 选择主要的构建实践方法 关键点 第2部分 创建高质量的代码 第5章 软件构建中的设计 5.1 设计中的挑战 设计是一个险恶的问题 设计是个了无章法的过程(即使它能得出清爽的成果) 设计就是确定取舍和调整顺序的过程 设计受到诸多限制 设计是不确定的 设计是一个启发式过程 设计是自然而然形成的 5.2 关键的设计概念 软件的首要技术任务:管理复杂度 理想的设计特征 设计的层次 5.3 设计构造块:启发式方法 寻找现实世界中的对象 形成一致的抽象 封装实现细节 当继承能简化设计时就继承 隐藏秘密(信息隐藏) 找出容易改变的区域 保持松散耦合 查阅常用的设计模式 其他的启发式方法 关于设计启发的总结***** 使用启发式方法的原则 5.4 设计实践 迭代 分而治之 自上而下和自下而上的设计方法 建立试验性原型 合作设计 要做多少设计才够? 记录你的设计成果 5.5 对流行的设计方法的评论 更多资源 软件设计,一般性问题 软件设计理论 设计模式 广义的设计 标准 关键点 第6章 可以工作的类 6.1 类的基础:抽象数据类型 需要用到ADT的例子 使用ADT的益处 更多的ADT示例 在非面向对象环境中用ADT处理多份数据实例 ADT和类 6.2 良好的类接口 好的抽象 良好的封装 6.3 有关设计和实现的问题 包含(“有一个……”的关系) 继承(“是一个……”关系) 成员函数和数据成员 构造函数 6.4 创建类的原因 应该避免的类 总结:创建类的理由 与具体编程语言相关的问题 6.6 超越类:包 更多资源 关键点 第7章 高质量的子程序 7.1 创建子程序的正当理由 似乎过于简单而没必要写成子程序的操作 总结:创建子程序的理由 7.2 在子程序层上设计 7.3 好的子程序名字 7.4 子程序可以写多长 7.5 如何使用子程序参数 7.6 使用函数时要特别考虑的问题 什么时候使用函数,什么时候使用过程 设置函数的返回值 7.7 宏子程序和内联子程序 宏子程序在使用上的限制 内联子程序 关键点 第8章 防范式编程 8.1 保护程序免遭无效输入数据的破坏 8.2 断言 建立自己的断言机制 使用断言的指导建议 8.3 错误处理技术 健壮性与正确性 高层次设计对错误处理方式的影响 8.4 异常 8.5 隔离程序以免遭由错误造成的损害 隔离区与断言的关系 8.6 辅助调试代码 不要自动地把产品版本的限制强加于开发版本之上 尽早引入辅助调试的手段 采用冒进式编程 计划移除调试辅助代码 8.7 确定在产品代码中该保留多少防范式代码 8.8 防范式编程时保持防范 其他资源 关键点 第9章 伪代码编程过程 9.1 创建类和子程序的步骤概述 创建一个类的步骤 创建子程序的步骤 9.2 伪代码 9.3 通过伪代码编程过程创建子程序 设计子程序 编写子程序 检查代码 收尾工作 根据需要重复上述步骤 9.4 伪代码编程过程之外的其他方案 关键点 第3部分 变量 第10章 使用变量的一般事项 10.1 数据认知 数据认知测试 有关数据类型的其他资源 10.2 轻松掌握变量定义 隐式声明 10.3 变量初始化原则 10.4 作用域 使变量引用局部化 尽可能缩短变量的“存活”时间 减小作用域的一般原则 有关缩小变量作用域的说明 10.5 持续性 10.6 绑定时间 10.7 数据类型和控制结构之间的关系 10.8 为变量指定单一用途 关键点 第11章 变量名的力量 11.1 选择好变量名的注意事项 最重要的命名注意事项 以问题为导向 最适当的名字长度 变量名字的效果范围 变量名字中的计算值限定词 变量名字中的常用反义词 11.2 为特定类型的数据命名 为循环索引命名 为状态变量命名 为临时变量命名 为布尔变量命名 为枚举类型命名 为常量命名 11.3 命名规则的力量 为什么要有规则? 何时采用命名规则 正式程度 11.4 非正式命名规则 语言无关规则的指导原则 语言相关规则的指导原则 混合语言编程的注意事项 命名规则示例 11.5 标准前缀 用户自定义类型缩写 语义前缀 标准前缀的优点 11.6 创建具备可读性的短名称 一般的缩写指导原则 语音缩写 有关缩写的评论 11.7 应该避免的名称 关键点 第12章 基本数据类型 12.1 使用数的普遍规则 12.2 整数 12.3 浮点数 12.4 字符和字符串 C中的字符串 12.5 布尔变量 12.6 枚举类型 如果你的语言里没有枚举类型 12.7 命名常量 12.8 数组 12.9 创建你自己的类型(类型别名) 为什么创建自己的类型的示例是用Pascal和Ada写的? 创建自定义数据类型的指导原则 关键点 第13章 不常见的数据类型 13.1 结构 13.2 指针 用来理解指针的例子 使用指针的一般技巧 C++指针 C指针 13.3 全局数据 与全局数据有关的常见问题 使用全局数据的理由 只有万不得已时才使用全局数据 用访问子程序来取代全局数据 如何降低使用全局数据的风险 其他资源 关键点 第4部分 语句 第14章 组织直线型代码 14.1 必须有明确顺序的语句 14.2 顺序无关的语句 使代码易于自上而下的阅读 把相关的语句组织在一起 关键点 第15章 使用条件语句 15.1 if语句 简单if-then语句 if-then-else语句串 15.2 case语句 为case选择最有效的排序 使用case语句的提示 关键点 第16章 控制循环 16.1 选择循环的种类 什么时候使用while循环 什么时候用带退出的循环 何时使用for循环 何时使用foreach循环 16.2 循环控制 进入循环 处理好循环体 退出循环 检查端点 使用循环变量 循环应该有多长 16.3 轻松创建循环——由内而外 16.4 循环和数组的关系 关键点 第17章 不常见的控制结构 17.1 子程序中的多个返回 17.2 递归 递归的例子 使用递归的技巧 17.3 goto 反对goto的论点 支持goto的观点 关于goto的虚假辩论 错误处理和goto goto和在else子句中的共享代码 goto使用原则总结 17.4 对不常见控制结构的看法 其他资源 关键点 第18章 表驱动方法 18.1 表驱动方法使用总则 使用表驱动方法的两个问题 18.2 直接访问表 示例:一个月中的天数(Days-in-Month) 示例:保险费率 例子:灵活的消息格式(Flexible-Message-Format) 构造查询键值 18.3 索引表访问(Indexed Access Tables) 18.4 阶梯访问表 18.5 表查询的其他示例 关键点 第19章 一般控制问题 19.1 布尔表达式 用true和false做布尔判断 简化复杂的表达式 编写肯定形式的布尔表达式 用括号使布尔表达式更清晰 理解布尔表达式是如何求值的 按照数轴的顺序编写数值表达式 与0比较的指导原则 布尔表达式的常见问题 19.2 复合语句(块) 19.3 空语句 19.4 驯服危险的深层嵌套 对减少嵌套层次的技术的总结 19.5 编程基础:结构化编程 结构化编程的三个组成部分 19.6 控制结构与复杂度 复杂度的重要性 降低复杂度的一般原则 其它类型的复杂度 关键点 第5部分 代码改善 第20章 软件质量概述 20.1 软件质量的特性 20.2 改善软件质量的技术 开发过程 设置目标 20.3 不同质量保障技术的相对效能 缺陷检测率 找出缺陷的成本 修正缺陷的成本 20.4 什么时候进行质量保证工作 20.5 软件质量的普遍原理 推荐读物 相关标准 关键点 第21章 协同构造 21.1 协同开发实践概要 协同构造是其他质量保证技术的补充 协同构造有利于传授公司文化以及编程专业知识 集体所有权适用于所有形式的协同构造 在构造前后都应保持协作 21.2 结对编程 成功运用结对编程的关键 结对编程的好处 21.3 正式检查 你期望检查能够带来什么结果 检查中的人员角色 检查的一般步骤 检查中的自尊心 检查和代码大全 检查总结 21.4 其他类型的协同开发实践 走查 代码阅读 大型演示 协同构造技术的比较 参考资料 结对编程 检查 相关标准 关键点 第22章 开发者测试 22.1 开发者测试在软件质量中的角色.. 500 构造中测试 22.2 推荐的开发者测试方法 先测试还是后测试 开发者测试的局限性 22.3 测试技巧锦囊 不完整的测试 结构化的基础测试 数据流测试 等价类划分 猜测错误 边界值分析 几类坏数据 几类好数据 采用容易手工检查的测试用例 22.4 典型错误 哪些类包含最多的错误? 错误的分类 不完善的构造过程引发错误所占的比例 你期望能发现多少错误 测试本身的错误 22.5 测试支持工具 为测试各个类构造脚手架 Diff工具 测试数据生成器 覆盖率监视器 数据记录器/日志记录器 符号调试工具 系统干扰器 错误数据库 22.6 改善测试过程 有计划的测试 重新测试(回归测试) 自动化测试 22.7 保留测试记录 个人测试记录 推荐读物 测试 测试脚手架 测试优先的开发 相关标准 关键点 第23章 调 试 23.1 调试概述 调试在软件质量中所扮演的角色 调试效率的巨大差异 让你有所收获的缺陷 一种效率低下的调试方法 23.2 寻找缺陷 科学的调试方法 寻找缺陷的一些小建议 语法错误 23.3 修正缺陷 23.4 调试中的心理因素 心理取向如何导致调试时的盲目 “心理距离”在调试中的作用 23.5 调试工具——明显的和不那么明显的.. 557 源代码比较工具 编译器的警告消息 扩展的语法和逻辑检查 执行性能分析器 测试框架 调试器 其它资源 关键点 第24章 重构 24.1 软件进化的类型 软件进化的哲学 24.2 重构简介 重构的理由 拒绝重构的理由 24.3 特定的重构 数据级的重构 语句级的重构 子程序级重构 类实现的重构 类接口的重构 系统级重构 24.4 安全的重构 不宜重构的情况 24.5 重构策略 推荐读物 关键点 第25章 代码调整策略 25.1 性能概述 质量特性和性能 性能和代码调整 25.2 代码调整简介 Pareto法则 一些无稽之谈 何时调整代码 编译器优化 25.3 蜜糖和哥斯拉 常见的低效率之源 常见操作的相对效率 25.4 性能测量 性能测量应当精确 25.5 反复调整 25.6 代码调整方法总结 推荐读物 算法和数据类型 关键点 第26章 代码调整方法 26.1 逻辑 在知道答案后停止判断 按照出现频率来调整判断顺序 相似逻辑结构之间的性能比较 用查找表替代复杂表达式 使用惰性求值 26.2 循环 将判断外提(Unswitching) 合并循环 展开 尽可能减少再循环内部做的工作 哨兵值 把最忙的循环放在最内层 削减强度 26.3 数据变换 使用整型数而不是浮点数 数组维度尽可能少 尽可能减少数组引用 使用辅助索引 使用缓存机制 26.4 表达式 利用代数恒等式 削弱运算强度 编译时初始化 小心系统函数 使用正确的常量类型 预先算出结果 删除公共子表达式 26.5 子程序 将函数重写为内联 26.6 用低级语言重写代码 26.7 变得越多,事情反而更没变 推荐读物 关键点 第6部分 系统考虑 第27章 程序规模对“构筑”的影响 27.1 交流和规模 27.2 项目规模的范围 27.3 项目规模对错误的影响 27.4 项目规模对生产率的影响 27.5 项目规模对开发活动的影响 活动比例和项目规模 程序、产品、系统和系统产品 方法论和规模 额外资源 关键点 第28章 管理“构筑” 28.1 鼓励良好的编码实践 设定标准的考虑事项 鼓励良好的编码实践的技术 本书的角色 28.2 配置管理 什么是配置管理? 需求变更和设计变更 软件代码变更 工具版本 机器配置 备份计划 有关配置管理的额外资源 28.3 评估“构筑”进度表 评估的方法 评估“构筑”的工作量 对进度的影响 评估与控制 如果你落后了该怎么办 有关软件评估的额外资源 28.4 度量 有关软件度量的额外资源 28.5 把程序员当人看 程序员们怎样花费时间? 性能差异与质量差异 信仰问题 物理环境 有关“把程序员当人看”的额外资源 28.6 管理你的管理者 有关管理构造的额外资源 相关标准 关键点 第29章 集成 29.1 集成方式的重要性 29.2 集成频率——阶段式集成还是增量集成 阶段式集成 增量集成 增量集成的益处 29.3 增量集成的策略 自顶向下集成 自底向上集成 三明治集成 风险导向的集成 功能导向的集成 T-型集成 集成方法小结 29.4 Daily Build与冒烟测试 哪种项目能用daily build过程? 持续集成 额外资源 关键点 第30章 编程工具 30.1 设计工具 30.2 源代码工具 编辑 分析代码质量 重构源代码 Version Control 数据词典 30.3 可执行码工具 产生目标码 除错 测试 代码微调 30.4 工具导向的环境 30.5 打造你自己的编程工具 项目特有的工具 脚本 30.6 工具幻境 额外资源 关键点 第7部分 软件工艺 第31章 布局与风格 31.1 基本原则 布局的极端情况 格式化的基本原理 人和计算机对程序的解读 好布局有什么用? 把布局作为一种信仰 良好布局的目标 31.2 布局技术 空白区 括号 31.3 布局风格 纯块结构 模仿纯块结构 使用begin - end对(大括号)指定块边界 行尾布局 哪种风格最优? 31.4 控制结构的布局 格式化控制结构块的要点 其他考虑 31.5 单条语句的布局 语句长度 用空格使语句显得清楚 格式化后续行 每行仅写一条语句 数据声明的布局 31.6 注释的布局 31.7 子程序的布局 31.8 类的布局 类接口的布局 类实现的布局 文件和程序布局 更多资源 关键点 第32章 自说明代码 32.1 外部文档 32.2 编程风格作文档 32.3 注释或不注释 32.4 高效注释之关键 注释种类 高效注释 最佳注释量 32.5 注释技术 注释单行 注释代码段 注释数据声明 注释控制结构 注释子程序 注释类、文件和程序 32.6 IEEE标准 软件质量保证标准 更多资源 关键点 第33章 个人性格 33.1 个人性格是否和本书话题无关 33.2 聪明和谦虚 33.3 求知欲 33.4 诚实 33.5 交流与合作 33.6 创造力和纪律 33.7 偷懒 33.8 不像你想象中那样起作用的性格 矜持 经验 编程狂人 33.9 习惯 更多资源 关键点 第34章 软件开发艺术的有关问题 34.1 克服复杂性 34.2 精选编程过程 34.3 为人写程序,其次才是为机器 34.4 以所用语言编程,但思路不受其约束.. 843 34.5 借助规范集中注意力 34.6 基于问题域编程 将程序划分为不同层次的抽象 34.7 “当心落石” 34.8 反复,再反复 34.9 不要顽固不化 判断 折中主义 试验 关键点 第35章 何处有更多信息 35.1 关于软件创建的信息 35.2 创建之外的话题 综述资料 软件工程综览 其他注释过的参考书目 35.3 期刊 初级程序员杂志 高级程序员杂志 专题出版物 35.4 软件开发者的读书计划 入门级 熟练级 精通级 35.5 参加专业组织 参考文献 索引

2018-06-07

高性能MySQL(第3版) 中文PDF带目录清晰版

高性能MySQL(第3版)清晰版PDF,带有书签方便大家阅读.

2018-06-07

深入理解Java虚拟机:JVM高级特性与最佳实践 第2版 高清PDF+源码

PDF带有书签方便大家搜索,附带随书源码!! 《深入理解Java虚拟机:JVM高级特性与最佳实践》共分为五大部 分,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的分析,深刻揭示了JVM的工作原理。第一部分从宏观的角度介绍了整个Java技术体系、Java和JVM的发展历程、模块化,以及JDK的编译,这对理解本书后面内容有重要帮助。第二部分讲解了JVM的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出异常产生的原因;常见的垃圾收集算法以及垃圾收集器的特点和工作原理;常见虚拟机监控与故障处理工具的原理和使用方法。第三部分分析了虚拟机的执行子系统,包括类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎。第四部分讲解了程序的编译与代码的优化,阐述了泛型、自动装箱拆箱、条件编译等语法糖的原理;讲解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析JIT编译的数据和结果;第五部分探讨了Java实现高效并发的原理,包括JVM内存模型的结构和操作;原子性、可见性和有序性在Java内存模型中的体现;先行发生原则的规则和使用;线程在Java语言中的实现原理;虚拟机实现高效并发所做的一系列锁优化措施。 本书适合所有Java程序员、系统调优师和系统架构师阅读。 深入理解Java虚拟机:JVM高级特性与最佳实践 第2版 深入理解Java虚拟机:JVM高级特性与最佳实践 第2版 目录: 前言 第一部分 走近Java 第1章 走近Java 1.1 概述 1.2 Java技术体系 1.3 Java发展史 1.4 Java虚拟机发展史 1.4.1 Sun Classic Exact VM 1.4.2 Sun HotSpot VM 1.4.3 Sun Mobile-Embedded VM Meta-Circular VM 1.4.4 BEA JRockit IBM J9 VM 1.4.5 Azul VM BEA Liquid VM 1.4.6 Apache Harmony Google Android Dalvik VM 1.4.7 Microsoft JVM及其他 1.5 展望Java技术的未来 1.5.1 模块化 1.5.2 混合语言 1.5.3 多核并行 1.5.4 进一步丰富语法 1.5.5 64位虚拟机 1.6 实战:自己编译JDK 1.6.1 获取JDK源码 1.6.2 系统需求 1.6.3 构建编译环境 1.6.4 进行编译 1.6.5 在IDE工具中进行源码调试 1.7 本章小结 第二部分 自动内存管理机制 第2章 Java内存区域与内存溢出异常 2.1 概述 2.2 运行时数据区域 2.2.1 程序计数器 2.2.2 Java虚拟机栈 2.2.3 本地方法栈 2.2.4 Java堆 2.2.5 方法区 2.2.6 运行时常量池 2.2.7 直接内存 2.3 HotSpot虚拟机对象探秘 2.3.1 对象的创建 2.3.2 对象的内存布局 2.3.3 对象的访问定位 2.4 实战:OutOfMemoryError异常 2.4.1 Java堆溢出 2.4.2 虚拟机栈和本地方法栈溢出 2.4.3 方法区和运行时常量池溢出 2.4.4 本机直接内存溢出 2.5 本章小结 第3章 垃圾收集器与内存分配策略 3.1 概述 3.2 对象已死吗 3.2.1 引用计数算法 3.2.2 可达性分析算法 3.2.3 再谈引用 3.2.4 生存还是死亡 3.2.5 回收方法区 3.3 垃圾收集算法 3.3.1 标记-清除算法 3.3.2 复制算法 3.3.3 标记-整理算法 3.3.4 分代收集算法 3.4 HotSpot的算法实现 3.4.1 枚举根节点 3.4.2 安全点 3.4.3 安全区域 3.5 垃圾收集器 3.5.1 Serial收集器 3.5.2 ParNew收集器 3.5.3 Parallel Scavenge收集器 3.5.4 Serial Old收集器 3.5.5 Parallel Old收集器 3.5.6 CMS收集器 3.5.7 G1收集器 3.5.8 理解GC日志 3.5.9 垃圾收集器参数总结 3.6 内存分配与回收策略 3.6.1 对象优先在Eden分配 3.6.2 大对象直接进入老年代 3.6.3 长期存活的对象将进入老年代 3.6.4 动态对象年龄判定 3.6.5 空间分配担保 3.7 本章小结 第4章 虚拟机性能监控与故障处理工具 4.1 概述 4.2 JDK的命令行工具 4.2.1 jps:虚拟机进程状况工具 4.2.2 jstat:虚拟机统计信息监视工具 4.2.3 jinfo:Java配置信息工具 4.2.4 jmap:Java内存映像工具 4.2.5 jhat:虚拟机堆转储快照分析工具 4.2.6 jstack:Java堆栈跟踪工具 4.2.7 HSDIS:JIT生成代码反汇编 4.3 JDK的可视化工具 4.3.1 JConsole:Java监视与管理控制台 4.3.2 VisualVM:多合一故障处理工具 4.4 本章小结 第5章 调优案例分析与实战 5.1 概述 5.2 案例分析 5.2.1 高性能硬件上的程序部署策略 5.2.2 集群间同步导致的内存溢出 5.2.3 堆外内存导致的溢出错误 5.2.4 外部命令导致系统缓慢 5.2.5 服务器JVM进程崩溃 5.2.6 不恰当数据结构导致内存占用过大 5.2.7 由Windows虚拟内存导致的长时间停顿 5.3 实战:Eclipse运行速度调优 5.3.1 调优前的程序运行状态 5.3.2 升级JDK 1.6的性能变化及兼容问题 5.3.3 编译时间和类加载时间的优化 5.3.4 调整内存设置控制垃圾收集频率 5.3.5 选择收集器降低延迟 5.4 本章小结 第三部分 虚拟机执行子系统 第6章 类文件结构 6.1 概述 6.2 无关性的基石 6.3 Class类文件的结构 6.3.1 魔数与Class文件的版本 6.3.2 常量池 6.3.3 访问标志 6.3.4 类索引、父类索引与接口索引集合 6.3.5 字段表集合 6.3.6 方法表集合 6.3.7 属性表集合 6.4 字节码指令简介 6.4.1 字节码与数据类型 6.4.2 加载和存储指令 6.4.3 运算指令 6.4.4 类型转换指令 6.4.5 对象创建与访问指令 6.4.6 操作数栈管理指令 6.4.7 控制转移指令 6.4.8 方法调用和返回指令 6.4.9 异常处理指令 6.4.10 同步指令 6.5 公有设计和私有实现 6.6 Class文件结构的发展 6.7 本章小结 第7章 虚拟机类加载机制 7.1 概述 7.2 类加载的时机 7.3 类加载的过程 7.3.1 加载 7.3.2 验证 7.3.3 准备 7.3.4 解析 7.3.5 初始化 7.4 类加载器 7.4.1 类与类加载器 7.4.2 双亲委派模型 7.4.3 破坏双亲委派模型 7.5 本章小结 第8章 虚拟机字节码执行引擎 8.1 概述 8.2 运行时栈帧结构 8.2.1 局部变量表 8.2.2 操作数栈 8.2.3 动态连接 8.2.4 方法返回地址 8.2.5 附加信息 8.3 方法调用 8.3.1 解析 8.3.2 分派 8.3.3 动态类型语言支持 8.4 基于栈的字节码解释执行引擎 8.4.1 解释执行 8.4.2 基于栈的指令集与基于寄存器的指令集 8.4.3 基于栈的解释器执行过程 8.5 本章小结 第9章 类加载及执行子系统的案例与实战 9.1 概述 9.2 案例分析 9.2.1 Tomcat:正统的类加载器架构 9.2.2 OSGi:灵活的类加载器架构 9.2.3 字节码生成技术与动态代理的实现 9.2.4 Retrotranslator:跨越JDK版本 9.3 实战:自己动手实现远程执行功能 9.3.1 目标 9.3.2 思路 9.3.3 实现 9.3.4 验证 9.4 本章小结 第四部分 程序编译与代码优化 第10章 早期(编译期)优化 10.1 概述 10.2 Javac编译器 10.2.1 Javac的源码与调试 10.2.2 解析与填充符号表 10.2.3 注解处理器 10.2.4 语义分析与字节码生成 10.3 Java语法糖的味道 10.3.1 泛型与类型擦除 10.3.2 自动装箱、拆箱与遍历循环 10.3.3 条件编译 10.4 实战:插入式注解处理器 10.4.1 实战目标 10.4.2 代码实现 10.4.3 运行与测试 10.4.4 其他应用案例 10.5 本章小结 第11章 晚期(运行期)优化 11.1 概述 11.2 HotSpot虚拟机内的即时编译器 11.2.1 解释器与编译器 11.2.2 编译对象与触发条件 11.2.3 编译过程 11.2.4 查看及分析即时编译结果 11.3 编译优化技术 11.3.1 优化技术概览 11.3.2 公共子表达式消除 11.3.3 数组边界检查消除 11.3.4 方法内联 11.3.5 逃逸分析 11.4 Java与CC++的编译器对比 11.5 本章小结 第五部分 高效并发 第12章 Java内存模型与线程 12.1 概述 12.2 硬件的效率与一致性 12.3 Java内存模型 12.3.1 主内存与工作内存 12.3.2 内存间交互操作 12.3.3 对于volatile型变量的特殊规则 12.3.4 对于long和double型变量的特殊规则 12.3.5 原子性、可见性与有序性 12.3.6 先行发生原则 12.4 Java与线程 12.4.1 线程的实现 12.4.2 Java线程调度 12.4.3 状态转换 12.5 本章小结 第13章 线程安全与锁优化 13.1 概述 13.2 线程安全 13.2.1 Java语言中的线程安全 13.2.2 线程安全的实现方法 13.3 锁优化 13.3.1 自旋锁与自适应自旋 13.3.2 锁消除 13.3.3 锁粗化 13.3.4 轻量级锁 13.3.5 偏向锁 13.4 本章小结 附  录 附录A 编译Windows版的OpenJDK 附录B 虚拟机字节码指令表 附录C HotSpot虚拟机主要参数表 附录D 对象查询语言(OQL)简介 附录E JDK历史版本轨迹

2018-06-07

深入分析Java Web技术内幕 修订版PDF

首先介绍前端知识,主要介绍JavaWeb开发中涉及的一些基本知识,包括Web请求过程、HTTP协议、DNS技术和CDN技术。其次深入介绍Java技术,包括I/O技术、中文编码问题、Javac编译原理、class文件结构解析、ClassLoader工作机制及JVM的内存管理等。最后介绍Java服务端技术,主要包括Servlet、Session与Cookie、Tomcat与Jetty服务器、Spring容器、Ibatis框架和Velocity框架等原理介绍。 第1章 深入Web请求过程 1 1.1 B/S网络架构概述 2 1.2 如何发起一个请求 4 1.3 HTTP协议解析 6 1.3.1 查看HTTP信息的工具 8 1.3.2 浏览器缓存机制 9 1.4 DNS域名解析 12 1.4.1 DNS域名解析过程 12 1.4.2 跟踪域名解析过程 15 1.4.3 清除缓存的域名 18 1.4.4 几种域名解析方式 19 1.5 CDN工作机制 20 1.5.1 CDN架构 20 1.5.2 负载均衡 21 1.6 总结 24 第2章 深入分析Java I/O的工作机制 25 2.1 Java的I/O类库的基本架构 25 2.1.1 基于字节的I/O操作接口 26 2.1.2 基于字符的I/O操作接口 27 2.1.3 字节与字符的转化接口 28 2.2 磁盘I/O工作机制 29 2.2.1 几种访问文件的方式 29 2.2.2 Java访问磁盘文件 33 2.2.3 Java序列化技术 34 2.3 网络I/O工作机制 36 2.3.1 TCP状态转化 37 2.3.2 影响网络传输的因素 39 2.3.3 Java Socket的工作机制 39 2.3.4 建立通信链路 40 2.3.5 数据传输 41 2.4 NIO的工作方式 41 2.4.1 BIO带来的挑战 41 2.4.2 NIO的工作机制 42 2.4.3 Buffer的工作方式 45 2.4.4 NIO的数据访问方式 47 2.5 I/O调优 49 2.5.1 磁盘I/O优化 49 2.5.2 TCP网络参数调优 50 2.5.3 网络I/O优化 52 2.6 设计模式解析之适配器模式 56 2.6.1 适配器模式的结构 56 2.6.2 Java I/O中的适配器模式 57 2.7 设计模式解析之装饰器模式 57 2.7.1 装饰器模式的结构 58 2.7.2 Java I/O中的装饰器模式 58 2.8 适配器模式与装饰器模式的区别 59 2.9 总结 59 第3章 深入分析Java Web中的中文编码问题 60 3.1 几种常见的编码格式 60 3.1.1 为什么要编码 60 3.1.2 如何“翻译” 61 3.2 Java中需要编码的场景 63 3.2.1 I/O操作中存在的编码 63 3.2.2 内存操作中的编码 65 3.3 Java中如何编解码 66 3.3.1 按照ISO-8859-1编码 68 3.3.2 按照GB2312编码 69 3.3.3 按照GBK编码 70 3.3.4 按照UTF-16编码 70 3.3.5 按照UTF-8编码 71 3.3.6 UTF-8编码代码片段 71 3.3.7 几种编码格式的比较 73 3.4 Java Web中涉及的编解码 73 3.4.1 URL的编解码 75 3.4.2 HTTP Header的编解码 78 3.4.3 POST表单的编解码 78 3.4.4 HTTP BODY的编解码 79 3.5 JS中的编码问题 80 3.5.1 外部引入JS文件 80 3.5.2 JS的URL编码 81 3.5.3 其他需要编码的地方 83 3.6 常见问题分析 83 3.6.1 中文变成了看不懂的字符 83 3.6.2 一个汉字变成一个问号 84 3.6.3 一个汉字变成两个问号 84 3.6.4 一种不正常的正确编码 85 3.7 总结 86 第4章 Javac编译原理 87 4.1 Javac是什么 88 4.2 Javac编译器的基本结构 88 4.3 Javac工作原理分析 90 4.3.1 词法分析器 91 4.3.2 语法分析器 98 4.3.3 语义分析器 103 4.3.4 代码生成器 113 4.4 设计模式解析之访问者模式 116 4.4.1 访问者模式的结构 117 4.4.2 Javac中访问者模式的实现 118 4.5 总结 119 第5章 深入class文件结构 120 5.1 JVM指令集简介 120 5.1.1 类相关的指令 122 5.1.2 方法的定义 123 5.1.3 属性的定义 124 5.1.4 其他指令集 125 5.2 class文件头的表示形式 133 5.3 常量池 137 5.3.1 UTF8常量类型 140 5.3.2 Fieldref、Methodref常量类型 141 5.3.3 Class常量类型 141 5.3.4 NameAndType常量类型 142 5.4 类信息 142 5.5 Fields和Methods定义 143 5.6 类属性描述 147 5.7 Javap生成的class文件结构 148 5.7.1 LineNumberTable 150 5.7.2 LocalVariableTable 151 5.8 总结 153 第6章 深入分析ClassLoader 工作机制 154 6.1 ClassLoader类结构分析 155 6.2 ClassLoader的等级加载机制 156 6.3 如何加载class文件 159 6.3.1 加载字节码到内存 159 6.3.2 验证与解析 161 6.3.3 初始化Class对象 161 6.4 常见加载类错误分析 161 6.4.1 ClassNotFoundException 161 6.4.2 NoClassDefFoundError 162 6.4.3 UnsatisfiedLinkError 163 6.4.4 ClassCastException 164 6.4.5 ExceptionInInitializerError 165 6.5 常用的ClassLoader分析 166 6.6 如何实现自己的ClassLoader 170 6.6.1 加载自定义路径下的class文件 170 6.6.2 加载自定义格式的class文件 172 6.7 实现类的热部署 174 6.8 Java应不应该动态加载类 176 6.9 总结 177 第7章 JVM体系结构与工作方式 178 7.1 JVM体系结构 178 7.1.1 何谓JVM 178 7.1.2 JVM体系结构详解 181 7.2 JVM工作机制 183 7.2.1 机器如何执行代码 183 7.2.2 JVM为何选择基于栈的架构 184 7.2.3 执行引擎的架构设计 185 7.2.4 执行引擎的执行过程 186 7.2.5 JVM方法调用栈 191 7.3 总结 195 第8章 JVM内存管理 196 8.1 物理内存与虚拟内存 197 8.2 内核空间与用户空间 198 8.3 Java中哪些组件需要使用内存 199 8.3.1 Java堆 199 8.3.2 线程 199 8.3.3 类和类加载器 200 8.3.4 NIO 200 8.3.5 JNI 201 8.4 JVM内存结构 201 8.4.1 PC寄存器 202 8.4.2 Java栈 202 8.4.3 堆 203 8.4.4 方法区 203 8.4.5 运行时常量池 204 8.4.6 本地方法栈 204 8.5 JVM内存分配策略 204 8.5.1 通常的内存分配策略 205 8.5.2 Java中内存分配详解 205 8.6 JVM内存回收策略 210 8.6.1 静态内存分配和回收 210 8.6.2 动态内存分配和回收 211 8.6.3 如何检测垃圾 211 8.6.4 基于分代的垃圾收集算法 213 8.7 内存问题分析 222 8.7.1 GC日志分析 222 8.7.2 堆快照文件分析 225 8.7.3 JVM Crash日志分析 225 8.8 实例1 231 8.9 实例2 233 8.10 实例3 235 8.11 总结 240 第9章 Servlet工作原理解析 241 9.1 从Servlet容器说起 241 9.1.1 Servlet容器的启动过程 242 9.1.2 Web应用的初始化工作 245 9.2 创建Servlet实例 247 9.2.1 创建Servlet对象 248 9.2.2 初始化Servlet 248 9.3 Servlet体系结构 250 9.4 Servlet如何工作 253 9.5 Servlet中的Listener 255 9.6 Filter如何工作 257 9.7 Servlet中的url-pattern 259 9.8 总结 260 第10章 深入理解Session与Cookie 261 10.1 理解Cookie 262 10.1.1 Cookie属性项 262 10.1.2 Cookie如何工作 263 10.1.3 使用Cookie的限制 266 10.2 理解Session 267 10.2.1 Session与Cookie 267 10.2.2 Session如何工作 268 10.3 Cookie安全问题 271 10.4 分布式Session框架 272 10.4.1 存在哪些问题 272 10.4.2 可以解决哪些问题 273 10.4.3 总体实现思路 273 10.5 Cookie压缩 278 10.6 表单重复提交问题 280 10.7 总结 281 第11章 Tomcat的系统架构与 设计模式 282 11.1 Tomcat总体设计 282 11.1.1 Tomcat总体结构 283 11.1.2 Connector组件 289 11.1.3 Servlet容器Container 294 11.1.4 Tomcat中的其他组件 305 11.2 Tomcat中的设计模式 305 11.2.1 门面设计模式 305 11.2.2 观察者设计模式 307 11.2.3 命令设计模式 309 11.2.4 责任链设计模式 310 11.3 总结 312 第12章 Jetty的工作原理解析 313 12.1 Jetty的基本架构 313 12.1.1 Jetty的基本架构简介 313 12.1.2 Handler的体系结构 315 12.2 Jetty的启动过程 316 12.3 接受请求 317 12.3.1 基于HTTP协议工作 317 12.3.2 基于AJP工作 319 12.3.3 基于NIO方式工作 322 12.4 处理请求 323 12.5 与Jboss集成 326 12.6 与Tomcat的比较 327 12.6.1 架构比较 327 12.6.2 性能比较 328 12.6.3 特性比较 328 12.7 总结 329 第13章 Spring框架的设计理念与 设计模式分析 330 13.1 Spring的骨骼架构 330 13.1.1 Spring的设计理念 331 13.1.2 核心组件如何协同工作 332 13.2 核心组件详解 333 13.2.1 Bean组件 333 13.2.2 Context组件 335 13.2.3 Core组件 336 13.2.4 Ioc容器如何工作 338 13.3 Spring中AOP特性详解 348 13.3.1 动态代理的实现原理 348 13.3.2 Spring AOP如何实现 351 13.4 设计模式解析之代理模式 354 13.4.1 代理模式原理 354 13.4.2 Spring中代理模式的实现 354 13.5 设计模式解析之策略模式 357 13.5.1 策略模式原理 357 13.5.2 Spring中策略模式的实现 358 13.6 总结 358 第14章 Spring MVC工作机制与 设计模式 360 14.1 Spring MVC的总体设计 360 14.2 Control设计 365 14.2.1 HandlerMapping初始化 366 14.2.2 HandlerAdapter初始化 368 14.2.3 Control的调用逻辑 369 14.3 Model设计 370 14.4 View设计 371 14.5 框架设计的思考 373 14.5.1 为什么需要框架 373 14.5.2 需要什么样的框架 373 14.5.3 框架设计的原则 374 14.5.4 “指航灯” 374 14.5.5 最基本的原则 374 14.6 设计模式解析之模板模式 375 14.6.1 模板模式的结构 375 14.6.2 Spring MVC中的模板模式示例 376 14.7 总结 377 第15章 深入分析Ibatis框架之系统 架构与映射原理 378 15.1 Ibatis框架主要的类层次结构 378 15.2 Ibatis框架的设计策略 379 15.3 Ibatis框架的运行原理 381 15.4 示例 383 15.5 Ibatis对SQL语句的解析 385 15.6 数据库字段映射到Java对象 386 15.7 示例运行的结果 388 15.8 设计模式解析之简单工厂模式 388 15.8.1 简单工厂模式的实现原理 388 15.8.2 Ibatis中的简单工厂模式示例 389 15.9 设计模式解析之工厂模式 390 15.9.1 工厂模式的实现原理 390 15.9.2 Ibatis中的工厂模式示例 391 15.10 总结 392 第16章 Velocity工作原理解析 394 16.1 Velocity总体架构 395 16.2 JJTree渲染过程解析 398 16.2.1 #set语法 402 16.2.2 Velocity的方法调用 403 16.2.3 #if、#elseif和#else语法 406 16.2.4 #foreach语法 407 16.2.5 #parse语法 409 16.3 事件处理机制 410 16.4 常用优化技巧 413 16.4.1 减少树的总节点数量 413 16.4.2 减少渲染耗时的节点数量 413 16.5 与JSP比较 414 16.5.1 JSP渲染机制 414 16.5.2 Velocity与JSP 420 16.6 设计模式解析之合成模式 420 16.6.1 合成模式的结构 420 16.6.2 Velocity中合成模式的实现 421 16.7 设计模式解析之解释器模式 422 16.7.1 解释器模式的结构 422 16.7.2 Velocity中解释器模式的实现 423 16.8 总结 423 第17章 Velocity优化实践 424 17.1 现实存在的问题 424 17.2 优化的理论基础 425 17.2.1 程序语言的三角形结构 425 17.2.2 数据结构减少抽象化 426 17.2.3 简单的程序复杂化 426 17.2.4 减少翻译的代价 427 17.2.5 变的转化为不变 427 17.3 一个高效的模板引擎的实现思路 427 17.3.1 vm模板如何被编译 429 17.3.2 方法调用的无反射优化 436 17.3.3 字符输出改成字节输出 439 17.4 优化的成果 440 17.4.1 char转成byte 440 17.4.2 无反射执行 441 17.5 其他优化手段 442 17.6 总结 442 [1]

2018-06-07

深入理解Bootstrap 高清晰完整版PDF+源代码

我提供的PDF是非扫描文字版,书中的内容是可以复制使用的,并提供源码供大家参考。 Bootstrap是目前全球流行、火爆的Web前端开发框架之一。它的强大之处在于它将常见的CSS布局小组件和JavaScript插件进行了完整并完善的封装,能让没有经验的前端工程师和后端开发工程师都迅速掌握和使用,大大提高开发效率。此外,它还能在某种程度上规范前端团队编写CSS和JavaScript的规范。 深入理解Bootstrap 目录: 第1章 入门准备 第2章 整体架构 第3章 CSS布局 第4章 CSS组件 第5章 JavaScript插件 第6章 实战:扩展现有组件 第7章 实战:Win8磁贴组件开发 第8章 实战:组合应用开发 第9章 第三方扩展 附录A 浏览器兼容性支持 附录B 第三方插件开发建议 附录C 从2.x迁移到3.x 附录D Glyphicons图标全集

2018-06-07

AngularJS权威教程 清晰PDF版+源码

AngularJS权威教程 清晰PDF版+源码,pdf文档自带书签,可以更方便大家阅读

2018-06-06

Kubernetes权威指南:从Docker到Kubernetes实践全接触(第2版) 清晰PDF

Kubernetes权威指南:从Docker到Kubernetes实践全接触(第2版) 清晰PDF,本资源自带书签,可以很方便供大家阅读

2018-06-06

Java 8实战(Java 8 in Action) 高清晰PDF中文完整版+随书源码

全书分四个部分:基础知识、函数式数据处理、高效Java 8 编程和超越Java 8。 Java 8实战目录 第一部分 基础知识 第1章 为什么要关心Java 8  2 第2章 通过行为参数化传递代码  20 第3章 Lambda表达式  34 第二部分 函数式数据处理 第4章 引入流  68 第5章 使用流  82 第6章 用流收集数据  111 第7章 并行数据处理与性能  141 第三部分 高效Java 8编程 第8章 重构、测试和调试  164 第9章 默认方法   185 第10章 用Optional取代null  202 第11章 CompletableFuture:组合式异步编程  220 第12章 新的日期和时间API  246 第四部分 超越Java 8 第13章 函数式的思考  262 第14章 函数式编程的技巧  275 第15章 面向对象和函数式编程的混合:Java 8和Scala的比较   299 第16章 结论以及Java的未来  313

2018-06-06

空空如也

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

TA关注的人

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