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 {
    
    @Autowired
    private 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 {
    
    @Autowired
    private ResumeMapper resumeMapper;
    
    @Override
    public Result submitResume(ResumeDTO resumeDTO) {
        // 校验简历信息
        validateResume(resumeDTO);
        
        // 保存简历
        Resume resume = convertToEntity(resumeDTO);
        resumeMapper.insert(resume);
        
        // 发送简历投递通知
        sendNotification(resume);
        
        return Result.success();
    }
}

四、数据库设计

主要数据表

  1. 用户表(user)
  2. 职位表(job)
  3. 简历表(resume)
  4. 投递记录表(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 {
    
    @Autowired
    private 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 {
    
    @Transactional
    public 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();
    }
}

六、性能优化

  1. 使用Redis缓存热门职位信息
  2. 使用Elasticsearch优化职位搜索
  3. 实现分布式Session管理
  4. 引入消息队列处理异步任务

七、安全性考虑

  1. 实现基于JWT的身份认证
  2. 防止SQL注入攻击
  3. XSS防护
  4. 敏感数据加密

八、部署方案

  1. 使用Docker容器化部署
  2. Nginx反向代理
  3. 实现服务器集群
  4. 配置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);
    
    // 导出简历PDF
    byte[] exportResumePDF(Long resumeId);
}

3. 简历服务实现

@Service
@Slf4j
public class ResumeServiceImpl implements ResumeService {
    
    @Autowired
    private ResumeMapper resumeMapper;
    
    @Autowired
    private ResumeEducationMapper educationMapper;
    
    @Autowired
    private ResumeWorkExpMapper workExpMapper;
    
