快速入门Web开发(下)

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee

如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^)

想看更多 那就点个关注吧 我会尽力带来有趣的内容
有没出现的图片 请访问 传送门 这是我的掘金账号 掘金文档的图片图片上传做的很好,欢迎关注我的掘金账号 😍

快速入门Web开发(下)

案列开发

image-20230904220154021

部分详情见 文件 JavaWeb案列

image-20230905154837667

image-20230905155028256

  • 没写去全,想知道全部就去看JavaWeb案列,一定要去看

限定请求方式

//方案一
@RequestMapping  (value = "/depts",method = RequestMethod.GET)//限定请求方式为get
	//限定请求方式为get
	//不需要打出value,写路径后,直接写method=请求类型就好
//方案二
@GetMapping ("/depts")
    public Result list(){
        log.info("查询全部部门数据");
         return Result.success();
    }

开发部门相应功能

基本的开发方式及查询所有部门

  • 开发一个小的需求的时候,先看对接文档

image-20230905204642243

比如,开发该需求,查询全部的部门数据先分析

image-20230905204806426

image-20230905204822633

  • 接口文档中注明了请求类型和请求地址

理清以上后,开始写代码

代码要实现的是

image-20230905205759716

这三件事情。但我们需要将其分在不同的文件夹及java文件中。

image-20230905210000346

  • 在dao层(mapper)中进行数据访问

  • 在service层中进行逻辑处理

  • 在controller层中接收请求,响应数据

  • pojo是存放对象的地方,比如检验是否成功的Result

流程是这样的:前端发送请求之后先进入到controller中的部门表(因为对部门进行操作),而该项会调用service来获取数据,在service中调用了mapper接口中的方法来查询信息,而mapper会对数据库进行操作,并将信息封住在list集合当中,将数据返回给service然后返回给controller最后返回给前端

  • 因为使用的是json格式,所以使用list集合

为什么没有创建相应对象却能够在几个不同的文件中互相调用,返回?

因为使用了依赖注入!

image-20230906084745763

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

list() 方法中,通过调用 deptMapper.list() 来执行查询操作,并将查询结果作为方法的返回值。这里的 deptMapper.list() 就是调用 DeptMapper 接口的 list() 方法,从数据库中获取部门数据。

虽然代码中没有直接写出 DeptMapper 的调用,但通过依赖注入的方式,DeptMapper 实例已经被注入到了 deptMapper 字段中,可以在 list() 方法中通过 deptMapper 字段来调用 DeptMapper 的方法。

image-20230906082424472

删除部门

image-20230906103658292

@DeleteMapping("/depts/{id}")
public Result delete(@PathVariable Integer id){
    //使用以下写法可以,将{}替换成id
    log.info("删除部门数据:{}",id);
    List<Dept> deptList =deptService.delete();
    return Result.success(deptList);
}

@PathVariable 是一个Spring框架的注解,用于从URL路径中提取变量的值,并将其绑定到方法参数上。

在你提供的代码中,@PathVariable Integer id 表示使用 @PathVariable 注解将URL路径中的变量值绑定到方法参数 id 上。

具体来说,当请求的URL路径为 “/depts/{id}”,例如 “/depts/123”,@DeleteMapping("/depts/{id}") 注解表示这是一个用于处理HTTP DELETE请求的处理方法,并且路径中的 {id} 部分将被解析为方法参数 id

新增部门

@Override
public void add(Dept dept) {
    dept.setCreateTime(LocalDateTime.now());
    dept.setUpdateTime(LocalDateTime.now());
    deptMapper.add(dept);
}

补充属性指需要补充的属性

比如这里,前端传给我们其他参数,但修改时间和进入时间是我们来决定的,因此需要在这里增加

使用@RequestMapping优化

image-20230906133937151

如何分辨使用注解获取服务器发过来的数据?(重点)

当请求数据是以下这样时(json格式)

{
	"id": 1,
	"name": "教研部"
}
  • 是一个请求体数据,要使用能将请求体数据绑定的注解来实现

当请求数据是以下这样时(写在导航栏上),要使用能将请求的URL中提取路径参数的注解来实现

/depts/1
详情见http笔记

更新部门

  • 在这个工程中更新部门需要点两次

image-20230907162807200

  • 先点击编辑弹出页面,输入修改的name属性。这个过程就执行了一次查询操作

