天马学航——智慧教务系统(移动端)开发日志三

天马学航——智慧教务系统(移动端)开发日志三

日志摘要:更新了学生选课模块、我的课程模块以及退课的功能,优化了后端数据库的缓存

1、学生选课模块

学生选课模块主要实现,学生根据需求进行选课操作,通过后端查询到所有教师的课程,展示在前端,然后根据前端进行选择,选择后发给后端,后端再进行判断,将选课信息返回前端

界面效果
image-20240620111914879
前端源码
struct SelectCourse {
  @State courses:SCourse[] = []

  aboutToAppear(){
    this.getCourse()
  }

  build() {
    Column({ space: 5 }) {
      Text(" ")
      Row({ space: 10 }) {
        Text(" ")
        Image($r('app.media.back'))
          .width(30)
          .height(30)
          .onClick(function () {
            //返回上一页
            router.back() //直接返回
          })
        Text("学生选课")
          .fontSize(30)
          .fontWeight(FontWeight.Bolder)
      }
      .width('100%')

      Text("----------------------------------------------")
      Text(" ")
      List({space:50}){
        ForEach(
          this.courses,
          course=>{
            ListItem(){
              Row({space:30}){
                Text(" ")
                Column({space:20}){
                  Text(course.cname)
                    .fontColor(Color.Green)
                    .fontSize(15)
                    .fontWeight(FontWeight.Bolder)
                    .fontFamily("楷体")
                    Text("课程号:"+course.cid)
                      .fontSize(10)
                      .fontColor(Color.Red)
                    Text("任课教师:"+course.tname)
                      .fontSize(10)
                      .fontColor(Color.Green)
                }
                .justifyContent(FlexAlign.Start)
                .alignItems(HorizontalAlign.Start)
                Blank()
                Button("选择")
                  .onClick(()=>{
                    console.log("学生点击了:"+course.cname)
                    StudentAddCourse.STA(course.cid,course.cname,course.tname)
                      .then(resp=>{
                        console.log("前端收到消息!"+resp)
                        promptAction.showToast({
                          message: resp,
                          duration: 2000,
                          bottom: 50
                        });
                      })
                  })
              }
              .width('95%')
              .height(150)
              //.padding(20)
              .backgroundColor(Color.White)
              .borderRadius(15)
              .shadow({ radius: 6, color: '#1F000000', offsetX: 2, offsetY: 4 })
            }
          }
        )
      }
      .width('100%')
    }
    .width('100%')
  }
  getCourse(){
    GetCourse.GC()
      .then(resp=>{
        console.log("请求成功"+resp)
        if(resp.length === 0){
          promptAction.showToast({
            message: '暂无可选课程',
            duration: 2000,
            bottom: 50
          });
        }
        this.courses = resp;
      })
  }
}
请求源码
请求所有课程部分
class GetCourse {
  baseURL: string = IP.ip

  GC(): Promise<SCourse[]> {
    return new Promise((resolve, reject) => {
      let Http = http.createHttp()
      Http.request(
        `${this.baseURL}/GCourse`,
        {
          method: http.RequestMethod.GET,
          connectTimeout: 10000,
          readTimeout: 10000
        }
      )
        .then(resp=>{
          if(resp.responseCode === 200){
            console.log("请求成功"+resp.result)
            resolve(JSON.parse(resp.result.toString()))
          }
          else {
            console.log("请求发现异常"+resp.responseCode)
          }
        })
        .catch(error=>{
          console.log("请求失败")
        })
    })
  }
}

const gc = new GetCourse()
export default gc as GetCourse
向后端发送选课结果部分
class StudentAddCourse{
  baseURL: string = IP.ip
  STA(cid:string,cname:string,cteacher:string):Promise<string>{
    const data = {
      cid:cid,
      cname:cname,
      cteacher:cteacher
    }
    return new Promise((resolve, reject) => {
      let httpRequest = http.createHttp()
      httpRequest.request(
        `${this.baseURL}/StuSelectcourse`,
        {
          method:http.RequestMethod.GET,
          extraData:data,
          connectTimeout: 10000,
          readTimeout:10000
        },
      )
        .then(resp=>{
          if(resp.responseCode === 200){
            console.log("请求成功:"+resp.result)
            resolve(resp.result.toString())
          }
          else {
            console.log("请求失败:"+resp.responseCode)
          }
        })
        .catch(error=>{
          console.log("检查链接!")
        })
    })
  }
}

