 《Java 应用与开发》课程讲义 - 王晓东《Java 应用与开发》课程讲义 中国海洋大学信息科学与工程学院 王晓东 2018 年 9 月 目 录 1 Java 技术概述及开发环境 3 1.1 Java 技术概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.1.1 Java 发展简史 . . . . . . . . . . . 1 Java EE 监听器接口和监听器事件 . . . . . . . . . . . . . . . . . . . . . . . 273 xxii 序 言 本讲义配套中国海洋大学信息科学与工程学院计算机科学与技术系《Java 应用与 开发》课程使用。 本讲义参考了多方书籍、资料和源代码而编写,在此对原始资料的作者和编者表 示感谢。但为保证课堂教学进度和实验授课质量,并没有随本文档公开原始参考资料 DB 数据库,JDK6.0 新增项目,一种纯 Java 的关系型数据库。 1.4 Java 开发工具 业界普遍采用 Eclipse 或 IntelliJ IDEA 等集成开发环境进行 Java 大型工程开发,当 然也可以采用文本编程工具 Vim 或 Emacs 等进行 Java 小型程序的开发。 本课程采用 Eclipse 作为首选集成开发环境。 1.5 Java 基本开发流程 本部分使用文本编程工具编写一个简单的0 码力 | 330 页 | 6.54 MB | 1 年前3 《Java 应用与开发》课程讲义 - 王晓东《Java 应用与开发》课程讲义 中国海洋大学信息科学与工程学院 王晓东 2018 年 9 月 目 录 1 Java 技术概述及开发环境 3 1.1 Java 技术概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.1.1 Java 发展简史 . . . . . . . . . . . 1 Java EE 监听器接口和监听器事件 . . . . . . . . . . . . . . . . . . . . . . . 273 xxii 序 言 本讲义配套中国海洋大学信息科学与工程学院计算机科学与技术系《Java 应用与 开发》课程使用。 本讲义参考了多方书籍、资料和源代码而编写,在此对原始资料的作者和编者表 示感谢。但为保证课堂教学进度和实验授课质量,并没有随本文档公开原始参考资料 DB 数据库,JDK6.0 新增项目,一种纯 Java 的关系型数据库。 1.4 Java 开发工具 业界普遍采用 Eclipse 或 IntelliJ IDEA 等集成开发环境进行 Java 大型工程开发,当 然也可以采用文本编程工具 Vim 或 Emacs 等进行 Java 小型程序的开发。 本课程采用 Eclipse 作为首选集成开发环境。 1.5 Java 基本开发流程 本部分使用文本编程工具编写一个简单的0 码力 | 330 页 | 6.54 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Java 版或令人惊叹的事物背后,都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 本书旨在通过清晰易懂的动画图解和可运行的代码示例, 位数的整数(例如学号),那么我们就可以用效率更高的“基数排序”来做,将时间复杂度降为 ?(??) , 其中 ? 为位数。当数据体量很大时,节省出来的运行时间就能创造较大价值(成本降低、体验变好等)。 在工程领域中,大量问题是难以达到最优解的,许多问题只是被“差不多”地解决了。问题的难易程度一方 面取决于问题本身的性质,另一方面也取决于观测问题的人的知识储备。人的知识越完备、经验越多,分析 问题就会越深入,问题就能被解决得更优雅。 hello‑algo.com 84 我们可以将计算机存储系统想象为图 4‑9 所示的金字塔结构。越靠近金字塔顶端的存储设备的速度越快、容 量越小、成本越高。这种多层级的设计并非偶然,而是计算机科学家和工程师们经过深思熟虑的结果。 ‧ 硬盘难以被内存取代。首先,内存中的数据在断电后会丢失,因此它不适合长期存储数据;其次,内存 的成本是硬盘的几十倍,这使得它难以在消费者市场普及。 ‧ 缓存的大容量和高速度难以兼得。随着0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Java 版或令人惊叹的事物背后,都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 本书旨在通过清晰易懂的动画图解和可运行的代码示例, 位数的整数(例如学号),那么我们就可以用效率更高的“基数排序”来做,将时间复杂度降为 ?(??) , 其中 ? 为位数。当数据体量很大时,节省出来的运行时间就能创造较大价值(成本降低、体验变好等)。 在工程领域中,大量问题是难以达到最优解的,许多问题只是被“差不多”地解决了。问题的难易程度一方 面取决于问题本身的性质,另一方面也取决于观测问题的人的知识储备。人的知识越完备、经验越多,分析 问题就会越深入,问题就能被解决得更优雅。 hello‑algo.com 84 我们可以将计算机存储系统想象为图 4‑9 所示的金字塔结构。越靠近金字塔顶端的存储设备的速度越快、容 量越小、成本越高。这种多层级的设计并非偶然,而是计算机科学家和工程师们经过深思熟虑的结果。 ‧ 硬盘难以被内存取代。首先,内存中的数据在断电后会丢失,因此它不适合长期存储数据;其次,内存 的成本是硬盘的几十倍,这使得它难以在消费者市场普及。 ‧ 缓存的大容量和高速度难以兼得。随着0 码力 | 379 页 | 18.48 MB | 10 月前3
 Hello 算法 1.1.0 Java版或令人惊叹的事物背后,都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 本书旨在通过清晰易懂的动画图解和可运行的代码示例, hello‑algo.com 84 我们可以将计算机存储系统想象为图 4‑9 所示的金字塔结构。越靠近金字塔顶端的存储设备的速度越快、容 量越小、成本越高。这种多层级的设计并非偶然,而是计算机科学家和工程师们经过深思熟虑的结果。 ‧ 硬盘难以被内存取代。首先,内存中的数据在断电后会丢失,因此它不适合长期存储数据;其次,内存 的成本是硬盘的几十倍,这使得它难以在消费者市场普及。 ‧ 缓存的大容量和高速度难以兼得。随着 两种实现的对比结论与栈一致,在此不再赘述。 5.2.3 队列典型应用 ‧ 淘宝订单。购物者下单后,订单将加入队列中,系统随后会根据顺序处理队列中的订单。在双十一期 间,短时间内会产生海量订单,高并发成为工程师们需要重点攻克的问题。 ‧ 各类待办事项。任何需要实现“先来后到”功能的场景,例如打印机的任务队列、餐厅的出餐队列等, 队列在这些场景中可以有效地维护处理顺序。 5.3 双向队列 在队列中0 码力 | 378 页 | 18.47 MB | 1 年前3 Hello 算法 1.1.0 Java版或令人惊叹的事物背后,都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 本书旨在通过清晰易懂的动画图解和可运行的代码示例, hello‑algo.com 84 我们可以将计算机存储系统想象为图 4‑9 所示的金字塔结构。越靠近金字塔顶端的存储设备的速度越快、容 量越小、成本越高。这种多层级的设计并非偶然,而是计算机科学家和工程师们经过深思熟虑的结果。 ‧ 硬盘难以被内存取代。首先,内存中的数据在断电后会丢失,因此它不适合长期存储数据;其次,内存 的成本是硬盘的几十倍,这使得它难以在消费者市场普及。 ‧ 缓存的大容量和高速度难以兼得。随着 两种实现的对比结论与栈一致,在此不再赘述。 5.2.3 队列典型应用 ‧ 淘宝订单。购物者下单后,订单将加入队列中,系统随后会根据顺序处理队列中的订单。在双十一期 间,短时间内会产生海量订单,高并发成为工程师们需要重点攻克的问题。 ‧ 各类待办事项。任何需要实现“先来后到”功能的场景,例如打印机的任务队列、餐厅的出餐队列等, 队列在这些场景中可以有效地维护处理顺序。 5.3 双向队列 在队列中0 码力 | 378 页 | 18.47 MB | 1 年前3
 Nacos架构&原理