image-20230907162910202

image-20230907163000929

  • 然后点击确定,将修改好的name属性传递给后端

开发员工表相应功能

分页查询

image-20230906141213373

  • 详细要求去看相应api接口文档

image-20230906144904587

  • 接收参数需要默认值的时候,可以使用以上两种方式设置
public PageBean page(Integer page, Integer pageSize) {
    //获取总页数
    Long count = empMapper.count();
    //获取查询结果
    //计算起始页码
    Integer start = (page - 1) * pageSize;
    List<Emp> empList = empMapper.page(start, pageSize);

    //封装成对象
    PageBean pageBean=new PageBean(count,empList);
    return pageBean;
}
  • 遇到多个数据时候,将其封装成一个对象来传输

image-20230906193056124

image-20230906193116127

PageHelper插件

  • 该插件使用PageHelper对象进行操作

以下是使用 PageHelper 进行分页查询的一般步骤:

  1. 在项目的依赖管理中引入 PageHelper 的相关依赖,通常需要包括 pagehelper-coremybatis-spring-boot-starter
  2. 在 MyBatis 的配置文件中,配置 PageInterceptor 作为拦截器。这样,PageHelper 就能够拦截查询语句,自动实现分页功能。
  3. 在需要进行分页查询的方法中,直接使用 PageHelper.startPage(pageNum, pageSize) 来设置当前页码和每页显示的记录数。
  4. 执行查询操作,PageHelper 会自动进行分页处理,并返回一个包含分页结果的 PageInfo 对象。
  • 插件原理

在执行empMapper.list()方法时,就是执行:select * from emp 语句,怎么能够

实现分页操作呢?

分页插件帮我们完成了以下操作:

  1. 先获取到要执行的SQL语句:select * from emp
  2. 把SQL语句中的字段列表,变为:count(*)
  3. 执行SQL语句:select count(*) from emp //获取到总记录数
  4. 再对要执行的SQL语句:select * from emp 进行改造,在末尾添加 limit ? ,

?

  1. 执行改造后的SQL语句:select * from emp limit ? , ?

image-20230907210233298

  • 使用中的第一条,调用插件中的本体方法来设置分页参数
  • 第二条通过插件将该条变成分页查询语句
 //方式一:service层
public PageBean page(Integer page, Integer pageSize) {
    //获取总页数
    Long count = empMapper.count();
    //获取查询结果
    //计算起始页码
    Integer start = (page - 1) * pageSize;
    List<Emp> empList = empMapper.page(start, pageSize);

    //封装成对象
    PageBean pageBean=new PageBean(count,empList);
    return pageBean;
}
//dao层
  //查询总记录
    @Select("select count(*) from webcase.emp")
    public Long count();
   // 分页查询列表数据
    @Select("select * from webcase.emp limit #{start},#{pageSize}")
    public List<Emp> page(Integer start,Integer pageSize);

 //方式一:service层(使用插件)
    public PageBean page(Integer page, Integer pageSize) {
        //设置分页参数
        PageHelper.startPage(page, pageSize);
        //获取数据
        List<Emp> empList= empMapper.list();
        Page<Emp> p=(Page<Emp>)  empList;
        // 封装成对象
        PageBean pageBean = new PageBean(p.getTotal(), p.getResult());
        return pageBean;
    }
//dao层
/*员工信息查询(使用插件)*/
 @Select("select * from webcase.emp")
 public List<Emp> list();
}
//(其中Emp用于接收传递的数据)

条件分页查询

image-20230908092403145

image-20230908105327079

  • 后面还有新增员工和删除员工就不多赘述了

image-20230911081221608

  • 文件上传前端三要素
  • 请求方式为post,要有file,特殊的编码格式

文件上传

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传文件</title>
</head>
<body>

    <form action="/upload" method="post" enctype="multipart/form-data">
    //使用multipart/form-data格式能将数据提交上去,而不是将文件名提交
    //使用该提交方式后,提交项会分成三个
        姓名: <input type="text" name="username"><br>
        年龄: <input type="text" name="age"><br>
        头像: <input type="file" name="image"><br>
        <input type="submit" value="提交">
    </form>

</body>
</html>

image-20230911082622515

  • 生成临时文件来上传,上传后将文件删除
