java后台面试题

1.Tamocat几种部署方式?
答:静态部署,动态部署
(1)、直接把项目web文件夹放在webapps里。
(2)、在tomcat\conf\server.xml中的内部添加标签:

(3)、第三种方式和第二种差不多,但是不是在Server.xml文件中添加Context标签,而是在 
%tomcat_home%\conf\Catalina\localhost中添加一个XML文件,

2,如果启动tomcat服务时,告知Address localhost:8080 is already in use,请问如何解决?
答:打开任务管理器关掉java.exe
3.Tomcat 的核心配置文件是什么?
答.server.xml是tomcat的核心配置文件,通过配置server.xml可以灵活设置虚拟主机

4.多线程有几种实现方式 都是什么 同步有几种方法 都是什么?
答:多线程两种实现方式:一继承Thread类,重写run()方法,
同步有两种实现方式,分别是synchronized,wait与notify。

5.静态变量与实例变量的区别?
答:(1)静态变量叫类变量,这样变量前加了statuc修饰符。
(2)实例变量叫对象变量,这种变量没有加static修饰符。
(3)静态变量是所有对象共有的,某一个对象将它的值改变了,其他对象再去获取它的值,得到的是改变后的值;

   (4)实例变量则是每一个对象私有的,某一个对象将它的值改变了,不影响其他对象取值的结果,其他对象仍会得到实例变量一开始就被赋予的值。

6.Integer和int区别?
答:(1)Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。
(2)泛型支持Integer,并不支持int
(3)int:属于简单类型,不存在“引用”这个概念;其数据是存储在栈空间中;
Integer:属于继承自Object的类,是按照java存储对象的内存模型来存储的;引用存储在栈中,对象数据存储在堆中;

7.java中有几种类型的流?
答:(1)字节流
(2)字符流
(3)IO流

8.监视器的作用于用法?
(1)什么是web监听器?
  web监听器是一种Servlet中的特殊的类,它们能帮助开发者监听web中的特定事件,比如ServletContext,HttpSession,ServletRequest的创建和销毁;变量的创建、销毁和修改等。可以在某些动作前后增加处理,实现监控。
(2) 监听器常用的用途
  统计在线人数,利用HttpSessionLisener

  加载初始化信息:利用ServletContextListener

  统计网站访问量

  实现访问监控

9.分层的好处 ,坏处
好处:伸缩性
扩展性
维护性
重用性
管理型
坏处:当然,软件分层越多,对软件设计人员的要求就越高。在设计阶段,必须花时间构思合理的体系结构。

10.JQuery中有哪几种类型的选择器?
答(1)基本选择器
(2)层次选择器
(3)基本过滤选择器
(4)可见性过滤选择器
(5)属性选择器
(6)内容选择器
(7)子元素选择器
(8)表单选择器
(9)表单过滤选择器

11.jquery中的选择器和css中的选择器有什么区别?
答:JQuery选择器支持css里的选择器,jQuery选择器可用来添加样式和添加相应的行为,css中的选择器是只能添加相应的样式

12.JQuery选择器的优势?
答:id,class可以通过原生的方法获取到对应的节点,但是其中会有一些兼容性的问题。而jQuery的优势有很多,包括容易上手,利用更少的代码可以写出更多的功能,代码精短而高效,具有强大的选择器,可以解决浏览器的兼容,完善的事件机制,出色的Ajax封装,丰富的UI

13.servlet执行流程?
答: Get方式请求HelloServlet—->服务器在配置文档中查找相应的Servlet—->找到相对应的处理类—->再根据具体请求方式找对应的处理方法。

14.Servlet生命周期?
(1).初始化阶段,调用init()方法

(2).响应客户请求阶段,调用service()方法。由service()方法根据提交方式选择执行doGet()或者doPost()方法

(3).终止阶段,调用destroy方法

15.ServletMVC执行过程?
(1)用户发起请求到前端控制器DispatcherServlet
(2)DipstcherServlet请求处理映射器HandlerMapping查找Hander可以是根据XML查找,也可以是根据注解查找。
(3)HandlerMapping向DispatcherServlet返回Handler
(4)HandlerMapping
调用处理器适配器HandlerAdapter去执行Handler
(5)处理器适配器去执行Handler
(6)Handler执行完给处理器适配器返回ModelAndView ModeAndView是SpringMVC框架的一个底层对象,包括Model和View
(7)处理适配器给DispatcherServlet
返回ModelAndView
(8)DispatcherServlet请求视图解析器View resolver进行试图解析根据逻辑视图解析成真正的物理试图(jsp等)
(9)视图解析器向DispatcherServlet返回view
(10)DispatcherServlet进行视图渲染
(11)DispatcherServlet向用户响应结果
16..什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
答:(1)java虚拟机是一个可以执行java字节吗的虚拟机进程。java源文件被编译成能被java虚拟机执行的字节码文件。
(2)因为不同的平台装有不同的JVM,它们能够将相同的.class文件,解释成不同平台所需要的机器码。正是因为有JVM的存在,java被称为平台无关的编程语言。
17.创建型模式: 
答:1.简单工厂模式(不包含在gof23中) 
2.工厂模式 
3.抽象工厂模式 
4.单例模式 
5.原型模式 
创建者模式 
6.结构型模式: 
7.组合模式 
8.装饰者模式 
9.外观模式 
10.适配器模式 
11.代理模式 
12.享元模式 
13.桥接模式 
行为型模式: 
14.观察者模式 
15.策略模式 
16.状态模式 
17.中介模式 
18.模板方法 
19.命令模式 
20.备忘录模式 
21.访问者模式 
22.解释器模式 
23.迭代器模式 
24.职责链模式 
18.是否可以在static环境中访问非static变量?
答:static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。

