Apache Shiro参考手册中文版方法(get*/set*)轻松地自定义可拔插组件。这意味着 Shiro 的架构的组件性能够把自定义行为转 化为非常容易的配置文件。 Easy Configuration 由于 JavaBeans 的兼容性,通过任何支持 JavaBean 风格的配置的机制可以很容 易的用自定义组件配置 SecurityManager,如 Spring,Guice,JBoss,等等。 我们接下来将讨论 Configuration。 默认地,该实现每小时执行一次验证。你可以通过指定一个新的 ExecutorServiceSessionValidationScheduler 实例并指 定不同的间隔(以毫秒为单位)改变速率来更改验证频率: ExecutorServiceSessionValidationScheduler interval in shiro.ini [main] … ses 过到 FilterChain 的下一个元素。你可以基 于一般配置属性触发过滤器的启用状态,或者你甚至可以在每一个请求的基础上触发。 这是一个强大的概念,因为基于特定需求启用或禁用一个过滤器比更改静态过滤器链(这是永久的且固定的)定义 更为方便。 Shiro 通过它的 OncePerRequestFilter 抽象父类来完成这点。所有 Shiro 的不受规范限制的过滤器实现子类实现这一点,0 码力 | 92 页 | 1.16 MB | 1 年前3
Hello 算法 1.0.0b4 Java版从存储空间的角度看,使用 UTF‑8 表示英文字符非常高效,因为它仅需 1 个字节;使用 UTF‑16 编码某些非 英文字符(例如中文)会更加高效,因为它只需要 2 个字节,而 UTF‑8 可能需要 3 个字节。从兼容性的角度 看,UTF‑8 的通用性最佳,许多工具和库都优先支持 UTF‑8 。 3. 数据结构 hello‑algo.com 48 3.4.5. 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 需要注意的是,以上讨论的都是字符串在编程语言中的存储方式,这和字符串如何在文件中存储或在网络中 传输是两个不同的问题。在文件存储或网络传输中,我们一般会将字符串编码为 UTF‑8 格式,以达到最优的 兼容性和空间效率。 3.5. 小结 数据结构分类 3. 数据结构 hello‑algo.com 49 ‧ 数据结构可以从逻辑结构和物理结构两个角度进行分类。逻辑结构描述了数据元素之间的逻辑关系,而 数组和链表是两种基本数据结构,分别代表数据在计算机内存中的连续空间存储和离散空间存储方式。 两者的优缺点呈现出互补的特性。 ‧ 数组支持随机访问、占用内存较少;但插入和删除元素效率低,且初始化后长度不可变。 ‧ 链表通过更改引用(指针)实现高效的节点插入与删除,且可以灵活调整长度;但节点访问效率低、占 用内存较多。常见的链表类型包括单向链表、循环链表、双向链表。 ‧ 动态数组,又称列表,是基于数组实现的一种数据结构0 码力 | 342 页 | 27.39 MB | 1 年前3
Hello 算法 1.0.0b5 Java版从存储空间的角度看,使用 UTF‑8 表示英文字符非常高效,因为它仅需 1 个字节;使用 UTF‑16 编码某些非 英文字符(例如中文)会更加高效,因为它只需要 2 个字节,而 UTF‑8 可能需要 3 个字节。 从兼容性的角度看,UTF‑8 的通用性最佳,许多工具和库都优先支持 UTF‑8 。 3.4.5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长的编码。在等长编码 需要注意的是,以上讨论的都是字符串在编程语言中的存储方式,这和字符串如何在文件中存储或在网络中 传输是两个不同的问题。在文件存储或网络传输中,我们通常会将字符串编码为 UTF‑8 格式,以达到最优的 兼容性和空间效率。 第 3 章 数据结构 hello‑algo.com 62 3.5 小结 1. 重点回顾 ‧ 数据结构可以从逻辑结构和物理结构两个角度进行分类。逻辑结构描述了数据元素之间的逻辑关系,而 数组和链表是两种基本的数据结构,分别代表数据在计算机内存中的两种存储方式:连续空间存储和 离散空间存储。两者的特点呈现出互补的特性。 ‧ 数组支持随机访问、占用内存较少;但插入和删除元素效率低,且初始化后长度不可变。 ‧ 链表通过更改引用(指针)实现高效的节点插入与删除,且可以灵活调整长度;但节点访问效率低、占 用内存较多。常见的链表类型包括单向链表、循环链表、双向链表。 ‧ 动态数组,又称列表,是基于数组实现的一种数据结构0 码力 | 376 页 | 30.69 MB | 1 年前3
Apache Shiro 1.2.x Reference Manual 中文翻译潜在的安全隐患 虽然这是一个非常简单和常用的方法,但隐含的角色可能会增加软件的维护成本和管理问 题。 例如,如果你想增加或删除一个角色,或者重定义角色的行为怎么办?你不得不重新打开代 码,修改所有对更改后的角色的检测,每次都需要这样做,这还没提到其引起的执行代价 (重测试,通过质量验证,关闭程序,升级软件,重启程序等)。 Apache Shiro 1.2.x Reference Manual 中文翻译 默认地,该实现每小时执行一次验证。你可以通过指定一个新的 ExecutorServiceSessionValidationScheduler 实例并指 定不同的间隔(以毫秒为单位)改变 速率来更改验证频率: [main] ... sessionValidationScheduler = org.apache.shiro.session.mgt.ExecutorServiceSessio 立即通过到FilterChain 的下一个元素。你可以基于一般配置属性触发过滤器的启用状态,或 者你甚至可以在每一个请求的基础上触发。 这是一个强大的概念,因为基于特定需求启用或禁用一个过滤器比更改静态过滤器链(这是 永久的且固定的)定义更为方便。 Shiro 通过它的 OncePerRequestFilter 抽象父类来完成这点。所有 Shiro 的不受规范限制的 过滤器实现子类实现这0 码力 | 196 页 | 2.34 MB | 1 年前3
《Java 应用与开发》课程讲义 - 王晓东版),清华大学出版社,2015.5 • Bruce Eckel, Thinking in Java (3rd) 教学目标 1. 理解泛型的概念,掌握其基本应用 • 集合框架中的泛型 • 泛型的向后兼容性 2. 掌握自定义泛型类和泛型方法 • 理解类型参数 • 理解差异性并能够定义自己的泛型类和泛型方法 • 受限制的类型参数 3. 学会处理泛型类型,包括使用通配符实现泛型容器遍历和操作 83 泛型类与泛型方法 � 8 � 在 Hashtable 中使用泛型 . 课程配套代码 ± sample.generics.HashtableGenericsSample.java 泛型的向后兼容性 • Java 语言中的泛型是维护向后兼容的,完全可以不采用泛型、而继续沿用过去的 做法。 • 这些未加改造的旧式代码将无法使用泛型带来的便利和安全性。 未启用泛型机制的代码在高版本编译器中会输出如下形式的编译提示信息: -e 为捆绑到可执行 jar 文件的独立应用程序指定应用程序入口点。 -0 仅存储,不使用任何 ZIP 压缩。 -M 不创建条目的清单文件。 -i 为指定的 jar 文件生成索引信息。 -C 更改为指定的目录并包含其中的文件。 9.7.1 制作并使用自己的 jar 文件 示例代码:A.java 1 public class A { 2 public void ma() { 3 System0 码力 | 330 页 | 6.54 MB | 1 年前3
Nacos架构&原理
101:8847 192.168.16.102 192.168.16.103 该文件默认只需要填写每个成员节点的 IP 信息即可,端口会自动选择 Nacos 的默认端口 8848, 如过说有特殊需求更改了 Nacos 的端口信息,则需要在该文件将该节点的完整网路地址信息补充 完整(IP:PORT)。 当 Nacos 节点启动时,会读取该文件的内容,然后将文件内的 IP 解析为节点列表,调用 afterLo 了非持久化服务。 85 > Nacos 架构 在 Nacos2.0 版本后,持久化属性的定义被抽象到服务中,⼀个服务只能被定义成持久化服务或非 持久化服务,⼀旦定义完成,在服务生命周期结束之前,无法更改其持久化属性。 持久化属性将会影响服务及实例的数据是否会被 Nacos 进行持久化存储,设置为持久化之后,实 例将不会再被自动移除,需要使用者手动移除实例。 集群(Cluster) 集群是 Nacos 组件库生态更成熟强大。所以综合选择也就是 React 了。 方案 前端组件选型上有⼀些争议,差别在 fusion 和 antd 上。 antd fusion 社区影响力 开源早,影响力大 内部使用久,开源工作刚起步 与内部兼容性 无 大(云产品基于这个搞的) 前端人力资源 少 多(简单从商业化上平移过来) 设计定制能力 ⼀般 很强 未来为商业化引流 有差别 平滑 121 > Nacos 架构 Antd 和 fusion0 码力 | 326 页 | 12.83 MB | 10 月前3
Hello 算法 1.1.0 Java版从存储空间占用的角度看,使用 UTF‑8 表示英文字符非常高效,因为它仅需 1 字节;使用 UTF‑16 编码某些 非英文字符(例如中文)会更加高效,因为它仅需 2 字节,而 UTF‑8 可能需要 3 字节。 从兼容性的角度看,UTF‑8 的通用性最佳,许多工具和库优先支持 UTF‑8 。 第 3 章 数据结构 hello‑algo.com 63 3.4.5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 数组和链表是两种基本的数据结构,分别代表数据在计算机内存中的两种存储方式:连续空间存储和 分散空间存储。两者的特点呈现出互补的特性。 ‧ 数组支持随机访问、占用内存较少;但插入和删除元素效率低,且初始化后长度不可变。 ‧ 链表通过更改引用(指针)实现高效的节点插入与删除,且可以灵活调整长度;但节点访问效率低、占 用内存较多。常见的链表类型包括单向链表、环形链表、双向链表。 ‧ 列表是一种支持增删查改的元素有序集合,通常基于动 hello‑algo.com 111 5.3.3 双向队列应用 双向队列兼具栈与队列的逻辑,因此它可以实现这两者的所有应用场景,同时提供更高的自由度。 我们知道,软件的“撤销”功能通常使用栈来实现:系统将每次更改操作 push 到栈中,然后通过 pop 实现撤 销。然而,考虑到系统资源的限制,软件通常会限制撤销的步数(例如仅允许保存 50 步)。当栈的长度超过 50 时,软件需要在栈底(队首)执行删除操作0 码力 | 378 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 Java版从存储空间占用的角度看,使用 UTF‑8 表示英文字符非常高效,因为它仅需 1 字节;使用 UTF‑16 编码某些 非英文字符(例如中文)会更加高效,因为它仅需 2 字节,而 UTF‑8 可能需要 3 字节。 从兼容性的角度看,UTF‑8 的通用性最佳,许多工具和库优先支持 UTF‑8 。 第 3 章 数据结构 hello‑algo.com 63 3.4.5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 数组和链表是两种基本的数据结构,分别代表数据在计算机内存中的两种存储方式:连续空间存储和 分散空间存储。两者的特点呈现出互补的特性。 ‧ 数组支持随机访问、占用内存较少;但插入和删除元素效率低,且初始化后长度不可变。 ‧ 链表通过更改引用(指针)实现高效的节点插入与删除,且可以灵活调整长度;但节点访问效率低、占 用内存较多。常见的链表类型包括单向链表、环形链表、双向链表。 ‧ 列表是一种支持增删查改的元素有序集合,通常基于动 hello‑algo.com 111 5.3.3 双向队列应用 双向队列兼具栈与队列的逻辑,因此它可以实现这两者的所有应用场景,同时提供更高的自由度。 我们知道,软件的“撤销”功能通常使用栈来实现:系统将每次更改操作 push 到栈中,然后通过 pop 实现撤 销。然而,考虑到系统资源的限制,软件通常会限制撤销的步数(例如仅允许保存 50 步)。当栈的长度超过 50 时,软件需要在栈底(队首)执行删除操作0 码力 | 376 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Java 版从存储空间占用的角度看,使用 UTF‑8 表示英文字符非常高效,因为它仅需 1 字节;使用 UTF‑16 编码某些 非英文字符(例如中文)会更加高效,因为它仅需 2 字节,而 UTF‑8 可能需要 3 字节。 从兼容性的角度看,UTF‑8 的通用性最佳,许多工具和库优先支持 UTF‑8 。 第 3 章 数据结构 www.hello‑algo.com 63 3.4.5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 数组和链表是两种基本的数据结构,分别代表数据在计算机内存中的两种存储方式:连续空间存储和 分散空间存储。两者的特点呈现出互补的特性。 ‧ 数组支持随机访问、占用内存较少;但插入和删除元素效率低,且初始化后长度不可变。 ‧ 链表通过更改引用(指针)实现高效的节点插入与删除,且可以灵活调整长度;但节点访问效率低、占 用内存较多。常见的链表类型包括单向链表、环形链表、双向链表。 ‧ 列表是一种支持增删查改的元素有序集合,通常基于动 hello‑algo.com 111 5.3.3 双向队列应用 双向队列兼具栈与队列的逻辑,因此它可以实现这两者的所有应用场景,同时提供更高的自由度。 我们知道,软件的“撤销”功能通常使用栈来实现:系统将每次更改操作 push 到栈中,然后通过 pop 实现撤 销。然而,考虑到系统资源的限制,软件通常会限制撤销的步数(例如仅允许保存 50 步)。当栈的长度超过 50 时,软件需要在栈底(队首)执行删除操作0 码力 | 379 页 | 18.48 MB | 10 月前3
Hello 算法 1.0.0b2 Java版存中的两种存储方式,即连续空间存储和离散 空间存储。两者的优点与缺点呈现出此消彼长的关系。 ‧ 数组支持随机访问、内存空间占用小;但插入与删除元素效率低,且初始化后长度不可变。 ‧ 链表可通过更改指针实现高效的结点插入与删除,并且可以灵活地修改长度;但结点访问效率低、占用 内存多。常见的链表类型有单向链表、循环链表、双向链表。 ‧ 列表又称动态数组,是基于数组实现的一种数据结构,其保存了数组的优势,且可以灵活改变长度。列 res; } } 5.3.3. 双向队列应用 双向队列同时表现出栈与队列的逻辑,因此可以实现两者的所有应用,并且提供更高的自由度。 我们知道,软件的“撤销”功能需要使用栈来实现;系统把每一次更改操作 push 到栈中,然后通过 pop 实现 撤销。然而,考虑到系统资源有限,软件一般会限制撤销的步数(例如仅允许保存 50 步),那么当栈的长度 > 50 时,软件就需要在栈底(即队首)执行删 修改文字或代码: 1. 点击编辑按钮,如果遇到提示“需要 Fork 此仓库”,请通过; 2. 修改 Markdown 源文件内容,并检查内容正确性,尽量保持排版格式统一; 3. 在页面底部填写更改说明,然后单击“Propose file change”按钮;页面跳转后,点击“Create pull request”按钮发起拉取请求即可。 12. 附录 hello‑algo.com 1920 码力 | 197 页 | 15.72 MB | 1 年前3
共 16 条
- 1
- 2













