Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

实现一个简单的HashMap

朋友面试,遇到了一个问题,在没有提供HashMap API的情况下,怎么实现一个HashMap

这个问题,考察的无非是对HashMap的理解,考察的HashMap的底层结构

话不多说直接上图

Java

双向链表

双向链表也叫双向表,是链表的一种,它由多个结点组成,每个结点都由一个数据域和两个指针域组成,数据域用 来存储数据,其中一个指针域用来指向其后继结点,另一个指针域用来指向前驱结点。链表的头结点的数据域不存 储数据,指向前驱结点的指针域值为null,指向后继结点的指针域指向第一个真正存储数据的结点。

单向链表

单向链表是链表的一种,它由多个结点组成,每个结点都由一个数据域和一个指针域组成,数据域用来存储数据,指针域用来指向其后继结点。链表的头结点的数据域不存储,指针域指向第一个存储数据的结点。

java全局异常处理

在项目中,我们需要对各种异常进行处理,但是我们又不知道什么时候发生异常,而对每个方法进行捕获这个也不太现实这个时候就需要我们对项目中的异常进项全局的处理,下面是在我一个小型博客项目中对全局异常的处理。

自动类型转换遵循下面的规则

1、若参与运算的数据类型不同,则先转换成同一类型,然后进行运算

Java

方法重写(两同两小一大)

参数列表必须完全与被重写方法的相同。(同)

方法名相同(同)

返回类型小于或者等于重写方法的返回类型。(小)

Java

java的类加载机制

当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM或通过加载、链接、初始化3个步骤来对该类进行初始化。如果没有意外,JVM将会连续完成3个步骤,所以有时也把这3个步骤统称为类加载或类初始化。

Java

Java中多种锁的实现详解

1、synchronized和Lock

java中有两种锁的加锁方式:一种是用于synchronized关键字,另一种是用Lock接口实现类

形象地说,synchronized关键字是自动挡,可以满足一切日常驾驶需求。但是如果你想要玩其他的骚操作,就需要手动挡—各种Lock实现类

所以如果你只是想要简单的加个锁,对性能也没有什么特别的要求,用synchronized关键字就足够了。自从Java 5 之后,才在java.util.concurrent.locks包下有了另一种方式来实现锁那就是Lock。也就是说,synchronized是Java语言内置的关键字,而Lock是一个接口,这个接口的实现类在代码层面实现了锁的功能,具体实现有兴趣可以自己研究一下哦。

Java

1、线程和进程

进程:程序的集合。一个进程往往可以包含多个线程,至少包含一个

java默认有两个线程:一个main线程,一个gc线程

线程:线程是cpu调度和执行的单位,对于java而言:Thread、Runnable、Callable

Java

IP

ip地址:InetAddress(java类)

  • 唯一定位一台网络上计算机
  • 127.0.0.1:本机localhost
  • IP地址的分类
    • ipv4、ipv6
      • IPV4 127.0.0.1,4个字节组成。0~255,42亿;30亿在北美。4亿在亚洲。2011年用尽
      • IPV6 128位,8个无符号整数
    • 公网(互联网)-私网(局域网)
      • ABCD类地址
      • 192.168.xx.xx,专门给组织内部使用
Java