Java面试集锦 您所在的位置:网站首页 spring注入集合对象 Java面试集锦

Java面试集锦

2023-05-29 18:32| 来源: 网络整理| 查看: 265

0 分享至

用微信扫码二维码

分享至好友和朋友圈

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 反射是可以让我们在运行时,通过一个类的Class对象来获取它获取类的方法、属性、父类、接口等类的内部信息的机制。

这种动态获取信息以及动态调用对象的方法的功能称为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;

(2) DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;

(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.什么是索引?

索引(Index)是帮助MySQL高效获取数据的数据结构。我们可以简单理解为:快速查找排好序的一种数据结构。

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

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

/阅读下一篇/ 返回网易首页 下载网易新闻客户端


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有