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

第四阶段01-酷鲨商城项目准备

1. 关于csmall-product项目

这是“酷鲨商城”大项目中的“商品管理”项目,是一个后台管理项目(给管理员,或运营人员使用的项目,并不是普通用户使用的),并且,只会涉及与发布商品可能相关的功能开发,整个系统中需要的其它功能将由其它项目来实现!另外,此项目只是一个后端项目,采取了前后端分离的开发模式。

在本阶段,还会开发csmall-passport项目,这是“管理员管理”的后端项目,还有csmall-web-client项目,这是“前端项目”。

2. 创建csmall-product项目

在IntelliJ IDEA的创建项目向导界面中,左侧选择Spring Initializr,右侧参数选择:

  • **Server URL:**使用 https://start.spring.iohttps://start.springboot.io ,在这2个中选择任何一个可用的,如果暂时出现这2个均不可用,可以反复尝试,或稍后尝试
  • **Name:**使用csmall-product即可
  • Group:cn.tedu
  • Artifact:csmall-product
  • Package Name:cn.tedu.csmall.product
  • Java:8

3. 调整pom.xml

关于当前项目的父级项目的版本,推荐使用2.5.x系列的版本号,其中,x可以是014之间的任何数字。

完成后,在src/test/java下找到默认已经存在的包,包下有测试类,测试类中有个空的测试方法:

@Test
void contextLoads() {
}

执行此测试方法,应该是可以通过测试的!如果无法通过测试,应该是项目的依赖项或某些配置的错误导致的,需要及时调整。

4. 创建数据库

创建名为mall_pms的数据库:

CREATE DATABASE mall_pms;

提示:SQL语句并不区分大小写。
请添加图片描述

5. 配置Database面板

在IntelliJ IDEA的窗口右侧,可以展开Database面板,可以辅助处理数据库、数据表的相关操作,通常,在开发一个项目之前,强烈推荐配置此面板!

提示:如果在窗口右侧没有Database面板,可以点击View菜单 > Tool Windows子菜单,找到Database菜单项,点击它,即可展开右侧的Database面板。
请添加图片描述

**注意:**如果出现[42000][-1] (conn=214) invalid fetch size错误,应该删除当前配置,重新添加配置,并且,在MariaDBMySQL之间切换选择。

详细配置教程:http://doc.canglaoshi.org/doc/idea_database/index.html

6. 导入数据表

将老师提供的SQL复制到Database面板的console中,全部执行,即可创建当前库中的所有表,并插入了一些测试用的数据。
请添加图片描述

7. 功能的开发顺序

首先,要明确当前项目中涉及哪些数据:

  • pms_album:相册
    • 与“图片”是类似“文件夹”与“文件”的关系
  • pms_attribute:属性
  • pms_attribute_template:属性模板
    • 与“属性”是类似“文件夹”与“文件”的关系
  • pms_brand:品牌
  • pms_brand_category:品牌与类别的关联
  • pms_category:类别
  • pms_category_attribute_template:类别与属性模板的关联
  • pms_picture:图片
  • pms_sku:SKU
  • pms_sku_specification:SKU属性
  • pms_spu:SPU
  • pms_spu_detail:SPU详情

通常,应该先开发偏基础的数据,例如,品牌、类别等都是SPU的基础,所以,应该先开发品牌、类别这类数据的管理功能,再开发SPU、SKU这类数据的管理员。

对于多种并不直接相关的数据,应该先开发逻辑简单的数据,相对来说,类别可能更多“麻烦”一些,因为“类别”是一种“多层级”的数据,例如“家用电器”是“电视”的父级,其下还有“冰箱”、“空调”,而这些子级类别还可以有更子级的类别,例如“空调”就可以有“挂机空调”、“柜机空调”、“中央空调”等子级,所以,类别比品牌、相册这些数据的逻辑规则会更复杂一些,应该先开发品牌、相册等数据的管理功能。

对于各数据的功能开发,大致上应该采取增 > 查 > 删 > 改的开发顺序

每一个功能的开发,大致上应该采取Mapper > Service > Controller > 页面的开发顺序。

8. 添加Mybatis相关依赖项

pom.xml中添加依赖项:

<!-- Mybatis整合Spring Boot的依赖项 -->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version>
</dependency>
<!-- MySQL的依赖项 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>

由于Spring Boot存在自动配置,当添加了数据库编程相关的依赖项后,无论是启动项目,还是执行任何Spring Boot测试,都会尝试读取连接数据库的配置信息,如果还没有添加相关配置,会导致启动失败/测试失败,例如:
请添加图片描述

