同事用策略模式把if else优化了,技术总监:能不能想好了再改?

前端vue经典面试题78道(重点详细简洁) 主要就是为了解耦,提高代码复用率。页面上可以复用的都称之为组件它是HTML、CSS、JS的聚合体。组件就相当于库,把一些能在项目里或者不同项目里可以复用的代码进行需求性的封装。组件中的data为什么是一个函数?让每个返回的实例都可以维护一份被返回对象的独立的拷贝。在solt组件中有自己的data,把它传给使用的地方vuex是一个专门为vue构建的状态管理工具,主要是为了解决多组间之间状态共享问题。强调的是集中式管理,(组件与组件之间的关系变成了组件与仓库之间的关系)场景。... 阅读详情

我想大家肯定都或多或少的看过各种“策略模式”的讲解、布道等等,这篇文章就是来好好“澄清”一下策略模式,并尝试回答以下的问题:

  1. 策略模式是如何优化业务逻辑代码结构的?
  2. 杀鸡焉用宰牛刀?就是几个if else场景我需要用到策略模式?!
  3. 有没有什么更好的代码结构来实现策略模式的吗?

策略模式是如何优化业务逻辑代码结构的?

要回答这个问题,我们还得先扒一扒策略模式的定义,从定义着手来理解它

策略模式的教科书定义

它的定义很精简:一个类的行为或其算法可以在运行时更改。我们把它降维到代码层面,用人话翻译一下就是,运行时我给你这个类的方法传不同的“key”,你这个方法会执行不同的业务逻辑。细品一下,这不就是 if else 干的事吗?

策略模式优化了什么?

其实策略模式的核心思想和 if else如出一辙,根据不同的key动态的找到不同的业务逻辑,那它就只是如此吗?

实际上,我们口中的策略模式其实就是在代码结构上调整,用接口+实现类+分派逻辑来使代码结构可维护性好点。

一般教科书上讲解到接口与实现类就结束了,其他博客上会带上提及分派逻辑。这里就不啰嗦了。

小结一下,即使用了策略模式,你该写的业务逻辑照常写,到逻辑分派的时候,还是变相的if else。而它的优化点是抽象了出了接口,将业务逻辑封装成一个一个的实现类,任意地替换。在复杂场景(业务逻辑较多)时比直接 if else 来的好维护些。

杀鸡焉用宰牛刀?就是几个if else场景我需要用到策略模式?!

我想小伙伴们经常有这样的不满,我的业务逻辑就3 4 行,你给我整一大堆类定义?有必要这么麻烦吗?我看具体的业务逻辑还需要去不同的类中,简单点行不行。

其实我们所不满的就是策略模式带来的缺点:

1、策略类会增多 2、业务逻辑分散到各个实现类中,而且没有一个地方可以俯视整个业务逻辑

针对传统策略模式的缺点,在这分享一个实现思路,这个思路已经帮我们团队解决了多个复杂if else的业务场景,理解上比较容易,代码上需要用到Java8的特性——利用Map与函数式接口来实现。

直接show代码结构:为了简单演示一个思路,代码用String 类型来模拟一个业务BO

其中: 1. getCheckResult() 为传统的做法 2. getCheckResultSuper()则事先在Map中定义好了“判断条件”与“业务逻辑”的映射关系,具体讲解请看代码注释

/**
 * 某个业务服务类
 */
@Service
public class BizService {

    /**
     * 传统的 if else 解决方法
     * 当每个业务逻辑有 3 4 行时,用传统的策略模式不值得,直接的if else又显得不易读
     */
    public String getCheckResult(String order) {
        if ("校验1".equals(order)) {
            return "执行业务逻辑1";
        } else if ("校验2".equals(order)) {
            return "执行业务逻辑2";
        }else if ("校验3".equals(order)) {
            return "执行业务逻辑3";
        }else if ("校验4".equals(order)) {
            return "执行业务逻辑4";
        }else if ("校验5".equals(order)) {
            return "执行业务逻辑5";
        }else if ("校验6".equals(order)) {
            return "执行业务逻辑6";
        }else if ("校验7".equals(order)) {
            return "执行业务逻辑7";
        }else if ("校验8".equals(order)) {
            return "执行业务逻辑8";
        }else if ("校验9".equals(order)) {
            return "执行业务逻辑9";
        }
        return "不在处理的逻辑中返回业务错误";
    }

