首页 > 字节测开面试笔记
头像
躺平大队首席工程师
编辑于 2020-07-06 14:27
+ 关注

字节测开面试笔记

字节跳动测开岗面试:

1、static关键字:为特定数据类型或对象分配单一的存储空间,与创建对象的个数无关;在不创建对象的情况下,可以通过类来直接调用方法或实用类的属性。
1)static成员变量:Java提供了两种类型变量:用static关键字修饰的静态变量,和没有用static修饰的实例变量。静态变量属于类,在内存中只有一个副本。只要静态变量所在的类被加载,这个静态类就会被分配空间,因此可以被使用。对静态变量引用有两种方式:“类 . 静态变量”和“对象 . 静态变量”。
2)static成员方法:static方法是类的方法,不需要创建对象就能被使用。static方法中不能使用this和super关键字,不能调用非static方法,只能访问所属类的静态成员变量和成员方法。
3)实现单例模式:单例模式特点只有一个实例,把构造方法申明为private,提供一个创建对象的方法。因此外界只能通过该类提供的方法来获取类的对象,把创建对象的方法声明为static。
4)static代码块:用来初始化静态变量,在类中是独立于成员变量和成员函数的代码块。
5)static内部类:不依赖于外部类实例对象而被实例化,不能与外部类有相同的名字,不能访问外部类的普通成员变量,只能访问外部类中的静态成员和静态成员方法,只有内部类才能被申明为static。

2、protect关键字:其修饰的成员可以被本类、同包下的类、本类的所有子类(被子类通过继承的方式直接拿来使用)所访问。

3、数组与链表的区别:数组是由下标索引和数据两部分组成,链表是由数据和指向下一个数据的指针地址两部分组成。
数组:1)在内存中,数组是一块连续的区域
2)数组需要预留空间,在使用前要先申请占内存的大小
3)插入和删除数据效率低,插入数据时,该位置后面的数据在内存中都要向后移动,删除数据时,该数据后面的数据都要向前移动
4)随机读取效率高,数组是连续的,知道每一个数据的内存地址可直接找到给地址的数据。
5)不利于扩展,数组空间不够时要重新定义数组
链表:1)在内存中可以存放在任何地方,不要求连续
2)每一个数据都保存了下一个数据的内存地址,通过该地址能找到下一个数据
3)增加数据和删除数据效率高
4)查询数据效率低,不具有随机访问性,每次查询都将从链表头部开始遍历
5)不指令大小,扩展方便
HashMap:
基于Map接口实现,元素以键值对的形式存储,并且允许使用null键和null值,key不允许重复,因此只能由一个键为null,不保证元素顺序,并且顺序不能相同,线程不安全。

数据存储结构:数组+链表:采用Entry数组来存储key-value对,每一个键值对组成了一个Entry实体,Entry类实际上是一个单向的链表结构,它具有Next指针,可以连接下一个Entry实体,以此来解决Hash冲突的问题。
数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。元素是按照 hash(key.hashCode())%len 规则存储到数组中,比如 12%16=12,28%16=12,108%16=12,140%16=12(len = 16),所以12、28、108以及140都存储在数组下标为12的位置

JDK1.8中做出改变,当链表长度大于8时,采用数组+链表+红黑树的存储方式:

HashMap vs HahTable:
1) 线程安全:Hashtable是线程安全的,实现方法里面都添加了synchronized关键字来确保线程同步;而HashMap则非线程安全,相对而言性能会高一些在多线程环境下若使用HashMap需要使用Collections.synchronizedMap()方法来获取一个线程安全的集合
2)针对null的不同:HashMap可以使用null作为key(尽量避免),当以null作为key时,总是存储在table数组的第一个节点上;而Hashtable则不允许null作为key
3)继承结构:HashMap是对Map接口的实现,HashTable实现了Map接口和Dictionary抽象类
4)初始容量和扩容:HashMap的初始容量为16,Hashtable初始容量为11,两者的填充因子默认都是0.75;HashMap扩容时是当前容量翻倍即:capacity*2,Hashtable扩容时是当前容量翻倍+1即:capacity*2+1
5)计算hash的方法不同:Hashtable计算hash是直接使用key的hashcode对table数组的长度直接进行取模HashMap计算hash对key的hashcode进行了二次hash,以获得更好的散列值,然后对table数组长度取模

更多模拟面试

全部评论

(2) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