【javaweb】学习日记Day11 - tlias智能管理系统 - 文件上传 新增 修改员工 配置文件

目录

一、员工管理功能开发

1、新增员工

postman报错500的原因

(1)Controller类

(2)Service类

(3)Mapper类

2、根据ID查询

(1)Controller类

(2)Service类

(3)Mapper类

3、修改员工

(1)Controller类

(2)Service类

(3)Mapper类

(4)配置动态sql - xml文件

4、员工管理代码综合展示 

(1)EmpController类

(2)EmpService 接口

(3)EmpServiceImpl 实现类

(4)EmpMapper类

(5)动态sql xml 文件

二、文件上传

(1)引入前端页面

1、本地存储方式

(1)Controller类

(2)配置properties文件

2、阿里云OSS对象存储

(1)准备工作

(2)前期配置

(3)配置Java访问凭证

(4)上传文件官方示例代码

3、阿里云OSS集成

(1)引入阿里云OSS上传文件工具类

(2)Controller类

4、文件上传代码综合展示

(1)UploadController类

(2)AliyunOSSUtils上传文件工具类

(3)AliyunOSSProperties属性类

三、配置文件

1、properties配置文件

​(1)文件上传工具类

①  @Value注解

(2)application.properties配置文件

2、yml配置文件

(1)用yml替换properties文件

3、@ConfigurationProperties

(1)定义存参数的实体类

(2)修改文件上传工具类


一、员工管理功能开发

1、新增员工

接口信息

  • 请求方式:POST —— @PostMapping
  • 请求路径:("/emps") 

请求参数

响应数据:直接Result.success()  

postman报错500的原因

大概率是mapper中sql语句写错了(把createtime写成了creatime,找了半天bug)

(1)Controller类

//添加员工@PostMappingpublic Result save(@RequestBody Emp emp){log.info("新增员工:{}",emp);empService.save(emp);return Result.success();}

(2)Service类

    //新增员工void save(Emp emp);
    //新增员工@Overridepublic void save(Emp emp) {emp.setCreateTime(LocalDateTime.now());emp.setUpdateTime(LocalDateTime.now());empmapper.insert(emp);}

(3)Mapper类

    //新增员工@Insert("insert into emp (username,name,gender,image,job,entrydate,dept_id,create_time,update_time) " +"values(#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime})")void insert(Emp emp);

2、根据ID查询

接口信息

  • 请求方式:GET —— @GetMapping
  • 请求路径:("/emps/{id}") 

请求参数

响应数据

(1)Controller类

    //根据id查询@GetMapping("/{id}")public Result getById(@PathVariable Integer id){log.info("根据ID查询员工信息,ID:{}",id);Emp emp = empService.getById(id);return Result.success(emp);}

(2)Service类

    //根据id查找员工Emp getById(Integer id);
    //根据id查找员工@Overridepublic Emp getById(Integer id) {return empmapper.getById(id);}

(3)Mapper类

    //根据id查找员工@Select("select * from emp where id = #{id}")Emp getById(Integer id);

3、修改员工

接口信息

  • 请求方式:PUT—— @PutMapping
  • 请求路径:("/emps") 

请求参数: 

响应数据: 直接Result.success()  

(1)Controller类

    //修改员工@PutMappingpublic Result modify(@RequestBody Emp emp){log.info("修改员工信息:{}",emp.getId());empService.modify(emp);return Result.success();}

(2)Service类

    //修改员工void modify(Emp emp);
    //修改员工@Overridepublic void modify(Emp emp) {emp.setUpdateTime(LocalDateTime.now());empmapper.modify(emp);}

(3)Mapper类

    //修改员工void modify(Emp emp);

(4)配置动态sql - xml文件

    <!--更新员工--><update id="modify">update emp<set><if test="username != null and username != ''">username = #{username},</if><if test="password != null and password != ''">password = #{password},</if><if test="name != null and name != ''">name = #{name},</if><if test="gender != null">gender = #{gender},</if><if test="image != null and image != ''">image = #{image},</if><if test="job != null">job = #{job},</if><if test="entrydate != null">entrydate = #{entrydate},</if><if test="deptId != null">dept_id = #{deptId},</if><if test="updateTime != null">update_time = #{updateTime}</if></set>where id = #{id}</update>

4、员工管理代码综合展示 

(1)EmpController类

