普联一面4.2面试记录

普联一面4.2面试记录

文章目录

    • 普联一面4.2面试记录
          • 1.jdk和jre的区别
          • 2.java的容器有哪些
          • 3.list set map的区别
          • 4.get和post的区别
          • 5.哪个更安全
          • 6.java哪些集合类是线程安全的
          • 7.创建线程有哪几种方式
          • 8.线程的状态有哪几种
          • 9.线程的run和start的区别
          • 10.什么是java序列化
          • 11.redis的优缺点
          • 12.redis主要数据类型
          • 13.用spring有什么优点 这么多框架为什么要选spring
          • 14.java链接数据库的步骤
          • 15.数据库用过哪些
          • 16.mybatis框架和jdbc相比有什么优势
          • 17.了解过mybatis怎么配置事务吗
          • 18.mybatis怎么实现的懒加载
          • 19.linux部署时进行了哪些操作
          • 20.linux部署过程中用到的常用命令
          • 21.nginx反向代理有什么作用

1.jdk和jre的区别

JDK(Java Development Kit),它是功能齐全的 Java SDK,是提供给开发者使用,能够创建和编译 Java 程序的开发套件。它包含了 JRE,同时还包含了编译 java 源码的编译器 javac 以及一些其他工具比如 javadoc(文档注释工具)、jdb(调试器)、jconsole(基于 JMX 的可视化监控⼯具)、javap(反编译工具)等等。

JRE(Java Runtime Environment) 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,主要包括 Java 虚拟机(JVM)、Java 基础类库(Class Library)。

也就是说,JRE 是 Java 运行时环境,仅包含 Java 应用程序的运行时环境和必要的类库。而 JDK 则包含了 JRE,同时还包括了 javac、javadoc、jdb、jconsole、javap 等工具,可以用于 Java 应用程序的开发和调试。如果需要进行 Java 编程工作,比如编写和编译 Java 程序、使用 Java API 文档等,就需要安装 JDK。而对于某些需要使用 Java 特性的应用程序,如 JSP 转换为 Java Servlet、使用反射等,也需要 JDK 来编译和运行 Java 代码。因此,即使不打算进行 Java 应用程序的开发工作,也有可能需要安装 JDK。

JDK 包含 JRE

不过,从 JDK 9 开始,就不需要区分 JDK 和 JRE 的关系了,取而代之的是模块系统(JDK 被重新组织成 94 个模块)+ jlinkopen in new window 工具 (随 Java 9 一起发布的新命令行工具,用于生成自定义 Java 运行时映像,该映像仅包含给定应用程序所需的模块) 。并且,从 JDK 11 开始,Oracle 不再提供单独的 JRE 下载。

在 Java 9 新特性概览open in new window这篇文章中,我在介绍模块化系统的时候提到:

在引入了模块系统之后,JDK 被重新组织成 94 个模块。Java 应用可以通过新增的 jlink 工具,创建出只包含所依赖的 JDK 模块的自定义运行时镜像。这样可以极大的减少 Java 运行时环境的大小。

也就是说,可以用 jlink 根据自己的需求,创建一个更小的 runtime(运行时),而不是不管什么应用,都是同样的 JRE。

定制的、模块化的 Java 运行时映像有助于简化 Java 应用的部署和节省内存并增强安全性和可维护性。这对于满足现代应用程序架构的需求,如虚拟化、容器化、微服务和云原生开发,是非常重要的。


著作权归JavaGuide(javaguide.cn)所有 基于MIT协议 原文链接:https://javaguide.cn/java/basis/java-basic-questions-01.html

2.java的容器有哪些

List:特定顺序保存一组数据。

Set:集合;不允许有重复的数据。

Queue:队列:在一端插入数据,一端弹出数据。

Map:关联数据,字典。存储一组(Key-Value)值。

3.list set map的区别

List:可以存储重复数组,基于数组或者链表实现。

Set:不可以存储重复元素,基于Map实现。

Map:键值对方式存储,存储的键的不能重复,基于哈希表或者红黑色实现。

