建设网站比较好的公司吗wordpress图片类主题
建设网站比较好的公司吗,wordpress图片类主题,天津市网站建站制作,桔子seo2026年快到了#xff0c;发现网上很多 Java 面试题都没有答案#xff0c;所以花了很长时间搜集整理出来了这套 Java 面试题大全~这套互联网 Java 工程师面试题包括了#xff1a;MyBatis、ZK、Dubbo、EL、Redis、MySQL、并发编程、Java 面试、Spring、微服务、Linux、Springb…2026年快到了发现网上很多 Java 面试题都没有答案所以花了很长时间搜集整理出来了这套 Java 面试题大全~这套互联网 Java 工程师面试题包括了MyBatis、ZK、Dubbo、EL、Redis、MySQL、并发编程、Java 面试、Spring、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题一、Java 基础1. JDK 和 JRE 有什么区别JDKJava Development Kit 的简称java 开发工具包提供了 java 的开发环境和运行环境。JREJava Runtime Environment 的简称java 运行环境为 java 的运行提供了所需环境。具体来说 JDK 其实包含了 JRE同时还包含了编译 java 源码的编译器 javac还包含了很多 java 程序调试和分析的工具。简单来说如果你需要运行 java 程序只需安装 JRE 就可以了如果你需要编写 java 程序需要安装 JDK。2. 和 equals 的区别是什么 对于基本类型来说是值比较对于引用类型来说是比较的是引用而 equals 默认情况下是引用比较只是很多类重新了 equals 方法比如 String、Integer 等把它变成了值比较所以一般情况下 equals 比较的是值是否相等。3. 两个对象的 hashCode()相同则 equals()也一定为 true对吗不对两个对象的 hashCode()相同equals()不一定 true。代码解读很显然“通话”和“重地”的 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 stri与 String strnew String(i)一样吗不一样因为内存的分配方式不一样。String stri的方式java 虚拟机会将其分配到常量池中而 String strnew String(i) 则会被分到堆内存中。9. 如何将字符串反转使用 StringBuilder 或者 stringBuffer 的 reverse() 方法。篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc需要全套面试笔记及答案【点击此处即可/免费获取】https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1ho10. String 类的常用方法都有那些indexOf()返回指定字符的索引。charAt()返回指定索引处的字符。replace()字符串替换。trim()去除字符串两端空白。split()分割字符串返回一个分割后的字符串数组。getBytes()返回字符串的 byte 类型数组。length()返回字符串长度。toLowerCase()将字符串转成小写字母。toUpperCase()将字符串转成大写字符。substring()截取字符串。equals()字符串比较。11. 抽象类必须要有抽象方法吗不需要抽象类不一定非要有抽象方法。普通类不能包含抽象方法抽象类可以包含抽象方法。抽象类不能直接实例化普通类可以直接实例化。13. 抽象类能使用 final 修饰吗不能定义抽象类就是让其他类继承的如果定义为 final 该类就不能被继承这样彼此就会产生矛盾所以 final 不能修饰抽象类14. 接口和抽象类有什么区别实现抽象类的子类使用 extends 来继承接口必须使用 implements 来实现接口。构造函数抽象类可以有构造函数接口不能有。main 方法抽象类可以有 main 方法并且我们能运行它接口不能有 main 方法。实现数量类可以实现很多个接口但是只能继承一个抽象类。访问修饰符接口中的方法默认使用 public 修饰抽象类中的方法可以是任意访问修饰符。15. java 中 IO 流分为几种按功能来分输入流input、输出流output。按类型来分字节流和字符流。字节流和字符流的区别是字节流按 8 位传输以字节为单位输入输出数据字符流按 16 位传输以字符为单位输入输出数据。16. BIO、NIO、AIO 有什么区别BIOBlock IO 同步阻塞式 IO就是我们平常使用的传统 IO它的特点是模式简单使用方便并发处理能力低。NIONew IO 同步非阻塞 IO是传统 IO 的升级客户端和服务器端通过 Channel通道通讯实现了多路复用。AIOAsynchronous 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()写入文件。二、容器18. java 容器都有哪些常用容器的图录19. Collection 和 Collections 有什么区别java.util.Collection 是一个集合接口集合类的一个顶级接口。它提供了对集合对象进行基本操作的通用接口方法。Collection 接口在 Java 类库中有很多具体的实现。Collection 接口的意义是为各种具体的集合提供了最大化的统一操作方式其直接继承接口有 List 与 Set。Collections 则是集合类的一个工具类/帮助类其中提供了一系列静态方法用于对集合中元素进行排序、搜索以及线程安全等各种操作。20. List、Set、Map 之间的区别是什么21. HashMap 和 Hashtable 有什么区别hashMap 去掉了 HashTable 的 contains 方法但是加上了 containsValue和 containsKey方法。hashTable 同步的而 HashMap 是非同步的效率上逼 hashTable 要高。hashMap 允许空键值而 hashTable 不允许。22. 如何决定使用 HashMap 还是 TreeMap对于在 Map 中插入、删除和定位元素这类操作HashMap 是最好的选择。然而假如你需要对一个有序的 key 集合进行遍历TreeMap 是更好的选择。基于你的 collection 的大小也许向 HashMap 中添加元素会更快将 map 换为 TreeMap 进行有序 key 的遍历。23. 说一下 HashMap 的实现原理HashMap 概述 HashMap 是基于哈希表的 Map 接口的非同步实现。此实现提供所有可选的映射操作并允许使用 null 值和 null 键。此类不保证映射的顺序特别是它不保证该顺序恒久不变。HashMap 的数据结构 在 java 编程语言中最基本的结构就是两种一个是数组另外一个是模拟指针引用所有的数据结构都可以用这两个基本结构来构造的HashMap 也不例外。HashMap 实际上是一个“链表散列”的数据结构即数组和链表的结合体。HashSet 底层由 HashMap 实现HashSet 的值存放于 HashMap 的 key 上HashMap 的 value 统一为 PRESENT25. ArrayList 和 LinkedList 的区别是什么最明显的区别是 ArrrayList 底层的数据结构是数组支持随机访问而 LinkedList 的底层数据结构是双向循环链表不支持随机访问。使用下标访问一个元素ArrayList 的时间复杂度是 O(1)而 LinkedList 是 O(n)。26. 如何实现数组和 List 之间的转换List 转换成为数组调用 ArrayList 的 toArray 方法。数组转换成为 List调用 Arrays 的 asList 方法。27. ArrayList 和 Vector 的区别是什么Vector 是同步的而 ArrayList 不是。然而如果你寻求在迭代的时候对列表进行改变你应该使用 CopyOnWriteArrayList。ArrayList 比 Vector 快它因为有同步不会过载。ArrayList 更加通用因为我们可以使用 Collections 工具类轻易地获取同步列表和只读列表。28. Array 和 ArrayList 有何区别Array 可以容纳基本类型和对象而 ArrayList 只能容纳对象。Array 是指定大小的而 ArrayList 大小是固定的。Array 没有提供 ArrayList 那么多功能比如 addAll、removeAll 和 iterator 等。29. 在 Queue 中poll()和 remove()有什么区别poll() 和 remove() 都是从队列中取出一个元素但是 poll() 在获取元素失败的时候会返回空但是 remove() 失败的时候会抛出异常。30. 哪些集合类是线程安全的vector就比 arraylist 多了个同步化机制线程安全因为效率较低现在已经不太建议使用。在 web 应用中特别是前台页面往往效率页面响应速度是优先考虑的。statck堆栈类先进后出。hashtable就比 hashmap 多了个线程安全。enumeration枚举相当于迭代器。31. 迭代器 Iterator 是什么迭代器是一种设计模式它是一个对象它可以遍历并选择序列中的对象而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象因为创建它的代价小。32. Iterator 怎么使用有什么特点(1) 使用方法 iterator()要求容器返回一个 Iterator。第一次调用 Iterator 的 next()方法时它返回序列的第一个元素。注意iterator()方法是 java.lang.Iterable 接口,被 Collection 继承。(2) 使用 next()获得序列中的下一个元素。(3) 使用 hasNext()检查序列中是否还有元素。(4) 使用 remove()将迭代器新返回的元素删除。Iterator 是 Java 迭代器最简单的实现为 List 设计的 ListIterator 具有更多的功能它可以从两个方向遍历 List也可以从 List 中插入和删除元素。33. Iterator 和 ListIterator 有什么区别Iterator 可用来遍历 Set 和 List 集合但是 ListIterator 只能用来遍历 List。Iterator 对集合只能是前向遍历ListIterator 既可以前向也可以后向。ListIterator 实现了 Iterator 接口并包含其他的功能比如增加元素替换元素获取前一个和后一个元素的索引等等。三、多线程35. 并行和并发有什么区别并行是指两个或者多个事件在同一时刻发生而并发是指两个或多个事件在同一时间间隔发生。并行是在不同实体上的多个事件并发是在同一实体上的多个事件。在一台处理器上“同时”处理多个任务在多台处理器上同时处理多个任务。如 hadoop 分布式集群。所以并发编程的目标是充分的利用处理器的每一个核以达到最高的处理性能。36. 线程和进程的区别简而言之进程是程序运行和资源分配的基本单位一个程序至少有一个进程一个进程至少有一个线程。线程是进程的一个实体是 cpu 调度和分派的基本单位是比程序更小的能独立运行的基本单位。同一进程中的多个线程之间可以并发执行。37.守护线程是什么守护线程即 daemon thread是个服务线程准确地来说就是服务其他的线程。38. 创建线程有哪几种方式①. 继承 Thread 类创建线程类②. 通过 Runnable 接口创建线程类③. 通过 Callable 和 Future 创建线程39. 说一下 runnable 和 callable 有什么区别Runnable 接口中的 run()方法的返回值是 void它做的事情只是纯粹地去执行 run()方法中的代码而已Callable 接口中的 call()方法是有返回值的是一个泛型和 Future、FutureTask 配合可以用来获取异步执行的结果。40. 线程有哪些状态线程通常都有五种状态创建、就绪、运行、阻塞和死亡。41. sleep() 和 wait() 有什么区别sleep()方法是线程类Thread的静态方法让调用线程进入睡眠状态让出执行机会给其他线程等到休眠时间结束后线程进入就绪状态和其他线程一起竞争 cpu 的执行时间。因为 sleep() 是 static 静态的方法他不能改变对象的机锁当一个 synchronized 块中调用了 sleep() 方法线程虽然进入休眠但是对象的机锁没有被释放其他线程依然无法访问这个对象。wait()wait()是 Object 类的方法当一个线程执行到 wait 方法时它就进入到一个和该对象相关的等待池同时释放对象的机锁使得其他线程能够访问可以通过 notifynotifyAll 方法来唤醒等待的线程。42. notify()和 notifyAll()有什么区别如果线程调用了对象的 wait()方法那么线程便会处于该对象的等待池中等待池中的线程不会去竞争该对象的锁。当有线程调用了对象的 notifyAll()方法唤醒所有 wait 线程或 notify()方法只随机唤醒一个 wait 线程被唤醒的的线程便会进入该对象的锁池中锁池中的线程会去竞争该对象锁。也就是说调用了 notify 后只要一个线程会由等待池进入锁池而 notifyAll 会将该对象等待池内的所有线程移动到锁池中等待锁竞争。优先级高的线程竞争到对象锁的概率大假若某线程没有竞争到该对象锁它还会留在锁池中唯有线程再次调用 wait()方法它才会重新回到等待池中。而竞争到对象锁的线程则继续往下执行直到执行完了 synchronized 代码块它会释放掉该对象锁这时锁池中的线程会继续竞争该对象锁。43. 线程的 run()和 start()有什么区别start()方法来启动一个线程真正实现了多线程运行。这时无需等待 run 方法体代码执行完毕可以直接继续执行下面的代码 这时此线程是处于就绪状态 并没有运行。 然后通过此 Thread 类调用方法 run()来完成其运行状态 这里方法 run()称为线程体它包含了要执行的这个线程的内容 Run 方法运行结束 此线程终止。然后 CPU 再调度其它线程。run()方法是在本线程里的只是线程里的一个函数,而不是多线程的。 如果直接调用 run(),其实就相当于是调用了一个普通函数而已直接待用 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 种状态级别从低到高依次为无状态锁偏向锁轻量级锁和重量级锁状态这几个状态会随着竞争情况逐渐升级。锁可以升级但不能降级。锁升级的图示过程篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc需要全套面试笔记及答案【点击此处即可/免费获取】https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1ho49. 什么是死锁死锁是指两个或两个以上的进程在执行过程中由于竞争资源或者由于彼此通信而造成的一种阻塞的现象若无外力作用它们都将无法推进下去。50. 怎么防止死锁死锁的四个必要条件互斥条件进程对所分配到的资源不允许其他进程进行访问若其他进程访问该资源只能等待直至占有该资源的进程使用完成后释放该资源请求和保持条件进程获得一定的资源之后又对其他资源发出请求但是该资源可能被其他进程占有此事请求阻塞但又对自己获得的资源保持不放不可剥夺条件是指进程已获得的资源在未完成使用之前不可被剥夺只能在使用完后自己释放环路等待条件是指进程发生死锁后若干进程之间形成一种头尾相接的循环等待资源关系51. ThreadLocal 是什么有哪些使用场景线程局部变量是局限于线程内部的变量属于线程自身所有不在多个线程间共享。Java 提供 ThreadLocal 类来支持线程局部变量是一种实现线程安全的方式。但是在管理环境下如 web 服务器使用线程局部变量的时候要特别小心在这种情况下工作线程的生命周期比任何应用变量的生命周期都要长。任何线程局部变量一旦在工作完成后没有释放Java 应用就存在内存泄露的风险。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 内置关键字在 jvm 层面Lock 是个 java 类synchronized 无法判断是否获取锁的状态Lock 可以判断是否获取到锁synchronized 会自动释放锁(a 线程执行完同步代码会释放锁 b 线程执行过程中发生异常会释放锁)Lock 需在 finally 中手工释放锁unlock()方法释放锁否则容易造成线程死锁用 synchronized 关键字的两个线程 1 和线程 2如果当前线程 1 获得锁线程 2 线程等待。如果线程 1 阻塞线程 2 则会一直等待下去而 Lock 锁就不一定会等待下去如果尝试获取不到锁线程可以不用一直等待就结束了synchronized 的锁可重入、不可中断、非公平而 Lock 锁可重入、可判断、可公平两者皆可Lock 锁适合大量同步的代码的同步问题synchronized 锁适合代码少量的同步问题。55. synchronized 和 ReentrantLock 区别是什么synchronized 是和 if、else、for、while 一样的关键字ReentrantLock 是类这是二者的本质区别。ReentrantLock 可以对获取锁的等待时间进行设置这样就避免了死锁ReentrantLock 可以获取各种锁的信息ReentrantLock 可以灵活地实现多路通知另外二者的锁机制其实也是不一样的:ReentrantLock 底层调用的是 Unsafe 的 park 方法加锁synchronized 操作的应该是对象头中 mark word。56. 说一下 atomic 的原理Atomic 包中的类基本的特性就是在多线程环境下当有多个线程同时对单个包括基本类型及引用类型变量进行操作时具有排他性即当多个线程同时对该变量的值进行更新时仅有一个线程能成功而未成功的线程可以向自旋锁一样继续尝试一直等到执行成功。四、反射57. 什么是反射反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力 Java 反射在 Java 运行时环境中对于任意一个类能否知道这个类有哪些属性和方法对于任意一个对象能否调用它的任意一个方法 Java 反射机制主要提供了以下功能在运行时判断任意一个对象所属的类。在运行时构造任意一个类的对象。在运行时判断任意一个类所具有的成员变量和方法。在运行时调用任意一个对象的方法。58. 什么是 java 序列化什么情况下需要序列化简单说就是为了保存在内存中的各种对象的状态也就是实例变量不是方法并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存 object states但是 Java 给你提供一种应该比你自己好的保存对象状态的机制那就是序列化。什么情况下需要序列化a当你想把的内存中的对象状态保存到一个文件中或者数据库中时候b当你想用套接字在网络上传送对象的时候c当你想通过 RMI 传输对象的时候59. 动态代理是什么有哪些应用动态代理当想要给实现了某个接口的类中的方法加一些额外的处理。比如说加日志加事务等。动态代理的应用Spring 的 AOP加事务加权限加日志60. 怎么实现动态代理首先必须定义一个接口还要有一个 InvocationHandler(将实现接口的类的对象传递给它)处理类。再有一个工具类 Proxy(习惯性将其称为代理类因为调用他的 newInstance()可以产生代理对象,其实他只是一个产生代理对象的工具类。利用到 InvocationHandler拼接代理类源码将其编译生成代理类的二进制码利用加载器加载并将其实例化产生代理对象最后返回。五、对象拷贝六、Java Web64. jsp 和 servlet 有什么区别65. jsp 有哪些内置对象作用分别是什么66. 说一下 jsp 的 4 种作用域67. session 和 cookie 有什么区别68. 说一下 session 的工作原理69. 如果客户端禁止 cookie 能实现 session 还能用吗70. spring mvc 和 struts 的区别是什么......Java 面试题目录MyBatis 面试篇Zookeeper 面试篇Java 基础篇45 道面试题字符串 集合篇74 道并发编程篇79 道篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc需要全套面试笔记及答案【点击此处即可/免费获取】https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1hoJVM 篇56 道数据结构与算法56 道MySQL 篇59 道另外还附带了 52 条 SQL 优化策略 以及一千行 SQL 命令 Redis 篇48 道Mongo 篇83 道Spring 篇58 道MyBatis 篇47 道SpringBoot 篇43 道常用注解篇除此之外还有 SpringCloud31 道、Nginx28 道、MQ45 道、Dubbo38 道、Kafka12 道、ES47 道、Linux38 道等内容。