为了解决此问题,需要在配置文件中,添加连接数据库的相关配置。

9. 关于Spring Boot的配置文件

9.1. 关于application.properties

在Spring Boot项目中,在src/main/resources文件夹下存在application.properties文件,此文件是Spring Boot会自动读取的配置文件。

Spring Boot定义了许多特定用途的配置,在application.properties中,需要按照特定的属性名进行配置,则Spring Boot读取到了这些特定的配置后,会自动应用起来!

例如,添加连接数据库的配置:

spring.datasource.url=jdbc:mysql://localhost:3306/mall_pms?characterEncoding=utf-8&useUnicode=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root

9.2. 关于Profile配置

以上在application.properties中添加的是连接数据库的配置信息,当前处于开发阶段,所以,各配置值都是开发时所使用的MySQL的相关配置,例如localhost3306、用户名、密码等,当开发完成后,可能会有专门的测试人员对此项目进行测试,测试时使用的MySQL肯定不会是当前开发使用的MySQL,则以上属性的值都需要修改,当测试通过后,项目正式上线,使用的MySQL又会不同,则各属性值需要再次修改……即使全部改完了,项目可能需要进入下一阶段的开发,以上各属性值又需要改回成开发时的配置值!在开发实践中,除了连接数据库的配置信息以外,其它配置也可能会根据项目的运行环境不同,而使用不同的配置值!

Spring框架提供了Profile配置的机制,允许同时存在好几套配置文件,这些配置文件默认是可以不激活的(默认是无效的),当需要使用哪套配置,就激活哪套配置文件即可,这样的配置文件称之为Profile配置。

Spring Boot框架很好的支持了Profile配置,其规则是:

  • application.properties是主配置文件,其中的所有配置都是默认加载的
  • application-自定义名称.properties作为文件名的全部是Profile配置,默认是不加载的,必须激活这些文件中的配置才会被加载
  • application.properties(主配置文件)中,使用spring.profiles.active属性,可以激活Profile配置,此属性的值就是Profile配置的文件名的自定义部分,如果有多个Profile配置需要激活,使用逗号分隔即可
  • 如果在application.properties(主配置文件)中,与在Profile配置中,存在完全相同的属性的配置,则以Profile配置为准
  • 例如:
    请添加图片描述

以上图为例,可以在application.properties中配置spring.profiles.active属性,当取值为dev时,application-dev.properties文件中的配置信息将被应用,当取值为test时,application-test.properties文件中的配置信息将被应用,以此类推。

在开发实践中,类似的配置文件可能较多,可以完全自行测试,例如,可以创建application-dev-jack.propertiesapplication-dev-tom.properties,就可以区分不同的开发人员,当然,激活时,取值仍是自定义名称的部分,例如:spring.profiles.active=dev-jack

9.3. 关于YAML配置

YAML是一种编写配置文件的语法,表现为以.yml作为扩展名的文件。

相比.properties文件,其语法的改变有:

  • 原属性名中有小数点的部分,改为使用冒号+换行后空2格
  • 原属性名与属性值使用等于号分隔,改为使用冒号+1个空格
  • 如果多个配置中,属性名有相同的部分,则不必配置相同的部分,保持对应的空格(缩进)即可

例如,原有的关于数据库连接的配置,使用YAML语法则改为:

spring:datasource:url: jdbc:mysql://localhost:3306/mall_pms?characterEncoding=utf-8&useUnicode=true&serverTimezone=Asia/Shanghaiusername: rootpassword: root

**注意:**YAML语法要求是严格的,必须按照以上语法规则,例如每次换行后需要添加2个空格,不可以使用TAB制表位取代,属性名与属性值之间,冒号的右侧必须有1个空格。

**注意:**不允许存在完全相同的多行配置(包括缩进),例如不可以同时存在2行spring:

**提示:**在使用IntelliJ IDEA编辑.yml文件时,会自动将按下的TAB转换为2个空格。

**提示:**对于纯数字的属性值,如果此属性的值应该是字符串时,需要使用引号框住整个数字。

**提示:**在Spring Boot项目中,即使没有将属性名中的小数点换成YAML语法应该有的样子,也不会出错!

在Spring框架中,并不直接识别YAML语法的配置,在Spring Boot项目中,基础依赖项(spring-boot-starter)中已经包含解析YAML配置的工具包(snakeyaml),可以直接识别并解析YAML语法的配置文件。

在Spring Boot项目中,对.yml文件的支持,与对.properties文件的是完全相同的,即:你可以将所有.properties文件改成.yml文件,再调整配置文件内部的语法即可。

10. 检测连接数据库的配置是否正确