4.get和post的区别

(1)post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)

(2)post发送的数据更大(get有url长度限制)

(3)post能发送更多的数据类型(get只能发送ASCII字符)

(4)post比get慢

(5)post用于修改和写入数据,get一般用于搜索排序和筛选之类的操作(淘宝,支付宝的搜索查询都是get提交),目的是资源的获取,读取数据

5.哪个更安全

post

6.java哪些集合类是线程安全的
  1. Vector

    Vector 是 Java 中最早的一个集合类,它使用 synchronized 关键字来实现线程安全。即使是在多线程环境下,多个线程操作同一个 Vector 实例时也可以保证线程安全。虽然 Vector 在多线程环境中有很好的线程安全性,但它的性能比较低,建议在单线程环境中使用。

  2. Hashtable

    Hashtable 是 Java 中最早的一个键值对映射容器,也是使用 synchronized 关键字来实现线程安全的。它的每个 put、remove 和 get 操作都是原子性的,因此它能够保证对于多个线程同时访问 Hashtable 的情况下,没有线程会看到错误的值。

  3. ConcurrentHashMap

    ConcurrentHashMap 是 Java 并发包中提供的一个线程安全的哈希表实现,它会将整个表分为多个段(Segment),每个段都是一个独立的哈希表,每个线程只能访问特定的段,从而实现了并发访问时的线程安全。

  4. CopyOnWriteArrayList

    CopyOnWriteArrayList 是 Java 并发包中提供的一个线程安全的 List 实现,它通过复制原有的 List 来实现并发访问的线程安全。每次对 CopyOnWriteArrayList 进行修改时都会创建一个新的数组,因此它的写操作性能比较低,但它的读操作性能非常高。

  5. ConcurrentLinkedQueue

    ConcurrentLinkedQueue 是 Java 并发包中提供的一个线程安全的队列实现,它使用链表来存储元素,从而实现了高效的并发性能。和 CopyOnWriteArrayList 一样,它的读操作是非常高效的。

7.创建线程有哪几种方式

java创建线程(Thread)的5种方式_java new thread 方法-CSDN博客

8.线程的状态有哪几种

java源码:

/*** A thread state.  A thread can be in one of the following states:* <ul>* <li>{@link #NEW}<br>*     A thread that has not yet started is in this state.*     </li>* <li>{@link #RUNNABLE}<br>*     A thread executing in the Java virtual machine is in this state.*     </li>* <li>{@link #BLOCKED}<br>*     A thread that is blocked waiting for a monitor lock*     is in this state.*     </li>* <li>{@link #WAITING}<br>*     A thread that is waiting indefinitely for another thread to*     perform a particular action is in this state.*     </li>* <li>{@link #TIMED_WAITING}<br>*     A thread that is waiting for another thread to perform an action*     for up to a specified waiting time is in this state.*     </li>* <li>{@link #TERMINATED}<br>*     A thread that has exited is in this state.*     </li>* </ul>** <p>* A thread can be in only one state at a given point in time.* These states are virtual machine states which do not reflect* any operating system thread states.** @since   1.5* @see #getState*/
public enum State {/*** Thread state for a thread which has not yet started.*/NEW,/*** Thread state for a runnable thread.  A thread in the runnable* state is executing in the Java virtual machine but it may* be waiting for other resources from the operating system* such as processor.*/RUNNABLE,/*** Thread state for a thread blocked waiting for a monitor lock.* A thread in the blocked state is waiting for a monitor lock* to enter a synchronized block/method or* reenter a synchronized block/method after calling* {@link Object#wait() Object.wait}.*/BLOCKED,/*** Thread state for a waiting thread.* A thread is in the waiting state due to calling one of the* following methods:* <ul>*   <li>{@link Object#wait() Object.wait} with no timeout</li>*   <li>{@link #join() Thread.join} with no timeout</li>*   <li>{@link LockSupport#park() LockSupport.park}</li>* </ul>** <p>A thread in the waiting state is waiting for another thread to* perform a particular action.** For example, a thread that has called {@code Object.wait()}* on an object is waiting for another thread to call* {@code Object.notify()} or {@code Object.notifyAll()} on* that object. A thread that has called {@code Thread.join()}* is waiting for a specified thread to terminate.*/WAITING,/*** Thread state for a waiting thread with a specified waiting time.* A thread is in the timed waiting state due to calling one of* the following methods with a specified positive waiting time:* <ul>*   <li>{@link #sleep Thread.sleep}</li>*   <li>{@link Object#wait(long) Object.wait} with timeout</li>*   <li>{@link #join(long) Thread.join} with timeout</li>*   <li>{@link LockSupport#parkNanos LockSupport.parkNanos}</li>*   <li>{@link LockSupport#parkUntil LockSupport.parkUntil}</li>* </ul>*/TIMED_WAITING,/*** Thread state for a terminated thread.* The thread has completed execution.*/TERMINATED;
}

