java面试题

1.什么是线程?
定义:线程是程序执行的最小单元。
用途:通过多线程方式编程可以有效的挖掘CPU的使用效率,进而提升程序的执行效率。
2.线程具有哪些特征?
(1)原子性(不能再分割)
(2)没有独立的内存地址。
(4)线程与进程相可控性(能通过编程的方式进行开启、停止、睡眠等操作)
(3)共享进程内的资源,互依赖(谁也离不开谁)
3.Java中如何实现线程?
(1) 继承Thread
public class T1 extends Thread{
public void run(){
//线程主体,只要线程被启动,该方法就会被自动调用。
}
}

(2)实现Runnable
public class T1 implements Runnable{
	public void run(){
		//线程主体,只要线程被启动,该方法就会被自动调用。
	}
}

4.线程与进程有何区别?
(1)进程具有独立的内存地址,而线程只能共享进程内的资源。
(2)线程可以用程序代码来控制,而进程通常由操作系统来调度执行。
5.线程与进程有何联系?
(1)二者相互依赖,进程离不开线程,一个进程中功能主要通过多个线程来完成,
同样,线程也不能脱离进程而存在。
(2)一个程序至少有一个进程,一个进程中至少包含一个线程,这个线程叫主线程。
6.请详细阐述MVC?
(1)MVC是一种架构模式,在该模式中,程序被划分成三个主要模块,分别是:
视图(View)、模型(Model)、控制器(Controller)。
(2)在软件设计中,MVC模式有利于代码重用,也有利于团队协同开发,在需求发生变化时,能够更好的对软件进行重构,从而降低软件的维护成本 。
(3)这种模式适用于中大型项目的设计研发,反之,会增加代码量和项目的复杂度。
(4)精典的MVC模式解决方案有:Struts2,Spring MVC ,xWork等等。
(5)在MVC模式中,程序的执行流程如下:
视图向控制器发出请求–》控制器调用模型处理业务–》控制器将模型中的数据返回给视图
整个过程完全遵循了B/S程序架构的工作原理。
7.详细阐述B/S与C/S?
(1)B/S:它是Browser/Server的缩写,译为浏览器/服务器,在这种程序结构中,通常由浏览器来完成整个业务功能的展示,业务数据会由远程的服务器来持久化。
(2)C/S:它是Client/Server的缩写,译为客户端/服务器,在这种程序结构中,通常需要在客户端安装应用软件才能调用远程服务器上的数据。
(3)B/S程序的优点:数据维护更方便,只要服务器端的数据更新,客户端的数据自动更新。
(4)B/S程序的缺点:面向整个万维网,受众范围极广,容易受到安全攻击。
(5)C/S程序的优点:有更好的用户体验,访问过程是连续的,不易中断。
(6)C/S程序的缺点:数据更新成本高,只要服务端发生变化,客户端就需要更新。
8.你了解Java中的反射吗?请说明它的用途?
(1) 反射是Java中“动态获取”类的信息以及“动态调用”类的方法的一种机制。
(2) 反射中最主要的API有:Class,Method,Field,Constructor Modifier等。
(3) 其主要用途是在框架底层设计中,编辑器中的代码提示功能也是用反射来实现的。
9.你使用过哪些XML解析器,各有什么特点?
(1)DOM:
一次加载,随机定位(一次性将整个文档加载到内存,可以通过多种不同的方式获取其中的任一节点)
(2)SAX:
事件驱动,顺序解析(会在加载文档时触发事件,比如文档开始,元素开始,文档结束元素结束,并且是从头至尾顺序解析其中的节点)
(3)DOM解析,耗费内存,但提取数据灵活,而SAX节省内存,提取数据则需借助事件驱动完成。
10.衡量一个程序性能的指标有哪些?
(1)时间复杂度,程序执行某功能所需时间,时间越短,效率越高。
(2)空间复杂度,程序执行某功能所需的内存空间,所需空间的字节数据越少,效率越高。
(3)用户体验,用户在使用软件时的感受,不单是考虑性能,还要追求极致的用户美誉度。

11.软件开发的标准流程是怎样的?
标准软件开发的流程如下:
市场调研–》
需求分析–》
概要设计–》
详细设计–》
编码–》
测试–》
发布–》
维护
12.项目开发过程中你使用过哪些工具呢?
(1)SVN,Maven,Git
(2)Visio(流程图设计和其它建模),Project(项目计划)
(3)Eclipse,MyEclipse,Webstorm,Hbuilder,Dreaweaver,
PS,Axure,Oracle,MySQL,SQLServer,Tomcat,Weblogic,Jboss,JDK等。
13.JSP运行过程是怎样的?
(1)初次被访问时需要经历三个阶段,依次是:翻译(jsp–>servlet)、编译(servlet-
->class文件)、执行(class文件)所以,有时候第一次访问JSP会感觉有些慢。
(2)第二次访问时直接执行class文件,会优先从work文件夹中读取缓存数据。

