Java常见面试题汇总
总结了一些Java面试中经常被问到的经典问题!
知行流浪
不务正业的IT男
展开
-
Java常见面试题汇总-----------计算机网络(HTTP协议、HTTP1.1与HTTP1.0的比较)
73、HTTP协议请求过程 大致的流程:输入地址 –> DNS域名解析 –> 发起TCP的三次握手 –> 建立TCP连接后发起http请求 –> 服务器响应http请求,浏览器得到html代码 –> 浏览器解析html代码,并请求html代码中的资源(如javascript、css、图片等) –> 浏览器对页面进行渲染呈现给用户。 第一步:输入地址 ...原创 2019-07-06 23:46:41 · 1860 阅读 · 1 评论 -
Java常见面试题汇总-----------计算机网络(TCP三次握手与四次挥手、TCP流量控制、TCP与UDP对比)
70、TCP协议的三次握手与四次挥手70.1、TCP报文结构 1、源端口号:表示发送端端口号,字段长为16位。 2、目标端口号:表示接收端口号,字段长为16位。 3、序列号:表示发送数据的位置,字段长为32位。每发送一次数据,就累加一次该数据字节数的大小。 注意:序列号不会从0或1开始,而是在建立连接时由计算机生成的一个随机数作为其初始值,通过SYN包发送给接收端主机。然后再将...原创 2019-07-04 17:22:37 · 2070 阅读 · 0 评论 -
Java常见面试题汇总-----------计算机网络(路由协议)
69、路由协议69.1、基本概念 网络层主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,通过查找路由表决定通过那个路径到达服务器,其中用到路由选择协议。 路由主要分为两类:即静态路由和动态路由。从管理层面来说,静态路由比较容易部署/修改(小网络),动态路由协议一般路由的体积比较大,管理相对比较复杂(大网络)。但是从技术层面来说,动态路由协...原创 2019-06-12 19:06:43 · 1921 阅读 · 0 评论 -
Java常见面试题汇总-----------计算机网络(网络分层与IP地址)
67、OSI 与 TCP/IP 的网络分层 (1)、物理层----定义了为建立、维护和拆除物理链路所需的机械的、电气的、功能的和规程的特性,其作用是使原始的数据比特流能在物理媒体上传输。具体涉及接插件的规格、“0”、“1”信号的电平表示、收发双方的协调等内容。 (2)、数据链路层----比特流被组织成数据链路协议数据单元(通常称为帧),并以其为单位进行传输,帧中包含地址、控制、数据及校...原创 2019-06-10 16:23:41 · 1706 阅读 · 0 评论 -
Java常见面试题汇总-----------数据库(JDBC、数据库连接池)
63、JDBC的理解 Jdbc:Java database connection,java数据库连接。数据库管理系统(mysql、oracle等)是很多的,每个数据库管理系统支持的命令是不一样的。 Java只定义接口,让数据库厂商自己实现接口,对于我们开发者而言。只需要导入对应厂商开发的实现即可。然后以接口方式进行调用。(mysql + mysql驱动(实现)+jdbc)。64、数...原创 2019-05-15 15:37:37 · 3987 阅读 · 0 评论 -
Java常见面试题汇总-----------数据库(连接操作、分组查询、查询优化)
59、数据库连接(LEFT)操作 首先定义两个表t1和t2IDNAME1aaa2bbbIDAGE120330 内连接(inner join):只显示符合连接条件的记录 select * from t1 inner join t2 on t1.id = t2.id;IDNAMEIDAGE1...原创 2019-05-13 16:22:37 · 1164 阅读 · 0 评论 -
Java常见面试题汇总-----------数据库(数据库锁、数据库存储过程)
57、数据库的锁 锁是一种并发控制技术,锁是用来在多个用户同时访问同一个数据的时候保护数据的。57.1、有 2 种基本的锁类型 共享(S)锁: 多个事务可封锁一个共享页;任何事务都不能修改该页;通常是该页被读取完毕,S锁立即被释放。在执行 select 语句的时候需要给操作对象(表或者一些记录)加上共享锁,但加锁之前需要检查是否有排他锁,如果没有,则可以加共享锁(一个对象上可以加 n 个...原创 2019-05-12 16:24:09 · 5274 阅读 · 7 评论 -
Java常见面试题汇总-----------数据库(数据库索引及其实现)
54、数据库索引索引的优缺点 优点: 1、大大加快数据的检索速度; 2、创建唯一性索引,保证数据库表中每一行数据的唯一性; 3、加速表和表之间的连接; 4、在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。 缺点: 1、索引需要占物理空间; 2、当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低数据的维护速度。索引的分类...原创 2019-05-12 11:05:17 · 4853 阅读 · 0 评论 -
Java常见面试题汇总-----------数据库(数据库引擎、数据库范式、事务的四大特性ACID)
51、Mysql数据库引擎名称事务外键索引适用范围优势、特点Myisam不支持不支持B+树读操作远多于写操作,不需要事务支持访问速度快,对事务完整性没有要求,保存了表的行数Innodb支持支持B+树并发度较高、需要支持事务的场景占用更多的空间以保留数据和索引,不保存表的行数MemoryB树、HASH很快的读写速度,安全性要求较低...原创 2019-04-24 16:46:29 · 885 阅读 · 0 评论 -
Java常见面试题汇总-----------Java框架
47、struts2的执行流程? 在Struts2框架中的处理大概分为以下的步骤 1、用户发送请求; 2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin); 3、接着FilterDispatcher被调用,Filter...原创 2019-04-23 16:37:46 · 853 阅读 · 0 评论 -
Java常见面试题汇总-----------Java多线程(线程池、生产者消费者模式实现)
45、线程池ThreadPoolExecutor45.1、创建线程池 Java通过Executors提供四个静态方法创建四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 ...原创 2019-04-21 17:00:22 · 1356 阅读 · 0 评论 -
Java常见面试题汇总-----------Java多线程(多线程同步机制)
39、Synchronized的底层原理 synchronized是JAVA中解决并发编程中最常用的方法。 synchronized的作用如下: 1、确保线程互斥访问同步代码; 2、保证共享变量的修改能够及时可见; 3、有效解决指令重排序问题。 synrhronized关键字简洁、清晰、语义明确,因此即使有了Lock接口,使用的还是非常广泛。其应用层的语义是可以把任何一个非...原创 2019-04-20 20:35:15 · 2848 阅读 · 3 评论 -
Java常见面试题汇总-----------Java多线程(Java进程与线程基础)
34、进程与线程的区别 (1)进程概念 进程是表示资源分配的基本单位。 例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放入进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位。 在微内核系统(Mac、Windows NT等)中,真正调度运行的...原创 2019-04-18 15:23:08 · 608 阅读 · 0 评论 -
Java常见面试题汇总-----------JVM专题(Java类加载机制)
31、JVM类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型, 这就是虚拟机的类加载机制。 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initia...原创 2019-04-15 11:14:43 · 4886 阅读 · 0 评论 -
Java常见面试题汇总-----------JVM专题(JVM编译器优化、JVM逃逸分析)
32、JVM编译器优化32.1、JVM编译的过程 1、解析与填充符号表过程 1)、词法、语法分析 词法分析将源代码的字符流转变为标记集合,单个字符是程序编写过程的最小元素,而标记则是编译过程的最小元素,javac中由com.sun.tools.javac.parser.Scanner类实现。语法分析是根据token序列构造抽象语法树的过程。抽象语法树(AST)是一种用来描述程序代码...原创 2019-04-17 21:42:30 · 837 阅读 · 0 评论 -
Java常见面试题汇总-----------JVM专题(JVM内存模型、Java内存模型)
29、JVM内存模型(区别Java内存模型) JVM内存主要分为:程序计数器,Java虚拟机栈,本地方法栈,Java堆,方法区。 1、程序计数器: 为了线程切换能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。计数器记录的是正在执行的虚拟机字节码指令的地址。 2、Java虚拟机栈: 每个方法在执行...原创 2019-04-14 22:21:02 · 9298 阅读 · 0 评论 -
Java常见面试题汇总-----------Java集合类专题
23. Java集合类的总结 1、Iterator:Collection(值)、Map(键值对); 2、Collection:Set(无序不重复)、List(有序可重复)、Queue; 3、Set:HashSet(基于HashMap实现)、LinkedHashSet(继承自HashSet)、TreeSet(底层基于HashMap实现,升序排列); 4、List:ArrayLis...原创 2019-04-14 21:40:23 · 1108 阅读 · 0 评论 -
Java常见面试题汇总-----------Java基础(基本类型和包装类型、equals和hashCode、++和--、值传递和引用传递)
19. Java基本数据类型、有了基本数据类型,为什么还需要包装类型?19.1、Java基本数据类型,数值范围 Java共有4类8种基础数据类型:byte、short、int、long、float、double、char、boolean。 1、四种整数类型(byte、short、int、long):byte:8位,用于表示最小数据单位,如文件中数据,-128~127。 short:16位...原创 2019-03-04 18:39:48 · 599 阅读 · 0 评论 -
Java常见面试题汇总-----------Java基础(NIO与IO的区别)
18. NIO与IO的区别 NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。 NIO和IO的主要区别,下表总结了Java IO和NIO之间的主要区别:IONIO面向流...原创 2019-03-03 21:55:34 · 18694 阅读 · 6 评论 -
Java常见面试题汇总-----------Java基础(String和StringBuffer、StringBulider)
17. String与StringBuffer、StringBulider区别17.1、可变与不可变 在java中提供三个类String、StringBuillder、StringBuffer来表示和操作字符串。字符串就是多个字符的集合。 String是内容不可变的字符串。String底层使用了一个不可变的字符数组(final char[])。 StringBuilder与St...原创 2019-03-02 13:54:07 · 494 阅读 · 0 评论 -
Java常见面试题汇总-----------Java基础(排序算法、反射机制、异常处理机制)
14. 排序算法总结 冒泡排序:依次比较相邻元素的排序码,若发现逆序则交换。 可以设置一个变量记录,每轮比较的时候是否有元素交换,若没有则已经有序,没有必要再继续了。(对于原本有序的数组比较好,可由平方阶时间复杂度提升至线性阶)。如果两个元素相等,无需改变他们的位置,因此冒泡排序是稳定的。 快速排序:是对冒泡排序的一种改进。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据...原创 2019-03-01 15:15:22 · 765 阅读 · 0 评论 -
Java常见面试题汇总-----------Java基础(Final、Static、This和Super)
11. Final关键字 1、final修饰类:当用final修饰一个类时,表明这个类不能被继承。 也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。 在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑...原创 2019-02-28 15:18:06 · 975 阅读 · 0 评论 -
Java常见面试题汇总-----------Java基础(抽象类和接口、构造方法、内部类、枚举类)
7. 抽象类和接口的比较 1、什么是抽象类? 就是对类更高的抽象。抽象类作为多个子类的共同父类。它所体现的是一种模版设计,抽象类作为多个子类的父类,可以把它理解为系统实现过程中的中间产品,这个中间产品已经实现了系统的部分功能,但是不能当成最终产品,还需要进一步的完善。 当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法【抽象方法】,用abstract来修饰该类【抽象类】。...原创 2019-02-27 13:49:07 · 693 阅读 · 0 评论 -
Java常见面试题汇总-----------Java基础(跨平台、面向对象、重载和覆盖、访问修饰符)
1. Java环境配置 安装完JDK后配置环境变量:计算机→属性→高级系统设置→高级→环境变量。 1、系统变量→新建 JAVA_HOME 变量。变量值填写jdk的安装目录(本人是 D:\Program Java\jdk1.8.0_60); 2、系统变量→寻找 Path 变量→编辑,在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(注意原来Pat...原创 2019-02-24 15:08:20 · 391 阅读 · 0 评论