在这里插入图片描述

总算把线程六种状态的转换说清楚了! - 掘金 (juejin.cn)

9.线程的run和start的区别

Java中的run()方法和start()的区别_start()方法和 run()的区别-CSDN博客

10.什么是java序列化

如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。

简单来说:

  • 序列化:将数据结构或对象转换成二进制字节流的过程
  • 反序列化:将在序列化过程中所生成的二进制字节流转换成数据结构或者对象的过程

对于 Java 这种面向对象编程语言来说,我们序列化的都是对象(Object)也就是实例化后的类(Class),但是在 C++这种半面向对象的语言中,struct(结构体)定义的是数据结构类型,而 class 对应的是对象类型。

下面是序列化和反序列化常见应用场景:

  • 对象在进行网络传输(比如远程方法调用 RPC 的时候)之前需要先被序列化,接收到序列化的对象之后需要再进行反序列化;
  • 将对象存储到文件之前需要进行序列化,将对象从文件中读取出来需要进行反序列化;
  • 将对象存储到数据库(如 Redis)之前需要用到序列化,将对象从缓存数据库中读取出来需要反序列化;
  • 将对象存储到内存之前需要进行序列化,从内存中读取出来之后需要进行反序列化。

维基百科是如是介绍序列化的:

序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓冲,或经由网络中发送),以留待后续在相同或另一台计算机环境中,能恢复原先状态的过程。依照序列化格式重新获取字节的结果时,可以利用它来产生与原始对象相同语义的副本。对于许多对象,像是使用大量引用的复杂对象,这种序列化重建的过程并不容易。面向对象中的对象序列化,并不概括之前原始对象所关系的函数。这种过程也称为对象编组(marshalling)。从一系列字节提取数据结构的反向操作,是反序列化(也称为解编组、deserialization、unmarshalling)。

综上:序列化的主要目的是通过网络传输对象或者说是将对象存储到文件系统、数据库、内存中。

img

https://www.corejavaguru.com/java/serialization/interview-questions-1


著作权归JavaGuide(javaguide.cn)所有 基于MIT协议 原文链接:https://javaguide.cn/java/basis/serialization.html

11.redis的优缺点

优点

  1. 高性能:Redis是一个基于内存的数据库,数据存储在RAM中,因此具有非常快的读写速度。它采用了高效的数据结构和算法,能够在微秒级别完成大量的操作,使其成为处理高并发场景的理想选择。
  2. 简单易用:Redis提供了简洁、直观的命令行接口和易于使用的API,使开发人员可以轻松地进行数据存储和检索。其支持丰富的数据类型,如字符串、哈希表、列表、集合和有序集合,可以满足不同场景下的需求。
  3. 数据持久化:Redis支持数据的持久化存储,可以将内存中的数据保存到磁盘上,以防止数据丢失。它提供了两种持久化方式:快照(snapshotting)和日志追加(append-only file),用户可以根据实际需求选择适合的方式。
  4. 高可用性:Redis支持主从复制和Sentinel机制,可以实现数据的自动备份和故障转移。主从复制可以将数据从主节点复制到多个从节点,提高读取性能和数据冗余;Sentinel机制可以监控主节点的状态,并在主节点故障时自动切换到从节点,确保系统的高可用性。