//员工管理controller
@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {@Autowiredprivate EmpService empService;//分页查询@GetMappingpublic Result selectByPage(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize,String name, Short gender,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){log.info("分页查询,参数:{},{},{},{},{},{}",page,pageSize,name,gender,begin,end);PageBean pageBean = empService.selectByPage(page,pageSize,name,gender,begin,end);return Result.success(pageBean);}//删除员工@DeleteMapping("/{ids}")public Result delete(@PathVariable List<Integer> ids){log.info("删除员工id:{}",ids);empService.delete(ids);return Result.success();}//添加员工@PostMappingpublic Result save(@RequestBody Emp emp){log.info("新增员工:{}",emp);empService.save(emp);return Result.success();}//根据id查询@GetMapping("/{id}")public Result getById(@PathVariable Integer id){log.info("根据ID查询员工信息,ID:{}",id);Emp emp = empService.getById(id);return Result.success(emp);}//修改员工@PutMappingpublic Result modify(@RequestBody Emp emp){log.info("修改员工信息:{}",emp.getId());empService.modify(emp);return Result.success();}
}

(2)EmpService 接口

public interface EmpService {//分页查询PageBean selectByPage(Integer page, Integer pageSize,String name, Short gender,LocalDate begin,LocalDate end);//批量删除void delete(List<Integer> ids);//新增员工void save(Emp emp);//根据id查找员工Emp getById(Integer id);//修改员工void modify(Emp emp);
}

(3)EmpServiceImpl 实现类

@Service
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empmapper;//分页查询@Overridepublic PageBean selectByPage(Integer page, Integer pageSize, String name,Short gender, LocalDate begin, LocalDate end) {//1.设置分页参数PageHelper.startPage(page,pageSize);//2.执行查询List<Emp> empList = empmapper.list(name, gender, begin, end); //获取的是分页结果查询的封装类Page<Emp> p = (Page<Emp>) empList; //进行强制转换//3.封装PageBean对象PageBean pageBean = new PageBean(p.getTotal(),p.getResult());return pageBean;}//批量删除@Overridepublic void delete(List<Integer> ids) {empmapper.delete(ids);}//新增员工@Overridepublic void save(Emp emp) {emp.setCreateTime(LocalDateTime.now());emp.setUpdateTime(LocalDateTime.now());empmapper.insert(emp);}//根据id查找员工@Overridepublic Emp getById(Integer id) {return empmapper.getById(id);}//修改员工@Overridepublic void modify(Emp emp) {emp.setUpdateTime(LocalDateTime.now());empmapper.modify(emp);}
}

(4)EmpMapper类

@Mapper
public interface EmpMapper {//用pagehelper插件 - 分页查询获取列表数据public List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);//新增员工@Insert("insert into emp (username,name,gender,image,job,entrydate,dept_id,create_time,update_time) " +"values(#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime})")void insert(Emp emp);//删除员工void delete(List<Integer> ids);//根据id查找员工@Select("select * from emp where id = #{id}")Emp getById(Integer id);//修改员工void modify(Emp emp);
}

(5)动态sql xml 文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itroye.mapper.EmpMapper"><!--更新员工--><update id="modify">update emp<set><if test="username != null and username != ''">username = #{username},</if><if test="password != null and password != ''">password = #{password},</if><if test="name != null and name != ''">name = #{name},</if><if test="gender != null">gender = #{gender},</if><if test="image != null and image != ''">image = #{image},</if><if test="job != null">job = #{job},</if><if test="entrydate != null">entrydate = #{entrydate},</if><if test="deptId != null">dept_id = #{deptId},</if><if test="updateTime != null">update_time = #{updateTime}</if></set>where id = #{id}</update><!--批量删除--><delete id="delete">deletefrom empwhere id in<foreach collection="ids" item="x" separator="," open="(" close=")">#{x}</foreach></delete><!--条件查询--><select id="list" resultType="com.itroye.pojo.Emp">select *from emp<where><if test="name !=null and name != ''">name like concat('%',#{name},'%')</if><if test="gender != null">and gender = #{gender}</if><if test="begin != null and end != null">and entrydate between #{begin} and #{end}</if></where>order by update_time desc</select></mapper>

二、文件上传

接口信息

请求参数

 

响应数据

 

(1)引入前端页面

将前端页面放resources文件的static目录下

上传文件三要素

1、本地存储方式

(1)Controller类

