当前位置: 首页 > news >正文

Serverless如何赋能餐饮行业数字化?乐凯撒思变之道

导语 | 在数字化浪潮席卷全球的今天,每一个行业都在经历着前所未有的变革。餐饮行业作为人们日常生活中不可或缺的一部分,更是面临着巨大的转型压力。如何完成数字化转型,打破传统经营模式的限制,成为摆在众多餐饮商家面前的一道难题。餐饮行业如何在当下数字化时代找寻自己的出路?今天,我们特邀了乐凯撒 CTO 黄道泳老师,他将为我们深入解读以乐凯撒为代表的餐饮行业的数字化转型之道。

作者简介

黄道泳,腾讯云 TVP,乐凯撒 CTO。目前主要负责乐凯撒的整体信息化、数据化和智能化的建设。拥有14年的企业信息化和数据化建设经验。在乐凯撒面向新餐饮的服务转型中,积累了丰富的实践经验,并对 Serverless 技术在实际生产中应用有独到的见解。曾担任 IBM Webshpere 中国区官方论坛的版主和专家,对于系统架构,性能调优略有心得。

一、从餐饮行业的五大特征看数字化转型的必要性

近年来,随着数字技术的持续发展、迭代和应用推广,餐饮行业的堂食已经从人力点餐快速演变为扫码点餐,外卖送餐不仅仅是在线点餐即时配送,更是与短视频、线上直播有效结合,以短视频营销、线上直播营销的形式,在数字化变革中为消费者带来最直观的体验。

首先,在餐饮行业中,消费呈现出脉冲型特征,存在着明显的高峰期。这种波峰波谷的差异很大,主要集中在午餐和晚餐这两个用餐高峰时段。在这些时间段内,餐厅通常会迎来大量的顾客。

其次,餐饮业务具有交易敏感型特征,订单交易系统需要快速实时响应。顾客在现场点餐时,期望能够得到及时的消费响应,因此餐饮企业需要具备良好的灾备能力和快速响应机制。由于没有太多时间来进行服务器扩容等操作,餐饮行业在面对突发情况时需要迅速作出应对。

第三,餐饮业务是一项 24 小时不间断的服务业务,基本上不接受停服更新。餐饮企业需要保持持续的运营,确保顾客能够随时享受到美食。因此,在进行系统升级或更新时,餐饮企业需要采取一些特殊的措施,以确保业务的连续性。

第四,与金融、电信、科技等行业相比,餐饮业对于信息技术的投入相对较低。餐饮行业普遍面临资金有限的问题,无法像其他行业那样进行大规模的 IT 投资。这也意味着餐饮企业在信息化建设方面可能面临一些挑战,需要在有限的资源下进行合理的规划和选择。

最后,餐饮行业的信息化链条相对较长,涉及多个系统的对接和整合。餐饮企业通常需要应对大量异构系统的集成,使得各个环节能够无缝衔接。此外,餐饮行业还会面临大量临时性、一次性的紧急需求,例如各种节日促销活动。这些临时需求对系统的灵活性和快速响应能力提出了更高的要求。

综上所述,餐饮行业应根据以上五大特征,了解并应对这些特征对于餐饮企业的信息化、数字化建设和业务发展至关重要。

二、云函数的独特优势助力餐饮行业实现数字化

众所周知,云函数是一种无服务器(Serverless)概念的技术,在餐饮行业进行数字化转型中具有多项优势。首先,它实现了自动化弹性执行,根据使用量进行收费,并根据调用曲线自动扩缩容,以应对高峰期的服务压力。这种按需付费的模式不仅经济实惠,还能在闲时减少费用,提高系统稳定性和灾备能力。

其次,使用云函数可以摆脱繁琐的部署和配置过程,无需自己安装软件和配置服务器脚本。特别适用于临时的、低频的应用部署,可极大地节省服务器资源。而且在不使用时,无需额外销毁处理,进一步简化了管理流程。

云函数采用按需付费和毫秒级计费模式,永远不会在空闲时间产生费用。这对于脉冲式的访问业务具有明显的优势,并且可以针对低峰期和晚上的用量极低的情况进行优化,有效降低成本。