缺点

  1. 内存限制:由于Redis的数据存储在内存中,因此受到可用内存大小的限制。当数据量超过内存容量时,性能会受到影响,甚至导致系统崩溃。虽然Redis提供了数据淘汰策略和内存优化选项,但仍需要合理规划和管理内存资源。
  2. 单线程模型:Redis采用单线程模型来处理客户端请求,这意味着在高并发场景下,性能可能受到限制。虽然Redis通过异步操作和事件驱动的方式提高了并发处理能力,但在某些特定场景下,单线程模型可能成为瓶颈。
  3. 缺乏复杂查询支持:Redis主要用于键值对存储和简单的数据结构操作,并不支持复杂的查询操作。相比之下,关系型数据库具有更强大的查询语言和查询优化。
12.redis主要数据类型

Redis 提供了丰富的数据类型,常见的有五种:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)

一文读懂Redis五种数据类型及应用场景 - 知乎 (zhihu.com)

**这篇知乎强烈推荐!!!**从底层数据结构到应用场景及解决办法,佬太强了

13.用spring有什么优点 这么多框架为什么要选spring

1)方便解耦,简化开发

Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给 Spring 管理。

2)方便集成各种优秀框架

Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。

3)降低 Java EE API 的使用难度

Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了封装,使这些 API 应用的难度大大降低。

4)方便程序的测试

Spring 支持 JUnit4,可以通过注解方便地测试 Spring 程序。

5)AOP 编程的支持

Spring 提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。

6)声明式事务的支持

只需要通过配置就可以完成对事务的管理,而无须手动编程。

14.java链接数据库的步骤
  • 注册驱动 (告诉Java要连接什么数据库)

  • 获得连接 (表示JVM的进程与数据库之间的通道打开)

  • 获得数据库操作对象 (它专门执行sql语句的对象)

  • 执行sql 语句

  • 处理查询结果集 (只有执行select 语句才有的步骤)

  • 释放资源 (使用完后,一定要关闭)

原文链接:https://blog.csdn.net/qq_52252193/article/details/121348505

15.数据库用过哪些

mysql mongodb

16.mybatis框架和jdbc相比有什么优势

针对JDBC编程的劣势,MyBatis提供了以下解决方案,具体如下。

  • 问题一:数据库链接创建、释放频繁会造成系统资源浪费,从而影响系统性能。

    解决方案:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

  • 问题二:SQL语句在代码中硬编码,造成代码不易维护。在实际应用的开发中,SQL变化的可能较大。在传统JDBC编程中,SQL变动需要改变Java代码,违反了开闭原则。

    解决方案:MyBatis将SQL语句配置在MyBatis的映射文件中,实现了与Java代码的分离。

  • 问题三:使用preparedStatement向占位符传参数存在硬编码,因为SQL语句的where条件不一定,可能多也可能少,修改SQL需要修改代码,造成系统不易维护。

    解决方案:MyBatis自动将Java对象映射至SQL语句,通过Statement中的parameterType定义输入参数的类型。

  • 问题四:JDBC对结果集解析存在硬编码(查询列名),SQL变化导致解析代码变化,造成系统不易维护。

    解决方案:MyBatis自动将SQL执行结果映射至Java对象,通过Statement中的resultType定义输出结果的类型。

作者:黑马程序员
链接:https://www.zhihu.com/question/21186788/answer/2516715579
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

17.了解过mybatis怎么配置事务吗

MyBatis(六)MyBatis使用事务 - 青杉 - 博客园 (cnblogs.com)

18.mybatis怎么实现的懒加载

MyBatis 延迟加载(懒加载)一篇入门 - 知乎 (zhihu.com)

19.linux部署时进行了哪些操作

宝塔面板 基础环境搭建 开放端口 上传jar包;前端打包成dist同样上传;

20.linux部署过程中用到的常用命令

部署项目时常用的 Linux 命令-CSDN博客