    /**
     * 业务逻辑分派Map
     * Function为函数式接口,下面代码中 Function<String, String> 的含义是接收一个Stirng类型的变量,返回一个String类型的结果
     */
    private Map<String, Function<String, String>> checkResultDispatcher = new HashMap<>();

    /**
     * 初始化 业务逻辑分派Map 其中value 存放的是 lambda表达式
     */
    @PostConstruct
    public void checkResultDispatcherInit() {
        checkResultDispatcher.put("校验1", order -> String.format("对%s执行业务逻辑1", order));
        checkResultDispatcher.put("校验2", order -> String.format("对%s执行业务逻辑2", order));
        checkResultDispatcher.put("校验3", order -> String.format("对%s执行业务逻辑3", order));
        checkResultDispatcher.put("校验4", order -> String.format("对%s执行业务逻辑4", order));
        checkResultDispatcher.put("校验5", order -> String.format("对%s执行业务逻辑5", order));
        checkResultDispatcher.put("校验6", order -> String.format("对%s执行业务逻辑6", order));
        checkResultDispatcher.put("校验7", order -> String.format("对%s执行业务逻辑7", order));
        checkResultDispatcher.put("校验8", order -> String.format("对%s执行业务逻辑8", order));
        checkResultDispatcher.put("校验9", order -> String.format("对%s执行业务逻辑9", order));
    }

    public String getCheckResultSuper(String order) {
        //从逻辑分派Dispatcher中获得业务逻辑代码,result变量是一段lambda表达式
        Function<String, String> result = checkResultDispatcher.get(order);
        if (result != null) {
            //执行这段表达式获得String类型的结果
            return result.apply(order);
        }
        return "不在处理的逻辑中返回业务错误";
    }
}

通过http调用一下看看效果:

/**
 * 模拟一次http调用
 */
@RestController
public class BizController {

    @Autowired
    private BizService bizService;

    @PostMapping("/v1/biz/testSuper")
    public String test2(String order) {
        return bizService.getCheckResultSuper(order);
    }
}

这是个简单的demo演示,之后会举一些复杂的场景案例。

鲁迅曾说过,“每解决一个问题,就会因出更多的问题”。我们一起来看看这样的实现有什么好处,会带来什么问题。

好处很直观:

  1. 在一段代码里直观的看到"判断条件"与业务逻辑的映射关系
  2. 不需要单独定义接口与实现类,直接使用现有的函数式接口(什么?不知道函数式接口?快去了解),而实现类直接就是业务代码本身。

不好的点: 1. 需要团队成员对lambda表达式有所了解(什么?Java14都出来了还有没用上Java8新特性的小伙伴?)

接下来我举几个在业务中经常遇到的if else场景,并用Map+函数式接口的方式来解决它

在真实业务场景问题的解决思路

有的小伙伴会说,我的判断条件有多个啊,而且很复杂,你之前举个例子只有单个判断逻辑,而我有多个判断逻辑该怎么办呢?

很好解决:写一个判断逻辑的方法,Map的key由方法计算出

/**
 * 某个业务服务类
 */
@Service
public class BizService {

    private Map<String, Function<String, String>> checkResultDispatcherMuti = new HashMap<>();

    /**
     * 初始化 业务逻辑分派Map 其中value 存放的是 lambda表达式
     */
    @PostConstruct
    public void checkResultDispatcherMuitInit() {
        checkResultDispatcherMuti.put("key_订单1", order -> String.format("对%s执行业务逻辑1", order));
        checkResultDispatcherMuti.put("key_订单1_订单2", order -> String.format("对%s执行业务逻辑2", order));
        checkResultDispatcherMuti.put("key_订单1_订单2_订单3", order -> String.format("对%s执行业务逻辑3", order));
    }

    public String getCheckResultMuti(String order, int level) {
        //写一段生成key的逻辑:
        String ley = getDispatcherKey(order, level);

        Function<String, String> result = checkResultDispatcherMuti.get(ley);
        if (result != null) {
            //执行这段表达式获得String类型的结果
            return result.apply(order);
        }
        return "不在处理的逻辑中返回业务错误";
    }

    /**
     * 判断条件方法
     */
    private String getDispatcherKey(String order, int level) {
        StringBuilder key = new StringBuilder("key");
        for (int i = 1; i <= level; i++) {
            key.append("_" + order + i);
        }
        return key.toString();
    }
}

用http模拟一下:

/**
 * 模拟一次http调用
 */
@RestController
public class BizController {

    @Autowired
    private BizService bizService;

    @PostMapping("/v1/biz/testMuti")
    public String test1(String order, Integer level) {
        return bizService.getCheckResultMuti(order, level);
    }
}