云函数支持高可用部署,它可以自动选择每个地域中的可用区来运行。如果某个可用区发生灾害或电力故障等导致瘫痪,云函数会自动切换到其他可用区的基础设施上运行,从而减少了单可用区运行的故障风险。这使得异地灾备的问题基本上不再需要考虑。同时,云函数还支持快速发布新版本和版本回退,实现了无感知的发版和版本回退。

最后,云函数的天然微服务模式使得每个函数都专注于某个特定的任务,通过相互协作可以构建复杂的应用程序。这种模块化的架构使开发者能够更灵活地管理和调整不同功能模块的资源消耗,实现快速迭代和部署。

在我看来,云函数是一种经济、实惠、稳定且灵活的技术,它能够根据实际需求自动弹性执行,节省资源,按需付费,并具备高可用性和灾备能力。

同时,它天然支持微服务模式,使开发者能够更灵活地构建和管理应用程序,实现快速迭代和部署。

三、乐凯撒餐饮高并发场景下的最佳实践

当前,国内的餐饮行业已经从增量市场转变为存量市场,在市场总额有限的情况下,在互联网、大数据等新一代信息技术迅猛发展的时代背景下,数字化成为帮助餐饮企业增加收入、降低成本、提升效率的重要工具。

毋庸置疑,餐饮收银 POS 系统作为餐饮门店最核心的业务系统,其中涉及大量实时交易的模块,例如订单、支付、打印、会员、优惠券等。我们乐凯撒用腾讯云函数最早做的是小程序的点单服务,后来逐渐扩大,到门店的云打印、会员标签的计算等等,总的来说包括独立应用、分布式计算和定时任务这三类业务。

在餐饮行业中,数字化系统的建构“效率”最为关键,这也正是乐凯撒选择携手腾讯云,借力腾讯云函数 SCF、消息队列 CMQ、TDSQL 等现有的成熟云产品的原因所在:不重复造轮子,通过好的工具有效实现降本增效,不断深化乐凯撒的数字化布局。

当前,我们基本上与腾讯云深度绑定,用的产品包括云函数 SCF、消息队列 CMQ、TDSQL、MySQL、COS 存储等。

其实,我们乐凯撒在正式使用云函数来支撑餐饮 POS 系统前,主要采用传统的 Java 体系的 J2EE 架构,通过部署不同的独立模块的系统来支撑门店的以上业务。

(图1,餐饮POS系统架构图)

其中我们乐凯撒的部分业务已经采用了云函数模式进行运行,而主要的 POS 业务和会员业务等仍然是通过各自独立的服务器集群进行部署。

然而,在去年 2 月份,我们乐凯撒遭遇了一次突发活动,这导致访问量急剧增加。在晚上 9 点多的时候,由于一个免费优惠券在社媒上传播,不到一个小时的时间内就有 18 万份优惠券被领取。这直接导致系统崩溃,并在接下来的几天里引发门店爆单、系统响应变慢等问题。

(图2,系统后台访问数据图)

如上图所示,我们乐凯撒遭遇了一次访问量剧增,整体访问量增加了 20 倍。这导致我们的 POS 收银系统无法承受,最终不得不停止服务。

在进行系统复盘后,我们提出了两个解决方案:

● 方案一:增加服务器资源,加强服务器灾备能力,并实现快速自动化部署脚本以便对服务器集群进行扩容。然而,这个方案需要额外的服务器预算,并且大部分时间服务器资源处于闲置状态,同时也增加了运维的复杂性。

● 方案二:采用云函数来实现和部署这类脉冲型业务,无需额外采购服务器,也无需进行大规模的扩容和相应的运维工作。然而,这需要对现有业务进行重构和调整,以适应云函数架构。

经过综合考虑,我们最终确定了方案二,将优惠券服务、订单服务和菜单服务从现有系统中分离出来,采用云函数进行单独运行和部署。这样能够更好地适应脉冲型业务的需求。

调整后的架构图如下:

(图3,调整后的系统架构图)

通过将订单服务和优惠券服务转换为云函数架构,我们显著提升了系统的整体稳定性。几乎没有发生系统崩溃或响应过慢等问题,并且我们几乎没有增加服务器预算的成本。

然而,在 2024 年 2 月份,我们乐凯撒遇到了两次类似的业务激增情况。一次是在 2 月 21 日,访问量接近 20 万次;另一次是在 2 月 23 日,访问量接近 40 万次。然而,我们的系统在这些情况下都能平稳运行下去。有趣的是,我甚至是通过门店爆单的情况才了解到访问量的剧增。