形参名要和前端传参名保持一致!

    @PostMapping("/upload")public Result upload(String username , Integer age, MultipartFile image) throws IOException //形参名要和前端传参名保持一致{log.info("文件上传:{},{},{}",username,age,image);//获取原始文件名String originalFilename = image.getOriginalFilename();//构造唯一文件名(不能重复) uuid(通用唯一识别码)int idx = originalFilename.lastIndexOf("."); //获取原始文件名最后一个点所在位置 也就是截取到".jpg"String extraname = originalFilename.substring(idx); //截取拓展名String newFileName = UUID.randomUUID().toString() + extraname;log.info("新的文件名:{}",newFileName);//将接受到的文件存在服务器磁盘目录中image.transferTo(new File("D:\\tlias.image\\"+newFileName));return Result.success();}

(2)配置properties文件

有的图片太大,无法上传,此时需要规定上传文件大小

#配置单个文件上传大小限制
spring.servlet.multipart.max-file-size=10MB#配置单个请求最大大小的限制(一次请求可以上传多个文件)
spring.servlet.multipart.max-request-size=100MB

2、阿里云OSS对象存储

阿里云-计算,为了无法计算的价值

(1)准备工作

各语言SDK参考文档_对象存储 OSS-阿里云帮助中心

Day11-04. 案例-文件上传-阿里云OSS-准备_哔哩哔哩_bilibili

(2)前期配置

将代码与启动类放一块

(3)配置Java访问凭证

如何为Java SDK配置访问凭证_对象存储 OSS-阿里云帮助中心

(4)上传文件官方示例代码