只要设计好你的key的生成规则就好。

还有小伙伴会问:我的业务逻辑有很多很多行,在
checkResultDispatcherMuitInit()方法的Map中直接写不会很长吗?

直接写当然长了,我们可以抽象出一个service服务专门放业务逻辑,然后在定义中调用它就好了:

提供一个业务逻辑单元:

/**
 * 提供业务逻辑单元
 */
@Service
public class BizUnitService {

    public String bizOne(String order) {
        return order + "各种花式操作1";
    }
    public String bizTwo(String order) {
        return order + "各种花式操作2";
    }
    public String bizThree(String order) {
        return order + "各种花式操作3";
    }
}
/**
 * 某个业务服务类
 */
@Service
public class BizService {
    @Autowired
    private BizUnitService bizUnitService;

    private Map<String, Function<String, String>> checkResultDispatcherComX = new HashMap<>();

    /**
     * 初始化 业务逻辑分派Map 其中value 存放的是 lambda表达式
     */
    @PostConstruct
    public void checkResultDispatcherComXInit() {
        checkResultDispatcherComX.put("key_订单1", order -> bizUnitService.bizOne(order));
        checkResultDispatcherComX.put("key_订单1_订单2", order -> bizUnitService.bizTwo(order));
        checkResultDispatcherComX.put("key_订单1_订单2_订单3", order -> bizUnitService.bizThree(order));
    }

    public String getCheckResultComX(String order, int level) {
        //写一段生成key的逻辑:
        String ley = getDispatcherComXKey(order, level);

        Function<String, String> result = checkResultDispatcherComX.get(ley);
        if (result != null) {
            //执行这段表达式获得String类型的结果
            return result.apply(order);
        }
        return "不在处理的逻辑中返回业务错误";
    }

    /**
     * 判断条件方法
     */
    private String getDispatcherComXKey(String order, int level) {
        StringBuilder key = new StringBuilder("key");
        for (int i = 1; i <= level; i++) {
            key.append("_" + order + i);
        }
        return key.toString();
    }
}

调用结果:

总结

最后,我们一起尝试回答以下几个问题: 1. 策略模式是如何优化业务逻辑代码结构的?

抽象了出了接口,将业务逻辑封装成一个一个的实现类,任意地替换。在复杂场景(业务逻辑较多)时比直接 if else 来的好维护些。

  1. 杀鸡焉用宰牛刀?就是几个if else场景我需要用到策略模式?!

我们所不满的其实就是传统接口实现的缺点: 1、策略类会很多。 2、业务逻辑分散到各个实现类中,而且没有一个地方可以俯览整个业务逻辑

  1. 有没有什么更好的代码结构来实现策略模式的吗?

针对传统策略模式的缺点,分享了利用Map与函数式接口来实现的思路。

测试工程师的生存跃迁:从执行者到质量架构师 软件测试正经历从手工验证到智能质量保障的根本性演进。随着自动化覆盖率提升、质量左移成为标配、可观测性与风控合规深度嵌入研发流程,传统功能测试的价值边界持续收窄。测试工程师的核心能力已转向技术纵深(如Prometheus配置、契约测试设计)、业务宽度(如监管条款映射、商业指标归因)与组织影响力(如质量门禁共建、缺陷预防布道)。本文聚焦测试职业存续的关键转折点,结合AI辅助探索、混沌工程、质量数据建模等真实技术实践,解析如何将‘找Bug’升级为‘定义质量’——这不仅是岗位升级路径,更是质量保障体系在云原生与强监 阅读详情

相关推荐

GPT-5.4驱动的AI原生量化交易:TradingAgents框架实战解析

量化交易正从规则驱动迈向AI原生决策,其核心在于将非结构化金融语义(如财报、新闻、公告)转化为可执行策略逻辑。这依赖于大模型的因果推理能力与开源框架的工程闭环——TradingAgents作为智能体调度中枢,集成轻量化金融专用模型GPT-5.4,实现自然语言指令到Backtrader策略代码的自动编译;配合Lean仿真引擎与DataJuicer多模态数据治理层,构建‘意图→生成→验证→供给’全链路。技术价值在于弥合策略构想与代码实现的鸿沟、提升事件驱动型决策的鲁棒性,并满足监管对可解释性与审计留痕的刚性要求

391

web应用开发相关技术,HTML如何添加锚点