const aa = new StudentAddCourse()
export default aa as StudentAddCourse
后端源码
请求所有课程部分
public class getCourse extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("application/json");
        resp.setCharacterEncoding("UTF-8");

        //Mybatis
        SqlSession sql = MybatisUntills.getSqlSession();
        CourseMapper mapper = sql.getMapper(CourseMapper.class);
        List<SelectCourse> allCourse = mapper.getAllCourse();//执行并返回数据
        for (SelectCourse selectCourse : allCourse) {
            System.out.println(selectCourse.getCid()+selectCourse.getCname()+selectCourse.getTname());
        }
        sql.close();

        //打包
        Gson gson = new Gson();
        String JsonData = gson.toJson(allCourse);
        //发送
        resp.getWriter().write(JsonData);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
接收学生选课信息部分
public class StuSelectCourse extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("application/json");
        resp.setCharacterEncoding("UTF-8");
        ServletContext c = getServletContext();
        HttpSession session = req.getSession();
        String username = (String) session.getAttribute("username");
        if(username == null){
            username = (String) c.getAttribute("username");
        }

        String cid = req.getParameter("cid");
        String cname = req.getParameter("cname");
        String ct = req.getParameter("cteacher");
        System.out.println("课程号"+cid);

        //Mybatis
        SqlSession sql = MybatisUntills.getSqlSession();
        CourseMapper mapper = sql.getMapper(CourseMapper.class);
        Map<String,Object> map1 = new HashMap<String, Object>();
        map1.put("cid",cid);
        map1.put("sid",username);
        String strings = mapper.showStudentCourse(map1);
        if(strings!=null){
            resp.getWriter().write("后端返回信息:该课程已存在!");
            sql.close();
        }
        else {
            Map<String,Object> map = new HashMap<String, Object>();
            map.put("cid",cid);
            map.put("sid",username);
            int i = mapper.addStudentCourse(map);
            sql.commit();
            if(i==1){
                resp.getWriter().write("后端返回信息:选课成功!");
                System.out.println("成!");
            }
            else {
                resp.getWriter().write("后端返回信息:选课失败!");
            }
            sql.close();
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

2、我的课程(退课模块)

主要显示该用户选择的所有课程,并提供退课的选项,后端查询,前端显示,前端选择,后端判断,将信息返回前端

界面效果
image-20240620111914879
前端源码
struct MyCourse{
  @State courses:StudentMyCourse[] = []

  aboutToAppear(){
    this.MyCourses()
  }

  build() {
    Column({ space: 5 }) {
      Text(" ")
      Row({ space: 10 }) {
        Text(" ")
        Image($r('app.media.back'))
          .width(30)
          .height(30)
          .onClick(function () {
            //返回上一页
            router.back() //直接返回
          })
        Text("我的课程")
          .fontSize(30)
          .fontWeight(FontWeight.Bolder)
      }
      .width('100%')

      Text("----------------------------------------------")
      Text(" ")
      List({space:50}){
        ForEach(
          this.courses,
          course=>{
            ListItem(){
              Row({space:30}){
                Text(" ")
                Column({space:20}){
                  Text(course.cname)
                    .fontColor(Color.Green)
                    .fontSize(15)
                    .fontWeight(FontWeight.Bolder)
                    .fontFamily("楷体")
                  Text("课程号:"+course.cid)
                    .fontSize(10)
                    .fontColor(Color.Red)
                  Text("任课教师:"+course.tname)
                    .fontSize(10)
                    .fontColor(Color.Green)
                  Text("上课时间:"+course.ctime)
                    .fontSize(10)
                    .fontColor(Color.Green)
                }
                .justifyContent(FlexAlign.Start)
                .alignItems(HorizontalAlign.Start)
                Blank()
                Button("退课")
                  .backgroundColor(Color.Red)
                  .onClick(()=>{
                    console.log("学生点击了:"+course.cname)
                    DeletCourse.STA(course.cname,course.cid,course.tname,course.ctime)
                      .then(resp=>{
                        console.log("返回成功"+resp)
                        promptAction.showToast({
                          message: resp,
                          duration: 2000,
                          bottom: 50
                        });
                      })
                  })
              }
              .width('95%')
              .height(150)
              //.padding(20)
              .backgroundColor(Color.White)
              .borderRadius(15)
              .shadow({ radius: 6, color: '#1F000000', offsetX: 2, offsetY: 4 })
            }
          }
        )
      }
      .width('100%')
    }
  }
  MyCourses(){
    GetStudentCourse.GC()
      .then(resp=>{
        console.log("返回信息成功"+resp.toString())
        if(resp.length === 0){
          promptAction.showToast({
            message: '您还没有选课哦~',
            duration: 2000,
            bottom: 50
          });
        }
        this.courses = resp
      })
  }
}
请求源码
请求所选课程
class GetStudentCourse {
  baseURL: string = IP.ip

  GC(): Promise<StudentMyCourse[]> {
    return new Promise((resolve, reject) => {
      let Http = http.createHttp()
      Http.request(
        `${this.baseURL}/GetMyCourse`,
        {
          method: http.RequestMethod.GET,
          connectTimeout: 10000,
          readTimeout: 10000
        }
      )
        .then(resp => {
          if (resp.responseCode === 200) {
            console.log("请求成功" + resp.result)
            resolve(JSON.parse(resp.result.toString()))
          }
          else {
            console.log("请求成功,但是出现问题" + resp.responseCode)
          }
        })
        .catch(error => {
          console.log("请求失败" + error)
        })
    })
  }
}

const sc = new GetStudentCourse()
export default sc as GetStudentCourse
向后端发送退课信息
class DeletCourse {

  baseURL: string = IP.ip

  STA(cname: string, cid: string, tname: string,ctime: string): Promise<string> {
    const data = {
      cname: cname,
      cid: cid,
      tname: tname,
      ctime:ctime
    }
    return new Promise((resolve, reject) => {
      let httpRequest = http.createHttp()
      httpRequest.request(
        `${this.baseURL}/DeletMyCourse`,
        {
          method: http.RequestMethod.GET,
          extraData: data,
          connectTimeout: 10000,
          readTimeout: 10000
        },
      )
        .then(resp=>{
          if(resp.responseCode===200){
            console.log("请求成功!"+resp.result)
            resolve(resp.result.toString())
          }
          else {
            console.log("请求发生错误"+resp.responseCode)
          }
        })
        .catch(err=>{
          console.log("请求失败"+err)
        })
    })
  }
}

const sc = new DeletCourse()
export default sc as DeletCourse

后端代码与选课部分相同,这里不再赘述

3、BUG修复

修复了Mybatis二级缓存溢出导致查询变慢的问题

天马学航——智慧教务系统(移动端)开发日志二

日志摘要:更新了学生选课模块、我的课程模块以及退课的功能,优化了后端数据库的缓存

1、学生选课模块

学生选课模块主要实现,学生根据需求进行选课操作,通过后端查询到所有教师的课程,展示在前端,然后根据前端进行选择,选择后发给后端,后端再进行判断,将选课信息返回前端

界面效果
image-20240620111914879
前端源码
struct SelectCourse {
  @State courses:SCourse[] = []

  aboutToAppear(){
    this.getCourse()
  }

  build() {
    Column({ space: 5 }) {
      Text(" ")
      Row({ space: 10 }) {
        Text(" ")
        Image($r('app.media.back'))
          .width(30)
          .height(30)
          .onClick(function () {
            //返回上一页
            router.back() //直接返回
          })
        Text("学生选课")
          .fontSize(30)
          .fontWeight(FontWeight.Bolder)
      }
      .width('100%')

      Text("----------------------------------------------")
      Text(" ")
      List({space:50}){
        ForEach(
          this.courses,
          course=>{
            ListItem(){
              Row({space:30}){
                Text(" ")
                Column({space:20}){
                  Text(course.cname)
                    .fontColor(Color.Green)
                    .fontSize(15)
                    .fontWeight(FontWeight.Bolder)
                    .fontFamily("楷体")
                    Text("课程号:"+course.cid)
                      .fontSize(10)
                      .fontColor(Color.Red)
                    Text("任课教师:"+course.tname)
                      .fontSize(10)
                      .fontColor(Color.Green)
                }
                .justifyContent(FlexAlign.Start)
                .alignItems(HorizontalAlign.Start)
                Blank()
                Button("选择")
                  .onClick(()=>{
                    console.log("学生点击了:"+course.cname)
                    StudentAddCourse.STA(course.cid,course.cname,course.tname)
                      .then(resp=>{
                        console.log("前端收到消息!"+resp)
                        promptAction.showToast({
                          message: resp,
                          duration: 2000,
                          bottom: 50
                        });
                      })
                  })
              }
              .width('95%')
              .height(150)
              //.padding(20)
              .backgroundColor(Color.White)
              .borderRadius(15)
              .shadow({ radius: 6, color: '#1F000000', offsetX: 2, offsetY: 4 })
            }
          }
        )
      }
      .width('100%')
    }
    .width('100%')
  }
  getCourse(){
    GetCourse.GC()
      .then(resp=>{
        console.log("请求成功"+resp)
        if(resp.length === 0){
          promptAction.showToast({
            message: '暂无可选课程',
            duration: 2000,
            bottom: 50
          });
        }
        this.courses = resp;
      })
  }
}
请求源码
请求所有课程部分
class GetCourse {
  baseURL: string = IP.ip

  GC(): Promise<SCourse[]> {
    return new Promise((resolve, reject) => {
      let Http = http.createHttp()
      Http.request(
        `${this.baseURL}/GCourse`,
        {
          method: http.RequestMethod.GET,
          connectTimeout: 10000,
          readTimeout: 10000
        }
      )
        .then(resp=>{
          if(resp.responseCode === 200){
            console.log("请求成功"+resp.result)
            resolve(JSON.parse(resp.result.toString()))
          }
          else {
            console.log("请求发现异常"+resp.responseCode)
          }
        })
        .catch(error=>{
          console.log("请求失败")
        })
    })
  }
}

const gc = new GetCourse()
export default gc as GetCourse
向后端发送选课结果部分
class StudentAddCourse{
  baseURL: string = IP.ip
  STA(cid:string,cname:string,cteacher:string):Promise<string>{
    const data = {
      cid:cid,
      cname:cname,
      cteacher:cteacher
    }
    return new Promise((resolve, reject) => {
      let httpRequest = http.createHttp()
      httpRequest.request(
        `${this.baseURL}/StuSelectcourse`,
        {
          method:http.RequestMethod.GET,
          extraData:data,
          connectTimeout: 10000,
          readTimeout:10000
        },
      )
        .then(resp=>{
          if(resp.responseCode === 200){
            console.log("请求成功:"+resp.result)
            resolve(resp.result.toString())
          }
          else {
            console.log("请求失败:"+resp.responseCode)
          }
        })
        .catch(error=>{
          console.log("检查链接!")
        })
    })
  }
}

const aa = new StudentAddCourse()
export default aa as StudentAddCourse
后端源码
请求所有课程部分
public class getCourse extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("application/json");
        resp.setCharacterEncoding("UTF-8");

        //Mybatis
        SqlSession sql = MybatisUntills.getSqlSession();
        CourseMapper mapper = sql.getMapper(CourseMapper.class);
        List<SelectCourse> allCourse = mapper.getAllCourse();//执行并返回数据
        for (SelectCourse selectCourse : allCourse) {
            System.out.println(selectCourse.getCid()+selectCourse.getCname()+selectCourse.getTname());
        }
        sql.close();

        //打包
        Gson gson = new Gson();
        String JsonData = gson.toJson(allCourse);
        //发送
        resp.getWriter().write(JsonData);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
接收学生选课信息部分
public class StuSelectCourse extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("application/json");
        resp.setCharacterEncoding("UTF-8");
        ServletContext c = getServletContext();
        HttpSession session = req.getSession();
        String username = (String) session.getAttribute("username");
        if(username == null){
            username = (String) c.getAttribute("username");
        }

        String cid = req.getParameter("cid");
        String cname = req.getParameter("cname");
        String ct = req.getParameter("cteacher");
        System.out.println("课程号"+cid);

        //Mybatis
        SqlSession sql = MybatisUntills.getSqlSession();
        CourseMapper mapper = sql.getMapper(CourseMapper.class);
        Map<String,Object> map1 = new HashMap<String, Object>();
        map1.put("cid",cid);
        map1.put("sid",username);
        String strings = mapper.showStudentCourse(map1);
        if(strings!=null){
            resp.getWriter().write("后端返回信息:该课程已存在!");
            sql.close();
        }
        else {
            Map<String,Object> map = new HashMap<String, Object>();
            map.put("cid",cid);
            map.put("sid",username);
            int i = mapper.addStudentCourse(map);
            sql.commit();
            if(i==1){
                resp.getWriter().write("后端返回信息:选课成功!");
                System.out.println("成!");
            }
            else {
                resp.getWriter().write("后端返回信息:选课失败!");
            }
            sql.close();
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

2、我的课程(退课模块)

主要显示该用户选择的所有课程,并提供退课的选项,后端查询,前端显示,前端选择,后端判断,将信息返回前端

界面效果
image-20240620111914879
前端源码
struct MyCourse{
  @State courses:StudentMyCourse[] = []

  aboutToAppear(){
    this.MyCourses()
  }

  build() {
    Column({ space: 5 }) {
      Text(" ")
      Row({ space: 10 }) {
        Text(" ")
        Image($r('app.media.back'))
          .width(30)
          .height(30)
          .onClick(function () {
            //返回上一页
            router.back() //直接返回
          })
        Text("我的课程")
          .fontSize(30)
          .fontWeight(FontWeight.Bolder)
      }
      .width('100%')

      Text("----------------------------------------------")
      Text(" ")
      List({space:50}){
        ForEach(
          this.courses,
          course=>{
            ListItem(){
              Row({space:30}){
                Text(" ")
                Column({space:20}){
                  Text(course.cname)
                    .fontColor(Color.Green)
                    .fontSize(15)
                    .fontWeight(FontWeight.Bolder)
                    .fontFamily("楷体")
                  Text("课程号:"+course.cid)
                    .fontSize(10)
                    .fontColor(Color.Red)
                  Text("任课教师:"+course.tname)
                    .fontSize(10)
                    .fontColor(Color.Green)
                  Text("上课时间:"+course.ctime)
                    .fontSize(10)
                    .fontColor(Color.Green)
                }
                .justifyContent(FlexAlign.Start)
                .alignItems(HorizontalAlign.Start)
                Blank()
                Button("退课")
                  .backgroundColor(Color.Red)
                  .onClick(()=>{
                    console.log("学生点击了:"+course.cname)
                    DeletCourse.STA(course.cname,course.cid,course.tname,course.ctime)
                      .then(resp=>{
                        console.log("返回成功"+resp)
                        promptAction.showToast({
                          message: resp,
                          duration: 2000,
                          bottom: 50
                        });
                      })
                  })
              }
              .width('95%')
              .height(150)
              //.padding(20)
              .backgroundColor(Color.White)
              .borderRadius(15)
              .shadow({ radius: 6, color: '#1F000000', offsetX: 2, offsetY: 4 })
            }
          }
        )
      }
      .width('100%')
    }
  }
  MyCourses(){
    GetStudentCourse.GC()
      .then(resp=>{
        console.log("返回信息成功"+resp.toString())
        if(resp.length === 0){
          promptAction.showToast({
            message: '您还没有选课哦~',
            duration: 2000,
            bottom: 50
          });
        }
        this.courses = resp
      })
  }
}
请求源码
请求所选课程
class GetStudentCourse {
  baseURL: string = IP.ip

  GC(): Promise<StudentMyCourse[]> {
    return new Promise((resolve, reject) => {
      let Http = http.createHttp()
      Http.request(
        `${this.baseURL}/GetMyCourse`,
        {
          method: http.RequestMethod.GET,
          connectTimeout: 10000,
          readTimeout: 10000
        }
      )
        .then(resp => {
          if (resp.responseCode === 200) {
            console.log("请求成功" + resp.result)
            resolve(JSON.parse(resp.result.toString()))
          }
          else {
            console.log("请求成功,但是出现问题" + resp.responseCode)
          }
        })
        .catch(error => {
          console.log("请求失败" + error)
        })
    })
  }
}

const sc = new GetStudentCourse()
export default sc as GetStudentCourse
向后端发送退课信息
class DeletCourse {

  baseURL: string = IP.ip

  STA(cname: string, cid: string, tname: string,ctime: string): Promise<string> {
    const data = {
      cname: cname,
      cid: cid,
      tname: tname,
      ctime:ctime
    }
    return new Promise((resolve, reject) => {
      let httpRequest = http.createHttp()
      httpRequest.request(
        `${this.baseURL}/DeletMyCourse`,
        {
          method: http.RequestMethod.GET,
          extraData: data,
          connectTimeout: 10000,
          readTimeout: 10000
        },
      )
        .then(resp=>{
          if(resp.responseCode===200){
            console.log("请求成功!"+resp.result)
            resolve(resp.result.toString())
          }
          else {
            console.log("请求发生错误"+resp.responseCode)
          }
        })
        .catch(err=>{
          console.log("请求失败"+err)
        })
    })
  }
}

const sc = new DeletCourse()
export default sc as DeletCourse

后端代码与选课部分相同,这里不再赘述

3、BUG修复

修复了Mybatis二级缓存溢出导致查询变慢的问题

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

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

相关文章

动手学深度学习(Pytorch版)代码实践 -计算机视觉-37微调

37微调 import os import torch import torchvision from torch import nn import liliPytorch as lp import matplotlib.pyplot as plt from d2l import torch as d2l# 获取数据集 d2l.DATA_HUB[hotdog] (d2l.DATA_URL hotdog.zip,fba480ffa8aa7e0febbb511d181409f899b9baa5…

手撕RPC——前言

手撕RPC——前言 一、RPC是什么&#xff1f;二、为什么会出现RPC三、RPC的原理3.1 RPC是如何做到透明化远程服务调用&#xff1f;3.2 如何实现传输消息的编解码&#xff1f; 一、RPC是什么&#xff1f; RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff…

RealityCheck™电机监测和预测性维护模型

RealityCheck™电机 一个附加的软件工具箱&#xff0c;可实现条件监测和预测性维护功能&#xff0c;而无需依赖额外的传感器。相反&#xff0c;它使用来自电机控制过程的电子信息作为振动和其他传感器的代理。凭借其先进的信号处理和机器学习(ML)模型&#xff0c;RealityCheck …

示例:推荐一个应用Adorner做的表单对话框

一、目的&#xff1a;开发过程中经常会修改和查看一个Model的数据&#xff0c;一般情况下会自定义一个控件或Window去显示Model数据&#xff0c;但这种数据如果比较多会增加很多开发工作&#xff0c;本文介绍一种通用的方式&#xff0c;应用表达Form控件去简化处理&#xff0c;…

ARM裸机:基础了解

ARM的几种版本号 ARM内核版本号 ARMv7 ARM SoC版本号 Cortex-A8 芯片型号 S5PV210 ARM型号的发展历程 m microcontroller微控制器 就是单片机 a application应用级处理器 就是手机、平板、电脑的CPU r realtime实时处理器 响应速度快,主要用在工业、航天等领域 soc 、cpu、…

Elasticsearch:智能 RAG,获取周围分块(二)

在之前的文章 “Elasticsearch&#xff1a;智能 RAG&#xff0c;获取周围分块&#xff08;一&#xff09; ” 里&#xff0c;它介绍了如何实现智能 RAG&#xff0c;获取周围分块。在那个文章里有一个 notebook。为了方便在本地部署的开发者能够顺利的运行那里的 notebook。在本…

如何在 Mac 上清空硬盘后恢复丢失的数据?

如果您不小心从 Mac 硬盘上删除了重要文件&#xff0c;您可能会感到非常沮丧。但您仍然可以找回丢失的信息。将 Mac 想象成一个大盒子&#xff0c;里面装着所有东西。丢弃某样东西就像撕掉盒子上的标签&#xff1a;房间现在可以放新东西了&#xff0c;但旧东西仍然在那里&#…

文华财经T8自动化交易程序策略模型指标公式源码

文华财经T8自动化交易程序策略模型指标公式源码&#xff1a; //定义变量 //资金管理与仓位控制 8CS:INITMONEY;//初始资金 8QY:MONEYTOT;//实际权益 8QY1:MIN(MA(8QY,5*R),MA(8QY,2*R)); FXBL:N1; DBKS:8QY1*N1;//计算单笔允许亏损额度 BZDKS:MAX(AA-BB,N*1T)*UNIT; SZDKS:MAX…

已解决ApplicationException异常的正确解决方法,亲测有效!!!

已解决ApplicationException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查业务逻辑 验证输入数据 确认服务器端资源的可用性 增加对特殊业务情况的处理…

能正常执行但是 cion 标红/没有字段提示

ctrl q 退出 clion 找到工程根目录&#xff0c;删除隐藏文件 .idea 再重新打开 clion 标红消失&#xff0c;同时再次输入函数/类属性&#xff0c;出现字段提示 clion 的智能提示方案存储在 .idea 文件中&#xff0c;如果工程能够正常编译执行&#xff0c;那么说明是智能提示…

InfoMasker :新型反窃听系统,保护语音隐私

随着智能手机、智能音箱等设备的普及&#xff0c;人们越来越担心自己的谈话内容被窃听。由于这些设备通常是黑盒的&#xff0c;攻击者可能利用、篡改或配置这些设备进行窃听。借助自动语音识别 (ASR) 系统&#xff0c;攻击者可以从窃听的录音中提取受害者的个人信息&#xff0c…

如何搭建饥荒服务器

《饥荒》是由Klei Entertainment开发的一款动作冒险类求生游戏&#xff0c;于2013年4月23日在PC上发行&#xff0c;2015年7月9日在iOS发布口袋版。游戏讲述的是关于一名科学家被恶魔传送到了一个神秘的世界&#xff0c;玩家将在这个异世界生存并逃出这个异世界的故事。《饥荒》…

华为数通——ACL

ACL基本介绍 ACL:访问控制列表&#xff0c;通过端口对数据流进行过滤&#xff0c;ACL判别依据是五元组&#xff1a;源IP地址&#xff0c;源端口&#xff0c;目的IP地址&#xff0c;目的端口、协议。&#xff08;ACL工作于OSI模型第三层&#xff0c;是路由器和三层交换机接口的…

2.超声波测距模块

1.简介 2.超声波的时序图 3.基于51单片机实现的代码 #include "reg52.h" #include "intrins.h" sbit led1P3^7;//小于10&#xff0c;led1亮&#xff0c;led2灭 sbit led2P3^6;//否则&#xff0c;led1灭&#xff0c;led2亮 sbit trigP1^5; sbit echo…

基于51单片机抽奖系统

基于51单片机抽奖系统 &#xff08;仿真&#xff0b;程序&#xff09; 功能介绍 具体功能&#xff1a; 1.利用5片74HC495对单片机的IO进行串并转换&#xff0c;进而控制5个1位数码管&#xff1b; 2.采用一个独立按键用于抽奖系统的启停控制&#xff1b; 3.8位拨码开关是用…

地推利器Xinstall:全方位二维码统计,打造高效地推策略,轻松掌握市场脉搏!

在移动互联网时代&#xff0c;地推作为一种传统的推广方式&#xff0c;依然占据着重要的地位。然而&#xff0c;随着市场竞争的加剧&#xff0c;地推也面临着诸多挑战&#xff0c;如如何有效监测下载来源、解决填码和人工登记的繁琐、避免重复打包和iOS限制、以及如何准确考核推…

Linux基础二

目录 一&#xff0c;tail查看文件尾部指令 二&#xff0c;date显示日期指令 三&#xff0c;cal查看日历指令 四&#xff0c;find搜索指令 五&#xff0c;grep 查找指令 六&#xff0c;> 和>> 重定向输出指令 七&#xff0c; | 管道指令 八&#xff0c;&&逻辑控…

让你的Python代码更简洁:一篇文章带你了解Python列表推导式

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 列表推导式 📒📝 语法📝 条件筛选📝 多重循环📝 列表推导式的优点📝 使用场景📝 示例代码🎯 示例1🎯 示例2⚓️ 相关链接 ⚓️📖 介绍 📖 在Python编程中,列表推导式是一种强大且高效的语法,它允许你用…

江协科技51单片机学习- p14 调试LCD1602显示屏

前言&#xff1a; 本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记&#xff0c;在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。 引用&#xff1a; 51单片机入门教程-2…

YouTube API接口:一键获取Playlist视频合集信息

核心功能介绍 在视频内容日益繁荣的今天&#xff0c;YouTube作为全球领先的视频分享平台&#xff0c;为内容创作者、品牌商家以及数据分析师提供了丰富的视频资源。其中&#xff0c;Playlist视频合集作为YouTube上的一种特色内容形式&#xff0c;深受用户喜爱。为了更好地满足…