@Slf4j
@RestController
public class UploadController {
    @PostMapping("/upload")
    public Result upload(String name, Integer age, MultipartFile image) throws IOException {
        log.info("接收到的参数name:{},age:{},image:{}",name,age,image);
        // 获取文件的原始名
        String originalFilename= image.getOriginalFilename();
        // 产生的临时文件保存在本地E:\image
        image.transferTo(new File("E:\\image\\"+originalFilename ));
        return Result.success();
    }
}//这样写,有一个明显的问题:后来的同名文件会替代原本的文件
@Slf4j
@RestController
public class UploadController {
    @PostMapping("/upload")
    public Result upload(String name, Integer age, MultipartFile image) throws IOException {
        log.info("接收到的参数name:{},age:{},image:{}",name,age,image);
        // 获取文件的原始名
        String originalFilename= image.getOriginalFilename();
        int index=originalFilename.lastIndexOf(".");//找到文件名最后.的位置
        String extname=originalFilename.substring(index);//截取字符

        //使用uuid创建文件名
        String newFileName= UUID.randomUUID().toString()+extname;
        // 产生的临时文件保存在本地E:\image
        image.transferTo(new File("E:\\image\\"+newFileName ));
        return Result.success();
    }
}

image-20230911091407171

  • 在application.properties中配置

image-20230911092124718

使用云来存储图片

image-20230911092304652

image-20230911092506451

private AliOSSUtils aliOSSUtils;
/* 使用阿里云来上传图片 */
@PostMapping("/upload")
public Result upload(MultipartFile image) throws IOException {
    log.info("文件上传,文件原始名:{}",image.getOriginalFilename();
    /* 使用工具来将文件上传,并获得该文件的网络地址 */
    String url= aliOSSUtils.upload(image);
    log.info("文件上传的地址:{}",url);

    return Result.success(url);
}
@Component
public class AliOSSUtils {
//工具类
    private String endpoint = "https://oss-cn-beijing.aliyuncs.com";
    private String accessKeyId = "LTAI5tJcyLUHaXqJiTaw74Rd";
    private String accessKeySecret = "mwRBKzxPC0BHFEwqQHZvCtvvlOIpho";
    private String bucketName = "web-tlias-ww";

    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }

}

image-20230911104157591

在postman中测试上传

image-20230911085833346

  • 选择Body中的form—data,在key中选择Filr

image-20230911085915518

使用不同配置文件优化

image-20230911110104719

image-20230911104738662

使用@ConfigurationProperties代码再优化

image-20230911113841195

image-20230911154422966

image-20230911154515835

登录

//  登录接口
@Slf4j
@RestController
public class LoginController {
    @Autowired
    private EmpService empService;
    @PostMapping("/login")
    public Result login(@RequestBody Emp emp){
        log.info("用户登录:{}",emp);
        // 登录
        Emp emp1= empService.Login(emp);
        return emp1!=null?Result.success():Result.error("用户名或秘密错误");
    }//多了此项步骤,其他都一样
}

登录校验

image-20230911165144539

会话技术

image-20230911165507943

  • Cookie技术

image-20230911170059971

image-20230911170737366

  • Session技术

image-20230911181454643

image-20230911171108272

image-20230911181724905

JWT

image-20230911182047846

image-20230911182204636

image-20230911191258164

image-20230911191345590

过滤器Filter

  • 出现的意义是因为校验这个操作每个访问的资源页都需要出现一次且代码相同,于是使用过滤器

image-20230911204858931

image-20230911210743929

  • 还要再启动文件中增加@ServletComponentScan来启动拦截服务

image-20230911211050280

执行流程

image-20230911211110302

image-20230911211203315

过滤链

image-20230911211652487

image-20230911212401595

image-20230911212452581

