 Hello 算法 1.0.0b4 Java版为两步:首先统计操作数量,然后判断渐近上界。 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以被忽略。根据此原则,可以总结出以下计数简化技巧: 1. 忽略与 ? 无关的操作。因为它们都是 ?(?) 中的常数项,对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 对数字的引用。因此,我们会发现两个数组中的相同数字拥有同一个 id ,并且这些数字的内 存地址是无需连续的。 68 5. 栈与队列 5.1. 栈 「栈 Stack」是一种遵循先入后出(First In, Last Out)原则的线性数据结构。 我们可以将栈类比为桌面上的一摞盘子,如果需要拿出底部的盘子,则需要先将上面的盘子依次取出。我们 将盘子替换为各种类型的元素(如整数、字符、对象等),就得到了栈数据结构。 在栈 /* 判断是否为空 */ boolean isEmpty = stack.isEmpty(); 5.1.2. 栈的实现 为了深入了解栈的运行机制,我们来尝试自己实现一个栈类。 栈遵循先入后出的原则,因此我们只能在栈顶添加或删除元素。然而,数组和链表都可以在任意位置添加和 删除元素,因此栈可以被视为一种受限制的数组或链表。换句话说,我们可以“屏蔽”数组或链表的部分无 关操作,使其对外表现的逻辑符合栈的特性。0 码力 | 342 页 | 27.39 MB | 1 年前3 Hello 算法 1.0.0b4 Java版为两步:首先统计操作数量,然后判断渐近上界。 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以被忽略。根据此原则,可以总结出以下计数简化技巧: 1. 忽略与 ? 无关的操作。因为它们都是 ?(?) 中的常数项,对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 对数字的引用。因此,我们会发现两个数组中的相同数字拥有同一个 id ,并且这些数字的内 存地址是无需连续的。 68 5. 栈与队列 5.1. 栈 「栈 Stack」是一种遵循先入后出(First In, Last Out)原则的线性数据结构。 我们可以将栈类比为桌面上的一摞盘子,如果需要拿出底部的盘子,则需要先将上面的盘子依次取出。我们 将盘子替换为各种类型的元素(如整数、字符、对象等),就得到了栈数据结构。 在栈 /* 判断是否为空 */ boolean isEmpty = stack.isEmpty(); 5.1.2. 栈的实现 为了深入了解栈的运行机制,我们来尝试自己实现一个栈类。 栈遵循先入后出的原则,因此我们只能在栈顶添加或删除元素。然而,数组和链表都可以在任意位置添加和 删除元素,因此栈可以被视为一种受限制的数组或链表。换句话说,我们可以“屏蔽”数组或链表的部分无 关操作,使其对外表现的逻辑符合栈的特性。0 码力 | 342 页 | 27.39 MB | 1 年前3
 Hello 算法 1.1.0 Java版如果感觉以下内容理解困难,可以在读完“栈”章节后再来复习。 那么,迭代和递归具有什么内在联系呢?以上述递归函数为例,求和操作在递归的“归”阶段进行。这意味 着最初被调用的函数实际上是最后完成其求和操作的,这种工作机制与栈的“先入后出”原则异曲同工。 事实上,“调用栈”和“栈帧空间”这类递归术语已经暗示了递归与栈之间的密切关系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 界。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以忽略。根据此原则,可以总结出以下计数简化技巧。 1. 忽略 ?(?) 中的常数项。因为它们都与 ? 无关,所以对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 /* 判断是否为空 */ boolean isEmpty = stack.isEmpty(); 5.1.2 栈的实现 为了深入了解栈的运行机制,我们来尝试自己实现一个栈类。 栈遵循先入后出的原则,因此我们只能在栈顶添加或删除元素。然而,数组和链表都可以在任意位置添加和 删除元素,因此栈可以视为一种受限制的数组或链表。换句话说,我们可以“屏蔽”数组或链表的部分无关 操作,使其对外表现的逻辑符合栈的特性。0 码力 | 378 页 | 18.47 MB | 1 年前3 Hello 算法 1.1.0 Java版如果感觉以下内容理解困难,可以在读完“栈”章节后再来复习。 那么,迭代和递归具有什么内在联系呢?以上述递归函数为例,求和操作在递归的“归”阶段进行。这意味 着最初被调用的函数实际上是最后完成其求和操作的,这种工作机制与栈的“先入后出”原则异曲同工。 事实上,“调用栈”和“栈帧空间”这类递归术语已经暗示了递归与栈之间的密切关系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 界。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以忽略。根据此原则,可以总结出以下计数简化技巧。 1. 忽略 ?(?) 中的常数项。因为它们都与 ? 无关,所以对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 /* 判断是否为空 */ boolean isEmpty = stack.isEmpty(); 5.1.2 栈的实现 为了深入了解栈的运行机制,我们来尝试自己实现一个栈类。 栈遵循先入后出的原则,因此我们只能在栈顶添加或删除元素。然而,数组和链表都可以在任意位置添加和 删除元素,因此栈可以视为一种受限制的数组或链表。换句话说,我们可以“屏蔽”数组或链表的部分无关 操作,使其对外表现的逻辑符合栈的特性。0 码力 | 378 页 | 18.47 MB | 1 年前3
 Hello 算法 1.0.0 Java版”章节后再来复习。 那么,迭代和递归具有什么内在联系呢?以上述递归函数为例,求和操作在递归的“归”阶段进行。这意味 着最初被调用的函数实际上是最后完成其求和操作的,这种工作机制与栈的“先入后出”原则异曲同工。 事实上,“调用栈”和“栈帧空间”这类递归术语已经暗示了递归与栈之间的密切关系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 界。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以忽略。根据此原则,可以总结出以下计数简化技巧。 1. 忽略 ?(?) 中的常数项。因为它们都与 ? 无关,所以对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 /* 判断是否为空 */ boolean isEmpty = stack.isEmpty(); 5.1.2 栈的实现 为了深入了解栈的运行机制,我们来尝试自己实现一个栈类。 栈遵循先入后出的原则,因此我们只能在栈顶添加或删除元素。然而,数组和链表都可以在任意位置添加和 删除元素,因此栈可以视为一种受限制的数组或链表。换句话说,我们可以“屏蔽”数组或链表的部分无关 操作,使其对外表现的逻辑符合栈的特性。0 码力 | 376 页 | 17.59 MB | 1 年前3 Hello 算法 1.0.0 Java版”章节后再来复习。 那么,迭代和递归具有什么内在联系呢?以上述递归函数为例,求和操作在递归的“归”阶段进行。这意味 着最初被调用的函数实际上是最后完成其求和操作的,这种工作机制与栈的“先入后出”原则异曲同工。 事实上,“调用栈”和“栈帧空间”这类递归术语已经暗示了递归与栈之间的密切关系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 界。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以忽略。根据此原则,可以总结出以下计数简化技巧。 1. 忽略 ?(?) 中的常数项。因为它们都与 ? 无关,所以对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 /* 判断是否为空 */ boolean isEmpty = stack.isEmpty(); 5.1.2 栈的实现 为了深入了解栈的运行机制,我们来尝试自己实现一个栈类。 栈遵循先入后出的原则,因此我们只能在栈顶添加或删除元素。然而,数组和链表都可以在任意位置添加和 删除元素,因此栈可以视为一种受限制的数组或链表。换句话说,我们可以“屏蔽”数组或链表的部分无关 操作,使其对外表现的逻辑符合栈的特性。0 码力 | 376 页 | 17.59 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Java 版如果感觉以下内容理解困难,可以在读完“栈”章节后再来复习。 那么,迭代和递归具有什么内在联系呢?以上述递归函数为例,求和操作在递归的“归”阶段进行。这意味 着最初被调用的函数实际上是最后完成其求和操作的,这种工作机制与栈的“先入后出”原则异曲同工。 事实上,“调用栈”和“栈帧空间”这类递归术语已经暗示了递归与栈之间的密切关系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 界。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以忽略。根据此原则,可以总结出以下计数简化技巧。 1. 忽略 ?(?) 中的常数项。因为它们都与 ? 无关,所以对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 /* 判断是否为空 */ boolean isEmpty = stack.isEmpty(); 5.1.2 栈的实现 为了深入了解栈的运行机制,我们来尝试自己实现一个栈类。 栈遵循先入后出的原则,因此我们只能在栈顶添加或删除元素。然而,数组和链表都可以在任意位置添加和 删除元素,因此栈可以视为一种受限制的数组或链表。换句话说,我们可以“屏蔽”数组或链表的部分无关 操作,使其对外表现的逻辑符合栈的特性。0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Java 版如果感觉以下内容理解困难,可以在读完“栈”章节后再来复习。 那么,迭代和递归具有什么内在联系呢?以上述递归函数为例,求和操作在递归的“归”阶段进行。这意味 着最初被调用的函数实际上是最后完成其求和操作的,这种工作机制与栈的“先入后出”原则异曲同工。 事实上,“调用栈”和“栈帧空间”这类递归术语已经暗示了递归与栈之间的密切关系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 界。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以忽略。根据此原则,可以总结出以下计数简化技巧。 1. 忽略 ?(?) 中的常数项。因为它们都与 ? 无关,所以对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 /* 判断是否为空 */ boolean isEmpty = stack.isEmpty(); 5.1.2 栈的实现 为了深入了解栈的运行机制,我们来尝试自己实现一个栈类。 栈遵循先入后出的原则,因此我们只能在栈顶添加或删除元素。然而,数组和链表都可以在任意位置添加和 删除元素,因此栈可以视为一种受限制的数组或链表。换句话说,我们可以“屏蔽”数组或链表的部分无关 操作,使其对外表现的逻辑符合栈的特性。0 码力 | 379 页 | 18.48 MB | 10 月前3
 Hello 算法 1.0.0b5 Java版。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以被忽略。根据此原则,可以总结出以下计数简化技巧。 1. 忽略 ?(?) 中的常数项。因为它们都与 ? 无关,所以对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 /* 判断是否为空 */ boolean isEmpty = stack.isEmpty(); 5.1.2 栈的实现 为了深入了解栈的运行机制,我们来尝试自己实现一个栈类。 栈遵循先入后出的原则,因此我们只能在栈顶添加或删除元素。然而,数组和链表都可以在任意位置添加和 删除元素,因此栈可以被视为一种受限制的数组或链表。换句话说,我们可以“屏蔽”数组或链表的部分无 关操作,使其对外表现的逻辑符合栈的特性。 时,软件需要在栈底(即队首)执行删除操作。但栈无法实现该功能,此时就需要使用双向队列来替代栈。 请注意,“撤销”的核心逻辑仍然遵循栈的先入后出原则,只是双向队列能够更加灵活地实现一些额外逻辑。 5.4 小结 1. 重点回顾 ‧ 栈是一种遵循先入后出原则的数据结构,可通过数组或链表来实现。 ‧ 从时间效率角度看,栈的数组实现具有较高的平均效率,但在扩容过程中,单次入栈操作的时间复杂度 会降低至0 码力 | 376 页 | 30.69 MB | 1 年前3 Hello 算法 1.0.0b5 Java版。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以被忽略。根据此原则,可以总结出以下计数简化技巧。 1. 忽略 ?(?) 中的常数项。因为它们都与 ? 无关,所以对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 /* 判断是否为空 */ boolean isEmpty = stack.isEmpty(); 5.1.2 栈的实现 为了深入了解栈的运行机制,我们来尝试自己实现一个栈类。 栈遵循先入后出的原则,因此我们只能在栈顶添加或删除元素。然而,数组和链表都可以在任意位置添加和 删除元素,因此栈可以被视为一种受限制的数组或链表。换句话说,我们可以“屏蔽”数组或链表的部分无 关操作,使其对外表现的逻辑符合栈的特性。 时,软件需要在栈底(即队首)执行删除操作。但栈无法实现该功能,此时就需要使用双向队列来替代栈。 请注意,“撤销”的核心逻辑仍然遵循栈的先入后出原则,只是双向队列能够更加灵活地实现一些额外逻辑。 5.4 小结 1. 重点回顾 ‧ 栈是一种遵循先入后出原则的数据结构,可通过数组或链表来实现。 ‧ 从时间效率角度看,栈的数组实现具有较高的平均效率,但在扩容过程中,单次入栈操作的时间复杂度 会降低至0 码力 | 376 页 | 30.69 MB | 1 年前3
 《Java 应用与开发》课程讲义 - 王晓东属性 age; 2. 调用子类添加或者重写的方法时,方法中使用的是子类定义的属性 age; 3. 调用父类中定义的方法时,方法中使用的是父类中的属性 age; 4. 可以理解为“层次优先 就�原则”,在哪个层次中的代码,就优先使用该层次类 中定义的属性。不提倡使用同名属性。 4.4.3 关键字 super 在存在命名冲突(子类中存在方法重写或添加同名属性)的情况下,子类中的代 码将自 声明中的“ 《Java 应用与开发》课程讲义 - 王晓东属性 age; 2. 调用子类添加或者重写的方法时,方法中使用的是子类定义的属性 age; 3. 调用父类中定义的方法时,方法中使用的是父类中的属性 age; 4. 可以理解为“层次优先 就�原则”,在哪个层次中的代码,就优先使用该层次类 中定义的属性。不提倡使用同名属性。 4.4.3 关键字 super 在存在命名冲突(子类中存在方法重写或添加同名属性)的情况下,子类中的代 码将自 声明中的“- ”用于标明这是一个泛型方法。 • 类型 T 是可变的,不必显示的告知编译器 T 具体取何值,但出现多处(两个形 参、一个返回值类型)的这些值必须都相同。 使用泛型方法,而不是定义泛型类的原则 1. 不涉及到类中的其他方法时,则应将之定义为泛型方法,因为泛型方法的类型参 数是局部性的,这样可以简化其所在类型的声明和处理开销。 2. 要施加类型约束的方法为静态方法时,只能将之定义为泛型方法,因为静态方法 进行整体排序所需的比较逻辑,所为的排序可以理解为按照某种标准来比较对象的大 小以确定其次序。 • 实现类基于 compareTo() 方法的排序被称为自然排序。 • compareTo() 方法被称为它的自然比较方法,具体的排序原则可由实现类根据需 要而定。 方法格式如下: 1 int compareTo(Object o) { 2 } 使用 Comparable 接口实现自然排序 示例代码:Person.java 0 码力 | 330 页 | 6.54 MB | 1 年前3
 JAVA 应用与开发 - 泛型O 使用泛型方法,而不是定义泛型类的原则 1. 不���类�的���法时,������为�型�法,�为 �型�法的类型参数����的,���������类型的 ���处理��� 2. 要��类型��的�法为���法时,������为�型� 法,�为���法不������类的类型参数� 13 19 ��泛型�� O 使用泛型方法,而不是定义泛型类的原则 1. 不���类�的���法时,������为�型�法,�为0 码力 | 35 页 | 587.40 KB | 1 年前3 JAVA 应用与开发 - 泛型O 使用泛型方法,而不是定义泛型类的原则 1. 不���类�的���法时,������为�型�法,�为 �型�法的类型参数����的,���������类型的 ���处理��� 2. 要��类型��的�法为���法时,������为�型� 法,�为���法不������类的类型参数� 13 19 ��泛型�� O 使用泛型方法,而不是定义泛型类的原则 1. 不���类�的���法时,������为�型�法,�为0 码力 | 35 页 | 587.40 KB | 1 年前3
 Java 应用与开发 - 异常处理译时就会出错,而不会等到运行时才发生。 大纲 异常的概念及分类 Java 异常处理机制 ���� 异常的概念及分类 Java 异常处理机制 大纲 异常的概念及分类 Java 异常处理机制 Java 异常处理的原则 ▶ 返回到一个安全和已知的状态 ▶ 能够使用户执行其他的命令 ▶ 如果可能,则保存所有的工作 ▶ 如果有必要,可以退出以避免造成进一步的危害 大纲 异常的概念及分类 Java 异常处理机制 课程配套代码 ± sample.exception.ManualThrowExceptionSample.java 大纲 异常的概念及分类 Java 异常处理机制 人工抛出异常 O 选择人工抛出异常的原则 ▶ 当明确知道可能出错的地方或能够通过简单的检查而有效防 止错误发生,就应该使用 if-else 语句来预防错误发生。 ▶ 只有当我们无法明确知道错误发生之处或无法完全避免异 常,才不得不通过异常处理的方式来捕获和处理异常。0 码力 | 33 页 | 626.40 KB | 1 年前3 Java 应用与开发 - 异常处理译时就会出错,而不会等到运行时才发生。 大纲 异常的概念及分类 Java 异常处理机制 ���� 异常的概念及分类 Java 异常处理机制 大纲 异常的概念及分类 Java 异常处理机制 Java 异常处理的原则 ▶ 返回到一个安全和已知的状态 ▶ 能够使用户执行其他的命令 ▶ 如果可能,则保存所有的工作 ▶ 如果有必要,可以退出以避免造成进一步的危害 大纲 异常的概念及分类 Java 异常处理机制 课程配套代码 ± sample.exception.ManualThrowExceptionSample.java 大纲 异常的概念及分类 Java 异常处理机制 人工抛出异常 O 选择人工抛出异常的原则 ▶ 当明确知道可能出错的地方或能够通过简单的检查而有效防 止错误发生,就应该使用 if-else 语句来预防错误发生。 ▶ 只有当我们无法明确知道错误发生之处或无法完全避免异 常,才不得不通过异常处理的方式来捕获和处理异常。0 码力 | 33 页 | 626.40 KB | 1 年前3
 Nacos架构&原理
