鸿蒙的基本项目_tabbar,首页,购物车,我的

以上效果,由四个ets文件实现,分别是容器页面。首页,购物车,我的。

页面里的数据,我是用json-server进行模拟的数据。

一、容器页面

使用组件Tabs和Tabcontent结合。

import Home from "./Home";
import ShoppingCar from "./ShoppingCar";
import My from "./My";

@Entry
@Component
struct TabsExample {

  // 定义变量,表示当前选中的下标
  @State currentIndex:number = 0;

  @State arr:Array<Object> =[
    {
      icon:"/imgs/home.png",
      selectedIcon:"/imgs/home2.png",
      text:"首页"
    },
    {
      icon:"/imgs/gouwuche.png",
      selectedIcon:"/imgs/gouwuche2.png",
      text:"购物车"
    },
    {
      icon:"/imgs/wode.png",
      selectedIcon:"/imgs/wode2.png",
      text:"我的"
    }
  ]

  build() {
    Column() {
      Tabs({ barPosition: BarPosition.End }) {
        ForEach(this.arr,(item,idx)=>{
          TabContent() {
            if(this.currentIndex==0){
              Home()
            }else if(this.currentIndex==1){
              ShoppingCar()
            }else{
              My()
            }
          }.tabBar({
            icon: (this.currentIndex==idx)?item.selectedIcon:item.icon,
            text:item.text
          })
        })

      }
      .width(360)
      .height("100%")
      .onChange((idx)=>{
        this.currentIndex = idx;
      })

    }.width('100%')
  }
}

二、首页

import http from '@ohos.net.http';
import router from '@ohos.router';

interface IBook{
  id:string,
  name:string,
  author:string,
  publish:string,
  img:string
}

@Entry
@Component
  // 对外开放
export default struct Home {

  @State books:Array<IBook> = [];

  @State imgs: Array<string> = [];
  scroller: Scroller = new Scroller()

  // 创建http的请求对象
  httpRequest = http.createHttp();

  // 获取轮播图数据
  getBanners(){

    this.httpRequest.request("http://localhost:3000/bannerImgs",(err,data)=>{
      if(!err){
        this.imgs = JSON.parse(data.result as string);
        this.initScroll();
      }
    })
  }

  // 获取书籍信息
  getBooks(){
    //发送请求
    this.httpRequest.request("http://localhost:3000/books",(err,data)=>{
      if(!err){
        // console.log("data",data)
        //   data对象的result属性是数据
        //   console.log("data.result",data.result)
        //   JSON.parse():把字符串转成json对象。
        this.books = JSON.parse(data.result as string);
      }
    })
  }

  // aboutToAppear():这个生命周期钩子函数的调用时机:当本页面(组件)加载时,
  aboutToAppear(){
    this.getBooks();
    this.getBanners();
  }

  // 自行实现轮播图功能:
  initScroll(){
    let index = 0;
    let maxIndex = this.imgs.length-1;
    setInterval(()=>{
      index++;
      if(index>maxIndex){
        index = 0;
      }
      this.scroller.scrollTo({
        xOffset:index*400,
        yOffset:0,
        animation:{
          duration:1000,
          curve:Curve.Linear
        }
      })
    },2000)
  }

