精华内容
下载资源
问答
  • Java面试题大全带答案

    万次阅读 多人点赞 2021-02-21 17:21:19
    本人发现网上虽然有不少Java相关的面试题,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题,并站在面试官的立场上,给出我自己的答案。 第一部分、Java...

    本人发现网上虽然有不少Java相关的面试题,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题,并站在面试官的立场上,给出我自己的答案。


    第一部分、Java 基础


    1. JDK 和 JRE 有什么区别?

    • JDK是java的开发工具包,有JDK8,9甚至到14的差别,安装以后,不仅包含了java 的开发环境,比如java.exe,还包含了运行环境(jre)相关包。
    • JRE是java 运行环境,一般装好JDK后,系统里会有对应的JRE环境。


    2. 说下你对== 和 equals 的认识,它们有什么差别?

       对于==

    • 基本类型,比如int等,==比较的是值是否相同;
    • 引用类型,比如自定义对象:比较地址是否相同;
    • 尤其地,对常量,由于常量被放在常量池里管理,所以对String等常量,==也是比较值

      对于equals 方法

    • 对于String,ArrayList等,equals方法是比较值;
    • 但在Object里,equals还是比较地址;
    • 如果自己创建了一个类,但没有重写equals方法,还是会比较地址


    3. 如果两个对象的 hashCode值一样,则它们用equals()比较也是为 true,是不是?

        不是

    • hashCode是定义在HashMap里,用以快速索引;
    • Object里,hashCode和equals是两个不同的方法,默认hashCode是返回对象地址,equals方法也是对比地址;
    • 两者不是一回事,可以通过重写对象的hashCode方法,让不同值的对象有相同的hashCode,但它们的equals方法未必相同


    4. 综合说下final的作用

    • 修饰在类上,该类不能被继承。
    • 修饰在方法上,该方法不能被重写。
    • 修饰在变量上,叫常量,该常量必须初始化,初始化之后值就不能被修改,而常量一般全都是用大写来命名。


    5. Math.round(-2.5) 等于多少?

    结果是-2,因为该函数在数轴上,表现是向右取整,由此 Math.round(1.3) = 2。


    6. String 是基本数据类型吗?

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

        但说到这里,你要多说句。

    • String s  = "abc";,这是常量,放常量池管理。
    • 不建议频繁对String修改,因为会产生内存碎片。


    7. 对字符串的都有哪些方法?详细说明下。

        具体有String、StringBuffer和StringBuilder这三个类。

    • String是不可变类,每次操作都会生成新的String对象,并将结果指针指向新的对象,由此会产生内存碎片。
    • 如果要频繁对字符串修改,建议采用StringBuffer 和 StringBuilder。
    • StringBuffer 和 StringBuilder的差别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,由于无需维护线程安全的操作,所以StringBuilder 的性能要高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。由于大多数环境下是单线程,所以大多是用 StringBuilder。


    8. String str="abc"与 String str=new String("abc")的定义方法一样吗?

        不一样,String str="abc"的方式,java 虚拟机会将其分配到常量池中;所以建议这种写法。

        而 String str=new String("abc") 则会被分到堆内存中,如果再频繁修改,会导致内存碎片。


    9. 如何将字符串反转?

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


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

    • indexOf():返回指定字符的索引。
    • length():返回字符串长度。
    • equals():字符串比较。
    • replace():字符串替换。
    • trim():去除字符串两端空白。
    • split():分割字符串,返回一个分割后的字符串数组。
    • toLowerCase():将字符串转成小写字母。
    • toUpperCase():将字符串转成大写字符。
    • substring():截取字符串。

        你面试时,说出其中的一两个即可,但需要说明如下的意思。

    • String s  = "abc";,这是常量,放常量池管理。
    • 不建议频繁对String修改,因为会产生内存碎片。
    • 如果要频繁对字符串修改,建议采用StringBuffer 和 StringBuilder


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

        不需要的,抽象类不一定非要有抽象方法。但从面向对象思想角度来分析,不建议这样做。

        因为在设计的时候,会把逻辑上存在但实际不存在的类设置成抽象类,比如动物类,毕竟不能直接展示“动物”。

        正因为不存在,所以里面的方法未必能实现,比如“奔跑”方法,所以此类方法需要设置成没方法体的抽象方法。

        如果在抽象类里方法,全都有方法体,那么要么是抽象类设计不当,或者实现了未必能实现的方法,所以建议修改。    


    12. 一般的类和抽象类有哪些区别?

    • 一般的类不能包含没有方法体的抽象方法,而抽象类可以包含抽象方法。
    • 抽象类不能直接用new来实例化,普通类可以直接实例化。


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

        首先说明,语法上不能,然后再进一步从面向对象思想角度来说明。

        定义抽象类的本意是,让其它类继承的,从而进一步完善对象。如果定义为 final 该类就不能被继承,这样就会有矛盾,所以 final 不能修饰抽象类。


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

    • 抽象类的子类要用 extends 来继承;而实现接口要用 implements 。
    • 抽象类可以定义构造函数,而接口不能。
    • 抽象类里可以定义 main 方法,但接口不能有 main 方法。
    • 实现数量:类可以实现很多个接口;但是只能继承一个抽象类。
    • 访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。

        上述是从语法上来归纳,然后建议大家再从面向对象思想的角度来说明

    • 抽象类是对逻辑的归纳,比如动物类可以是抽象类,人类可以extends动物这个抽象类。
    • 而接口是对功能的归纳,比如可以定义一个“提供数据库访问功能”的 接口,在其中封装若干操作数据库的方法。


    15. java 中 IO 流分为几种?

        按功能来分可以分输入流(input)和输出流(output)。从类型来分可以是字节流和字符流。


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

    • BIO的英语全称是Block IO, 同步阻塞式 IO,就是平常经常使用的传统 IO,特点是简单方便,但并发处理能力低。
    • NIO,叫New IO, 同步非阻塞 IO,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
    • AIO,Asynchronous IO, 是 NIO 的升级,实现了异步非堵塞 IO ,它是基于事件和回调机制。


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

    • Files.exists():检测路径是否存在。
    • Files.createFile():创建文件。
    • Files.createDirectory():创建文件夹。
    • Files.delete():删除文件或文件夹。
    • Files.copy():复制文件。
    • Files.move():移动文件,即复制后删除。
    • Files.size():查看文件的个数。
    • Files.read():读取文件。
    • Files.write():写入文件。


    第二部分,Java的集合,也叫容器


    18. java 的集合容器都有哪些?

    如下给出了大致的结构  

    • 所有线性表对象的父类是Collection
    • 有线性表类,比如ArrayList和Set等。
    • 有键值对类,比如HashMap。


    19. Collection 和 Collections 有什么区别?

    • Collection 是一个集合接口,是所有线性表对象的父类。
    • Collections是集合类的一个工具类,包含了对集合元素进行排序和线程安全等各种操作方法。


    20. List、Set、Map 之间的区别是什么?


    21. HashMap 和 Hashtable 有什么区别?

        首先说,两者都是键值类的对象

    • HashTable线程安全的,而HashMap线程不安全的,大多数的场景是单线程环境,在单线程环境下,HashMap效率上比hashTable要高。
    • HashMap允许空键值,而hashTable不允许。


    22. 如何决定使用 HashMap 还是 TreeMap?

    对于在Map中进行插入、删除和定位元素这类操作,可以选HashMap。但如果你要对一个有序的key集合进行遍历,需要选TreeMap。


    23. 说一下 HashMap 的实现原理?

    HashMap是基于数据结构里的散列表,在大数据情况下,能保证get的高效性。

     HashMap不保证映射的顺序,特别是它不保证该顺序恒久不变。 

    HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。

    当向Hashmap对象里put元素时,会根据key的hashcode计算hash值,根据hash值得到这个元素在数组中的位置,如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放入链尾.如果数组中该位置没有元素,就直接将该元素放到数组的该位置上。

    注意Jdk 1.8中对HashMap的实现做了优化,当链表中的节点数据超过八个之后,该链表会转为红黑树来提高查询效率,从原来的O(n)到O(logn)


    24. 说一下 HashSet 的实现原理?

    • HashSet在底层上,是由HashMap实现的
    • HashSet的值放在HashMap的key上
    • HashMap的value统一为PRESENT


    25. ArrayList 和 LinkedList 的区别是什么?

    ArrrayList底层实现的数据结构是数组,支持随机访问,而 LinkedList 的底层数据结构是双向循环链表,不支持随机访问。

    使用下标访问一个元素,ArrayList 的时间复杂度是 O(1),而 LinkedList 是 O(n)。


    26. 如何做到数组和 List之间的转换?

    • List对象转换成为数组:可以调用ArrayList(或其它List)的toArray方法。
    • 数组转换成为List:调用Arrays的asList方法。


    27. ArrayList 和 Vector 的区别是什么?(面试大概率会问)

    • Vector是线程安全的,而ArrayList不是。所以在单线程情况下,建议使用ArrayList 
    • 在扩容时,Vector是扩容100%,但ArrayList是50%,后者更节省内存 

        结论:大多数开发场景是单线程环境,所以建议使用ArrayList


    28. Array 和 ArrayList 有何区别?

    • Array能容纳基本数据类型和自定义对象,而ArrayList只能容纳自定义的对象,对于基本数据类型,需要转换成封装类才能存储。 
    • Array是指定大小的,要手动扩容,而ArrayList大小虽然可以在定义时指定,但遇到容量满时会自动扩容。 
    • Array没有提供ArrayList那么多功能,比如addAll、removeAll和iterator等。

        所以建议使用ArrayList


    29. 在 Queue 中 poll()和 remove()有什么区别?

    poll() 和 remove() 都是从队列中取出一个元素,但是 poll() 在获取元素失败的时候会返回空,但是 remove() 失败的时候会抛出异常。


    30. 哪些集合类是线程安全的?

    • Vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。
    • Statck:堆栈类,先进后出,项目中用得并不多。
    • Hashtable:就比hashmap多了个线程安全,所以建议使用HashMap。
    • enumeration:枚举,所以现在建议用Iterator来迭代。

        结论是,如果在单线程情况下,不建议使用这些线程安全对象。


    31. 迭代器 Iterator 是什么?

        迭代器是一种设计模式,也是一个对象,可以用来遍历并选择序列(比如ArrayList或HashMap)中的对象,而开发人员不需要了解该序列的底层结构。

        迭代器通常被称为“轻量级”对象,因为创建它的代价小。


    32. Iterator 怎么用?有什么特点?

    Iterator比较好用,而且只能单向移动:

    (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。比如list.iterator()

    (2) 用next()得到序列中的下一个元素。

    (3) 使用hasNext()检查是否还有其它元素。

    (4) 使用remove()将迭代器新返回的元素删除。但不建议一遍迭代一边删除,有可能引发并发问题。

    Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。


    33. Iterator 和 ListIterator 有什么区别?

    • Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。 
    • Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。 
    • ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引等等,但在实际用的时候,大多也是只用到迭代的功能。
    • 一般只建议使用Iterator,别区分地对List对象用ListIterator。


     第三部分、多线程


    35. 并行和并发有什么区别?

    • 并行是指两个或多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
    • 并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
    • 在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群。
    • 实际应用场景里,一般是考虑多并发问题,而不是多并行问题。


    36. 线程和进程的区别?

    进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程,但一个进程一般有多个线程。

    进程在运行过程中,需要拥有独立的内存单元,否则如果申请不到,就会挂起。而多个线程能共享内存资源,这样就能降低运行的门槛,从而效率更高。

    线程是是cpu调度和分派的基本单位,在实际开发过程中,一般是考虑多线程并发。


    37. 守护线程是什么?

    守护线程(daemon thread),是个服务线程,用来监视和服务其它线程。


    38. 创建线程有哪几种方式?

    ①. 继承Thread类创建线程类

    • 通过extends Thread定义Thread类的子类,并重写该类的run方法。
    • 创建Thread子类的实例,并调用线程对象的start()方法来启动该线程。

    ②. 通过Runnable接口创建线程类

    • implements Runnable接口的实现类,并重写该接口的run()方法。
    • 创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。
    • 调用线程对象的start()方法来启动该线程。

    ③. 通过Callable和Future创建线程

    • 创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。
    • 创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。
    • 使用FutureTask对象作为Thread对象的target创建并启动新线程。
    • 调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。

        另外,还有通过线程池来创建线程


    39. 说一下 runnable 和 callable 有什么区别?

    • Runnable接口中的run()方法的返回值是void,在其中可以定义线程的工作任务,但无法返回值。
    • Callable接口中的call()方法是有返回值的,是一个泛型,一般会和Future、FutureTask配合,能异步地得到线程的执行结果。


    40. 线程有哪些状态?

    线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。

    • 创建状态。创建好线程对象,并没有调用该对象的start方法,此时线程处于创建状态。
    • 就绪状态。当调用线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,也就是说还没进入运行状态。或者在线程运行之后,从等待或者睡眠状态中回来之后,也会处于就绪状态,等待被调度进入运行状态。
    • 运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。
    • 阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个实践的发生(比如说某项资源就绪)之后再继续运行。wait方法都可以导致线程阻塞。
    • 死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪   


    41. sleep() 和 wait() 有什么区别?

    sleep():这是线程类(Thread)的静态方法,让线程进入睡眠状态,等休眠时间结束后,线程进入就绪状态,和其他线程一起竞争cpu的执行时间。

    因为sleep() 是static静态的方法,他不能改变对象的机锁,当一个synchronized块中调用了sleep() 方法,线程虽然进入休眠,但是对象的机锁没有被释放,其他线程依然无法访问这个对象,这时就会引发问题,此类现象请注意。

    wait():wait()是Object类的方法,当一个线程执行到wait方法时,它就进入到一个和该对象相关的等待池,同时释放对象的机锁,使得其他线程能够访问,可以通过notify,notifyAll方法来唤醒等待的线程。


    42. notify()和 notifyAll()有什么区别?

    • 如果线程调用了对象的 wait()方法,那么线程便会处于该对象的等待池中,等待池中的线程不会去竞争该对象的锁,而且被wait的线程,无法自动再进入到唤醒状态。
    • 当有线程调用了对象的 notifyAll()方法(唤醒所有 wait 线程)或 notify()方法(只随机唤醒一个 wait 线程),被唤醒的的线程便会进入该对象的锁池中,锁池中的线程会去竞争该对象锁。也就是说,调用了notify后只要一个线程会由等待池进入锁池,而notifyAll会将该对象等待池内的所有线程移动到锁池中,等待锁竞争。
    • 优先级高的线程竞争到对象锁的概率大,假若某线程没有竞争到该对象锁,它还会留在锁池中,唯有线程再次调用 wait()方法,它才会重新回到等待池中。而竞争到对象锁的线程则继续往下执行,直到执行完了 synchronized 代码块,它会释放掉该对象锁,这时锁池中的线程会继续竞争该对象锁。


    43. 线程的 run()和 start()有什么区别?

    每个线程都是通过运行自身run()来完成其操作的。而一般要通过调用Thread类的start()方法(不是run方法)来启动一个线程。

    start()方法来启动一个线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码; 这时此线程是处于就绪状态, 并没有运行。

    然后通过此Thread类调用方法run()来完成其运行状态, Run方法运行结束后, 此线程终止。然后CPU再调度其它线程。

    run()方法是在本线程里的,只是线程里的一个函数,而不是多线程的。 如果直接调用run(),其实就相当于是调用了一个普通函数而已,而不是以多线程的方式来运行。

    总之,在多线程执行时要使用start()方法而不是run()方法。


    44. 创建线程池有哪几种方式?

    ①. newFixedThreadPool(int nThreads)

    创建一个固定长度的线程池,每当提交一个任务就创建一个线程,直到达到线程池的最大数量,这时线程规模将不再变化,当线程发生未预期的错误而结束时,线程池会补充一个新的线程。

    ②. newCachedThreadPool()

    创建一个可缓存的线程池,如果线程池的规模超过了处理需求,将自动回收空闲线程,而当需求增加时,则可以自动添加新线程,线程池的规模不存在任何限制。

    ③. newSingleThreadExecutor()

    这是一个单线程的Executor,它创建单个工作线程来执行任务,如果这个线程异常结束,会创建一个新的来替代它;它的特点是能确保依照任务在队列中的顺序来串行执行。

    ④. newScheduledThreadPool(int corePoolSize)

    创建了一个固定长度的线程池,而且以延迟或定时的方式来执行任务,类似于Timer。


    45. 线程池都有哪些状态?

    线程池有5种状态:Running、ShutDown、Stop、Tidying、Terminated。

    线程池各个状态切换框架图:


    46. 线程池中 submit()和 execute()方法有什么区别?

    • 接收的参数不一样
    • submit有返回值,而execute没有
    • submit方法能进行Exception处理

    47. 在 java 程序中怎么保证多线程的运行安全?

    线程安全在三个方面体现:

    • 原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作,(atomic,synchronized);
    • 可见性:一个线程对主内存的修改可以及时地被其他线程看到,(synchronized,volatile);
    • 有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序,该观察结果一般杂乱无序,(happens-before原则)。

    48. 多线程锁的升级原理是什么?

    在Java中,锁共有4种状态,级别从低到高依次为:无状态锁,偏向锁,轻量级锁和重量级锁状态,这几个状态会随着竞争情况逐渐升级。锁可以升级但不能降级。

    但是在实际开发过程中,宁可用到类或者组件自身带的锁管理机制,因为这经历过其它项目的考验,比较可靠,别自己定义各种锁,更别自己定义锁的升级策略,因为这部分的代码没完整测试过,很容易引发问题。


    49. 什么是死锁?

    死锁是指两个或两个以上的进程在执行过程中,由于竞争资源而导致相互等待,由此代码无法继续下。此时称系统处于死锁状态或系统产生了死锁。


    50. 怎么防止死锁?

    死锁的四个必要条件:

    • 互斥条件:进程对所分配到的资源不允许其他进程进行访问,若其他进程访问该资源,只能等待,直至占有该资源的进程使用完成后释放该资源
    • 请求和保持条件:进程获得一定的资源之后,又对其他资源发出请求,但是该资源可能被其他进程占有,此事请求阻塞,但又对自己获得的资源保持不放
    • 不可剥夺条件:是指进程已获得的资源,在未完成使用之前,不可被剥夺,只能在使用完后自己释放
    • 环路等待条件:是指进程发生死锁后,若干进程之间形成一种头尾相接的循环等待资源关系

    这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之 一不满足,就不会发生死锁。

    理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和 解除死锁。

    所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确 定资源的合理分配算法,避免进程永久占据系统资源。

    如上是万金油类的正确的废话,理论层面这样说总不会错,那么在实际操作中是怎么做的?

    1 比如在数据库的数据隔离级别方面,别设太高,否则很容易引发数据库里的等待,乃至死锁。

    2 预防死锁的代价要比监控死锁的代价大很多,所以系统里一般是监控+解决,比如用监控系统(Cat等),看是否有长时间运行的SQL语句或线程,这可以预先设置,比如运行时间超过60秒就报警,然后人工介入。

    3 代码在上线前,在测试环境充分压力测试,发现死锁点再解决。上线后,不能保证一定没死锁,一般也是采用监控+人工解决的方式。


    51. ThreadLocal 是什么?有哪些使用场景?

    这是线程局部变量,属于线程自身私有,不在多个线程间共享。

    Java提供ThreadLocal类来支持线程局部变量,是一种实现线程安全的方式。

    请注意,任何线程局部变量一旦在工作完成后没有释放,Java 就会有内存泄露乃至OOM的风险。


    52.说一下 synchronized 底层实现原理?

    synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性。

    Java中每一个对象都可以作为锁,这是synchronized实现同步的基础:

    • 普通同步方法,锁是当前实例对象
    • 静态同步方法,锁是当前类的class对象
    • 同步方法块,锁是括号里面的对象

        一旦有线程对上述对象加锁,那么其它线程进入前就会检查并等待,等到锁释放后再进入。


    53. synchronized 和 volatile 的区别是什么?

    • volatile是在告诉jvm当前变量在自身线程的内存区里,值是不确定的,需要从主存中读取; synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
    • volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的。
    • volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性。
    • volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。
    • volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化。


    54. synchronized 和 Lock 有什么区别?

    • synchronized是java关键字,Lock是个java类;
    • synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;
    • synchronized会自动释放锁,Lock需在finally中手工释放锁(unlock()方法释放锁);
    • 用synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。如果线程1阻塞,线程2则会一直等待下去,而Lock锁就不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就结束了;
    • synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平(两者皆可);
    • Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题。

    结论: synchronized很重,而且大多只能加在单个方法上,而Lock可以作用在调用多个业务的方法上,使用起来比较简便。


    55. synchronized 和 ReentrantLock 区别是什么?

    synchronized是关键字,ReentrantLock是类,这是二者的本质区别。

    ReentrantLock是类,所以synchronized更多更灵活的特性,可以被继承、可以有方法、可以有各种各样的类变量

    ReentrantLock比synchronized的扩展性体现在几点上: 

    • ReentrantLock可以对获取锁的等待时间进行设置,这样就避免了死锁 
    • ReentrantLock可以获取各种锁的信息
    • ReentrantLock可以灵活地实现多路通知 

    另外,二者的锁机制其实也是不一样的:ReentrantLock底层调用的是Unsafe的park方法加锁,synchronized操作的应该是对象头中mark word。


    56. 说一下 atomic 的原理?

    Atomic包中的类基本的特性就是在多线程环境下,当有多个线程同时对单个(包括基本类型及引用类型封装类)变量进行操作时,具有排斥性,即当多个线程同时对该变量的值进行更新时,仅有一个线程能成功,而未成功的线程可以向自旋锁一样,继续尝试,一直等到执行成功。

    Atomic系列的类中的核心方法都会调用unsafe类中的几个本地方法。我们需要先知道一个东西就是Unsafe类,全名为:sun.misc.Unsafe,这个类包含了大量的对C代码的操作,包括很多直接内存分配以及原子操作的调用,而它之所以标记为非安全的

    这个里面大量的方法调用都会存在安全隐患,需要小心使用,否则会导致严重的后果,例如在通过unsafe分配内存的时候,如果自己指定某些区域可能会导致一些类似C++一样的指针越界到其他进程的问题。

    结论,你面试时说说就行了,实际项目里用的话需要非常谨慎。



    第四部分、反射


    57. 什么是反射?

    反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力

    反射的物质基础是Class类,其中C是大写的。

    Java反射:

    在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法

    Java反射机制主要提供了以下功能:

    • 在运行时判断任意一个对象所属的类。
    • 在运行时构造任意一个类的对象。
    • 在运行时判断任意一个类所具有的成员变量和方法。
    • 在运行时调用任意一个对象的方法。 


    58. 什么是 java 序列化?什么情况下需要序列化?

    序列化是指,把Java对象转换成一个字节序列,以便传输。

    什么情况下需要序列化:

    a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
    b)想在网上传输时,比如想用套接字传输或用RMI或Dubbo调用时;
     


    59. 动态代理是什么?有哪些应用?

    动态代理:

    当想要给实现了某个接口的类中的方法,加一些额外的处理。比如说加日志,加事务等,就可以给这个类创建一个代理,这个代理类不仅包含原来类方法的功能,而且还在原来的基础上添加了额外处理的新类。这个代理类并不是定义好的,是动态生成的。具有解耦合性。

    动态代理的应用,非常典型就Spring 里的AOP,以及各种注解


    60. 怎么实现动态代理?

    1 必须定义一个接口

    2 定义InvocationHandler(将实现接口的类的对象传递给它)处理类。

    3 定义一个代理类Proxy(因为调用newInstance()可以产生代理对象,其实他只是一个产生代理对象的工具类)。

    4 利用到InvocationHandler,拼接代理类源码,将其编译生成代理类的二进制码,利用加载器加载,并将其实例化产生代理对象,最后返回。


    五、对象拷贝


    61. 为什么要使用克隆?

        用一个对象得到了大量的数据,需要对此处理,但同时又想保存原来的数据,就需要对原数据进行克隆操作。    


    62. 如何实现对象克隆?

    有两种方式:

    1). 实现Cloneable接口,并重写其中的clone()方法,在里面定义克隆动作;

    2). 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆

    请注意,基于序列化和反序列化实现的克隆不仅是深度克隆,更重要的是通过泛型限定,把对象里包含的子对象也克隆出来,同时检查克隆出来的对象是否支持序列化,而这种检查是编译器完成的,不是在运行时抛出异常,这种是方案明显优于使用Object类的clone方法克隆对象,毕竟让问题在编译的时候暴露出来总是好过把问题留到运行时。


    63. 深拷贝和浅拷贝区别是什么?

    • 浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷贝,浅拷贝可能会引发潜在的数据修改问题
    • 深拷贝是将对象及值复制过来,两个对象修改其中任意的值另一个值不会改变,这就是深拷贝(例:JSON.parse()和JSON.stringify(),但是此方法无法复制函数类型)

    这是我的公众号,如果可以,请大家关注下,多多捧场,谢谢了。

     

    展开全文
  • Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈共有1000+道面试题。 对于Java后端的朋友来说应该是最全面最完整的面试备战仓库,为了更好地整理每个模块,我也参考了很多网上

    进大厂是大部分程序员的梦想,而进大厂的门槛也是比较高的,所以这里整理了一份阿里、美团、滴滴、头条等大厂面试大全,其中概括的知识点有:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、

    Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈共有1000+道面试题。

    对于Java后端的朋友来说应该是最全面最完整的面试备战仓库,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer, 也已经帮助了很多的Java学习者,希望也能帮助到你

    因为文件太多,全部展示会影响篇幅,暂时就展示部分截图。欢迎大家一起交流 点击一起学习 暗号:csdn 第一时间领取最新学习面试资料+简历优化资源

     

    面试题整理十分全面,文末还有答案解析!(文章比较长,耐心看完,让你面试提升一大截!)

     

    é¿éå·´å·´

    MyBatis 面试题

    1、什么是 Mybatis?

    2、Mybaits 的优点:

    3、MyBatis 框架的缺点:

    4、MyBatis 框架适用场合:

    5、MyBatis 与 Hibernate 有哪些不同?

    6、#{}和${}的区别是什么?

    7、当实体类中的属性名和表中的字段名不一样 ,怎么办 ?

    8、 模糊查询 like 语句该怎么写?

    9、通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应,请问,

    这个 Dao 接口的工作原理是什么?Dao 接口里的方法,参数不同时,

    方法能重载吗?

    10、...

     

    图片

    ZooKeeper 面试题

    1. ZooKeeper 面试题?

    2. ZooKeeper 提供了什么?

    3. Zookeeper 文件系统

    4. ZAB 协议?

    5. 四种类型的数据节点 Znode

    6. Zookeeper Watcher 机制 -- 数据变更通知

    7. 客户端注册 Watcher 实现

    8. 服务端处理 Watcher 实现

    9. 客户端回调 Watcher

    10. ...图片

     

    Dubbo 面试题

    1、为什么要用 Dubbo?

    2、Dubbo 的整体架构设计有哪些分层?

    3、默认使用的是什么通信框架,还有别的选择吗?

    4、服务调用是阻塞的吗?

    5、一般使用什么注册中心?还有别的选择吗?

    6、默认使用什么序列化框架,你知道的还有哪些?

    7、服务提供者能实现失效踢出是什么原理?

    8、服务上线怎么不影响旧版本?

    9、如何解决服务调用链过长的问题?

    10、...

    图片
     

    Elasticsearch 面试题

    1、elasticsearch 了解多少,说说你们公司 es 的集群架构,索引数据

    大小,分片有多少,以及一些调优手段 。

    2、elasticsearch 的倒排索引是什么

    3、elasticsearch 索引数据多了怎么办,如何调优,部署

    4、elasticsearch 是如何实现 master 选举的

    5、详细描述一下 Elasticsearch 索引文档的过程

    6、详细描述一下 Elasticsearch 搜索的过程?

    7、Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法

    8、lucence 内部结构是什么?

    9、Elasticsearch 是如何实现 Master 选举的?

    10、...图片

     

    Memcached 面试题

    1、Memcached 是什么,有什么作用?

    2、Memcached 服务分布式集群如何实现?

    3、Memcached 服务特点及工作原理是什么?

    4、简述 Memcached 内存管理机制原理?

    5、memcached 是怎么工作的?

    6、memcached 最大的优势是什么?

    7、memcached 和 MySQL 的 query

    8、memcached 和服务器的 local cache(比如 PHP 的 APC、mmap

    文件等)相比,有什么优缺点?

    9、memcached 的 cache 机制是怎样的?

    10、...图片

     

    Redis 面试题

    1、什么是 Redis?

    2、Redis 的数据类型?

    3、使用 Redis 有哪些好处?

    4、Redis 相比 Memcached 有哪些优势?

    5、Memcache 与 Redis 的区别都有哪些?

    6、Redis 是单进程单线程的?

    7、一个字符串类型的值能存储最大容量是多少?

    8、Redis 的持久化机制是什么?各自的优缺点?

    9、Redis 常见性能问题和解决方案:

    10、...图片

    资料获取方式:需要的朋友点我获取:点击一起学习 暗号:csdn 最新学习资料+简历优化资源   

    (资料整理不易,大家耐心点哦)

    MySQL 面试题


    1、MySQL 中有哪几种锁?

    2、MySQL 中有哪些不同的表格?

    3、简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别

    4、MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间

    的区别?

    5、CHAR 和 VARCHAR 的区别?

    6、主键和候选键有什么区别?

    7、myisamchk 是用来做什么的?

    8、如果一个表有一列定义为 TIMESTAMP,将发生什么?

    9、你怎么看到为表格定义的所有索引?

    10、...

    图片
     

    Java 并发编程(一)

    1、在 java 中守护线程和本地线程区别?

    2、线程与进程的区别?

    3、什么是多线程中的上下文切换?

    4、死锁与活锁的区别,死锁与饥饿的区别?

    5、Java 中用到的线程调度算法是什么?

    6、什么是线程组,为什么在 Java 中不推荐使用?

    7、为什么使用 Executor 框架?

    8、在 Java 中 Executor 和 Executors 的区别?

    9、如何在 Windows 和 Linux 上查找哪个线程使用的 CPU 时间最长?

    10、...

    图片

     

    Java 并发编程(二)

    1、并发编三要素?

    2、实现可见性的方法有哪些?

    3、多线程的价值?

    4、创建线程的有哪些方式?

    5、创建线程的三种方式的对比?

    6、线程的状态流转图

    7、Java 线程具有五中基本状态

    8、什么是线程池?有哪几种创建方式?

    9、四种线程池的创建:

    10、...

    图片
     

    Java 面试题(一)

    1、面向对象的特征有哪些方面?

    2、访问修饰符 public,private,protected,以及不写(默认)时的区别?

    3、String 是最基本的数据类型吗?

    4、float f=3.4;是否正确?

    5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?

    6、Java 有没有 goto?

    7、int 和 Integer 有什么区别?

    8、&和&&的区别? 

    9、解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法。

    10、...图片

     

    Java 面试题(二)

    多线程、并发及线程的基础问题

    1、Java 中能创建 volatile 数组吗?

    2、volatile 能使得一个非原子操作变成原子操作吗?

    3、volatile 修饰符的有过什么实践?

    4、volatile 类型变量提供什么保证?

    5、10 个线程和 2 个线程的同步代码,哪个更容易写? 

    6、你是如何调用 wait()方法的?使用 if 块还是循环?为什么?

    有经验程序员的 Java 面试题 

    8、什么是 Busy spin?我们为什么要使用它?

    9、Java 中怎么获取一份线程 dump 文件? 

    10、Swing 是线程安全的? 

    11、什么是线程局部变量?

    12、用 wait-notify 写一段代码来解决生产者-消费者问题?

    13、用 Java 写一个线程安全的单例模式(Singleton)?

    14、Java 中 sleep 方法和 wait 方法的区别?

    15、什么是不可变对象(immutable object)?Java 中怎么创建一

    个不可变对象?

    16、我们能创建一个包含可变对象的不可变对象吗?

    数据类型和 Java 基础面试问题

    17、Java 中应该使用什么数据类型来代表价格?

    18、怎么将 byte 转换为 String?

    19、Java 中怎样将 bytes 转换为 long 类型?

    20、我们能将 int 强制转换为 byte 类型的变量吗?如果该值大于

    byte 类型的范围,将会出现什么现象?

    21、存在两个类,B 继承 A,C 继承 B,我们能将 B 转换为 C 么?

    如 C = (C) B;

    22、哪个类包含 clone 方法?是 Cloneable 还是 Object?

    23、Java 中 ++ 操作符是线程安全的吗?

    23、不是线程安全的操作。它涉及到多个指令,如读取变量值,增加,

    然后存储回内存,这个过程可能会出现多个线程交差。

    24、a = a + b 与 a += b 的区别

    25、我能在不进行强制转换的情况下将一个 double 值赋值给 long

    类型的变量吗?

    26、3*0.1 == 0.3 将会返回什么?true 还是 false?

    27、int 和 Integer 哪个会占用更多的内存?

    28、为什么 Java 中的 String 是不可变的(Immutable)? 

    JVM 底层 与 GC(Garbage Collection) 的面试问题

    31、64 位 JVM 中,int 的长度是多数?

    32、Serial 与 Parallel GC 之间的不同之处?

    33、32 位和 64 位的 JVM,int 类型变量的长度是多数? 

    34、Java 中 WeakReference 与 SoftReference 的区别?

    35、WeakHashMap 是怎么工作的?

    36、JVM 选项 -XX:+UseCompressedOops 有什么作用?为什么要

    使用?

    37、怎样通过 Java 程序来判断 JVM 是 32 位 还是 64 位?

    38、32 位 JVM 和 64 位 JVM 的最大堆内存分别是多数?

    39、JRE、JDK、JVM 及 JIT 之间有什么不同?

    3 年工作经验的 Java 面试题

    40、解释 Java 堆空间及 GC? 

    JVM 底层面试题及答案

    41、你能保证 GC 执行吗?

    42、怎么获取 Java 程序使用的内存?堆使用的百分比?

    43、Java 中堆和栈有什么区别?

    关于内存的的面试问题和答案

    Java 基本概念面试题

    44、“a==b”和”a.equals(b)”有什么区别?

    45、a.hashCode() 有什么用?与 a.equals(b) 有什么关系?

    46、final、finalize 和 finally 的不同之处?

    47、Java 中的编译期常量是什么?使用它又什么风险?

    Java 集合框架的面试题

    48、List、Set、Map 和 Queue 之间的区别(答案)

    49、poll() 方法和 remove() 方法的区别? 

    50、Java 中 LinkedHashMap 和 PriorityQueue 的区别是什么?

    51、ArrayList 与 LinkedList 的不区别?

    52、用哪两种方式来实现集合的排序?

    53、Java 中怎么打印数组?

    54、Java 中的 LinkedList 是单向链表还是双向链表?

    55、Java 中的 TreeMap 是采用什么树实现的?(答案)

    56、Hashtable 与 HashMap 有什么不同之处?

    57、Java 中的 HashSet,内部是如何工作的?

    58、写一段代码在遍历 ArrayList 时移除一个元素?

    59、我们能自己写一个容器类,然后使用 for-each 循环码?

    60、ArrayList 和 HashMap 的默认大小是多数?

    61、有没有可能两个不相等的对象有有相同的 hashcode?

    62、两个相同的对象会有不同的的 hash code 吗?

    63、我们可以在 hashcode() 中使用随机数字吗?

    64、Java 中,Comparator 与 Comparable 有什么不同?

    Java IO 和 NIO 的面试题

    66、在我 Java 程序中,我有三个 socket,我需要多少个线程来处理?

    67、Java 中怎么创建 ByteBuffer?

    68、Java 中,怎么读写 ByteBuffer ?

    69、Java 采用的是大端还是小端?

    70、ByteBuffer 中的字节序是什么?

    71、Java 中,直接缓冲区与非直接缓冲器有什么区别?

    72、Java 中的内存映射缓存区是什么?

    73、socket 选项 TCP NO DELAY 是指什么?

    74、TCP 协议与 UDP 协议有什么区别?

    75、Java 中,ByteBuffer 与 StringBuffer 有什么区别?(答案)

    Java 最佳实践的面试问题

    76、Java 中,编写多线程程序的时候你会遵循哪些最佳实践?

    77、说出几点 Java 中使用 Collections 的最佳实践

    78、说出至少 5 点在 Java 中使用线程的最佳实践。

    79、说出 5 条 IO 的最佳实践(答案)

    80、列出 5 个应该遵循的 JDBC 最佳实践

    81、说出几条 Java 中方法重载的最佳实践?

    Date、Time 及 Calendar 的面试题

    82、在多线程环境下,SimpleDateFormat 是线程安全的吗?

    83、Java 中如何格式化一个日期?如格式化为 ddMMyyyy 的形式?

    84、Java 中,怎么在格式化的日期中显示时区?

    85、Java 中 java.util.Date 与 java.sql.Date 有什么区别?

    86、Java 中,如何计算两个日期之间的差距?

    87、Java 中,如何将字符串 YYYYMMDD 转换为日期?

    单元测试 JUnit 面试题

    89、如何测试静态方法?(答案)

    90、怎么利用 JUnit 来测试一个方法的异常?

    91、你使用过哪个单元测试库来测试你的 Java 程序?

    92、@Before 和 @BeforeClass 有什么区别?

    编程和代码相关的面试题

    93、怎么检查一个字符串只包含数字?解决方案

    94、Java 中如何利用泛型写一个 LRU 缓存?

    95、写一段 Java 程序将 byte 转换为 long?

    95、在不使用 StringBuffer 的前提下,怎么反转一个字符串?

    97、Java 中,怎么获取一个文件中单词出现的最高频率?

    98、如何检查出两个给定的字符串是反序的?

    99、Java 中,怎么打印出一个字符串的所有排列?

    100、Java 中,怎样才能打印出数组中的重复元素?

    101、Java 中如何将字符串转换为整数?

    102、在没有使用临时变量的情况如何交换两个整数变量的值?

    关于 OOP 和设计模式的面试题

    103、接口是什么?为什么要使用接口而不是直接使用具体类?

    104、Java 中,抽象类与接口之间有什么不同?

    105、除了单例模式,你在生产环境中还用过什么设计模式?

    106、你能解释一下里氏替换原则吗?

    107) 什么情况下会违反迪米特法则?为什么会有这个问题?

    108、适配器模式是什么?什么时候使用?

    109、什么是“依赖注入”和“控制反转”?为什么有人使用?

    110、抽象类是什么?它与接口有什么区别?你为什么要使用过抽象类?

    111、构造器注入和 setter 依赖注入,那种方式更好?

    112、依赖注入和工程模式之间有什么不同?

    113、适配器模式和装饰器模式有什么区别?

    114、适配器模式和代理模式之前有什么不同?

    115、什么是模板方法模式?

    116、什么时候使用访问者模式?

    117、什么时候使用组合模式?

    118、继承和组合之间有什么不同?

    119、描述 Java 中的重载和重写?

    120、Java 中,嵌套公共静态类与顶级类有什么不同?

    121、 OOP 中的 组合、聚合和关联有什么区别?

    122、给我一个符合开闭原则的设计模式的例子?

    123、抽象工厂模式和原型模式之间的区别?

    Java 面试中其他各式各样的问题


    125、嵌套静态类与顶级类有什么区别?

    126、你能写出一个正则表达式来判断一个字符串是否是一个数字吗?

    127、Java 中,受检查异常 和 不受检查异常的区别?

    128、Java 中,throw 和 throws 有什么区别

    129、Java 中,Serializable 与 Externalizable 的区别?

    130、Java 中,DOM 和 SAX 解析器有什么不同?

    131、说出 JDK 1.7 中的三个新特性?

    132、说出 5 个 JDK 1.8 引入的新特性?

    133、Java 中,Maven 和 ANT 有什么区别?

     

    图片
     

    Spring 面试题(一)

     

    1、一般问题

    1.1、不同版本的 Spring Framework 有哪些主要功能?

    1.2、什么是 Spring Framework?

    1.3、列举 Spring Framework 的优点。

    1.4、Spring Framework 有哪些不同的功能?

    1.5、Spring Framework 中有多少个模块,它们分别是什么?

    1.6、什么是 Spring 配置文件?

    1.7、Spring 应用程序有哪些不同组件?

    1.8、使用 Spring 有哪些方式?

    2、依赖注入(Ioc)

    2.1、什么是 Spring IOC 容器?

    2.2、什么是依赖注入?

    2.3、可以通过多少种方式完成依赖注入?

    2.4、区分构造函数注入和 setter 注入。

    2.5、spring 中有多少种 IOC 容器?

    2.6、区分 BeanFactory 和 ApplicationContext。

    2.7、列举 IoC 的一些好处。

    2.8、Spring IoC 的实现机制。

    3、Beans

    3.1、什么是 spring bean?

    3.2、spring 提供了哪些配置方式?

    3.3、spring 支持集中 bean scope?

    3.4、spring bean 容器的生命周期是什么样的?

    3.5、什么是 spring 的内部 bean?

    3.6、什么是 spring 装配 

    3.7、自动装配有哪些方式?

    3.8、自动装配有什么局限?

    4、注解

    4.1、什么是基于注解的容器配置

    4.2、如何在 spring 中启动注解装配?

    4.3、@Component, @Controller, @Repository, @Service 有何区

    别?4.4、@Required 注解有什么用?

    4.5、@Autowired 注解有什么用?

    4.6、@Qualifier 注解有什么用?

    4.7、@RequestMapping 注解有什么用?

    5、数据访问

    5.1、spring DAO 有什么用?

    5.2、列举 Spring DAO 抛出的异常。

    5.3、spring JDBC API 中存在哪些类?

    5.4、使用 Spring 访问 Hibernate 的方法有哪些? 

    5.5、列举 spring 支持的事务管理类型.

    5.6、spring 支持哪些 ORM 框架

    6、AOP

    6.1、什么是 AOP?

    6.2、什么是 Aspect?

    6.3、什么是切点(JoinPoint)

    6.4、什么是通知(Advice)?

    6.5、有哪些类型的通知(Advice)?

    6.6、指出在 spring aop 中 concern 和 cross-cutting concern 的

    不同之处。

    6.7、AOP 有哪些实现方式?

    6.8、Spring AOP and AspectJ AOP 有什么区别?

    6.9、如何理解 Spring 中的代理?

    6.10、什么是编织(Weaving)?

    7、MVC

    7.1、Spring MVC 框架有什么用?

    7.2、描述一下 DispatcherServlet 的工作流程

    7.3、介绍一下 WebApplicationContext

    图片

    资料获取方式:点击一起学习 暗号:csdn 最新学习资料+简历优化资源   

    需要的朋友点我获取:点击一起学习 暗号:csdn 最新学习资料+简历优化资源   

    (资料整理不易,大家耐心点哦)

     

    Spring 面试题(二)

     

    1、什么是 spring?

    2、使用 Spring 框架的好处是什么?

    3、Spring 由哪些模块组成?

    4、核心容器(应用上下文) 模块。

    5、BeanFactory – BeanFactory 实现举例。

    6、XMLBeanFactory

    7、解释 AOP 模块

    8、解释 JDBC 抽象和 DAO 模块

    9、解释对象/关系映射集成模块。

    10、解释 WEB 模块。

    12、Spring 配置文件

    13、什么是 Spring IOC 容器?

    14、IOC 的优点是什么?

    15、ApplicationContext 通常的实现是什么?

    16、Bean 工厂和 Application contexts 有什么区别?

    17、一个 Spring 的应用看起来象什么?

    依赖注入

    18、什么是 Spring 的依赖注入?

    19、有哪些不同类型的 IOC(依赖注入)方式?

    20、哪种依赖注入方式你建议使用,构造器注入,还是 Setter 方法注

    入?

    Spring Beans

    21.什么是 Spring beans?

    22、一个 Spring Bean 定义 包含什么?

    23、如何给 Spring 容器提供配置元数据?

    24、你怎样定义类的作用域?

    25、解释 Spring 支持的几种 bean 的作用域。

    26、Spring 框架中的单例 bean 是线程安全的吗?

    27、解释 Spring 框架中 bean 的生命周期。

    28、哪些是重要的 bean 生命周期方法?你能重载它们吗?

    29、什么是 Spring 的内部 bean?

    30、在 Spring 中如何注入一个 java 集合?

    31、什么是 bean 装配?

    32、什么是 bean 的自动装配?

    33、解释不同方式的自动装配 。

    34.自动装配有哪些局限性 ?

    35、你可以在 Spring 中注入一个 null 和一个空字符串吗?

    Spring 注解

    36、什么是基于 Java 的 Spring 注解配置? 给一些注解的例子.

    37、什么是基于注解的容器配置?

    38、怎样开启注解装配?

    39、@Required 注解

    40、@Autowired 注解

    41、@Qualifier 注解

    Spring 数据访问

    42.在 Spring 框架中如何更有效地使用 JDBC?

    43、JdbcTemplate

    44、Spring 对 DAO 的支持

    45、使用 Spring 通过什么方式访问 Hibernate?

    46、Spring 支持的 ORM

    47.如何通过 HibernateDaoSupport 将 Spring 和 Hibernate 结合起

    来?

    48、Spring 支持的事务管理类型

    49、Spring 框架的事务管理有哪些优点?

    50、你更倾向用那种事务管理类型?

    Spring 面向切面编程(AOP)

    51、解释 AOP

    52、Aspect 切面

    52、在 Spring AOP 中,关注点和横切关注的区别是什么?

    54、连接点

    55、通知

    56、切点

    57、什么是引入?

    58、什么是目标对象?

    59、什么是代理?

    60、有几种不同类型的自动代理?

    61、什么是织入。什么是织入应用的不同点?

    62、解释基于 XML Schema 方式的切面实现。

    63、解释基于注解的切面实现

    Spring 的 MVC

    64、什么是 Spring 的 MVC 框架?

    65、DispatcherServlet

    66、WebApplicationContext

    67、什么是 Spring MVC 框架的控制器?

    68、@Controller 注解69、@RequestMapping 注解

    图片
     

    微服务 面试题

    1、您对微服务有何了解?

    2、微服务架构有哪些优势?

    3。微服务有哪些特点?

    4、设计微服务的最佳实践是什么?

    5、微服务架构如何运作?

    6、微服务架构的优缺点是什么?

    7、单片,SOA 和微服务架构有什么区别?

    8、在使用微服务架构时,您面临哪些挑战?

    9、SOA 和微服务架构之间的主要区别是什么?

    10、微服务有什么特点?

    11、什么是领域驱动设计?

    12、为什么需要域驱动设计(DDD)?

    13、什么是无所不在的语言?

    14、什么是凝聚力?

    15、什么是耦合?

    16、什么是 REST / RESTful 以及它的用途是什么?

    17、你对 Spring Boot 有什么了解?

    18、什么是 Spring 引导的执行器?

    19、什么是 Spring Cloud?

    20、Spring Cloud 解决了哪些问题?

    21、在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?

    22。你能否给出关于休息和微服务的要点?

    23、什么是不同类型的微服务测试?

    24、您对 Distributed Transaction 有何了解?

    25、什么是 Idempotence 以及它在哪里使用?

    26、什么是有界上下文?

    27、什么是双因素身份验证?

    28、双因素身份验证的凭据类型有哪些?

    29、什么是客户证书?

    30、PACT 在微服务架构中的用途是什么?

    31、什么是 OAuth?

    32、康威定律是什么?

    33、合同测试你懂什么?

    34、什么是端到端微服务测试?

    35、Container 在微服务中的用途是什么?

    36、什么是微服务架构中的 DRY?

    37、什么是消费者驱动的合同(CDC)?

    38、Web,RESTful API 在微服务中的作用是什么?

    39、您对微服务架构中的语义监控有何了解?

    40、我们如何进行跨功能测试?41、我们如何在测试中消除非决定论?

    42、Mock 或 Stub 有什么区别?

    43、您对 Mike Cohn 的测试金字塔了解多少?

    44、Docker 的目的是什么?

    45、什么是金丝雀释放?

    46、什么是持续集成(CI)?

    47、什么是持续监测?

    48、架构师在微服务架构中的角色是什么?

    49、我们可以用微服务创建状态机吗?

    50、什么是微服务中的反应性扩展?

    图片
     

    Linux 面试题

    1、绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命令?

    2、怎么查看当前进程?怎么执行退出?怎么查看当前路径?

    3、怎么清屏?怎么退出当前命令?怎么执行睡眠?怎么查看当前用户id?查看指定帮助用什么命令?

    4、Ls 命令执行什么功能?可以带哪些参数,有什么区别?

    5、建立软链接(快捷方式),以及硬链接的命令。

    6、目录创建用什么命令?创建文件用什么命令?复制文件用什么命令?

    7、查看文件内容有哪些命令可以使用?

    8、随意写文件命令?怎么向屏幕输出带空格的字符串,比如”helloworld”? 

    9、终端是哪个文件夹下的哪个文件?黑洞文件是哪个文件夹下的哪个命令? 

    10、移动文件用哪个命令?改名用哪个命令?

    11、复制文件用哪个命令?如果需要连同文件夹一块复制呢?如果需要有提示功能呢?

    12、删除文件用哪个命令?如果需要连目录及目录下文件一块删除呢?删除空文件夹用什么命令?

    13、Linux 下命令有哪几种可使用的通配符?分别代表什么含义?

    14、用什么命令对一个文件的内容进行统计?(行号、单词数、字节数)

    15、Grep 命令有什么用?如何忽略大小写?如何查找不含该串的行?

    16、Linux 中进程有哪几种状态?在 ps 显示出来的信息中,分别用什么符号表示的?

    17、怎么使一个命令在后台运行?

    18、利用 ps 怎么显示所有的进程? 怎么利用 ps 查看指定进程的信息?

    19、哪个命令专门用来查看后台任务?

    20、把后台任务调到前台执行使用什么命令?把停下的后台任务在后台执行起来用什么命令?

    21、终止进程用什么命令? 带什么参数?

    22、怎么查看系统支持的所有信号?

    23、搜索文件用什么命令? 格式是怎么样的?

    24、查看当前谁在使用该主机用什么命令? 查找自己所在的终端信息用什么命令?

    25、使用什么命令查看用过的命令列表?

    26、使用什么命令查看磁盘使用空间?空闲空间呢?

    27、使用什么命令查看网络是否连通?

    28、使用什么命令查看 ip 地址及接口信息?

    29、查看各类环境变量用什么命令?

    30、通过什么命令指定命令提示符?

    31、查找命令的可执行文件是去哪查找的? 怎么对其进行设置及添加?

    32、通过什么命令查找执行命令?

    33、怎么对命令进行取别名?

    34、du 和 df 的定义,以及区别?

    35、awk 详解。36、当你需要给命令绑定一个宏或者按键的时候,应该怎么做呢?

    37、如果一个 linux 新手想要知道当前系统支持的所有命令的列表,他需要怎么做?

    38、如果你的助手想要打印出当前的目录栈,你会建议他怎么做?451

    39、你的系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?

    40、bash shell 中的 hash 命令有什么作用?

    41、哪一个 bash 内置命令能够进行数学运算。

    42、怎样一页一页地查看一个大文件的内容呢?

    43、数据字典属于哪一个用户的?

    44、怎样查看一个 linux 命令的概要与用法?假设你在/bin 目录中偶然看到一个你从没见过的的命令,怎样才能知道它的作用和用法呢?

    45、使用哪一个命令可以查看自己文件系统的磁盘空间配额呢?

    图片

    需要的朋友点我获取:点击一起学习 暗号:csdn 最新学习资料+简历优化资源   

    (资料整理不易,大家耐心点哦)

    Spring Boot 面试题

     

    1、什么是 Spring Boot?

    2、Spring Boot 有哪些优点?

    3、什么是 JavaConfig?

    4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?

    5、Spring Boot 中的监视器是什么?

    6、如何在 Spring Boot 中禁用 Actuator 端点安全性?

    7、如何在自定义端口上运行 Spring Boot 应用程序?

    8、什么是 YAML?

    9、如何实现 Spring Boot 应用程序的安全性?

    10、如何集成 Spring Boot 和 ActiveMQ?

    11、如何使用 Spring Boot 实现分页和排序?

    12、什么是 Swagger?你用 Spring Boot 实现了它吗? 

    13、什么是 Spring Profiles?

    14、什么是 Spring Batch?

    15、什么是 FreeMarker 模板?

    16、如何使用 Spring Boot 实现异常处理?

    17、您使用了哪些 starter maven 依赖项?

    18、什么是 CSRF 攻击?

    19、什么是 WebSockets?

    20、什么是 AOP?

    21、什么是 Apache Kafka?

    22、我们如何监视所有 Spring Boot 微服务?

    图片
     

    Spring Cloud 面试题

    1、什么是 Spring Cloud?

    2、使用 Spring Cloud 有什么优势?

    3、服务注册和发现是什么意思?Spring Cloud 如何实现?

    4、负载平衡的意义什么?

    5、什么是 Hystrix?它如何实现容错?

    6、什么是 Hystrix 断路器?我们需要它吗?

    7、什么是 Netflix Feign?它的优点是什么?

    8、什么是 Spring Cloud Bus?我们需要它吗?

    图片
     

    RabbitMQ 面试题

    1、什么是 rabbitmq

    2、为什么要使用 rabbitmq

    3、使用 rabbitmq 的场景

    4、如何确保消息正确地发送至 RabbitMQ?如何确保消息接收方消

    费了消息?

    5.如何避免消息重复投递或重复消费?

    6、消息基于什么传输?

    7、消息如何分发?

    8、消息怎么路由?

    9、如何确保消息不丢失?

    10、使用 RabbitMQ 有什么好处?

    11、RabbitMQ 的集群

    12、mq 的缺点

    图片

    kafka 面试题

    1、如何获取 topic 主题的列表

    2、生产者和消费者的命令行是什么?

    3、consumer 是推还是拉?

    4、讲讲 kafka 维护消费状态跟踪的方法

    5、讲一下主从同步**

    6、为什么需要消息系统,mysql 不能满足需求吗?

    7、Zookeeper 对于 Kafka 的作用是什么?

    8、数据传输的事务定义有哪三种?

    9、Kafka 判断一个节点是否还活着有那两个条件?

    10、Kafka 与传统 MQ 消息系统之间有三个关键区别

    11、讲一讲 kafka 的 ack 的三种机制

    13、消费者故障,出现活锁问题如何解决?

    14、如何控制消费的位置

    15、kafka 分布式(不是单机)的情况下,如何保证消息的顺序消费?

    16、kafka 的高可用机制是什么?

    17、kafka 如何减少数据丢失

    18、kafka 如何不消费重复数据?比如扣款,我们不能重复的扣。

    图片

    总结:

    所有的面试题目都不是一成不变的,上面的面试题只是给大家一个借鉴作用,最主要的是给自己增加知识的储备,有备无患。上面分享的2021最新1000+Java面试题的答案都整理成了PDF文档。

    最新2021整理收集的一些Java学习资料(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud等详细讲解,也有详细的学习规划图,面试题整理等,

     点击 : 一线大厂核心技术分享 分享最新技术,走在知识前端

    点击一起学习 暗号:csdn 最新学习资料+简历优化资源

                             

      å¨è¿éæå¥å¾çæè¿°

    后续会分享更多纯干货文章,希望能真正帮到你们。你们的支持就是我最大的动力!欢迎关注点赞啊!

                                                           

    展开全文
  • java笔试题大全带答案(经典11题)

    万次阅读 2021-03-04 00:27:55
    # java笔试题大全带答案(经典11题)**1.不通过构造函数也能创建对象吗()**A. 是B. 否**分析:答案:A**Java创建对象的几种方式(重要):(1) 用new语句创建对象,这是最常见的创建对象的方法。(2) 运用反射手段,调用...

    # java笔试题大全带答案(经典11题)

    **1.不通过构造函数也能创建对象吗()**

    A. 是

    B. 否

    **分析:答案:A**

    Java创建对象的几种方式(重要):

    (1) 用new语句创建对象,这是最常见的创建对象的方法。

    (2) 运用反射手段,调用java.lang.Class或者

    java.lang.reflect.Constructor类的newInstance()实例方法。

    (3) 调用对象的clone()方法

    (4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

    (1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从文件中还原类的对象,也不会调用构造函数。

    (1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从文件中还原类的对象,也不会调用构造函数。

    **2.下面哪些是对称加密算法()**

    A. DES

    B. MD5

    C. DSA

    D. RSA

    **分析:答案:A**

    分析:常用的对称加密算法有:DES、3DES、RC2、RC4、AES

    常用的非对称加密算法有:RSA、DSA、ECC

    使用单向散列函数的加密算法:MD5、SHA

    **3.下面的代码段,当输入为2的时候返回值是()**

    ```java

    public static int get Value(int i){

    int result=0;

    switch(i){

    case 1:

    result=result +i

    case 2:

    result=result+i*2

    case 3:

    result=result+i*3

    }

    return result;

    }

    ```

    A. 0

    B. 2

    C. 4

    D. 10

    **答案:C**

    分析:result = 0 + 2 * 2;

    **4.以下Java代码段会产生几个对象**

    ```java

    public void test(){

    String a="a";

    String b="b";

    String c="c";

    c=a+""+b+""+c;

    System.out.print(c);

    }

    ```

    分析:答案: 一个对象,因为编译期进行了优化,3个字符串常量直接折叠为一个

    **5.Math.round(-11.2)的运行结果是。**

    答案: -11

    分析:小数点后第一位=5

    正数:Math.round(11.5)=12

    负数:Math.round(-11.5)=-11

    小数点后第一位<5

    正数:Math.round(11.46)=11

    负数:Math.round(-11.46)=-11

    小数点后第一位>5

    正数:Math.round(11.68)=12

    负数:Math.round(-11.68)=-12

    根据上面例子的运行结果,我们还可以按照如下方式总结,或许更加容易记忆:

    参数的小数点后第一位<5,运算结果为参数整数部分。

    参数的小数点后第一位>5,运算结果为参数整数部分绝对值+1,符号(即正负)不变。

    参数的小数点后第一位=5,正数运算结果为整数部分+1,负数运算结果为整数部分。

    终结:大于五全部加,等于五正数加,小于五全不加。

    **6.Java中int.long占用的字节数分别是**

    **分析:**

    1:“字节”是byte,“位”是bit ;

    2: 1 byte = 8 bit ;

    char 在Java中是2个字节。java采用unicode,2个字节(16位)来表示一个字符。

    short 2个字节

    int 4个字节

    long 8个字节

    System.out.println(‘a’+1);的结果是

    分析:'a'是char型,1 是int行,int与char相加,char会被强转为int行,char的ASCII码对应的值是97,所以加一起打印98

    **7.下列语句那一个正确()**

    A. java程序经编译后会产生machine code

    B. java程序经编译后会产生 byte code

    C. java程序经编译后会产生DLL

    D. 以上都不正确

    **答案:B**

    分析:java程序编译后会生成字节码文件,就是.class文件

    **8.下列说法正确的有()**

    A. class中的constructor不可省略

    B. constructor必须与class同名,但方法不能与class同名

    C. constructor在一个对象被new时执行

    D. 一个class只能定义一个constructor

    **答案:C**

    **9.执行如下程序代码()**

    ```java

    a=0;c=0;

    do{

    ——c;

    a=a-1;

    }while(a>0);

    ```

    后,c的值是()

    A. 0

    B. 1

    C. -1

    D. 死循环

    **答案:C**

    do{...}while(...);语句至少执行一次

    **10.下列哪一种叙述是正确的()**

    A. abstract修饰符可修饰字段、方法和类

    B. 抽象方法的body部分必须用一对大括号{}包住

    C. 声明抽象方法,大括号可有可无

    D. 声明抽象方法不可写出大括号

    **答案:D**

    分析: abstract不能修饰字段。既然是抽象方法,当然是没有实现的方法,根本就没有body部分。

    **11.下列语句正确的是()**

    A. 形式参数可被视为local variable

    B. 形式参数可被字段修饰符修饰

    C. 形式参数为方法被调用时,真正被传递的参数

    D. 形式参数不可以是对象

    **答案A:**

    分析:

    A:形式参数可被视为local variable。形参和局部变量一样都不能离开方法。都只有在方法内才会发生作用,也只有在方法中使用,不会在方法外可见。

    B:对于形式参数只能用final修饰符,其它任何修饰符都会引起编译器错误。但是用这个修饰符也有一定的限制,就是在方法中不能对参数做任何修改。 不过一般情况下,一个方法的形参不用final修饰。只有在特殊情况下,那就是:方法内部类。 一个方法内的内部类如果使用了这个方法的参数或者局部变量的话,这个参数或局部变量应该是final。

    C:形参的值在调用时根据调用者更改,实参则用自身的值更改形参的值(指针、引用皆在此列),也就是说真正被传递的是实参。

    D:方法的参数列表指定要传递给方法什么样的信息,采用的都是对象的形式。因此,在参数列表中必须指定每个所传递对象的类型及名字。想JAVA中任何传递对象的场合一样,这里传递的实际上也是引用,并且引用的类型必须正确。

    展开全文
  • java面试题大全 打包 下载资料目录:面试题|____性能优化面试专题|____程序性能优化|____Mysql优化相关问题|____Tomcat优化相关问题.docx|____JVM性能优化相关问题.docx|____消息中间件面试专题|____消息中间件面试...

    java面试题大全 打包 下载

    1791586c7156da658ec70b438ed125ca.png

    资料目录:

    面试题

    |____性能优化面试专题

    |____程序性能优化

    |____Mysql优化相关问题

    |____Tomcat优化相关问题.docx

    |____JVM性能优化相关问题.docx

    |____消息中间件面试专题

    |____消息中间件面试专题.docx

    |____微服务面试专题

    |____微服务篇.docx

    |____数据库面试专题

    |____数据库篇.docx

    |____设计模式面试专题

    |____设计模式面试专题.docx

    |____开源框架面试专题

    |____框架篇.docx

    |____多线程面试专题

    |____多线程面试专题.docx

    |____并发编程面试专题

    |____并发编程面试专题.docx

    |____并发编程.docx

    |____zookeeper面试专题

    |____zookeeper面试专题.docx

    |____Tomcat面试专题

    |____Tomcat面试专题.docx

    |____SQL优化面试专题

    |____SQL优化.docx

    |____Spring面试专题

    |____Spring面试专题.docx

    |____SpringMVC面试专题

    |____SpringMVC面试专题.docx

    |____SpringBoot面试专题

    |____Spring Boot面试专题.docx

    |____Spring Cloud面试专题

    |____Spring Cloud面试专题.docx

    |____Redis面试专题

    |____Redis面试专题.docx

    |____redis面试题.docx

    |____RabbitMQ消息中间件面试专题

    |____RabbitMQ消息中间件面试专题.docx

    |____Nginx面试专题

    |____Nginx面试专题.docx

    |____Netty面试专题

    |____Netty面试专题.docx

    |____Mysql性能优化面试专题

    |____MySQL性能优化的21个最佳实践.docx

    |____mysql面试专题

    |____mysql面试专题.docx

    |____MyBatis面试专题

    |____MyBatis面试专题.docx

    |____MongoDB面试专题

    |____MongoDB面试专题.docx

    |____memcached面试专题

    |____memcached面试专题.docx

    |____Linux面试专题

    |____Linux面试专题.docx

    |____Kafka面试专题

    |____Kafka面试专题.docx

    |____JVM面试专题

    |____JVM面试专题.docx

    |____Dubbo面试专题

    |____Dubbo面试专题.docx

    |____Dubbo面试.docx

    |____BAT面试的Mysql面试55题

    |____MySQL55题答案.docx

    |____BAT80道面试题

    |____数据库.docx

    |____集合框架.docx

    |____多线程,高并发.docx

    |____JVM.docx

    |____ActiveMQ消息中间件面试专题

    |____ActiveMQ消息中间件面试专题.docx

    展开全文
  • 2021春招Java面试题大全(精华一)

    千次阅读 多人点赞 2021-03-02 10:03:03
    本人也刚刚参加完秋招,一直打算把在秋招中遇到的面试常考点做一个总结,但是一直都没着手????。近期,好多朋友都在问我关于秋招春招的事,我也刚好闲来没事,就收集了网上各大博客的精华,并且结合自己所学和理解做...
  • Java 基础高频面试题(2021年最新版)

    万次阅读 多人点赞 2021-03-31 23:39:26
    最新 Java 基础高频面试题
  • 目录前言一、Java面试之MyBatis什么是MyBatis?讲下MyBatis的缓存Mybatis是如何进行分页的?分页插件的原理是什么?简述Mybatis的插件运行原理,以及如何编写一个插件?Mybatis动态sql是做什么的?都有熟些动态sql?能...
  • Java面试笔试题大全

    2021-03-01 10:51:24
    Java面试笔试题大全42、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte...
  • 常见的Java面试题汇总

    2021-03-07 02:43:01
    该楼层疑似违规已被系统折叠隐藏此楼查看此楼二、关于集合1、Java中的集合及其继承关系关于集合的体系是每个人都应该烂熟于心的,尤其是对我们经常使用的List,Map的原理更该如此.2、poll()方法和remove()方法区别?...
  • 主要内容:华为Java笔试题+数据库题一、 单项选择题1.Java是从( )语言改进重新设计。A.Ada B.C++ C.Pasacal D.BASIC 答案:B2.下列语句哪一个正确( )A. Java程序经编译后会产生machine codeB. Java程序经...
  • 100道最新Java面试题,常见面试题及答案汇总

    万次阅读 多人点赞 2021-01-28 15:32:15
    小编特意整理了100道Java面试题,送给大家,希望大家都能顺利通过面试,拿下高薪。赶紧码住吧~~ Q1:Java内部类和子类之间有什么区别? 答案:内部类是指在一个外部类的内部再定义一个类,内部类对外部类有访问权限...
  • 二、回顾整理阿里面试题 基本就这样了,还有一些零星的问题想不起来了,答案也整理出来了。 自我介绍 JVM如何加载一个类的过程,双亲委派模型中有哪些方法? HashMap如何实现的? HashMap和ConcurrentHashMap区别...
  • MyBatis可以使用简单的XML或注解进行配置和原始映射,以将接口和Java的POJO (Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 MyBatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来...
  • 发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 博主已将以下这些面试题整理成了一个Java面试手册,是PDF版的。 一、Java 基础 JDK 和 JRE 有什么...
  • 为大家整理了2021最新的Java面试题及答案下载,这套Java面试题总汇已经汇总了Java基础面试到高级Java面试题,几乎涵盖了作为一个Java程序员在面试中需要掌握或者可能被问到的绝大部分知识点。 额外还为大家整理了一...
  • 2021最新常见Java面试题,常见面试题及答案汇总

    千次阅读 多人点赞 2021-02-04 15:53:41
    备战2022年春季面试Java基础面试题库《收藏》 文档内容包含 消息中间件、Dubbo、JVM、Kafka、Linux、MongoDB、MyBatis、MySQL、Netty、Nginx、Redis、Spring、SpringBoot、SpringCloud、SpringMVC、Zookeeper、并发...
  • 2020java最新面试题及答案

    千次阅读 2021-03-18 10:55:53
    本文收集了一些经典的Java面试题及其答案答:面向对象的特征主要有以下几个方面:抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注...
  • 10万字208道Java经典面试题总结(附答案)

    万次阅读 多人点赞 2021-08-01 16:05:55
    JDK(Java Development Kit),Java开发工具包 JRE(Java Runtime Environment),Java运行环境 JDK中包含JRE,JDK中有一个名为jre的目录,里面包含两个文件夹bin和lib,bin就是JVM,lib就是JVM工作所需要的类库。...
  • 银行笔试题 java笔试题银行笔试题及答案:java笔试题及答案1、作用域public,private,protected,以及不写时的区别答:区别如下:作用域 当前类 同一package 子孙类 其他packagepublic √ √ √...
  • 2021刚开始,很多朋友问题,有没有一些Java基础面试题及答案面试题,最近抽时间整理了一份Java面试题。或许这份面试题还不足以囊括所有 Java 问题,但有了它,我相信足以应对目前市面上绝大部分的 最新Java 面试了,...
  • 一、Java基础面试题 二、Java 集合框架 三、Linux常用指令 四、MySQL基础面试 多线程与多进程面试 常见设计模式 JVM 底层 常用网络协议 常见的数据结构和算法 关注我们,更多技术干货: 2000多G的计算机...
  • 快手面试补充 快手使用的技术栈 涉及的Java相关:常见集合类源码、多线程并发、虚拟机一些特性(如内存分布、垃圾回收)、网络编程(如网络io等等) 数据存储:redis、mysql 消息队列:kafka、rocketmq 计算机...
  • 原标题:【分享】20个高级Java面试题汇总(含答案)什么是可变参数?可变参数允许调用参数数量不同的方法。请看下面例子中的求和方法。此方法可以调用1个int参数,或2个int参数,或多个int参数。 断言的用途?断言是在...
  • 一道面试题 让我们开门见山,直面主题:Dubbo 服务里面有个服务端,还有个消费端你知道吧? 服务端和消费端都各有一个线程池你知道吧? 那么面试题来了:一般情况下,服务提供者比服务消费者多吧。一个服务消费方...
  • 结合网上的资料以及自身面试经历,花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 一、Java基础知识面试题 1、Java概述 ①. 何为编程 编程就是让计算机为解决某个问题而使用某种程序...
  • 2021已经结束了,很多朋友问题,有没有整理去年的一些面试题,最近抽时间整理了一份Java面试题。或许这份面试题还不足以囊括所有 Java 问题,但有了它,我相信足以应对目前市面上绝大部分的 Java 面试了,因为这篇...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 392,946
精华内容 157,178
关键字:

java面试题大全

java 订阅