自做 Java 面试题
持续收藏的面试题
分享自己的做题答案(不喜欢重复造轮子,会引用好的帖子)
告别面试前的临时抱佛脚
有好的问题可以留言一起讨论、解答
ConstXiong
记录编程实践...
展开
-
异常的设计原则有哪些?
不要将异常处理用于正常的控制流 对可以恢复的情况使用受检异常,对编程错误使用运行时异常 避免不必要的使用受检异常 优先使用标准的异常 每个方法抛出的异常都要有文档 保持异常的原子性 不要在 catch 中忽略掉捕获到的异常【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生...原创 2020-01-15 09:26:00 · 358 阅读 · 0 评论 -
运行时异常与受检异常有何异同?
异常表示程序运行过程中可能出现的非正常状态运行时异常,表示程序代码在运行时发生的异常,程序代码设计的合理,这类异常不会发生 受检异常跟程序运行的上下文环境有关,即使程序设计无误,仍然可能因使用的问题而引发 Java编译器要求方法必须声明抛出可能发生未被捕获的受检异常,不要求必须声明抛出运行时异常【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编...原创 2020-01-15 09:22:39 · 1304 阅读 · 0 评论 -
如何决定使用HashMap还是TreeMap?
HashMap基于散列桶(数组和链表)实现;TreeMap基于红黑树实现。 HashMap不支持排序;TreeMap默认是按照Key值升序排序的,可指定排序的比较器,主要用于存入元素时对元素进行自动排序。 HashMap大多数情况下有更好的性能,尤其是读数据。在没有排序要求的情况下,使用HashMap。都是非线程安全。进一步分析:https://blog.csdn.net/xl...原创 2020-01-12 01:38:55 · 3303 阅读 · 0 评论 -
Unsupported major.minor version 52是什么造成的,如何解决?
造成的原因是工程中存在 jar 包编译时所用的 JDK 版本高于工程 build path 中 JDK 的版本。这里的 version 52 对应 JDK 版本是 1.8,将项目的 build path 中 JDK 的版本调整为高于或等于 1.8 即可。【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构...原创 2020-01-10 11:03:41 · 1368 阅读 · 0 评论 -
Java中如何进行异常处理?throws、throw、try、catch、finally分别如何使用?
把各种不同的异常进行分类 每个异常都是一个对象,是 Throwable 或其子类的实例 一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用对象的方法可以捕获到这个异常并进行处理 Java 中的异常处理通过 5 个关键词实现:throw、throws、try、catch 和 finally 定义方法时,可以使用 throws 关键字抛出异常 方法体内使用 thr...原创 2020-01-10 11:04:48 · 593 阅读 · 0 评论 -
OutOfMemoryError的原因有哪些?怎么解决?
OutOfMemoryError 分为多种不同的错误:Java heap space原因:JVM 中 heap 的最大值不满足需要解决:调高 heap 的最大值,-Xmx 的值调大如果程序存在内存泄漏,增加 heap 空间也只是推迟该错误出现的时间而已,要检查程序是否存在内存泄漏GC overhead limit exceeded原因:JVM 在 GC 时,对象过多,...原创 2020-01-09 09:28:28 · 638 阅读 · 0 评论 -
列举一些列举常见的运行时异常
运行时异常都是 RuntimeException 子类异常NullPointerException - 空指针异常 ClassCastException - 类转换异常 IndexOutOfBoundsException - 下标越界异常 ArithmeticException - 计算异常 IllegalArgumentException - 非法参数异常 NumberFormat...原创 2020-01-09 09:27:24 · 1684 阅读 · 0 评论 -
统计一段长字符串中某字符串的出现次数
截取字符串统计字符串出现次数 通过替换字符串,统计字符串出现次数 通过正则表达式,统计字符串出现次数package constxiong.interview;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 统计一段长字符串中某字符串的出现次数 * @author ConstXiong...原创 2020-01-08 09:37:58 · 1186 阅读 · 2 评论 -
统计某字符串在文件中出现的次数
有几点注意事项:默认文件里的字符串是按行进行统计的,如果字符串存在跨行的情况,那需要考虑把字符串进行拼接、去除换行符。这里未考虑 字符串里出现的字符串的次数的问题可以使用: indexOf 方法配合 substring 方法获取;正则表达匹配;替换指定单词未空,通过缩减长度 / 单词长度,即未次数。这里只用正则实现package constxiong.interview;import...原创 2020-01-08 09:36:41 · 1430 阅读 · 0 评论 -
一个不包含相同元素的整数集合,返回所有可能的不重复子集集合
package constxiong.interview;import java.util.ArrayList;import java.util.List;/** * 一个不包含相同元素的整数集合,返回所有可能的不重复子集集合 * * @author ConstXiong * @date 2019-11-06 14:09:49 */public class TestGet...原创 2020-01-07 09:19:29 · 729 阅读 · 0 评论 -
单向链表的反转
单向链表反转一般有两种实现思路:循环遍历 递归代码如下:package constxiong.interview;import constxiong.interview.SingleLinkedList.Node;/** * 反转单向列表 * * @author ConstXiong * @date 2019-11-06 11:04:12 */public cl...原创 2020-01-07 09:17:11 · 261 阅读 · 0 评论 -
合并两个有序的链表
先自己实现一个单向的链表package constxiong.interview;/** * 单向链表 * @author ConstXiong * @param <E> */class SingleLinkedList<E> { int size = 0; Node<E> first; Node<E> last;...原创 2020-01-06 09:29:33 · 276 阅读 · 0 评论 -
常见加密算法有哪些?是否对称?
常用的对称加密算法:DES、AES、3DES、RC2、RC4 常用的非对称加密算法:RSA、DSA、ECC 单向散列函数的加密算法:MD5、SHA【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生成 Linux MySQL Oracle Redis Dubbo...原创 2020-01-06 09:28:04 · 6439 阅读 · 0 评论 -
使用递归输出某个目录下所有子目录和文件
package constxiong.interview;import java.io.File;/** * 使用递归输出某个目录下所有子目录和文件 * @author ConstXiong * @date 2019-10-23 15:16:32 */public class TestPrintDirAndFiles { public static void main(St...原创 2020-01-05 11:28:44 · 813 阅读 · 0 评论 -
如何进行复杂度分析?
时间复杂度分析:1、大 O 复杂度表示法:T(n) = O(f(n)),公式中的 O,表示代码的执行时间 T(n) 与 f(n) 表达式成正比只关注循环执行次数最多的一段代码 总复杂度等于量级最大的那段代码的复杂度 嵌套代码的复杂度等于嵌套内外代码复杂度的乘积2、最坏情况时间复杂度:代码在最理想情况下执行的时间复杂度3、最好情况时间复杂度:代码在最坏情况下执行的时间复杂度4、平均...原创 2020-01-05 11:26:41 · 515 阅读 · 0 评论 -
什么是时间复杂度?什么是空间复杂度?
时间复杂度的全称是渐进时间复杂度(asymptotic time complexity),表示算法的执行时间与数据规模之间的增长关系。 空间复杂度全称就是渐进空间复杂度(asymptotic space complexity),表示算法的存储空间与数据规模之间的增长关系。【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架...原创 2020-01-04 10:16:49 · 974 阅读 · 0 评论 -
什么是复杂度?为什么要进行复杂度分析?
复杂度复杂度也叫渐进复杂度,包括时间复杂度和空间复杂度,用来分析算法执行效率与数据规模之间的增长关系,可以粗略地表示,越高阶复杂度的算法,执行效率越低。 复杂度描述的是算法执行时间或占用内存空间随数据规模的增长关系。为什么要进行复杂度分析?借助复杂度分析,有利于编写出性能更优的代码,降低成本。 复杂度分析不依赖执行环境、成本低、效率高、易操作、指导性强,是一套理论方法。...原创 2020-01-04 10:15:45 · 2372 阅读 · 0 评论 -
什么是递归?递归的优缺点是什么?
递归:直接或间接调用自身算法的过程满足使用递归的条件:子问题为同类事物,且更简单 必须有个出口优点:代码简洁 符合思维习惯,容易理解缺点:效率较低 递归层次太深,耗内存且容易栈溢出一定要使用的话,最好使用缓存避免相同的计算,限制递归调用的次数【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法...原创 2020-01-04 10:14:25 · 4440 阅读 · 0 评论 -
什么是UML?
UML是统一建模语言,Unified Modeling Language的缩写 综合了面向对象的建模语言、方法和过程,是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持 可以帮助沟通与交流、辅助应用设计、文档的生成、阐释系统的结构和行为 定义了多种图形化的符号来描述软件系统部分或全部的静态结构和动态结构 包括:用例图(use case diagram)、...原创 2019-12-27 09:17:20 · 561 阅读 · 0 评论 -
为什么Java中一个类可以实现多个接口,但只能继承一个类?
多继承会产生钻石问题(菱形继承)类 B 和类 C 继承自类 A,且都重写了类 A 中的同一个方法 类 D 同时继承了类 B 和类 C 对于类 B、C 重写的类 A 中的方法,类 D 会继承哪一个?这里就会产生歧义 考虑到这种二义性问题,Java 不支持多重继承Java 支持类实现多接口接口中的方法是抽象的,一个类实现可以多个接口 假设这些接口中存在相同方法(方法名与参数相同),...原创 2019-12-27 09:16:10 · 10939 阅读 · 1 评论 -
常见的HTTP协议状态码?
2xx:表示请求已被成功接收、理解、接受200(成功) 服务器已成功处理了请求。这个状态码对servlet是缺省的,如果没有调用setStatus方法的话,就会得到 200 204(无内容) 服务器成功处理了请求,未返回任何内容 205(重置内容) 服务器成功处理了请求,未返回任何内容,重置文档视图,如清除表单内容 206(部分内容) 服务器成功处理了部分 GET 请求3xx:重...原创 2019-12-26 09:12:57 · 411 阅读 · 0 评论 -
如何配置一个servlet?
web工程中的web.xml文件:<servlet> <servlet-name></servlet-name> <servlet-class></servlet-class></servlet><servlet-mapping> <servlet-name></servlet-n...原创 2019-12-26 09:12:02 · 584 阅读 · 0 评论 -
jQuery中get与eq方法的区别
get() 返回的是一个 html 对象 eq() 返回的是一个 jQuery 对象【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生成 Linux MySQL Oracle Redis Dubbo...原创 2019-12-26 09:10:44 · 443 阅读 · 0 评论 -
Servlet中的doPost和doGet方法有什么区别?传递和获取参数上有什么区别?
区别:doPost 用来处理 post 请求,doGet 用来处理 get 请求参数:传递的参数相同的都是 HttpServletRequest 和 HttpServletResponse【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生成 Linux MySQL Ora...原创 2019-12-26 09:09:40 · 1591 阅读 · 0 评论 -
JavaScript中null、undefined有什么区别?
赋值:null 表示定义了但未赋值,undefined 表示未定义 数据转换:null 在做数值转换时会被转换为 0,undefined 会被转换为 NaN【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生成 Linux MySQL Oracle Redis Dubbo...原创 2019-12-25 09:13:23 · 397 阅读 · 0 评论 -
div居中和内容居中的css属性设置
Div居中:margin:auto 0px; 内容居中:text-align:center;【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生成 Linux MySQL Oracle Redis Dubbo...原创 2019-12-25 09:12:31 · 499 阅读 · 0 评论 -
jQuery中有哪些选择器?
基本选择器 层次选择器 基本过滤选择器 内容过滤选择器 可见性过滤选择器 属性过滤选择器 子元素过滤选择器 表单选择器 表单过滤选择器【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生成 Linux MySQL Oracle Redis Dubbo...原创 2019-12-25 09:11:33 · 396 阅读 · 0 评论 -
Javascript正则表达式使用方式有哪些?
一、字面量的形式var expression = /pattern/flags;flags参数i:忽略大小写g:全局匹配gi:全局匹配+忽略大小写二、使用 RegExp 对象var reg = new RegExp(expression, destStr);RegExp.$1 是 RegExp 的一个属性,指的是与正则表达式匹配的第一个子匹配(以括号为标志)字符串。...原创 2019-12-25 09:10:45 · 447 阅读 · 0 评论 -
写一些常见的Javascript正则表达式?
身份证:/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/ 数字:/[0-9]/ 英文:/^[a-z]+$/i 中文:/[\u4e00-\u9fa5]/gm 数字逗号:/^[\d,]*$/ 手机号:/^[1][3,4,5,7,8][0-9]{9}$/ 新能源车牌(长度为8):/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z...原创 2019-12-25 09:09:42 · 838 阅读 · 0 评论 -
body中的onload事件和document.ready()有什么区别?
onload 表示页面包含图片等文件在内的所有元素都加载完成 ready 表示文档结构已经加载完成,不包含图片等非文字媒体文件来一道刷了进BAT的面试题?...原创 2019-12-25 09:08:48 · 901 阅读 · 0 评论 -
HTML、CSS、Javascript在Web开发中的作用?
HTML:Hyper Text Markup Language,超文本标记语言,是用来描述网页的一种语言 CSS:Cascading Style Sheets,层叠样式表,控制如何显示 HTML 元素 JavaScript,一种脚本语言,脚本代码无需编译,在浏览器或 JS 容器可以直接解释执行页面中HTML 定义结构 CSS 控制显示样式 JavaScript 给页面加入各种操...原创 2019-12-25 09:08:12 · 4242 阅读 · 0 评论 -
JavaScript中null、undefined有什么区别?
赋值:null 表示定义了但未赋值,undefined 表示未定义 数据转换:null 在做数值转换时会被转换为 0,undefined 会被转换为 NaN【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生成 Linux MySQL Oracle Redis Dubbo...原创 2019-12-19 09:11:06 · 364 阅读 · 0 评论 -
Java中实现线程通信方式有哪些?
对象的 wait(long timeout)、wait(long timeout, int nanos)、wait() 方法,组合对象的 notify()、notifyAll() 显示锁:Lock.newCondition()、Condition await 系列方法、Condition signal()、signalAll() 信号量:Semaphore acquire 系列方法、relea...原创 2019-12-18 09:29:33 · 498 阅读 · 0 评论 -
说说对于sychronized同步锁的理解
每个 Java 对象都有一个内置锁 线程运行到非静态的 synchronized 同步方法上时,自动获得实例对象的锁 持有对象锁的线程才能运行 synchronized 同步方法或代码块时 一个对象只有一个锁 一个线程获得该锁,其他线程就无法获得锁,直到第一个线程释放锁。任何其他线程都不能进入该对象上的 synchronized 方法或代码块,直到该锁被释放。 释放锁是指持锁线程退出了 ...原创 2019-12-18 09:25:58 · 457 阅读 · 0 评论 -
线程的run()方法和start()方法有什么区别?
启动一个线程需要调用 Thread 对象的 start() 方法 调用线程的 start() 方法后,线程处于可运行状态,此时它可以由 JVM 调度并执行,这并不意味着线程就会立即运行 run() 方法是线程运行时由 JVM 回调的方法,无需手动写代码调用 直接调用线程的 run() 方法,相当于在调用线程里继续调用方法,并未启动一个新的线程【Java面试题与答案】整理推荐基础与...原创 2019-12-18 09:24:32 · 987 阅读 · 0 评论 -
说说与线程相关的方法
加锁对象的 wait() 方法,使一个线程处于等待状态,并且释放所持有的对象的锁 加锁对象的 notify() 方法,由 JVM 唤醒一个处于等待状态的线程,具体哪个线程不确定,且与优先级无关 加锁对象的 notityAll() 方法,唤醒所有处入等待状态的线程,让它们重新竞争对象的锁 线程的 sleep() 方法,使一个正在运行的线程处于睡眠状态,是静态方法,调用此方法要捕捉 Interr...原创 2019-12-18 09:23:01 · 533 阅读 · 0 评论 -
sleep()和yield()有什么区别?
sleep() 方法给其他线程运行机会时不考虑线程的优先级;yield() 方法只会给相同优先级或更高优先级的线程运行的机会 线程执行 sleep() 方法后进入阻塞状态;线程执行 yield() 方法转入就绪状态,可能马上又得得到执行 sleep() 方法声明抛出 InterruptedException;yield() 方法没有声明抛出异常 sleep() 方法需要指定时间参数;yiel...原创 2019-12-18 09:20:46 · 1009 阅读 · 0 评论 -
同步和异步有何异同,分别在什么情况下使用?
同步:发送一个请求,等待返回,然后再发送下一个请求 异步:发送一个请求,不等待返回,随时可以再发送下一个请求使用场景如果数据存在线程间的共享,或竞态条件,需要同步。如多个线程同时对同一个变量进行读和写的操作 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就可以使用异步,提高效率、加快程序的响应【Java面试题与答案】整理推荐...原创 2019-12-17 14:06:47 · 1608 阅读 · 0 评论 -
如何保证多个线程同时启动?
可以 wait()、notify() 实现;也可以使用发令枪 CountDownLatch 实现。CountDownLatch 实现较简单,如下:package constxiong.interview;import java.util.concurrent.CountDownLatch;/** * 测试同时启动多个线程 * @author ConstXiong */pu...原创 2019-12-17 13:55:37 · 1521 阅读 · 0 评论 -
volatile关键字能否保证线程安全?
单纯使用 volatile 关键字是不能保证线程安全的volatile 只提供了一种弱的同步机制,用来确保将变量的更新操作通知到其他线程 volatile 语义是禁用 CPU 缓存,直接从主内存读、写变量。表现为:更新 volatile 变量时,JMM 会把线程对应的本地内存中的共享变量值刷新到主内存中;读volatile 变量时,JMM 会把线程对应的本地内存设置为无效,直接从主内存中读...原创 2019-12-17 13:53:47 · 3818 阅读 · 0 评论