与此类似,我们的支付服务和打印服务一直采用云函数模式运行,并且从 2018 年上线至今几乎没有遇到过压力过载的故障。其中,我们的打印服务是访问量最高的服务,平时每分钟处理接近 4000 次请求,采用了 WebSocket 通信协议。

总而言之,通过将关键服务转换为云函数架构,我们不仅提高了系统的稳定性,还能应对突发的业务激增情况。支付服务和打印服务作为长期采用云函数模式运行的示范,也展示了它们在处理高访问量时的出色表现。

(图4,系统访问趋势图)

在这个案例中,我们乐凯撒采用了云函数的自动扩缩容、按需付费、高可用和微服务化的模式,以解决业务需求。在进行云函数改造的过程中,我们总结了一些问题:

● 相对于其他语言,云函数对 Java 的支持较弱。由于我们的大型或复杂业务系统主要使用 Java 实现,早期上线的支付服务和打印服务采用了 Node.js,因此上线相对顺利,稳定性和体验都比较好。但要使 Java 应用在云函数上更好地使用,需要付出更多努力。

● 纯 Java 语言的功能相对有限,为了高效开发,通常需要依赖开源框架,尤其是 Spring。

● Java 启动慢,内存占用大,与其他语言相比,在 Serverless 云函数下会占用更多资源。对于复杂业务系统,每个接口部署一个云函数会增加部署和管理成本。

● Java 应用涉及数据库请求时,通常会使用数据库连接池进行管理。然而,在云函数中,连接池不能设置得太大,最好在 3-5 个之间,否则会导致数据库连接数过高。由于云函数是为每个请求开启一个类似 Java 进程的服务,当并发量较大时,云函数会创建大量的 Java 进程,进而导致数据库连接数过高。

● 迁移现有业务代码至云函数时,需要尽量减少修改,实现无缝迁移,并支持本地调试和模拟云端环境,但目前还没有较好的解决方案。

为了解决上述问题,我们乐凯撒自研了一套兼容云函数和 SpringBoot 这两种模式都能正常运行的框架。该框架支持在本地调试和测试环境下直接使用 Spring Boot 或 Tomcat 启动,而在正式环境中则直接采用云函数运行。此外,该框架还支持一个云函数部署多个访问接口的服务,使云函数能够按模块划分微服务。