令牌校验

    package com.example.webcase.filter;


    import com.alibaba.fastjson2.JSONObject;
    import com.example.webcase.pojo.JwtUtils;
    import com.example.webcase.pojo.Result;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.util.StringUtils;
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    @Slf4j
    @WebFilter(urlPatterns = "/*")//要拦截的请求
    public class LoginFilter implements Filter {
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            // 获取请求的url来进行判断
            HttpServletRequest req= (HttpServletRequest) servletRequest;//请求对象()客户端给服务器(会带令牌)
            HttpServletResponse resp= (HttpServletResponse) servletResponse;//响应对象
            //获取url
            String url =req.getRequestURI();
            log.info("url:{}",url);

            if (url.contains("login")){
                log.info("登录");
                filterChain.doFilter(servletRequest,servletResponse);
                return;
            }
            // 获取token
           String jwt= req.getHeader("token");
            //判断token是否为空
            if(!StringUtils.hasLength(jwt)){
                log.info("未登入");
              Result error=  Result.error("NOT_LOGIN");
              // 将数据转换为json格式
              String notLogin= JSONObject.toJSONString(error);
              resp.getWriter().write(notLogin);
              return;
            }
            /* 校验令牌,不通过会报错*/
           try{
               JwtUtils.parseJWT(jwt);
           }catch (Exception e){
               e.printStackTrace();
               log.info("令牌解析失败");
               /* 打印错误信息 */
               Result error=  Result.error("NOT_LOGIN");
               String notLogin= JSONObject.toJSONString(error);
               resp.getWriter().write(notLogin);
               return;
           }

            log.info("解析成功");
            filterChain.doFilter(servletRequest,servletResponse);
        }
    }

拦截器

image-20230912091638326

image-20230912091649923

image-20230912091814494

image-20230912093454143

image-20230912093955157

  • 拦截器

  • 使用@ServletComponentScan来开启对servlet组件的使用(在启动文件位置)(开启拦截器)

全局异常处理器

image-20230912185259107

  • 注释二用来指定捕获异常种类

事物回滚

image-20230912190756458

#spring事务管理日志
logging:
  level:
    org.springframework.jdbc.support.JdbcTransactionManager: debug
        
@Transactional

image-20230912191504109

事物传播

image-20230916212552359

image-20230916212610944

AOP

  • 没有文件名的要求,只需要引用依赖后,添加 @Aspect 注释,并使用切入点表达式添加范围即可

image-20230912192448002

image-20230912192703162

image-20230912193122505

@Aspect来标注类是aop类

image-20230912193827135

image-20230912193956248

image-20230912194216845

  • 切入点可以理解为需要增强的方法
  • 使用aop后是使用基于目标对象生成的代理对象来运行

通知类型

image-20230912202347637

image-20230912202433841

image-20230912202446867

通知顺序

image-20230912202754657

通过使用@Order来控制顺序

切入点表达式

image-20230912203013408

image-20230912203643407

image-20230912204826510

image-20230912204914716

annotation

image-20230912205214445

  • 定义一个注解,需要切入点需要在哪里就把该方法放在切入点上面

  • 该注解使用时,括号内的是定义注解的位置

连接点

image-20230912210058145

  • 在方法中增加一个参数即可

案列

image-20230912210900685

image-20230912210932011

image-20230912211011940

SpringBoot原理

配置文件的优先级

image-20230914091611400

image-20230914091754906

image-20230914091847368

image-20230914092124405

Bean

image-20230914093003948

  • bean对象默认单列

  • springboot启动的时候loc容器就已经创建了,并实例化了对象放进了容器中

image-20230914093747194

image-20230914093727297

第三方Bean

image-20230914094658560

  • 自定义的使用@Component
  • 第三方使用@Bean

为什么你能进行快捷的开发?

  • 起步依赖和自动配置

image-20230914103153420

image-20230914104323197

image-20230914104347064

Maven高级

模块

image-20230924152307193

image-20230924152443869

image-20230924152508599

  • 在依赖中输入要引入的依赖名即可

    继承

    image-20230924153416125

  • pom文件中的标签中的东西

image-20230924153613087

image-20230924153651650

  • 在父工程上添加项目的原本父工程后,然后将子工程原本的父工程换为新的换成父工程

  • 每个项目生成后,都会有springboot这个父工程的依赖

image-20230924154620906

版本控制

image-20230924154817401

image-20230924154905782

方法二

image-20230924155155134

image-20230924155314225

聚合

image-20230924155611101

image-20230924155634777

image-20230924155751680

Maven私服

image-20230924160123452

image-20230924160211738

image-20230924160255753

image-20230924160318574

image-20230924160333395

技术栈

image-20230914105518588

image-20230914105608363

image-20230914105914850

image-20230914110014016

image-20230914110158878

ngboot这个父工程的依赖

[外链图片转存中…(img-srTvanTe-1714097487488)]

版本控制

[外链图片转存中…(img-1fjrsuCB-1714097487488)]

[外链图片转存中…(img-eJyFXN7D-1714097487489)]

方法二