在项目中原本已经存在的测试类CsmallProductApplicationTests类中,添加以下代码,并执行测试:

@Autowired
DataSource dataSource; // 注意:导java.sql包中的接口@Test
void getConnection() throws Throwable {dataSource.getConnection(); // 调用getConnection()时会连接数据库,则可以判断配置的连接信息是否正确
}

当配置的spring.datasource.url的值的格式有误时,会出现错误:

Caused by: java.lang.IllegalArgumentException: URL must start with 'jdbc'

当配置的spring.datasource.url中的主机名部分有误时,会出现错误:

Caused by: java.net.UnknownHostException: localhast

当配置的spring.datasource.url中的端口号部分有误时,会出现错误:

Caused by: java.net.ConnectException: Connection refused: connect

当配置的spring.datasource.url中的serverTimezone参数值有误时,会出现错误:

Caused by: java.time.zone.ZoneRulesException: Unknown time-zone ID: Asia/ShangHai

当配置的spring.datasource.username的值有误时,会出现错误:

java.sql.SQLException: Access denied for user 'root123'@'localhost' (using password: YES)

当配置的spring.datasource.password的值有误时,会出现错误:

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: NO)

**注意:**关于连接数据库的配置,各属性名是预定义的,如果属性名写错,相当于是没有配置此属性!

**注意:**配置的值,不要有多余的空格,这些空格也会被当作值的一部分!

11. 关于POJO类型的编写规范

在项目中,以定义属性为主,基本上不关心方法的类,都可以称之为POJO类,例如实体类、DTO类等。

