• 面试题亲身经历


    1.什么是浅拷贝和深拷贝有什么区别

    1、浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷贝(例:assign())

    2、深拷贝是将对象及值复制过来,两个对象修改其中任意的值另一个值不会改变,这就是深拷贝。

    简单的理解就是:就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝。 如果拷贝的对象里的元素只有值,没有引用,那浅拷贝和深拷贝没有差别,都会将原有对象复制一份,产生一个新对象,对新对象里的值进行修改不会影响原有对象,新对象和原对象完全分离开。

    2.说一下多线程有几种启动方式

    3种:继承Thread类创建线程,

    • 创建自定义类并继承Thread类,并且重写run方法;
    • 实例化自定义类
    • 通过实例化对象调用start方法来创建线程;

    实现Runnable接口:

    • 创建自定义类并实现runnable接口,且实现接口中的run方法;
    • 实例化自定义的类;
    • 将自定义类的实例作为参数传给Thread类,创建thread实例;
    • 调用thread实例的start,启动子线程;

    实现Callable接口:线程池提供的一种创建线程的方式;


    实现Callable接口,并实现它的call方法;
    创建线程池(Executors工具类提供的方法创建线程池);
    创建Callable接口实现类的实例;
    将实例对象通过线程池的submit(提交)方法提交给线程池进而创建新的线程;

    3.java8的桶

    桶排序也是时间复杂度仅为 O(n) 的一种排序方法,它假设输入数据服从均匀分布,我们将数据分别放入到 n 个桶内,先对桶内数据进行排序,然后遍历桶依次取出桶中的元素即可完成排序。

    例如输入数据:21,8,6,11,36,50,27,42,0,12。

    然后分别放入对应的桶内排序,最后依次遍历桶取出元素即可完成排序。

    4.Liunx命令

    1. java -jar shareniu.jar启动jar包
    2.  ifconfig  --help:查看网卡信息
    3. cd /        切换到根目录
      cd /usr        切换到根目录下的usr目录
      cd ../        切换到上一级目录 或者  cd ..
      cd ~        切换到home目录
      cd -        切换到上次访问的目录
    4. ls                查看当前目录下的所有目录和文件
      ls -a            查看当前目录下的所有目录和文件(包括隐藏的文件)
      ls -l 或 ll       列表查看当前目录下的所有目录和文件(列表查看,显示更多信息)
      ls /dir            查看指定目录下的所有目录和文件   如:ls /usr
    5. mkdir    aaa            在当前目录下创建一个名为aaa的目录
      mkdir    /usr/aaa    在指定目录下创建一个名为aaa的目录
    6. 删除文件:
      rm 文件        删除当前目录下的文件
      rm -f 文件    删除当前目录的的文件(不询问)

      删除目录:
      rm -r aaa    递归删除当前目录下的aaa目录
      rm -rf aaa    递归删除当前目录下的aaa目录(不询问)

      全部删除:
      rm -rf *    将当前目录下的所有目录和文件全部删除
      rm -rf /*    【自杀命令!慎用!慎用!慎用!】将根目录下的所有文件全部删除

    5.SpringCloud常用组件

    、常见组件

    • Eureka:注册中心
    • Zuul、Gateway:网关
    • Ribbon:负载均衡
    • Feign:服务调用
    • Hystrix:熔断器

    6.什么是队列

    队列定义

    队列是一种操作受限的线性表,只允许在表的前端(front)进行删除操作又称作出队,在表的后端进行插入操作,称为入队,符合先进先出(First in First out)的特性。在队尾插入元素叫做入队,对头删除元素叫做出队。

    队列实现方式
    队列实现方式总共有三种,一种是通过数组实现,一种通过链表实现.

    7.ArrayList和LinkedList的区别

    1.ArrayList的实现是基于数组来实现的,LinkedList的基于双向链表来实现。这两个数据结构的逻辑关系是不一样,当然物理存储的方式也会是不一样。

    2.LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。

    3.对于随机查询,ArrayList要优于LinkedList。

    4.对于插入和删除操作,LinkedList优于ArrayList。

    5.在ArrayList的 中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。

    集合

    1、List(有序、可重复)
    List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。

    2、Set(无序、不能重复)
    Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。

    3、Map(键值对、键唯一、值不唯一)
    Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。

    在类集中提供了以下四种的常见输出方式:

    1)Iterator:迭代输出,是使用最多的输出方式。

    2)ListIterator:是Iterator的子接口,专门用于输出List中的内容。

    3)foreach输出:JDK1.5之后提供的新功能,可以输出数组或集合。

    4)for循环

    1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
    2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
    3.对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。 这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。

  • 相关阅读:
    注意了!申请流量卡时地址一定不要填写学校,不好下卡哦!
    4. 条件查询
    【Vue3 源码解析】computed
    基于人工水母优化的BP神经网络(分类应用) - 附代码
    如何使用 js 过滤文本框表情符号
    轻量级实时跟踪算法NanoTrack在瑞芯微RK3588上的部署以及使用
    自动化运维工具Ansible(2)ad-hoc
    【Redis】Java Spring操作redis
    私域流量对企业的好处
    【C++11】万能引用与完美转发
  • 原文地址:https://blog.csdn.net/WRSR52/article/details/125516280