 Nacos架构&原理
Nacos ⼀致性协议 28 Nacos 自研 Distro 协议 38 Nacos 通信通道 42 Nacos 寻址机制 56 Nacos 服务发现模块 63 Nacos 注册中心的设计原理 63 Nacos 注册中心服务数据模型 80 Nacos 健康检查机制 89 Nacos 配置管理模块 97 配置⼀致性模型 97 Nacos ⾼可⽤设计 100 Nacos 高可用设计 100 Nacos 1.1.2 升级 1.4.1 最佳实践 267 服务发现最佳实践 281 Eureka 平滑迁移 Nacos 方案 281 Nacos 打通 CMDB 实现就近访问 288 跨注册中心服务同步实践 298 配置管理最佳实践 310 Nacos 限流最佳实践 310 Nacos 无缝支持 confd 配置管理 320 结语 326 结语 326 作者 < 6 作者 李艳林(彦林) 吴援飘(草谷) 吴毅挺 任浩军 张波 王建伟(正己) 卿亮 许进 7 > 推荐序 推荐序 阿里巴巴合伙人 - 蒋江伟(小邪) 随着企业加速数字化升级,越来越多的系统架构采用了分布式的架构,主要目的是为了解决集中化 和互联网化所带来的架构扩展性和面对海量用户请求的技术挑战。这里面其中有⼀个关键点是软负 载。因为整个分布式架构需要有⼀个软负载来协作各个节点之间的服务在线离线状态、数据⼀致性、0 码力 | 326 页 | 12.83 MB | 9 月前3 Nacos架构&原理
Nacos ⼀致性协议 28 Nacos 自研 Distro 协议 38 Nacos 通信通道 42 Nacos 寻址机制 56 Nacos 服务发现模块 63 Nacos 注册中心的设计原理 63 Nacos 注册中心服务数据模型 80 Nacos 健康检查机制 89 Nacos 配置管理模块 97 配置⼀致性模型 97 Nacos ⾼可⽤设计 100 Nacos 高可用设计 100 Nacos 1.1.2 升级 1.4.1 最佳实践 267 服务发现最佳实践 281 Eureka 平滑迁移 Nacos 方案 281 Nacos 打通 CMDB 实现就近访问 288 跨注册中心服务同步实践 298 配置管理最佳实践 310 Nacos 限流最佳实践 310 Nacos 无缝支持 confd 配置管理 320 结语 326 结语 326 作者 < 6 作者 李艳林(彦林) 吴援飘(草谷) 吴毅挺 任浩军 张波 王建伟(正己) 卿亮 许进 7 > 推荐序 推荐序 阿里巴巴合伙人 - 蒋江伟(小邪) 随着企业加速数字化升级,越来越多的系统架构采用了分布式的架构,主要目的是为了解决集中化 和互联网化所带来的架构扩展性和面对海量用户请求的技术挑战。这里面其中有⼀个关键点是软负 载。因为整个分布式架构需要有⼀个软负载来协作各个节点之间的服务在线离线状态、数据⼀致性、0 码力 | 326 页 | 12.83 MB | 9 月前3
 Apache Shiro参考手册中文版和加密作为其目标。  Authentication:有时也简称为“登录”,这是一个证明用户是他们所说的他们是谁的行为。  Authorization:访问控制的过程,也就是绝对“谁”去访问“什么”。  Session Management:管理用户特定的会话,即使在非 Web 或 EJB 应用程序。  Cryptography:通过使用加密算法保持数据安全同时易于使用。 SecurityManager 是很有益处的。因此,在我们的教程应用程序中第一 件要做的事情就是配置 SecurityManager 实例。 Configuration 虽然我们能够直接实例化一个 SecurityManager 类,但 Shiro 的 SecurityManager 实现有足够的配置选项及内置组件 使得在 Java 源代码做这件事情变得较为痛苦——如果使用一个灵活的基于文本的配置格式来配置 实现来提取我们的 shiro.ini 文件,它位于 classpath 的根目录。该实现反 映了 Shiro 对工厂设计模式的支持。classpath: 前缀是一个资源定位符,用来告诉 shiro 去哪加载 ini 文件(其 他前缀,如 url:和 file:也同样被支持)。 2. factory.getInstance()方法被调用,它来解析 INI 文件并返回反映该配置的 SecurityManager0 码力 | 92 页 | 1.16 MB | 1 年前3 Apache Shiro参考手册中文版和加密作为其目标。  Authentication:有时也简称为“登录”,这是一个证明用户是他们所说的他们是谁的行为。  Authorization:访问控制的过程,也就是绝对“谁”去访问“什么”。  Session Management:管理用户特定的会话,即使在非 Web 或 EJB 应用程序。  Cryptography:通过使用加密算法保持数据安全同时易于使用。 SecurityManager 是很有益处的。因此,在我们的教程应用程序中第一 件要做的事情就是配置 SecurityManager 实例。 Configuration 虽然我们能够直接实例化一个 SecurityManager 类,但 Shiro 的 SecurityManager 实现有足够的配置选项及内置组件 使得在 Java 源代码做这件事情变得较为痛苦——如果使用一个灵活的基于文本的配置格式来配置 实现来提取我们的 shiro.ini 文件,它位于 classpath 的根目录。该实现反 映了 Shiro 对工厂设计模式的支持。classpath: 前缀是一个资源定位符,用来告诉 shiro 去哪加载 ini 文件(其 他前缀,如 url:和 file:也同样被支持)。 2. factory.getInstance()方法被调用,它来解析 INI 文件并返回反映该配置的 SecurityManager0 码力 | 92 页 | 1.16 MB | 1 年前3
 Apache Shiro 1.2.x Reference Manual 中文翻译次我们添加更多的代码之后,您可以运行 mvn compile exec:java 看到我们的变化的结果。 Enable Shiro 使用 使用 Shiro 要理解的第一件事情是 Shiro 几乎所有的事情都和一个中心组件 SecurityManager 有关,对于那些熟悉 Java security 的人请注意:这和 java.lang.SecurityManager 不是一回 事。 我们将在Architecture章节详细描述 SecurityManager,所以,在我们这个 示例程序中必须做的第一件事情是建立一个 SecurityManager 实例。 Configuration 配置 虽然我们可以直接对 SecurityManager 实例化,但在 Java 代码中对Shiro 的 SecurityManager 所须的选项和内部组件进行配置会让人感觉有点小痛苦--而将这些 SecurityManager 配置用一个灵活的配置文件实现就会简单地多。 Container),但如果环境中没有,比如在一个独立的程序或非 web 环 境中,它将使用它自己建立的 session 提供相同的作用,sessionDAO 用来使用任何数据源使 session 持久化。 SessionDAO(org.apache.shiro.session.mgt.eis.SessionDAO) SessionDAO 代表 SessionManager 执行 Session 持久(CRUD)动作,它允许任何存储的0 码力 | 196 页 | 2.34 MB | 1 年前3 Apache Shiro 1.2.x Reference Manual 中文翻译次我们添加更多的代码之后,您可以运行 mvn compile exec:java 看到我们的变化的结果。 Enable Shiro 使用 使用 Shiro 要理解的第一件事情是 Shiro 几乎所有的事情都和一个中心组件 SecurityManager 有关,对于那些熟悉 Java security 的人请注意:这和 java.lang.SecurityManager 不是一回 事。 我们将在Architecture章节详细描述 SecurityManager,所以,在我们这个 示例程序中必须做的第一件事情是建立一个 SecurityManager 实例。 Configuration 配置 虽然我们可以直接对 SecurityManager 实例化,但在 Java 代码中对Shiro 的 SecurityManager 所须的选项和内部组件进行配置会让人感觉有点小痛苦--而将这些 SecurityManager 配置用一个灵活的配置文件实现就会简单地多。 Container),但如果环境中没有,比如在一个独立的程序或非 web 环 境中,它将使用它自己建立的 session 提供相同的作用,sessionDAO 用来使用任何数据源使 session 持久化。 SessionDAO(org.apache.shiro.session.mgt.eis.SessionDAO) SessionDAO 代表 SessionManager 执行 Session 持久(CRUD)动作,它允许任何存储的0 码力 | 196 页 | 2.34 MB | 1 年前3
 Linux Docker Mess开发了Emacs、gcc、 bash shell Linus Torvalds Linux之父 This man is Linus Torvalds. 2012年6月14日,由阿尔托大学奥塔涅 米创业中心(ACE)主办的Aalto Talk节目 邀请到了Linux系统创始人Linus Torvalds,与观众进行互动交流。Linus 期间非常出人意料地对NVIDIA爆出了粗 口。 FOAAS x-0.11入手,推荐Linux内核完全注释 (赵炯著) Architecture Shell n 系统的用户界面 n 提供用户与内核进行交互操作的一种接口 n 接收用户输入的命令并把它送入内核去执行 n Shell具备可编程特性 n 主要的Shell版本 n Bourne [bɔ:n] Shell,贝尔实验室开发 n BASH,GNU的Bourne Again Shell,基本默认 n Korn Architecture Shell n 暂停和恢复进程 n command& 让进程在后台运行 n jobs 查看后台运行的进程 n fg n 让后台运行的进程n到前台来 n bg n 让进程n到后台去 n ctrl+z 可以将一个正在前台执行的命令放到后台,并且暂停 Architecture Shell Scripts #!/bin/bash echo "Hello World!" n "#0 码力 | 77 页 | 7.40 MB | 1 年前3 Linux Docker Mess开发了Emacs、gcc、 bash shell Linus Torvalds Linux之父 This man is Linus Torvalds. 2012年6月14日,由阿尔托大学奥塔涅 米创业中心(ACE)主办的Aalto Talk节目 邀请到了Linux系统创始人Linus Torvalds,与观众进行互动交流。Linus 期间非常出人意料地对NVIDIA爆出了粗 口。 FOAAS x-0.11入手,推荐Linux内核完全注释 (赵炯著) Architecture Shell n 系统的用户界面 n 提供用户与内核进行交互操作的一种接口 n 接收用户输入的命令并把它送入内核去执行 n Shell具备可编程特性 n 主要的Shell版本 n Bourne [bɔ:n] Shell,贝尔实验室开发 n BASH,GNU的Bourne Again Shell,基本默认 n Korn Architecture Shell n 暂停和恢复进程 n command& 让进程在后台运行 n jobs 查看后台运行的进程 n fg n 让后台运行的进程n到前台来 n bg n 让进程n到后台去 n ctrl+z 可以将一个正在前台执行的命令放到后台,并且暂停 Architecture Shell Scripts #!/bin/bash echo "Hello World!" n "#0 码力 | 77 页 | 7.40 MB | 1 年前3
 《Java 应用与开发》课程讲义 - 王晓东22 3.2.1 创建数组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2.2 一维数组的初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.3 二维数组 . . . . . . . . . . . . . . . . . . . . . 51 5.2.2 调用重载的构造方法 . . . . . . . . . . . . . . . . . . . . . . . . . . 51 5.2.3 对象构造/初始化细节 . . . . . . . . . . . . . . . . . . . . . . . . . . 53 5.3 关键字 static . . . . . . . . . . . . . . . . . 53 5.3.1 static 属性和方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 5.3.2 初始化块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 5.3.3 静态导入 . . . . . . . . .0 码力 | 330 页 | 6.54 MB | 1 年前3 《Java 应用与开发》课程讲义 - 王晓东22 3.2.1 创建数组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2.2 一维数组的初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.3 二维数组 . . . . . . . . . . . . . . . . . . . . . 51 5.2.2 调用重载的构造方法 . . . . . . . . . . . . . . . . . . . . . . . . . . 51 5.2.3 对象构造/初始化细节 . . . . . . . . . . . . . . . . . . . . . . . . . . 53 5.3 关键字 static . . . . . . . . . . . . . . . . . 53 5.3.1 static 属性和方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 5.3.2 初始化块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 5.3.3 静态导入 . . . . . . . . .0 码力 | 330 页 | 6.54 MB | 1 年前3
 跟我学Shiro - 张开涛...................................................................................... 95 会话存储/持久化 ................................................................................................... ,如密码加密存储到数据库,而不是明文存储; Web Support:Web 支持,可以非常容易的集成到 Web 环境; Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以 跟我学 Shiro——http://jinnianshilongnian.iteye.com/ 6 提高效率; Concurrency:shiro 支持多线程应用 他们允许)的身份进行访问; Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录 了。 记住一点,Shiro 不会去维护用户、维护权限;这些需要我们自己去设计/提供;然后通过 相应的接口注入给 Shiro 即可。 接下来我们分别从外部和内部来看看 Shiro 的架构,对于一个好的框架,从外部来看应该 具有非常简单易于使用的 API,且 API0 码力 | 219 页 | 4.16 MB | 10 月前3 跟我学Shiro - 张开涛...................................................................................... 95 会话存储/持久化 ................................................................................................... ,如密码加密存储到数据库,而不是明文存储; Web Support:Web 支持,可以非常容易的集成到 Web 环境; Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以 跟我学 Shiro——http://jinnianshilongnian.iteye.com/ 6 提高效率; Concurrency:shiro 支持多线程应用 他们允许)的身份进行访问; Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录 了。 记住一点,Shiro 不会去维护用户、维护权限;这些需要我们自己去设计/提供;然后通过 相应的接口注入给 Shiro 即可。 接下来我们分别从外部和内部来看看 Shiro 的架构,对于一个好的框架,从外部来看应该 具有非常简单易于使用的 API,且 API0 码力 | 219 页 | 4.16 MB | 10 月前3
 Java 应用与开发 - 线程编程线程的概念模型 创建线程 后台线程 线程控制 线程生命的周期 线程优先级 线程串行化 线程休眠 线程让步 线程挂起与恢复 线程等待与通知 线程的同步 大纲 线程基础 线程控制 线程的同步 ���� 线程基础 相关知识回顾 线程的概念模型 创建线程 后台线程 线程控制 线程生命的周期 线程优先级 线程串行化 线程休眠 线程让步 线程挂起与恢复 线程等待与通知 线程的同步 大纲 线程基础 线程的概念模型 创建线程 后台线程 线程控制 线程生命的周期 线程优先级 线程串行化 线程休眠 线程让步 线程挂起与恢复 线程等待与通知 线程的同步 大纲 线程基础 线程控制 线程的同步 相关知识回顾 概念回顾 O 任务调度 ▶ 大部分操作系统的任务调度是采用时间片轮转的抢占式调度 方式,一个任务执行一小段时间后强制暂停去执行下一个任 务,每个任务轮流执行。 ▶ CPU 的执行效率非常高,时间片非常短,在各个任务之间 户线程的映射 大纲 线程基础 线程控制 线程的同步 线程的概念模型 ���� 线程基础 相关知识回顾 线程的概念模型 创建线程 后台线程 线程控制 线程生命的周期 线程优先级 线程串行化 线程休眠 线程让步 线程挂起与恢复 线程等待与通知 线程的同步 大纲 线程基础 线程控制 线程的同步 线程的概念模型 Java 线程的概念模型 在 Java 语言中,多线程的机制通过虚拟 CPU0 码力 | 82 页 | 1010.73 KB | 1 年前3 Java 应用与开发 - 线程编程线程的概念模型 创建线程 后台线程 线程控制 线程生命的周期 线程优先级 线程串行化 线程休眠 线程让步 线程挂起与恢复 线程等待与通知 线程的同步 大纲 线程基础 线程控制 线程的同步 ���� 线程基础 相关知识回顾 线程的概念模型 创建线程 后台线程 线程控制 线程生命的周期 线程优先级 线程串行化 线程休眠 线程让步 线程挂起与恢复 线程等待与通知 线程的同步 大纲 线程基础 线程的概念模型 创建线程 后台线程 线程控制 线程生命的周期 线程优先级 线程串行化 线程休眠 线程让步 线程挂起与恢复 线程等待与通知 线程的同步 大纲 线程基础 线程控制 线程的同步 相关知识回顾 概念回顾 O 任务调度 ▶ 大部分操作系统的任务调度是采用时间片轮转的抢占式调度 方式,一个任务执行一小段时间后强制暂停去执行下一个任 务,每个任务轮流执行。 ▶ CPU 的执行效率非常高,时间片非常短,在各个任务之间 户线程的映射 大纲 线程基础 线程控制 线程的同步 线程的概念模型 ���� 线程基础 相关知识回顾 线程的概念模型 创建线程 后台线程 线程控制 线程生命的周期 线程优先级 线程串行化 线程休眠 线程让步 线程挂起与恢复 线程等待与通知 线程的同步 大纲 线程基础 线程控制 线程的同步 线程的概念模型 Java 线程的概念模型 在 Java 语言中,多线程的机制通过虚拟 CPU0 码力 | 82 页 | 1010.73 KB | 1 年前3
 Java 应用与开发 - MVC 和框架初步可读性非常差。一个 JSP 文件有时候会变成几十 K,甚至 上百 K,经常难以定位逻辑代码的所在。 2. 编写代码时非常困惑,不知道代码到底应该写在哪里,也不 知道别人是不是已经曾经实现过类似的功能,到哪里去引用。 3. 突然之间,某个需求发生了变化。于是,每个人蒙头开始全 程替换,还要小心翼翼的,生怕把别人的逻辑改了。 4. 逻辑处理程序需要自己来维护生命周期,对于类似数据库事 务、日志等众多模块无法统一支持。 可读性非常差。一个 JSP 文件有时候会变成几十 K,甚至 上百 K,经常难以定位逻辑代码的所在。 2. 编写代码时非常困惑,不知道代码到底应该写在哪里,也不 知道别人是不是已经曾经实现过类似的功能,到哪里去引用。 3. 突然之间,某个需求发生了变化。于是,每个人蒙头开始全 程替换,还要小心翼翼的,生怕把别人的逻辑改了。 4. 逻辑处理程序需要自己来维护生命周期,对于类似数据库事 务、日志等众多模块无法统一支持。 可读性非常差。一个 JSP 文件有时候会变成几十 K,甚至 上百 K,经常难以定位逻辑代码的所在。 2. 编写代码时非常困惑,不知道代码到底应该写在哪里,也不 知道别人是不是已经曾经实现过类似的功能,到哪里去引用。 3. 突然之间,某个需求发生了变化。于是,每个人蒙头开始全 程替换,还要小心翼翼的,生怕把别人的逻辑改了。 4. 逻辑处理程序需要自己来维护生命周期,对于类似数据库事 务、日志等众多模块无法统一支持。0 码力 | 51 页 | 837.26 KB | 1 年前3 Java 应用与开发 - MVC 和框架初步可读性非常差。一个 JSP 文件有时候会变成几十 K,甚至 上百 K,经常难以定位逻辑代码的所在。 2. 编写代码时非常困惑,不知道代码到底应该写在哪里,也不 知道别人是不是已经曾经实现过类似的功能,到哪里去引用。 3. 突然之间,某个需求发生了变化。于是,每个人蒙头开始全 程替换,还要小心翼翼的,生怕把别人的逻辑改了。 4. 逻辑处理程序需要自己来维护生命周期,对于类似数据库事 务、日志等众多模块无法统一支持。 可读性非常差。一个 JSP 文件有时候会变成几十 K,甚至 上百 K,经常难以定位逻辑代码的所在。 2. 编写代码时非常困惑,不知道代码到底应该写在哪里,也不 知道别人是不是已经曾经实现过类似的功能,到哪里去引用。 3. 突然之间,某个需求发生了变化。于是,每个人蒙头开始全 程替换,还要小心翼翼的,生怕把别人的逻辑改了。 4. 逻辑处理程序需要自己来维护生命周期,对于类似数据库事 务、日志等众多模块无法统一支持。 可读性非常差。一个 JSP 文件有时候会变成几十 K,甚至 上百 K,经常难以定位逻辑代码的所在。 2. 编写代码时非常困惑,不知道代码到底应该写在哪里,也不 知道别人是不是已经曾经实现过类似的功能,到哪里去引用。 3. 突然之间,某个需求发生了变化。于是,每个人蒙头开始全 程替换,还要小心翼翼的,生怕把别人的逻辑改了。 4. 逻辑处理程序需要自己来维护生命周期,对于类似数据库事 务、日志等众多模块无法统一支持。0 码力 | 51 页 | 837.26 KB | 1 年前3
 Hello 算法 1.2.0 繁体中文 Java 版——鄧俊輝,清華大學計算機系教授 “如果我當年學資料結構與演算法時有《Hello 演算法》,學起來應該會簡單 10 倍!” ——李沐,亞馬遜資深首席科學家 電腦的出現為世界帶來了巨大的變革,它憑藉高速的運算能力與卓越的可程式化特性,成為執行演算法 與處理資料的理想媒介。無論是電玩遊戲的逼真畫面、自動駕駛的智慧決策,還是 AlphaGo 的精彩棋局、 ChatGPT 的自然互動,這些應用都是演算法在電腦上的精妙演繹。 10.3 二分搜尋邊界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 10.4 雜湊最佳化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 10.5 重識搜尋演算法 . . . . 標題註釋,用於標註函式、類別、測試樣例等 */ // 內容註釋,用於詳解程式碼 /** * 多行 * 註釋 */ 0.2.2 在動畫圖解中高效學習 相較於文字,影片和圖片具有更高的資訊密度和結構化程度,更易於理解。在本書中,重點和難點知識將主 要透過動畫以圖解形式展示,而文字則作為解釋與補充。 如果你在閱讀本書時,發現某段內容提供瞭如圖 0‑2 所示的動畫圖解,請以圖為主、以文字為輔,綜合兩者0 码力 | 379 页 | 18.79 MB | 10 月前3 Hello 算法 1.2.0 繁体中文 Java 版——鄧俊輝,清華大學計算機系教授 “如果我當年學資料結構與演算法時有《Hello 演算法》,學起來應該會簡單 10 倍!” ——李沐,亞馬遜資深首席科學家 電腦的出現為世界帶來了巨大的變革,它憑藉高速的運算能力與卓越的可程式化特性,成為執行演算法 與處理資料的理想媒介。無論是電玩遊戲的逼真畫面、自動駕駛的智慧決策,還是 AlphaGo 的精彩棋局、 ChatGPT 的自然互動,這些應用都是演算法在電腦上的精妙演繹。 10.3 二分搜尋邊界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 10.4 雜湊最佳化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 10.5 重識搜尋演算法 . . . . 標題註釋,用於標註函式、類別、測試樣例等 */ // 內容註釋,用於詳解程式碼 /** * 多行 * 註釋 */ 0.2.2 在動畫圖解中高效學習 相較於文字,影片和圖片具有更高的資訊密度和結構化程度,更易於理解。在本書中,重點和難點知識將主 要透過動畫以圖解形式展示,而文字則作為解釋與補充。 如果你在閱讀本書時,發現某段內容提供瞭如圖 0‑2 所示的動畫圖解,請以圖為主、以文字為輔,綜合兩者0 码力 | 379 页 | 18.79 MB | 10 月前3
 基于 Java EE 的企业应用系统设计 - Spring MVC 01读性非常差。一个 JSP 文件有时候会变成几十 K,甚至上百 K,经常难以定位逻辑代码的所在。 2. 编写代码时非常困惑,不知道代码到底应该写在哪里,也不 知道别人是不是已经曾经实现过类似的功能,到哪里去引 用。 3. 突然之间,某个需求发生了变化。于是,每个人蒙头开始全 程替换,还要小心翼翼的,生怕把别人的逻辑改了。 4. 逻辑处理程序需要自己来维护生命周期,对于类似数据库事 务、日志等众多模块无法统一支持。 读性非常差。一个 JSP 文件有时候会变成几十 K,甚至上百 K,经常难以定位逻辑代码的所在。 2. 编写代码时非常困惑,不知道代码到底应该写在哪里,也不 知道别人是不是已经曾经实现过类似的功能,到哪里去引 用。 3. 突然之间,某个需求发生了变化。于是,每个人蒙头开始全 程替换,还要小心翼翼的,生怕把别人的逻辑改了。 4. 逻辑处理程序需要自己来维护生命周期,对于类似数据库事 务、日志等众多模块无法统一支持。 读性非常差。一个 JSP 文件有时候会变成几十 K,甚至上百 K,经常难以定位逻辑代码的所在。 2. 编写代码时非常困惑,不知道代码到底应该写在哪里,也不 知道别人是不是已经曾经实现过类似的功能,到哪里去引 用。 3. 突然之间,某个需求发生了变化。于是,每个人蒙头开始全 程替换,还要小心翼翼的,生怕把别人的逻辑改了。 4. 逻辑处理程序需要自己来维护生命周期,对于类似数据库事 务、日志等众多模块无法统一支持。0 码力 | 67 页 | 792.43 KB | 1 年前3 基于 Java EE 的企业应用系统设计 - Spring MVC 01读性非常差。一个 JSP 文件有时候会变成几十 K,甚至上百 K,经常难以定位逻辑代码的所在。 2. 编写代码时非常困惑,不知道代码到底应该写在哪里,也不 知道别人是不是已经曾经实现过类似的功能,到哪里去引 用。 3. 突然之间,某个需求发生了变化。于是,每个人蒙头开始全 程替换,还要小心翼翼的,生怕把别人的逻辑改了。 4. 逻辑处理程序需要自己来维护生命周期,对于类似数据库事 务、日志等众多模块无法统一支持。 读性非常差。一个 JSP 文件有时候会变成几十 K,甚至上百 K,经常难以定位逻辑代码的所在。 2. 编写代码时非常困惑,不知道代码到底应该写在哪里,也不 知道别人是不是已经曾经实现过类似的功能,到哪里去引 用。 3. 突然之间,某个需求发生了变化。于是,每个人蒙头开始全 程替换,还要小心翼翼的,生怕把别人的逻辑改了。 4. 逻辑处理程序需要自己来维护生命周期,对于类似数据库事 务、日志等众多模块无法统一支持。 读性非常差。一个 JSP 文件有时候会变成几十 K,甚至上百 K,经常难以定位逻辑代码的所在。 2. 编写代码时非常困惑,不知道代码到底应该写在哪里,也不 知道别人是不是已经曾经实现过类似的功能,到哪里去引 用。 3. 突然之间,某个需求发生了变化。于是,每个人蒙头开始全 程替换,还要小心翼翼的,生怕把别人的逻辑改了。 4. 逻辑处理程序需要自己来维护生命周期,对于类似数据库事 务、日志等众多模块无法统一支持。0 码力 | 67 页 | 792.43 KB | 1 年前3
共 38 条
- 1
- 2
- 3
- 4