我想大家肯定都或多或少的看过各种“策略模式”的讲解、布道等等,这篇文章就是来好好“澄清”一下策略模式,并尝试回答以下的问题: 1. 策略模式是如何优化业务逻辑代码结构的? 2. 杀鸡焉用宰牛刀?就是几个if else场景我需要用到策略模式?! 3. 有没有什么更好的代码结构来实现策略模式的吗? 策略模式是如何优化业务逻辑代码结构的? 要回答这个问题,我们还得先扒一扒策略模式的定义,从定义着手来理解它 策略模式的教科书定义 它的定义很精简:一个类的行为或其算法可以在运行时更改。我们把它降维到代码层面,用人话翻

m0_60144381的博客 163

Gemini多模态实战指南:从访问配置到企业级工作流落地

多模态大模型正成为AI生产力的核心范式,其本质是融合文本、图像、音频等异构信息进行联合理解与推理。Gemini作为原生多模态架构代表,凭借统一表征与跨模态因果推理能力,在会议纪要整理、PDF内容提取、故障图片分析等真实办公场景中展现出质变级效率提升。相比单模态模型,它更擅长处理日常90%的非纯文本信息,如带手写批注的合同截图或含表格的财报照片。技术价值在于将模糊需求转化为可执行指令,通过结构化Prompt、黄金三秒上传节奏和否定约束机制,显著降低幻觉率。本文聚焦Gemini Pro/Advanced/Ult

429

还用 if/else 走天下?不妨试试这几种改进方法

还用 if/else 走天下?不妨试试这几种改进方法 想当年,其实我也特别钟情于 if/else连环写法,上来就是一顿SAO操作,比如举个好理解的简单栗子: 一般来说我们正常的后台管理系统都有所谓的角色的概念,不同管理员权限不一样,能够行使的操作也不一样,比如: 比如一个用户进来,我们需要根据不同用户的角色来判断其有哪些行为,这时候SAO代码出现了: 这样当系统里有几十个角色时,那几十个 if/else嵌套可以说是非常酸爽了…… 这样一来非常不优雅,别人阅读起来很费劲;二来则是以后如果再复杂一点..

芒果不是程序猿v: 的博客 433

2024年前端最新最新的Vue面试题大全含源码级回答,吊打面试官系列,前端初级面试题