[外链图片转存中…(img-uG5OywVK-1714097487489)]

[外链图片转存中…(img-YILjjxyY-1714097487489)]

聚合

[外链图片转存中…(img-J4HRjBp7-1714097487490)]

[外链图片转存中…(img-Qt14Y3mp-1714097487490)]

[外链图片转存中…(img-mcc9ErXb-1714097487490)]

Maven私服

[外链图片转存中…(img-ofB5rvaA-1714097487491)]

[外链图片转存中…(img-tboNSNwu-1714097487491)]

[外链图片转存中…(img-yljPDnR6-1714097487491)]

[外链图片转存中…(img-6wo47DZR-1714097487492)]

[外链图片转存中…(img-sxoIl0nB-1714097487492)]

[外链图片转存中…(img-mtHjlikK-1714097487492)]

技术栈

[外链图片转存中…(img-oHkLu4cp-1714097487493)]

[外链图片转存中…(img-YYRYXa8W-1714097487493)]

[外链图片转存中…(img-BznHyq6r-1714097487494)]

[外链图片转存中…(img-UFAU2REN-1714097487495)]

[外链图片转存中…(img-CNQzX3FA-1714097487496)]

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

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

相关文章

【MySQL】查询数据,对结果进行排序(关键字:ORDER BY)

文章目录 单列排序多列排序指定排序方式&#xff0c;升序&#xff08;ASC&#xff0c;ASCENDING&#xff09; / 降序&#xff08;DESC&#xff0c;DESCENDING&#xff09;ORDER BY 关键字与 LIMIT 关键字联用 我是一名立志把细节都说清楚的博主&#xff0c;欢迎【关注】&#x…

Vue项目中引入高德地图步骤详解,附示例代码

vue中如何使用高德地图&#xff0c;下面为您详解。 步骤一&#xff1a;安装高德地图的JavaScript API 在Vue项目的根目录下打开终端&#xff0c;执行以下命令安装高德地图的JavaScript API&#xff1a; npm install amap/amap-jsapi-loader --save 步骤二&#xff1a;创建地…

【数据结构6--图】

目录 1 图2 图的定义和基本概念&#xff08;在简单图范围内&#xff09;3 图的类型定义4 图的存储结构4.1 邻接矩阵 表示法4.2 邻接表 表示法4.3 十字链表 表示法4.4 邻接多重表 表示法 5 图的遍历5.1 深度优先搜索-DFS 及 广度优先遍历-BFS 6 图的应用6.1 最小生成树6.1.1 克鲁…

2726641 - Failed to resolve Object Based Navigation target

服务和支持/知识库文章和注释/人事管理/人员发展/目标设置和评估 (PA-PD-PM) 2726641 - 未能解析基于对象的导航目标 SAP Knowledge Base Article, Version: 1, 审批日期: 30.11.2018 组件PA-PD-PM对象状态 优先级正常对象状态 类别问题对象状态 审批状态已发布至客户对象…

Window + Ubuntu 双系统无Ubuntu Bios 启动项

文章目录 安装硬盘位置不重要&#xff01;&#xff01;&#xff01;&#xff08;但是我安装在了第二张HDD&#xff09;问题是多盘分位置会导致磁盘主分区变成了简单卷 Bios Ubuntu 启动项修复参考Ubuntu安装U盘进入Try Ubuntu 使用Terminal修复完提示Disable Secure Boot进入Te…

minikube 环境搭建

minikube安装 # 查看linux 架构模式x86_64、arm64 uname -m # Intel x86_64 curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64# Apple arm64 curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/min…

利用ENVI SPEAR工具和WV-2卫星影像数据量测水深

ENVI的SPEAR工具集&#xff08;(Spectral Processing Exploitation and Analysis Resource)&#xff09;是将很多的遥感图像处理过程集成为流程化的操作方式&#xff0c;使得遥感图像处理知识相对薄弱的非专业人员也能利用流程化的工具进行图像处理&#xff0c;图像处理速度也有…

虚拟DOM

虚拟DOM&#xff08;Virtual DOM&#xff09;是现代前端框架&#xff08;如React、Vue等&#xff09;用于优化DOM操作性能的关键技术。Vue也采用了虚拟DOM来提高性能和提供更好的开发体验。以下是虚拟DOM在Vue中的详细解释&#xff1a; 什么是虚拟DOM&#xff1f; 虚拟DOM是一…