我们已经将该框架开源,并在 GitHub 上发布了一个简单的订单服务 demo 样例,感兴趣的朋友可以自行前往查看:(《基于腾讯云函数部署的springboot》 :https://github.com/lacesarLabs/tencentyun-scf-springboot)

其实,如果要广泛应用云函数,我们必须面对一个必须解决的问题,即大规模应用 Java 语言的云函数化。由于许多商业软件和复杂应用都是使用 Java 实现的,我们需要一个能够与 Spring Cloud 等微服务生态系统媲美的云函数框架,以及云函数调用的框架或平台,以更好地替换和升级现有的 Java 应用。这个框架应该支持基于云函数的函数注册、函数管理、函数调度和函数发现等配套功能。

在这个案例中,我们乐凯撒通过这个框架成功地将相关服务快速迁移到云函数上。最初,我们将云函数视为灾备和临时扩容服务,但在测试运行后,发现其稳定性和性能表现出色,于是将其作为正式环境的服务,而虚拟机中的服务则成为备份。

其实,整个解决方案的成本只占了方案一所需的正常服务器资源费用的不到 10%。在这个方案中,我们完美应用了云函数的几个重要特性:自动扩缩容、按需付费、天然的微服务模式以及高可用和无服务器概念。

结语

总而言之,餐饮行业中各企业进行数字化转型已经是大势所趋。企业适应数字化趋势,积极推动数字化转型,通过建设数字化、智能化平台,可以有效助力企业提高效率、降低成本、优化运营,并提供更好的产品和服务,在竞争激烈的市场中脱颖而出,实现可持续的增长。

相关文章:

Serverless如何赋能餐饮行业数字化?乐凯撒思变之道

导语 | 在数字化浪潮席卷全球的今天,每一个行业都在经历着前所未有的变革。餐饮行业作为人们日常生活中不可或缺的一部分,更是面临着巨大的转型压力。如何完成数字化转型,打破传统经营模式的限制,成为摆在众多餐饮商家面前的一道难…...

css系列:音频播放效果-波纹律动

介绍 语音播放的律动效果,通俗来说就是一个带动画的特殊样式的进度条,播放的部分带有上下律动的动画,未播放的部分是普通的灰色竖状条。 实现中夹带了less变量、继承和循环遍历,可以顺带学习一下。 结果展示 大致效果如图所示…...

WPF学习(1)--类与类的继承

在面向对象编程中,继承是一种机制,允许一个类(称为子类或派生类)从另一个类(称为父类或基类)继承属性和方法。继承使我们能够创建一个通用类,然后根据需要扩展或修改它以创建更具体的类。以下是…...

Spring Boot框架的原理及应用详解(六)

本系列文章简介: 在当今的软件开发世界中,快速迭代、高效开发以及易于维护成为了开发者们不断追求的目标。Spring Boot作为Spring框架的一个子项目,自其诞生以来就凭借其“约定大于配置”的理念和自动配置的特性,迅速在Java开发社…...

密码学与信息安全面试题及参考答案(2万字长文)

目录 什么是密码学?它的主要目标是什么? 请解释明文、密文、加密和解密的概念。 密码系统的安全性通常基于哪三种假设? 什么是Kerckhoffs原则?它对现代密码学设计有何意义? 简述密码学中的“混淆”和“扩散”概念。 什么是AES(高级加密标准)?AES有几种常见的密钥…...

C++语法19 循环嵌套结构(for/while循环)

语法阶段已经更新到第18章了,前面的知识你都学会了吗?如果还没有学习前面的知识,请点击👉语法专栏进行学习哦! 目录 循环嵌套 训练:数字矩形 解析 参考代码 训练:星号三角形 解析 参考代码 …...

AtomicInteger原理和CAS与Synchronized(juc编程)

AtomicInteger原理 4.6.1 原理介绍 AtomicInteger的本质:自旋锁 CAS算法 CAS的全成是: Compare And Swap(比较再交换); 是现代CPU广泛支持的一种对内存中的共享数据进行操作的一种特殊指令。CAS可以将read-modify-write转换为原子操作,这…...

抖音a_bogus,mstoken全参数爬虫逆向补环境2024-06-15最新版

抖音a_bogus,mstoken全参数爬虫逆向补环境2024-06-15最新版 接口及参数 打开网页版抖音,右键视频进入详情页。F12打开控制台筛选detail,然后刷新网页,找到请求。可以发现我们本次的参数目标a_bogus。a_bogus有时长度为168有时为172&#xf…...

【机器学习】机器学习重要方法—— 半监督学习:理论、算法与实践

文章目录 引言第一章 半监督学习的基本概念1.1 什么是半监督学习1.2 半监督学习的优势 第二章 半监督学习的核心算法2.1 自训练(Self-Training)2.2 协同训练(Co-Training)2.3 图半监督学习(Graph-Based Semi-Supervise…...

leetcode70 爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2&#x…...

ENVI实战—一文搞定非监督分类

实验1:使用isodata法分类 目的:学会使用isodata法开展非监督分类 过程: ①导入影像:打开ENVI,按照“文件→打开为→光学传感器→ESA→Sentinel-2”的顺序,打开实验1下载的哨兵2号数据。 图1 ②区域裁剪…...

【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt系统相关 | Qt事件 | 事件的介绍及基本概念 文章编号:Qt…...

具身智能特点及实现路线

多模态——多功能的“小脑” 人类具有眼耳鼻舌身意,说明对于物理世界的充分感知和理解,是意识和智慧的来源。而传统AI更多的是被动观测,主要是“看”(计算机视觉)和“读”(文本NLP)&#xff0c…...

重温react-04

兄弟组件之间通信 兄弟1 import React, { Component } from react import pubsub from ./pubsub export default class learnReact01 extends Component {render() {return (<div>我是兄弟1<button onClick{this.clickMessage}>向兄弟2发信息</button><…...

lock-锁的概念

锁的简介 锁是计算机协调多个进程或线程并发访问某一资源的机制&#xff08;避免发生资源争抢&#xff09; 在并发环境下&#xff0c;多个线程会对同一个资源进行争抢&#xff0c;可能会导致数据不一致的问题。为了解决这一问题&#xff0c;需要通过一种抽象的锁来对资源进行…...

Docker 可用镜像源

当使用 docker 发现拉取不到镜像时&#xff0c;可以编辑 /etc/docker/daemon.json 文件&#xff0c;添加如下内容&#xff1a; 这文章不涉及政治&#xff0c;不涉及敏感信息&#xff0c;三番五次的审核不通过&#xff0c;一删再删&#xff0c;只好换图片了。 重新加载服务配置…...

MySQL 搭建主从报错 1236

错误信息&#xff1a; Last_IO_Error: Got fatal error 1236 from source when reading data from binary log: Could not find first log file name in binary log index file 大致内容&#xff1a; MySQL 在尝试从二进制日志&#xff08;binary log&#xff09;中读取数据…...

华为OD机试真题2024版-求幸存数之和

题目描述\n给一个正整数列 nums,一个跳数 jump,及幸存数量 left。运算过程为:从索引为 0 的位置开始向后跳,中间跳过 J 个数字,命中索引为 J+1 的数字,该数被敲出,并从该点起跳,以此类推,直到幸存 left 个数为止。然后返回幸存数之和。\n约束: 1、0 是第一个起跳点。…...

Python - 各种计算器合集【附源码】

计算器合集 一&#xff1a;极简版计算器二&#xff1a;简易版计算器三&#xff1a;不简易的计算器四&#xff1a;还可以计算器 一&#xff1a;极简版计算器 运行效果&#xff1a; import tkinter as tk import tkinter.messagebox win tk.Tk() win.title("计算器")…...

【已解决】better-scroll在PC端如何开启鼠标滚动以及如何始终显示滚动条

总结 需要安装插件 mouse-wheel 和 scrollbar 在PC端如何开启鼠标滚动? 需要安装官方提供的滚动插件&#xff1a;mouse-wheel https://better-scroll.github.io/docs/zh-CN/plugins/mouse-wheel.html 为了开启鼠标滚动功能&#xff0c;你需要首先引入 mouseWheel 插件&…...

AJAX 综合案例-day2

Bootstrap 弹框 功能&#xff1a;不离开当前页面&#xff0c;显示单独内容&#xff0c;供用户操作 步骤&#xff1a; 1. 引入 bootstrap.css 和 bootstrap.js 2. 准备 弹框标签 &#xff0c;确认结构 3. 通过 自定义属性 &#xff0c;控制弹框的 显示 和 隐藏 1. 通过属性…...

【Esp32连接微信小程序蓝牙】附Arduino源码《 返回10007 相同特征id冲突问题》

前言 最近接了一个外包&#xff0c;发现了esp32连接小程序会有很多bug&#xff0c;所以接下来会慢慢更新解决方案&#xff0c;还是需要多接触项目才能进步呀兄弟们&#xff01; 附上uuid的生成链接&#xff1a; // See the following for generating UUIDs: // https://www.uu…...

并发控制技术

事物的隔离性实现主要依赖于多种并发控制技术,这些技术确保在并发执行的事物中,一个事物的操作不会被其他事物干扰。并发控制技术按照其对可能冲突的操作采取的不同策略可以分为乐观并发控制和悲观并发控制两大类。 基于封锁的并发控制 对于并发可能冲突的操作,比如读-写,…...

什么是网段

一、A类地址的网段&#xff1a; 情况1&#xff1a;最小的网段就是xxx.0.0.0&#xff0c;直接使用第一段的网络地址做网段。 情况2&#xff1a;如果希望网段允许的主机数量的范围缩小&#xff0c;扩大网段值即可&#xff0c;xxx.xxz.zzz.zzz&#xff0c;比如xxx.xxx.xzz.zzz&…...

PHP和Mysql前后端交互效果实现

一、连接数据库基本函数 mysqli_connect(); 作用&#xff1a;创建数据库连接&#xff0c;打开一个新的mysql的连接。传参顺序&#xff1a;数据库地址、数据库账号、数据库密码 <?phpecho mysqli_connect("localhost",root,root) ?> /*结果&#xff1a;F…...

vue小总结

知识总结 【 1 】es6 语法总结 # let 定义变量 # const定义常量 ------块级作用域---- # var 以后尽量少用&#xff0c;函数作用域var 在 JavaScript 中是函数作用域或全局作用域。而 let 和 const 是块级作用域。 // 使用 var 声明全局变量 var globalVar "Im a globa…...

RapidLayout:中英文版面分析推理库

引言 继上一篇文章之后&#xff0c;我这里想着将360发布的版面分析模型整合到现有的rapid_layout仓库中&#xff0c;便于大家快速使用。 不曾想到&#xff0c;我这整理工作越做越多了&#xff0c;好在整体都是往更好方向走。 起初&#xff0c;rapid_layout项目是在RapidStru…...

postman 工具下载安装使用教程_postman安装

本文讲解的是postman工具下载、Postman安装步骤、postman下载、postman安装教程。Postman是一款流行的API测试工具&#xff0c;它提供了一个用户友好的界面&#xff0c;用于发送和测试API请求&#xff0c;并且可以轻松地按需管理和组织请求。 这使得开发人员和测试人员能够更高…...

【数学建模】——【新手小白到国奖选手】——【学习路线】

专栏&#xff1a;数学建模学习笔记 目录 ​编辑 第一阶段&#xff1a;基础知识和工具 1.Python基础 1.学习内容 1.基本语法 2.函数和模块 3.面向对象编程 4.文件操作 2.推荐资源 书籍&#xff1a; 在线课程&#xff1a; 在线教程&#xff1a; 2.数学基础 1.学习内…...

CSS文本超限后使用省略号代替

方案一&#xff1a; 只显示一行&#xff0c;超限后使用省略号代替 .detail {overflow: hidden;text-overflow: ellipsis;white-space: nowrap; }方案二&#xff1a; 显示多行&#xff0c;到最后一行还没有显示完&#xff0c;则最后一行多出来的部分使用省略号代替。 .detai…...

月季花app是哪家公司开发的/宁波seo网络推广代理公司

在众多的网络推广方式中&#xff0c;软文以可读性强、流通性广、效果持久等特点广受追捧。互联网新闻软文推广易操作&#xff0c;效果好&#xff0c;很多企业家们都希望能够通过软文推广的方式把品牌推广出去&#xff0c;不过很多企业并不了解软文推广&#xff0c;尤其是新闻软…...

淮安做网站的有多少钱/思亿欧seo靠谱吗

一&#xff0e;DataFile脱机或联机的两种方法&#xff1a; ① ALTER DATABASE 语句修改单独的DataFile ② ALTER TABLESPACE 语句修改所有的DataFile 1、在ARCHIVRLOG模式下的更改DataFile状态 ALTER DATABASE DATAFILE /u02/oracle/rbdb1/stuff01.dbf ONLINE; ALTER DATABASE …...

档案信息网站建设/六年级上册数学优化设计答案

1061: [Noi2008]志愿者招募 Description 申奥成功后&#xff0c;布布经过不懈努力&#xff0c;终于成为奥组委下属公司人力资源部门的主管。布布刚上任就遇到了一个难题&#xff1a;为即将启动的奥运新项目招募一批短期志愿者。经过估算&#xff0c;这个项目需要N 天才能完成&a…...

wordpress手机建站/百度关键词优化软件

在MyBatis初始化过程中&#xff0c;大致会有以下几个步骤&#xff1a;1. 创建Configuration全局配置对象&#xff0c;会往TypeAliasRegistry别名注册中心添加Mybatis需要用到的相关类&#xff0c;并设置默认的语言驱动类为XMLLanguageDriver2. 加载mybatis-config.xml配置文件、…...

怎么做教育培训网站/2022年传销最新消息

接口是实现多继承的。 举个例子&#xff1a; 鸟 和 猴子 鸟可以飞&#xff0c;猴子可以爬树 还有个对象叫孙悟空 他能飞&#xff0c;也能爬树 这中情况就用接口来实现。 接口实例化对象类似于函数指针。 1 <?php2 // require_once ./meus.php;3 4 // 接口对象的实例化5 i…...

甘肃省交通建设集团有限公司网站/seo管理系统培训运营

目录1. ArrayList和LinkedList的区别是什么(面试)?2. 什么是List接口3. 什么是HashMap(重点)4. 关于HashMap的扩容机制5. 什么时候开始扩容?6. 扩容的方法是?7. Hashmap为什么大小是2的幂次&#xff1f;8. HashMap线程安全问题,对应的线程安全Map是什么?9. 什么是CAs算法?…...