当前位置: 首页 > news >正文

通讯录管理系统(IO_序列化和反序列化版)

参照之前文章,也是IO的变版

package day4;import java.io.Serializable;/*
有需求 -- 才去设计类
自定义表示通讯录单条信息的类*/
public class PhoneBookItem implements Serializable {private static final long serialVersionUID = 1L;//属性private String name;//姓名private String gender;//性别private int age;//年龄private String phone;//电话private String qq;//QQprivate String addr;//地址//构造方法public PhoneBookItem() {}public PhoneBookItem(String name, String gender, int age, String phone, String qq, String addr) {this.name = name;this.gender = gender;this.age = age;this.phone = phone;this.qq = qq;this.addr = addr;}//方法public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getQq() {return qq;}public void setQq(String qq) {this.qq = qq;}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}/** 返回对象的字符串表示形式 -- 返回一个字符串表示对象的信息* 打印对象时,系统会自动调用这个方法* */public String toString() {return "姓名:" + this.name+ " 性别:" + this.gender+ " 年龄:" + this.age+ " 电话:" + this.phone+ " QQ:" + this.qq+ " 地址:" + this.addr;}
}
package day4;
import java.io.*;
import java.util.ArrayList;/*
对通讯录的信息管理的类分层 - 特定的模块特定的事情*/
public class PhoneBookManager{//属性//ArrayListprivate ArrayList<PhoneBookItem> arr = new ArrayList<>();/*IO 部分* 启动 - 读取文件 - 读取文件中的通讯录信息到ArrayList中* 退出 - 保存文件 - 将ArrayList中的数据写入到文件** 文件的格式*  1、每个通讯录的信息单独占据一行*  2、每一行保存属性的顺序要一致 zs|sd|11|22|33*  3、字符串分割 String[] arr = split("\|");* *///读取文件 -- 读取文件中的通讯录信息到ArrayList中public void init() throws IOException {File f = new File("C:/Users/s'w'n/Desktop/phonebookconfig.txt");if(f.length() == 0){return;}ObjectInputStream in = new ObjectInputStream(new FileInputStream(f));while (true){try {PhoneBookItem item = (PhoneBookItem)in.readObject();arr.add(item);} catch (Exception e) {break;}}in.close();}//保存文件public void save() throws Exception {ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("C:/Users/s'w'n/Desktop/phonebookconfig.txt"));for (PhoneBookItem item : arr) {out.writeObject(item);}out.close();}//添加 -- 寻找对象数组中第一个为null的位置并赋值public boolean add(PhoneBookItem item) {return arr.add(item);}//删除public boolean del(String name) {for (int i = 0; i < arr.size(); i++) {if(arr.get(i) != null && arr.get(i).getName().equals(name)) {arr.remove(i);return true;}}return false;}/** name - 被修改项的名字* newItem - 修改之后的所有的信息*///修改public boolean update(String name, PhoneBookItem newItem) {for (int i = 0; i < arr.size(); i++) {if(arr.get(i) != null && arr.get(i).getName().equals(name)) {arr.set(i, newItem);return true;}}return false;}//查询所有public ArrayList<PhoneBookItem> findAll(){return this.arr;}//根据姓名查询public PhoneBookItem findByName(String name) {for (int i = 0; i <arr.size() ; i++) {if(arr.get(i) != null && arr.get(i).getName().equals(name)) {return arr.get(i);//要是找到值为null的,null.getName()...程序会崩溃结束}}return null;}}
package day4;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
/*
负责显示/和用户交互*/
public class UI {public static void help(){System.out.println("-----------------------------通讯录管理系统-------------------------------");System.out.println("1.添加 2.删除 3.修改 4.查询所有 5.根据姓名查询 0.退出");System.out.println("-----------------------------通讯录管理系统-------------------------------");System.out.println("请选择业务:");}public static void main(String[] args) throws Exception {Scanner sc = new Scanner(System.in);//创建管理类对象PhoneBookManager phoneBookManager = new PhoneBookManager();phoneBookManager.init();while(true) {//打印帮助菜单help();//读取用户输入int choose = sc.nextInt();switch(choose) {case 1://添加//输入姓名System.out.println("-----------添加通讯录----------");System.out.print("姓名:");//如果是println的话就自动换行了String nameAdd = sc.next();/*根据姓名查询是否已经存在1、是 - 提示已经存在2、否 - 允许继续输入*/if (phoneBookManager.findByName(nameAdd) != null) {System.out.println("用户已经存在");break;}System.out.print("性别");String genderAdd = sc.next();System.out.print("年龄");int ageAdd = sc.nextInt();System.out.print("电话");String phoneAdd = sc.next();System.out.print("QQ");String qqAdd = sc.next();System.out.print("地址");String addrAdd = sc.next();//根据用户的输入创建单条信息的对象PhoneBookItem phoneBookItem = new PhoneBookItem(nameAdd, genderAdd, ageAdd, phoneAdd, qqAdd, addrAdd);//添加if(phoneBookManager.add(phoneBookItem)) {//打印被添加的信息System.out.println(phoneBookItem);//上面一行打印时会自动调用 System.out.println(phoneBookItem.toString());System.out.println("添加成功");}else{System.out.println("通讯录空间不足无法添加");}break;case 2://删除System.out.println("----------删除通讯录----------");System.out.println("请输入要删除的姓名:");String nameDel = sc.next();if(phoneBookManager.del(nameDel)) {System.out.println("删除成功");}else{System.out.println("系统中不存在该姓名,无法删除");}break;case 3://修改System.out.println("----------修改通讯录----------");/** 1、判断被修改的项是否存在* 2、判断修改之后的名字与其他项的名字是否重复* */System.out.println("请输入被修改项的姓名:");String oldName = sc.next();//判断被修改的项是否存在PhoneBookItem oldItem = phoneBookManager.findByName(oldName);if(oldItem == null) {System.out.println("被修改项不存在无法修改");break;}System.out.println("请根据提示输入修改之后的信息:");System.out.println("姓名:");String newName = sc.next();/** 修改之后的名字不能和其他项的名字重复*   |* 如何判断修改之后的名字是其他项的名字*   |* 根据修改之后的名字查询,如果能够查询出信息并且和被修改项的地址不同,就能说明是其他项 -- 不允许修改* *///根据修改之后的名字查询PhoneBookItem newItem = phoneBookManager.findByName(newName);if(newItem != null && oldItem != newItem) {System.out.println("修改之后的姓名和其他项重名,不允许修改");break;}System.out.print("性别");String newGender = sc.next();System.out.print("年龄");int newAge = sc.nextInt();System.out.print("电话");String newPhone = sc.next();System.out.print("QQ");String newQq = sc.next();System.out.print("地址");String newAddr = sc.next();PhoneBookItem updateItem = new PhoneBookItem(newName, newGender, newAge, newPhone, newQq, newAddr);phoneBookManager.update(oldName, updateItem);System.out.println("修改成功");break;case 4://查询所有System.out.println("----------查询所有通讯录----------");ArrayList<PhoneBookItem> arr = phoneBookManager.findAll();for (PhoneBookItem item : arr) {if(item != null) {System.out.println(item);}}break;case 5:System.out.println("----------根据姓名查询通讯录----------");System.out.print("姓名:");String nameSearch = sc.next();PhoneBookItem bookItemSearch = phoneBookManager.findByName(nameSearch);if(bookItemSearch == null) {System.out.println("通讯录中不存在该姓名对应的信息");break;}else{System.out.println(bookItemSearch);}break;case 0://将内存中的数据写入到文件phoneBookManager.save();//退出System.exit(0);default:System.out.println("请根据帮助菜单选择功能");}}}
}

相关文章:

通讯录管理系统(IO_序列化和反序列化版)

参照之前文章&#xff0c;也是IO的变版 package day4;import java.io.Serializable;/* 有需求 -- 才去设计类 自定义表示通讯录单条信息的类*/ public class PhoneBookItem implements Serializable {private static final long serialVersionUID 1L;//属性private String na…...

基于RT-Thread的STM32F4开发第三讲——DAC

文章目录 前言一、DAC是什么&#xff1f;二、RT-Thread工程创建三、DAC函数编写1.DAC.c2.DAC.h3.main.c 四、结果测试五、工程分享 前言 本章利用RT-Thread最新的驱动5.1.0开发DAC模块&#xff0c;使用的开发板是正点原子的STM32F4探索者。很多配置和上文重复&#xff0c;本文…...

git cherry-pick和git stash命令详解

git cherry-pick命令 定义 用于将指定的提交(commit)从一个分支"挑选"并应用到当前分支它复制某个提交的更改&#xff08;diff&#xff09;&#xff0c;生成一个新的提交&#xff0c;保留原提交的更改内容&#xff0c;但拥有新的提交ID&#xff08;SHA值&#xff09;…...

MapReduce基本介绍

核心思想 分而治之&#xff1a;将大规模的数据处理任务分解成多个可以并行处理的子任务&#xff0c;然后将这些子任务分配到不同的计算节点上进行处理&#xff0c;最后将各个子任务的处理结果合并起来&#xff0c;得到最终的结果。 工作流程 Map 阶段&#xff1a; 输入数据被…...

正则表达式常用验证(一)

正则表达式(Regular Expression)是一种强大的文本匹配工具,常用于验证字符串的格式。以下是常见的正则表达式验证场景及其对应的表达式: 1. 数字验证 验证纯数字: ^\d+$示例:123、456789 验证固定长度的数字(如 6 位): ^\d{6}$示例:123456 验证数字范围(如 1 到 100…...

基于几何布朗运动的股价预测模型构建与分析

基于几何布朗运动的股价预测模型构建与分析 摘要 本文建立基于几何布朗运动的股价预测模型&#xff0c;结合极大似然估计与蒙特卡洛模拟&#xff0c;推导股价条件概率密度函数并构建动态预测区间。实证分析显示模型在标普500指数预测中取得89%的覆盖概率&#xff0c;波动率估…...

通过SSRF击穿内网!kali-ssrf靶场实战!

目录 1. 靶场拓扑图 2. 判断SSRF的存在 3. SSRF获取本地信息 3.1. SSRF常用协议 3.2. 使用file协议 4. 172.150.23.1/24探测端口 5. 172.150.23.22 - 代码注入 6. 172.150.23.23 SQL注入 7. 172.150.23.24 命令执行 7.1. 实验步骤 8. 172.150.23.27:6379 Redis未授权…...

Yarn-概述

一、YARN 是什么&#xff1f; YARN&#xff08;Yet Another Resource Negotiator&#xff09; 是 Apache Hadoop 生态系统中的核心组件&#xff0c;是一个 分布式资源管理和作业调度系统&#xff0c;主要用于协调集群中的计算资源&#xff08;CPU、内存、磁盘、网络等&#xf…...

如何在sheel中运行spark

// 读取文件&#xff0c;得到RDD val rdd1 sc.textFile("hdfs://hadoop100:8020/wcinput/words.txt") // 将单词进行切割&#xff0c;得到一个存储全部单词的RDD val rdd2 fileRDD.flatMap(line > line.split(" ")) // 将单词转换为元组对象&#xff0…...

销售具备的能力有哪些

销售人员是许多公司业务的开拓者&#xff0c;他们的存在让公司的利益更高。因此&#xff0c;在许多的公司中&#xff0c;销售人员的待遇都非常的高。也因此&#xff0c;有的人看重销售人员的薪资待遇想寻找销售型的工作。但是&#xff0c;相当销售人员还需要具有一定的工作能力…...

React面试常问问题详解

以下是30个React面试中常见的问题及简要解析&#xff0c;涵盖基础概念、核心原理、性能优化、Hooks、状态管理等方面&#xff0c;适用于初中高级开发者准备面试时参考&#xff1a; 一、React 基础与核心概念 React 是什么&#xff1f; React 是由 Facebook 开发的用于构建用户界…...

POM 和关键字驱动区别

一、POM 和关键字驱动的区别以及各自的优势分别是什么&#xff1f; 1、POM 适用于对单个系统封装的自动化框架中&#xff0c;对业务覆盖更精准&#xff1b;   优势&#xff1a;更加便利、维护性更高 2、关键字驱动可以用于对多个业务、多个系统进行封装的自动化框架中&…...

2025年PMP 学习十一 第8章 项目质量管理(8.3)

第8章 项目质量管理&#xff08;8.3&#xff09; 文章目录 第8章 项目质量管理&#xff08;8.3&#xff09;8.3 控制质量1. 定义与作用2.输入、输出&#xff0c;工具和技术3. 数据收集 - 核查表&#xff08;工具与技术&#xff09;4. 数据展示 - 帕雷托图&#xff08;工具与技术…...

【笔记】C++操作mysql及相关配置

目录 使用软件版本信息&#xff1a; 1. C配置mysql相关依赖 1.1 下载 1.2 文件配置 1.3 C编译器配置 2、测试程序 使用软件版本信息&#xff1a; Visual Studio 2022Mysql 8.0C Connector库 8.3.0 可直接在https://download.csdn.net/download/Word_And_Me_/90826524下…...

【MapReduce入门】深度解析MapReduce:定义、核心特点、优缺点及适用场景

目录 1 什么是MapReduce&#xff1f; 2 MapReduce的核心特点 2.1 分布式处理 2.2 容错机制 3 MapReduce的完整工作流程 4 MapReduce的优缺点分析 4.1 优势 4.2 局限性 5 MapReduce典型应用场景 5.1 适用场景 5.2 不适用场景 6 MapReduce与其他技术的对比 7 总结 1…...

EMQX v5.0通过连接器和规则同步数据

1 概述 EMQX数据集成功能&#xff0c;帮助用户将所有的业务数据无需额外编写代码即可快速完成处理与分发。 数据集成能力由连接器和规则两部分组成&#xff0c;用户可以使用数据桥接或 MQTT 主题来接入数据&#xff0c;使用规则处理数据后&#xff0c;再通过数据桥接将数据发…...

JCJC 错别字检测自定义词典 API 接口文档 2025-05-13

JCJC 错别字检测自定义词典 API 接口文档 2025-05-13 JCJC 错别字检测系统自定义词典接口全面开放。企业用户和个人付费用户都可以使用接口方式管理自定义词典。 自定义词典包含&#xff1a; 白名单和黑名单两种类型。 也可以登录个人中心&#xff0c;点击左侧边栏导航以 UI …...

Qt 样式表qss学习

语法 /* 语法结构 */ selector { attribute: value }selector&#xff08;选择器&#xff09; selector&#xff08;选择器&#xff09;&#xff1a;指定要应用样式的控件类型或特定控件。例如&#xff1a; QWidget&#xff1a;所有QWidget及其子类。QPushButton&#xff1a;…...

Linux文件编程——读写结构体、链表等其他类型的数据

在 Linux 文件编程中&#xff0c; open、read、write、close等函数&#xff0c;本质上的读写内容是一个无类型的指针&#xff0c;所以其也可以读写整型、数组、结构体、链表等不同类型的数据。 SYNOPSIS #include <unistd.h>ssize_t write(int fd, const void *buf, siz…...

离散制造企业WMS+MES+QMS+条码管理系统高保真原型全解析

在离散型制造企业的生产过程中&#xff0c;库存管理混乱、生产进度不透明、质检流程繁琐等问题常常成为制约企业发展的瓶颈。为了帮助企业实现全流程数字化管控&#xff0c;我们精心打造了一款基于离散型制造企业&#xff08;涵盖单件生产、批量生产、混合生产模式&#xff09;…...

Datawhale PyPOTS时间序列5月第1次笔记

课程原地址&#xff1a; https://github.com/WenjieDu/PyPOTS&#xff08;Package地址&#xff09; https://github.com/WenjieDu/BrewPOTS/tree/datawhale/202505_datawhale&#xff08;Tutorial地址&#xff09; 2.1 PyPOTS简介 PyPOTS 是一个专为处理部分观测时间序列&a…...

linux 抓包工具tcpdump使用小记(使用时注意权限和系统资源)

tcpdump 是一款强大的网络数据包捕获和分析工具&#xff0c;常用于网络故障排查、协议分析、安全审计等场景。以下是其核心功能、使用方法及常见场景的详细介绍&#xff1a; 1. 基本功能 数据包捕获&#xff1a;监听网络接口&#xff0c;实时捕获传输的数据包。过滤规则&#…...

HTTP和HTTPS模块

一、HTTP 模块 1. 创建 HTTP 服务器 基本服务器示例 const http require(http);const server http.createServer((req, res) > {res.statusCode 200;res.setHeader(Content-Type, text/plain);res.end(Hello World\n); });server.listen(3000, 127.0.0.1, () > {co…...

操作系统导论——第29章 基于锁的并发数据结构

通过锁可以使数据结构线程安全&#xff08;thread safe&#xff09;。当然&#xff0c;具体如何加锁决定了该数据结构的正确性和效率&#xff1f;挑战是&#xff1a; 关键问题&#xff1a;如何给数据结构加锁&#xff1f; 对于特定数据结构&#xff0c;如何加锁才能让该结构功能…...

TensorFlow之微分求导

目录 前言示例手动微分实现两个未知数, 求偏导tf.GradientTape常量求导tf.GradientTape二阶导数tf.GradientTape实现梯度下降结合optimizer实现梯度下降 前言 在TensorFlow中&#xff0c;微分是个非常重要的概念。它们分别用于自动求导&#xff08;计算梯度&#xff09;和高效…...

电池自动点焊机:多领域电池制造的核心设备

电池自动点焊机作为电池制造领域的关键设备&#xff0c;通过电阻热焊接技术实现金属连接片与电池极片的精确焊接&#xff0c;广泛应用于数码电池、工具电池、储能电池、电动车电池及动力电池的生产环节。其核心技术基于微电脑控制与多脉冲焊接模式&#xff0c;能够针对不同电池…...

第五部分:第一节 - Node.js 简介与环境:让 JavaScript 走进厨房

我们之前学习的 JavaScript 主要运行在浏览器中&#xff0c;由浏览器内置的 JavaScript 引擎&#xff08;如 Chrome 的 V8 引擎&#xff09;来解释执行。Node.js 则是一个JavaScript 运行时环境&#xff0c;它也使用了 Chrome 的 V8 引擎&#xff0c;但它不是在浏览器里&#x…...

MQTT 协议详解:物联网通信的利器

在当今物联网&#xff08;IoT&#xff09;迅猛发展的背景下&#xff0c;设备之间的高效、可靠通信变得尤为重要。MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;作为一种轻量级的消息传输协议&#xff0c;因其低带宽占用和高可靠性&#xff0c;成为物联网领…...

CST软件对OPERACST软件联合仿真汽车无线充电站对人体的影响

上海又收紧了新能源车的免费上牌政策。所以年前一些伙伴和我探讨过买新能源汽车的问题&#xff0c;小伙伴们基本纠结的点是买插电还是纯电&#xff1f;我个人是很抗拒新能源车的&#xff0c;也开过坐过。个人有几个观点&#xff1a; 溢价过高&#xff0c;不保值。实际并不环保…...

C++STL——map和set的使用

目录 1.容器 1.1 序列容器 1.2 容器适配器 1.3 关联容器 1.4 无序关联容器 1.5 键值对到底是个什么东西&#xff1f; 2.set系列的使用 2.1 set类的介绍 2.2 set的构造以及迭代器 2.3 set的增&#xff0c;删&#xff0c;查 2.3.1 插入 2.3.2 删除 2.3.3 查找 2.3.4…...

Ensemble Alignment Subspace Adaptation Method for Cross-Scene Classification

用于跨场景分类的集成对齐子空间自适应方法 摘要&#xff1a;本文提出了一种用于跨场景分类的集成对齐子空间自适应&#xff08;EASA&#xff09;方法&#xff0c;它可以解决同谱异物和异谱同物的问题。该算法将集成学习的思想与域自适应&#xff08;DA&#xff09;算法相结合…...

AFFS2 的 `yaffs_ext_tags` 数据结构详解

YAFFS2 的 yaffs_ext_tags 数据结构详解 yaffs_ext_tags 是 YAFFS2 文件系统中用于 管理 NAND 闪存页的元数据 的核心结构体&#xff0c;存储在 NAND 的 OOB&#xff08;Out-Of-Band&#xff09;区域。它记录了数据块的归属、状态、校验信息等关键元数据&#xff0c;是 YAFFS2…...

CSS经典布局之圣杯布局和双飞翼布局

目标&#xff1a; 中间自适应&#xff0c;两边定宽&#xff0c;并且三栏布局在一行展示。 圣杯布局 实现方法&#xff1a; 通过float搭建布局margin使三列布局到一行上relative相对定位调整位置&#xff1b; 给外部容器添加padding&#xff0c;通过相对定位调整左右两列的…...

超声波传感器模块

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 1.HC-SR04介绍2.HC-SR04原理介绍2.1原理概述3.2原理详解 4驱动代码编写4.1写前思考4.2硬件连线 5.总结hcsr04.hhcsr04.c 1.HC-SR04介绍 超声波传感器有很多种类的型号&#xff1a;HC-SR04、UC-025、…...

使用scp命令拷贝hadoop100中文件到其他虚拟机中

以下是使用 scp 命令将 hadoop100 主机中的文件拷贝到其他虚拟机的操作步骤&#xff08;假设其他主机名为 hadoop101 、 hadoop102 &#xff0c;系统为 Linux&#xff09;&#xff1a; 1. 基本语法 bash scp [选项] 源文件路径 目标主机用户名目标主机IP:目标路径 - 选…...

Linux基础 -- 用户态Generic Netlink库高性能接收与回调框架

用户态Generic Netlink库高性能接收与回调框架 一、概述 在 Linux 系统中&#xff0c;Netlink 是用户态与内核态通信的强大机制。libnl 是一个专为简化 Netlink 编程而设计的库&#xff0c;提供了接收和处理 Netlink 消息的高级接口。libnl-genl 是其通用 Netlink (Generic N…...

java中的Optional

在 Java 8 中&#xff0c;Optional 是一个用于处理可能为 null 的值的容器类&#xff0c;旨在减少空指针异常&#xff08;NullPointerException&#xff09;并提升代码的可读性。以下是 Optional 的核心用法和最佳实践&#xff1a; 1. 创建 Optional 对象 1.1 常规创建方式 Op…...

原型和原型链

原型&#xff08;Prototype&#xff09; 和 原型链&#xff08;Prototype Chain&#xff09; 是 JavaScript 中非常重要的概念&#xff0c;它们是 JavaScript 实现继承和共享属性和方法的核心机制。理解原型和原型链可以帮助你更好地掌握 JavaScript 的面向对象编程&#xff08…...

解锁Python TDD:从理论到实战的高效编程之道(9/10)

引言 在 Python 开发的广袤天地中&#xff0c;确保代码质量与稳定性是每位开发者的核心追求。测试驱动开发&#xff08;TDD&#xff0c;Test-Driven Development&#xff09;作为一种强大的开发理念与实践方法&#xff0c;正逐渐成为 Python 开发者不可或缺的工具。TDD 强调在…...

OpenMCU(七):STM32F103开发环境搭建

概述 本文主要讲述了使用Keil软件搭建STM32F103嵌入式开发环境的步骤&#xff0c;主要面向想从事嵌入式行业的入门同学&#xff0c;如果下面的讲述过程中有不对的地方&#xff0c;欢迎大家给我留言。 本文主要讲述了Keil 5.43的安装教程&#xff0c;主要用于学习交流&#xf…...

六、Hive 分桶

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月13日 专栏&#xff1a;Hive教程 在 Hive 中&#xff0c;除了常见的分区&#xff08;Partitioning&#xff09;&#xff0c;分桶&#xff08;Bucketing&#xff09;是另一种重要且有效的数据组织和性能优化手段。它允许我们…...

INFINI Console 纳管 Elasticsearch 9(一):指标监控、数据管理、DSL 语句执行

Elasticsearch v9.0 版本最近已发布&#xff0c;而 INFINI Console 作为一款开源的非常轻量级的多集群、跨版本的搜索基础设施统一管控平台&#xff0c;是否支持最新的 Elasticsearch v9.0 集群管理呢&#xff1f;本文以 INFINI Console v1.29.2 为例&#xff0c;从指标监控、数…...

ansible进阶版01

ansible进阶版01 欢迎使用Markdown编辑器最佳实践保持简单 保持井然有序&#xff08;有组织的&#xff09;经常测试 git工作原理 chapter 2编写ymal格式的主机清单 欢迎使用Markdown编辑器 最佳实践 保持简单 使用yaml的原生语法使用自带模块尽量使用专用模块&#xff0c;不…...

python文件打包成exe文件

✅ 一、安装 PyInstaller 打开cmd&#xff0c;输入以下代码 pip install pyinstaller✅ 二、打包指令 比如说你有如下的文件需要打包。 首先复制你的文件所在目录&#xff0c;比如我的是C:\Users\Administrator\Desktop\BearingSearchSystem 在cmd中切换到该目录来&#xf…...

人脸识别系统中的隐私与数据权利保障

首席数据官高鹏律师创作 如今人脸识别技术以其高效、便捷的特性广泛应用于各个领域&#xff0c;从安防监控到移动支付&#xff0c;从门禁系统到社交媒体。然而&#xff0c;这项技术在为我们的生活带来诸多便利的同时&#xff0c;也引发了一系列关于隐私与数据权利的深刻担忧。…...

电脑关机再开机会换IP吗?深入解析分配机制

在日常使用电脑时&#xff0c;许多用户可能会好奇&#xff1a;‌关机后再开机&#xff0c;IP地址会不会变化&#xff1f;‌ 这个问题看似简单&#xff0c;但实际上涉及多个因素。本文将详细解析电脑IP地址的变化机制&#xff0c;帮助大家理解其中的原理&#xff0c;并提供相关的…...

经典中的经典-比特币白皮书中文版

AI是一切假的集合&#xff0c;如果任凭AI如此聪明下去&#xff0c;所有的人都将被AI愚弄与股掌之间&#xff0c;那么能限制AI的只有区块链这个让一切数据都无处遁形的真神&#xff0c;而比特币作为区块链的鼻祖&#xff0c;开创了公开账本的先河&#xff0c;当互联网上所有的信…...

Spring事务失效的全面剖析

文章目录 1. Spring事务基础1.1 什么是Spring事务1.2 Spring事务的实现原理1.3 `@Transactional`注解的主要属性1.4 使用Spring事务的简单示例2. Spring事务失效的常见场景及解决方案2.1 方法不是public的问题描述问题示例解决方案技术原理解释2.2 自调用问题(同一个类中的方法…...

本地的ip实现https访问-OpenSSL安装+ssl正式的生成(Windows 系统)

1.下载OpenSSL软件 网站地址&#xff1a;Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 安装: 一直点击下一步就可以了 2.设置环境变量 在开始菜单右键「此电脑」→「属性」→「高级系统设置」→「环境变量」 在Path 中添加一个: xxxx\OpenSSL-…...

【go】binary包,大小端理解,read,write使用,自实现TCP封包拆包案例

binary.LittleEndian 是 Go 语言 encoding/binary 包中的一个常量&#xff0c;用于指定字节序&#xff08;Byte Order&#xff09;。字节序是指多字节数据在内存中存储的顺序&#xff0c;有两种主要方式&#xff1a; 小端序&#xff08;Little Endian&#xff09;&#xff1a;…...