21.nginx反向代理有什么作用

终于有人把正向代理和反向代理解释的明明白白了!-腾讯云开发者社区-腾讯云 (tencent.com)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

商品购买过程中,库存的抵扣过程是怎样的?如何防止超卖?

在商品购买的过程中&#xff0c;库存的抵扣过程&#xff0c;一般操作如下&#xff1a; 1、select根据商品id查询商品的库存。 2、根据下单的数量&#xff0c;计算库存是否足够&#xff0c;如果存库不足则抛出库存不足的异常&#xff0c;如果库存足够&#xff0c;则减去扣除的…

mysql+keepalive+lvs搭建的数据库集群实验

前提条件&#xff1a;准备5台计算机&#xff0c;且网络互通 1、客户端 yum groups -y install mariadb-client ip 192.168.0.5 2、lvs1 yum-y install ipvsadm keepalived ip 192.168.0.1 keepalivedvip 192.168.0.215 /etc/hosts 解析192.168.0.1 主机名 3、lvs2 yum-y i…

前视声呐目标识别定位(五)-代码解析之修改声呐参数

前视声呐目标识别定位&#xff08;一&#xff09;-基础知识 前视声呐目标识别定位&#xff08;二&#xff09;-目标识别定位模块 前视声呐目标识别定位&#xff08;三&#xff09;-部署至机器人 前视声呐目标识别定位&#xff08;四&#xff09;-代码解析之启动识别模块 …

DHT11温湿度传感器使用视频教程分享

下载地址&#xff1a; 温湿度计(STCDHT11): https://url83.ctfile.com/d/45573183-60623983-9b7f6c?p7526 (访问密码: 7526)

Java常用类和基础API

文章目录 1. 字符串相关类之不可变字符序列&#xff1a;String1.1 String的特性1.2 String的内存结构1.2.1 概述1.2.2 练习类型1&#xff1a;拼接1.2.3 练习类型2&#xff1a;new1.2.4 练习类型3&#xff1a;intern() 1.3 String的常用API-11.3.1 构造器1.3.2 字符串对象的比较…

解决酷狗官网无法播放音乐问题

播放歌曲页面无法播放歌曲&#xff0c;有CORS错误&#xff0c;困扰我很久了。 谷歌浏览器优雅的关闭cors跨域_浏览器关闭跨域-CSDN博客 "C:\Program Files\CatsxpSoftware\Catsxp-Browser\Application\catsxp.exe" --disable-web-security --user-data-dirE:\catsxp…

【学习笔记】java项目—苍穹外卖day10

文章目录 苍穹外卖-day10课程内容1. Spring Task1.1 介绍1.2 cron表达式1.3 入门案例1.3.1 Spring Task使用步骤1.3.2 代码开发1.3.3 功能测试 2.订单状态定时处理2.1 需求分析2.2 代码开发2.3 功能测试 3. WebSocket3.1 介绍3.2 入门案例3.2.1 案例分析3.2.2 代码开发3.2.3 功…

Fusion360修改嘉立创EDA专业版生成的3D外壳文件

需要第三方软件的原因 嘉立创EDA专业版生成电路板的3D外壳文件是比较快捷的&#xff0c;但如果侧面精密开孔或者添加其它非常规的元素还是有些局限。嘉立创EDA专业版可以把3D外壳文件导出&#xff0c;这就大大方便了第三方软件的修改。 本文是利用Fusion360修改3D外壳文件&…

Waifu2x:使用深度卷积神经网络的动漫风格艺术的图像超分辨率

Github网址&#xff1a;nagadomi/waifu2x&#xff1a;动漫风格艺术的图像超分辨率 (github.com) 该项目主要讲述的是如何利用预训练的深度学习模型来达到无损扩大收缩和去噪&#xff0c;对于一般训练图像的小伙伴应该很清晰图像经常要通过resize操作固定大小&#xff0c;然后c…

某华为hr擅自给我报名机