  build() {
    // 最外层使用弹性盒布局,纵向分为三部分:搜索框,滚动容器,底部。
    Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.SpaceBetween }) {
      // 1、搜索框
      Search({ placeholder: '请输入您要搜索的内容', icon: "imgs/search01.png" })
        .searchButton('搜索')
        .textAlign(TextAlign.Center)
        .width("100%")
        .height(60)
        .backgroundColor('#F5F5F5')
        .placeholderColor(Color.Grey)
        .placeholderFont({ size: 20, weight: 400 })
        .textFont({ size: 30, weight: 400 })
        .onSubmit(()=>{
          console.log("onSubmit")
          router.pushUrl({
            url:"pages/SearchPage"
          })
        })

      Scroll() {
        Column() {
          // 1)、轮播图
          List({scroller:this.scroller}){
            ForEach(this.imgs,(item)=>{
              ListItem(){
                Image(item)
                  .width(400)
                  .height("100%")
              }
            })
          }
          .width("100%")
          .height(250)
          .listDirection(Axis.Horizontal)

          Swiper(){
            ForEach(this.imgs,(item)=>{
                Image(item)
                  .width(400)
                  .height("100%")
            })
          }

          // 2)、导航
          Grid() {
            GridItem() {
              Column() {
                Image("https://m.360buyimg.com/mobilecms/s120x120_jfs/t1/178015/31/13828/6862/60ec0c04Ee2fd63ac/ccf74d805a059a44.png")
                  .width(40)
                  .height(40)
                Text("京东超市")
              }
            }

            GridItem() {
              Column() {
                Image("https://m.360buyimg.com/mobilecms/s120x120_jfs/t1/178015/31/13828/6862/60ec0c04Ee2fd63ac/ccf74d805a059a44.png")
                  .width(40)
                  .height(40)
                Text("京东超市")
              }
            }

            GridItem() {
              Column() {
                Image("https://m.360buyimg.com/mobilecms/s120x120_jfs/t1/178015/31/13828/6862/60ec0c04Ee2fd63ac/ccf74d805a059a44.png")
                  .width(40)
                  .height(40)
                Text("京东超市")
              }
            }

            GridItem() {
              Column() {
                Image("https://m.360buyimg.com/mobilecms/s120x120_jfs/t1/178015/31/13828/6862/60ec0c04Ee2fd63ac/ccf74d805a059a44.png")
                  .width(40)
                  .height(40)
                Text("京东超市")
              }
            }

            GridItem() {
              Column() {
                Image("https://m.360buyimg.com/mobilecms/s120x120_jfs/t1/178015/31/13828/6862/60ec0c04Ee2fd63ac/ccf74d805a059a44.png")
                  .width(40)
                  .height(40)
                Text("京东超市")
              }
            }

            GridItem() {
              Column() {
                Image("https://m.360buyimg.com/mobilecms/s120x120_jfs/t1/178015/31/13828/6862/60ec0c04Ee2fd63ac/ccf74d805a059a44.png")
                  .width(40)
                  .height(40)
                Text("京东超市")
              }
            }

            GridItem() {
              Column() {
                Image("https://m.360buyimg.com/mobilecms/s120x120_jfs/t1/178015/31/13828/6862/60ec0c04Ee2fd63ac/ccf74d805a059a44.png")
                  .width(40)
                  .height(40)
                Text("京东超市")
              }
            }

            GridItem() {
              Column() {
                Image("https://m.360buyimg.com/mobilecms/s120x120_jfs/t1/178015/31/13828/6862/60ec0c04Ee2fd63ac/ccf74d805a059a44.png")
                  .width(40)
                  .height(40)
                Text("京东超市")
              }
            }

          }
          .columnsTemplate('1fr 1fr 1fr 1fr')
          .rowsTemplate('1fr 1fr')
          .columnsGap(10)
          .width('100%')
          .backgroundColor(0xededed)
          .height(180)

          // 3)、列表
          Column(){
            ForEach(this.books,(item)=>{
              Row(){
                Image(item.img).width(120).height(120).margin(20).onClick(()=>{
                  // 跳转到详情页面的同时,传递了参数:bookid
                  router.pushUrl({
                    url:"pages/Detail",
                    params:{
                      bookid:item.id
                    }
                  })
                })
                Column(){
                  Text(item.name).fontSize(22).width("100%").margin(10)
                  Text(item.author).fontSize(22).width("100%").margin(10)
                  Text(item.publish).fontSize(22).width("100%")
                }
                .width(200)
                .height("100%")
              }
              .width("95%")
              .height(140)
              .margin(10)
              .backgroundColor(0xdddddd)
              .borderRadius(10)
              .margin(10)
            })
          }.width("100%")

        }.width("100%")
      }
      .width("100%")
      .height("100%")
      .align(Alignment.TopStart)

    }
    .width("100%")
    .height("100%")
  }
}