【经典算法】LeetCode104二叉树的最大深度(Java/C/Python3实现含注释说明,Easy)

目录 题目描述思路及实现方式一&#xff1a;递归思路代码实现Java版本C语言版本Python3版本Go语言版本 复杂度分析 方式二&#xff1a;广度优先搜索(BFS)思路代码实现Java版本C语言版本Python3版本 复杂度分析 总结相似题目 标签(题目类型)&#xff1a;树、深度优先搜索(DFS)、…

使用iar embedded workbench编译器打开CC2640R2代码工程

使用iar embedded workbench编译器打开CC2640R2代码工程 首先安装CC2640R2的SDK包 目前使用的SDK版本是 simplelink_cc2640r2_sdk_4_20_00_04 在德州仪器(TI)官网下载 https://www.ti.com.cn/product/cn/CC2640R2F-Q1 下载后需要对SDK进行安装&#xff0c;安装很方便&#…

Java中的Set集合和Hash值和TreeSet的使用

Set集合的特点 不包含重复元素的集合 没有带索引的方法&#xff0c;所以不能使用普通for循环遍历 HashSet对集合的迭代顺序不作任何保证 Set集合的遍历 有两种方式遍历一种是迭代器一种是增强for package dayhou40.day49; ​ import java.util.HashSet; import java.util…

C语言程序设计基础(跟知乎学)

1、C语言是一种结构化程序设计语言。三种基本结构&#xff1a;顺序、选择、循环。 2、在C语言中&#xff0c;程序的模块化是利用函数实现的。 3、计算机不能直接理解高级语言&#xff0c;只能直接理解机器语言&#xff0c;所以必须要把高级语言翻译成机器语言&#xff0c;计算机…

C++ | Leetcode C++题解之第51题N皇后

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<string>> solveNQueens(int n) {auto solutions vector<vector<string>>();auto queens vector<int>(n, -1);auto columns unordered_set<int>();auto diag…

Error: The project seems to require yarn but it‘s not installed.

在使用yarn serve启动vue2项目是发生报错信息 报错信息&#xff1a; 解决方法&#xff1a; 1、 红色箭头行&#xff0c;ctrl单击 进入env.js文件 2、注释行 if (result && !exports.hasYarn()) throw new Error(The project seems to require yarn but its not ins…

Oracle VM virtual Box 安装虚拟机并网络连接宿主机且能ping通外网

新建虚拟机 参考镜像下载连接&#xff1a;支持centos7.8及其以上版本&#xff1a;​ ​http://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1908.iosOracle VM virtual Box新建虚拟机&#xff0c;按照下图所示新建虚拟机&#xff1a; 1.新建虚拟机 2.配…

IDEA安装插件Apipost方便调试

进入IDEA的File->sttings->plugins 进入搜索Apipost即可安装插件 使用小箭头即可得到URL&#xff0c;点击进入操作即可

C# Onnx yolov8 pig detection

C# Onnx yolov8 pig detection 目录 效果 项目 模型 代码 数据集 下载 效果 项目 模型 Model Properties ------------------------- date&#xff1a;2024-04-28T15:13:10.750689 description&#xff1a;Ultralytics YOLOv8n model trained on C:\Work\yolov8\datas…

深入探索计算机视觉:高级主题与前沿应用的全面解析

引言 计算机视觉&#xff0c;作为人工智能领域的一个重要分支&#xff0c;旨在让计算机能够“看”懂世界&#xff0c;理解和解释视觉场景。随着深度学习技术的迅猛发展&#xff0c;计算机视觉已经在许多领域取得了显著的进展&#xff0c;如自动驾驶、安防监控、医疗诊断等。在…

NodeJs[黑马笔记简洁版]

是什么 怎么用 模块 模块化标准 CommonJs(标准语法)默认 ECMAscript 内置模块 fs模块 path模块 http模块 自定义模块 第三方包 包概念 npm 包管理器 总结

正点原子[第二期]ARM(I.MX6U)裸机篇学习笔记-1.2

前言&#xff1a; 本文是来自哔哩哔哩网站上视频“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”的学习笔记&#xff0c;在这里会记录下正点原子Linux ARM MX6ULL 开发板根据配套的哔哩哔哩学习视频所作的实验和笔记内容。本文大量的引用了正点原子哔哔哩网…