所有的POJO类都应该:

  • 【必须】所有属性应该是私有的(访问权限为private
  • 【必须】存在无参数构造方法
  • 【必须】所有属性都有规范名称的Setter & Getter
  • 【必须】类中存在规范的equals()hashCode()
    • 如果2个对象,类型相同,所有属性值都相同,则equals()对比结果应该是true,且hashCode()返回值应该相同
    • 如果2个对象,类型不同,或类型相同但有任何属性值不同,则equals()对比结果应该是false,且hashCode()返回值应该不同
    • 通常,使用开发工具自动生成的equals()hashCode()都是规范的
  • 【必须】类实现了Serializable接口
  • 【建议】类中存在基于所有属性的toString()

许多框架都会默认你的POJO类型是遵循了以上规范的,这些框架在实现某些效果时,会自动调用相关的方法,或将你创建的类型的对象转换成Serializable接口类型,所以,如果你的POJO类型没有遵循这些规范,可能导致某些框架的某些功能不可用,甚至出错!

另外,MySQL中的字段类型与Java中的数据类型的对应关系应该如下:

MySQL中的字段类型Java中的属性类型
tinyint / smallint / intInteger
bigintLong
varchar / char / text系列String
decimalBigDecimal
datetimeLocalDateTime

12. 关于Lombok框架

Lombok框架可以通过特定的注解,在编译期生成Setter、Getter、equals()hashCode()toString()、无参数构造方法、全参数构造方法等。

此框架的依赖项为:

<!-- Lombok的依赖项,主要用于简化POJO类的编写 -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version><scope>provided</scope>
</dependency>

关于使用Lombok时的相关常用注解:

  • @Data:添加在类上,可以在编译期生成全部参数对应的Setter、Getter、equals()hashCode()toString()、无参数构造方法
    • 使用此注解时,要求当前类的父类必须存在无参数构造方法
  • @Setter:添加在类中的属性上,可以生成此属性对应的Setter方法,或添加在类上,可以生成此类中所有属性对应的Setter方法
  • @Getter:用法与作用可参考@Setter注解,此注解的作用是生成Getter方法
  • @EqualsAndHashCode:添加在类上,可以生成基于此类中所有属性的equals()hashCode()方法
  • @ToString:添加在类上,可以生成基于此类中所有属性的toString方法
  • @NoArgsConstructor:添加在类上,可以生成无参数的构造方法
  • @AllArgsConstructor:添加在类上,可以生成全参数的构造方法
  • @Slf4j:参见后文

更多注解,可以自行查阅资料,或在IntelliJ IDEA中查看Lombok插件的详情。

**注意:**需要在IntelliJ IDEA中安装Lombok插件,否则,在编写代码时,不会有相关的提示,并且,即使直接写出代码,也会报错,但是,并不影响运行!安装教程:http://doc.canglaoshi.org/doc/idea_lombok/IDEA-5-PLUGINS-LOMBOK.html

**提示:**Lombok是一个有“侵入性”的框架,当一个团队中有成员使用了此框架,就需要安装Lombok插件,甚至整个团队都需要安装此插件,否则,编码、阅读代码的体验就会较差,所以,某些开发团队中是禁止使用的。

**注意:**需要在IntelliJ IDEA中安装Lombok插件,否则,在编写代码时,不会有相关的提示,并且,即使直接写出代码,也会报错,但是,并不影响运行!安装教程:http://doc.canglaoshi.org/doc/idea_lombok/IDEA-5-PLUGINS-LOMBOK.html

13. 编写实体类

在Spring Boot项目中,推荐将所有的类都创建在项目的根包(创建项目时就已经生成好了的包)之下。

在项目的根包下创建pojo.entity.Album类,在此类中声明与pms_album表对应的属性:

package cn.tedu.csmall.product.pojo.entity;import lombok.Data;import java.io.Serializable;
import java.time.LocalDateTime;/*** 相册数据的实体类** @author java@tedu.cn* @version 0.0.1*/
@Data
public class Album implements Serializable {/*** 数据id*/private Long id;/*** 相册名称*/private String name;/*** 相册简介*/private String description;/*** 排序序号*/private Integer sort;/*** 数据创建时间*/private LocalDateTime gmtCreate;/*** 数据最后修改时间*/private LocalDateTime gmtModified;}

相关文章:

第四阶段01-酷鲨商城项目准备

1. 关于csmall-product项目 这是“酷鲨商城”大项目中的“商品管理”项目&#xff0c;是一个后台管理项目&#xff08;给管理员&#xff0c;或运营人员使用的项目&#xff0c;并不是普通用户使用的&#xff09;&#xff0c;并且&#xff0c;只会涉及与发布商品可能相关的功能开…...

Uncaught ReferenceError: jQuery is not defined

今天在拉取项目部署到本地的时候遇到了一个问题特此记录一下 &#xff08;以后闭坑&#xff09; 我和同事同时拉取了一样的代码&#xff0c;结果同事的页面加载正常而我的页面像被狗啃了一样&#xff0c;知道是js的问题但是不知道问题出在哪里&#xff1f;后来还是同事帮我解决…...

面试阿里测开岗,被面试官针对,当场翻脸,把我的简历还给我,疑似被拉黑...

好家伙&#xff0c;金三银四一到&#xff0c;这奇葩事可真是多&#xff0c;前两天和粉丝聊天&#xff0c;他说前段时间面试阿里的测开岗&#xff0c;最后和面试官干起来了。 我问他为什么&#xff0c;他说没啥&#xff0c;就觉得面试官太装了&#xff0c;就爱问一些虚而不实的…...

2. 驱动开发--驱动开发环境搭建

文章目录前言一、Linux中配置编译环境1.1 linux下安装软件的方法1.2 交叉编译工具链的安装1.2.1 测试是否安装成功1.3 设置环境变量1.3.1 将工具链导出到环境变量1.4 为工具链创建arm-linux-xxx符号链接二、 搭建运行开发环境2.1 tftp网络方式加载内核和设备树文件2.2 nfs网络方…...

《数据库系统概论》学习笔记——第四章 数据库安全

教材为数据库系统概论第五版&#xff08;王珊&#xff09; 这一章简单记一下那几条sql的用法和两种存取控制和审计&#xff08;今年期末考了&#xff09;吧&#xff0c;不知道有啥好考的 数据库安全性 问题的提出 数据库的一大特点是数据可以共享数据共享必然带来数据库的安全…...

山洪径流过程模拟及洪水危险性评价

目录 1.洪水淹没危险性评价方法及技术讲解 2.GIS水文信息提取与分析(基于ArcGIS软件) 3.洪水淹没模拟水文分析&#xff1a;洪峰流量估算 4.洪水淹没模拟水力学分析&#xff1a;Hec-RAS实例操作 GIS水文分析&#xff08;ArcHydro、Spatial Anlysist等模块&#xff09;是流域…...

LeetCode HOT100 (23、32、33)

目录 23、合并K个升序链表 32、最长有效括号 33、搜索旋转排序数组 23、合并K个升序链表 思路&#xff1a;采用顺序合并的方法&#xff0c;用一个变量 ans 来维护以及合并的链表&#xff0c;第 i 次循i 个链表和 ans合并&#xff0c;答案保存到 ans中。 代码&#xff1a; …...

电力监控仪表主要分类

电力监控仪表是电工仪表行业的一个新兴、细分行业&#xff0c;类别属于安装式数字仪表&#xff0c;从模拟指针式仪表和电量变送器演变而来。随着计算机技术的发展&#xff0c;电力监控仪表已应用到电力系统的发、输、变、配、用的各个环节&#xff0c;实现对电网电参量的测量、…...

山野户外定位依赖GPS或者卫星电话就能完成么?

每当有驴友失联的新闻报道&#xff0c;很多的户外“老鸟”和“菜鸟”都在讲&#xff1a;为什么不带卫星电话&#xff0c;不带GPS……云云&#xff01;提一个小小的问题&#xff1a;如果你拿着卫星电话、GPS或者其他即时通信的其他设备&#xff0c;你就能准定位你所处的位置么&a…...

SAP 应收应付重组配置

应收应付重组是为了使资产负债表真实的反映资产及负债的真实情况&#xff0c;需要对应收、应付账款的余额时行实际调整。即将“应收账款”的贷方余额和“应付账款”的借方余额分别调整至“预收账款”与“预付账款”账户中。 应收应付重组SAP系统是按照公司代码、客户/供应商、…...

算法练习(八)计数质数(素数)

1、问题描述&#xff1a; 给定整数 n &#xff0c;返回 所有小于非负整数 n 的质数的数量 。 2、示例如下&#xff1a; 3、代码如下&#xff1a; 第一种&#xff1a;比较暴力的算法 class Solution {public int countPrimes(int n) {int count1;if(n<2) return 0;for(in…...

用反射模拟IOC模拟getBean

IOC就是spring的核心思想之一&#xff1a;控制反转。这里不再赘述&#xff0c;看我的文章即可了解&#xff1a;spring基础思想IOC其次就是java的反射&#xff0c;反射机制是spring的重要实现核心&#xff0c;今天我看spring的三级缓存解决循坏引用的问题时&#xff0c;发现一个…...

【Ap AutoSAR入门与实战开发02】-【Ap_s2s模块01】: s2s的背景

总目录链接==>> AutoSAR入门和实战系列总目录 文章目录 1 s2s的背景?2 AUTOSAR 方法应支持车辆的无缝开发2.1 面向服务的ECU的解读2.2 面向信号的ECU的解读2.3 通过网关ECU实现转换1 s2s的背景? Cp AutoSAR基于传统的can,lin,flexray总线的通信,一般是面向信号设…...

C语言数据结构(3)----无头单向非循环链表

目录 1. 链表的概念及结构 2. 链表的分类 3. 无头单向非循环链表的实现(下面称为单链表) 3.1 SListNode* BuySListNode(SLTDateType x) 的实现 3.2 void SListPrint(SListNode* plist) 的实现 3.3 void SListPushBack(SListNode** pplist, SLTDateType x) 的实现 3.4 voi…...

Android 实现菜单拖拽排序

效果图简介本文主角是ItemTouchHelper。它是RecyclerView对于item交互处理的一个「辅助类」&#xff0c;主要用于拖拽以及滑动处理。以接口实现的方式&#xff0c;达到配置简单、逻辑解耦、职责分明的效果&#xff0c;并且支持所有的布局方式。功能拆解功能实现4.1、实现接口自…...

通过window.open打开新的页面并修改样式添加内容

const img new Image(); img.src res; //res是图片的路径地址 const newWin window.open(, _blank); newWin.document.write(img.outerHTML); // newWin.document.body.style.background #000; newWin.document.body.style.textAlign center; newWin.document.body.oncl…...

Java中 Synchronized 的用法

《编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程》一文详细讲述了线程、进程的关系及在操作系统中的表现&#xff0c;这是多线程学习必须了解的基础。本文将接着讲一下Java线程同步中的一个重要的概念synchronized. synchronized是Java中的关键字&#xff0c…...

Rust语言的基本介绍

rust缘起和目标 rust的英文是锈菌&#xff0c;是一种真菌&#xff0c;这种真菌的生命力非常顽强&#xff0c;其 在生命周期内可以产生多达5种孢子类型&#xff0c;这5种生命形态还可以相互转 化。“Rust”也有“铁锈”的意思&#xff0c;暗合“裸金属”之意&#xff0c;代表了R…...

新冠小阳人症状记录

原想挺过春节后再养&#xff0c;发现事与愿违。生理期期间抵抗力下降&#xff0c;所以在生理期第二天就有些症状了。可能是生理期前一天出去采购食物染上&#xff0c;也可能是合租夫妻染上。anyway&#xff0c;记录下自己的症状与相应有效的偏方&#xff1a; 第一天&#xff1a…...

SQL零基础入门学习(十四)

上篇&#xff1a;SQL零基础入门学习&#xff08;十三&#xff09; SQL NULL 值 NULL 值代表遗漏的未知数据。 默认地&#xff0c;表的列可以存放 NULL 值。 如果表中的某个列是可选的&#xff0c;那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...