三、购物车

import router from '@ohos.router';
import http from '@ohos.net.http';
import {storage} from "../utils/globalData"

// 自定义类型:商品类型

interface IBook{
  isChecked?:boolean,
  id:string,
  name:string,
  price:number,
  count:number,
  smallJi?:number,
  limit?:number
}

@Entry
@Component
export default struct ShoppingCar {

  // 定义状态
  // 购物车的商品
  @State bookList:Array<IBook> = []
  // 全选复选框的数据
  @State isAllChecked:boolean = false;
  // 定义一个状态,表示当前是否登录
  @State isLogin:boolean = storage.get("username");

  //获取购物车数据:
  getCarts(){
    const httpCreate = http.createHttp();
    httpCreate.request(`http://localhost:3000/carts`,(err,data)=>{
      if(!err){
       this.bookList = JSON.parse(data.result as string);
      }
    })
  }

  // 开闭原则:对扩展开放,对修改(逻辑)关闭。进一步解释,最好程序写成可配置的(数据就是配置项)。
  // 页面(组件)加载完毕
  aboutToAppear(){
    // 如果没有登录,则不获取购物车的数据
    if(this.isLogin){
      this.getCarts();
    }
  }

  // 更新数量
  updateCount(item){
    const httpCreate = http.createHttp();
    httpCreate.request(`http://localhost:3000/carts/${item.id}`,{
      method:http.RequestMethod.PUT,
      extraData:{
        name:item.name,
        price:item.price,
        count:item.count,
        smallJi:item.smallJi
      }
    },(err,data)=>{
      if(!err){
        //更新数量功后,重新获取最新数据
        this.getCarts();
      }
    })
  }

  // 定义加号按钮的功能
  addCount(item:IBook){
    //   点击加号按钮
    if(item.limit && item.count==item.limit){ //做限购的处理
      return;
    }
    item.count++;
    item.smallJi = item.count*item.price;
    console.log("item.count",item.count);
    this.bookList = [...this.bookList];
    this.updateCount(item);
  }

  // 定义减号按钮的功能
  subCount(item:IBook){
    //   点击减号按钮
    if(item.count==1){
      return;
    }
    item.count--;
    item.smallJi = item.count*item.price;
    console.log("item.count",item.count);
    this.bookList = [...this.bookList];
    this.updateCount(item);
  }

  // 全选功能
  checkAll(){
    // 当界面上的复选框选中状态发生变化时,数据跟着变化
    this.isAllChecked = !this.isAllChecked;
    //让其它商品的选中状态跟着同步发生变化
    this.bookList.forEach(item=>item.isChecked = this.isAllChecked);

    this.bookList = [...this.bookList];
  }

  // 反向控制全选框
  backCheckAll(item:IBook){
    console.log(item.name+"的复选框被点了")
    item.isChecked = !item.isChecked;
    // console.log("item.isChecked",item.isChecked)
    // 数组的api:every 表示 当数组的每一项如果都符合回调函数里写的条件时,every的返回值是true;否则,返回false。
    // if(this.bookList.every(item=>item.isChecked==true)===true){
    //   this.isAllChecked= true;
    // }else{
    //   this.isAllChecked = false;
    // }
    this.isAllChecked = this.bookList.every(item=>item.isChecked==true);
    this.bookList = [...this.bookList];
  }

  // 总计
  totalMoney(){
    // let money = 0;
    // this.bookList.forEach(item=>{
    //   if(item.isChecked){
    //     money+=item.smallJi;
    //   }
    // })
    // return money;
    //
    return this.bookList.reduce((preValue,item)=>{return preValue+(item.isChecked?item.smallJi:0)},0)
  }