19.是否可以在static环境中访问非static变量?
答:static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。

20.为何Map接口不继承Collection接口?
答:尽管Map接口和它的实现也是集合框架的一部分,但Map不是集合,集合也不是Map。因此,Map继承Collection毫无意义,反之亦然。 
如果Map继承Collection接口,那么元素去哪儿?Map包含key-value对,它提供抽取key或value列表集合的方法,但是它不适合“一组对象”规范
21.JAVA 中堆和栈的区别,说下java 的内存机制
a.基本数据类型比变量和对象的引用都是在栈分配的
b.堆内存用来存放由new创建的对象和数组
c.类变量(static修饰的变量),程序在一加载的时候就在堆中为类变量分配内存,堆中的内存地址存放在栈中
d.实例变量:当你使用java关键字new的时候,系统在堆中开辟并不一定是连续的空间分配给变量,是根据零散的堆内存地址,通过哈希算法换算为一长串数字以表征这个变量在堆中的”物理位置”,实例变量的生命周期–当实例变量的引用丢失后,将被GC(垃圾回收器)列入可回收“名单”中,但并不是马上就释放堆中内存
e.局部变量: 由声明在某方法,或某代码段里(比如for循环),执行到它的时候在栈中开辟内存,当局部变量一但脱离作用域,内存立即释放

22.单例模式:
答:单例模式核心只需要new一个实例对象的模式,比如数据库连接,在线人数等,一些网站上看到的在线人数统计就是通过单例模式实现的,把一个计时器存放在数据库或者内存中,当有人登陆的时候取出来加一再放回去,有人退出登陆的时候取出来减一再放回去,但是当有两个人同时登陆的时候,会同时取出计数器,同时加一,同时放回去,这样的话数据就会错误,所以需要一个全局变量的对象给全部人使用,只需要new出一个实例对象,这就是单例模式的应用,并且单例模式节省资源,因为它控制了实例对象的个数,并有利于gc回收。

23策略模式:
答:就是将几个类中公共的方法提取到一个新的类中,从而使扩展更容易,保证代码的可移植性,可维护性强。比如有个需求是写鸭子对象,鸭子有叫,飞,外形这三种方法,如果每个鸭子类都写这三个方法会出现代码的冗余,这时候我们可以把鸭子中的叫,飞,外形这三个方法提取出来,放到鸭父类中,让每个鸭子都继承这个鸭父类,重写这三个方法,这样封装的代码可移植性强,当用户提出新的需求比如鸭子会游泳,那么对于我们oo程序员来讲就非常简单了我们只需要在鸭父类中加一个游泳的方法,让会游泳的鸭子重写游泳方法就可以了。

24 工厂模式:
答:简单的工厂模式主要是统一提供实例对象的引用,通过工厂模式接口获取实例对象的引用。比如一个登陆功能,后端有三个类,controller类,interface类,实现接口的实现类。当客户端发出一个请求,当请求传到controller类中时,controller获取接口的引用对象,而实现接口的实现类中封装好了登陆的业务逻辑代码。当你需要加一个注册需求的时候只需要在接口类中加一个注册方法,实现类中实现方法,controller获取接口的引用对象即可,不需要改动原来的代码,这种做法是的可拓展性强。

25.Java内存模型是什么?
        Java内存模型规定和指引Java程序在不同的内存架构、CPU和操作系统间有确定性地行为。它在多线程的情况下尤其重要。Java内存模型对一个线程所做的变动能被其它线程可见提供了保证,它们之间是先行发生关系。这个关系定义了一些规则让程序员在并发编程时思路更清晰。比如,
先行发生关系确保了:线程内的代码能够按先后顺序执行,这被称为程序次序规则。对于同一个锁,一个解锁操作一定要发生在时间上后发生的另一个锁定操作之前,也叫做管程锁定规则。前一个对volatile的写操作在后一个volatile的读操作之前,也叫volatile变量规则。一个线程内的任何操作必需在这个线程的start()调用之后,也叫作线程启动规则。一个线程的所有操作都会在线程终止之前,线程终止规则。一个对象的终结操作必需在这个对象构造完成之后,也叫对象终结规则。

26.什么是线程池? 为什么要使用它?
     答:创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限。为了避免这些问题,在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程。从JDK1.5开始,Java API提供了Executor框架让你可以创建不同的线程池。比如单线程池,每次处理一个任务;数目固定的线程池或者是缓存线程池(一个适合很多生存期短的任务的程序的可扩展线程池)
        线程池的作用,就是在调用线程的时候初始化一定数量的线程,有线程过来的时候,先检测初始化的线程还有空的没有,没有就再看当前运行中的线程数是不是已经达到了最大数,如果没有,就新分配一个线程去处理。
        线程池的优点就是可以管理线程,有一个高度中枢,这样程序才不会乱,保证系统不会因为大量的并发而因为资源不足挂掉。

27.Java中活锁和死锁有什么区别?
        活锁:一个线程通常会有会响应其他线程的活动。如果其他线程也会响应另一个线程的活动,那么就有可能发生活锁。同死锁一样,发生活锁的线程无法继续执行。然而线程并没有阻塞——他们在忙于响应对方无法恢复工作。这就相当于两个在走廊相遇的人:甲向他自己的左边靠想让乙过去,而乙向他的右边靠想让甲过去。可见他们阻塞了对方。甲向他的右边靠,而乙向他的左边靠,他们还是阻塞了对方。
        死锁:两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多个线程同时但以不同的顺序请求同一组锁的时候,死锁会让你的程序挂起无法完成任务。

猜你喜欢

转载自blog.csdn.net/ITYSPS/article/details/81358349