精华内容
下载资源
问答
  • 二、回顾整理阿里面试题 基本就这样了,还有一些零星的问题想不起来了,答案也整理出来了。 自我介绍 JVM如何加载一个类的过程,双亲委派模型中有哪些方法? HashMap如何实现的? HashMap和ConcurrentHashMap区别...

    二、回顾整理阿里面试题

    基本就这样了,还有一些零星的问题想不起来了,答案也整理出来了。

    阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

    • 自我介绍
    • JVM如何加载一个类的过程,双亲委派模型中有哪些方法?
    • HashMap如何实现的?
    • HashMap和ConcurrentHashMap区别, Concurrent HashMap 线程安全hashtable吗, ConcurrentHashMap如何保证 线程安全?
    • HashMap和HashTable 区别,HashTable线程安全吗?
    • 进程间通信有哪几种方式
    • JVM分为哪些区,每一个区干吗的?
    • JVM如何GC,新生代,老年代大对象,永久代,都储存哪些东西?
    • GC用的引用可达性分析算法中,哪些对象可作为GC Roots对象?
    • 快速排序,过程,复杂度 ?
    • 什么是二叉平衡树,如何插入节点,删除节点,说出关键步骤。
    • TCP如何保证可靠传输?三次握手过程
    • TCP 和 UDP 的区别
    • 滑动窗口算法?
    • Linux下你常用的命令有哪些?
    • 操作系统什么情况下会死锁?
    • 常用的hash算法有哪些?
    • 什么是一致性哈希?
    • 如何理解分布式锁?
    • 数据库中的范式有哪些?
    • 数据库中的索引的结构?什么情况下适合建索引?
    • Java中的NIO,BIO,AIO分别是什么?
    • 用什么工具调试程序?JConsole,用过吗?
    • 现在有一个进程挂起了,如何用工具查出原因?
    • 线程同步与阻塞的关系?同步一定阻塞吗?阻塞一定同步吗?
    • 同步和异步有什么区别?
    • 线程池用过吗?
    • 如何创建单例模式?说了双重检查,他说不是线程安全的。如何高效的创建的一个高效的单例?
    • concurrent包下面,都用过什么?
    • 常用的数据库有哪些?redis用过吗?
    • 了解hadoop吗?说说hadoop的组件有哪些?hdfs,hive,hbase,zookeeper。说下mapreduce编程模型。
    • 你知道的开源协议有哪些?
    • 你知道的开源软件有哪些?
    • 你最近在看的书有哪些?
    • 你有什么问题要问我吗?

    啃完这份超全的面试宝典,终获蚂蚁金服offer!

    自从进入阿里工作后,我才感觉到了自己从事这份职业所在的意义,我也庆幸自己没有在受挫的时候放弃这个职业。

    宝典大概分为这几块:

    • Java基础
    • 数据库
    • Java 虚拟机
    • JSP&Servlet
    • spring&Hibernate
    • 操作系统
    • Linux
    • 计算机网络
    • 算法

    Java基础

    1、面对对象和面向过程的区别?用面向过程可以实现面向对象吗?那是不是不能面向对象?

    2、static和final的区别和用途

    3、HashMap和Concurrent HashMap区别,Concurrent HashMap线程安全吗,Concurrent HashMap如何保证线程安全?

    4、因为别人知道源码怎实现的,故意构造相同的hash的字符串进行攻击,怎么处理,那jdk7怎么办?

    5、Java序列化,如何实现序列化和反序列化,常见的序列化协议有哪些

    6、Java实现多线程的方式及三种方式的区别

    7、线程安全

    8、多线程如何进行信息交互

    9、Java是否有内存泄露和内存溢出

    阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

    数据库

    1、常见的数据库类型有哪些?redis用过吗

    2、数据库中的范式有哪些?

    3、数据库中的索引的结构?什么情况下适合建索引?

    4、脏读、不可重复读和幻读

    6、MyISA和InnDB引擎的区别

    7、数据库ACID

    8、事务隔离级别

    9、数据库中的分页查询语句怎么写?

    阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

    Java虚拟机

    1、JVM垃圾处理方法(标记清除、复制、标记整理)

    2、JVM如何GC,新生代,老年代,持久代,都储存哪些东西,以及各个区的作用?

    3、GC用的引用可达性分析算法中,哪些对象可作为GC Roots对象?

    4、什么时候进行MinGC,FulilGc

    5、各个垃圾收集器是怎么工作的

    6、Java虚拟机内存的划分,每个区域的功能

    7、用什么工具可以查出内存泄露

    8、JVM如何加载一个类的过程,双亲委派模型中有哪些方法有没有可能父类加载器,加载同一个类?如果加载同一个类,该使用哪一个类?

    9、Java是如何进行对象实例化的

    阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

    JSP&Servlet

    1、Servlet的生命周期

    2、Jsp和Servlet的区别

    3、保存会话状态,有哪些方式、区别如何

    4、cookie和session的区别

    阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

    spring&Hibernate

    1、spring ioc、AOP的理解以及实现的原理

    2、IOC容器的加载过程

    3、动态代理与cglib实现的区别

    4、代理的实现原理

    5、Hlbernate一级缓存与二级缓存之间的区别

    6、spring mvc的原理

    7、简述Hibernate常见优化策略

    阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

    操作系统

    1、操作系统下生命情况会死锁?

    2、如何理解分布式锁

    3、进程间通信有哪几种方式?

    4、线程同步与阻塞的关系?同步一定要阻塞吗?阻塞一定要同步吗?

    5、操作系统如何进行分页调度?

    阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

    Linux

    1、linux下如何进行进程调度的?

    2、linux下你常用的命令有哪些?

    计算机网络

    1、Http和https的区别

    2、TCP如何保证可靠传输?三次握手过程?

    3、为什么TCP连接需要三次握手,两次不可以吗,为什么

    4、如果客户端不断的发生请求连接会怎么样?

    5、GET和POST的区别?

    6、TCP和UDP区别?如何改进TCP

    7、从输入网址到获得页面的过程

    阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

    算法

    1、如何判断一个单链表是否有环?

    2、快速排序,过程,复杂度?什么情况下适用,什么情况下不适用?

    3、什么是二叉平衡树,如何插入节点,删除节点

    5、二分搜索的过程

    6、归并排序的过程?时间复杂度?空间复杂度?

    7、给你一万个数,如何找出里面所有重复的数?用所有你能想到的办法,时间复杂度和空间复杂度分别是多少?

    8、给你一个数组,如何里面找到和为k的两个数

    9、100000个数找出最小或最大的10个?

    image.png

    阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

    三、难道这样就够了吗?不,远远不够!

    提前多熟悉阿里往年的面试题肯定是对面试有很大的帮助的,但是作为技术性职业,手里有实打实的技术才是你面对面试官最有用的利器,这是从内在散发出来的自信。

    备战阿里时我花的最多的时间就是在学习技术上,占了我所有学习计划中的百分之70,这是一些我学习期间觉得还是很不错的一些学习笔记,以及学习视频都是可以分享给大家的!

    阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

    阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

    image.png

    最后总结

    搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析,以及算法刷题LeetCode中文版的小伙伴们可以点赞后点击这里即可免费获取!

    最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化

    image

    面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析,以及算法刷题LeetCode中文版的小伙伴们可以点赞后点击这里即可免费获取!

    最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化

    [外链图片转存中…(img-sUuFMuDs-1624867233986)]

    展开全文
  • 最新中级Java面试题及答案

    千次阅读 2021-02-12 10:10:02
    1.Java的HashMap是如何工作的?HashMap是一个针对数据结构的键值,每个键都会有相应的值,关键是识别这样的值。HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时...

    362a625ecba39941649fdbd1a8106f93.png

    1.Java的HashMap是如何工作的?

    HashMap是一个针对数据结构的键值,每个键都会有相应的值,关键是识别这样的值。

    HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用LinkedList来解决碰撞问题,当发生碰撞了,对象将会储存在LinkedList的下一个节点中。HashMap在每个LinkedList节点中储存键值对对象。

    2.什么是快速失败的故障安全迭代器?

    快速失败的Java迭代器可能会引发ConcurrentModifcationException在底层集合迭代过程中被修改。故障安全作为发生在实例中的一个副本迭代是不会抛出任何异常的。快速失败的故障安全范例定义了当遭遇故障时系统是如何反应的。例如,用于失败的快速迭代器ArrayList和用于故障安全的迭代器ConcurrentHashMap。

    3.JavaBlockingQueue是什么?

    JavaBlockingQueue是一个并发集合util包的一部分。BlockingQueue队列是一种支持操作,它等待元素变得可用时来检索,同样等待空间可用时来存储元素。

    4.什么时候使用ConcurrentHashMap?

    在问题2中我们看到ConcurrentHashMap被作为故障安全迭代器的一个实例,它允许完整的并发检索和更新。当有大量的并发更新时,ConcurrentHashMap此时可以被使用。这非常类似于Hashtable,但ConcurrentHashMap不锁定整个表来提供并发,所以从这点上ConcurrentHashMap的性能似乎更好一些。所以当有大量更新时ConcurrentHashMap应该被使用。

    5.哪一个List实现了最快插入?

    LinkedList和ArrayList是另个不同变量列表的实现。ArrayList的优势在于动态的增长数组,非常适合初始时总长度未知的情况下使用。LinkedList的优势在于在中间位置插入和删除操作,速度是最快的。

    LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。

    ArrayList实现了可变大小的数组。它允许所有元素,包括null。每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。

    6.Iterator和ListIterator的区别

    ListIterator有add()方法,可以向List中添加对象,而Iterator不能。

    ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。

    ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。

    都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。

    7.什么是CopyOnWriteArrayList,它与ArrayList有何不同?

    CopyOnWriteArrayList是ArrayList的一个线程安全的变体,其中所有可变操作(add、set等等)都是通过对底层数组进行一次新的复制来实现的。相比较于ArrayList它的写操作要慢一些,因为它需要实例的快照。

    CopyOnWriteArrayList中写操作需要大面积复制数组,所以性能肯定很差,但是读操作因为操作的对象和写操作不是同一个对象,读之间也不需要加锁,读和写之间的同步处理只是在写完后通过一个简单的”=”将引用指向新的数组对象上来,这个几乎不需要时间,这样读操作就很快很安全,适合在多线程里使用,绝对不会发生ConcurrentModificationException,因此CopyOnWriteArrayList适合使用在读操作远远大于写操作的场景里,比如缓存。

    8.迭代器和枚举之间的区别

    如果面试官问这个问题,那么他的意图一定是让你区分Iterator不同于Enumeration的两个方面:

    Iterator允许移除从底层集合的元素。

    Iterator的方法名是标准化的。

    9.Hashmap如何同步?

    当我们需要一个同步的HashMap时,有两种选择:

    使用Collections.synchronizedMap(..)来同步HashMap。

    使用ConcurrentHashMap的

    这两个选项之间的首选是使用ConcurrentHashMap,这是因为我们不需要锁定整个对象,以及通过ConcurrentHashMap分区地图来获得锁。

    10.IdentityHashMap和HashMap的区别

    IdentityHashMap是Map接口的实现。不同于HashMap的,这里采用参考平等。

    在HashMap中如果两个元素是相等的,则key1.equals(key2)

    在IdentityHashMap中如果两个元素是相等的,则key1==key2

    展开全文
  • Java 基础部分1. JDK 和 JRE 有什么区别?JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所...

    Java 基础部分

    1. JDK 和 JRE 有什么区别?

    JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。

    JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。

    具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。简单来说:如果你需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK。

    2. == 和 equals 的区别是什么?

    == 解读

    对于基本类型和引用类型 == 的作用效果是不同的,如下所示:

    基本类型:比较的是值是否相同;

    引用类型:比较的是引用是否相同;

    代码示例:

    1 String x = "string";2 String y = "string";3 String z = new String("string");4 System.out.println(x==y); //true

    5 System.out.println(x==z); //false

    6 System.out.println(x.equals(y)); //true

    7 System.out.println(x.equals(z)); //true

    代码解读:因为 x 和 y 指向的是同一个引用,所以 == 也是 true,而 new String()方法则重写开辟了内存空间,所以 == 结果为 false,而 equals 比较的一直是值,所以结果都为 true。

    equals 解读

    equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。看下面的代码就明白了。

    首先来看默认情况下 equals 比较一个有相同值的对象,代码如下:

    1 classCat {2 publicCat(String name) {3 this.name =name;4 }5

    6 privateString name;7

    8 publicString getName() {9 returnname;10 }11

    12 public voidsetName(String name) {13 this.name =name;14 }15 }16

    17 Cat c1 = new Cat("王磊");18 Cat c2 = new Cat("王磊");19 System.out.println(c1.equals(c2)); //false

    输出结果出乎我们的意料,竟然是 false?这是怎么回事,看了 equals 源码就知道了,源码如下:

    1 public booleanequals(Object obj) {2 return (this ==obj);3 }

    原来 equals 本质上就是 ==。

    那问题来了,两个相同值的 String 对象,为什么返回的是 true?代码如下:

    1 String s1 = new String("老王");2 String s2 = new String("老王");3 System.out.println(s1.equals(s2)); //true

    同样的,当我们进入 String 的 equals 方法,找到了答案,代码如下:

    1 public booleanequals(Object anObject) {2 if (this ==anObject) {3 return true;4 }5 if (anObject instanceofString) {6 String anotherString =(String)anObject;7 int n =value.length;8 if (n ==anotherString.value.length) {9 char v1[] =value;10 char v2[] =anotherString.value;11 int i = 0;12 while (n-- != 0) {13 if (v1[i] !=v2[i])14 return false;15 i++;16 }17 return true;18 }19 }20 return false;21 }

    原来是 String 重写了 Object 的 equals 方法,把引用比较改成了值比较。

    总结 :== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。

    3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

    不对,两个对象的 hashCode()相同,equals()不一定 true。

    代码示例:

    1 String str1 = "通话";2 String str2 = "重地";3 System.out.println(String.format("str1:%d | str2:%d", str1.hashCode(),str2.hashCode()));4 System.out.println(str1.equals(str2));

    执行的结果:

    str1:1179395 | str2:1179395

    false

    代码解读:很显然“通话”和“重地”的 hashCode() 相同,然而 equals() 则为 false,因为在散列表中,hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。

    4. final 在 java 中有什么作用?

    final 修饰的类叫最终类,该类不能被继承。

    final 修饰的方法不能被重写。

    final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。

    5. java 中的 Math.round(-1.5) 等于多少?

    等于 -1,因为在数轴上取值时,中间值(0.5)向右取整,所以正 0.5 是往上取整,负 0.5 是直接舍弃。

    6. String 属于基础的数据类型吗?

    String 不属于基础类型,基础类型有 8 种:byte、boolean、char、short、int、float、long、double,而 String 属于对象。

    7. java 中操作字符串都有哪些类?它们之间有什么区别?

    操作字符串的类有:String、StringBuffer、StringBuilder。

    String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象,而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。

    StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。

    8. String str="i"与 String str=new String("i")一样吗?

    不一样,因为内存的分配方式不一样。String str="i"的方式,java 虚拟机会将其分配到常量池中;而 String str=new String("i") 则会被分到堆内存中。

    9. 如何将字符串反转?

    使用 StringBuilder 或者 stringBuffer 的 reverse() 方法。

    示例代码:

    1 //StringBuffer reverse

    2 StringBuffer stringBuffer = newStringBuffer();3 stringBuffer.append("abcdefg");4 System.out.println(stringBuffer.reverse()); //gfedcba5 //StringBuilder reverse

    6 StringBuilder stringBuilder = newStringBuilder();7 stringBuilder.append("abcdefg");8 System.out.println(stringBuilder.reverse()); //gfedcba

    10. String 类的常用方法都有那些?

    indexOf():返回指定字符的索引。

    charAt():返回指定索引处的字符。

    replace():字符串替换。

    trim():去除字符串两端空白。

    split():分割字符串,返回一个分割后的字符串数组。

    getBytes():返回字符串的 byte 类型数组。

    length():返回字符串长度。

    toLowerCase():将字符串转成小写字母。

    toUpperCase():将字符串转成大写字符。

    substring():截取字符串。

    equals():字符串比较。

    11. 抽象类必须要有抽象方法吗?

    不需要,抽象类不一定非要有抽象方法。

    示例代码:

    1 abstract classCat {2 public static voidsayHi() {3 System.out.println("hi~");4 }5 }

    上面代码,抽象类并没有抽象方法但完全可以正常运行。

    12. 普通类和抽象类有哪些区别?

    普通类不能包含抽象方法,抽象类可以包含抽象方法。

    抽象类不能直接实例化,普通类可以直接实例化。

    13. 抽象类能使用 final 修饰吗?

    不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类,如下图所示,编辑器也会提示错误信息:

    dba3fcb768fef9dae9e3aef0486d04ee.png

    14. 接口和抽象类有什么区别?

    实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。

    构造函数:抽象类可以有构造函数;接口不能有。

    main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。

    实现数量:类可以实现很多个接口;但是只能继承一个抽象类。

    访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。

    15. java 中 IO 流分为几种?

    按功能来分:输入流(input)、输出流(output)。

    按类型来分:字节流和字符流。

    字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。

    16. BIO、NIO、AIO 有什么区别?

    BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。

    NIO:New IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。

    AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。

    17. Files的常用方法都有哪些?

    Files.exists():检测文件路径是否存在。

    Files.createFile():创建文件。

    Files.createDirectory():创建文件夹。

    Files.delete():删除一个文件或目录。

    Files.copy():复制文件。

    Files.move():移动文件。

    Files.size():查看文件个数。

    Files.read():读取文件。

    Files.write():写入文件。

    展开全文
  • 执行的结果: str1:1179395 | str2:1179395 false 代码解读:很显然“通话”和“重地”的 hashCode() 相同,然而 equals 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》 【docs...

    1 public boolean equals(Object obj) {

    2 return (this == obj);

    3 }

    原来 equals 本质上就是 ==。

    那问题来了,两个相同值的 String 对象,为什么返回的是 true?代码如下:

    1 String s1 = new String(“老王”);

    2 String s2 = new String(“老王”);

    3 System.out.println(s1.equals(s2)); // true

    同样的,当我们进入 String 的 equals 方法,找到了答案,代码如下:

    1 public boolean equals(Object anObject) {

    2 if (this == anObject) {

    3 return true;

    4 }

    5 if (anObject instanceof String) {

    6 String anotherString = (String)anObject;

    7 int n = value.length;

    8 if (n == anotherString.value.length) {

    9 char v1[] = value;

    10 char v2[] = anotherString.value;

    11 int i = 0;

    12 while (n-- != 0) {

    13 if (v1[i] != v2[i])

    14 return false;

    15 i++;

    16 }

    17 return true;

    18 }

    19 }

    20 return false;

    21 }

    原来是 String 重写了 Object 的 equals 方法,把引用比较改成了值比较。

    总结 :== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。

    3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

    不对,两个对象的 hashCode()相同,equals()不一定 true。

    代码示例:

    1 String str1 = “通话”;

    2 String str2 = “重地”;

    3 System.out.println(String.format(“str1:%d | str2:%d”, str1.hashCode(),str2.hashCode()));

    4 System.out.println(str1.equals(str2));

    执行的结果:

    str1:1179395 | str2:1179395

    false

    代码解读:很显然“通话”和“重地”的 hashCode() 相同,然而 equals

    《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

    【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

    () 则为 false,因为在散列表中,hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。

    4. final 在 java 中有什么作用?

    • final 修饰的类叫最终类,该类不能被继承。

    • final 修饰的方法不能被重写。

    • final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。

    5. java 中的 Math.round(-1.5) 等于多少?

    等于 -1,因为在数轴上取值时,中间值(0.5)向右取整,所以正 0.5 是往上取整,负 0.5 是直接舍弃。

    6. String 属于基础的数据类型吗?

    String 不属于基础类型,基础类型有 8 种:byte、boolean、char、short、int、float、long、double,而 String 属于对象。

    7. java 中操作字符串都有哪些类?它们之间有什么区别?

    操作字符串的类有:String、StringBuffer、StringBuilder。

    String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象,而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。

    StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。

    8. String str="i"与 String str=new String(“i”)一样吗?

    不一样,因为内存的分配方式不一样。String str="i"的方式,java 虚拟机会将其分配到常量池中;而 String str=new String(“i”) 则会被分到堆内存中。

    9. 如何将字符串反转?

    使用 StringBuilder 或者 stringBuffer 的 reverse() 方法。

    示例代码:

    1 // StringBuffer reverse

    2 StringBuffer stringBuffer = new StringBuffer();

    3 stringBuffer.append(“abcdefg”);

    4 System.out.println(stringBuffer.reverse()); // gfedcba

    5 // StringBuilder reverse

    6 StringBuilder stringBuilder = new StringBuilder();

    7 stringBuilder.append(“abcdefg”);

    8 System.out.println(stringBuilder.reverse()); // gfedcba

    10. String 类的常用方法都有那些?

    • indexOf():返回指定字符的索引。

    • charAt():返回指定索引处的字符。

    • replace():字符串替换。

    • trim():去除字符串两端空白。

    • split():分割字符串,返回一个分割后的字符串数组。

    • getBytes():返回字符串的 byte 类型数组。

    • length():返回字符串长度。

    • toLowerCase():将字符串转成小写字母。

    • toUpperCase():将字符串转成大写字符。

    • substring():截取字符串。

    • equals():字符串比较。

    11. 抽象类必须要有抽象方法吗?

    不需要,抽象类不一定非要有抽象方法。

    示例代码:

    1 abstract class Cat {

    2 public static void sayHi() {

    3 System.out.println(“hi~”);

    4 }

    5 }

    上面代码,抽象类并没有抽象方法但完全可以正常运行。

    12. 普通类和抽象类有哪些区别?

    • 普通类不能包含抽象方法,抽象类可以包含抽象方法。

    • 抽象类不能直接实例化,普通类可以直接实例化。

    13. 抽象类能使用 final 修饰吗?

    不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类,如下图所示,编辑器也会提示错误信息:

    14. 接口和抽象类有什么区别?

    • 实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。

    • 构造函数:抽象类可以有构造函数;接口不能有。

    展开全文
  • 另外呢,还有面试题和技术文档提供给大家作为辅助型材料,供大家学习,希望大家能够好好珍惜哈~~~~~~** 面试准备+复习资料分享: 为了应付面试也刷了很多的面试题与资料,现在就分享给有需要的读者朋友,资料我只...
  • 亚信科技集团是在美国纳斯达克成功上市的第一家中国高科技企业,亚信科技java的职位面试自然少不了要回答面试题,以下是小编为大家收集到的亚信科技java面试题,希望对大家有帮助!亚信科技java面试题篇1(共30分)1、...
  • 前段时间,我向一位在阿里的朋友寻求进大厂的秘诀,他分享给我一份阿里内部资料——JAVA核心进阶手册,仔细翻阅一番才知道里面收纳整理的知识可真是齐全,不得不来感叹一番… 我将JAVA核心进阶手册大致分为以下5篇...
  • 前两天一个读者和我说,他坚持刷算法2个月,薪资翻番去了他梦寐以求的大厂,期间面字节跳动还遇到了原…其实据我所知目前国内的大厂和一些独角兽,已经越来越效仿硅谷公司的做法,通过编程定题面试,来考察数据...
  • Java面试题及答案

    2021-02-28 08:58:47
    (Java2EnterpriseEdition,中文为Java2企业版本,由多种技术组成,主要的两大技术为Servlet技术和EJB技术,J2EE程序需要在J2EE容器内运行)2.介绍JAVA中的CollectionFrameWork(Java的CollectionFrameWork包括两大接口...
  • 发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 博主已将以下这些面试题整理成了一个Java面试手册,是PDF版的。 一、Java 基础 JDK 和 JRE 有什么...
  • Java的基本数据类型都有固定的数据位,不随运行平台的变化而变化。基本数据类型包括byte、int、char、long、float、double、boolean和short。引用类型都是用类或对象实现的,引用数据类型包括:类,数组,接口。基本...
  • 史上最全Java初中级面试题,发现网上很多Java初级面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本人发现网上虽然有不少Java相关的面试题,但第一未必全,第二未必有...
  • 1.Java如何实现多态,实现的主要方法。java是借助方法的重写和重载实现多态。重载的特性,方法名相同.返回类型,传入方法的参数不同(包括个数和类型).重写的特性,方法名相同,返回类型,参数均相同,必须发生在子类.2....
  •     欢迎大家搜索“小猴子的技术笔记”关注我的公众号,后台回复“面试题PDF”领取而更多面试题答案 什么是线程局部变量? 线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java...
  • 华为 Java 笔试题+数据库题 123 一、 单项选择题 1.Java 是从(B )语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC 答案:B 2.下列语句哪一个正确(B ) A. Java 程序经编译后会产生 machine code B...
  • Java中级面试题及答案【最新版及答案,干货!...如果不背 Java面试题答案,肯定面试会挂! 这套Java面试题大全,希望对大家有帮助哈~ 博主已将以下这些面试题整理成了一个Java面试手册,是PDF版的
  • 2021刚开始,很多朋友问题,有没有一些Java基础面试题及答案面试题,最近抽时间整理了一份Java面试题。或许这份面试题还不足以囊括所有 Java 问题,但有了它,我相信足以应对目前市面上绝大部分的 最新Java 面试了,...
  • 2017年Java笔试题及答案Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。下面是小编整理的关于Java笔试题及答案,欢迎参考!Java基础知识笔试题及答案1.Java中提供了名为()的包装类来包装原始字符串类型...
  • 100道最新Java面试题,常见面试题及答案汇总

    万次阅读 多人点赞 2021-01-28 15:32:15
    小编特意整理了100道Java面试题,送给大家,希望大家都能顺利通过面试,拿下高薪。赶紧码住吧~~ Q1:Java内部类和子类之间有什么区别? 答案:内部类是指在一个外部类的内部再定义一个类,内部类对外部类有访问权限...
  • 其次面试官会针对你曾经做过的项目来做具体技术的交流,你对项目细节是不是掌握到位,以及java技术基础和原理掌握程序,比如并发编程以及数据库和JVM三个方面,也会交流到分布式、线程池的实现等等(重点考察有没有...
  • 为大家整理了2021最新的Java面试题及答案下载,这套Java面试题总汇已经汇总了Java基础面试到高级Java面试题,几乎涵盖了作为一个Java程序员在面试中需要掌握或者可能被问到的绝大部分知识点。 额外还为大家整理了一...
  • java最新面试题及答案20201. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?一个“.java”源文件里面可以包含多个类,但是只允许有一java最新面试题及答案个public类,并且类名必须和文件名一致...
  • 2020java最新面试题及答案

    千次阅读 2021-03-18 10:55:53
    本文收集了一些经典的Java面试题及其答案答:面向对象的特征主要有以下几个方面:抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注...
  • redis的介绍应用场景参考 redis介绍 2、项目构建 我们还是从redis项目构建开始说起,首先还是进入的spring官网, 从这里开始构建项目,如下图 当然也可以自己添加pom文件,如下 3、添加配置文件 application....
  • 一道面试题 让我们开门见山,直面主题:Dubbo 服务里面有个服务端,还有个消费端你知道吧? 服务端和消费端都各有一个线程池你知道吧? 那么面试题来了:一般情况下,服务提供者比服务消费者多吧。一个服务消费方...
  • Java 最常见的 208 道面试题》的答案已经全部更新完了,有些答案是团长自己总结的,也有些答案是在网上搜集整理的。这些答案难免会存在一些错误,仅供大家参考。如果发现错误还望大家多多包涵,不吝赐教,谢谢~ ...
  • 有些Java面试题答案是我自己总结的,也有些Java面试题及答案是在网上搜集整理的。这些高级Java面试题及答案难免会存在一些错误,这些面试题答案难免会存在一些错误,仅供大家参考。如果发现错误还望大家多多包涵,...
  • 提前多熟悉阿里往年的面试题肯定是对面试有很大的帮助的,但是作为技术性职业,手里有实打实的技术才是你面对面试官最有用的利器,这是从内在散发出来的自信。 备战阿里时我花的最多的时间就是在学习技术上,占了我...
  • 最后 我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望...
  • 如何获取整理好的Java面试专题资料? 资料获取方式:点击这里免费下载 面试答案 载](https://gitee.com/vip204888/java-p7)** 面试答案 [外链图片转存中…(img-Z85FrA0k-1625750668551)] [外链图片转存中…(img-bP2...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 102,977
精华内容 41,190
关键字:

java面试题及答案

java 订阅