Java面试集锦

2023-05-30 0 408

Java面试集锦

1.html与jsp差别?

答:HTML是文档记号词汇,它是动态网页;JSP网页是有JSP罐子继续执行该网页的Java标识符部份接着动态聚合动态网页,可动态预览网页上的文本。

在jsp时用<%%>就能写Java标识符了,而html没<%%>,html须要将第一类切换为Json展开可视化,不提议在jsp中写java标识符,引致标识符纷乱。

2.甚么是Jsp自订条码?

答:在jsp合作开发时,当jsp内建条码和JSTL标签库都满足用户没法市场需求时,能依照他们的市场需求源自订条码。只不过在jsp网页采用条码就等同初始化某一第一类的某一方式。承继TagSupport,撰写TLD。

3.GET和POST三种基本上允诺方式的差别

答:

1.GET允诺在URL中传输的模块是有宽度管制的,而POST没。

2.GET比POST更不安全可靠,即使模块间接曝露在URL上,因此无法用以传达脆弱重要信息。

3.GET模块透过URL传达,POST放到Requestbody中。

4.GET允诺模块会被完备留存在应用程序历史纪录里,而POST中的模块无法被留存。

5.GET允诺根本无法展开url代码,而POST全力支持多种不同数据流。

6.GET允诺会被应用程序积极主动cache,而POST无法,假如全自动增设。

7.GET造成的URL门牌号能被Bookmark,而POST无法。

8.GET在应用程序回退时是无害的,而POST会再次提交允诺。

GET和POST本质上没差别,HTTP协议中的三种发送允诺的方式,GET造成一个TCP数据包;POST造成两个TCP数据包。即使POST须要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为甚么?

1. GET与POST都有他们的语义,无法随便混用。

2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本上能无视。而在网络环境差的情况下,两次包的TCP在验证数据包完备性上,有非常大的优点。

3. 并不是所有应用程序都会在POST中发送两次包,Firefox就只发送一次。

4.jquery选择器有哪几种?

答:

1.元素选择器:$(“p”)