已经被大量开发者和企业客户用于生产环境,本 书详尽介绍了 Nacos 的架构设计、功能使用和最佳实践,推荐分布式应用的开发人员、运维人员和 对该领域感兴趣的技术爱好者阅读。 推荐序 < 8 Facebook 工程师 & CNCF 前 TOC 成员 - 李响 服务注册、发现与配置管理是构成大型分布式系统的基石。Nacos 是集成了这三种能力的现代化、 开源开放的代表系统。本书系统化的介绍了 Nacos 诞 都做了大量的功能迭代,用来支持阿里的异地多活,容灾演练,容 器化,Serverless 化。Nacos 经过阿里内部锤炼十年以上,各项指标已经及其先进,稳定,为服务 好全球开发者,Nacos 经过数十名工程师持续努力,以开源形式和大家见面,相信 Nacos ⼀定能在 分布式领域成为开发者的首选项。 9 > 前言 前⾔ 序⾔ 阿里做开源大概有两个阶段,第⼀个阶段是 2018 年之前,取之于开源,反哺于社区,开源是⼀种 和阐述 服务注册中心产品设计上应该去遵循和考虑的要点。 数据模型 注册中心的核心数据是服务的名字和它对应的网络地址,当服务注册了多个实例时,我们需要对不 健康的实例进行过滤或者针对实例的⼀些特征进行流量的分配,那么就需要在实例上存储⼀些例如 健康状态、权重等属性。随着服务规模的扩大,渐渐的又需要在整个服务级别设定⼀些权限规则、 以及对所有实例都生效的⼀些开关,于是在服务级别又会设立⼀些属性。再往后,我们又发现单个0 码力 | 326 页 | 12.83 MB | 9 月前3 Nacos架构&原理
已经被大量开发者和企业客户用于生产环境,本 书详尽介绍了 Nacos 的架构设计、功能使用和最佳实践,推荐分布式应用的开发人员、运维人员和 对该领域感兴趣的技术爱好者阅读。 推荐序 < 8 Facebook 工程师 & CNCF 前 TOC 成员 - 李响 服务注册、发现与配置管理是构成大型分布式系统的基石。Nacos 是集成了这三种能力的现代化、 开源开放的代表系统。本书系统化的介绍了 Nacos 诞 都做了大量的功能迭代,用来支持阿里的异地多活,容灾演练,容 器化,Serverless 化。Nacos 经过阿里内部锤炼十年以上,各项指标已经及其先进,稳定,为服务 好全球开发者,Nacos 经过数十名工程师持续努力,以开源形式和大家见面,相信 Nacos ⼀定能在 分布式领域成为开发者的首选项。 9 > 前言 前⾔ 序⾔ 阿里做开源大概有两个阶段,第⼀个阶段是 2018 年之前,取之于开源,反哺于社区,开源是⼀种 和阐述 服务注册中心产品设计上应该去遵循和考虑的要点。 数据模型 注册中心的核心数据是服务的名字和它对应的网络地址,当服务注册了多个实例时,我们需要对不 健康的实例进行过滤或者针对实例的⼀些特征进行流量的分配,那么就需要在实例上存储⼀些例如 健康状态、权重等属性。随着服务规模的扩大,渐渐的又需要在整个服务级别设定⼀些权限规则、 以及对所有实例都生效的⼀些开关,于是在服务级别又会设立⼀些属性。再往后,我们又发现单个0 码力 | 326 页 | 12.83 MB | 9 月前3
 Apache Shiro参考手册中文版Credentials(凭证)通常是只被 Subject 知道的秘密值,它用来作为一种起支持作用的证据,此证据事实上 包含着所谓的身份证明。一些常见 credentials(凭证)的例子有密码,生物特征数据如指纹和视网膜扫描, 以及 X.509 证书。 principal/credential 配对最常见的例子是用户名和密码。用户名是所声称的身份,密码是匹配所声称的身份的 证明。如果提交的密码 的关键区别是输入的字符串是一个角色名,而不是一个权限字符串。 RolePermissionResolver 能够在 Realm 内部使用,当需要将一个角色名转换成一组具体的权限实例时。 这是一个特别有用的特征用来支持旧的或不灵活的,可能没有权限概念的数据源。 例如,许多 LDAP 目录存储了角色名(或组名),但是不支持关联角色名到具体的权限由于他们没有“权限”的概 念。一个基于 Shiro 的应用程序能够使用存储在 company…… myRealm.credentialsMatcher = $credentialsMathcer ... SaltedAuthenticationInfo 为了确保这一工程,最后要做的事情是,你的 Realm 实现必须返回一个 SaltedAuthenticationInfo 实例而不是一个普 通的 AuthenticationInfo 实例。SaltedAuthenticationInfo0 码力 | 92 页 | 1.16 MB | 1 年前3 Apache Shiro参考手册中文版Credentials(凭证)通常是只被 Subject 知道的秘密值,它用来作为一种起支持作用的证据,此证据事实上 包含着所谓的身份证明。一些常见 credentials(凭证)的例子有密码,生物特征数据如指纹和视网膜扫描, 以及 X.509 证书。 principal/credential 配对最常见的例子是用户名和密码。用户名是所声称的身份,密码是匹配所声称的身份的 证明。如果提交的密码 的关键区别是输入的字符串是一个角色名,而不是一个权限字符串。 RolePermissionResolver 能够在 Realm 内部使用,当需要将一个角色名转换成一组具体的权限实例时。 这是一个特别有用的特征用来支持旧的或不灵活的,可能没有权限概念的数据源。 例如,许多 LDAP 目录存储了角色名(或组名),但是不支持关联角色名到具体的权限由于他们没有“权限”的概 念。一个基于 Shiro 的应用程序能够使用存储在 company…… myRealm.credentialsMatcher = $credentialsMathcer ... SaltedAuthenticationInfo 为了确保这一工程,最后要做的事情是,你的 Realm 实现必须返回一个 SaltedAuthenticationInfo 实例而不是一个普 通的 AuthenticationInfo 实例。SaltedAuthenticationInfo0 码力 | 92 页 | 1.16 MB | 1 年前3
 Hello 算法 1.0.0 Java版hello‑algo.com 84 我们可以将计算机存储系统想象为图 4‑9 所示的金字塔结构。越靠近金字塔顶端的存储设备的速度越快、容 量越小、成本越高。这种多层级的设计并非偶然,而是计算机科学家和工程师们经过深思熟虑的结果。 ‧ 硬盘难以被内存取代。首先,内存中的数据在断电后会丢失,因此它不适合长期存储数据;其次,内存 的成本是硬盘的几十倍,这使得它难以在消费者市场普及。 ‧ 缓存的大容量和高速度难以兼得。随着 两种实现的对比结论与栈一致,在此不再赘述。 5.2.3 队列典型应用 ‧ 淘宝订单。购物者下单后,订单将加入队列中,系统随后会根据顺序处理队列中的订单。在双十一期 间,短时间内会产生海量订单,高并发成为工程师们需要重点攻克的问题。 ‧ 各类待办事项。任何需要实现“先来后到”功能的场景,例如打印机的任务队列、餐厅的出餐队列等, 队列在这些场景中可以有效地维护处理顺序。 5.3 双向队列 在队列中 数据完整性检查:数据发送方可以计算数据的哈希值并将其一同发送;接收方可以重新计算接收到的 数据的哈希值,并与接收到的哈希值进行比较。如果两者匹配,那么数据就被视为完整。 对于密码学的相关应用,为了防止从哈希值推导出原始密码等逆向工程,哈希算法需要具备更高等级的安全 特性。 ‧ 单向性:无法通过哈希值反推出关于输入数据的任何信息。 第 6 章 哈希表 hello‑algo.com 129 ‧ 抗碰撞性:应当极难找到两个不同的输入,使得它们的哈希值相同。0 码力 | 376 页 | 17.59 MB | 1 年前3 Hello 算法 1.0.0 Java版hello‑algo.com 84 我们可以将计算机存储系统想象为图 4‑9 所示的金字塔结构。越靠近金字塔顶端的存储设备的速度越快、容 量越小、成本越高。这种多层级的设计并非偶然,而是计算机科学家和工程师们经过深思熟虑的结果。 ‧ 硬盘难以被内存取代。首先,内存中的数据在断电后会丢失,因此它不适合长期存储数据;其次,内存 的成本是硬盘的几十倍,这使得它难以在消费者市场普及。 ‧ 缓存的大容量和高速度难以兼得。随着 两种实现的对比结论与栈一致,在此不再赘述。 5.2.3 队列典型应用 ‧ 淘宝订单。购物者下单后,订单将加入队列中,系统随后会根据顺序处理队列中的订单。在双十一期 间,短时间内会产生海量订单,高并发成为工程师们需要重点攻克的问题。 ‧ 各类待办事项。任何需要实现“先来后到”功能的场景,例如打印机的任务队列、餐厅的出餐队列等, 队列在这些场景中可以有效地维护处理顺序。 5.3 双向队列 在队列中 数据完整性检查:数据发送方可以计算数据的哈希值并将其一同发送;接收方可以重新计算接收到的 数据的哈希值,并与接收到的哈希值进行比较。如果两者匹配,那么数据就被视为完整。 对于密码学的相关应用,为了防止从哈希值推导出原始密码等逆向工程,哈希算法需要具备更高等级的安全 特性。 ‧ 单向性:无法通过哈希值反推出关于输入数据的任何信息。 第 6 章 哈希表 hello‑algo.com 129 ‧ 抗碰撞性:应当极难找到两个不同的输入,使得它们的哈希值相同。0 码力 | 376 页 | 17.59 MB | 1 年前3
 Hello 算法 1.0.0b4 Java版两种实现的对比结论与栈一致,在此不再赘述。 5.2.3. 队列典型应用 ‧ 淘宝订单。购物者下单后,订单将加入队列中,系统随后会根据顺序依次处理队列中的订单。在双十一 期间,短时间内会产生海量订单,高并发成为工程师们需要重点攻克的问题。 ‧ 各类待办事项。任何需要实现“先来后到”功能的场景,例如打印机的任务队列、餐厅的出餐队列等。 队列在这些场景中可以有效地维护处理顺序。 5.3. 双向队列 对于队列 方可以重新计算接收到的 数据的哈希值,并与接收到的哈希值进行比较。如果两者匹配,那么数据就被视为完整的。 对于密码学的相关应用,哈希算法需要满足更高的安全标准,以防止从哈希值推导出原始密码等逆向工程, 包括: ‧ 抗碰撞性:应当极其困难找到两个不同的输入,使得它们的哈希值相同。 6. 散列表 hello‑algo.com 106 ‧ 雪崩效应:输入的微小变化应当导致输出的显著且不可预测的变化。 无后效性。对于这类问题,我们通常会选择 使用其他方法,例如启发式搜索、遗传算法、强化学习等,从而在有限时间内得到可用的局部最优解。 14.3. 动态规划解题思路 上两节介绍了动态规划问题的主要特征,接下来我们一起探究两个更加实用的问题: 1. 如何判断一个问题是不是动态规划问题? 2. 求解动态规划问题该从何处入手,完整步骤是什么? 14.3.1. 问题判断 总的来说,如果一个问题包0 码力 | 342 页 | 27.39 MB | 1 年前3 Hello 算法 1.0.0b4 Java版两种实现的对比结论与栈一致,在此不再赘述。 5.2.3. 队列典型应用 ‧ 淘宝订单。购物者下单后,订单将加入队列中,系统随后会根据顺序依次处理队列中的订单。在双十一 期间,短时间内会产生海量订单,高并发成为工程师们需要重点攻克的问题。 ‧ 各类待办事项。任何需要实现“先来后到”功能的场景,例如打印机的任务队列、餐厅的出餐队列等。 队列在这些场景中可以有效地维护处理顺序。 5.3. 双向队列 对于队列 方可以重新计算接收到的 数据的哈希值,并与接收到的哈希值进行比较。如果两者匹配,那么数据就被视为完整的。 对于密码学的相关应用,哈希算法需要满足更高的安全标准,以防止从哈希值推导出原始密码等逆向工程, 包括: ‧ 抗碰撞性:应当极其困难找到两个不同的输入,使得它们的哈希值相同。 6. 散列表 hello‑algo.com 106 ‧ 雪崩效应:输入的微小变化应当导致输出的显著且不可预测的变化。 无后效性。对于这类问题,我们通常会选择 使用其他方法,例如启发式搜索、遗传算法、强化学习等,从而在有限时间内得到可用的局部最优解。 14.3. 动态规划解题思路 上两节介绍了动态规划问题的主要特征,接下来我们一起探究两个更加实用的问题: 1. 如何判断一个问题是不是动态规划问题? 2. 求解动态规划问题该从何处入手,完整步骤是什么? 14.3.1. 问题判断 总的来说,如果一个问题包0 码力 | 342 页 | 27.39 MB | 1 年前3
 Hello 算法 1.0.0b5 Java版两种实现的对比结论与栈一致,在此不再赘述。 5.2.3 队列典型应用 ‧ 淘宝订单。购物者下单后,订单将加入队列中,系统随后会根据顺序依次处理队列中的订单。在双十一 期间,短时间内会产生海量订单,高并发成为工程师们需要重点攻克的问题。 ‧ 各类待办事项。任何需要实现“先来后到”功能的场景,例如打印机的任务队列、餐厅的出餐队列等。 队列在这些场景中可以有效地维护处理顺序。 5.3 双向队列 在队列中 数据完整性检查:数据发送方可以计算数据的哈希值并将其一同发送;接收方可以重新计算接收到的 数据的哈希值,并与接收到的哈希值进行比较。如果两者匹配,那么数据就被视为完整的。 对于密码学的相关应用,为了防止从哈希值推导出原始密码等逆向工程,哈希算法需要具备更高等级的安全 特性。 ‧ 抗碰撞性:应当极其困难找到两个不同的输入,使得它们的哈希值相同。 第 6 章 哈希表 hello‑algo.com 124 ‧ 雪崩效应:输入的 足无后效性。对于这类问题,我们通常会选择 使用其他方法,例如启发式搜索、遗传算法、强化学习等,从而在有限时间内得到可用的局部最优解。 14.3 动态规划解题思路 上两节介绍了动态规划问题的主要特征,接下来我们一起探究两个更加实用的问题。 1. 如何判断一个问题是不是动态规划问题? 2. 求解动态规划问题该从何处入手,完整步骤是什么? 14.3.1 问题判断 总的来说,如果一个问题包含0 码力 | 376 页 | 30.69 MB | 1 年前3 Hello 算法 1.0.0b5 Java版两种实现的对比结论与栈一致,在此不再赘述。 5.2.3 队列典型应用 ‧ 淘宝订单。购物者下单后,订单将加入队列中,系统随后会根据顺序依次处理队列中的订单。在双十一 期间,短时间内会产生海量订单,高并发成为工程师们需要重点攻克的问题。 ‧ 各类待办事项。任何需要实现“先来后到”功能的场景,例如打印机的任务队列、餐厅的出餐队列等。 队列在这些场景中可以有效地维护处理顺序。 5.3 双向队列 在队列中 数据完整性检查:数据发送方可以计算数据的哈希值并将其一同发送;接收方可以重新计算接收到的 数据的哈希值,并与接收到的哈希值进行比较。如果两者匹配,那么数据就被视为完整的。 对于密码学的相关应用,为了防止从哈希值推导出原始密码等逆向工程,哈希算法需要具备更高等级的安全 特性。 ‧ 抗碰撞性:应当极其困难找到两个不同的输入,使得它们的哈希值相同。 第 6 章 哈希表 hello‑algo.com 124 ‧ 雪崩效应:输入的 足无后效性。对于这类问题,我们通常会选择 使用其他方法,例如启发式搜索、遗传算法、强化学习等,从而在有限时间内得到可用的局部最优解。 14.3 动态规划解题思路 上两节介绍了动态规划问题的主要特征,接下来我们一起探究两个更加实用的问题。 1. 如何判断一个问题是不是动态规划问题? 2. 求解动态规划问题该从何处入手,完整步骤是什么? 14.3.1 问题判断 总的来说,如果一个问题包含0 码力 | 376 页 | 30.69 MB | 1 年前3
 Hello 算法 1.0.0b2 Java版与栈的结论一致,在此不再赘述。 5.2.4. 队列典型应用 ‧ 淘宝订单。购物者下单后,订单就被加入到队列之中,随后系统再根据顺序依次处理队列中的订单。在 双十一时,在短时间内会产生海量的订单,如何处理「高并发」则是工程师们需要重点思考的问题。 ‧ 各种待办事项。任何需要实现“先来后到”的功能,例如打印机的任务队列、餐厅的出餐队列等等。 5.3. 双向队列 对于队列,我们只能在头部删除或在尾部添加元素,而「双向队列 (?) ,但通用性相对较差。 11.1.2. 理想排序算法 运行快、原地、稳定、正向自适应、通用性好。显然,目前没有发现具备以上所有特性的排序算法,排序算法 的选型使用取决于具体的数据特点与问题特征。 接下来,我们将一起学习各种排序算法,并基于以上评价维度展开分析各个排序算法的优缺点。 11.2. 冒泡排序 「冒泡排序 Bubble Sort」是一种基于元素交换实现排序的算法,非常适合作为第一个学习的排序算法。0 码力 | 197 页 | 15.72 MB | 1 年前3 Hello 算法 1.0.0b2 Java版与栈的结论一致,在此不再赘述。 5.2.4. 队列典型应用 ‧ 淘宝订单。购物者下单后,订单就被加入到队列之中,随后系统再根据顺序依次处理队列中的订单。在 双十一时,在短时间内会产生海量的订单,如何处理「高并发」则是工程师们需要重点思考的问题。 ‧ 各种待办事项。任何需要实现“先来后到”的功能,例如打印机的任务队列、餐厅的出餐队列等等。 5.3. 双向队列 对于队列,我们只能在头部删除或在尾部添加元素,而「双向队列 (?) ,但通用性相对较差。 11.1.2. 理想排序算法 运行快、原地、稳定、正向自适应、通用性好。显然,目前没有发现具备以上所有特性的排序算法,排序算法 的选型使用取决于具体的数据特点与问题特征。 接下来,我们将一起学习各种排序算法,并基于以上评价维度展开分析各个排序算法的优缺点。 11.2. 冒泡排序 「冒泡排序 Bubble Sort」是一种基于元素交换实现排序的算法,非常适合作为第一个学习的排序算法。0 码力 | 197 页 | 15.72 MB | 1 年前3
 在Eclipse中使用Maven创建Dynamic Web Project在Eclipse中选择File - new - Project… - Maven - Maven Project,创建Maven工程。按需填写相关信息,注意选择 org.apache.maven.archetypes maven-archetype-webapp 1.0,完成工程创建。 2 配置⼯工程JRE的版本为⾼高版本 在所创建的项目上点击右键,选择Properties - Java Build Path Libraries,选择JRE System Library[JavaSE-1.5], 将其修改为本机使用的高版本JRE,例如JavaSE-1.8(Java SE 8 [1.8.0_77])。设置完成后,右键点击工程中Java Resources - new - Source Folder,创建src/test/resources目录。创建之后的Java Resources目录下包含4个子目录: src/main/java version of project facet Dynamic Web Module to 3.1,无法完成配置。这是因为新 建工程的时候,用的maven-artchetype-webapp的servlet是2.3版本,比较老,需要手动修改相关文件。 4.1 修改web.xml⽂文件 在工程目录src/main/webapp/WEB-INF目录下,编辑web.xml文件: web.xml原始文件内容如下:0 码力 | 2 页 | 345.86 KB | 1 年前3 在Eclipse中使用Maven创建Dynamic Web Project在Eclipse中选择File - new - Project… - Maven - Maven Project,创建Maven工程。按需填写相关信息,注意选择 org.apache.maven.archetypes maven-archetype-webapp 1.0,完成工程创建。 2 配置⼯工程JRE的版本为⾼高版本 在所创建的项目上点击右键,选择Properties - Java Build Path Libraries,选择JRE System Library[JavaSE-1.5], 将其修改为本机使用的高版本JRE,例如JavaSE-1.8(Java SE 8 [1.8.0_77])。设置完成后,右键点击工程中Java Resources - new - Source Folder,创建src/test/resources目录。创建之后的Java Resources目录下包含4个子目录: src/main/java version of project facet Dynamic Web Module to 3.1,无法完成配置。这是因为新 建工程的时候,用的maven-artchetype-webapp的servlet是2.3版本,比较老,需要手动修改相关文件。 4.1 修改web.xml⽂文件 在工程目录src/main/webapp/WEB-INF目录下,编辑web.xml文件: web.xml原始文件内容如下:0 码力 | 2 页 | 345.86 KB | 1 年前3
共 17 条
- 1
- 2