  // 删除购物车的商品
  deleteGoods(id){

    const httpCreate = http.createHttp();
    httpCreate.request(`http://localhost:3000/carts/${id}`,{
      method:http.RequestMethod.DELETE
    },(err,data)=>{
      if(!err){
        //删除成功后,重新获取最新数据
        this.getCarts();
      }
    })

  }

  // UI的描述
  build() {
    Column(){
      // 本页面的标签
      Row() {
        Image($r("app.media.back")).width(50).height(30).margin(20).onClick(()=>{
          router.back();
        })
        Blank().width(60)
        Text("购物车")
          .fontSize(30)
          .width("100%")
          .height(60)
      }
      if(!this.isLogin){
        Column(){
          Text("亲,您还没有登录").fontSize(30).fontColor(Color.Red);
          Button("请登录").onClick(()=>{
            router.replaceUrl({
              url:"pages/Login",
              params:{
                from:"pages/Index",
                data:1
              }
            })
          })
        }
      }else{
        // 购物车的标题行
        Row(){
          Checkbox()
            .select(this.isAllChecked)
            .onClick(()=>{
              this.checkAll();
            })
          Text("名称")
            .width(80)
          Text("价格")
            .width(40)
          Text("数量")
            .width(96)
            .textAlign(TextAlign.Center)
          Text("小计")
            .width(60)
            .textAlign(TextAlign.Center)
          Text("删除")
            .width(60)
            .textAlign(TextAlign.Center)
        }
        .width("100%")
        .height(60)
        .backgroundColor(0xededed)

        // 购物车中的数据的显示
        ForEach(this.bookList,(item,idx)=>{
          Row(){
            Checkbox().select(item.isChecked)
              .onClick(()=>{
                this.backCheckAll(item);
              })
            Text(item.name)
              .width(65)
            Text(item.price.toString())
              .width(50)
              .textAlign(TextAlign.Center)

            Counter() {
              Text(this.bookList[idx].count.toString())
            }.margin(10)
            .onInc(() => {
              this.addCount(item);
            })
            .onDec(() => {
              this.subCount(item);
            })
            // 小计
            Text((this.bookList[idx].smallJi).toString()).width(55)
            Image("/imgs/delete.png").width(40).height(40).onClick(()=>{
              this.deleteGoods(item.id)
            })
          }
          .width("100%")
          .height(60)
        })
        Divider().strokeWidth(10)
        Text(`总计:${this.totalMoney()}`)
      }
    }
    .width("100%")
    .height("100%")

  }
}

四、我的


import {storage} from "../utils/globaldata"

import router from '@ohos.router'
@Entry
@Component
export default struct My {

  //页面创建加载完毕
  aboutToAppear(){
    console.log("My:aboutToAppear")
  }
  // 页面显示
  onPageShow(){
    console.log("My:onPageShow")
  }
  // 页面隐藏
  onPageHide(){
    console.log("My:onPageHide")
  }
  // 销毁
  aboutToDisappear(){
    console.log("My:aboutToDisappear")
  }

  toLogin(){
    router.replaceUrl({
      url:"pages/Login",
      params:{
        from:"pages/Index",
        data:2
      }
    })
  }

  logout(){
    storage.delete("username");
    router.pushUrl({
      url:"pages/Index"
    })
  }

