java开发常见面试题

java开发常见面试题

一、数据库
1.1、数据库索引是什么,有什么优缺点
索引是对数据库中一个或多个列进行排序的结构;通过使用索引大大提高了数据库检索的速度,改善了数据库的性能;索引常见分类:聚集索引,非聚集索引,唯一索引,复合索引,全文索引,主键索引。它最大的优点是提高了查询的效率;但是数据库中加了索引之后,对数据的修改操作就比较麻烦,在更新数据的同时要更新索引;当数据库涉及到大量数据改动的情况下建议不使用索引。

1.2、什么是存储过程,有什么优点
存储过程是一个为完成特定功能的sql语句集,是由sql语句和流程控制写的命名语句块,经编译和优化后存储在数据库服务器中,程序若要使用直接调用即可,可通过指定存储过程的名字和参数来调用;
优点:具有良好的安全性,执行速度快,效率高,减少网络流量,模块化程序设计(可封装业务逻辑,并存进数据服务器中,当业务逻辑发生变化时,无需修改调用存储过程的程序只需修改存储过程)
缺点:代码的可读性差,程序调试麻烦,代码的可移植性差

1.3、数据库优化知道哪些
在写查询语句时,写全字段名,避免使用*;设计数据库时避免关联外键,由于外键的约束,在插入和删除数据时比较麻烦;涉及到大量查询数据时尽量多的使用数据库索引,提高效率;在写sql语句时全部大写,尤其是列名和表名;将能过滤掉大量数据的条件放在where子句的末尾;避免在索引列上使用IS NULL或者IS NOT NULL。

1.4、什么是事务,事物的特性,事物的隔离级别有哪些
事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作,是一组不可分割的操作集合;
事物的特性:原子性,隔离性,一致性,持久性;
隔离级别:读未提交,读提交,可重复读,序列化;

1.5、数据库常见的数据类型有哪些,char和varchar有什么区别
常见的数据类型有:int,bigint,double,date,char,varchar等,char表示长度固定的字符串,varchar表示长度可变的字符串;当知道所要存储的数据的长度时使用char更好,避免占用多的存储空间。

二、java基础
2.1、什么是多线程,线程池;创建多线程有几种方式
系统可以执行多个任务,每个任务就是一个进程;每个进程可以执行多个任务,每个任务就是线程,进程和线程是父与子的关系;进程之间不能共享内存,但是线程之间共享内存很容易。
创建线程的三种方式:继承Thread类,重写run()方法,实现Runnable接口,重写run()方法,实现Callable接口重写call()方法;

创建线程的三种方式对比
采用实现Runnable,Callable接口的方式创建多线程的优缺点:
1>.线程类只是实现了Runnable接口或Callable接口,还可以继承其他类
2>.多个线程可以共享同一个target对象,非常适合多个相同线程来处理同一份资源的情况,较好的体现了面向对象的思想
3>.需要访问当前线程,则必须使用Thread.currentThread()方法
采用继承Thread类的方式创建多线程的优缺点:
1>.因为该线程已经继承了Thread类,所以不能在继承其他父类
2>.编写简单,如果需要访问当前线程,则无需使用Thread.currentThread()方法,直接使用this即可获得当前线程.

线程池:是一种线程的使用模式;线程过多会造成调度开销大,影响缓存局部性和整体性能,而线城池维护着多个线程,等待系统分配可并发执行的任务;线程池不仅能保证内核的充分利用,还能防止过分的调度。线程池种类:单线程的线程池:newSingleThreadExecutor,固定大小的线程池:newFixedThreadPool,可缓存的线程池:newCachedThreadPool,支持定时及周期性线程池:newScheduledThreadPool,根据所需的并行层次动态创建和关闭线程的线程池:newWorkStealingPool。

2.2、String,StringBuffer和StringBuider的区别
String表示长度不可变得字符串,StringBuffer和StringBuider表示长度可变带缓冲区的字符串;StringBuffer是线程安全的,而StringBuider是线程不安全的,但执行效率比StringBuffer要高;

2.3、常用的集合有哪些,分别有什么特点,遍历集合的方式有哪些
ArrayList,LinkedList,HashMap,HashSet;Arraylist是以数组的形式存储数据,有连续的存储空间,元素是有序的,可重复的,在查询数据时效率较高;LinkedList是以链表的形式存储数据,元素是有序的,可重复的,插入和删除数据时效率较高;HashMap是以键值对的形式存储数据,键和值是可以为null的,但是键不能重复;HashSet存储数据是唯一的,无序的。遍历集合有三种方式:普通for循环,增强for循环,迭代器。

2.4、单例模式
2.4.1线程不安全的

Public class Single{
	Private static Single single;
	Private single(){}
	Public static Single getSingle(){
		If(single==null){
			Single=new Single();
}
Return single;
}
}

2.4.2、线程安全的