14.Servlet生命周期是怎样的?
(1)(实例化:在服务器的内存中开辟空间加载实例)
(2)(初始化:对业务相关的数据初始化)
(3)(服务:每次客户端发送HTTP请求都会被接待)
(4)(销毁:服务器停止时自动释放资源)

15.HTML与JSP有什么区别?
(1)运行机制不同,HTML是运行在客户端,是一种标记语言,由浏览器解释执行;JSP运行在服务器端,需要web容器提供运行环境。
(2)用途不同,HTML侧重于静态数据展示,JSP侧重于和服务器交互,主要用动态网页开发。
(3)JSP是一个特殊的HTML,相当于在HTML中嵌入了Java代码。
16.JavaScript有什么特点?
(1)运行在客户端,由浏览器解释执行,无需编译。
(2)是一种“动态语言”,程序中的数据类型在运行时才能确定,声明变量统一使用“var”关键字,从这个意义上来讲,JS又是一种 “弱类型语言”。
(3)是一种“事件驱动”语言,通常通过用户的某些操作来触发和调用函数。
(4)主要用途是实现前端表单验证、动态交互特效,通常“不涉及核心业务”。
17.数组与集合有什么区别?
(1)数组是有序的,它会连续分配内存空间来存储数据,集合则因集合类型不同呈现出不同的特征。
(2)无法通过数组的长度(length)来确保数组中元素的真实个数,但集合,可以。
(3)集合支持迭代器(Iterator)操作,但数组不能。
18.List与Set有什么区别?
(1)List集合中的数据是有序且允许重复
(2)Set集合中的数据是无序且不允许重复

19.Struts,Hibernate,Spring,MyBatis在项目中的用途分别是什么?
(1)Struts 主要用于业务流程的控制。
(2)Hibernate主要用于数据持久化。
(3)Spring主要用于系统集成,简化业务。
(4)MyBatis主要用于数据持久化。

20.Hibernate与MyBatis有何不同?
(1)Hibernate是一个“ORM框架”,完全可以脱离SQL实现数据持久化,
封装性好,有利于数据库的移植。
(2)MyBatis是一个“半自动化的SQL映射”框架,操作数据依然离不开SQL语句,
效率较高但不便于数据库移植。
21.Java的运行机制?
首先,编写Java源文件定义类
其次,编译源文件生成二进制中间码,存储在class文件中
然后,通过运行与操作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来实现程序的调用 。
22.Java有哪些特点?
跨平台、安全性、健壮性、面向对象、分布式、多线程。
23.什么是JVM?有何用途?
(1)定义:JVM是Java Virtual Machine,译成中文为“Java虚拟机”。
(2)用途:JVM是java的核心和基础,它是处在java编译器和操作系统之间的虚拟处理器。它是一种基于底层操作系统并利用软件设计方法来实现的抽象计算机,JVM是Java程序运行的容器,同时也是操作系统的一个进程, JVM在整个JDK中处于最底层,它负责与操作系统的交互,用来屏蔽操作系统环境,给Java程序提供一个完整的运行环境。

24.说说JVM执行程序的过程?
JVM执行程序的过程如下 :
(1)加载.class文件
(2)管理并分配内存
(3)执行垃圾收集

25.面向对象设计的基本原则有哪些?
(1)开闭原则
(2)单一职责
(3)接口隔离
(4)依赖倒置
(5)合成复用
(6)里氏替换
(7)迪米特法则
26.什么是单例模式?
(1)定义:
最初的定义出现于《设计模式》 “保证一个类仅有一个实例,并提供一个访问它的全局访问点。”
Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”
(2)设计要点:
(a)某个类只能有一个实例;(b)它必须自行创建这个实例;(c)它必须自行向整个系统提供这个实例。
(3)示例代码
第一种形式:懒汉式,也是常用的形式。
public class SingletonClass{
private SingletonClass(){}
private static SingletonClass instance=null;
public static synchronized SingletonClass getInstance(){
if(instance==null){
instance=new SingletonClass();
}
return instance;
}

}
第二种形式:饿汉式
public class Singleton{
private Singleton(){}
private static final Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
}
27.什么是AJAX?
(1)AJAX全称是:Asynchronous JavaScript And XML ,即异步JavaScript和XML,是一种创建交互式网页的技术。
(2)显著特点:“异步请求,局步刷新”
(3)技术优势:增强客户端体验,减轻服务器压力。
(4)核心对象:XMLHttpRequest是用来发送请求和处理响应的核心对象。
(5)工作原理:在用户和服务器这间增加了一个中间层(AJAX引擎),使用户操作与服务器响应异步化,由AJAX引擎向服务器提交请求,从服务器获得数据,然后用JS来操作DOM更新页面。
(6)解决方案:原生JS,jQuery,DWR,prototype等。
28.谈谈什么是面向对象编程?
(1)面向对象编程是一种编程思想,它的英文全称是Object Oriented Programming,缩写成OOP,作为编程的精髓,OOP对软件的整体设计至关重要。
(2)通俗理解,面向对象编程就是用程序语言描述现实世界,程序把现实世界看作是不同的个体(对象),它们拥有各自的属性和行为,同时个体之间又相互协作(方法调用)共同完成一个具体的任务。
(3)面向对象的三大特征:封装、继承、多态,通过封装,可以对外隐藏类的实现细节,只提供公共功能。通过继承,可以更好的重用代码,减少代码冗余度,也可以通过子类重写父类方法,从而改变其默认行为。通过多态,可以最大限度的使用抽象类或接口,增强软件设计的灵活性,使程序易于扩展和维护。
29.Collection与Collections有何区别?
(1)Collection是集合中的一个顶级接口,而collections是集合中的一个算法处理类。
30.谈谈抽象类与接口有什么区别?
(1)定位不同:
接口主要用于框架底层设计,由接口构成框架的主体架构。
而抽象类主要用于框架底层的默认实现,完成一定的基础功能。
(2)编码的细节方面也有诸多差异:
(2.1)接口之间可以实现多重继承,但抽象类依然保持单一继承。
(2.2)接口中声明的变量会自动编译成常量,声明时必须赋初值,抽象类不受限制。
(2.3)接口中的访问修饰符都是public ,而抽象类不受限制。
(2.4)声明接口使用 “interface” 关键字,声明抽象类使用“abstract class” 关键字
(2.5)接口中所有方法都是抽象的,而抽象类中可以包含非抽象方法。
(2.6)接口中不能定义构造方法,而抽象类中可以。

