Java求职招聘网站开发实践
一、项目介绍
本文将介绍如何使用Java技术栈开发一个求职招聘网站。该网站主要实现求职者和招聘方的双向选择功能,包含用户管理、职位发布、简历投递等核心功能。
二、技术选型
- 后端框架:Spring Boot 2.7.0
 - 数据库:MySQL 8.0
 - 前端框架:Vue.js 3
 - 权限管理:Spring Security
 - ORM框架:MyBatis-Plus
 - 缓存:Redis
 - 搜索引擎:Elasticsearch
 
三、核心功能模块
1. 用户管理模块
@Entity
@Table(name = "user")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String username;private String password;private Integer userType; // 0-求职者,1-招聘方private Date createTime;// getter和setter方法
}
 
2. 职位管理模块
@RestController
@RequestMapping("/api/job")
public class JobController {@Autowiredprivate JobService jobService;@PostMapping("/publish")public Result publishJob(@RequestBody JobDTO jobDTO) {return jobService.publishJob(jobDTO);}@GetMapping("/list")public PageResult<JobVO> listJobs(JobQueryParam param) {return jobService.listJobs(param);}
}
 
3. 简历投递模块
@Service
public class ResumeServiceImpl implements ResumeService {@Autowiredprivate ResumeMapper resumeMapper;@Overridepublic Result submitResume(ResumeDTO resumeDTO) {// 校验简历信息validateResume(resumeDTO);// 保存简历Resume resume = convertToEntity(resumeDTO);resumeMapper.insert(resume);// 发送简历投递通知sendNotification(resume);return Result.success();}
}
 
四、数据库设计
主要数据表
- 用户表(user)
 - 职位表(job)
 - 简历表(resume)
 - 投递记录表(delivery_record)
 
CREATE TABLE `job` (`id` bigint NOT NULL AUTO_INCREMENT,`title` varchar(100) NOT NULL COMMENT '职位标题',`company_id` bigint NOT NULL COMMENT '公司ID',`salary_range` varchar(50) COMMENT '薪资范围',`description` text COMMENT '职位描述',`requirements` text COMMENT '任职要求',`status` tinyint DEFAULT 1 COMMENT '状态:0-关闭 1-开启',`create_time` datetime DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
五、关键技术实现
1. 职位搜索功能
@Service
public class JobSearchService {@Autowiredprivate ElasticsearchClient esClient;public List<JobVO> searchJobs(String keyword) {SearchRequest request = new SearchRequest.Builder().index("jobs").query(q -> q.multiMatch(m -> m.fields("title", "description", "requirements").query(keyword))).build();return parseSearchResult(esClient.search(request));}
}
 
2. 简历投递流程
@Service
public class DeliveryService {@Transactionalpublic Result deliverResume(DeliveryDTO dto) {// 检查是否重复投递if(checkDuplicate(dto)) {return Result.fail("请勿重复投递");}// 保存投递记录DeliveryRecord record = new DeliveryRecord();record.setJobId(dto.getJobId());record.setResumeId(dto.getResumeId());record.setStatus(DeliveryStatus.PENDING.getCode());deliveryMapper.insert(record);// 异步发送通知notificationService.sendDeliveryNotification(record);return Result.success();}
}
 
六、性能优化
- 使用Redis缓存热门职位信息
 - 使用Elasticsearch优化职位搜索
 - 实现分布式Session管理
 - 引入消息队列处理异步任务
 
七、安全性考虑
- 实现基于JWT的身份认证
 - 防止SQL注入攻击
 - XSS防护
 - 敏感数据加密
 
八、部署方案
- 使用Docker容器化部署
 - Nginx反向代理
 - 实现服务器集群
 - 配置CDN加速
 
总结
本文介绍了一个求职招聘网站的主要开发内容,包括技术选型、核心功能实现、数据库设计等方面。在实际开发中,还需要考虑更多的细节问题,如并发处理、数据安全、用户体验等。希望本文能为想要开发类似系统的开发者提供参考。
附:简历管理功能详细设计
一、简历数据模型设计
1. 简历基本信息表
CREATE TABLE `resume` (`id` bigint NOT NULL AUTO_INCREMENT,`user_id` bigint NOT NULL COMMENT '用户ID',`name` varchar(50) NOT NULL COMMENT '姓名',`gender` tinyint COMMENT '性别:0-女 1-男',`birth_date` date COMMENT '出生日期',`phone` varchar(20) NOT NULL COMMENT '手机号',`email` varchar(100) COMMENT '邮箱',`highest_education` varchar(20) COMMENT '最高学历',`work_years` int COMMENT '工作年限',`current_status` tinyint COMMENT '当前状态:0-在职 1-离职 2-应届生',`job_intention` varchar(100) COMMENT '求职意向',`expected_salary` varchar(50) COMMENT '期望薪资',`self_evaluation` text COMMENT '自我评价',`status` tinyint DEFAULT 1 COMMENT '状态:0-隐藏 1-公开',`create_time` datetime DEFAULT CURRENT_TIMESTAMP,`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`),KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
2. 教育经历表
CREATE TABLE `resume_education` (`id` bigint NOT NULL AUTO_INCREMENT,`resume_id` bigint NOT NULL COMMENT '简历ID',`school_name` varchar(100) NOT NULL COMMENT '学校名称',`major` varchar(100) COMMENT '专业',`degree` varchar(50) COMMENT '学位',`start_date` date COMMENT '开始时间',`end_date` date COMMENT '结束时间',`description` text COMMENT '在校经历',PRIMARY KEY (`id`),KEY `idx_resume_id` (`resume_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
3. 工作经历表
CREATE TABLE `resume_work_exp` (`id` bigint NOT NULL AUTO_INCREMENT,`resume_id` bigint NOT NULL COMMENT '简历ID',`company_name` varchar(100) NOT NULL COMMENT '公司名称',`position` varchar(100) COMMENT '职位',`start_date` date COMMENT '开始时间',`end_date` date COMMENT '结束时间',`work_description` text COMMENT '工作描述',PRIMARY KEY (`id`),KEY `idx_resume_id` (`resume_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
二、核心功能实现
1. 简历实体类
@Data
@Entity
@Table(name = "resume")
public class Resume {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private Long userId;private String name;private Integer gender;private LocalDate birthDate;private String phone;private String email;private String highestEducation;private Integer workYears;private Integer currentStatus;private String jobIntention;private String expectedSalary;private String selfEvaluation;private Integer status;@OneToMany(mappedBy = "resume", cascade = CascadeType.ALL)private List<ResumeEducation> educationList;@OneToMany(mappedBy = "resume", cascade = CascadeType.ALL)private List<ResumeWorkExp> workExpList;
}
 
2. 简历服务接口
public interface ResumeService {// 创建/更新简历Result<Long> saveResume(ResumeDTO resumeDTO);// 获取简历详情ResumeVO getResumeDetail(Long resumeId);// 删除简历Result deleteResume(Long resumeId);// 更新简历状态Result updateResumeStatus(Long resumeId, Integer status);// 获取用户的简历列表List<ResumeVO> getUserResumes(Long userId);// 导出简历PDFbyte[] exportResumePDF(Long resumeId);
}
 
3. 简历服务实现
@Service
@Slf4j
public class ResumeServiceImpl implements ResumeService {@Autowiredprivate ResumeMapper resumeMapper;@Autowiredprivate ResumeEducationMapper educationMapper;@Autowiredprivate ResumeWorkExpMapper workExpMapper;@Override@Transactionalpublic Result<Long> saveResume(ResumeDTO resumeDTO) {try {// 保存基本信息Resume resume = convertToEntity(resumeDTO);if (resume.getId() == null) {resumeMapper.insert(resume);} else {resumeMapper.updateById(resume);// 删除旧的教育和工作经历educationMapper.deleteByResumeId(resume.getId());workExpMapper.deleteByResumeId(resume.getId());}// 保存教育经历saveEducationList(resumeDTO.getEducationList(), resume.getId());// 保存工作经历saveWorkExpList(resumeDTO.getWorkExpList(), resume.getId());return Result.success(resume.getId());} catch (Exception e) {log.error("保存简历失败", e);throw new BusinessException("保存简历失败");}}@Overridepublic ResumeVO getResumeDetail(Long resumeId) {Resume resume = resumeMapper.selectById(resumeId);if (resume == null) {throw new BusinessException("简历不存在");}// 查询教育经历List<ResumeEducation> educationList = educationMapper.selectByResumeId(resumeId);// 查询工作经历List<ResumeWorkExp> workExpList = workExpMapper.selectByResumeId(resumeId);return buildResumeVO(resume, educationList, workExpList);}
}
 
4. 简历导出功能
@Service
public class ResumeExportService {@Autowiredprivate ResumeService resumeService;public byte[] exportPDF(Long resumeId) {// 获取简历数据ResumeVO resume = resumeService.getResumeDetail(resumeId);// 使用iText或其他PDF库生成PDFDocument document = new Document();ByteArrayOutputStream baos = new ByteArrayOutputStream();PdfWriter.getInstance(document, baos);document.open();// 添加简历内容addBasicInfo(document, resume);addEducation(document, resume.getEducationList());addWorkExp(document, resume.getWorkExpList());document.close();return baos.toByteArray();}private void addBasicInfo(Document document, ResumeVO resume) {// 添加基本信息到PDF}
}
 
三、简历附件功能
1. 附件表设计
CREATE TABLE `resume_attachment` (`id` bigint NOT NULL AUTO_INCREMENT,`resume_id` bigint NOT NULL COMMENT '简历ID',`file_name` varchar(200) NOT NULL COMMENT '文件名',`file_path` varchar(500) NOT NULL COMMENT '文件路径',`file_size` bigint COMMENT '文件大小(字节)',`file_type` varchar(50) COMMENT '文件类型',`upload_time` datetime DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (`id`),KEY `idx_resume_id` (`resume_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
2. 附件上传服务
@Service
public class ResumeAttachmentService {@Value("${resume.attachment.path}")private String attachmentPath;@Autowiredprivate ResumeAttachmentMapper attachmentMapper;public Result uploadAttachment(MultipartFile file, Long resumeId) {// 校验文件大小和类型validateFile(file);// 生成文件存储路径String fileName = generateFileName(file);String filePath = attachmentPath + "/" + fileName;// 保存文件try {file.transferTo(new File(filePath));// 保存附件记录ResumeAttachment attachment = new ResumeAttachment();attachment.setResumeId(resumeId);attachment.setFileName(file.getOriginalFilename());attachment.setFilePath(filePath);attachment.setFileSize(file.getSize());attachment.setFileType(file.getContentType());attachmentMapper.insert(attachment);return Result.success();} catch (IOException e) {log.error("上传附件失败", e);throw new BusinessException("上传附件失败");}}
}
 
四、简历模板功能
1. 模板表设计
CREATE TABLE `resume_template` (`id` bigint NOT NULL AUTO_INCREMENT,`template_name` varchar(100) NOT NULL COMMENT '模板名称',`template_type` tinyint COMMENT '模板类型:0-系统模板 1-用户模板',`template_content` text COMMENT '模板内容(JSON格式)',`preview_image` varchar(500) COMMENT '预览图',`status` tinyint DEFAULT 1 COMMENT '状态:0-禁用 1-启用',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
2. 模板应用服务
@Service
public class ResumeTemplateService {@Autowiredprivate ResumeTemplateMapper templateMapper;@Autowiredprivate ResumeService resumeService;public Result applyTemplate(Long resumeId, Long templateId) {// 获取模板ResumeTemplate template = templateMapper.selectById(templateId);if (template == null || template.getStatus() != 1) {throw new BusinessException("模板不存在或已禁用");}// 获取当前简历ResumeVO currentResume = resumeService.getResumeDetail(resumeId);// 应用模板样式ResumeDTO updatedResume = applyTemplateStyle(currentResume, template);// 保存更新后的简历return resumeService.saveResume(updatedResume);}
}
 
五、简历隐私设置
1. 隐私配置表
CREATE TABLE `resume_privacy` (`resume_id` bigint NOT NULL COMMENT '简历ID',`phone_visible` tinyint DEFAULT 1 COMMENT '手机号可见:0-否 1-是',`email_visible` tinyint DEFAULT 1 COMMENT '邮箱可见:0-否 1-是',`birth_date_visible` tinyint DEFAULT 1 COMMENT '生日可见:0-否 1-是',`current_salary_visible` tinyint DEFAULT 0 COMMENT '当前薪资可见:0-否 1-是',PRIMARY KEY (`resume_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
2. 隐私控制服务
@Service
public class ResumePrivacyService {@Autowiredprivate ResumePrivacyMapper privacyMapper;public ResumeVO applyPrivacyControl(ResumeVO resume, Long viewerId) {// 获取隐私设置ResumePrivacy privacy = privacyMapper.selectByResumeId(resume.getId());// 如果是简历所有者,显示完整信息if (resume.getUserId().equals(viewerId)) {return resume;}// 根据隐私设置处理敏感信息if (privacy != null) {if (!privacy.getPhoneVisible()) {resume.setPhone(maskPhoneNumber(resume.getPhone()));}if (!privacy.getEmailVisible()) {resume.setEmail(maskEmail(resume.getEmail()));}// ... 处理其他隐私字段}return resume;}private String maskPhoneNumber(String phone) {if (StringUtils.isEmpty(phone)) return phone;return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");}
}
 
六、简历推荐功能
@Service
public class ResumeRecommendService {@Autowiredprivate ElasticsearchClient esClient;public List<JobVO> recommendJobs(Long resumeId) {// 获取简历关键信息ResumeVO resume = resumeService.getResumeDetail(resumeId);// 构建搜索条件SearchRequest request = new SearchRequest.Builder().index("jobs").query(q -> q.bool(b -> b.should(s -> s.match(m -> m.field("job_requirements").query(resume.getJobIntention()))).should(s -> s.match(m -> m.field("required_education").query(resume.getHighestEducation()))).should(s -> s.range(r -> r.field("required_work_years").lte(resume.getWorkYears()))))).sort(s -> s.field(f -> f.field("_score").order(SortOrder.Desc))).size(10).build();return parseSearchResult(esClient.search(request));}
}
 
以上是简历管理功能的详细设计,包含了基本的CRUD操作、简历导出、附件管理、模板功能、隐私控制以及推荐功能等核心模块。在实际开发中,还需要注意:
- 数据验证和安全性控制
 - 文件上传的安全处理
 - 大文件处理优化
 - 简历内容的版本控制
 - 简历查看记录追踪
 - 敏感信息加密存储
 - 简历导出格式的多样化支持
 
相关文章:
Java求职招聘网站开发实践
一、项目介绍 本文将介绍如何使用Java技术栈开发一个求职招聘网站。该网站主要实现求职者和招聘方的双向选择功能,包含用户管理、职位发布、简历投递等核心功能。 二、技术选型 后端框架:Spring Boot 2.7.0数据库:MySQL 8.0前端框架&#…...
一文详细了解websocket应用以及连接断开的解决方案
文章目录 websocketvite 热启动探索websocket -心跳websocket 事件监听应用过程中问题总结 websocket Websocket简介 定义和工作原理 Websocket是一种在单个TCP连接上进行全双工通信的协议。与传统的HTTP请求 - 响应模式不同,它允许服务器主动向客户端推送数据。例…...
如何做含有identify抓信号的fpga版本(image或者Bit)
在数字的FPGA debug中除了ila就是identify了,identify是synopsys公司的RTL级的调试工具。要用起来idetify,第一步就是要做出含有identify的信号的FPGA版本,quartus的是image,Ximlinx的是Bit或者Bin文件。具体有以下几步࿱…...
AIGC实践-使用Amazon Bedrock的SDXL模型进行文生图
一、Bedrock 简介 Amazon Bedrock 是 Amazon Web Services (AWS) 提供的一种生成式 AI 服务。通过 Bedrock,用户可以方便地使用多种基础模型(Foundation Models),包括 OpenAI 的 GPT、Anthropic 的 Claude 等。这些模型可以用于各…...
【源码】Sharding-JDBC源码分析之SQL中分片键路由ShardingSQLRouter的原理
Sharding-JDBC系列 1、Sharding-JDBC分库分表的基本使用 2、Sharding-JDBC分库分表之SpringBoot分片策略 3、Sharding-JDBC分库分表之SpringBoot主从配置 4、SpringBoot集成Sharding-JDBC-5.3.0分库分表 5、SpringBoot集成Sharding-JDBC-5.3.0实现按月动态建表分表 6、【…...
初学 flutter 环境变量配置
一、jdk(jdk11) 1)配置环境变量 新增:JAVA_HOMEC:\Program Files\Java\jdk-11 //你的jdk目录 在path新增:%JAVA_HOME%\bin2)验证是否配置成功(cmd运行命令) java java -version …...
蓝牙 AVRCP 协议详解
前言 随着无线音频设备的普及,蓝牙已经成为智能设备间通信的主流方式之一。除了传输音频流的 A2DP 协议外,AVRCP(Audio/Video Remote Control Profile,音频/视频远程控制协议)为用户提供了对蓝牙音频设备的控制能力&am…...
在 Ubuntu 18.04 上安装 MySQL 5.7和MySQL 8
1.Ubuntu安装MySQL 5.72.Ubuntu安装MySQL 8 在 Ubuntu 18.04 上安装 MySQL 5.7,可以按照以下步骤操作: 1. 更新系统包列表 运行以下命令以确保系统包列表是最新的: sudo apt update2. 检查默认 MySQL 版本 Ubuntu 18.04 默认提供 MySQL 5.…...
第4章 Spring Boot自动配置
自动配置概述 SpringBoot的两大核心 Spring Boot 框架的两大核心特性可以概括为“启动器”(Starter)和“自动配置”(Auto-configuration)。 启动器(Starter): Spring Boot 提供了一系列的 Star…...
显存:存储,GPU:计算;Pipeline Parallelism(管道并行)
目录 显存:存储,GPU:计算 流水线切分策略:(数据并并,多头并行,单头MLP切片) 存储(显存)和计算(GPU)负载不均衡的问题 1,2,3,4,5指的计算任务(数据切分) 大方块代表GPU计算 黄色代表显存 解决办法:重计算和流水线切分策略 重计算策略: 流水线切分策略:…...
费曼路径积分简单示例
费曼路径积分简单示例 费曼路径积分是量子力学中的一种计算方法,它通过对所有可能路径的贡献进行积分,来计算粒子从一个点到另一个点的概率幅。与经典力学不同,经典力学中粒子沿着使作用量最小的路径运动,而在量子力学中…...
40分钟学 Go 语言高并发:【实战】并发安全的配置管理器(功能扩展)
【实战】并发安全的配置管理器(功能扩展) 一、扩展思考 分布式配置中心 实现配置的集中管理支持多节点配置同步实现配置的版本一致性 配置加密 敏感配置的加密存储配置的安全传输访问权限控制 配置格式支持 支持YAML、TOML等多种格式配置格式自动…...
麒麟安全增强-kysec
DAC: 自主访问控制是linux下默认的接入控制机制,通过对资源读、写、执行操作,保证系统安全 MAC:安全接入控制机制,由操作系统约束的访问控制,默认情况下,MAC不允许任何访问,用户可以自定义策略规则制定允许什么 ,从而避免很多攻击。 MAC强制访问控制常见的实现方式:…...
shell编程(8)
目录 一、until循环 示例 until 和 while 的区别 二、case语句 基本语法 示例 1. 简单的 case 语句 2. 使用通配符 3. 处理多个匹配 case 和 if 的比较 case 语句: if 语句: 三、基本函数 基本函数定义和调用 1. 定义一个简单的函数 2. …...
高级java每日一道面试题-2024年11月24日-JVM篇-说说对象分配规则?
如果有遗漏,评论区告诉我进行补充 面试官: 说说对象分配规则? 我回答: 在Java高级面试中,对象分配规则是一个核心考点,它涉及到JVM的内存管理、对象的创建和初始化等多个方面。以下是对Java对象分配规则的详细解释: 一、内存分配区域 J…...
进程间通信5:信号
引入 我们之前学习了信号量,信号量和信号可不是一个东西,不能混淆。 信号是什么以及一些基础概念 信号是一种让进程给其他进程发送异步消息的方式 信号是随时产生的,无法预测信号可以临时保存下来,之后再处理信号是异步发送的…...
性能测试及调优
一、性能测试介绍 1、什么叫做性能测试? (1)通过某些工具或手段来检测软件的某些指标是否达到了要求,这就是性能测试 (2)指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指…...
实战基于LangChain和ChatGLM私有化部署聊天机器人
本文主要阐述了如何使用第二代6B模型进行对话训练,以及如何通过微调来提高大模型的性能。文中提到了在8501端口上启动第二代6B模型,并使用极简模板进行请求。与第一代模型相比,第二代6B模型具有更强的对话能力,并且可以通过微调来…...
利用adb工具安装卸载安卓平板(手机)软件
参考链接: 1、ADB 操作命令详解及用法大全 2、全面掌握Android调试工具箱:ADB与实用程序实战 平时使用小米手机没有感觉,miui系统做的确实好。最近买了个水货学习系统平板(主要看重硬件配置,性价比很高,但…...
基于docker进行任意项目灵活发布
引言 不管是java还是python程序等,使用docker发布的优势有以下几点: 易于维护。直接docker命令进行管理,如docker stop、docker start等,快速方便无需各种进程查询关闭。环境隔离。项目代码任何依赖或设置都可以基本独立&#x…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