Public class Single{
	Private Single single;
	Private Single(){}
	Public static synchornized Single getSingle(){
		if(single==null){
		single=new Single();
	}
		Return single;
	}
}

2.5、冒泡排序

Int  []arr ={23,15,6,28,3,12};
for(int i=0;i<arr.length;i++){
	for(int j=i;j<arr.length;j++){
		if(arr[i]>arr[j]){
			int  t=arr[i];
			arr[i]=arr[j];
			arr[j]=t;
		}
	}
}

2.6、封装、继承、多态
2.6.1、封装:面向对象的三大特性之一,将类的属性设置成私有的,封装在类的内部;外部程序不能直接访问;须通过类提供的公共的get和set方法才能对属性进行操作。

2.6.2、继承:将多个类所共有的方法抽取出来放在一个类中,在定义类时,在这个原有的类的基础上进行,将原有的类中的内容作为自己的内容,根据特殊的需求加以新的方法或者对原有的方法进行修改;无法继承父类的构造方法。

2.6.3、多态:是同一个实现接口使用不同的实例而执行不同的操作,子类继承父类的方法,并通过父类的引用类型来接收子类的实例化对象,动态的调用所需的方法。

三、框架
3.1、对spring框架的理解
spring是一个开源的控制反转和面向切面的容器框架,其核心是一个完整的控制反转的轻量级容器;其好处是降低了组件之间的耦合度,实现软件各层之间的解耦合;提供了AOP技术利用它很容易实现权限拦截等功能;对主流的应用框架提供了集成支持。

3.2、对spring的IOC,AOP的理解
IOC:控制反转是应用本身不负责依赖对象的创建及维护,依赖对象的创建和维护是由外部容器负责的。IOC将处理事情的责任从应用程序转移到框架,spring框架使用JavaBean属性和配置数据来指定必须设置的依赖关系,由spring框架来负责控制对象的生命周期和对象之间的关系,程序在运行过程中IOC会动态的为程序中的某个对象提供他所需的其他对象,通过依赖注入实现。

AOP:面向切面编程,AOP的核心构造是切面,它将那些影响多个类的行为封装到可重用的模块中;spring采用jdk动态代理模式来实现AOP机制,将切面使用动态代理的方式动态织入到目标对象形成一个代理对象,目标对象如果是final类,并且也没有实现代理接口,就不能应用AOP。

3.3、SpringMvc的工作机制
1>、Springmvc将用户的请求都提交给dispatcherServlet,他会委托给应用系统的其他模块负责对请求进行真正的处理工作
2>、DispatcherServlet查询一个或多个HandleMapping,找到处理请求的Controller
3>、DispatcherServlet请求提交到目标Controller
4>、DispatcherServlet查询一个或多个视图解析器,找到ModelAndView对象指定的视图对象
5>、视图对象负责渲染返回给客户端

3.4、SSM整合
三大核心配置文件以及web.xml文件
Spring配置:
1>、开启spring注解驱动;
2>、读取数据库连接配置文件properties;
3>、配置数据库连接池(数据库连接四大参数);
4>、配置事务管理;
5>、开启事务管理的注解驱动;
6>、spring管理mybatis配置文件,(数据源,加载mybatis核心配置文件,加载sql映射文件);
7>、spring管理mybatis映射接口和sql映射文件之间的关联关系;

Mybatis配置:
核心配置文件和映射文件mapper.xml;核心配置文件:mybatis的全局配置文件,配置了mybatis的运行环境(包括事务管理,数据源),数据库连接的配置文件,别名,日志输出,分页插件以及加载映射文件。

SpringMvc配置:
1>、开启controller层注解驱动
2>、开启SpringMvc特有的注解驱动:像RequestMapping,RequestParam,Responsebody
3>、配置SpringMvc默认的servlet
4>、配置视图解析器(可不配置)
5>、配置处理jsp页面的前后缀

web.xml配置文件配置:
1>、加载spring核心配置文件;
2>、配置监听器项目启动就加载spring核心配置文件;
3>、配置解决post方法中request请求参数中文乱码(是否支持异步);
4>、配置dispatcherServlet,优先加载SpringMvc配置文件;
5>、配置默认启动首页以及错误页;

3.5、对springboot和springcloud的理解
1>、springboot:是对spring的进一步封装,简化了基于spring的应用开发,通过少量的代码就能创建一个独立的,产品级的spring应用;springboot为spring平台提供开箱即用的设置,多数springboot应用只需要少量的spring配置;核心思想就是约定大于配置,一切自动完成,减少了大量的xml配置。
2>、springcloud:是一套分布式服务治理的框架,他本身不会提供具体的功能性操作,更专注于服务之间的通讯、熔断、监控等;springcloud很大一部分是基于springboot来实现的,springboot可以独立于springcloud框架开发应用程序;但springcloud必须基于springcloud来完成开发,属于依赖关系。
3>、分布式项目的开发除了使用springboot+springcloud框架外,还可以使用springboot+dubbo+zookeeper来搭建分布式

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值