  build() {
    Scroll() {
      Column() {
        Row(){
          Image($r("app.media.back")).width(50).height(30).margin(20).onClick(()=>{
            router.back();
          })
          Button("去注册").onClick(()=>{
            router.pushUrl({
              url:"pages/Reg"
            })
          })
          Button("去登录").onClick(()=>{
           this.toLogin()
          })
          Button("退出登录").onClick(()=>{
            this.logout()
          })
          Button("修改密码").onClick(()=>{
            router.pushUrl({
              url:"pages/Password"
            })
          })
        }.width("100%").height(60)
        Row() {
          Image("/imgs/1.jpg").width(140).height(140).borderRadius(70).onClick(()=>{
            this.toLogin();
          })
        }.width("100%")
        .height(200)
        .margin({
          top: 50
        })
        .justifyContent(FlexAlign.Center)
        // 如果当前处于登录状态(是否保存着有用户名)
        if(storage.get('username')){
          Text(storage.get('username')).fontSize(30)
          Text(storage.get('phone')).fontSize(30).margin(10)
        }

        Blank().height(20)
        Divider().strokeWidth(2).backgroundColor(0xededed)

        Blank().height(20)
        Grid() {
          GridItem() {
            Text("待付款")
              .fontSize(20)
              .width(90)
              .height(90)
              .backgroundColor(0xededed)
              .borderRadius(10)
              .textAlign(TextAlign.Center)
          }

          GridItem() {
            Text("我的订单")
              .fontSize(20)
              .width(90)
              .height(90)
              .backgroundColor(0xededed)
              .borderRadius(10)
              .textAlign(TextAlign.Center)
          }

          GridItem() {
            Text("店铺关注")
              .fontSize(20)
              .width(90)
              .height(90)
              .backgroundColor(0xededed)
              .borderRadius(10)
              .textAlign(TextAlign.Center)
          }
        }
        .columnsTemplate('1fr 1fr 1fr')
        .rowsTemplate('1fr 1fr')
        .columnsGap(10)
        .rowsGap(10)
        .width('95%')
        .height(110)
        .backgroundColor(Color.White)
        .borderRadius(10)


        Blank().height(20)
        Divider().strokeWidth(2).backgroundColor(0xededed)
        Blank().height(20)

        Grid() {
          GridItem() {
            Text("优惠券")
              .fontSize(20)
              .width(90)
              .height(90)
              .backgroundColor(0xededed)
              .borderRadius(10)
              .textAlign(TextAlign.Center)
          }

          GridItem() {
            Text("我的足迹")
              .fontSize(20)
              .width(90)
              .height(90)
              .backgroundColor(0xededed)
              .borderRadius(10)
              .textAlign(TextAlign.Center)
          }

          GridItem() {
            Text("我的收藏")
              .fontSize(20)
              .width(90)
              .height(90)
              .backgroundColor(0xededed)
              .borderRadius(10)
              .textAlign(TextAlign.Center)
          }

          GridItem() {
            Text("浏览记录")
              .fontSize(20)
              .width(90)
              .height(90)
              .backgroundColor(0xededed)
              .borderRadius(10)
              .textAlign(TextAlign.Center)
          }

          GridItem() {
            Text("我的常卖")
              .fontSize(20)
              .width(90)
              .height(90)
              .backgroundColor(0xededed)
              .borderRadius(10)
              .textAlign(TextAlign.Center)
          }

          GridItem() {
            Text("我的推荐")
              .fontSize(20)
              .width(90)
              .height(90)
              .backgroundColor(0xededed)
              .borderRadius(10)
              .textAlign(TextAlign.Center)
          }
        }
        .columnsTemplate('1fr 1fr 1fr')
        .rowsTemplate('1fr 1fr')
        .columnsGap(10)
        .rowsGap(10)
        .width('95%')
        .height(220)
        .backgroundColor(Color.White)
        .borderRadius(10)

      }
      .align(Alignment.Start)
    }.height("100%")
    .width("100%")
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/270957.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ai企业系统源码 Ai企联系统源码 商用去授权 支持文心 星火 GPT4等等20多种接口

智思Ai系统2.4.9版本去授权&#xff08;可商用&#xff09;支持市面上所有版本的接口例如&#xff1a;文心、星火、GPT4等等20多种接口&#xff01;代过审AI小程序类目&#xff01;&#xff01;&#xff01; 安装步骤&#xff1a; 1、在宝塔新建个站点&#xff0c;php版本使用…

【华为机试】2023年真题B卷(python)-分糖果

一、题目 题目描述&#xff1a; 小明从糖果盒中随意抓一把糖果&#xff0c;每次小明会取出一半的糖果分给同学们。 当糖果不能平均分配时&#xff0c;小明可以选择从糖果盒中&#xff08;假设盒中糖果足够&#xff09;取出一个糖果或放回一个糖果。 小明最少需要多少次&#xf…

2007年AMC8数学竞赛中英文真题典型考题、考点分析和答案解析

今天&#xff0c;我们来继续研究AMC8竞赛的真题。通过反复研究历年真题&#xff0c;不仅可以掌握AMC8这个竞赛的命题规律和常见考点&#xff0c;通过真题的详细解析可以建立自己的解题思路、举一反三&#xff0c;还可以通过做真题不断发现自己的薄弱点查漏补缺。 今天我们来看看…

FreeRTOS互斥量解决优先级反转问题

FreeRTOS互斥量 目录 FreeRTOS互斥量一、概念二、优先级反转三、互斥量解决优先级反转 一、概念 FreeRTOS中的互斥量&#xff08;Mutex&#xff09;是一种特殊的二值信号量&#xff0c;它支持互斥量所有权、递归访问以及防止优先级翻转的特性。在FreeRTOS中&#xff0c;互斥量…

pytorch中池化函数详解

1 池化概述 1.1 什么是池化 池化层是卷积神经网络中常用的一个组件&#xff0c;池化层经常用在卷积层后边&#xff0c;通过池化来降低卷积层输出的特征向量&#xff0c;避免出现过拟合的情况。池化的基本思想就是对不同位置的特征进行聚合统计。池化层主要是模仿人的视觉系统…

人工智能:网络犯罪分子的驱动力

随着 2024 年的临近&#xff0c;是时候展望今年的网络安全状况了。由于网络犯罪日益复杂&#xff0c;预计到 2025 年&#xff0c;全球网络安全成本将增至 10.5 万亿美元。 人工智能的使用不断发展&#xff0c;网络犯罪分子变得越来越有创造力 我们注意到&#xff0c;联邦调查…

2023年12月25日:串口发出控制命令

代码 uart4.c #include "uart4.h"void uart4_config() {//*****************************************//使能GPIOB|GPIOG|UART4外设时钟RCC->MP_AHB4ENSETR |(0x1<<6);RCC->MP_AHB4ENSETR |(0x1<<1);RCC->MP_APB1ENSETR |(0x1<<16);RCC…

云计算:现代技术的基本要素

众所周知&#xff0c;在儿童教育的早期阶段&#xff0c;幼儿园都会传授塑造未来行为的一些基本准则。 今天&#xff0c;我们可以以类似的方式思考云计算&#xff1a;它已成为现代技术架构中的基本元素。云现在在数字交互、安全和基础设施开发中发挥着关键作用。云不仅仅是另一…

小狐狸GPT付费2.4.9 去除授权弹窗版

后台安装步骤&#xff1a; 1、在宝塔新建个站点&#xff0c;php版本使用7.2 、 7.3 或 7.4&#xff0c;把压缩包上传到站点根目录&#xff0c;运行目录设置为/public 2、导入数据库文件&#xff0c;数据库文件是 /db.sql 3、修改数据库连接配置&#xff0c;配置文件是/.env 4、…

LED驱动电源

LED驱动电源 常用电子元器件 TB62726AFG LED SOP-24 文章目录 LED驱动电源前言一、LED驱动电源是什么二、TB62726AFG LED SOP-24总结 前言 LED驱动电源可以根据应用需求采用不同的输入和输出电源类型、电源转换拓扑、调光方式等。常见的LED驱动电源类型包括恒流驱动电源、恒…

3分钟了解安全数据交换系统有什么用!

企业为了保护核心数据安全&#xff0c;都会采取一些措施&#xff0c;比如做网络隔离划分&#xff0c;分成了不同的安全级别网络&#xff0c;或者安全域&#xff0c;接下来就是需要建设跨网络、跨安全域的安全数据交换系统&#xff0c;将安全保障与数据交换功能有机整合在一起&a…

uni-app封装表格组件

组件代码&#xff1a; <template><view><uni-table class"tableBox" border stripe emptyText"暂无更多数据" ><!-- 表头行 --><uni-tr class"tableTr"><uni-th align"center" v-for"item in …

LNPMariadb数据库分离|web服务器集群

LNP&Mariadb数据库分离&#xff5c;web服务器集群 网站架构演变单机版LNMP独立数据库服务器web服务器集群与Session保持 LNP与数据库分离1. 准备一台独立的服务器&#xff0c;安装数据库软件包2. 将之前的LNMP网站中的数据库迁移到新的数据库服务器3. 修改wordpress网站配置…

共享和独享的区别是什么?有必要用独享IP吗?

通俗地讲&#xff0c;共享IP就像乘坐公共汽车一样&#xff0c;您可以到达目的地&#xff0c;但将与其他乘客共享旅程&#xff0c;座位很可能是没有的。独享IP就像坐出租车一样&#xff0c;您可以更快到达目的地&#xff0c;由于车上只有您一个人&#xff0c;座位是您一个人专用…

【技术分享】单网口远程透传网关快速实现昆仑通态触摸屏程序远程上下载及监控

准备工作 一台可联网操作的电脑一台单网口的远程透传网关及博达远程透传配置工具网线一条&#xff0c;用于实现网络连接和连接触摸屏一台昆仑通态触摸屏及其编程软件一张4G卡或WIFI天线实现通讯(使用4G联网则插入4G SIM卡&#xff0c;WIFI联网则将WIFI天线插入USB口&#xff0…

String 的特点是什么?它有哪些重要的方法?

几乎所有的 Java 面试都是以 String 开始的&#xff0c;如果第一个问题没有回答好&#xff0c;则会给面试官留下非常不好的第一印象&#xff0c;而糟糕的第一印象则会直接影响到自己的面试结果&#xff0c;就好像刚破壳的小鹅一样&#xff0c;会把第一眼看到的动物当成自己的母…

走进数字金融峰会,为金融科技数字化赋能

12月20—21日&#xff0c;FSIDigital数字金融峰会在上海圆满召开。本次峰会包含InsurDigital数字保险峰会和B&SDigital数字银行与证券峰会2场平行峰会&#xff1b;吸引了近600位来自保险、银行、证券以及金融科技等行业的领导者和专家齐聚一堂&#xff0c;共同探讨金融业数…

数据库01_增删改查

1、什么是数据&#xff1f;什么是数据库&#xff1f; 数据&#xff1a;描述事物的符号记录称为数据。数据是数据库中存储的基本对象。数据库&#xff1a;存放数据的仓库&#xff0c;数据库中可以保存文本型数据、二进制数据、多媒体数据等数据 2、数据库的发展 第一阶段&…

docker-compose部署kafka

docker-compose.yml配置 version: "3" services:kafka:image: bitnami/kafka:latestports:- 7050:7050environment:- KAFKA_ENABLE_KRAFTyes- KAFKA_CFG_PROCESS_ROLESbroker,controller- KAFKA_CFG_CONTROLLER_LISTENER_NAMESCONTROLLER- KAFKA_CFG_LISTENERSPLAIN…

面向对象设计与分析40讲(15)简单工厂方法模式

文章目录 定义示例优缺点定义 简单工厂模式是一种创建型模式,用于根据客户端的需求创建对象实例,所谓的需求反映到编程语言里就是传入的参数。 简单工厂模式包括三个主要部分: 工厂类(Simple Factory):这是整个模式的核心。它负责根据客户端的请求来创建并返回相应的对…