Nacos 开源之前在阿里内部已经发展了十年,沉淀了很多优秀的能力,也有很多历史负担,在开源 的时候我们取其精华进行开源,为了提升代码的健壮性和扩展性,进行了充分的分层和模块化设计。 设计原则  极简原则,简单才好用,简单才稳定,简单才易协作。  架构⼀致性,⼀套架构要能适应开源、内部、商业化(公有云及专有云)3 个场景。  扩展性,以开源为内核,商业化做基础,充分扩展,方便用户扩展。 Eureka、Zookeeper、Kubernetes 及 Consul 之 间的数据同步。 Nacos 架构 < 78 图 9 Nacos 的多数据中心方案 用户扩展性 在框架的设计中,扩展性是⼀个重要的设计原则。Spring、Dubbo、Ribbon 等框架都在用户扩展性 上做了比较好的设计。这些框架的扩展性往往由面向接口及动态类加载等技术,来运行用户扩展约 定的接口,实现用户自定义的逻辑。在 Server 的虚拟节点数,在所有的 Nacos Sync Server 上必须保持⼀致, 否则会导致⼀部分业务服务同步的时候会被遗漏。 Nacos Eureka Sync 落地实践 Nacos Eureka Sync 目标原则  注册中心迁移目标 1、过程并非⼀蹴而就的,业务服务逐步迁移的过程要保证线上调用不受影响,例如, A 业务服 务注册到 Eureka 上, B 业务服务迁移到 Nacos ,A 业务服务和0 码力 | 326 页 | 12.83 MB | 9 月前3 Nacos架构&原理
Nacos 开源之前在阿里内部已经发展了十年,沉淀了很多优秀的能力,也有很多历史负担,在开源 的时候我们取其精华进行开源,为了提升代码的健壮性和扩展性,进行了充分的分层和模块化设计。 设计原则  极简原则,简单才好用,简单才稳定,简单才易协作。  架构⼀致性,⼀套架构要能适应开源、内部、商业化(公有云及专有云)3 个场景。  扩展性,以开源为内核,商业化做基础,充分扩展,方便用户扩展。 Eureka、Zookeeper、Kubernetes 及 Consul 之 间的数据同步。 Nacos 架构 < 78 图 9 Nacos 的多数据中心方案 用户扩展性 在框架的设计中,扩展性是⼀个重要的设计原则。Spring、Dubbo、Ribbon 等框架都在用户扩展性 上做了比较好的设计。这些框架的扩展性往往由面向接口及动态类加载等技术,来运行用户扩展约 定的接口,实现用户自定义的逻辑。在 Server 的虚拟节点数,在所有的 Nacos Sync Server 上必须保持⼀致, 否则会导致⼀部分业务服务同步的时候会被遗漏。 Nacos Eureka Sync 落地实践 Nacos Eureka Sync 目标原则  注册中心迁移目标 1、过程并非⼀蹴而就的,业务服务逐步迁移的过程要保证线上调用不受影响,例如, A 业务服 务注册到 Eureka 上, B 业务服务迁移到 Nacos ,A 业务服务和0 码力 | 326 页 | 12.83 MB | 9 月前3
 Apache Shiro参考手册中文版getContextPath()的值来的。 Order Matters! URL 路径表达式按事先定义好的顺序判断传入的请求,并遵循 FIRST MATCH WINS 这一原则。例如,让我们假设有如下链的定义: /account/** = ssl, authc /account/signup = anon html(所有'anon'ymous 用 户都能访问),那么它将永不会被处理!原因是因为/account/**的模式第 一个匹配了传入的请求,“短路”了其余的定义。 始终记住基于 FIRST MATCH WINS 的原则定义你的过滤器链! Filter Chain Definitions 等号右边是逗号隔开的过滤器列表,用来执行匹配该路径的请求。它必须符合以下格式: filter1[optional_config1] 2. Subject 将在某点解除绑定,即使线程的执行结果是错误的。这将确保线程保持干净,并在 pooled/reusable 线 程环境中清除任何之前的 Subject 状态。 这些原则保证在上述三个机制中发生。接下来阐述它们的用法。 Automatic Association(自动关联) 如果你只需要一个 Subject 暂时与当前的线程相关联,同时你希望线程绑定和清理自动发生,Subject0 码力 | 92 页 | 1.16 MB | 1 年前3 Apache Shiro参考手册中文版getContextPath()的值来的。 Order Matters! URL 路径表达式按事先定义好的顺序判断传入的请求,并遵循 FIRST MATCH WINS 这一原则。例如,让我们假设有如下链的定义: /account/** = ssl, authc /account/signup = anon html(所有'anon'ymous 用 户都能访问),那么它将永不会被处理!原因是因为/account/**的模式第 一个匹配了传入的请求,“短路”了其余的定义。 始终记住基于 FIRST MATCH WINS 的原则定义你的过滤器链! Filter Chain Definitions 等号右边是逗号隔开的过滤器列表,用来执行匹配该路径的请求。它必须符合以下格式: filter1[optional_config1] 2. Subject 将在某点解除绑定,即使线程的执行结果是错误的。这将确保线程保持干净,并在 pooled/reusable 线 程环境中清除任何之前的 Subject 状态。 这些原则保证在上述三个机制中发生。接下来阐述它们的用法。 Automatic Association(自动关联) 如果你只需要一个 Subject 暂时与当前的线程相关联,同时你希望线程绑定和清理自动发生,Subject0 码力 | 92 页 | 1.16 MB | 1 年前3
共 154 条
- 1
- 2
- 3
- 4
- 5
- 6
- 16













