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

news2025/1/15 17:12:23

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

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

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二级缓存溢出导致查询变慢的问题

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql 主从延迟

mysql 主从延迟 精华推荐 | 【MySQL技术专题】「主从同步架构」全面详细透析MySQL的三种主从复制&#xff08;Replication&#xff09;机制的原理和实战开发&#xff08;原理实战&#xff09; https://blog.csdn.net/l569590478/article/details/128329929 mysql主从之多线程复…

Nuxt 3 路由系统详解:配置与实践指南

title: Nuxt 3 路由系统详解&#xff1a;配置与实践指南 date: 2024/6/21 updated: 2024/6/21 author: cmdragon excerpt: 摘要&#xff1a;本文是一份关于Nuxt 3路由系统的详尽指南。它从介绍Nuxt 3的基本概念开始&#xff0c;包括Nuxt 3与Nuxt 2的区别和选择Nuxt 3的理由。…

创建OpenWRT虚拟机

环境&#xff1a;Ubuntu 2204&#xff0c;VM VirtualBox 7.0.18 安装必备软件包&#xff1a; sudo apt update sudo apt install subversion automake make cmake uuid-dev gcc vim build-essential clang flex bison g gawk gcc-multilib g-multilib gettext git libncurses…

供应链投毒预警 | utilitytool系列Py包开展XenoRAT远控木马投毒

概述 上周&#xff08;2024年6月14号&#xff09;&#xff0c;悬镜供应链安全情报中心在Pypi官方仓库&#xff08;https://pypi.org/&#xff09;中捕获2起针对Windows系统的Python包投毒事件&#xff0c;涉及Python组件包utilitytool及utilitytools&#xff0c;投毒者&#x…

C++开发基础之频繁使用`std::endl`可能导致性能问题

前言 你是否曾经注意过这个问题&#xff0c;频繁使用std::endl可能导致性能问题。在C开发中&#xff0c;许多开发者习惯于使用std::endl来换行输出并刷新缓冲区。然而&#xff0c;这种习惯性操作可能会在高频率输出场景中带来显著的性能瓶颈。接下来&#xff0c;我们将深入探讨…

2.XSS-存储型

储存型XSS 或持久型 XSS 交互的数据会被存在在数据库里面,永久性存储,具有很强的稳定性。 在留言板里面进行测试一下是否有做过滤 "<>?&66666点击提交 查看元素代码&#xff0c;已经提交完成&#xff0c;并且没有做任何的过滤措施 接下来写一个javascrip…

由于没有远程桌面授权服务器怎么办?

在现代的工作环境中&#xff0c;远程访问和远程桌面控制已经成为一项日益重要的需求。随着企业和组织的扩张&#xff0c;人们经常需要在不同的地点之间共享文件和应用程序。由于缺乏远程桌面授权服务器&#xff0c;这一过程可能会变得困难和不安全。 远程桌面授权服务器是一种…

MGV电源维修KUKA机器人电源模块PH2003-4840

MGV电源维修 库卡电源模块维修 机器人电源模块维修 库卡控制器维修 KUKA电源维修 库卡机器人KUKA主机维修 KUKA驱动器模块维修 机械行业维修&#xff1a;西门子系统、法那克系统、沙迪克、FIDIA、天田、阿玛达、友嘉、大宇系统&#xff1b;数控冲床、剪板机、折弯机等品牌数控…

gbase8s之Encoding or code set not supported

如图发生以下错误&#xff1a; 解决办法&#xff1a;在url里加上ifx_use_strenctrue 就可以了 参数解释&#xff1a;

【PS】提取手写签名

准备工具&#xff1a; 纸张&#xff1a;用于承载签名&#xff1b; 笔&#xff1a;用于签名&#xff1b; 手机&#xff1a;用于拍摄签名&#xff1b; Adobe Photoshop 版本: 12.0.3 (12.0.3x20101211 [20101211.r.1222 2010/12/11:02:00:00 cutoff; r branch]) x32&#xff1a;用…