某华为hr擅自报名机考 上周&#xff0c;牛客网一位同学爆料&#xff1a; ❝ 今年一月份&#xff0c;华为一位 HR 通过某招聘网站联系到他&#xff0c;然后通过该 HR 加上了业务工程师的微信。随后&#xff0c;该工程师在「经过他本人同意」的情况下&#xff0c;在系统录入了他的…

CSGO比赛赛事大科普,Major并不是一个赛事!

关于CSGO比赛&#xff0c;有很多人都听过许多相关名词&#xff1a;Major、Minor、IEM、EPL、ESL ONE、Dreamhack、ESEA、Blast、EPICENTER等等&#xff0c;但大家有没有想过这些名词所代表的含义呢&#xff1f; Major、Minor严格意义上说&#xff0c;Major、Minor本身并不是赛事…

深入浅出 -- 系统架构之分布式架构

​​​​​​分布式架构&#xff1a; 根据业务功能对系统做拆分&#xff0c;每个业务功能模块作为独立项目开发&#xff0c;称为一个服务。 当垂直应用越来越多时&#xff0c;应用之间的交互不可避免&#xff0c;可将共用的基础服务或核心模块抽取出来作为独立服务&#xff0c…

接口练习题目

练习一 1、声明接口Eatable&#xff0c;包含抽象方法public abstract void eat(); 2、声明实现类中国人Chinese&#xff0c;重写抽象方法&#xff0c;打印用筷子吃饭 3、声明实现类美国人American&#xff0c;重写抽象方法&#xff0c;打印用刀叉吃饭 4、声明实现类印度人Indi…

GDPU 竞赛技能实践 天码行空6

&#x1f4d6; 敌兵布阵 C国的死对头A国这段时间正在进行军事演习&#xff0c;所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段&#xff0c;所以每个工…

使用PostgreSQL中的隐式转换解决,MybatisPlus插入数据库时的类型不一致的问题

使用PostgreSQL中的隐式转换解决,MybatisPlus插入数据库时的类型不一致的问题 问题描述 鄙人在使用 MybatisPlus插件开发一个SpringBoot项目时, 遇到数据库中employee表与Java实体对象中某个属性的类型不一致, 导致插入数据库失败. 具体问题截图如下: 具体原因在于, Java实体…

Java入门教程||Java 多线程编程

Java 多线程编程 Java 给多线程编程提供了内置的支持。一个多线程程序包含两个或多个能并发运行的部分。程序的每一部分都称作一个线程&#xff0c;并且每个线程定义了一个独立的执行路径。 多线程是多任务的一种特别的形式。多线程比多任务需要更小的开销。 这里定义和线程…

usbserial驱动流程解析_Part1_主要函数

本系列解析usbseiral ko的源码&#xff0c;记录主要函数&#xff0c;调用流程&#xff0c;USB一端和串口一端的注册流程&#xff0c;本节简介主要函数以及替换规则。 首先&#xff0c;usbserial是USB转串口驱动的一个基础模板&#xff0c;其中有许多默认函数&#xff0c;他们的…

书生·浦语训练营二期第二次课后作业

文章目录 基础作业使用 InternLM2-Chat-1.8B 模型生成 300 字的小故事 进阶作业熟悉 huggingface 下载功能完成 浦语灵笔2 的 图文创作 及 视觉问答 部署图文创作视觉问答 完成 Lagent 工具调用 数据分析 Demo 部署 作业详细操作步骤见第二次课笔记&#xff1a;https://blog.cs…

CSS层叠样式表学习(字体属性)

&#xff08;大家好&#xff0c;今天我们将继续来学习CSS字体属性的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 三、CSS字体属性 CSS Fonts(字体)属性用于定义字体系列、大小&#xff0c;粗细&#xff0c;和文字样式(如斜…

list的常用接口底层实现与介绍

目录 概念&#xff1a; list的基本结构&#xff1a; list的迭代器⭐❤&#xff1a; 自定义类型的完善&#xff1a; const的迭代器&#xff1a; insert erase&#xff1a; size empty push_back 、push_front 、pop_back、pop_front swap 、operator 析构函数…