    @Override
    @Transactional
    public 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("保存简历失败");
        }
    }
    
    @Override
    public 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 {
    
    @Autowired
    private ResumeService resumeService;
    
    public byte[] exportPDF(Long resumeId) {
        // 获取简历数据
        ResumeVO resume = resumeService.getResumeDetail(resumeId);
        
        // 使用iText或其他PDF库生成PDF
        Document 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;
    
    @Autowired
    private 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 {
    
    @Autowired
    private ResumeTemplateMapper templateMapper;
    
    @Autowired
    private 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 {
    
    @Autowired
    private 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 {
    
    @Autowired
    private 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操作、简历导出、附件管理、模板功能、隐私控制以及推荐功能等核心模块。在实际开发中,还需要注意:

  1. 数据验证和安全性控制
  2. 文件上传的安全处理
  3. 大文件处理优化
  4. 简历内容的版本控制
  5. 简历查看记录追踪
  6. 敏感信息加密存储
  7. 简历导出格式的多样化支持

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

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

相关文章

光伏业务管理系统能解决光伏企业什么问题?

随着技术进步和市场规模的扩大&#xff0c;光伏企业面临着日益复杂的管理挑战&#xff0c;包括但不限于项目监管、运维管理、供应链优化、客户管理以及数据分析决策等方面。为了解决这些挑战&#xff0c;光伏业务管理系统应运而生&#xff0c;成为提升光伏企业运营效率、降低成…

【UE5】在材质中计算模型在屏幕上的比例

ViewProperty节点有很多有意思的变量 例如用 ViewProperty 的 tan ⁡ ( FOV / 2 ) \tan(\text{FOV} / 2) tan(FOV/2) 输出&#xff0c;用它计算模型占屏幕的比例。 &#xff08;常用于for运算的次数优化&#xff0c;也可以用于各种美术效果&#xff09; ScaleOnScreen Obje…

2024年人工智能技术赋能网络安全应用测试:广东盈世在钓鱼邮件识别场景荣获第三名!

近期&#xff0c;2024年国家网络安全宣传周“网络安全技术高峰论坛主论坛暨粤港澳大湾区网络安全大会”在广州成功举办。会上&#xff0c;国家计算机网络应急技术处理协调中心公布了“2024年人工智能技术赋能网络安全应用测试结果”。结果显示&#xff0c;广东盈世计算机科技有…

spring @Async

讨论一下 spring boot 下 使用 spring 异步执行的注解 先看下这个类&#xff1a; 这个类是 spring boot auto configure 下完成 TaskExecutor的自动配置。 1. 需要在类路径存在 ThreadPoolTaskExecutor&#xff0c;这个类是 是spring context模块下的类&#xff0c;也就是 需…

搜维尔科技:多画面显示3D系统解决方案,数据孪生可视化大屏3D展示技术

集成多画面系统 集成多画面系统解决方案 1.适合多个用户的紧凑型入门级解决方案 2.会议室功能、审批功能、3D模型讨论等多种使用可能性 3.配有组合设备&#xff0c;方便整合 CAVE 多画面显示系统 1.专业的大屏幕多画面解决方案 2.墙壁、天花板和地板三面CAVE 3.专为沉浸…

linux从0到1——shell编程7

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

数据科学与SQL:组距分组分析 | 区间分布问题

目录 0 问题描述 1 数据准备 2 问题分析 3 小结 0 问题描述 绝对值分布分析也可以理解为组距分组分析。对于某个指标而言&#xff0c;一个记录对应的指标值的绝对值&#xff0c;肯定落在所有指标值的绝对值的最小值和最大值构成的区间内&#xff0c;根据一定的算法&#x…

大数据调度组件之Apache DolphinScheduler

Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用。 主要特性 易于部署&#xff0c;提供四种部署方式&#xff0c;包括Standalone、Cluster、Docker和…

使用 前端技术 创建 QR 码生成器 API1

前言 QR码&#xff08;Quick Response Code&#xff09;是一种二维码&#xff0c;于1994年开发。它能快速存储和识别数据&#xff0c;包含黑白方块图案&#xff0c;常用于扫描获取信息。QR码具有高容错性和快速读取的优点&#xff0c;广泛应用于广告、支付、物流等领域。通过扫…

Hash table类算法【leetcode】

哈希表中关键码就是数组的索引下标&#xff0c;然后通过下标直接访问数组中的元素 那么哈希表能解决什么问题呢&#xff0c;一般哈希表都是用来快速判断一个元素是否出现集合里。 例如要查询一个名字是否在这所学校里。 要枚举的话时间复杂度是O(n)&#xff0c;但如果使用哈希…

UI自动化测试中公认最佳的设计模式-POM

一、概念 什么是POM&#xff1f; POM是PageObjectModule&#xff08;页面对象模式&#xff09;的缩写&#xff0c;其目的是为了Web UI测试创建对象库。在这种模式下&#xff0c;应用涉及的每一个页面应该定义为一个单独的类。类中应该包含此页面上的页面元素对象和处理这些元…

Elasticsearch客户端在和集群连接时,如何选择特定的节点执行请求的?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch客户端在和集群连接时&#xff0c;如何选择特定的节点执行请求的&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch客户端在和集群连接时&#xff0c;如何选择特定的节点执行请求的&#xff1f; 100…

Python数据结构day2

一、链表 1.1目的 解决顺序表存储数据有上限&#xff0c;并且插入和删除操作效率低的问题 1.2概念 链表&#xff1a;链式存储的线性表&#xff0c;使用随机物理内存存储逻辑上连续的数据 链表的组成&#xff1a;由一个个结点组成 结点&#xff1a;由数据域和链接域组成&a…

【经纬度转地址实现方案】根据给定的经纬度,查询对应城市,通过建立经纬度geohash-行政区映射表,实现快速查询

文章目录 背景目标方案设计&#xff1a;表结构设计&#xff1a;方案实现1.高德API获取行政区边界点2.外包矩形中心作为中心点3.坐标点经纬度转换为geohash 测试建表语句测试造数测试用例测试结果 总结总结 背景 最近遇到一个需求&#xff0c;需要查询给定的经纬度坐标点&#…

解锁业务成功:大数据和 AI 如何协作以释放战略洞察

在当今这个数据主导的时代&#xff0c;大数据与AI的协同作用对于寻求竞争优势的组织而言愈发关键。大数据以其庞大的数据量、多样化的数据类型以及高速的数据生成能力&#xff0c;为AI算法提供了丰富的原材料&#xff0c;助力其挖掘出有价值的洞见&#xff0c;推动明智决策的制…

LINUX系统编程之——环境变量

目录 环境变量 1、基本概念 2、查看环境变量的方法 三、查看PATH环境变量的內容 1&#xff09;不带路径也能运行的自己的程序 a、将自己的程序直接添加到PATH指定的路径下 b、将程序所在的路径添加到PATH环境中 四、环境变量与本地变量 1、本地变量创建 2、环境变量创…

QT:QListView实现table自定义代理

介绍 QListVIew有两种切换形式&#xff0c;QListView::IconMode和QListView::ListMode&#xff0c;通过setViewMode()进行设置切换。因为QListView可以像QTreeView一样显示树形结构&#xff0c;也可以分成多列。这次目标是将ListView的ListMode形态显示为table。使用代理&…

IDEA2023 创建SpringBoot项目(一)

一、Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。 二、快速开发 1.打开IDEA选择 File->New->Project 2、…

初级数据结构——树

目录 前言一、树的基本概念二、二叉树三、树的表示方法四、树的遍历树的代码模版五、经典例题[2236. 判断根结点是否等于子结点之和](https://leetcode.cn/problems/root-equals-sum-of-children/description/)代码题解 六、总结结语 前言 从这一期开始数据结构开始有那么一点…

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色,类似材质丢失

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色&#xff0c;类似材质丢失 Addressable Play Mode Script加载模式 选择 Use Existiing Build 1.Unity 切换到 PC 平台&#xff0c;执行 Addressable Build 运行&#xff0c;加载 bundle 内的预制体 显示正常 2.Unit…