31.Struts2与SpringMVC有何区别?
(1)SpringMVC的核心控制器是基于servlet技术,而Struts2是基于filter.
(2)Struts2是类级别的拦截, 一个类对应一个request上下文,
SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从设计架构而言,SpringMVC更容易实现restful,而struts2相对比较复杂。

(3)拦截器实现机制方面,Struts2有自己的interceptor机制,SpringMVC采用的是独立的AOP方式,因此Struts2的配置文件量比SpringMVC大。
32.请求转发与重定向有何区别?
(1)请求转发是通过request的方法实现,而重定向是通过response的方法实现。
(2)请求转发共享request域内数据,而重定向不能。
(3)请求转发时地址栏不会发生改变,而重定向后地址栏发生了变化。
(4)请求转发仅限站内,而重定向可以跨站访问.。
33.JSP的九大内置对象分别是什么?
(1)page 指当前页面本身,类似类中的this指针
(2)request 客户端的请求信息被封装在request对象中
(3)session 指的是客户端与服务器的一次会话
(4)application 实现用户间数据共享,可存放全局变量,它开始于服务器
的启动,直到服务器的关闭
(5)response对象包含了响应客户请求的有关信息
(6)out 是向客户端输出内容
(7)exception 异常对象,当一个页面在运行过程中发生异常时产生。
(8)pageConext 提供了对JSP页面内所有的对象及名字空间的访问
(9)config 包括Servlet初始化时的有关信息.
34.描述Spring MVC运行原理?
(1)客户端向web服务器发出请求,web服务器对请求信息进行解析,如果匹配DispatcherServlet的请求映射,web服务器将请求转交给DispatcherServlet.。
(2) DipatcherServlet接收到请求之后,将根据请求的信息以及HandlerMapping的配置,找到处理请求的处理器(Handler)。

(3)DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给Handler。
(4)由具体的HandlerAdapter对Handler进行具体的处理。
(5)Handler对数据处理完成后,返回一个ModelAndView对象给DispatcherServlet。
(6)Handler返回的ModelAndView,只是一个逻辑视图(并非物理视图)
DispatcherSevlet通过ViewResolver将逻辑视图转化为物理视图。
(7)Dispatcher通过model解析出ModelAndView中的参数,最终展现出完整的view并返回给客户端。
35.Session与Cookie有何区别?
(1)Session是服务器端的一种会话跟踪技术,用于记录客户端的状态,安全性高。
(2)Cookie是客户端技会话跟踪术,信息存放在客户端,安全性低。
(3)session 中可以存储多种数据类型,而Cookie中只能存储文本类型。
36.你熟练哪些前端框架?
(1)Angular。
(2)JQuery。
(3)BootStrap。
(4)Node。
(5)VUE。
(6)React。
(7)MUI。
37.重载(overload)与重写(override)有何区别?
(1)重载:同一类中,同名的方法,不同的参数列表(数量、类型、顺序)。
(2)重写:在继承关系中,子类中拥有和父类完全一致的方法。
(3)静态方法不能被重写。
(4)子类方法的访问修饰符可以比父类更宽松,子类方法的参数类型或返回值类型可以是父类方法的子类,也属于方法重写范畴。

38.你了解的开源项目有哪些?
(1)struts2
(2)maven
(3)Ant
(4)SVN
(5)DWR
(6)XFire
(7)GitHub
(8)Spring
(9)Hibernate
(10)MyBatis
(11)Android
(12)Hadoop
(13) 其它

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小坏蛋至尊宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值