JAVA面试题
Posted nancheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA面试题相关的知识,希望对你有一定的参考价值。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.说说SpringMVC的流程?
①SpringMvc会请所有的请求提交给DispathService,它会委托给用户程序的其他模块进行行真正的处理工作。
②DispathService查询一个后多个HandelMapper,找到目标给Controller。
③DispathService提交给目标Controller
④Controllere进行业务处理后,返回一个ModelAndView。
⑤DispathService查询一个或多个ViewResolve视图解析器,找到ModelAndView对象指定的视图对象。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.Struts2是单列还是多列
struts2中action是多例的,即一个session产生一个action。struts 2的Action是多实例的并非单例,也就是每次请求产生一个Action的对象。
原因是:struts 2的Action中包含数据,
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3.说说SpringMvc设计模式?
①:M是模式:封装的数据提交视图显示。
②:V是视图:只展示数据,跟业务逻辑分离。
③:C控制器:用户提交的数据给业务逻辑处理,返回的数据和模型显示在视图上。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4.HTTP的请求方式?
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5.Spring和Struts2的区别?
①:Spring 入口是service即前端开发,Struts2是入口是filer过滤器。
②:Spring基于方法开发,传递的参数是方法的形参,可以设为单例模式。
③:Struts2是基于类的开发,传递的参数是类的属性,可以设为多列模式。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
6.如何进行权限管理?
用户认证和用户权限
用户认证是登录的时候用户名是否存在,用户密码是否正确,登录进去之后是什么样的,就要看授权,首先要看给用户什么样的角色,
然后给角色授权什么样的资源,不同的资源就有什么样的角色,就可以使用或看到的资源。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
7:写一个单例模式。
private static ConfigManager configManager;
//简单单例
public static synchronized ConfigManager getInstance(){
if(configManager==null){
configManager=new ConfigManager();
}
return configManager;
}
---------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1请用JAVA代码实现深搜算法,对给定的一个根节点,通过根节点查询节点的name属性为“目标”的子节点。(入参为一个Node类型的对象,Node有name属性和获取子节点的getChild方法,getChild返回值类型为List<Node>)
广度
深度
TreeSet<Integer> ts = new TreeSet<Integer>();
for(int i = 0; i < 10; i++){
ts.add(new Random().nextInt(999));
}
for(Iterator<Integer> it = ts.iterator(); it.hasNext();){
System.out.println(it.next());
}
2:若存在一个JS资源用于进行数据检查,要求每次加载必须使用最新的JS,请提供解决方案
--------------------------------------------------------------------------------------------------------------------------------------------------
3:谈谈json的加密解码
Escape加密 unEscape解密
escape() 函数可对字符串进行编码;
unescape() 函数可对字符串进行解码;
---------------------------------------------------------------------------------------------------------------------------------------------------------
4谈谈mybatis的缓存机制
①:一级缓存是session级别的缓存,作用域是在同一个session中执行两次sql语句,第一次执行完,会写到缓存内存中, 第二次会从内存中获取数据不用从数据库查询,从而提高效率, 当session结束后一级缓存也不存在,Mybatis默认开启一个一级缓存。
②:二级缓存是mapping级别的缓存,作用域是多个session操作sql语句,多个session去操作数据库得到的数据操作二级缓存区域,多个session可以共用二级缓存,二级缓存是跨session的。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5:线程的生命周期
新建 new thread 就绪 runnable 运行 running 堵塞 blocked 死亡 dead 睡眠 sleep
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
6:多线程解决这个问题,rj,lw有同一个账户和密码,里面有2W元,每次取款只能取5K,一个人在取款,另一个人等待。用Java模拟
@Override
public void run() {
synchronized (account) {
Withdraw withdraw = new Withdraw();
boolean flag =withdraw.withdraw(account, money);
if(flag){
System.out.println(name+"取款成功。余额:"+account.getMoney());
}else{
System.out.println("取款失败");
}
}
}
----------------------------------------------------------------------
public class Withdraw {
public synchronized boolean withdraw(Account from,double money){
if(money>5000){
throw new RuntimeException("本次取款不能超过5000");
}
if(from.getMoney()>money){
from.setMoney(from.getMoney()-money);
return true;
}else{
throw new RuntimeException("余额不足");
}
}
}
-----------------------------------------------------------------------------------------
public static void main(String[] args) {
new Thread(new MyTest().new Atm()).start();
}
class Atm implements Runnable{
@Override
public void run() {
Account account = new Account();
account.setAccount("123");
account.setMoney(20000);
AccountThread at1=new AccountThread(account, 5000, "张三");
AccountThread at2=new AccountThread(account, 5000, "李四");
Thread th1=new Thread(at1);
th1.start();
Thread th2=new Thread(at2);
th2.start();
}
}
7说说SpringMvc设计模式?
M是模型,封装数据提交给视图显示,
V是视图,只显示数据,和业务逻辑分离,
c是控制器,接受用户数据提交给业务逻辑,处理数据 , 返回数据和模型配和显示在视图上
-----------------------------------------------------------------------------------------------------------------------------------------------
8如何进行权限管理?
用户认证和用户权限。
用户认证就是在用户登录的时候认证用户是否存在,密码是否正确。在用户登录之后是什么样子,就要靠授权了,首先给不同的用户分配不同的角色,
然后给不同的角色授权不同的资源,不同的用户也就有了不同的权限,即可使用或者可看到的资源就会因人因角色而异了。
-----------------------------------------------------------------------------------------------------------------
9mysql的分页和模糊查询的单词
like limit
10:你们这个项目为什么有H5还要有JSP,H5不是也能实现数据交互吗
可以用anglar和vue去做但是我们公司的老大决定要用原始jsp.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.java的基本 类型
①int ②double ③folat ④byte ⑤login ⑥char ⑦shot ⑧:boolean
2.说一下aop,oop的理解 相同点和不同点。
①:aop是面向切面的编程。
②:opp是面向对象编程。
不同点:
①:面向目标不同. oop是面向名词,aop是面向动词.
②:思想结构不同。oop是纵向结构,aop是横向结构
③: 注重方面不同:oop注重逻辑单元的划分,aop注重的是业务处理的每个步骤和阶段。
OOP与AOP联系:
两者之间是一个相互补充和完善的关系。
3.有一个数组 int[12,45,26,12]现在要插入一个数56插入之后仍然按升序排列
/**
* @param args
*/
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//原数组
int num[]=new int[]{1,4,6,8};
//新建数组
int nums[]=new int [num.length+1];
//将原数组排序
Arrays.sort(num);
//遍历原数组至新数组
for (int i = 0; i < num.length; i++) {
nums[i]=i;
}
//友好提示要插入的新数字
System.out.print("请输入您要插入的新数字");
//接受用户输入
int num1= input.nextInt();
//插入的数组在新数组中的下标
int index =num.length;
//for循环遍历找到要插入数字的下标
for (int i = 0; i < nums.length; i++) {
if (num1<nums[i]) {
index=i;
break;
} }
System.out.println("要插入元素的下表为:"+index);
//将元素后移
for (int j = nums.length-1; j > index; j--) {
nums[j] = nums[j-1];
}
//插入数字
nums[index] = num1;
//for循环遍历输出新数组 //插入后的数组为
System.out.println("插入后的数组为:");
for (int k = 0; k < nums.length; k++) {
System.out.print(nums[k]+"");
}
}
4.现在有zs,ls有一个银行账号里面有2W元,限制每次只能取5K如果一个人人正在操作另一个就等待,请用java模拟。
5.请写出查询1000条到1001的存储过程
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
6.请写出优化数据库的策略。
1:应尽量避免在 where 子句中对字段进行 null 值判断
Select id from Goods where price=0;
2: 应尽量避免在 where 子句中使用 or 来连接条件
Select id from Goods price=10;
Union all
Select id from Goods price=20;
3:对于连续的数值,能用 between 就不要用 in 了:
Select id from Goods where price between 20 and 50;
4:应尽量避免在 where 子句中对字段进行表达式操作
Select id from Goods where price=2*4;
5:很多时候用 exists 代替 in 是一个好的选择:
Select num from a where exists(select 1 from b where num=a.num)
6:应尽量避免在where子句中对字段进行函数操作。
Select id from t where name like ‘abc%’;
或者 -------------------------------------------------------------------------------------------------------------
①基于索引优化。 ②优化sql语句。 ③避免或简化排序。
④避免相关子查询。 ⑤创建使用临时表 ⑥用排序来取代非顺序存取
---------------------------------------------------------------------------------------------------------------------------------------------------------
7.请简单描述一下表分区,及表分区的分类
①分区表就是通过使用分区技术,将一张大表,拆分成多个表分区(独立的segment),从而提升数据访问的性能,以及日常的可维护性。
①、范围分区(range partition)
范围分区主要依据分区键定义时给出的键值范围,根据实际的取值,进行分区的选择,进而在相应分区中存储数据。
② 、列表分区(list)
列表分区主要依据分区键定义时给出的取值列表,根据实际的取值,进行分区的选择,进而在相应分区中存储数据。
③、哈希分区(hash)
哈希分区 分区主要通过hash算法确定相应数据行应该被存放到哪个分区中。
④、组合分区(composite partition)
组合分区中,主要通过在不同列上,使用“范围分区”、“列表分区”以及“HASH分区”不同组合方式,进而实现组合分区。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
9.spring的几大模块,进行描述。
Spring七大模块:Spring Core,AOP,ORM,DAO,MVC,WEB,Content。
①:Spring Core模块是Spring的核心类库,Spring的所有功能都依赖于该类库,Core主要实现IOC功能,Sprign的所有功能都是借助IOC实现的。
②: Aop模块:是Spring的Aop库,提供给Aop(拦截器)机制,并提供常用的拦截器,供用用户自定义和配置.
③:ORM模块:Spring 的ORM模块提供对常用的ORM框架的管理和辅助支持,Spring支持常用的Hibernate,ibtas,jdao等框架的支持,Spring本身并不对ORM进行实现,仅对常见的ORM框架进行封装,并对其进行管理
④:Dao模块:Spring 提供对JDBC的支持,对JDBC进行封装,允许JDBC使用Spring资源,并能统一管理JDBC事物,并不对JDBC进行实现
⑤:WEB模块 WEB模块提供对常见框架如Struts1,WEBWORK(Struts 2),JSF的支持,Spring能够管理这些框架,将Spring的资源注入给框架,也能在这些框架的前后插入拦截器。
⑥,Context模块 Context模块提供框架式的Bean访问方式,其他程序可以通过Context访问Spring的Bean资源,相当于资源注入。
⑦:MVC模块 WEB MVC模块为Spring提供了一套轻量级的MVC实现,在Spring的开发中,我们既可以用Struts也可以用Spring自己的MVC框架,相对于Struts,Spring自己的MVC框架更加简洁和方便。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
10.springmvc的执行模式。
①SpringMvc会请所有的请求提交给DispathService,它会委托给用户程序的其他模块进行行真正的处理工作。
②DispathService查询一个后多个HandelMapper,找到目标给Controller。
③DispathService提交给目标Controller
④Controllere进行业务处理后,返回一个ModelAndView。
⑤DispathService查询一个或多个ViewResolve视图解析器,找到ModelAndView对象指定的视图对象。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.继承跟static的运行顺序
2.用for循环写99乘法表
for(int i=1;i<=9;i++){
for(int j=1;j<i;i++){
System.out.println(i+"*"+j+"="+(i*j));
}
system.out.print();
}
3.i++的那种套路题,问i的值是多少
4.描述servlet与flter的差异
不能直接向用户生成响应。
完整的流程是:Filter对用户请求进行预处理,接着将请求交给 Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
5.用struts循环map
Map<String, String> strMap = new HashMap<String, String>();
// 值为字符串
strMap.put("first", "zxx");
6.override与overload的区别
Override重写是子类对父类的方法进行重新编写语句块,发生在子类中。形参列表,返回值类型,方法名都一样。
Overload重载是在同一个类中,出现多个同名方法,形参列表不同即可。与返回值类型无关。
7.spring的bean的作用
①Sinleton:bean在Spring ioc这容器,只能实例化一个实例。
②:protoType;一个bean可以有多个实例。
②request:在http请求创建一个bean,作用域在web的spring Application情形中有效。
④:session:在http session中,一个bean定义一个实例,作用域在web的spring Application情形中有效。
⑤:global :session:在一个全局http session中,一个bean定义一个实例,作用域在web的spring Application情形中有效。
7.I0C,aop的概念与作用区别
ioc就是控制反转也是依赖注入。通俗的讲就是如果在什么地方需要一个对象,你自己不用去通过new 生成你需要的对象,而是通过spring的bean工厂为你生成这样一个对象。
aop就是面向切面的编程。比如说你每做一次对数据库操作,都要生成一句日志。如果,你对数据库的操作有很多类,那你每一类中都要写关于日志的方法。但 是如果你用aop,那么你可以写一个方法,在这个方法中有关于数据库操作的方法,每一次调用这个方法的时候,就加上生成日志的操作。
9.乐观锁悲观锁是什么?
1. 乐观锁是一种思想,具体实现是,表中有一个版本字段,第一次读的时候,获取到这个字段。处理完业务逻辑开始更新的时候,
需要再次查看该字段的值是否和第一次的一样。如果一样更新,反之拒绝。之所以叫乐观,因为这个模式没有从数据库加锁。
2. 悲观锁是读取的时候为后面的更新加锁,之后再来的读操作都会等待。这种是数据库锁乐观锁优点程序实现,不会存在死锁等问题。他的适用场景也相对乐观。
阻止不了除了程序之外的数据库操作。悲观锁是数据库实现,他阻止一切数据库操作。
10.写一个单例例子
private Config config;
public static Config getlist(){
if(config==null){
config=new Config();
}
return config;
}
11.写一个工厂模式的
品接口
//产品接口
public interface ProductI {
public void productName();
}
产品实体类
public class ProductA implements ProductI {
@Override
public void productName() {
System.out.println("product A");
}
}
public class ProductB implements ProductI {
@Override
public void productName() {
System.out.println("product B");
}
}
工厂类
// 简单工厂模式
public class Factory {
public ProductI create(String productName) {
switch (productName) {
case "A":
return new ProductA();
case "B":
return new ProductB();
default:
return null;
}
}
}
public class Client {
public static void main(String[] args) {
Factory factory = new Factory();
ProductI productA = factory.create("A");
productA.productName();
//
ProductI productB = factory.create("B");
productB.productName();
}
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.SSM框架中怎么在页面当中传一个对象到controller
@RequestMapping("save")
public Object save(Person person){
Person p = personService.save(person);
return p;
}
2.在controller中怎么返回JSON到页面当中
@ResponseBody
@RequestMapping("/getJson")
public Object getJson(){
return new Object();
}
3.在controller中怎么注入service
在XML中配置
<content:component-scan base-package="com.zt.action.loginaction">
在实现dao类中
@Repository
@Service
@Autowired
@Contrller
@RequestMapping
--------------------------------------------------------------------------------------------------------------------------------------------
4.spring Security框架的使用流程
-----------------------------------------------------
5.spring Security框架的实现步骤
SpringSecurity环境搭建(我用的是SpringSecurity 3.2)
SpringSecurity简单测试
自定义登录页面
使用数据库进行用户认证、密码加密
使用数据库进行URL资源认证
使用数据库进行Method资源认证
remember-me功能、验证码功能的实现
------------------------------------------------------------------------------------------------------------------------------------------------------
6.spring Security框架的底层实现原理
(1)在web.xml中配置过滤器,这样就可以控制这个项目的每个请求。
(2)在applicationContext.xml配置,其中http标签配置如何截用户请求,和配置用户认证(固定用户、使用数据库管理用户)。
(3)过滤器最上层为HttpSessionContextIntegrationFilter、然后是LogoutFilter
(4)spring security中重要的类SecurityContextHolder提供几种访问SecurityContext的方式;SecurityContext,
保存Authentication信息,和请求对应的安全信息;Authentication,展示Spring Security特定的主体
(5)以登陆和退出为例说明,登陆成功后通过认证,认证信息保存到securityContext中并给holder。
并可以通过String id= SecurityContextHolder.getContext().getAuthentication().getName(); 取出用户信息。
退出时则清空securityContextHolder。
7.在controller中response返回json字符串时返回到一半是页面是否可以接收到
------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------公司题目----------------------------------------------------------------------------------------------------------------------------------
直接就是面技术,主要问的问题是:
1.线程的生命周期
新建 new thread 就绪 runnable 运行 running 堵塞 blocked 死亡 dead 睡眠 sleep
2.请解释一下spring的IOC、DI和AOP
3.mybatis的缓存机制
4.MySQL的分页和模糊查询的单词
limit like
5.内连接和外连接的区别
1、内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现
2:外连接: 包括
(1)左外连接(左边的表不加限制)
(2)右外连接(右边的表不加限制)
(3)全外连接(左右两表都不加限制)
6.String和StringBuffer的区别
它们都可以存储和操作字符串,即包含多个字符的字符数据。
这和String类提供了数值不可改变的字符串。
而这个StringBuffer类提供的字符串可以进行修改,
当你知道字符数据要改变的时候你就可以用StringBuffer。典型的,
你可以使用StringBuffer来动态构造字符数据。如果最后需要String,那么使用StringBuffer的toString()方法
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
java集合有哪些,各集合的存储方式
set(集)、list(列表)和map(映射)。
区别嘛 HASHMAP只有KEY和value值对应的。。set是可以自动清楚相同的元素
list是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,当然,它与根本没有顺序的集是不同的。
列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。
MySql查询优化
简单说一下Spring
SpringMVC工作流程
简单说一下hibernate
优点:
1、程序更加面向对象;
2、提高了生产率;
3、方便移植(修改配置文件);
4、无侵入性。
缺点:
1、效率比JDBC略差;
2、不适合批量操作。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.java的集合类型
2.java多线程的实现
3.spring的优点
轻量级 运行速度快 方便面向切面编程 降低组件之间的耦合性
4.springIOC和AOP的理解
5.Mybatis的缓存
一级缓存是 SqlSession 级别的缓存
二级缓存是 mapper 级别的缓存,多个 SqlSession 共享
6.mybatis的Mapper实现
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
7.SpringMVC的传值方式
表单中input的name值和Controller的参数变量名保持一致,就能完成数据绑定,如果不一致可以使用@RequestParam注解
8.spring注解有哪些
@Component
@Controller
@ Service
@ Repository
9.mybatis的分页
RowBounds resultset的结果进行分页
10.有在linux搭建服务器吗?
11:char类型变量可以存储一个汉字吗?为什么?
可以的, char 在java中是2个字节,而一个汉字也是占用两个字节。
12:GET POST区别
GET(从服务器获取)
POST(向服务器发送请求数据)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
13:java集合有哪些,各集合的存储方式
set(集)、list(列表)和map(映射)。
区别嘛 HASHMAP只有KEY和value值对应的。。set是可以自动清楚相同的元素
list是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,当然,它与根本没有顺序的集是不同的。
列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:1
14简单说一下hibernate
优点:
1、程序更加面向对象;
2、提高了生产率;
3、方便移植(修改配置文件);
4、无侵入性。
缺点:
1、效率比JDBC略差;
2、不适合批量操作。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Hibernate的缓存有哪些,应用场景
--------------------------------------------------------------------------------------------
Spring两大核心分别是什么,具体说明。
ioc和Aop
Linux指令有了解吗
4:怎么配置Mybatis的延迟加载
lazyLoadingEnabled=true
----------------------------------------------------------------------------------------------------
5:get和load的区别是什么
① get()方法执行的时候,会立即向数据库发出查询语句,
② 而load()方法返回的是一个代理(此代理中只有一个id属性),只有等真正使用该对象属性的时候,才会发出sql语句
③如果数据库中没有对应的记录,get()方法返回的是null.而load()方法出现异常ObjectNotFoundException
6:了解序列化吗? 具体应用场景是什么
序列化的作用就是把对象编程二进制文件,反序列化的作用是把二进制文件转化为对象。
分布式应用。
-----------------------------------------------------------------------------------------------------------------------------------
7:ajax和jquery区别是什么
8:ajax无刷新实现的原理是什么
Ajax的原理就是:通过javascript的方式,将前台数据通过xmlhttp对象传递到后台,后台在接收到请求后,将需要的结果,再传回到前台,
这样就可以实现不需要页面的回发,页面是数据实现来回传递,从页实现无刷新。
最简单的一种方式是,能过JQuery来实现:
例:$.ajax({
url:"a.aspx?a=123",
type:"post",
success:function(data){
}
});
浙江网新恩普软件有限公司
以上是关于JAVA面试题的主要内容,如果未能解决你的问题,请参考以下文章
2020年1-6月份Java面试题总结,20多类1100道面试题含答案解析