package com.itroye;import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.FileInputStream;
import java.io.InputStream;public class Demo {public static void main(String[] args) throws Exception {// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。String endpoint = "https://oss-cn-beijing.aliyuncs.com";// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();// 填写Bucket名称,例如examplebucket。String bucketName = "web-roye-tails";// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。// 也就是放在阿里云OSS中的名称String objectName = "01.jpg";// 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。String filePath= "D:\\tlias.image\\MTXX_MH20231002_222415502.jpg";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);try {InputStream inputStream = new FileInputStream(filePath);// 创建PutObjectRequest对象。PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);// 创建PutObject请求。PutObjectResult result = ossClient.putObject(putObjectRequest);} catch (OSSException oe) {System.out.println("Caught an OSSException, which means your request made it to OSS, "+ "but was rejected with an error response for some reason.");System.out.println("Error Message:" + oe.getErrorMessage());System.out.println("Error Code:" + oe.getErrorCode());System.out.println("Request ID:" + oe.getRequestId());System.out.println("Host ID:" + oe.getHostId());} catch (ClientException ce) {System.out.println("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with OSS, "+ "such as not being able to access the network.");System.out.println("Error Message:" + ce.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}}
} 

运行后,在阿里云oss管理控制后台的文件管理处能看到我们上传的图片

 

3、阿里云OSS集成

(1)引入阿里云OSS上传文件工具类

由官方示例代码改造而来

/*** 阿里云 OSS 工具类*/
@Component // 将此类作为bean交给ioc容器管理
public class AliOSSUtils {private String endpoint = "https://oss-cn-beijing.aliyuncs.com";private String accessKeyId = "LTAI5tJWzD965Xmw1B9NTsw9";private String accessKeySecret = "fra3BTIn5vSzuzATWDWboEUzlqvo4S";private String bucketName = "web-roye-tails";/*** 实现上传图片到OSS*/public String upload(MultipartFile file) throws IOException {// 获取上传的文件的输入流InputStream inputStream = file.getInputStream();// 避免文件覆盖 生成随机uuid.jpgString originalFilename = file.getOriginalFilename();String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));//上传文件到 OSSOSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, inputStream);//生成新的文件访问路径url  即:https://web-roye-tails.oss-cn-beijing.aliyuncs.com/01.jpgString url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;// 关闭ossClientossClient.shutdown();return url;// 把上传到oss的路径返回}}

(2)Controller类

@Slf4j
@RestController
public class UploadController {@Autowiredprivate AliOSSUtils aliOSSUtils;@PostMapping("/upload")public Result upload(MultipartFile image) throws IOException {log.info("文件上传,文件名:{}",image.getOriginalFilename());//调用阿里云OSS工具类进行文件上传String url = aliOSSUtils.upload(image);log.info("文件上传完成,文件访问url:{}",url);return Result.success(url);}
}

4、文件上传代码综合展示

(1)UploadController类

@Slf4j
@RestController
public class UploadController {@Autowiredprivate AliOSSUtils aliOSSUtils;@PostMapping("/upload")public Result upload(MultipartFile image) throws IOException {log.info("文件上传,文件名:{}",image.getOriginalFilename());//调用阿里云OSS工具类进行文件上传String url = aliOSSUtils.upload(image);log.info("文件上传完成,文件访问url:{}",url);return Result.success(url);}// 本地上传
//    @PostMapping("/upload")
//    public Result upload(String username , Integer age, MultipartFile image) throws IOException //形参名要和前端传参名保持一致
//    {
//        log.info("文件上传:{},{},{}",username,age,image);
//
//        //获取原始文件名
//        String originalFilename = image.getOriginalFilename();
//
//        //构造唯一文件名(不能重复) uuid(通用唯一识别码)
//        int idx = originalFilename.lastIndexOf("."); //获取原始文件名最后一个点所在位置 也就是截取到".jpg"
//        String extraname = originalFilename.substring(idx); //截取拓展名
//        String newFileName = UUID.randomUUID().toString() + extraname;
//        log.info("新的文件名:{}",newFileName);
//
//        //将接受到的文件存在服务器磁盘目录中
//        image.transferTo(new File("D:\\tlias.image\\"+newFileName));
//
//        return Result.success();
//    }
}

(2)AliyunOSSUtils上传文件工具类

/*** 阿里云 OSS 工具类*/
@Component // 将此类作为bean交给ioc容器管理
public class AliOSSUtils {@Autowired // 获取一系列属性值的bean对象注入private AliOSSProperties aliOSSProperties;/*** 实现上传图片到OSS*/public String upload(MultipartFile file) throws IOException {//获取阿里云oss参数String endpoint = aliOSSProperties.getEndpoint();String accessKeyId = aliOSSProperties.getAccessKeyId();String accessKeySecret = aliOSSProperties.getAccessKeySecret();String bucketName = aliOSSProperties.getBucketName();// 获取上传的文件的输入流InputStream inputStream = file.getInputStream();// 避免文件覆盖 生成随机uuid.jpgString originalFilename = file.getOriginalFilename();String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));//上传文件到 OSSOSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, inputStream);//生成新的文件访问路径url  即:https://web-roye-tails.oss-cn-beijing.aliyuncs.com/01.jpgString url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;// 关闭ossClientossClient.shutdown();return url;// 把上传到oss的路径返回}}

(3)AliyunOSSProperties属性类

@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOSSProperties {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;
}

三、配置文件

1、properties配置文件

配置信息在类内写死,不方便于项目后期维护,我们可以将该内容写在springboot的properties配置文件中

(1)文件上传工具类

①  @Value注解

通常用于外部配置属性一个一个地注入,@Value("${配置文件中的key}") 

@Component // 将此类作为bean交给ioc容器管理
public class AliOSSUtils {@Value("${aliyun.oss.endpoint}")private String endpoint;@Value("${aliyun.oss.accessKeyId}")private String accessKeyId;@Value("${aliyun.oss.accessKeySecret}")private String accessKeySecret;@Value("${aliyun.oss.bucketName}")private String bucketName;

(2)application.properties配置文件

#阿里云oss配置
aliyun.oss.endpoint=https://oss-cn-beijing.aliyuncs.com
aliyun.oss.accessKeyId=LTAI5tJWzD965Xmw1B9NTsw9
aliyun.oss.accessKeySecret=fra3BTIn5vSzuzATWDWboEUzlqvo4S
aliyun.oss.bucketName=web-roye-tails

2、yml配置文件

yml配置文件基本语法

  • 数值前必须有空格!
  • 使用缩进表示层级关系 

yml配置文件数据格式

  • 对象 / Map集合 
  • user:name:royeage:18password:1234
  • 数组 / List / Set集合
  • hobby:-java-game-sport

(1)用yml替换properties文件

备份一下properties文件! 

# properties文件
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/tliasspring.datasource.username=rootspring.datasource.password=1234mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImplmybatis.configuration.map-underscore-to-camel-case=truespring.servlet.multipart.max-file-size=10MBspring.servlet.multipart.max-request-size=100MBaliyun.oss.endpoint=https://oss-cn-beijing.aliyuncs.com
aliyun.oss.accessKeyId=LTAI5tJWzD965Xmw1B9NTsw9
aliyun.oss.accessKeySecret=fra3BTIn5vSzuzATWDWboEUzlqvo4S
aliyun.oss.bucketName=web-roye-tails

下面这个是yml文件 

spring:# 数据库连接信息datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/tliasusername: rootpassword: 1234# 文件上传配置servlet:multipart:max-file-size: 10MBmax-request-size: 100MB# Mybatis配置
mybatis:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true# 阿里云oss配置
aliyun:oss:endpoint: https://oss-cn-beijing.aliyuncs.comaccessKeyId: LTAI5tJWzD965Xmw1B9NTsw9accessKeySecret: fra3BTIn5vSzuzATWDWboEUzlqvo4SbucketName: web-roye-tails

3、@ConfigurationProperties

可以批量地将外部属性配置注入到bean对象的属性中

  • 运用@Value注解一个一个注入属性值十分繁琐,因此我们单独生成一个实体类存放属性
  • 然后利用@Component将其作为bean文件交给IOC容器管理
  • 并用@ConfigurationProperties("前缀")将yml配置文件中的参数值与其联系起来

 

(1)定义存参数的实体类

@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOSSProperties {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;
}

(2)修改文件上传工具类

/*** 阿里云 OSS 工具类*/
@Component // 将此类作为bean交给ioc容器管理
public class AliOSSUtils {@Autowired // 获取一系列属性值的bean对象注入private AliOSSProperties aliOSSProperties;/*** 实现上传图片到OSS*/public String upload(MultipartFile file) throws IOException {//获取阿里云oss参数String endpoint = aliOSSProperties.getEndpoint();String accessKeyId = aliOSSProperties.getAccessKeyId();String accessKeySecret = aliOSSProperties.getAccessKeySecret();String bucketName = aliOSSProperties.getBucketName();// 获取上传的文件的输入流InputStream inputStream = file.getInputStream();// 避免文件覆盖 生成随机uuid.jpgString originalFilename = file.getOriginalFilename();String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));//上传文件到 OSSOSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, inputStream);//生成新的文件访问路径url  即:https://web-roye-tails.oss-cn-beijing.aliyuncs.com/01.jpgString url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;// 关闭ossClientossClient.shutdown();return url;// 把上传到oss的路径返回}}

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

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

相关文章

基于小波神经网络的网络流量预测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022A 3.部分核心程序 ........................................................... %% 总流量数据 input(:,1)dat…

如何保证 RabbitMQ 的消息可靠性?

项目开发中经常会使用消息队列来完成异步处理、应用解耦、流量控制等功能。虽然消息队列的出现解决了一些场景下的问题&#xff0c;但是同时也引出了一些问题&#xff0c;其中使用消息队列时如何保证消息的可靠性就是一个常见的问题。如果在项目中遇到需要保证消息一定被消费的…

(高阶) Redis 7 第18讲 RedLock 分布式锁

🌹 以下分享 RedLock 分布式锁,如有问题请指教。🌹🌹 如你对技术也感兴趣,欢迎交流。🌹🌹🌹 如有对阁下帮助,请👍点赞💖收藏🐱‍🏍分享😀 问题 分布式锁问题从(高阶) Redis 7 第17讲 分布式锁 实战篇_PJ码匠人的博客-CSDN博客 这篇文章来看,…

redis学习(二)——redis常见命令及基础数据类型

数据类型 基础数据类型 字符串 String abcMap集合 Hsah {name:“zhangsan”,age:18}列表 List [a, b, c, d]Set集合 Set {a,b,c}有序Set集合 SortSet {a:1,b:2,c:3} 特殊数据类型 GEO 地理坐标 {A:(100.2,35.1)}BitMap 位图&#xff0c;只存储0和1 01101011101HyperLog 基数…

地图资源下载工具数据在线、离线查询及数据激活功能

哨兵相关产品&#xff0c;工具提供了表示系统是否为归档离线的信息&#xff01;您可以利用下载[定时重试]功能激活并下载哨兵相关离线产品数据&#xff01;

Java中栈实现怎么选?Stack、Deque、ArrayDeque、LinkedList(含常用Api积累)

目录 Java中的Stack类 不用Stack有以下两点原因 1、从性能上来说应该使用Deque代替Stack。 2、Stack从Vector继承是个历史遗留问题&#xff0c;JDK官方已建议优先使用Deque的实现类来代替Stack。 该用ArrayDeque还是LinkedList&#xff1f; ArrayDeque与LinkList区别&#xff1…

Java-多线程

摘要 多线程编程是现代软件开发中的一个重要概念&#xff0c;它允许程序同时执行多个任务&#xff0c;提高了程序的性能和响应性。本博客深入探讨了多线程编程的关键概念、原理和最佳实践。 线程、进程、多线程、并发、并行 进程 进程是计算机中运行的程序的实例。每次打开一…

《人间失格》阅读笔记

《人间失格》读书笔记 2023年10月7日读完&#xff0c;在过去的三个月时间内&#xff0c;有忙碌申博、从杭州辞职回家、准备入学、到澳门入学的事情&#xff0c;终于忙完了这些所有事情&#xff0c;回到了横琴的小房子里读完了这本书。 这本书前半部分讲了主角&#xff0c;作为…

Delphi编程:pagecontrol组件的tab字体变大

1、将pagecontrol组件属性中的font的字体变成四号。 2、将tabsheet1属性中的font的字体设置成八号。 结果如下&#xff1a;

水果种植与果园监管“智慧化”,AI技术打造智慧果园视频综合解决方案

一、方案背景 我国是水果生产大国&#xff0c;果园种植面积大、产量高。由于果园的位置大都相对偏远、面积较大&#xff0c;值守的工作人员无法顾及到园区每个角落&#xff0c;因此人为偷盗、野生生物偷吃等事件时有发生&#xff0c;并且受极端天气如狂风、雷暴、骤雨等影响&a…

山东省赛二阶段第一部分解题思路

提交攻击者的IP地址 192.168.1.7 这个直接awk过滤一下ip次数&#xff0c;这个ip多得离谱&#xff0c;在日志里面也发现了它的恶意行为&#xff0c;后门&#xff0c;反弹shell 识别攻击者使用的操作系统 Linux 找出攻击者资产收集所使用的平台 shodan 提交攻击者目…

C#,数值计算——数据建模Fitab的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Fitting Data to a Straight Line /// </summary> public class Fitab { private int ndata { get; set; } private double a { get; set; } …

CTF之信息收集

什么是信息收集 信息收集是指通过各种方式获取所需要的信息&#xff0c;以便我们在后续的渗透过程更好的进行。最简单的比如说目标站点的IP、中间件、脚本语言、端口、邮箱等等。我觉得信息收集在我们参透测试的过程当中&#xff0c;是最重要的一环&#xff0c;这一环节没做好…

Java-Exception

目录 异常概念ErrorException 体系图常见运行时异常NullPointerExceptionArithmeticExceptionArrayIndexOutOfBoundExceptionClassCastExceptionNumberFormatException 常见的编译异常异常处理机制自定义异常throw和throws对比 异常是Java编程中的常见问题&#xff0c;了解如何…

nsoftware Cloud SMS 2022 .NET 22.0.8 Crack

nsoftware Cloud SMS 能够通过各种流行的消息服务&#xff08;包括 Twilio、Sinch、SMSGlobal、SMS.to、Vonage、Clickatell 等&#xff09;发送、接收和安排 SMS 消息&#xff0c;从而提供了一种简化且高效的消息服务方法。 Cloud SMS 提供单个 SMS 组件&#xff0c;允许通过…

JDBC-day02(使用PreparedStatement实现CRUD操作)

所需的数据库数据要导入到自己的数据库库中 三&#xff1a;使用PreparedStatement实现CRUD操作 数据库连接被用于向数据库服务器发送命令和 SQL 语句&#xff0c;并接受数据库服务器返回的结果。其实一个数据库连接就是一个Socket连接。CRUD操作&#xff1a;根据返回值的有无…

【Go】go-es统计接口被刷数和ip访问来源

go-es模块统计日志中接口被刷数和ip访问来源 以下是使用go的web框架gin作为后端&#xff0c;展示的统计页面 背景 上面的数据来自elk日志统计。因为elk通过kibana进行展示&#xff0c;但是kibana有一定学习成本且不太能满足定制化的需求&#xff0c;所以考虑用编程的方式…

Eclipse iceoryx™ - 真正的零拷贝进程间通信

1 序言 通过一个快速的背景教程&#xff0c;介绍项目范围和安装所需的所有内容以及第一个运行示例。 首先&#xff1a;什么是冰羚&#xff1f; iceoryx是一个用于各种操作系统的进程间通信&#xff08;IPC&#xff09;中间件&#xff08;目前我们支持Linux、macOS、QNX、FreeBS…

C语言中文网 - Shell脚本 - 1

Shell 既是一个连接用户和 Linux 内核的程序&#xff0c;又是一门管理 Linux 系统的脚本语言。Shell 脚本虽然没有 C、Python、Java、C# 等编程语言强大&#xff0c;但也支持了基本的编程元素。 第1章 Shell基础&#xff08;开胃菜&#xff09; 欢迎来到 Linux Shell 的世界&am…

asp.net闲置物品购物网系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net闲置物品购物网系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发 asp.net 闲置物品购物网 二、功…