秋招即将开始,校招的朋友普遍是缺少项目经历的,所以底层逻辑,基础知识要掌握好!而一般的社招,更是神仙打架。特别强调,项目经历不可忽视;几乎简历上提到的项目都会被刨根问底,所以项目应用的技术要熟练,底层原理必须清楚。这里给大家提供一份汇集各大厂面试高频核心考点前端学习资料。涵盖HTML,CSS,JavaScript,HTTP,TCP协议,浏览器,Vue框架,算法等高频考点238道(含答案)!开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】高级前端工程师必备资料包data: {

2401_84123201的博客 3844

从‘查理复用’到TM52F1363:深入剖析5脚188数码管的驱动原理与避坑指南

本文深入解析了5脚188数码管的驱动原理,重点介绍了查理复用技术如何通过5个IO引脚高效驱动188段显示,并详细探讨了TM52F1363单片机的寄存器配置与驱动实现。文章还提供了常见问题的解决方案和性能优化技巧,帮助开发者避免实际应用中的各种陷阱。

weixin_29159441的博客 481

85道 Vue 面试题,内含详细讲解(涵盖入门到精通,自测 Vue 掌握程度)(1)

vue-cli工程构建的 vue-cli 工程都到了哪些技术,它们的作用分别是什么?vue-cli 工程常用的 npm 命令有哪些?请说出vue-cli工程中文件夹和文件的用处config文件夹 下 index.js 的对于工程 开发环境 和 生产环境 的配置请你详细介绍一些 package.json 里面的配置vue核心知识点对于Vue是一套渐进式框架的理解vue.js的两个核心是什么?请问 v-if 和 v-show 有什么区别vue常用的修饰符v-on可以监听多个方法吗?

2201_75604580的博客 409

用COMSOL计算复合材料板频散曲线:从建模到绘图全流程

导波在板结构中传播时,不同频率成分的速度不同,即频散现象。理解频散曲线是识别导波模态、确定相速度与群速度的基础,也是无损检测和结构健康监测中信号解读的关键。对于碳纤维增强复合材料等各向异性板,频散关系更加复杂,传统解析方法难以求解,数值仿真成为主流手段。通过COMSOL结合周期性边界条件与特征频率扫描,可以高效计算出复合材料板的频散曲线,进而绘制相速度和群速度随频率变化的图谱,为实验模态识别、换能器激励频率选择提供依据。本文以一个2毫米单向碳纤维板为例,详细介绍几何建模、材料参数设置、网格收敛验证、参数扫描

weixin_31412781的博客 235

35道常见的前端vue面试题

来源 | https://segmentfault.com/a/1190000021936876今天这篇文章给大家分享一些常见的前端vue面试题。有一定的参考价值,有需要的朋友可以参考一下...

web前端开发 4万+

【Unity3D】关于unity中spriteAtlas的打包方案及使用时内存状态的多组对照实验

unity项目中使用精灵(Sprite)为了降低性能消耗,我们可以使用精灵图集(Sprite Atlas)技术,它能够将多个纹理合并成一个大纹理

云渊寒烬 5101

告别简陋行情!在Ubuntu24.04系统用Wine9.0跑同花顺远航版的全流程记录

本文详细记录了在Ubuntu 24.04系统上,通过Wine 9.0兼容层成功安装并流畅运行同花顺远航版的全过程。文章对比了该方案与官方简陋Linux原生版本的功能差异,重点解决了高分辨率屏幕下的字体与界面显示问题,并提供了关键配置调优与长期维护建议,为Linux用户提供了功能完备的专业金融行情解决方案。

weixin_29207533的博客 1076

新来的同事用策略模式把if else给“优化“了,技术总监说:能不能想好了再改?

本文来自作者投稿,原作者:上帝爱吃苹果 目前在魔都,贝壳找房是我的雇主,平时关注一些 java 领域相关的技术,希望你们能在这篇文章中找到些有用的东西。个人水平有限,如果文章有错误还请指出,在留言区一起交流。 我想大家肯定都或多或少的看过各种“策略模式”的讲解、布道等等,这篇文章就是来好好“澄清”一下策略模式,并尝试回答以下的问题: 策略模式是如何优化业务逻辑代码结构的? 杀鸡焉用宰牛刀?就是几个if else场景我需要用到策略模式?! 有没有什么更好的代码结构来实现策略模式的吗? 策略模式是

很多时候犯错都是在不知情的情况下发生的 180

LLaMA-Factory微调教程5:多模态VLM模型对话

视觉-语言模型(VLM)概述与应用 视觉-语言模型(VLM)是一类结合视觉和语言信息的人工智能模型,旨在实现跨模态的理解与交互。其核心目标包括跨模态理解和生成能力,关键技术涉及模态表示与映射、多模态预训练以及跨模态交互机制。 典型VLM模型包括: CLIP:通过对比学习实现图像和文本的向量空间对齐 BLIP:结合自监督和弱监督学习提升语义对齐 ALBEF:基于BERT结构扩展跨模态注意力 DALL-E系列:基于文本生成图像的生成式模型 CLIP4Clip:扩展CLIP到视频领域 VLM在图像/视频检索、视觉

Cachel Wood的博客 1115

AI时代程序员不可替代的四大核心价值

在生成式AI深度融入软件开发流程的当下,'程序员是否会被取代'已让位于更本质的问题:哪些能力是AI无法模拟、不可替代的系统性能力?这涉及从模糊需求中精准定义问题的本质能力,对技术方案进行跨维度权衡的架构判断力,穿透多层耦合现象定位根因的系统归因能力,以及在效率与公平、功能与合规之间设置理性边界的伦理守护力。这些能力共同构成现代软件工程师的‘决策中枢’——不依赖语法记忆或代码生成速度,而根植于业务理解、系统思维与人文责任感。本文聚焦程序员在AI协同范式下的价值锚点,解析问题定义、架构权衡、故障归因与技术伦理四

culiao6493的博客 537

2024届数字IC秋招-华为机试-数字芯片-笔试真题和答案(五)(含2022年和2023年)

此部分包含华为机试真题,方向是数字芯片,内容详细包括设计、验证、后端等,大部分题目给出参考答案。华为机试都是从题库里抽题目,所以这些题目还是很有参考性的,甚至是完全一样,可以搜到的。(题目内容较多,将分开编写几个文章)

qq_42135020的博客 2083

用 DCL 编写 DEFINE ROLE:把 ABAP CDS 的访问控制做对、做实、做漂亮

摘要: 本文详细讲解如何在ABAP CDS中使用DCL(数据控制语言)实现行级授权,确保业务数据安全。核心要点包括: DCL原理:通过DEFINE ROLE将访问条件绑定到CDS实体,自动附加到查询条件(类似隐式WHERE),保障授权一致性。 关键语法: 必需注解@MappingRole: true声明映射角色。 ASPECT pfcg_auth关联PFCG权限对象,动态控制访问。 注解@AccessControl.authorizationCheck定义授权检查策略(如#CHECK启用强制控制)。 优先级

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 168

AI服务架构中的零值层:不可见的语义路由与能力裁剪机制

在现代AI工程实践中,'抽象层'正从显式可配置的模块演变为隐式自适应的基础设施。所谓'零值层',并非指功能失效,而是指其接口熵值、运维可见性与人工干预必要性趋近于零——它代表了模型服务栈中动态语义路由与隐式能力裁剪的技术范式跃迁。该机制基于语义意图解码、动态输出塑形与自裁剪执行三大原理,显著提升prompt鲁棒性、token效率与错误恢复能力,已在客服工单分类、法律审查、代码解释等典型MLOps场景中验证实效。对后端工程师与AI平台建设者而言,理解并适配这一'不可见但无处不在'的层,是实现稳定、高效、低维护

weixin_34007020的博客 466

AFL源码分析之afl-as.c详细注释

前言 afl-as注释好了,明白了是如何进行插桩的,以及插在哪里 本文主要参考Sakura大佬文章:https://eternalsakura13.com/2020/08/23/afl/ 编写不易,如果能够帮助到你,希望能够点赞收藏加关注哦Thanks♪(・ω・)ノ /* Copyright 2013 Google LLC All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); y

hollk’s blog 2173

Vue笔记:生命周期

面试题:说一下Vue的生命周期 beforeCreate是new Vue()之后触发的第一个钩子,在当前阶段data、methods、computed以及watch上的数据和方法都不能被访问。 created在实例创建完成后发生,当前阶段已经完成了数据观测,也就是可以使用数据,更改数据,在这里更改数据不会触发updated函数。可以做一些初始数据的获取,在当前阶段无法与Dom进行交互,如果非要想,可以通过vm.$nextTick来访问Dom。 beforeMount发生在挂载之前,在这之前template模

weixin_45295262的博客 746

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【前端面试】39道Vue高频面试题,亲测有效!!!快来看看呀!!

Vue高频面试题 1.说下你常用的Vue指令? v-bind:动态绑定数据 v-on:绑定事件监听器 v-for:循环指令,可以循环数组或对象 v-model:实现双向绑定 v-if:根据表达式的真假值,判断是否渲染元素,会销毁并重建 v-show:显示隐藏元素,修改元素的display属性 2.v-if和v-show的区别是什么? 切换元素时,v-if会销毁并重建元素,v-show是修改display属性,来做到显示和隐藏。 v-show项目用处:回到顶部组件的显示隐藏,v-if项目用处:登陆方式切换

Milk~每天分享一点点,技术进步一点点 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

2024最新!!!vue前端面试题(全!精!)带答案

vue前端面试题(全)带答案

u010609022的专栏 8425

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

前端vue面试题总结,面试大全

因为浏览器出于安全考虑,有同源策略。也就是说,如果协议、域名或者端口有一个不同就是跨域, Ajax 请求会失败。为来防止 CSRF 攻击 1 . JSONP JSONP 的原理很简单,就是利用 < script > 标签没有跨域限制的漏洞。通过 < script > 标签指向一个需要访问的地址并提供一个回调函数来接收数据当需要通讯时。console . log(data) } < / script > JSONP 使用简单且兼容性不错,但是只限于 get 请求。

zhutianyuyuyu的博客 634

2024 前端Vue面试题大全汇总 (82道)_vue面试题2024

默认插槽

2401_86637663的博客 7704

2024前端面试系列-- Vue 篇

为了准备2024年春招,最近开始复习八股文。本文是前端面试系列的Vue篇,其他章节内容更新后可在专栏查看:2024前端面试系列--HTML & CSS 篇2024前端面试系列-- JS 篇2024前端面试系列--网络篇2024前端面试系列-- webpack & Git篇MVVM,是的简写,其本质是MVC模型的升级版。其中Model代表数据模型,View代表看到的页面,ViewModel是View和Model之间的桥梁,数据会绑定到ViewModel层并自动将数据渲染到页面中,视图变化的时候会通知。

Web面试那些事儿的博客 2134
上一篇: 面试官再问高并发,求你把这篇发给他
下一篇: 老大:我去,你还不会用 this 关键字?
JavaShark
博客等级 码龄4年 184粉丝 438原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值