【玩儿】Java 数字炸弹小游戏(控制台版)+ IO 数据存储
Java 数字炸弹小游戏(控制台版)+ IO 数据存储
- 数字炸弹小游戏概述
- 功能实现
- 实体类
- User.java 玩家信息实体类
- GameRecode.java 游戏记录实体类
- 自定义异常
- AccountLockedException.java 账号锁定异常
- PasswordErrorException.java 密码错误异常
- UnknowAccountException 账号不存在异常
- 游戏主类
- Game.java 游戏主类
数字炸弹小游戏概述

数字炸弹控制台版小游戏是Java 集合、流程控制、IO、异常、常用类等技术的综合练习。核心需求如下:
实现数字炸弹游戏,要求如下:1、创建游戏菜单:1)注册2)登录3)开始游戏4)游戏记录5)游戏排行6)退出游戏2、菜单含义:1)注册:注册游戏玩家,要求玩家名字不能重复2)登录:使用玩家名字和密码进行登陆3)开始游戏:进入游戏,只有登录的玩家才可以开始游戏4)游戏记录:展示当前玩家的游戏记录,序号、炸弹、猜测次数、游戏开始时间、游戏结束时间、积分5)游戏排行:展示所有用户的昵称、游戏次数、总积分(倒序)6)退出游戏:结束游戏3、游戏规则a、生成100以内的随机值作为炸弹b、从控制台输入猜测的数值c、每次输入猜测值之后缩小猜测范围直到猜中为止d、本轮游戏结束之后反馈菜单(继续游戏、返回菜单)e、本轮游戏结束之后根据猜测次数和游戏时间换算积分4、游戏积分a、1-3次内猜中(含3次),时间在20秒以内,积分+10b、4-6次内猜中(含6次),时间在21-60秒,积分+5c、7-10次内猜中(含10次),时间在60秒以上,积分+2d、10次以上猜中不得分5、拓展功能:a、给游戏排行榜新加菜单选项,支持升序、降序的展示菜单。b、新增玩家管理功能,锁定玩家和解锁玩家。c、给登录功能增加异常处理,自定义:账号不存在异常、认证失败异常、锁定异常d、基于 IO 存储玩家信息和记录信息到文件。
功能实现
实体类
User.java 玩家信息实体类
package com.riu.collect.game2.entity;import java.io.Serializable;
import java.util.Objects;/*** 玩家类,玩家的相关信息*/
public class User implements Comparable<User>, Serializable {// 账号private String name;// 密码private String password;// 总的猜测数量、游戏的次数private Integer totalCount;// 总的积分private Integer totalPoints;// 玩家锁定、解锁的标记:false(解锁状态)true(锁定状态)private boolean isLock = false;public User() {}public User(String name, String password, Integer totalCount, Integer totalPoints) {this.name = name;this.password = password;this.totalCount = totalCount;this.totalPoints = totalPoints;}public User(String name, String password, Integer totalCount, Integer totalPoints, boolean isLock) {this.name = name;this.password = password;this.totalCount = totalCount;this.totalPoints = totalPoints;this.isLock = isLock;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Integer getTotalCount() {return totalCount;}public void setTotalCount(Integer totalCount) {this.totalCount = totalCount;}public Integer getTotalPoints() {return totalPoints;}public void setTotalPoints(Integer totalPoints) {this.totalPoints = totalPoints;}public boolean isLock() {return isLock;}public void setLock(boolean lock) {isLock = lock;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", password='" + password + '\'' +", totalCount=" + totalCount +", totalPoints=" + totalPoints +", isLock=" + isLock +'}';}/*** equals 和 hashCode 可以帮助我们判断对象的唯一性* 当前类的唯一性的条件是:用户名字,玩家在注册时候可以保证唯一性* @param o* @return*/@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;User user = (User) o;return Objects.equals(name, user.name);}@Overridepublic int hashCode() {return Objects.hash(name);}@Overridepublic int compareTo(User o) {return this.getName().compareTo(o.name);}
}
GameRecode.java 游戏记录实体类
package com.riu.collect.game2.entity;import java.io.Serializable;
import java.util.Date;/*** 每次游戏的记录信息*/
public class GameRecode implements Serializable {// 炸弹private Integer boom;// 猜测次数private Integer count;// 游戏开始时间private Date startTime;// 游戏结束时间private Date endTime;// 积分private Integer points;public Integer getBoom() {return boom;}public void setBoom(Integer boom) {this.boom = boom;}public Integer getCount() {return count;}public void setCount(Integer count) {this.count = count;}public Date getStartTime() {return startTime;}public void setStartTime(Date startTime) {this.startTime = startTime;}public Date getEndTime() {return endTime;}public void setEndTime(Date endTime) {this.endTime = endTime;}public Integer getPoints() {return points;}public void setPoints(Integer points) {this.points = points;}@Overridepublic String toString() {return "GameRecode{" +"boom=" + boom +", count=" + count +", startTime=" + startTime +", endTime=" + endTime +", points=" + points +'}';}
}
自定义异常
AccountLockedException.java 账号锁定异常
package com.riu.collect.game2.exception;/*** 玩家账号锁定异常*/
public class AccountLockedException extends Exception {public AccountLockedException() {super();}public AccountLockedException(String message) {super(message);}@Overridepublic String getMessage() {return super.getMessage();}
}
PasswordErrorException.java 密码错误异常
package com.riu.collect.game2.exception;/*** 玩家密码错误,认证失败*/
public class PasswordErrorException extends Exception {public PasswordErrorException() {super();}public PasswordErrorException(String message) {super(message);}@Overridepublic String getMessage() {return super.getMessage();}
}
UnknowAccountException 账号不存在异常
package com.riu.collect.game2.exception;/*** 玩家账号不存在异常*/
public class UnknowAccountException extends Exception {public UnknowAccountException() {super();}public UnknowAccountException(String message) {super(message);}@Overridepublic String getMessage() {return super.getMessage();}
}
游戏主类
Game.java 游戏主类
package com.riu.collect.game2;import com.riu.collect.game2.entity.GameRecode;
import com.riu.collect.game2.entity.User;
import com.riu.collect.game2.exception.AccountLockedException;
import com.riu.collect.game2.exception.PasswordErrorException;
import com.riu.collect.game2.exception.UnknowAccountException;import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Stream;public class Game {// 创建一个用户的集合private List<User> userList = new ArrayList<>();// 玩家和记录的对应关系private Map<String, List<GameRecode>> recodeMap = new HashMap<>();// 当前登录的玩家名字private String loginName;// 判断玩家是登录的标记,默认 false 表示没有登录。// 等成功之后可以进行一些菜单操作boolean isLogin = false;// 两个文件路径private String userInfoPath = "src/com/riu/collect/game2/userInfo.txt";private String recodeInfoPath = "src/com/riu/collect/game2/recodeInfo.txt";// 定义公共的输入对象private Scanner scanner = new Scanner(System.in);public static void main(String[] args) {Game game = new Game();game.init();while (true){game.menu();}}/*** 初始化系统,从文件中将数据读取到 List*/private void init(){try {/* 用户玩家信息读取 */File userInfoFile = new File(userInfoPath);if(userInfoFile.exists()){ObjectInputStream oisUserInfoStream = new ObjectInputStream(new FileInputStream(userInfoPath));Object userInfoObject = oisUserInfoStream.readObject();if(userInfoObject != null){userList = (List<User>) userInfoObject;}oisUserInfoStream.close();}/* 用户玩家游戏记录读取 */File recodeInfoFile = new File(recodeInfoPath);if(recodeInfoFile.exists()) {ObjectInputStream oisRecodeInfoStream = new ObjectInputStream(new FileInputStream(recodeInfoPath));Object recodeObject = oisRecodeInfoStream.readObject();if (recodeObject != null) {recodeMap = (Map<String, List<GameRecode>>) recodeObject;}oisRecodeInfoStream.close();}} catch (Exception e) {throw new RuntimeException(e);}}public void menu(){System.out.println("===================================");System.out.println("\t\t\t1)注册");System.out.println("\t\t\t2)登录");if(isLogin){System.out.println("\t\t\t3)开始游戏");System.out.println("\t\t\t4)游戏记录");}System.out.println("\t\t\t5)游戏排行");System.out.println("\t\t\t6)退出游戏");System.out.println("\t\t\t7)玩家管理");System.out.println("===================================");System.out.print("请输入菜单编号:");int menuNum = scanner.nextInt();switch (menuNum) {case 1:// 注册reg();break;case 2:// 登录try {login();} catch (UnknowAccountException | PasswordErrorException | AccountLockedException e) {System.out.println(e.getMessage());}break;case 3:// 开始游戏startGame();break;case 4:// 展示游戏记录gameRecode();break;case 5:// 展示游戏排行榜gameTop();break;case 6:// 退出游戏exit();break;case 7:// 退出游戏userControl();break;}}/*** 注册*/private void reg() {System.out.print("请输入玩家昵称:");String name = scanner.next();System.out.print("请输入密码:");String password = scanner.next();// 把输入的信息封装到对象中User user = new User();user.setName(name);user.setPassword(password);// 判断集合中是否已经存在玩家信息// 这里使用 contains 对比,要求 user 类必须重写 equals 和 hashcode 方法if(userList.contains(user)){System.out.println("玩家已经存在,快去开始游戏吧...");} else {// 把对象添加到集合userList.add(user);System.out.println("注册成功,快去开始游戏吧...");}}/*** 登录* 1、账号是否存在* 2、账号密码是否匹配* 3、账号是否被锁定** 账号是用户输入的,根据用户输入的信息,递进验证账号是否可以使用。* 1、账号是否存在:拿着用户输入的信息,从集合中获取用户的信息对象。可以把用户对象临时存储一下。* 2、账号密码是否匹配:拿着用户输入的密码,和获取到的用户对象的密码对比。* 3、账号是否被锁定:根据获取到的用户的对象信息中的锁定状态判断。*/private void login() throws UnknowAccountException, PasswordErrorException, AccountLockedException {System.out.print("请输入玩家昵称:");String name = scanner.next();System.out.print("请输入密码:");String password = scanner.next();// 用于临时存储用户信息的对象User tempUser = null;// 循环遍历,找账号信息for (User item : userList) {String tempName = item.getName();// 用户输入的账号,和集合中获取的用户的账号对比// 找到用户了。if (name.equals(tempName)) {tempUser = item;break;}}// 基于账号信息(tempUser)做3种别判断// 1、账号是否存在if(tempUser == null){// System.out.println("账号不存在!");throw new UnknowAccountException("该玩家不存在!");} else {// System.out.println("账号存在!");// 2、账号密码是否匹配// 玩家输入的密码和 tempUser 的密码匹配if(password.equals(tempUser.getPassword())){// System.out.println("密码正确!");// 3、账号是否被锁定if(tempUser.isLock()){// System.out.println("账号被锁定");throw new AccountLockedException("账号被锁定!");} else {System.out.println("账号可用,登录成功!");// 玩家存在的标记修改为 trueisLogin = true;// 登录成功之后把当前玩家的名字赋值给全局的变量loginName = name;// 登录成功了,给当前用户创建一个用于存储游戏记录的list结果recodeMap.put(name, new ArrayList<>());}} else {// System.out.println("密码不正确,认证失败!");throw new PasswordErrorException("密码错误!");}}}/*** 开始游戏*/private void startGame() {// 可以给循环做一个标记:lab 就是这个循环的标记名字,名字可以任意。lab:while (true){/* 游戏本身需要的相关变量 */// 区间开始和结束int start = 0;int end = 100;/* 游戏本身需要的相关变量 *//* 游戏记录数据需要的相关变量 */// 每一轮游戏的过程// 随机炸弹int boom = new Random().nextInt(100);// 开始和结束时间Date startTime = new Date();Date endTime = null;// 每一轮游戏猜的次数int count = 0;// 每一轮游戏的积分变量int points = 0;/* 游戏记录数据需要的相关变量 */while (true){// 猜测次数的累加count++;System.out.print("请猜:");int num = scanner.nextInt();if(num > boom){end = num;} else if(num < boom){start = num;} else {System.out.println("💣游戏结束💣");/* 游戏结束才开始收集游戏信息:开始 */// 结束时间endTime = new Date();// 计算时间间隔long l = (endTime.getTime() - startTime.getTime()) / 1000;// 计算次数if (count >= 1 && count <= 3) {points = 10;} else if (count >= 4 && count <= 6) {points = 5;} else if (count >= 7 && count <= 10) {points = 2;} else {points = 0;}// 创建记录对象,封装游戏过程中的记录信息GameRecode gameRecode = new GameRecode();gameRecode.setBoom(boom);gameRecode.setCount(count);gameRecode.setStartTime(startTime);gameRecode.setEndTime(endTime);gameRecode.setPoints(points);// 这些记录是哪个玩家的。把记录和玩家挂钩。List<GameRecode> gameRecodeList = recodeMap.get(loginName);gameRecodeList.add(gameRecode);/* 游戏结束才开始收集游戏信息:结束 */// 跳出猜测的循环break;}System.out.println("游戏继续,区间是:[" + start + ", " + end + "]");}System.out.println("****************************************");System.out.println("\t\t\t1)继续游戏");System.out.println("\t\t\t2)返回菜单");System.out.println("****************************************");System.out.print("请输入菜单编号:");String menuNum = scanner.next();switch (menuNum) {case "1":// 结束的是 switchbreak;case "2":// 结束标记是 lab 的循环break lab;}}}/*** 展示当前用户的游戏记录*/private void gameRecode() {// 通过玩家和记录的Map集合,获取登录玩家的记录集合List<GameRecode> gameRecodeList = recodeMap.get(loginName);// 遍历当前玩家的记录集合System.out.println("序号\t炸弹\t次数\t开始时间\t\t\t\t结束时间\t\t\t\t积分");int i = 1;for (GameRecode gameRecode : gameRecodeList) {System.out.println(i++ + "\t" +gameRecode.getBoom()+ "\t" +gameRecode.getCount()+ "\t" +formatTime(gameRecode.getStartTime())+ "\t" +formatTime(gameRecode.getEndTime())+ "\t" +gameRecode.getPoints()+ "\t");}}/*** 格式化时间的方法* @param date* @return*/private String formatTime(Date date) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return sdf.format(date);}/*** 按照积分的降序展示每个用户的信息* 用户的昵称、游戏次数、总积分(倒序)*/private void gameTop() {// 遍历用户结果集,汇总玩家的记录数据,循环走完之后,userList 中的每个玩家的游戏次数和总积分都会有值了for (User user : userList) {// 获取当前用户游戏记录的结果集List<GameRecode> gameRecodeList = recodeMap.get(user.getName());// 遍历游戏记录结果集,统计所有积分的和int sumPoints = 0;for (GameRecode gameRecode : gameRecodeList) {Integer points = gameRecode.getPoints();sumPoints += points;}// 将统计好的结果在赋值给用户对象user.setTotalCount(gameRecodeList.size());user.setTotalPoints(sumPoints);}System.out.println("-----------------------------------");System.out.println("\t\t\t1)升序展示");System.out.println("\t\t\t2)降序展示");System.out.println("-----------------------------------");System.out.print("请输入菜单编号:");String menuNum = scanner.next();System.out.println("昵称\t游戏次数\t总积分");// 默认升序排序,调用 sorted 之后返回一个可以继续操作的流Stream<User> newStream = userList.stream();switch (menuNum) {case "1":newStream = newStream.sorted(Comparator.comparing(User::getTotalPoints));break;case "2":newStream = newStream.sorted(Comparator.comparing(User::getTotalPoints).reversed());break;}// 输出放到最后newStream.forEach(user -> {System.out.println(user.getName()+ "\t" +user.getTotalCount() + "\t\t" +user.getTotalPoints());});// 根据积分倒叙排序// 1、List 转化为 Stream 流对象// 2、调用 Stream 的 sorted 方法进行排序// 3、sorted 需要传递一个排序的规则,这个规则是 Comparator 类型。这里思考:如何获取 Comparator 类型// 4、Comparator.comparing 方法可以返回一个 Comparator 类型,也就是排序的规则对象。其中还要知道排序的数据是哪个?是积分// 解析:Comparator.comparing 构建一个规则对象。方法传递要排序的关键字(数据属性)。reversed() 就是降序/*userList.stream().sorted(Comparator.comparing(User::getTotalPoints).reversed()).forEach(user -> {System.out.println(user.getName()+ "\t" +user.getTotalCount() + "\t\t" +user.getTotalPoints());});*/}/*** 结束游戏*/private void exit() {// 添加 IO 的操作,把玩家的信息写入到文件。try {/* 用户信息的存储 */// 也就是把 userList 的数据写入到文件File userInfoFile = new File(userInfoPath);if(!userInfoFile.exists()){userInfoFile.createNewFile();}// 创建对象的输出流ObjectOutputStream oosUserInfoSteam = new ObjectOutputStream(new FileOutputStream(userInfoFile));oosUserInfoSteam.writeObject(userList);oosUserInfoSteam.close();/* 用户游戏记录的存储 */// 也就是把 userList 的数据写入到文件File recodeFile = new File(recodeInfoPath);if(!recodeFile.exists()){recodeFile.createNewFile();}// 创建对象的输出流ObjectOutputStream oosRecodeInfoSteam = new ObjectOutputStream(new FileOutputStream(recodeInfoPath));oosRecodeInfoSteam.writeObject(recodeMap);oosRecodeInfoSteam.close();} catch (Exception e) {e.printStackTrace();System.out.println("文件操作异常!");}System.exit(0);}/*** 玩家管理:对玩家进行锁定和解锁*/private void userControl(){System.out.print("请输入要管理的玩家昵称:");// 要匹配的玩家名字String userName = scanner.next();User lockUser = null;boolean isLock = false;for (User user : userList) {String name = user.getName();if(userName.equals(name)){lockUser = user;break;}}if(lockUser != null){// 找到玩家之后,再进行业务处理System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");System.out.println("\t\t\t1)锁定玩家");System.out.println("\t\t\t2)解锁玩家");System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");System.out.print("请输入菜单编号:");String menuNum = scanner.next();switch (menuNum){case "1":isLock = true;break;case "2":isLock = false;break;}lockUser.setLock(isLock);System.out.println("^^^^^操作成功^^^^^");} else {System.out.println("该玩家不存在!");}}
}
相关文章:
【玩儿】Java 数字炸弹小游戏(控制台版)+ IO 数据存储
Java 数字炸弹小游戏(控制台版) IO 数据存储 数字炸弹小游戏概述功能实现实体类User.java 玩家信息实体类GameRecode.java 游戏记录实体类 自定义异常AccountLockedException.java 账号锁定异常PasswordErrorException.java 密码错误异常UnknowAccountEx…...
今日头条躺赚流量:自动化新闻爬取和改写脚本
构建一个自动化的新闻爬取和改写系统,实现热点新闻的自动整理和发布,需要分为以下几个模块:新闻爬取、信息解析与抽取、内容改写、自动发布。以下是每个模块的详细实现步骤和代码示例: 1. 新闻爬取模块 目标:从新闻网…...
日常实习与暑期实习详解
日常实习与暑期实习详解 问了下正在实习的同学,发现天要塌了–才知道日常实习是没有笔试的 1. 实习的定义 1.1 日常实习 日常实习是企业长期招聘的实习岗位,通常没有时间限制。企业会在需要时进行招聘,招聘对象包括在校大学生和大一、大二的…...
Git的原理和使用(六)
本文主要讲解企业级开发模型 1. 引入 交付软件的流程:开发->测试->发布上线 上面三个过程可以详细划分为一下过程:规划、编码、构建、测试、发 布、部署和维护 最初,程序⽐较简单,⼯作量不⼤,程序员⼀个⼈可以完…...
Elasticsearch 中的高效按位匹配
作者:来自 Elastic Alexander Marquardt 探索在 Elasticsearch 中编码和匹配二进制数据的六种方法,包括术语编码(我喜欢的方法)、布尔编码、稀疏位位置编码、具有精确匹配的整数编码、具有脚本按位匹配的整数编码以及使用 ESQL 进…...
LSTM,全称长短期记忆网络(Long Short-Term Memory),是一种特殊的循环神经网络(RNN)结构
关于lstm超参数设置,每个参数都有合适的范围,超过这个范围则lstm训练不再有效,loss不变,acc也不变 LSTM,全称长短期记忆网络(Long Short-Term Memory),是一种特殊的循环神经网络&am…...
导出问题处理
问题描述 测试出来一个问题,使用地市的角色,导出数据然后超过了20w的数据,提示报错,我还以为是偶然的问题,然后是发现是普遍的问题,本地环境复现了,然后是,这个功能是三套角色&…...
通过cv库智能切片 把不同的分镜切出来 自媒体抖音快手混剪
用 手机自动化脚本,从自媒体上获取视频,一个商品对应几百个视频,我们把这几百个视频下载下来,进行分镜 视频切片,从自媒体上下载视频,通过cv库用直方图识别每个镜头进行切片。 下载多个图片进行视频的伪原…...
【机器学习】——numpy教程
文章目录 1.numpy简介2.初始化numpy3.ndarry的使用3.1numpy的属性3.2numpy的形状3.3ndarray的类型 4numpy生成数组的方法4.1生成0和1数组4.2从现有的数组生成4.3生成固定范围的数组4.4生成随机数组 5.数组的索引、切片6.数组的形状修改7.数组的类型修改8.数组的去重9.ndarray的…...
多线程——线程的状态
线程状态的意义 线程状态的意义在于描述线程在执行过程中的不同阶段和条件,帮助开发者更好地管理和调度线程资源。 线程的多种状态 线程的状态是一个枚举类型(Thread.State),可以通过线程名.getState()…...
开源数据库 - mysql - 组织结构(与oracle的区别)
组织形式区别 mysql(Schema -> Table -> Column -> Row) Schema(方案): Scheme是关于数据库和表的布局及特性的信息。它可以用来描述数据库中特定的表以及整个数据库和其中表的信息,如表的一些特…...
vue3+vite 部署npm 包
公司需要所以研究了一下怎么部署安装,比较简单 先下载个vue项目 不用安准路由,pinna 啥的,只需要一个最简单的模版 删掉App.vue 中的其它组件 npm create vuelatest 开始写自定义组件 新建一个el-text 组件, name是重点,vue3中…...
华为鸿蒙HarmonyOS应用开发者高级认证视频及题库答案
华为鸿蒙开发者高级认证的学习资料 1、课程内容涵盖HarmonyOS系统介绍、DevEco Studio工具使用、UI设计与开发、Ability设计与开发、分布式特性、原子化服务卡片以及应用发布等。每个实验都与课程相匹配,帮助加深理解并掌握技能 2、学习视频资料 华为HarmonyOS开发…...
【计网】从零开始认识IP协议 --- 认识网络层,认识IP报头结构
从零开始认识IP协议 1 网络层协议1.1 初步认识IP协议1.2 初步理解IP地址 2 IP协议报头3 初步理解网段划分 1 网络层协议 1.1 初步认识IP协议 我们已经熟悉了传输层中的UDP和TCP协议,接下来我们来接触网络层的协议: 网络层在计算机网络中的意义主要体现…...
大一物联网要不要转专业,转不了该怎么办?
有幸在2014年,踩中了物联网的风口,坏消息,牛马的我,一口汤都没喝上。 依稀记得,当时市场部老大,带我去上海参加电子展会,印象最深的,一些物联网云平台,靠着一份精美PPT&a…...
LeetCode题练习与总结:4的幂--342
一、题目描述 给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。 整数 n 是 4 的幂次方需满足:存在整数 x 使得 n 4^x 示例 1: 输入:n 16 输出&am…...
ubuntu GLEW could not be initialized : Unknown error
原因 某些ubuntu版本默认使用wayland协议,glew不支持 解决方法 1、编辑GDM3配置文件 sudo nano /etc/gdm3/custom.conf 2、修改配置文件 去掉#WaylandEnablefalse前的# 3、重启GDM3服务 sudo systemctl restart gdm3 修改后默认使用X11协议。...
51c~目标检测~合集1
我自己的原文哦~ https://blog.51cto.com/whaosoft/12371248 #目标检测x1 又一个发现 都不知道是第几了 是一个高效的目标检测 动态候选较大程度提升检测精度 目标检测是一项基本的计算机视觉任务,用于对给定图像中的目标进行定位和分类。 论文地址:…...
前端工程化面试题
说一下模块化方案 模块化是为了解决代码的复用和组织问题,可以说有了模块化才让前端有了工程的概念,模块化要解决两大问题 代码隔离和依赖管理,从node.js最早发布的commonjs 到浏览器端的 AMD,CMD 规范以及兼容的 UMD 规范,再到现…...
【Visual Studio】下载安装 Visual Studio Community 并配置 C++ 桌面开发环境的图文教程
引言 Visual Studio 是一个面向 .NET 和 C 开发人员的综合性 Windows 版 IDE,可用于构建 Web、云、桌面、移动应用、服务和游戏。 安装步骤 访问 Visual Studio 的官方下载页面: https://visualstudio.microsoft.com/zh-hans/downloads/运行已下载的 V…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