2. id选择器:$(“#test”)

3. .class 选择器:$(“.test”)

5.jQuery 库中的 $() 是甚么?

答:$() 函数是 jQuery() 函数的别称,$() 函数用于将任何第一类包裹成 jQuery 第一类,接着你就被允许初始化表述在 jQuery 第一类上的多个不同方式。

6.$(document).ready() 是个甚么函数?为甚么要用它?

答:当DOM 完全加载(例如HTML被完全解析DOM树构建完成时),jQuery允许你继续执行标识符

7.哪种方式更高效:document.getElementbyId(“myId”),还是 $(“#myId”)?常用的是哪种?

答:第一种,因为它间接初始化了 JavaScript 引擎;$(“#myId”)。

8.EasyUI DataGrid是甚么?

答:DataGrid以表格形式展示数据,并提供了丰富的选择、排序、分组和编辑数据的功能全力支持。是否全力支持单元格合并、多列标题、冻结列功能?

9. EasyUI Combobox是甚么?

组合框(combobox)显示一个可编辑的文档框和下拉列表,用户能从下拉列表中选择一个或多个值。用户能间接输入文档到列表的顶部,或者从列表中选择一个或多个现成的值。

后端(java基础)

1. 八种基本上数据类型的大小,和他们的封装类

八种基本上数据类型:int、short、float、double、long、boolean、byte、char。

封装类分别是:Integer、Short、Float、Double、Long、Boolean、Byte、Character。

2. 甚么是自动装箱拆箱?

装箱就是自动将基本上数据类型切换为包装器类型;拆箱就是自动将包装器类型切换为基本上数据类型。

3. Object是所有类的父类,任何类都默认承继Object。

4. String、StringBuffer与StringBuilder的差别

String:适用于少量的字符串操作的情况。

StringBuilder:适用于单线程下在字符缓冲区展开大量操作的情况。

StringBuffer:适用多线程下在字符缓冲区展开大量操作的情况。

StringBuilder:是线程不安全可靠的,而StringBuffer是线程安全可靠的。

运行速度快慢为:StringBuilder > StringBuffer > String。

String最慢的原因::String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String第一类一旦创建之后该第一类是不可更改的,但后两者的第一类是变量,是能更改的。

5. Map、Set、List

Map是键值对,键Key是唯一无法重复的,一个键对应一个值,值能重复。

HashMap不保证顺序,即为无序的。

TreeMap能保证顺序。

Set不包含重复元素的集合,有序的。

List有序的可重复集合。

6. try?catch?finally,try里有return,finally还继续执行么

肯定会继续执行finally{}块的标识符。只有在try{}块中包含遇到System.exit(0)之类的引致Java虚拟机间接退出的语句才会不继续执行。

当程序继续执行try{}遇到return时,程序会先继续执行return语句,但并无法立即返回,也就是把return语句要做的一切事情都准备好,在将要返回、但并未返回的时候,程序把继续执行流程转去继续执行finally块,当finally块继续执行完成后就间接返回刚才return语句已经准备好的结果。

7. IO与NIO

NIO是为了弥补IO操作的不足而诞生的,NIO的一些新特性有:非阻塞I/O,选择器,缓冲和管道。管道(Channel),缓冲(Buffer),选择器( Selector)是其主要特征。

IO是面向流的,NIO是面向块(缓冲区)的。

IO是阻塞的,NIO是非阻塞的。

那么NIO和IO各适用的场景是甚么呢?

如果须要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数据,例如聊天服务器,这时候用NIO处理数据可能是个很好的选择。

而如果只有少量的连接,而这些连接每次要发送大量的数据,这时候传统的IO更合适。采用哪种处理数据,须要在数据的响应等待时间和检查缓冲区数据的时间上作比较来权衡选择。

8. 甚么是Java的反射?

Java 反射是能让我们在运行时,通

应用场景:

反射技术常用在各类通用框架合作开发中。即使为了保证框架的通用性,须要依照配置文件加载不同的第一类或类,并初始化不同的方式,这个时候就会用到反射——运行时动态加载须要加载的第一类。

特点:

由于反射会额外消耗一定的系统资源,因此如果不须要动态地创建一个第一类,那么就不须要用反射。另外,反射初始化方式时能忽略权限检查,因此可能会破坏封装性而引致安全可靠问题。

9. 悲观锁与乐观锁

悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,因此每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程采用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

乐观锁总是假设最好的情况,每次去拿数据的时候都认为别人无法修改,因此无法上锁,但是在预览的时候会判断一下在此期间别人有没去预览这个数据,能采用版本号机制实现。乐观锁适用于多读的应用类型,这样能提高吞吐量。

三种锁的采用场景:

乐观锁适用于写比较少的情况下(多读场景),即冲突真的很少发生的时候,这样能省去了锁的开销,加大了系统的整个吞吐量。但如果是多写的情况,一般会经常造成冲突,这就会引致上层应用会不断的展开retry,这样反倒是降低了性能,因此一般多写的场景下用悲观锁就比较合适。

10. 甚么是设计模式

设计模式是一种解决方案,用于解决在软件设计中普遍存在的问题,是前辈们对之前软件设计中反复出现的问题的一个总结。常用模式有单例模式,工厂模式,代理模式,模板模式,观察者模式。

单例设计模式懒汉式和恶汉式:

懒汉式在类加载时不初始化,延迟加载。(配置文件)

饿汉式在类加载

饿汉式是线程安全可靠的,懒汉式须要加synchronized,否则不安全可靠。

11.Spring AOP是甚么

AOP(Aspect Oriented Programming) 面向切面编程,利用AOP能对业务逻辑的各个部份隔离,从而使的业务逻辑各部份的耦合性降低,提高程序的可重用性,提高合作开发效率,主要功能:日志记录,性能统计,安全可靠控制,事务处理,异常处理等。

AOP实现原理是java动态代理,但是jdk的动态代理必须实现接口,因此spring的aop是用cglib这个库实现的。

12.AOP与OOP的差别

OOP面向第一类编程,针对业务处理过程的实体及其属性和行为展开抽象封装,以获得更加清晰高效的逻辑单元划分。而AOP则是针对业务处理过程中的切面展开提取,它所面对的是处理过程的某一步骤或阶段,以获得逻辑过程的中各部份之间低耦合的隔离效果。这三种设计思想在目标上有着本质的差异。

13.Spring IOC是甚么

Java特性:多态,承继,封装;为甚么类的属性要表述为私有的?

控制反转,由spring自动生产,采用java的反射机制,依照配置文件在运行时动态的去创建第一类和管理对象,并初始化第一类的方式;依赖注入,有三种注入方式:构造器注入、setter方式注入、依照注解注入。

14.Spring事务的实现方式和实现原理:

Spring事务的本质只不过就是数据库对事务的全力支持,没数据库的事务全力支持,spring是无法提供事务功能的。真正的数据库层的事务提交和回滚是透过binlog或者redo log实现的。

15.脏读,不可重复读,幻读

常用传播行为:PROPAGATION_REQUIRED:如果当前没事务,就创建一个新事务,如果当前存在事务,就加入该事务。

MySQL的事务隔离级别一共有四个:

MySQL的默认事务隔离级别是:RepeatableRead(可重复读),会引致出现幻读。

脏读:通俗的讲,一个事务在处理过程中读取了另外一个事务未提交的数据。

你都还没提交,我就读到了你刚操作的数据,万一你回滚了怎么办,你说这脏不脏。

不可重复读(Non-repeatable Read):通俗的讲,一个事务范围内,多次查询某一数据,却得到不同的结果。

幻读: 事务A 按照一定条件展开数据读取,期间事务B 插入了相同搜索条件的新数据,事务A再次按照原先条件展开读取时,发现了事务B 新插入的数据称为幻读。

16.甚么是Spring MVC ?简单介绍下你对springMVC的理解?

Spring MVC是一个基于Java的实现了MVC设计模式的允诺驱动类型的轻量级Web框架,透过把Model,View,Controller分离,将web层展开职责解耦,把复杂的web应用分成逻辑清晰的几部份,简化合作开发,减少出错,方便组内合作开发人员之间的配合。

17.SpringMVC的流程?

(1)用户发送允诺至前端控制器DispatcherServlet;

(3)处理器映射器依照允诺url找到具体的处理器,聚合处理器第一类及处理器拦截器(如果有则聚合)一并返回给DispatcherServlet;

(4)DispatcherServlet 初始化 HandlerAdapter处理器适配器;

(5)HandlerAdapter 经过适配初始化

具体处理器(Handler,也叫后端控制器);

(6)Handler继续执行完成返回ModelAndView;

(7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;

(8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器展开解析;

(9)ViewResolver解析后返回具体View;

(10)DispatcherServlet对View展开渲染视图(即将模型数据填充至视图中)

(11)DispatcherServlet响应用户。

18. SpringMVC怎么样设定重定向和转发的?

(1)转发:在返回值前面加”forward:”,譬如”forward:user.do?name=sourcebyte”

(2)重定向:在返回值前面加”redirect:”,譬如”redirect:https://www.sourcebyte.vip”

19.Spring MVC的异常处理 ?

答:能将异常抛给Spring框架,由Spring框架来处理;我们只须要配置简单的异常处理器,在异常处理器中添视图网页即可。

20.如果前台有很多个模块传入,并且这些模块都是一个第一类的,那么怎么样快速得到这个第一类?

答:间接在方式中声明这个第一类,SpringMvc就自动会把属性赋值到这个第一类里面。

21.SpringMvc中函数的返回值是甚么?

答:返回值能有很多类型,有String, ModelAndView。ModelAndView类把视图和数据都合并的一起的,但一般用String比较好。

22.hibernate get和load差别

(1)get如果没找到会返回null, load如果没找到会抛出异常。

(2)get会先查一级缓存,再查二级缓存,接着查数据库;load会先查一级缓存,如果没找到,就创建代理第一类,等须要的时候去查询二级缓存和数据库。

23. Hibernate中的三种数据状态

临时态(瞬时态/Transient),持久态(Persistent),游离态(脱管态/Detached)

24.Hibernate有哪几种查询数据的方式

3种:hql、条件查询QBC(QueryByCriteria)、原生sql (透过createSQLQuery建立)

25. Hibernate是如何延迟加载

配置LAZY属性FetchType.LAZY。

26.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)

类与类之间的关系主要体现在表与表之间的关系展开操作,它们都是对第一类展开操作,我们程序中把所有的表与类都映射在一起,它们透过配置文件中的many-to-one、one-to-many、many-to-many。

27.delete、drop、truncate差别

truncate和delete只删除数据,不删除表结构,drop删除表结构,并且释放所占的空间。删除数据的速度,drop> truncate > delete。

delete属于DML词汇,需要事务管理,commit之后才能生效。drop和truncate属于DDL词汇,操作立刻生效,不可回滚。

采用场合:

当你不再须要该表时,用drop;当你仍要留存该表,但要删除所有记录时,用truncate;当你要删除部份记录时(always with a where clause),用delete。

28. 引致SQL继续执行慢的原因:

1.硬件问题。如网络速度慢,内存不足,I/O吞吐量小,磁盘空间满了等。

2.没索引或者索引失效。(一般在互联网公司,DBA会在半夜把表锁了,重新建立一遍索引,即使当你删除某一数据的时候,索引的树结构就不完备了。因此互联网公司的数据做的是假删除.一是为了做数据分析,二是为了不破坏索引)。

3.数据过多(分库分表)。

4.服务器调优及各个模块增设(调整my.cnf)。

5.分析原因,找切入点

1).先观察,开启慢查询日志,增设相应的阈值(比如超过3秒就是慢SQL),在生产环境跑上个一天过后,看看哪些SQL比较慢。

2).Explain和慢SQL分析。比如SQL语句写的烂,索引没或失效,关联查询太多(有时候是设计缺陷或者不得以的市场需求)等等。

3).Show Profile是比Explain更近一步的继续执行细节,能查询到继续执行每一个SQL都干了甚么事,这些事分别花了多少秒。

29.甚么是索引?

好序的一种数据结构。

Java面试集锦

如若转载,请注明出处:开源字节 https://sourcebyte.vip/article/318.html

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务