首页 > 其他分享 >面试复盘(一)

面试复盘(一)

时间:2024-03-01 16:04:27浏览次数:18  
标签:String StringBuffer 复盘 面试 线程 StringBuilder 重写 final

1、List、Set、Map是否都继承Collection接口,他们的存取各有什么特点?

  • List
    按顺序存储,允许随机访存
    元素可以重复
  • Set
    不保证元素的顺序,也就是无法通过索引访问元素
    值唯一,通常用于值唯一的场景
  • Map
    存储键值对,每个键都是唯一的但是允许值重复
    不保证元素顺序,也就是无法通过索引访问元素

2、String、StringBuffer和StringBuilder的区别。

  • 可变性
    String是不可变的,原因如下图。

    其中的
private final char[] value;

是属于final修饰引用类型变量的情况,value指向的的对象不能改变但是他的内容是可以改变的,那么String是怎么实现不可变的呢?原因有两点(双final):

  1. String中的字符串数组被final修饰且为私有private,并且String并没有开放对外的修改value数组的接口。
  2. String被final修饰不可被继承,防止了破坏String的不可变。

StringBuffer和StringBuilder是可变的,他们两个都继承自AbstractStringBuilder抽象类,

其中也用字符数组保存字符串但没有final和private修饰,最关键的是AbstractStringBuilder还提供了很多修改字符数组的方法,比如append()。

  • 线程安全
    String中的对象是不可变的,也就可以理解为常量,线程安全。
    AbstractStringBuilder是StringBuilder和StringBuffer的公共父类,定义了一下基本操作,StringBuffer对方法添加了同步锁,所以是线程安全的,StringBuilder是线程不安全的。
  • 性能
    每次对String类型进行改变的时候都会生成一个新的String对象,然后将指针指向新的对象。StringBuilder性能比StringBuffer好但是有线程不安全的风险。
  • 总结:
    操作少量的数据: 适用 String
    单线程操作字符串缓冲区下操作大量数据: 适用 StringBuilder
    多线程操作字符串缓冲区下操作大量数据: 适用 StringBuffer

3、重载和重写的区别

  • 重载:是指在一个类中,可以有多个重名函数,但是他们的参数列表必须不同(包括参数的类型、个数、顺序)。
  • 重写:是子类重写父类的某个方法,以实现子类特有的逻辑或行为,重写方法与父类方法必须有相同的签名(方法名,参数列表,返回值类型);

4、用2个玻璃球找到从一100层的大楼的某一层落下刚好会摔碎,如何制定最优策略?

5、25 匹马,5 个赛道,没有计时器,请问最低多少次可以找出跑得最快的 3匹马

6、 有10级台阶,一个人每次上一级或者两级,问有多少种走完10级台阶的方法。

标签:String,StringBuffer,复盘,面试,线程,StringBuilder,重写,final
From: https://www.cnblogs.com/poteitoutou/p/18022180

相关文章

  • JS面试题
    1.判断一个函数是否标记为asyncfunctionisAsyncFunction(func){conststr=Object.prototype.toString.call(func);returnstr=='[objectAsyncFunction]';}2.两个大整数之和/***1.将两个数字对齐*2.从后往前循环,按位相加同时加上进位*3.计算进位*4.到最......
  • ABC238 复盘
    ABC238复盘[ABC238A]ExponentialorQuadratic思路解析通过“指数爆炸”的特点可以发现当\(n\ge5\)或\(n=1\)时\(2^n\)是大于\(n^2\)的,所以一个if即可code#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn; cin>>n; if(n>=5||n==......
  • 面试必备:一线大厂Redis缓存设计规范与性能优化
    说在前面你是否在使用Redis时,不清楚Redis应该遵循的设计规范而苦恼?你是否在Redis出现性能问题时,不知道该如何优化而发愁?你是否被面试官拷问过Redis的设计规范和性能优化而回答不出来别慌,看这篇文章就行了本文,已收录于,我的技术网站aijiangsir.com,有大厂完整面经,工作技术,架构......
  • 面试官上来就让手撕HashMap的7种遍历方式,当场愣住,最后只写出了3种
    写在开头今天有个小伙伴私信诉苦,说面试官上来就让他手撕HashMap的7种遍历方式,最终只写出3种常用的,怀疑面试官是在故意***难。这个问题大家怎么看?反正我个人感觉这肯定不是***难,“手撕遍历方式”算是一个比较简单的考验方式了,而且集合的遍历又是日常开发的必备!至于要一下写出7......
  • 面试必备!《1000多道互联网Java工程师面试题》分享
    资料领取见文末!在当今互联网时代,Java作为一种广泛应用的编程语言,在互联网行业中扮演着至关重要的角色。无论是初学者还是有经验的开发者,不断学习和提升自己的Java技能都是至关重要的。而《1000多道互联网Java工程师面试题》这份资料提供了一个绝佳的机会,让你深入了解并加强对Java......
  • 数据类型拓展与面试题解读
    整数拓展进制:在平时咱们生活中经常见到的例如通用于电脑识别的二进制、咱们生活中常用的十进制、工作中常见的八进制与十六进制。二进制:通常会以0b开头十进制:咱们生活中的数字八进制:通常以0开头十六进制:通常以0x开头​ 浮点数拓展(float、double)试题举例银行......
  • 面试题 02.07. 链表相交C
    利用链表的特性,如果相交的话,后面就不可能岔开!你可以想象把他们有同一个尾巴,然后从尾巴往前看。所以只要知道两个链表的长度,就可以在同一起跑线上一起比较了。/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;......
  • 前端面试题(四)—— 事件委托(Event Delegation)
    一、什么是事件委托事件委托(EventDelegation)是一种常用的技术。它利用事件冒泡的特性,在父元素上监听事件,而不是在子元素上直接添加事件监听器。通过在父元素上捕获事件,然后根据事件的目标(target)来执行相应的操作,从而实现对子元素的事件处理。二、实现方式通过给父元素添加事......
  • Java面试题笔记-多线程篇
    创建线程的几种方式继承Thread类,重写run方法实现Runnable接口,实现run方法实现Callable,实现call方法,配合FutureTask获取线程返回结果通过ThreadPoolExecuter线程池获取线程资源这几种方法的底层都是Runnable,Thread是Runnable接口的实现类,Callable配合FutureTask使用......
  • 面试官:如何设计一个高并发系统?
    面试题如何设计一个高并发系统?面试官心理剖析面试官对高并发系统的深入询问,实际上是对求职者专业技能和经验的精准检验。在许多公司发布的职位描述(JD)中,高并发经验被视作一项重要的加分项,这反映了当前互联网行业对高并发处理能力的极高要求。对于那些真正在互联网公司中负责过......