Nacos安装教程(很细很简单),解决启动报错Please set the JAVA_HOME

nacos安装 找到你要下载的版本解压到任意非中文目录下端口默认8848&#xff0c;如有端口冲突&#xff0c;可修改配置文件中的端口。编辑shutdown.cmd文件&#xff0c;路径换成你的jdk安装地址否则会报错Please set the JAVA_HOME variable in your environment, We need java(x…

AI在线免费视频工具2:视频配声音;图片说话hedra

1、视频配声音 https://deepmind.google/discover/blog/generating-audio-for-video/ https://www.videotosoundeffects.com/ &#xff08;免费在线使用&#xff09; 2、图片说话在线图片生成播报hedra hedra 上传音频与图片即可合成 https://www.hedra.com/ https://www.…

国产化操作系统杂谈

目录 操作系统国产化背景国产化操作系统名录优秀操作系统介绍1.深度Linux&#xff08;deepin&#xff09;2.FydeOS3.AliOS&#xff08;openAliOS&#xff09;4.openEuler5.红旗Linux6. startOS 总结 操作系统国产化背景 官方的说法是为了打破长期以来国外对中国的操作系统的垄…

【for循环】水仙花数

【for循环】水仙花数 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 【参考代码】 #include <iostream> using namespace std; int main(){ for(int abc 100; abc<999; abc){// 获取范围内所有的数字 int c abc%10; //获取个位 int b abc%10…

场外个股期权怎么看涨跌情况?怎么判断是选涨还是选跌?

今天带你了解场外个股期权怎么看涨跌情况&#xff1f;怎么判断是选涨还是选跌&#xff1f;在期权市场中&#xff0c;投资者想要在其中获得盈利&#xff0c;学会判断涨跌是期权投资者赚钱路上要走的第一步。 判断场外个股期权的涨跌情况主要可以从以下几个方面入手&#xff1a; …

如何去除VisualStudioCode最新版本出现的两条横线

作为一个对频繁更新有些抗拒的人&#xff0c;我曾多次遇到在更新后出现莫名问题的情况。然而&#xff0c;由于最近一次更新已经有一段时间了&#xff0c;我觉得或许这次会带来一些更好的设计或其他改进。于是&#xff0c;我决定更新Visual Studio Code&#xff0c;并分享一下我…

数据结构5---矩阵和广义表

一、矩阵的压缩存储 特殊矩阵:矩阵中很多值相同的元素并且它们的分布有一定的规律。 稀疏矩阵:矩阵中有很多零元素。压缩存储的基本思想是: (1)为多个值相同的元素只分配一个存储空间; (2)对零元素不分配存储空间。 1、特殊矩阵的压缩存储 &#xff08;1&#xff09;对称矩…

vue3爷孙组件通信——provide和inject

父组件中提供数据&#xff0c;并在子组件中注入这些数据&#xff0c;从而实现了组件之间的数据传递。可用于兄弟组件通信&#xff0c;爷孙组件通信&#xff0c;父子通信。 provide( ‘注入名’, 注入值" ) 和 inject(‘注入名’) 第一代组件&#xff1a; <template>…

【干货】微信小程序免费开源项目合集

前言 2024年了&#xff0c;还有小伙伴在问微信小程序要怎么开发&#xff0c;有什么好的推荐学习项目可以参考的。今天分享一个收集了一系列在微信小程序开发中有用的工具、库、插件和资源&#xff1a;awesome-github-wechat-weapp。 开源项目介绍 它提供了丰富的资源列表&…

研究人员描述了如何判断ChatGPT是否在虚构

研究人员描述了如何判断ChatGPT是否在虚构 这是世界上最不为人知的秘密之一&#xff0c;大型语言模型对查询给出了明显错误的答案&#xff0c;并自信地这样做&#xff0c;与它们正确的时候没有区别。这有很多原因。人工智能可能已经接受了错误信息的训练;答案可能需要从LLM无法…