【项目难点】拦截器

uni.addInterceptor(STRING, OBJECT)
uni.removeInterceptor(STRING)
STRING就是拦截器要拦截的api的名称
在这里插入图片描述

下面写了一个请求拦截器和一个路由拦截器(代码应该放在项目的main.js入口文件中)
请求拦截器可以用来集中管理请求地址(写在invoke中,直接修改url),也可以实现一些比如如果请求失败,可以搞一个全局的网络错误弹框之类的功能

uni.addInterceptor('request', {
                  invoke(args) {
                    args.url = "http://localhost:8081"+args.url
                    args.header = 
                    {
                        'content-type': 'application/json' ,
                        'Cookie': uni.getStorageSync('cookieKey')?uni.getStorageSync('cookieKey'):''
                    }
                    console.log('invoked')
                  },
                  success(args) {
                    // 请求成功后,修改code值为1
                    args.data.code = 1
                    console.log("success->",args)
                  }, 
                  fail(err) {
                  }, 
                  complete(res) {
                    console.log('interceptor-complete',res)
                  }
                })

路由拦截器,主要用于实现导航守卫的功能,可以在每次跳转之前,验证一下身份,验证不成功跳转到登陆也。要注意需要设置一个相当于递归出口的地方,比如首页,不然会一直死循环。

uni.addInterceptor('navigateTo', {
                  invoke(args) {
                    console.log('invoke->',args.url)
                    if(args.url.search('pages/index/index')==-1){
                        if(false){
                            this.args.url = '/pages/index/index'
                        }
                    } 
                  },
                  success(args) {
                    console.log("success->",args)
                  }, 
                  fail(err) {
                      
                  }, 
                  complete(res) {
                    console.log('interceptor-complete',res)
                  }
                })
### Java面试常见项目难题及应对策略 #### 线程池拒绝策略的选择与实现 在线程池 `ThreadPoolExecutor` 中,已经包含四种处理策略。当线程池无法继续接收新任务时会触发这些策略: - **AbortPolicy**:直接丢弃任务,并抛出 `RejectedExecutionException` 异常,这也是线程池默认采用的策略[^1]。 - **CallerRunsPolicy**:在调用者线程中直接执行被拒绝任务的 `run` 方法,除非线程池已经关闭,则直接抛弃任务。 - **DiscardOldestPolicy**:抛弃进入队列最早的一个任务,即即将被执行的任务,然后尝试把这次拒绝的任务放入队列。 - **DiscardPolicy**:直接丢弃任务,不做任何处理。 除了上述四种标准策略外,还可以通过实现 `RejectedExecutionHandler` 接口来自定义适合特定应用场景的拒绝策略。这允许开发者根据具体的业务需求灵活调整行为模式。 对于复杂的应用场景,合理选择或定制化拒绝策略至关重要。错误的决策可能导致性能瓶颈甚至系统崩溃。因此,在设计阶段就需要充分考虑预期负载情况以及系统的容错能力等因素来决定最适合的方案。 ```java // 定制化的拒绝策略示例 public class CustomRejectPolicy implements RejectedExecutionHandler { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { // 实现自定义逻辑... } } ``` #### JAR包结构的理解及其优化 JAR 文件作为Java应用程序打包的一种方式,内部通常包含了编译后的`.class`文件以及其他资源文件。特别是在 Spring Boot 应用程序里,其生成的可执行 JAR 包具有特殊的目录布局,主要包括以下几个部分: - BOOT-INF/classes/: 存放应用本身的字节码和其他静态资源; - META-INF/ : 用于存储元数据信息如清单文件等; - org/springframework/boot/loader/* :负责启动过程中的加载机制[^2]。 理解并掌握如何构建高效的 JAR 包有助于提高部署效率和运行时表现。例如,可以利用依赖管理工具(Maven 或 Gradle)来进行模块划分、减少不必要的库引入从而减小最终产物体积;另外也可以探索分层架构的设计思路使得不同层次之间解耦更加彻底以便于维护升级。 #### 可用性和有效响应的概念区分 可用性是指服务能够持续稳定提供功能的能力。而关于什么构成一次有效的响应则涉及到更细致的标准——不仅限于成功返回结果给客户端,还包括确保该回应不会因为超时或其他异常状况而导致失败[^3]。即使某些情况下返回的数据并非最新版本但只要不影响后续操作流程就可以视为满足有效性要求。这种灵活性考量对于高并发环境下的分布式系统尤为重要因为它可以帮助缓解瞬态压力同时保持用户体验的一致性。 #### Web开发框架的工作原理剖析 以Spring MVC为例,整个HTTP请求处理链路如下所示: 1. 浏览器发起 HTTP 请求至服务器端; 2. DispatcherServlet (前端控制器) 拦截此请求; 3. 根据配置查找匹配 HandlerMapping (处理器映射器),进而定位到具体 Controller 处理函数; 4. 调用 Service 层完成核心业务逻辑运算并将结果封装成 ModelAndView 对象; 5. 利用 ViewResolver (视图解析器) 查找对应模板引擎进行页面渲染工作; 6. 渲染完毕后将最终 HTML 文档反馈回用户界面显示出来[^4]。 熟悉这一系列交互细节可以让工程师更好地调试问题所在位置并且针对性能瓶颈做出针对性改进措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值