Java笔试面试
文章平均质量分 92
PauperGuy
God
展开
-
Java笔试面试-字符串
字符串介绍: 字符串是程序开发当中,使用最频繁的类型之一,有着与基础类型相同的地位,甚至在 JVM(Java 虚拟机)编译的时候会对字符串做特殊的处理,比如拼加操作可能会被 JVM 直接合成为一个最终的字符串,从而到达高效运行的目的。1 、String 特性String是标准的不可变类(immutable),对它的任何改动,其实就是创建了一个新对象,再把引用指向该对象;Sting对象赋...原创 2019-08-29 10:19:29 · 38393 阅读 · 15 评论 -
Java笔试面试-异常处理
异常处理的语法格式: try{ … } catch(Exception e){ … } finally{ … }try:是用来监测可能会出现异常的代码段。catch:是用来捕获 try 代码块中某些代码引发的异常,如果 try 里面没有异常发生,那么 catch 也一定不会执行。在 Java 语言中,try 后面可以有多个 catch 代码块,用来捕获不同类型的异常,需要注意的是前面的 ...原创 2019-08-29 10:35:23 · 112016 阅读 · 28 评论 -
Java笔试面试-时间
1 、获取时间 JDK8之前:Date date = new Date();System.out.println(date);Calendar calendar = Calendar.getInstance();Date time = calendar.getTime();System.out.println(time); JDK8:// 获取日期LocalDate loc...原创 2019-09-07 09:41:13 · 108860 阅读 · 15 评论 -
Java笔试面试-数组
数组初始化: 数组可使用 new int[n] 进行初始化,每个元素初始化为 0,声明了 n 个元素。也可以直接赋值,例如 new int[]{ 1,2,3…… },具体用法可参照下面代码:// 初始化方式一int[] arr = new int[5];// 初始化方式二int[] arr2 = new int[]{1, 2, 3, 4, 5};// 初始化方式二的延伸版,可省略 n...原创 2019-09-07 10:11:57 · 35113 阅读 · 17 评论 -
Java笔试面试-详解类与Object
类的基本使用:public class Cat { // 私有属性 private String name; private int age; // 构造方法 public Cat() { } // 普通方法 public void eat() { System.out.println("吃吃吃"); } ...原创 2019-09-12 13:54:42 · 37243 阅读 · 16 评论 -
Java笔试面试-内部类相关笔试面试题
1.Java 中的内部类有哪些?答:内部类包含以下 4 种:静态内部类:static class StaticInnerClass{};成员内部类:private class InstanceInnerClass{};局部内部类:定义在方法或者表达式内部;匿名内部类:(new Thread(){}).start()。2.以下关于匿名内部类说法错误的是?A:匿名内部类必须继承一个父...原创 2019-09-12 14:26:17 · 37992 阅读 · 18 评论 -
Java笔试面试-详解内部类
内部类Java 内部类,分为以下四种:成员内部类静态成员内部类局部内部类匿名内部类成员内部类: 在一个类中定义了另一个类,则将定义在类中的那个类称之为成员内部类。成员内部类也是最普通的内部类。示例如下:class Outer { public Outer() { System.out.println("Outer Class."); } ...原创 2019-09-12 14:26:57 · 37121 阅读 · 19 评论 -
Java笔试面试-抽象类与接口
抽象类定义: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。简单来说,使用关键字 abstract 修饰的类就叫做抽象类。使用:abstract class AbstractAnimal { public AbstractAnimal() { ...原创 2019-09-15 22:42:12 · 105299 阅读 · 11 评论 -
Java笔试面试-克隆和序列化
克隆1.浅克隆默认的 clone() 方法,为浅克隆,代码如下:class CloneTest { public static void main(String[] args) throws CloneNotSupportedException { Dog dog = new Dog(); dog.name = "旺财"; dog.ag...原创 2019-09-15 23:04:28 · 52733 阅读 · 11 评论 -
Java笔试面试-集合详解(上)
概述集合的继承关系图,如下:其中:外框为虚线的表示接口,边框为实线的表示类;箭头为虚线的表示实现了接口,箭头为实线的表示继承了类。集合的根节点是 Collection,而 Collection 下又提供了两大常用集合,分别是:List:使用最多的有序集合,提供方便的新增、修改、删除的操作;Set:集合不允许有重复的元素,在许多需要保证元素唯一性的场景中使用。集合使用1....原创 2019-09-16 12:23:24 · 52931 阅读 · 12 评论 -
Java笔试面试-集合(下)
Map 的继承关系图:Map 简介Map 常用的实现类如下:Hashtable:Java 早期提供的一个哈希表实现,它是线程安全的,不支持 null 键和值,因为它的性能不如 ConcurrentHashMap,所以很少被推荐使用。HashMap:最常用的哈希表实现,如果程序中没有多线程的需求,HashMap 是一个很好的选择,支持 null 键和值,如果在多线程中可用 Concurr...原创 2019-09-16 12:48:37 · 30222 阅读 · 20 评论 -
Java笔试面试-泛型和迭代器
泛型 本质上是类型参数化,解决了不确定对象的类型问题。泛型的使用,参考下面代码:ArrayList<String> arrayList = new ArrayList();arrayList.add("Java");泛型的优点安全:不用担心程序运行过程中出现类型转换的错误。避免了类型转换:如果是非泛型,获取到的元素是 Object 类型的,需要强制类型转换。可读性高...原创 2019-09-18 08:51:38 · 50865 阅读 · 19 评论 -
Java笔试面试-数据结构队列
队列(Queue) 与栈相对的一种数据结构, 集合(Collection)的一个子类。队列允许在一端进行插入操作,而在另一端进行删除操作的线性表,栈的特点是后进先出,而队列的特点是先进先出。队列的用处很大,比如实现消息队列。Queue 类关系图,如下:1.Queue 分类双端队列:双端队列(Deque)是 Queue 的子类也是 Queue 的补充类,头部和尾部都支持元素插入和获取。...原创 2019-09-18 09:24:12 · 50866 阅读 · 15 评论 -
Java笔试面试-BIO、NIO、AIO
IO IO 是 Input/Output 的缩写,它是基于流模型实现的,比如操作文件时使用输入流和输出流来写入和读取文件等。IO 分类 传统的 IO,按照流类型我们可以分为:字符流字节流 其中,字符流包括 Reader、Writer;字节流包括 InputStream、OutputStream。传统 IO 的类关系图,如下图所示:IO 使用① Writer 使用Wri...原创 2019-09-19 09:27:00 · 52619 阅读 · 21 评论 -
Java笔试面试-反射和动态代理
反射 反射机制是 Java 语言提供的一种基础功能,赋予程序在运行时自省(introspect)的能力。简单来说就是通过反射,可以在运行期间获取、检测和调用对象的属性和方法。反射的使用场景1.编程工具 IDEA 或 Eclipse 等,在写代码时会有代码(属性或方法名)提示,就是因为使用了反射;2.很多知名的框架,为了让程序更优雅更简洁,也会使用到反射。例如,Spring 可以通过配置...原创 2019-09-19 09:42:27 · 57127 阅读 · 19 评论 -
Java笔试面试-线程与死锁
线程 线程(Thread)是程序运行的执行单元,依托于进程存在。一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源、更加轻量化,因而也被称为轻量级的进程。进程 进程(Processes)是程序的一次动态执行,是系统进行资源分配和调度的基本单位,是操作系统运行的基础,通常每一个进程都拥有自己独立的内存空间和系统资源。简单来说,进程可以被当做...原创 2019-09-20 12:03:12 · 48415 阅读 · 18 评论 -
Java笔试面试-线程池(ThreadPoolExecutor)
线程池 线程池(Thread Pool):把一个或多个线程通过统一的方式进行调度和重复使用的技术,避免了因为线程过多而带来使用上的开销。为什么要使用线程池?可重复使用已有线程,避免对象创建、消亡和过度切换的性能开销。避免创建大量同类线程所导致的资源过度竞争和内存溢出的问题。支持更多功能,比如延迟任务线程池(newScheduledThreadPool)和缓存线程池(newCach...原创 2019-09-20 12:27:02 · 26000 阅读 · 17 评论 -
Java笔试面试-Executors
Executors 可以创建以下六种线程池:FixedThreadPool(n):创建一个数量固定的线程池,超出的任务会在队列中等待空闲的线程,可用于控制程序的最大并发数。CachedThreadPool():短时间内处理大量工作的线程池,会根据任务数量产生对应的线程,并试图缓存线程以便重复使用,如果限制 60 秒没被使用,则会被移除缓存。SingleThreadExecutor():创建...原创 2019-09-21 09:15:02 · 25037 阅读 · 16 评论 -
Java笔试面试-ThreadLocal
ThreadLocal ThreadLocal 诞生于 JDK 1.2,用于解决多线程间的数据隔离问题。也就是说 ThreadLocal 会为每一个线程创建一个单独的变量副本。ThreadLocal 作用:ThreadLocal 可以用来管理 Session,因为每个人的信息都是不一样的,所以就很适合用 ThreadLocal 来管理;数据库连接,为每一个线程分配一个独立的资源,也适合...原创 2019-09-21 09:33:57 · 25115 阅读 · 25 评论 -
Java笔试面试-线程安全(synchronized 和 ReentrantLock)
线程安全1.非线程安全事例 比如 A 和 B 同时给 C 转账的问题,假设 C 原本余额有 100 元,A 给 C 转账 100 元,正在转的途中,此时 B 也给 C 转了 100 元,这个时候 A 先给 C 转账成功,余额变成了 200 元,但 B 事先查询 C 的余额是 100 元,转账成功之后也是 200 元。当 A 和 B 都给 C 转账完成之后,余额还是 200 元,而非预期的 3...原创 2019-09-22 10:04:46 · 47215 阅读 · 22 评论 -
Java笔试面试-Java 并发包中的高级同步工具
JUC介绍 Java 中的并发包指的是 java.util.concurrent(简称 JUC)包和其子包下的类和接口,它为 Java 的并发提供了各种功能支持,比如:提供了线程池的创建类 ThreadPoolExecutor、Executors 等;提供了各种锁,如 Lock、ReentrantLock 等;提供了各种线程安全的数据结构,如 ConcurrentHashMap、Lin...原创 2019-09-22 10:17:01 · 24081 阅读 · 11 评论 -
Java笔试面试-Java 中的各种锁和 CAS
悲观锁和乐观锁悲观锁 悲观锁认为对于同一个数据的并发操作,一定是会发生修改的,哪怕没有修改,也会认为修改。因此对于同一个数据的并发操作,悲观锁采取加锁的形式。悲观地认为,不加锁的并发操作一定会出问题。乐观锁 乐观锁正好和悲观锁相反,它获取数据的时候,并不担心数据被修改,每次获取数据的时候也不会加锁,只是在更新数据的时候,通过判断现有的数据是否和原数据一致来判断数据是否被其他线程操作,如果...原创 2019-09-23 10:10:07 · 45573 阅读 · 17 评论 -
Java笔试面试-Spring 核心
Spring Framework 简称 Spring,是 Java 开发中最常用的框架,地位仅次于 Java API,就连近几年比较流行的微服务框架 SpringBoot,也是基于 Spring 实现的,SpringBoot 的诞生是为了让开发者更方便地使用 Spring,因此 Spring 在 Java 体系中的地位可谓首屈一指。Spring 介绍 Spring 是一个开源框架,为了解...原创 2019-09-23 10:53:06 · 104564 阅读 · 14 评论 -
Java笔试面试-SpringMVC 核心
Spring MVC简介 Spring MVC(Spring Web MVC)是 Spring Framework 提供的 Web 组件,它的实现基于 MVC 的设计模式:Controller(控制层)、Model(模型层)、View(视图层),提供了前端路由映射、视图解析等功能,让 Java Web 开发变得更加简单,也属于 Java 开发中必须要掌握的热门框架。执行流程 Spring...原创 2019-09-24 07:45:36 · 44709 阅读 · 7 评论 -
Java笔试面试-SpringBoot核心
Spring Boot Spring Boot 来自于 Spring 大家族,是 Spring 官方团队(Pivotal 团队)提供的全新框架,它的诞生解决了 Spring 框架使用较为繁琐的问题。Spring Boot 的核心思想是约定优于配置,让开发人员不需要配置任何 XML 文件,就可以像 Maven 整合 Jar 包一样,整合并使用所有框架。Spring Boot 特性秒级构建一...原创 2019-09-24 08:18:32 · 96287 阅读 · 9 评论 -
Java笔试面试-MyBatis 核心(上)
MyBatis 介绍 MyBatis 是一款优秀的 ORM(Object Relational Mapping,对象关系映射)框架,它可以通过对象和数据库之间的映射,将程序中的对象自动存储到数据库中。它是 Apache 提供的一个开源项目,之前的名字叫做 iBatis,2010 年迁移到了 Google Code,并且将名字改为我们现在所熟知的 MyBatis,又于 2013 年 11 月迁移...原创 2019-09-25 08:53:49 · 43896 阅读 · 14 评论 -
Java笔试面试-MyBatis 核心(下)
MyBatis 最初的设计是基于 XML 配置文件的,但随着 Java 的发展(Java 1.5 开始引入注解)和 MyBatis 自身的迭代升级,终于在 MyBatis 3 之后就开始支持基于注解的开发了。 下面我们使用 Spring Boot + MyBatis 注解的方式,来实现对数据库的基本操作,具体实现步骤如下。MyBatis 注解版1.创建数据表drop table if...原创 2019-09-25 09:04:45 · 44523 阅读 · 22 评论 -
Java笔试面试-消息队列面试题总结
1.消息队列的应用场景有哪些?答:消息队列的应用场景如下。应用解耦,比如,用户下单后,订单系统需要通知库存系统,假如库存系统无法访问,则订单减库存将失败,从而导致订单失败。订单系统与库存系统耦合,这个时候如果使用消息队列,可以返回给用户成功,先把消息持久化,等库存系统恢复后,就可以正常消费减去库存了。削峰填谷,比如,秒杀活动,一般会因为流量过大,从而导致流量暴增,应用挂掉,这个时候加上消息...原创 2019-09-26 15:22:14 · 44468 阅读 · 16 评论 -
Java笔试面试-Java 分布式框架面试总结
1.什么是 ZooKeeper?答:ZooKeeper 是一个开源的分布式应用程序协调服务,是一个典型的分布式数据一致性解决方案。设计目的是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的系统,并以一系列简单易用的原子操作提供给用户使用。2.ZooKeeper 提供了哪些功能?答:ZooKeeper 主要提供以下功能:分布式服务注册与订阅:在分布式环境中,为了保证高可用...原创 2019-09-26 16:03:08 · 94960 阅读 · 24 评论 -
Java笔试面试-MySQL 汇总
1.说一下 MySQL 执行一条查询语句的内部执行过程?答:MySQL 执行一条查询的流程如下:客户端先通过连接器连接到 MySQL 服务器;连接器权限验证通过之后,先查询是否有查询缓存,如果有缓存(之前执行过此语句)则直接返回缓存数据,如果没有缓存则进入分析器;分析器会对查询语句进行语法分析和词法分析,判断 SQL 语法是否正确,如果查询语法错误会直接返回给客户端错误信息,如果语法正确...原创 2019-10-16 18:53:57 · 42031 阅读 · 17 评论 -
Java笔试面试-Redis
1.Redis 使用场景有哪些?答:Redis 使用场景如下:记录帖子点赞数、点击数、评论数缓存近期热帖缓存文章详情信息记录用户会话信息2.Redis 有哪些功能?答:Redis 功能如下:数据缓存功能分布式锁的功能支持数据持久化支持事务支持消息队列3.Redis 支持哪些数据类型?答:Redis 支持的数据类型如下:String 字符串List 列表S...原创 2019-10-21 09:58:45 · 42414 阅读 · 18 评论 -
Java笔试面试-设计模式
1.说一下设计模式?你都知道哪些?答:设计模式总共有 23 种,总体来说可以分为三大类:创建型模式( Creational Patterns )、结构型模式( Structural Patterns )和行为型模式( Behavioral Patterns )。 ①创建型模式( Creational Patterns ):工厂模式(Factory pattern)抽象工厂模式(Abst...原创 2019-10-24 12:12:17 · 43612 阅读 · 18 评论 -
Java笔试面试-算法常用面试题
1.说一下什么是二分法?使用二分法时需要注意什么?如何用代码实现? 二分法查找(Binary Search)也称折半查找,是指当每次查询时,将数据分为前后两部分,再用中值和待搜索的值进行比较,如果搜索的值大于中值,则使用同样的方式(二分法)向后搜索,反之则向前搜索,直到搜索结束为止。 二分法使用的时候需要注意:二分法只适用于有序的数据,也就是说,数据必须是从小到大,或是从大到小排序的。pu...原创 2019-11-19 19:35:21 · 113141 阅读 · 33 评论 -
Java笔试面试-JVM
1.什么是 JVM?它有什么作用?答:JVM 是 Java Virtual Machine(Java 虚拟机)的缩写,顾名思义它是一个虚拟计算机,也是 Java 程序能够实现跨平台的基础。它的作用是加载 Java 程序,把字节码翻译成机器码再交由 CPU 执行的一个虚拟计算器。2.JVM 主要组成部分有哪些?答:JVM 主要组成部分如下:类加载器(ClassLoader)运行时数据区(...原创 2019-11-19 19:45:47 · 93061 阅读 · 19 评论 -
Java笔试面试-常见翻车总结
1.去掉 main 方法的 static 修饰符,程序会怎样?A:程序无法编译B:程序正常编译,正常运行C:程序正常编译,正常运行一下马上退出D:程序正常编译,运行时报错答:D题目解析:运行时异常如下:错误: main 方法不是类 xxx 中的 static, 请将 main 方法定义为:public static void main(String[] args)2.以下程序运...原创 2019-12-04 17:55:55 · 93783 阅读 · 24 评论