精华内容
下载资源
问答
  • 2022-01-13 20:22:30

    1. 遍历ArrayList时如何正确移除一个元素

    错误写法示例一:

    public static void remove(ArrayList<String> list) { for (int i = 0; i < list.size(); i++) { String s = list.get(i); if (s.equals("bb")) { list.remove(s); } } }

    错误写法示例二:

    public static void remove(ArrayList<String> list) { for (String s : list) { if (s.equals("bb")) { list.remove(s); } } }

    要分析产生上述错误现象的原因唯有翻一翻jdk的ArrayList源码,先看下ArrayList中的remove方法(注意ArrayList中的remove有两个同名方法,只是入参不同,这里看的是入参为Object的remove方法)是怎么实现的:

    public boolean remove(Object o) { if (o == null) { for (int index = 0; index < size; index++) if (elementData[index] == null) { fastRemove(index); return true; } } else { for (int index = 0; index < size; index++) if (o.equals(elementData[index])) { fastRemove(index); return true; } } return false; }

    按一般执行路径会走到else路径下最终调用faseRemove方法:

    private void fastRemove(int index) { modCount++; int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved); elementData[--size] = null; // Let gc do its work }

    可以看到会执行System.arraycopy方法,导致删除元素时涉及到数组元素的移动。针对错误写法一,在遍历第二个元素字符串bb时因为符合删除条件,所以将该元素从数组中删除,并且将后一个元素移动(也是字符串bb)至当前位置,导致下一次循环遍历时后一个字符串bb并没有遍历到,所以无法删除。 针对这种情况可以倒序删除的方式来避免:

    public static void remove(ArrayList<String> list) { for (int i = list.size() - 1; i >= 0; i--) { String s = list.get(i); if (s.equals("bb")) { list.remove(s); } } }

    因为数组倒序遍历时即使发生元素删除也不影响后序元素遍历。

    而错误二产生的原因却是foreach写法是对实际的Iterable、hasNext、next方法的简写,问题同样处在上文的fastRemove方法中,可以看到第一行把modCount变量的值加一,但在ArrayList返回的迭代器(该代码在其父类AbstractList中):

    public Iterator<E> iterator() { return new Itr(); }

    这里返回的是AbstractList类内部的迭代器实现private class Itr implements Iterator,看这个类的next方法:

    public E next() { checkForComodification(); try { E next = get(cursor); lastRet = cursor++; return next; } catch (IndexOutOfBoundsException e) { checkForComodification(); throw new NoSuchElementException(); } }

    第一行checkForComodification方法:

    final void checkForComodification() { if (modCount != expectedModCount) throw new ConcurrentModificationException(); }

    这里会做迭代器内部修改次数检查,因为上面的remove(Object)方法把修改了modCount的值,所以才会报出并发修改异常。要避免这种情况的出现则在使用迭代器迭代时(显示或foreach的隐式)不要使用ArrayList的remove,改为用Iterator的remove即可。

    public static void remove(ArrayList<String> list) { Iterator<String> it = list.iterator(); while (it.hasNext()) { String s = it.next(); if (s.equals("bb")) { it.remove(); } } }

    2. 说一说ArrayList 的扩容机制吧

    ArrayList扩容的本质就是计算出新的扩容数组的size后实例化,并将原有数组内容复制到新数组中去。

    public boolean add(E e) { //扩容 ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; } private void ensureCapacityInternal(int minCapacity) { ensureExplicitCapacity(calculateCapacity(elementData, minCapacity)); }

    private static int calculateCapacity(Object[] elementData, int minCapacity) { //如果传入的是个空数组则最小容量取默认容量与minCapacity之间的最大值 if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { return Math.max(DEFAULT_CAPACITY, minCapacity); } return minCapacity; } private void ensureExplicitCapacity(int minCapacity) { modCount++; // 如果最小需要空间比elementData的内存空间要大,则需要扩容 // overflow-conscious code if (minCapacity - elementData.length > 0) grow(minCapacity); } private void grow(int minCapacity) { // 获取elementData数组的内存空间长度 int oldCapacity = elementData.length; // 扩容至原来的1.5倍 int newCapacity = oldCapacity + (oldCapacity >> 1); //校验容量是否够 if (newCapacity - minCapacity < 0) newCapacity = minCapacity; //若预设值大于默认的最大值,检查是否溢出 if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); // 调用Arrays.copyOf方法将elementData数组指向新的内存空间 //并将elementData的数据复制到新的内存空间 elementData = Arrays.copyOf(elementData, newCapacity); }

    3. HashMap是怎么解决哈希冲突的

    Hashmap解决hash冲突,使用的是链地址法,即数组+链表的形式来解决。put执行首先判断table[i]位置,如果为空就直接插入,不为空判断和当前值是否相等,相等就覆盖,如果不相等的话,判断是否是红黑树节点,如果不是,就从table[i]位置开始遍历链表,相等覆盖,不相等插入。

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

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

    5. 简述Java中的集合

    1. Collection下:List系(有序、元素允许重复)和Set系(无序、元素不重复) “ set根据equals和hashcode判断,一个对象要存储在Set中,必须重写equals和hashCode方法 ”
    2. Map下:HashMap线程不同步;TreeMap线程同步
    3. Collection系列和Map系列:Map是对Collection的补充,两个没什么关系
    “ 后面的问题,大家可以先自己独立思考一下。 另外我把所有Java相关的面试题和答案都整理出来了,需要的私信,即可免费获取哦!

    6. EnumSet是什么?

    7. 创建String对象的不同方式有哪些?

    8. 为何Map接口不继承Collection接口?

    9. HashMap和Hashtable的区别

    10. ArrayList和HashMap默认大小?

    11. LinkedList的是单向链表还是双向?

    12. 当一个集合被作为参数传递给一个函数时,如何才可以确保函数不能修改它?

    13. 在Java中,HashMap是如何工作的?

    14. TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?

    15. HashSet和TreeSet有什么区别?

    16. String是不可变的有什么好处?

    17. Java集合类框架的最佳实践有哪些?

    18. HashSet是如何保证不重复的

    19. HashMap的实现原理

    20. Iterater和ListIterator之间有什么区别?

    21. 队列和栈是什么,列出它们的区别?

    22. HashMap线程安全吗?

    23. 写一段代码在遍历 ArrayList 时移除一个元素

    24. 有没有有顺序的Map实现类,如果有,他们是怎么保证有序的

    25. ArrayList,Vector,LinkedList的存储性能和特性

    26. 什么是字符串池?

    27. 哪些集合类提供对元素的随机访问?

    28. hashCode()和equals()方法有何重要性?

    29. 我们能否使用任何类作为Map的key?

    30. # 总结

    31. 集合框架中的泛型有什么优点?

    32. ArrayList和Vector有何异同点?

    33. HashMap,HashTable,ConcurrentHash的共同点和区别

    34. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()?

    35. Java中的同步集合与并发集合有什么区别

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

    37. 下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d"

    38. 如果想用Object作为hashMap的Key?;

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

    40. 谈谈线程池阻塞队列吧~

    41. Java集合框架是什么?说出一些集合框架的优点?

    42. 与Java集合框架相关的有哪些最好的实践?

    43. TreeMap底层?

    44. ArrayList和LinkedList有何区别?

    45. 我们如何从给定集合那里创建一个synchronized的集合?

    46. Java中怎么打印数组?

    47. 当一个集合被作为参数传递给一个函数时,如何才可以确保函数不能修改它?

    48. 如何决定选用HashMap还是TreeMap?

    49. HashMap总结

    50. 说出ArrayList,LinkedList的存储性能和特性

    51. Collections类是什么?

    52. Comparator和Comparable的区别?

    53. Iterator和ListIterator的区别是什么?

    54. List、Map、Set三个接口,存取元素时,各有什么特点?

    55. Comparable和Comparator接口有何区别?

    56. Map接口提供了哪些不同的集合视图?

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

    58. 通过迭代器fail-fast属性,你明白了什么?

    59. HashMap和HashTable有何不同?

    60. 为何Iterator接口没有具体的实现?

    61. 如何实现集合排序?

    62. 如何比较两个字符串?

    63. 讲讲红黑树的特点?

    64. 遍历一个List有哪些不同的方式?

    65. 集合框架里实现的通用算法有哪些?

    66. UnsupportedOperationException是什么?

    67. 为何没有像Iterator.add()这样的方法,向集合中添加元素?

    68. 如何实现数组和 List之间的转换?

    69. Collection与Collections的区别是什么?

    70. LinkedHashMap的应用,底层,原理

    71. ArrayList 和 HashMap 的默认大小是多数?

    72. HashMap自动扩容

    73. HashMap在JDK1.7和JDK1.8中有哪些不同?

    74. 什么是String,它是什么数据类型?

    75. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?

    76. ArrayList和Vector的区别

    77. 在迭代一个集合的时候,如何避免ConcurrentModificationException?

    78. 如何判断两个String是否相等?

    79. LinkedHashMap和PriorityQueue的区别

    80. String s = new String("xyz");创建了几个StringObject?是否可以继承String类?

    81. HashMap为什么不直接使用hashCode()处理后的哈希值直接作为table的下标?

    82. Collections.sort和Arrays.sort的实现原理

    83. 为何迭代器没有一个方法可以直接获取下一个元素,而不需要移动游标?

    84. 如何打印数组内容

    85. 大写的O是什么?举几个例子?

    86. 为什么HashMap中String、Integer这样的包装类适合作为key?

    87. 如何将String转换为byte array,反过来呢?

    88. BlockingQueue是什么?

    89. 阻塞队列的实现,ArrayBlockingQueue的底层实现?

    90. 如何分割一个String?

    91. Array和ArrayList有何区别?什么时候更适合用Array?

    92. 如何让一个字符串变成小写或大写形式?

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

    94. 迭代器 Iterator 是什么?怎么用,有什么特点?

    95. fail-fast与fail-safe有什么区别?

    96. ArrayList和LinkedList区别?

    97. String、StringBuffer和StringBuilder区别(类似上一题)

    98. 怎么确保一个集合不能被修改?

    99. Iterator是什么?

    100. ArrayList和LinkedList的区别?

    101. ArrayList集合加入1万条数据,应该怎么提高效率

    102. 为什么要引入SpringBuffer、StringBuilder两种字符串处理类?

    103. HashMap的扩容操作是怎么实现的?

    104. 什么是Java优先级队列(Priority Queue)?

    105. ArrayList和Array有什么区别?

    106. ConcurrentHashMap和Hashtable的区别?

    107. Comparable和Comparator接口是什么?

    108. HashMap 的长度为什么是2的幂次方,以及其他常量定义的含义~

    109. ConcurrenHashMap 原理?1.8 中为什么要用红黑树?

    110. Java集合框架的基础接口有哪些?

    111. Enumeration和Iterator接口的区别?

    112. 我们如何对一组对象进行排序?

    113. WeakHashMap与HashMap的区别是什么?

    114. 如何将String转换为char,反过来呢?

    115. 并发集合类是什么?

    116. poll()方法和remove()方法区别?

    117. Java中的集合及其继承关系

    118. 为何Collection不从Cloneable和Serializable接口继承?

    119. HashMap的put方法的具体流程?

    120. TreeMap的实现原理

    121. 如何对Object的list排序

    122. Array 和 ArrayList 有何区别?

    需要上述最新面试资料的小伙伴们,关注后私信“需要”,即可免费获取哦!

    更多相关内容
  • Java 最常见的 200+ 面试题:面试必备

    万次阅读 多人点赞 2019-07-10 17:41:50
    这份面试清单是从我 2015 年做了 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘在 Java 技术栈中,还有那些知识点是我不知道的,我想找到这些技术盲点,然后修复它,以此来提高自己的...

    这份面试清单是从我 2015 年做了 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘在 Java 技术栈中,还有那些知识点是我不知道的,我想找到这些技术盲点,然后修复它,以此来提高自己的技术水平。虽然我是从 2009 年就开始参加编程工作了,但我依旧觉得自己现在要学的东西很多,并且学习这些知识,让我很有成就感和满足感,那所以何乐而不为呢?

    说回面试的事,这份面试清单本来是只有我们内部使用的,可到后来有很多朋友在微信上联系到我,让我帮他们找一些面试方面的资料,而且这些关系也不太好拒绝,一呢,是因为这些找我的人要么是我的朋友的弟弟妹妹,要么是我的表弟表妹们;二呢,我也不想马马虎虎的对付,俗话说的好“受人之事忠人之命”,不能辜负这份信任。但最后就有了这么一个想法,要不要把我整理的这 200 多道 Java 面试题分享出去,去帮助更多的人。

    说实话刚开始的时候是比较犹豫的,首先这么做会不会有点帮人“作弊”的嫌疑,最后我终于想通了,觉得这未必是一件坏事。

    • 第一:有更多的人因此而学到了更多的知识,这不算是一件坏事,恰好相反。
    • 第二:这只是一种经验的高度提炼,让那些有技术能力的人,学会如何表达自己所掌握的知识,这也是一件好事。
    • 第三:如果只是死记硬背这些面试题,如果面试官能再深入问纠一些细节,也可识破之中的“玄机”。
    • 第四:学习有很多种方式,但只有好学者才会临池学书。如果是不想学的人,无论你提供什么资料,他都会视而不见,我只是为好学者,提供一份自我实现的学习资料而已。

    就像之前听过的一个故事,为什么在美国有些企业只要看你是哈佛的学历就会直接录取你呢?因为在美国上大学还是挺贵的,首先你能上的起哈佛说明你的家境还不错;第二,你能进入哈佛,也说明你脑子不笨;再者就是,哈佛确实能给你提供不错的教育环境。综合以上特质,所以这些企业才敢直接聘请那些有哈佛学历的人。

    所以对应到我们这份面试题也是一样,首先你如果能真的记住其中大部分的答案:第一,说明你的脑子不笨;第二,说明你有上进心,也愿意学习;第三,记住了这份面试题之后,即使你的能力刚开始没有那么好,但有了理论支撑之后,再去工作实践的时候,就有了理论指导,结果也不会太差。

    所以如果您是面试官,恰好又看到这里,如果条件允许的话,请多给这样愿意学又很聪明的年轻人一些机会,即使他们现在并没有太多的实践经验。

    面试题模块介绍

    说了这么多,下面进入我们本文的主题,我们这份面试题,包含的内容了十九了模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示:

    可能对于初学者不需要后面的框架和 JVM 模块的知识,读者朋友们可根据自己的情况,选择对应的模块进行阅读。

    适宜阅读人群

    • 需要面试的初/中/高级 java 程序员
    • 想要查漏补缺的人
    • 想要不断完善和扩充自己 java 技术栈的人
    • java 面试官

    具体面试题

    下面一起来看 208 道面试题,具体的内容。

    一、Java 基础

    1.JDK 和 JRE 有什么区别?

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

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

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

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

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

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

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

    9.如何将字符串反转?

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

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

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

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

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

    15.java 中 IO 流分为几种?

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

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

    二、容器

    18.java 容器都有哪些?

    19.Collection 和 Collections 有什么区别?

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

    21.HashMap 和 Hashtable 有什么区别?

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

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

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

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

    26.如何实现数组和 List 之间的转换?

    27.ArrayList 和 Vector 的区别是什么?

    28.Array 和 ArrayList 有何区别?

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

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

    31.迭代器 Iterator 是什么?

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

    33.Iterator 和 ListIterator 有什么区别?

    34.怎么确保一个集合不能被修改?

    三、多线程

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

    36.线程和进程的区别?

    37.守护线程是什么?

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

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

    40.线程有哪些状态?

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

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

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

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

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

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

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

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

    49.什么是死锁?

    50.怎么防止死锁?

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

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

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

    54.synchronized 和 Lock 有什么区别?

    55.synchronized 和 ReentrantLock 区别是什么?

    56.说一下 atomic 的原理?

    四、反射

    57.什么是反射?

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

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

    60.怎么实现动态代理?

    五、对象拷贝

    61.为什么要使用克隆?

    62.如何实现对象克隆?

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

    六、Java Web

    64.jsp 和 servlet 有什么区别?

    65.jsp 有哪些内置对象?作用分别是什么?

    66.说一下 jsp 的 4 种作用域?

    67.session 和 cookie 有什么区别?

    68.说一下 session 的工作原理?

    69.如果客户端禁止 cookie 能实现 session 还能用吗?

    70.spring mvc 和 struts 的区别是什么?

    71.如何避免 sql 注入?

    72.什么是 XSS 攻击,如何避免?

    73.什么是 CSRF 攻击,如何避免?

    七、异常

    74.throw 和 throws 的区别?

    75.final、finally、finalize 有什么区别?

    76.try-catch-finally 中哪个部分可以省略?

    77.try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

    78.常见的异常类有哪些?

    八、网络

    79.http 响应码 301 和 302 代表的是什么?有什么区别?

    80.forward 和 redirect 的区别?

    81.简述 tcp 和 udp的区别?

    82.tcp 为什么要三次握手,两次不行吗?为什么?

    83.说一下 tcp 粘包是怎么产生的?

    84.OSI 的七层模型都有哪些?

    85.get 和 post 请求有哪些区别?

    86.如何实现跨域?

    87.说一下 JSONP 实现原理?

    九、设计模式

    88.说一下你熟悉的设计模式?

    89.简单工厂和抽象工厂有什么区别?

    十、Spring/Spring MVC

    90.为什么要使用 spring?

    91.解释一下什么是 aop?

    92.解释一下什么是 ioc?

    93.spring 有哪些主要模块?

    94.spring 常用的注入方式有哪些?

    95.spring 中的 bean 是线程安全的吗?

    96.spring 支持几种 bean 的作用域?

    97.spring 自动装配 bean 有哪些方式?

    98.spring 事务实现方式有哪些?

    99.说一下 spring 的事务隔离?

    100.说一下 spring mvc 运行流程?

    101.spring mvc 有哪些组件?

    102.@RequestMapping 的作用是什么?

    103.@Autowired 的作用是什么?

    十一、Spring Boot/Spring Cloud

    104.什么是 spring boot?

    105.为什么要用 spring boot?

    106.spring boot 核心配置文件是什么?

    107.spring boot 配置文件有哪几种类型?它们有什么区别?

    108.spring boot 有哪些方式可以实现热部署?

    109.jpa 和 hibernate 有什么区别?

    110.什么是 spring cloud?

    111.spring cloud 断路器的作用是什么?

    112.spring cloud 的核心组件有哪些?

    十二、Hibernate

    113.为什么要使用 hibernate?

    114.什么是 ORM 框架?

    115.hibernate 中如何在控制台查看打印的 sql 语句?

    116.hibernate 有几种查询方式?

    117.hibernate 实体类可以被定义为 final 吗?

    118.在 hibernate 中使用 Integer 和 int 做映射有什么区别?

    119.hibernate 是如何工作的?

    120.get()和 load()的区别?

    121.说一下 hibernate 的缓存机制?

    122.hibernate 对象有哪些状态?

    123.在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?

    124.hibernate 实体类必须要有无参构造函数吗?为什么?

    十三、Mybatis

    125.mybatis 中 #{}和 ${}的区别是什么?

    126.mybatis 有几种分页方式?

    127.RowBounds 是一次性查询全部结果吗?为什么?

    128.mybatis 逻辑分页和物理分页的区别是什么?

    129.mybatis 是否支持延迟加载?延迟加载的原理是什么?

    130.说一下 mybatis 的一级缓存和二级缓存?

    131.mybatis 和 hibernate 的区别有哪些?

    132.mybatis 有哪些执行器(Executor)?

    133.mybatis 分页插件的实现原理是什么?

    134.mybatis 如何编写一个自定义插件?

    十四、RabbitMQ

    135.rabbitmq 的使用场景有哪些?

    136.rabbitmq 有哪些重要的角色?

    137.rabbitmq 有哪些重要的组件?

    138.rabbitmq 中 vhost 的作用是什么?

    139.rabbitmq 的消息是怎么发送的?

    140.rabbitmq 怎么保证消息的稳定性?

    141.rabbitmq 怎么避免消息丢失?

    142.要保证消息持久化成功的条件有哪些?

    143.rabbitmq 持久化有什么缺点?

    144.rabbitmq 有几种广播类型?

    145.rabbitmq 怎么实现延迟消息队列?

    146.rabbitmq 集群有什么用?

    147.rabbitmq 节点的类型有哪些?

    148.rabbitmq 集群搭建需要注意哪些问题?

    149.rabbitmq 每个节点是其他节点的完整拷贝吗?为什么?

    150.rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况?

    151.rabbitmq 对集群节点停止顺序有要求吗?

    十五、Kafka

    152.kafka 可以脱离 zookeeper 单独使用吗?为什么?

    153.kafka 有几种数据保留的策略?

    154.kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理?

    155.什么情况会导致 kafka 运行变慢?

    156.使用 kafka 集群需要注意什么?

    十六、Zookeeper

    157.zookeeper 是什么?

    158.zookeeper 都有哪些功能?

    159.zookeeper 有几种部署模式?

    160.zookeeper 怎么保证主从节点的状态同步?

    161.集群中为什么要有主节点?

    162.集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗?

    163.说一下 zookeeper 的通知机制?

    十七、MySql

    164.数据库的三范式是什么?

    165.一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?

    166.如何获取当前数据库版本?

    167.说一下 ACID 是什么?

    168.char 和 varchar 的区别是什么?

    169.float 和 double 的区别是什么?

    170.mysql 的内连接、左连接、右连接有什么区别?

    171.mysql 索引是怎么实现的?

    172.怎么验证 mysql 的索引是否满足需求?

    173.说一下数据库的事务隔离?

    174.说一下 mysql 常用的引擎?

    175.说一下 mysql 的行锁和表锁?

    176.说一下乐观锁和悲观锁?

    177.mysql 问题排查都有哪些手段?

    178.如何做 mysql 的性能优化?

    十八、Redis

    179.redis 是什么?都有哪些使用场景?

    180.redis 有哪些功能?

    181.redis 和 memecache 有什么区别?

    182.redis 为什么是单线程的?

    183.什么是缓存穿透?怎么解决?

    184.redis 支持的数据类型有哪些?

    185.redis 支持的 java 客户端都有哪些?

    186.jedis 和 redisson 有哪些区别?

    187.怎么保证缓存和数据库数据的一致性?

    188.redis 持久化有几种方式?

    189.redis 怎么实现分布式锁?

    190.redis 分布式锁有什么缺陷?

    191.redis 如何做内存优化?

    192.redis 淘汰策略有哪些?

    193.redis 常见的性能问题有哪些?该如何解决?

    十九、JVM

    194.说一下 jvm 的主要组成部分?及其作用?

    195.说一下 jvm 运行时数据区?

    196.说一下堆栈的区别?

    197.队列和栈是什么?有什么区别?

    198.什么是双亲委派模型?

    199.说一下类加载的执行过程?

    200.怎么判断对象是否可以被回收?

    201.java 中都有哪些引用类型?

    202.说一下 jvm 有哪些垃圾回收算法?

    203.说一下 jvm 有哪些垃圾回收器?

    204.详细介绍一下 CMS 垃圾回收器?

    205.新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?

    206.简述分代垃圾回收器是怎么工作的?

    207.说一下 jvm 调优的工具?

    208.常用的 jvm 调优的参数都有哪些?

    查看更多面试题及答案:
    在这里插入图片描述

    展开全文
  • 如果要进大厂,算法、底层、项目经验都要刷,猛哥以后会给大家更新各种面试题…… 前面,我们已经整理Spring、设计模式、数据结构和算法的面试题: 插入文章 昨天小伙伴给我说看了面试题,拿到了京东的...

    如果要进大厂,算法、底层、项目经验都要刷,猛哥以后会给大家更新各种面试题……

    如果要进大厂,项目经验、底层算法、网络、数据机构等都要狂刷……

    原来我进大厂之前就是这么干的,刷项目,刷题。

    孟哥以后会给大家更新各种面试资料,走起!

    前面,我们已经整理Spring、设计模式、数据结构和算法、mysql等的面试题:

    1,❤️爆肝!整理了一周的Spring面试大全【含答案】,吊打Java面试官【建议收藏】!❤️

    2,❤️肝完了,一天掌握数据结构和算法面试题,吊打面试官,建议收藏❤️

    3,❤️集合很简单?开什么玩笑?肝了一周,全是精华,万字讲解!面试再不怕集合问题了!!!❤️

    4,肝完了,总结了SpringBoot与缓存的知识点,快速掌握

    5,Mysql面试大全,看完可以吊打面试官!!!

    6,入计算机专业的师弟师妹,别再迷茫了,我整理一份CS的学习路线大全!帮你超越大部分的同学!

    昨天小伙伴给我说看了面试题,拿到了京东的offer,大家继续努力呀。

     

    如果你想进大厂,一定要有非常明确的信念:

    我必须进去!一定进去!

    别犹豫犹豫的,整天自我否定,总有人要赢,赢得人为什么不是我呢???

    我非常欣赏衡水中学的教学模式,我们普通人没有别的逆袭方式,就是努力,就是干!!!!

    废话不多说!

    今天猛哥给大家整理一波Mybatis、SprigMvc、Spring DataJpa的面试题:

    目录

    Mybatis的面试题:

    Q1:Mybatis 的优缺点?

    Q2:Mybatis 的 XML ⽂件有哪些标签属性?

    Q3:Mybatis 的⼀级缓存是什么?

    Q4:Mybatis 的⼆级缓存是什么?

    Q5:Mybatis  #{}和${}的区别?

    Q6、MyBatis实现一对多有几种方式,怎么操作的?

    Spring Data JPA ⾯试题:

    Q1:ORM 是什么?

    Q2:JPA 如何使⽤?

    Q3:JPA 实体类相关注解有哪些?

    Q4:对象导航查询是什么?

    Spring MVC面试题:

    Q1:Spring MVC 的处理流程?

    Q2:Spring MVC 有哪些组件?

    Q3:Spring MVC 的相关注解?

    Spring的面试:

    Q1:AOP 是什么?

    Q2:AOP 的相关注解有哪些?

    Q3:AOP 的相关术语有什么?

    Q4:AOP 的过程?

    Mybatis的面试题:

    Q1:Mybatis 的优缺点?

    优点:

    相⽐ JDBC 减少了⼤量代码量,减少冗余代码。

    使⽤灵活,SQL 语句写在 XML ⾥,从程序代码中彻底分离,降低了耦合度,便于管理。提供 XML 标签,⽀持编写动态 SQL 语句。

    提供映射标签,⽀持对象与数据库的 ORM 字段映射关系。

    缺点:

    SQL 语句编写⼯作量较⼤,尤其是字段和关联表多时。

    SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

    Q2:Mybatis 的 XML ⽂件有哪些标签属性?

    select 、 insert 、 update 、 delete 标签分别对应查询、添加、更新、删除操作。

    parameterType属性表示参数的数据类型,包括基本数据类型和对应的包装类型、String 和 JavaBean 类型,当有多个参数时可以使⽤#的形式表示第 n 个参数。除了基本数据类型都要以全限定类名的形式指定参数类型。

    resultType表示返回的结果类型,包括基本数据类型和对应的包装类型、String 和 Java Bean 类型。

    还可以使⽤把返回结果封装为复杂类型的resultMap。

    Q3:Mybatis 的⼀级缓存是什么?

    ⼀级缓存是 SqlSession 级别,默认开启且不能关闭。

    操作数据库时需要创建 SqlSession 对象,对象中有⼀个 HashMap 存储缓存数据,不同 SqlSession 之间缓存数据区域互不影响。

    ⼀级缓存的作⽤域是 SqlSession 范围的,在同⼀个 SqlSession 中执⾏两次相同的 SQL 语句时,第⼀次执⾏完毕会将结果保存在缓存中,第⼆次查询直接从缓存中获取。

    如果 SqlSession 执行了 DML 操作(insert、update、delete),Mybatis 必须将缓存清空保证数据有效性。

    一级缓存的工作原理如下所示:

    Q4:Mybatis 的⼆级缓存是什么?

    ⼆级缓存是Mapper 级别,默认关闭。

    使⽤二级缓存时多个 SqlSession 使⽤同⼀个 Mapper 的 SQL 语句操作数据库,得到的数据会存在⼆级缓存区,同样使⽤ HashMap 进行数据存储,相⽐于⼀级缓存,⼆级缓存范围更⼤,多个 SqlSession 可以共⽤⼆级缓存,作⽤域是 Mapper 的同⼀个 namespace,不同 SqlSession 两次执⾏相同的namespace 下的 SQL 语句,参数也相等,则第⼀次执行成功后会将数据保存在⼆级缓存中,第⼆次可直接从⼆级缓存中取出数据。

    要使⽤⼆级缓存,需要在全局配置⽂件中配置<setting name="cacheEnabled" value="true"/>,再在对应的映射⽂件中配置⼀个<cache/>标签。

    二级缓存的工作原理是:

     

    Q5:Mybatis  #{}和${}的区别?

    使⽤${}相当于使⽤字符串拼接,存在 SQL 注⼊的⻛险。

    使⽤#{}相当于使用占位符,可以防⽌ SQL 注入,不⽀持使⽤占位符的地⽅就只能使⽤${},典型情况就是动态参数。

    ${}是字符串替换,相当于直接显示数据,#{}是预编译处理,相当于对数据加上双引号,即#是将传入的值当做字符串的形式,先替换为?号,然后调用PreparedStatement的set方法来赋值,而$是将传入的数据直接显示生成sql语句

    --Mybatis在处理#{}时

    select id,name,age from teacher where id =#{id}
    
    当前端把id值1传入到后台的时候,就相当于:
    
    select id,name,age from teacher where id ='1'
    
    
    
    --Mybatis在处理${}时
    
    select id,name,age from teacher where id =${id}
    
    当前端把id值1传入到后台的时候,就相当于:
    
    select id,name,age from teacher where id = 1

    Q6、MyBatis实现一对多有几种方式,怎么操作的?

    A.联合查询:几个表联合查询,只查询一次,通过在resultMap里面配置collection节点配置一对多的类就可以完成。


    B.嵌套查询:是先查一个表,根据这个表里面的结果的外键id去另外一个表里面查询数据,也是通过配置collection,但另外一个表的查询通过select节点配置。

    Spring Data JPA 试题:

    Q1:ORM 是什么?

    ORM 即 Object-Relational Mapping ,表示对象关系映射,映射的不只是对象的值还有对象之间的关系,通过 ORM 就可以把对象映射到关系型数据库中。操作实体类就相当于操作数据库表,可以不再重点关注 SQL 语句。

    Q2:JPA 如何使用?

    只需要持久层接⼝继承 JpaRepository 即可,泛型参数列表中第⼀个参数是实体类类型,第⼆个参数是主键类型。

    运⾏时通过JDKDynamicAopProxy的invoke方法创建了⼀个动态代理对象。

    SimpleJpaRepository , SimpleJpaRepository中封装了JPA的操作,通过 hibernate (封装了

    JDBC)完成数据库操作。

    Q3:JPA 实体类相关注解有哪些?

    @Entity :表明当前类是⼀个实体类。

    @Table:关联实体类和数据库表。

    @Column:关联实体类属性和数据库表中字段。

    @Id:声明当前属性为数据库表主键对应的属性。

    @GeneratedValue : 配置主键⽣成策略。

    @OneToMany:配置⼀对多关系,mappedBy 属性值为主表实体类在从表实体类中对应的属性名。

    @ManyToOne:配置多对⼀关系,targetEntity 属性值为主表对应实体类的字节码。

    @JoinColumn :配置外键关系,name 属性值为外键名称,referencedColumnName 属性值为主表主键名称。

    Q4:对象导航查询是什么?

    通过 get 方法查询⼀个对象的同时,通过此对象可以查询它的关联对象。

    对象导航查询⼀到多默认使⽤延迟加载的形式,关联对象是集合,因此使⽤⽴即加载可能浪费资源。对象导航查询多到⼀默认使⽤⽴即加载的形式, 关联对象是⼀个对象,因此使⽤⽴即加载。

    如果要改变加载方式,在实体类注解配置加上 fetch 属性即可,LAZY 表示延迟加载,EAGER 表示⽴即加载。

    Spring MVC面试题:

    Q1:Spring MVC 的处理流程?

    Web 容器启动时会通知 Spring 初始化容器,加载 Bean 的定义信息并初始化所有单例 Bean,然后遍历容器中的 Bean,获取每⼀个 Controller 中的所有⽅法访问的 URL,将 URL 和对应的 Controller 保存 到⼀个 Map 集合中。

    所有的请求会转发给 DispatcherServlet 前端处理器处理,DispatcherServlet 会请求 HandlerMapping找出容器中被@Controler注解修饰的 Bean 以及被@RequestMapping

    修饰的⽅法和类,⽣成Handler 和 HandlerInterceptor 并以⼀个 HandlerExcutionChain 处理器执⾏链的形式返回。

    之后 DispatcherServlet 使⽤ Handler 找到对应的 HandlerApapter,通过 HandlerApapter 调⽤Handler 的⽅法,将请求参数绑定到⽅法的形参上,执⾏⽅法处理请求并得到 ModelAndView。最后 DispatcherServlet 根据使⽤ ViewResolver 试图解析器对得到的 ModelAndView 逻辑视图进⾏解析得到 View 物理视图,然后对视图渲染,将数据填充到视图中并返回给客户端。

    Q2:Spring MVC 有哪些组件?

    DispatcherServlet :SpringMVC 中的前端控制器,是整个流程控制的核⼼,负责接收请求并转发给对应的处理组件。

    Handler :处理器,完成具体业务逻辑,相当于 Servlet 或 Action。

    HandlerMapping :完成 URL 到 Controller 映射,DispatcherServlet 通过 HandlerMapping 将不同请求映射到不同 Handler。

    HandlerInterceptor :处理器拦截器,是⼀个接口,如果需要完成⼀些拦截处理,可以实现该接口。

    HandlerExecutionChain :处理器执行链,包括两部分内容:Handler 和 HandlerInterceptor。

    HandlerAdapter :处理器适配器,Handler执行业务方法前需要进⾏⼀系列操作,包括表单数据验证、数据类型转换、将表单数据封装到JavaBean等,这些操作都由 HandlerAdapter 完成。 DispatcherServlet 通过 HandlerAdapter 来执⾏不同的 Handler。

    ModelAndView :装载模型数据和视图信息,作为 Handler 处理结果返回给 DispatcherServlet。

    ViewResolver :视图解析器,DispatcherServlet 通过它将逻辑视图解析为物理视图,最终将渲染的结果响应给客户端。

    Q3:Spring MVC 的相关注解?

    @Controller :在类定义处添加,将类交给IoC容器管理。

    @RequtestMapping :将URL请求和业务方法映射起来,在类和⽅法定义上都可以添加该注

    解。 value 属性指定URL请求的实际地址,是默认值。 method 属性限制请求的⽅法类型,包括GET、POST、PUT、DELETE等。如果没有使⽤指定的请求⽅法请求URL,会报405 Method Not Allowed 错误。 params 属性限制必须提供的参数,如果没有会报错。

    @RequestParam :如果 Controller 方法的形参和 URL 参数名⼀致可以不添加注解,如果不⼀致可以使用该注解绑定。value属性表示HTTP请求中的参数名。required 属性设置参数是否必要,默认false。 defaultValue 属性指定没有给参数赋值时的默认值。

    @PathVariable :Spring MVC ⽀持 RESTful风格 URL,通过的绑定。

    Spring的面试:

    Q1:AOP 是什么?

    AOP 即⾯向切⾯编程,简单地说就是将代码中重复的部分抽取出来,在需要执⾏的时候使⽤动态代理技术,在不修改源码的基础上对方法进⾏增强。

    Spring 根据类是否实现接⼝来判断动态代理⽅式,如果实现接⼝会使⽤ JDK 的动态代理,核⼼是 InvocationHandler 接⼝和 Proxy 类,如果没有实现接⼝会使⽤ CGLib 动态代理,CGLib 是在运⾏时动态⽣成某个类的子类,如果某个类被标记为 final,不能使⽤ CGLib 。

    JDK 动态代理主要通过重组字节码实现,首先获得被代理对象的引⽤和所有接口,⽣成新的类必须实现被代理类的所有接⼝,动态生成Java 代码后编译新⽣成的   ⽂件并重新加载到 JVM 运⾏。JDK代理直接写 Class 字节码,CGLib 是采⽤ ASM 框架写字节码,生成代理类的效率低。但是 CGLib 调⽤⽅法的效率⾼,因为 JDK 使⽤反射调用方法,CGLib 使⽤ FastClass 机制为代理类和被代理类各生成⼀个类,这个类会为代理类或被代理类的⽅法⽣成⼀个 index,这个 index 可以作为参数直接定位要调⽤的⽅法。

    常⽤场景包括权限认证、⾃动缓存、错误处理、日志、调试和事务等。

    Q2:AOP 的相关注解有哪些?

    @Aspect :声明被注解的类是⼀个切⾯ Bean。

    @Before :前置通知,指在某个连接点之前执行的通知。

    @After :后置通知,指某个连接点退出时执⾏的通知(不论正常返回还是异常退出)。

    @AfterReturning :返回后通知,指某连接点正常完成之后执行的通知,返回值使⽤returning属性接收。

    @AfterThrowing :异常通知,指⽅法抛出异常导致退出时执行的通知,和 @AfterReturning 只会有⼀个执⾏,异常使用throwing属性接收。

    Q3:AOP 的相关术语有什么?

    Aspect :切⾯,⼀个关注点的模块化,这个关注点可能会横切多个对象。

    Joinpoint :连接点,程序执执过程中的某⼀行为,即业务层中的所有方法。。

    Advice  :通知,指切⾯对于某个连接点所产生的动作,包括前置通知、后置通知、返回后通知、异常通知和环绕通知。

    Pointcut :切入点,指被拦截的连接点,切⼊点⼀定是连接点,但连接点不⼀定是切⼊点。

    Proxy :代理,Spring AOP 中有 JDK 动态代理和 CGLib 代理,目标对象实现了接口时采⽤ JDK 动态代理,反之采用CGLib 代理。

    Target :代理的目标对象,指⼀个或多个切⾯所通知的对象。

    Weaving:织入,指把增强应⽤到目标对象来创建代理对象的过程。

    Q4:AOP 的过程?

    Spring AOP 由 BeanPostProcessor 后置处理器开始,后置处理器可以监听容器触发的 Bean 生命周期事件,向容器注册后置处理器以后,容器中管理的 Bean 就具备了接收 IoC 容器回调事件的能力。BeanPostProcessor 的调用发⽣在 Spring IoC 容器完成 Bean 实例对象的创建和属性的依赖注入后,为 Bean 对象添加后置处理器的入口是initializeBean方法

    Spring 中 JDK 动态代理通过 JdkDynamicAopProxy 调⽤ Proxy 的newInstance方法来⽣成代理类,

    JdkDynamicAopProxy 也实现了 InvocationHandler 接⼝, invoke ⽅法的具体逻辑是先获取应⽤到此⽅法上的拦截器链,如果有拦截器则创建 MethodInvocation 并调⽤其调⽤目标proceed方法。因此 Spring AOP 对目标对象的增强是通过拦截器实现的。

    前面,我们已经整理Spring、设计模式、数据结构和算法、mysql等的面试题:

    1,❤️爆肝!整理了一周的Spring面试大全【含答案】,吊打Java面试官【建议收藏】!❤️

    2,❤️肝完了,一天掌握数据结构和算法面试题,吊打面试官,建议收藏❤️

    3,❤️集合很简单?开什么玩笑?肝了一周,全是精华,万字讲解!面试再不怕集合问题了!!!❤️

    4,肝完了,总结了SpringBoot与缓存的知识点,快速掌握

    5,Mysql面试大全,看完可以吊打面试官!!!

    6,入计算机专业的师弟师妹,别再迷茫了,我整理一份CS的学习路线大全!帮你超越大部分的同学!

    好了,Java面试整理结束,小伙伴们点赞、收藏、评论,一键三连走起呀,下期见~~

    最后,我将面试前用到的资料,都分享下,点击下面的,然后关注弹出的图

    展开全文
  • Java面试题目大汇总(附参考答案)

    万次阅读 多人点赞 2020-09-04 18:40:08
    博主汇总整理了一份我面试之前看的一些Java面试题目,可以说是非常详细! 分享给大家,希望对正在面试Java岗位的朋友有帮助哈~~ (文末附参考答案) Java基础相关面试题目: JDK 和 JRE 有什么区别? == 和 ...

    足足准备了长达3个月的面试,终于在上周拿到了阿里的offer!

    博主汇总整理了一份我面试之前看的一些Java面试题目,可以说是非常详细!

    分享给大家,希望对正在面试Java岗位的朋友有帮助哈~~

    文末附参考答案

    Java基础相关面试题目:

    • JDK 和 JRE 有什么区别?
    • == 和 equals 的区别是什么?
    • 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
    • final 在 java 中有什么作用?
    • java 中的 Math.round(-1.5) 等于多少?
    • String 属于基础的数据类型吗?
    • java 中操作字符串都有哪些类?它们之间有什么区别?
    • String str="i"与 String str=new String("i")一样吗?
    • 如何将字符串反转?
    • String 类的常用方法都有那些?
    • 抽象类必须要有抽象方法吗?
    • 普通类和抽象类有哪些区别?
    • 抽象类能使用 final 修饰吗?
    • 接口和抽象类有什么区别?
    • java 中 IO 流分为几种?
    • BIO、NIO、AIO 有什么区别?
    • Files的常用方法都有哪些?

    容器相关面试题目:

    • java 容器都有哪些?
    • Collection 和 Collections 有什么区别?
    • List、Set、Map 之间的区别是什么?
    • HashMap 和 Hashtable 有什么区别?
    • 如何决定使用 HashMap 还是 TreeMap?
    • 说一下 HashMap 的实现原理?
    • 说一下 HashSet 的实现原理?
    • ArrayList 和 LinkedList 的区别是什么?
    • 如何实现数组和 List 之间的转换?
    • ArrayList 和 Vector 的区别是什么?
    • Array 和 ArrayList 有何区别?
    • 在 Queue 中 poll()和 remove()有什么区别?
    • 哪些集合类是线程安全的?
    • 迭代器 Iterator 是什么?
    • Iterator 怎么使用?有什么特点?
    • Iterator 和 ListIterator 有什么区别?
    • 怎么确保一个集合不能被修改?

    多线程相关面试题目

    • 并行和并发有什么区别?
    • 线程和进程的区别?
    • 守护线程是什么?
    • 创建线程有哪几种方式?
    • 说一下 runnable 和 callable 有什么区别?
    • 线程有哪些状态?
    • sleep() 和 wait() 有什么区别?
    • notify()和 notifyAll()有什么区别?
    • 线程的 run()和 start()有什么区别?
    • 创建线程池有哪几种方式?
    • 线程池都有哪些状态?
    • 线程池中 submit()和 execute()方法有什么区别?
    • 在 java 程序中怎么保证多线程的运行安全?
    • 多线程锁的升级原理是什么?
    • 什么是死锁?
    • 怎么防止死锁?
    • ThreadLocal 是什么?有哪些使用场景?
    • 说一下 synchronized 底层实现原理?
    • synchronized 和 volatile 的区别是什么?
    • synchronized 和 Lock 有什么区别?
    • synchronized 和 ReentrantLock 区别是什么?
    • 说一下 atomic 的原理?

    反射相关面试题目:

    • 什么是反射?
    • 什么是 java 序列化?什么情况下需要序列化?
    • 动态代理是什么?有哪些应用?
    • 怎么实现动态代理?

    对象拷贝相关面试题目:

    • 为什么要使用克隆?
    • 如何实现对象克隆?
    • 深拷贝和浅拷贝区别是什么?

    Java Web相关面试题目:

    • jsp 和 servlet 有什么区别?
    • jsp 有哪些内置对象?作用分别是什么?
    • 说一下 jsp 的 4 种作用域?
    • session 和 cookie 有什么区别?
    • 说一下 session 的工作原理?
    • 如果客户端禁止 cookie 能实现 session 还能用吗?
    • spring mvc 和 struts 的区别是什么?
    • 如何避免 sql 注入?
    • 什么是 XSS 攻击,如何避免?
    • 什么是 CSRF 攻击,如何避免?

    异常相关面试题目:

    • throw 和 throws 的区别?
    • final、finally、finalize 有什么区别?
    • try-catch-finally 中哪个部分可以省略?
    • try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
    • 常见的异常类有哪些?

    网络相关面试题目:

    • http 响应码 301 和 302 代表的是什么?有什么区别?
    • forward 和 redirect 的区别?
    • 简述 tcp 和 udp的区别?
    • tcp 为什么要三次握手,两次不行吗?为什么?
    • 说一下 tcp 粘包是怎么产生的?
    • OSI 的七层模型都有哪些?
    • get 和 post 请求有哪些区别?
    • 如何实现跨域?
    • 说一下 JSONP 实现原理?

    设计模式相关面试题目:

    • 说一下你熟悉的设计模式?
    • 简单工厂和抽象工厂有什么区别?

    Spring/Spring MVC相关面试题目:

    • 为什么要使用 spring?
    • 解释一下什么是 aop?
    • 解释一下什么是 ioc?
    • spring 有哪些主要模块?
    • spring 常用的注入方式有哪些?
    • spring 中的 bean 是线程安全的吗?
    • spring 支持几种 bean 的作用域?
    • spring 自动装配 bean 有哪些方式?
    • spring 事务实现方式有哪些?
    • 说一下 spring 的事务隔离?
    • 说一下 spring mvc 运行流程?
    • spring mvc 有哪些组件?
    • @RequestMapping 的作用是什么?
    • @Autowired 的作用是什么?

    Spring Boot/Spring Cloud相关面试题目:

    • 什么是 spring boot?
    • 为什么要用 spring boot?
    • spring boot 核心配置文件是什么?
    • spring boot 配置文件有哪几种类型?它们有什么区别?
    • spring boot 有哪些方式可以实现热部署?
    • jpa 和 hibernate 有什么区别?
    • 什么是 spring cloud?
    • spring cloud 断路器的作用是什么?
    • spring cloud 的核心组件有哪些?

    Hibernate相关面试题目:

    • 为什么要使用 hibernate?
    • 什么是 ORM 框架?
    • hibernate 中如何在控制台查看打印的 sql 语句?
    • hibernate 有几种查询方式?
    • hibernate 实体类可以被定义为 final 吗?
    • 在 hibernate 中使用 Integer 和 int 做映射有什么区别?
    • hibernate 是如何工作的?
    • get()和 load()的区别?
    • 说一下 hibernate 的缓存机制?
    • hibernate 对象有哪些状态?
    • 在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?
    • hibernate 实体类必须要有无参构造函数吗?为什么?

    Mybatis相关面试题目:

    • mybatis 中 #{}和 ${}的区别是什么?
    • mybatis 有几种分页方式?
    • RowBounds 是一次性查询全部结果吗?为什么?
    • mybatis 逻辑分页和物理分页的区别是什么?
    • mybatis 是否支持延迟加载?延迟加载的原理是什么?
    • 说一下 mybatis 的一级缓存和二级缓存?
    • mybatis 和 hibernate 的区别有哪些?
    • mybatis 有哪些执行器(Executor)?
    • mybatis 分页插件的实现原理是什么?
    • mybatis 如何编写一个自定义插件?

    RabbitMQ相关面试题目:

    • rabbitmq 的使用场景有哪些?
    • rabbitmq 有哪些重要的角色?
    • rabbitmq 有哪些重要的组件?
    • rabbitmq 中 vhost 的作用是什么?
    • rabbitmq 的消息是怎么发送的?
    • rabbitmq 怎么保证消息的稳定性?
    • rabbitmq 怎么避免消息丢失?
    • 要保证消息持久化成功的条件有哪些?
    • rabbitmq 持久化有什么缺点?
    • rabbitmq 有几种广播类型?
    • rabbitmq 怎么实现延迟消息队列?
    • rabbitmq 集群有什么用?
    • rabbitmq 节点的类型有哪些?
    • rabbitmq 集群搭建需要注意哪些问题?
    • rabbitmq 每个节点是其他节点的完整拷贝吗?为什么?
    • rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况?
    • rabbitmq 对集群节点停止顺序有要求吗?

    Kafka相关面试题目:

    • kafka 可以脱离 zookeeper 单独使用吗?为什么?
    • kafka 有几种数据保留的策略?
    • kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理?
    • 什么情况会导致 kafka 运行变慢?
    • 使用 kafka 集群需要注意什么?

    Zookeeper相关面试题目:

    • zookeeper 是什么?
    • zookeeper 都有哪些功能?
    • zookeeper 有几种部署模式?
    • zookeeper 怎么保证主从节点的状态同步?
    • 集群中为什么要有主节点?
    • 集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗?
    • 说一下 zookeeper 的通知机制?

    MySql相关面试题目:

    • 数据库的三范式是什么?
    • 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?
    • 如何获取当前数据库版本?
    • 说一下 ACID 是什么?
    • char 和 varchar 的区别是什么?
    • float 和 double 的区别是什么?
    • mysql 的内连接、左连接、右连接有什么区别?
    • mysql 索引是怎么实现的?
    • 怎么验证 mysql 的索引是否满足需求?
    • 说一下数据库的事务隔离?
    • 说一下 mysql 常用的引擎?
    • 说一下 mysql 的行锁和表锁?
    • 说一下乐观锁和悲观锁?
    • mysql 问题排查都有哪些手段?
    • 如何做 mysql 的性能优化?

    Redis相关面试题目:

    • redis 是什么?都有哪些使用场景?
    • redis 有哪些功能?
    • redis 和 memecache 有什么区别?
    • redis 为什么是单线程的?
    • 什么是缓存穿透?怎么解决?
    • redis 支持的数据类型有哪些?
    • redis 支持的 java 客户端都有哪些?
    • jedis 和 redisson 有哪些区别?
    • 怎么保证缓存和数据库数据的一致性?
    • redis 持久化有几种方式?
    • redis 怎么实现分布式锁?
    • redis 分布式锁有什么缺陷?
    • redis 如何做内存优化?
    • redis 淘汰策略有哪些?
    • redis 常见的性能问题有哪些?该如何解决?

    JVM相关面试题目:

    • 说一下 jvm 的主要组成部分?及其作用?
    • 说一下 jvm 运行时数据区?
    • 说一下堆栈的区别?
    • 队列和栈是什么?有什么区别?
    • 什么是双亲委派模型?
    • 说一下类加载的执行过程?
    • 怎么判断对象是否可以被回收?
    • java 中都有哪些引用类型?
    • 说一下 jvm 有哪些垃圾回收算法?
    • 说一下 jvm 有哪些垃圾回收器?
    • 详细介绍一下 CMS 垃圾回收器?
    • 新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?
    • 简述分代垃圾回收器是怎么工作的?
    • 说一下 jvm 调优的工具?
    • 常用的 jvm 调优的参数都有哪些?

    参考答案:

    博主已将上面这些面试题及答案汇总整理成了一份PDF文档:

    百度云链接: https://pan.baidu.com/s/1bGEUmw1IGyGOH94saokcpA

    提取码: 3jw1

    如果上边的百度云链接过期失效了的话大家关注我的微信公众号:Java团长,然后回复“面试题目”也可以获取的哈~ 

    推荐阅读:

    展开全文
  • 1.笔试常见的问题? 面试常见的问题上面给的面试题链接基本都有。我只提几点: ...问Java基础知识 问项目 情景问题,例如:你的一个功能上了生产环境后,服务器压力骤增,该怎么排查。 你有什么想问面试官的
  • 几乎包含所有java面试题及答案
  • java面试题大全(整理版)

    万次阅读 多人点赞 2018-03-04 12:53:51
    这几天在网上搜集各种java面试题:一是为了自己能复习方便,二是为了分享给大家~~题目都是来自网上大佬的分享,感谢大佬们的贡献~~(持续更新中...)1、面向对象的特征有哪些方面?- 抽象:抽象是将一类对象的共同...
  • JAVA经典面试题附答案(持续更新版)

    万次阅读 多人点赞 2019-01-18 01:31:16
    JAVA基础 JAVA中的几种基本类型,各占用多少字节? 下图单位是bit,非字节 1B=8bit String能被继承吗?为什么? 不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变。平常我们...
  • Java面试题大全带答案

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

    万次阅读 多人点赞 2020-08-04 23:56:28
    2012年毕业,2016年转行,没有一个体面的工作,机缘巧合之下,来到了大连,Java培训,一个全新的领域,迷茫、困惑、漫无目的的努力,转行真的被歧视,真的不行吗?我命由我不由天,我觉得我行!相信我,只要你足够...
  • 2020最新Java面试题(常见面试题及答案汇总)

    万次阅读 多人点赞 2020-02-18 09:19:53
    Java基础篇 1. JDK 和 JRE 的区别是什么? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了...
  • Java面试题全集(上)

    万次阅读 多人点赞 2015-04-08 17:14:00
    2013年年底的时候,我看到了网上流传的一个叫做《Java面试题大全》的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是错误的,于是我花了半个月时间对这个所谓的《Java面试...
  • java面试题目面试题目

    2016-09-12 12:09:49
    Robin和Lily非常喜欢开车,他们经常讨论谁开的更好更快。现在有一条公路,起点 是0公里,终点是100公里。这条公路被划分为N段,每一段有不同的限速。现在他们从A公里处开始,到B公里处结束。请帮他们计算在不超过...
  • 以下就是一个面试的全部过程,分享出来给感兴趣的朋友们一看。 一面: 阿里巴巴面试答案文末可以领取! 1. 触发新生代GC,如果存活对象总量大于survivor区容量,咋办 2. 如果任务很多,线程池的阻塞队列会撑爆内存的...
  • JAVA面试题目

    热门讨论 2014-01-19 22:49:21
    经典的JAVA基础面试题目,非常适合初学者,通过前辈们面试的经验总结出来的,个人觉得还很好,基本上涵盖了
  • 先罗列本篇文章包含的Java 常见面试的主题: 一、Java基础面试题 二、Java 集合框架 三、Linux常用指令 四、MySQL基础面试 多线程与多进程面试 常见设计模式 JVM 底层 常用网络协议 常见的数据结构和算法...
  • 发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ Java面试永远是程序员迈向成功的第一个门槛,想要面试成功,各种面试题的洗礼是必不可少的,下面就来...
  • 最新美团Java面试题目(共3面)

    千次阅读 2020-05-18 08:18:37
    一面 线程池用过哪些,线程池有哪些参数,然后问我几个常用线程池的用法和实际场景问题。 集合框架的知识,hashmap,ArrayList,LinkedList源码相关知识,基本整个介绍了一遍,与... java中同步、volatil...
  • 进大厂是大部分程序员的梦想,而进大厂的门槛也是比较高的,所以这里整理了一份阿里、美团、滴滴、头条等大厂面试大全,其中概括的知识点有:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、 ...
  • 面试官的问题:问看到简历中的项目,简单介绍一下用到的框架答这个项目主要是学校实训的项目,给的选题去做的,使用到了SSH的三个框架。其中Spring主要使用了IoC功能,利用Spring的Bean容器去管理action、实体类、...
  • java面试题目

    2018-06-17 08:54:00
    程序员面试题目,谷歌程序员面试认证,从笔试到面试,本身谷歌程序员的门槛还是比较高的,所以要好好学习他人经验
  • java面试题目精选

    2018-03-07 17:28:42
    本资源只是业余学习之用,如有涉及侵权,还请其他告知,谢谢
  • 最新java面试题目.docx

    2021-10-01 00:13:38
    最新java面试题目.docx
  • Java面试题目

    2017-11-05 19:59:15
    Java全栈开发面试例题,详细的Java全栈从基础知识到难点知识例题的讲解还有非常详细的答案,这样的java全栈面试例题会让你的面试更加的简单,详细更加容易通过的。
  • java面试题目.docx

    2020-07-04 11:53:03
    一些面试题目、主要是对于java初级人员的面试适用。
  • Java面试复习体系总结(2021版,持续更新)

    万次阅读 多人点赞 2021-01-14 11:43:47
    Java面试复习体系总结(2021版) 一、Java基础 内容 Java基础(一):Java集合框架(超详细解析,看完面试不再怕) Java基础(二):迭代器(Iterator)(含使用方法详解) Java基础 (三):LinkedList...
  • 经典的Java面试题目

    2013-03-17 10:17:45
    很多经典的java面试题目,经常考到,对最近想提高java面试成绩有一定帮助
  • Java基础面试题整理

    万次阅读 多人点赞 2019-02-08 09:09:06
    三者没有任何相关性,遇到有问着问题的面试官就拖出去砍了吧.final是一个修饰符,用于修饰变量,方法和类.如果 final 修饰变量,意味着该变量的值在初始化后不能被改变. finalize() 方法是在对象被回收之前调用的方法,给...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,300
精华内容 35,720
关键字:

java面试题目

java 订阅
友情链接: 库函数版.rar