java面试100题
1.目前的最流行的三大框架
ssh-------------Struts2 + Spring + Hibernate
ssm------------Spring + SpringMVC + MyBatis
ssj--------------Struts2 + Spring + JPA
2.springcloud常用组件
1)服务注册中心 --- Eureka(实现服务治理--注册与发现服务)
2)负载均衡 --- Ribbon(通过springcloud封装,可以轻松的向服务的REST模板请求自动转换成客户端负载均衡的服务调用)
3)断路器 --- Hystrix(保护系统,控制故障范围)
4)服务网关 --- Zuul(api网关,路由,负载均衡等多种作用。类似Nginx反向代理)
5)分布式配置 --- Cinfig(配置管理)
3.mysql数据库索引会在什么情况下失效
1)like查询是以%开头:索引失效
2)条件中有or。及时其中有条件带索引也不会使用
3)如果列类型式字符串,那一定在条件中将数据引号引起来,否则失效
4.抽象类和接口的含义和区别和相同点
抽象类
抽象类不能创建实例,不能被实例化,只能作为父类被继承。抽象方法只做声明,而不包括实现,可以看成没有实现体的虚方法。
抽象类是从多个具体类中年抽象出来的父类,它具有更高层次的抽象。从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模板,从而避免子类的随意性。
一般公共业务的类会写成抽象类
接口
接口不能被实例化、接口只能包含方法声明、接口不能包含常量.字段.构造函数.静态成员。
语法:
interface 接口名{
字段 (只能全局变量)
方法 (只能抽象方法) 不能有构造方法
}
接口之间是多继承,接口与类之间是实现,类于类是单继承
能用接口就用接口,接口的扩展性强
接口和抽象类的区别
1)抽象类可以有构造方法,接口中不能有构造方法
2)抽象类中可以有普通成员变量,接口中没有普通成员变量
3)抽象类中可以包含静态方法,接口中不能包含静态方法
4)一个类可以实现多个接口,但只能继承一个抽象类
5)接口可以多重实现,抽象类只能被单一继承
6)如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法
相同点
1)都可以被继承
2)都不能被实例化
3)都可已包含方法声明
4)派生类必须实现未实现的方法
5.多态
核心意思是 继承和重写的方法下,用父类的变量接收子类的对象
用接口或父类引用子类的实例,真正调用还是调用子类的方法和属性;
6.抽象类中可以写实体类么?
抽象类不能实例化(创建对象)java规定
父类将所有子类的公共方法抽到父类中,而每一个子类实现的方式不同,并且必须重写新的方法体
7.jquery选择器
id选择器---- $("#myDiv").html("");
类选择器----$("#myClass").html("");
元素选择器 ----$("div").html("");
8.easyui主要用于什么?from表单关键字有哪些?主要用了哪些功能
easyui界面框架。js+HTML+css+jquery组合
创建组件.plugin({})
加载TreeMenu :TreeMenu.json
绑定按钮事件 on function()
删除remove
新增add
选中行datagrid
回显edit【获取选中行--判断一下--隐藏密码.hide()--取消验证.validatebox()--部门回显--加载选中数据到表单.from()--弹出表单.dialog()】
- 选项卡Tabs
- 消息提示Message
- From表单
- DataGried表格
- Layout布局
9.获取列元素用jQuery那种方式
1)通过某个事件获取 用live()方法
2)通过post从后台返回的值添加到<table>中 使用ajaxComplete()方法
10.动态生成页面的元素有哪些
append插入 当前元素最后一个子节点后面
prepend插入 当前元素第一个子节点前面
after--在元素后追加
before--在元素前追加
inserAflter--同级插入到后面和追加到后面
isserBefore--同级追加到前面和插入到前面
input.name--添加
button.value--删除
使用jquery创建元素的语法----把动态内容放到数组中,在遍历数组动态创建html---使用模板
script
11.MySQL的存储方式
静态存储
动态存储:varchar
参数类型INOUT输入输出、IN输入、OUT输出
12.MySQL存储流程
变量定义
创建临时表
循环
变量赋值
程序调用
程序创建
13.数据库表与表之间的关联方式?有哪些区别
一对一:qq QQ空间
多对一、一对多: 部门员工 员工部门
多对多:双主键,双外键
14.外连接使用的什么类型?
左外连接---left join
右外连接---right join
主要用左连接
15.左外链接和右外链接的区别
两个表:
A(id,name)
数据:(1,张三)(2,李四)(3,王五)
B(id,name)
数据:(1,学生)(2,老师)(4,校长)
左连接结果:
select A.,B. from A left join B on A.id=B.id;
1 张三 1 学生
2 李四 2 老师
3 王五 NULL NULL
右链接结果:
select A.,B. from A right join B on A.id=B.id;
1 张三 1 学生
2 李四 2 老师
NULL NULL 4 校长
比如有两个表一个是用户表,一个是交易记录表,如果我要查询每个用户的交易记录就要用到左外外连接,因为不是每个用户都有交易记录。
用到左外连接后,有交易记录的信息就会显示,没有的就显示NULL,就像上面我举得例子一样。
如果不用外连接的话,比如【王五】没有交易记录的话,那么用户表里的【王五】的信息就不会显示,就失去了查询所有用户交易记录的意义了。
16.数据库索引会在什么情况下失效
- 条件中有or,即使其中有条件带索引也不会使用(少用or的原因)
- like查询是%开头的(在后面加%)
- 如果类型是字符串,一定要在条件中将数据使用用引号引起来,否则不使用索引(查询字段没加引号)
- 全表扫描比使用索引快,则不用索引
17.:LinkList和ArrayList的区别
都是List,都是有序可重复的
ArrayList底层是数组,查询效率高,插入和删除效率低
LinkList底层是链表,查询效率低,插入和删除效率高
18.视图是什么
就是一个查询语句组成的虚拟表
创建语法:create view 视图名称 as 查询语句
19.接口中可以写实现类么
是可以写 ,但是不建议这么写 。 最后写个类
20.上传思路
- 前台页面以流的形式传递到后台servlet ---》form 表单里面的属性 enctype 覆写
- 后台servlet 解析这个文件流 ---》调方法 (上传文件工具类) a.先导包
- 把解析出来的流 写到一个文件夹里
21.javaScript
history对象
location(位置对象)
navigator(浏览器信息对象)
document对象
22.获取DOM元素的三种方式
方式一: document.getElementById(“id”); ----最常用
方式二: document.getElementsByName(“name”); ------通过名称获取元素 用下标取其中
方式三: document.getElementsByTagName(“input”); ------通过标签获取元素
23.讲一下什么是设计模式?常用的设计模式有哪些?
设计模式就是经过前人无数次的实践总结出的,设计过程中可以反复使用的、可以解决特定问题的设计方法。
单例(饱汉模式、饿汉模式)
1.构造方法私有化,让除了自己类中能创建外其他地方都不能创建
2.在自己的类中创建一个单实例(饱汉模式是一出来就创建单实例,而饿汉模式是需要的时候才创建)
3.提供一个方法获取该实例对象(创建时间需要进行方法同步)
工厂模式、代理模式、装饰者模式。
24.简单介绍一下Ajax?
Ajax--异步的javascript和xml
通过Ajax与服务器进行数据交换,Ajax可以使页面实现局部更新
HttpRequest对象,使用这个对象可以异步向服务器发送请求,获取响应,完成局部更新。
25.getparameter获取页面传递来参数
26JSON操作
直接取是取不出来的,下面是方式一、二
方式一jsonStr单双引号 都可以
方式二不可以 只支持双引号 JOSN.parse只是针对标准JSON格式key必须双引号包裹起来
JOSN数组
[{“name”:”张张”,”age”:”17”},{“name”:”张张”,”age”:”17”}] 多个对象一起使用
27.ajax
异步的javascript和xml组合起来
同步:一个操作1结束或者释放之后,另一个动作2才能进来,一个一个挨着执行
异步:一个操作1在执行过程,另外一个操作2也会执行, 不会等待操作1执行完
步骤
(1)创建XMLHttpRequest对象
//(1)创建一个xmlHttpRequest对象
var ajaxObj = createAjax();
(2)调用open建立method、url、async
//调用open建立method、url、async
ajaxObj.open("get","/getTime?date="+new Date(),true);
(3)监听状态响应结果
//监听状态响应结果
ajaxObj.onreadystatechange=function(){
if(ajaxObj.reaystate==4 && ajaxObj.status==200){
document.getElementById("myDiv").innerHTML=ajaxObj.responseText;
}
}
(4)发送
//发送
ajaxObj.send();
ajax核心
XMLHttpRequest核心对象 向服务器发送请求
28.多线程
实现多线程
1)继承Thread类
2)实现Runnable接口(继承扩展性不强,只支持单继承,如果继承Thread就不能在继承别的类了)
.start() 启动线程
.run() 运行线程
.wait() 等待阻塞
synchronized锁 关键字
thread.setName("设置一个线程名称"); 这样就可以区分线程
29.多态的好处
多态可以让我们不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法,
可扩展,添加新的子类,不影响已存类的多态性继承性
30.静态变量和实例变量的区别
静态要加static,实例不用
实例要创建对象后才可以通过这个对象使用,静态不用直接用类名来引用
31.进程和线程的主要区别
进程是操作系统资源分配的基本单位,线城市任务调度和执行的基本单位
进程是程序在某个数据集合上的一次运行活动;线程是进程中的一个执行路径。(进程可以创建多个线程)
一个进程里包线程。毎个进程都是一个独立的代码和数据空间,线程就是同一类线程共享代码和数据空间,线程必须依赖进程,进程可独立存在
32.java中Thread.sleep()和 Object.wait() 有什么区别?
第一:两个方法来自不同的类,一个是Thread类,一个是Object类
第二:sleep方法没有释放锁,而wait方法释放了锁
第三:wait,notify和notifyAll只能在同步控制块里面使用,sleep可以任何地方
第四:sleep必须要捕获异常,wait不需要
33.SQL语句查询重复和三表查询
select * from 表 where id in(select id from 表 group by id having cout(id) > 1)
34.说一下中间键的作用----mq(实现)
35.说一下get和post 的区别
36.说一下spring和springboot和springcloud三者的区别、作用、为什么用
37.说一下 java反射(用途、特点)
用途:1)获取反射中的Class对象2)通过反射创建对象
特点:很强大,灵活性避免写死
缺点:不能滥用
38.string和stringbuffer和stringbinkld区别
String是内容不可变的字符串。因为底层是有final修饰的
StringBuilder,StringBuffer是内容可以改变的字符串。
springbuilder是线程不安全的,效率高
Springbuffer是线程安全的,效率低
39.说一下集合有哪些?都有什么区别。ArrayList和Linkedlist那个更占空间,为什么
集合
List 是有序的,可以重复的
Set 是无序的,不可以重复的----重写(equals和hashcode方法 存储key-value的为map)
ArrayList底层使用是数组。LinkedList使用的是链表
ArrayList使用在查询比较 多,但是插入和删除比较少
LinkedList使用的查询比较少,但插入和删除比较多
40.spring的生命周期
41.线程的生命周期、线程的获取
新建:创建线程对象
没有执行资格就阻塞----操作可以阻塞,也可以放行激活,激活后运行
有执行资格就运行
最后结束死亡----变成垃圾等待回收
42.线程中两种阻塞的区别
线程睡眠:Thread.sleep方法 -----毫秒单位。线程阻塞
线程等待:Object类中wait()方法-------线程等待 。需要notify()唤醒方法
线程礼让:Thread.yield()方法
线程自闭:.join()方法
sleep()和wait()的区别
两者都是线程阻塞,
sleep()是Thread类的方法;wait()是Object类的方法
sleep()必须指定时间;wait()可以指定时间也可以不指定
sleep()不释放同步锁;wait()释放同步锁
sleep()可以在任意地方使用;wait()只能在同步代码块或者同步代码方法中使用
43.给你一个id怎么获取东西(前段)
jquery
就是前段js部分用from表单
<body>
<form id="xx" action="xxx/yyy/zzz"> //action里是提交到后台控制层的路径
<input type="text" name="name1" id="id1"//value="想让后台接到的值"/>
<input type="submit" value="提交"/>
</form>
</body>
后台注解加方法接受。。getvalue.getParemter
request.getParemeter("username");
后台控制层(Controller):
@RequestMapping(value="/xxx/yyy")
public class formController{
@RequestMapping(value = "/zzz")
public String getValue(String name1){ //比如说要传到后台的是一个string类型的字符串
System.out.println(name1); //打印出的值就是前台input里填写的value值
//这时你就可以将接到的前台的值再传到service里从而对数据库进行操作等
return "/mmm/nnn/lll"; //在对数据进行操作以后,可以返回你想返回的页面,return后跟的就是页面的路径
}
}
44.string可不可以被继承?为什么
不可以 因为有final修饰
45.常出现的异常(5种)
空指针异常---NullPointerException
数据类型转换异常---ClassCastException
传递非法参数异常---IllegalArgumentException
算数异常---ArithmeticException
下标越界异常---IndexOutOfBoundsException
不支持的操作异常---UnsupportedOperationException
IO流异常---IOException
运行时异常---RuntimeException
异常try
46.Liunx常用命令
<cd>进入目录
<cd..>返回上一级目录
<cd../..>返回上两级目录
<pwd>显示工作路径
<ls>查看目录中的文件
<mkdir test>创建名为test的文件
<mkdir test1/2/3>创建目录树
<rm -f test1>删除一个叫test1的文件
<cp dir1 dir2>复制一个文件
<find>文件搜索
<moutnt>挂载
<ls -lh>显示权限
<bzip2 dir1>压缩一个dir1的文件
47.数据库中用过哪些东西
视图、查询
48.java中创建对象的方式
1)new 2)反射 3)克隆
49.shiro的实现思路
50.es实现思路
51.redis的实现思路
52.Spring事务的传播特性
PROPAGATION_REQUIRED 如果没有,就开启一个事务;如果有,就加入当前事务(方法B看到自己已经运行在 方法A的事务内部,就不再起新的事务,直接加入方法A)
RROPAGATION_REQUIRES_NEW 如果没有,就开启一个事务;如果有,就将当前事务挂起。(方法A所在的事务就会挂起,方法B会起一个新的事务,等待方法B的事务完成以后,方法A才继续执行)
PROPAGATION_NESTED 如果没有,就开启一个事务;如果有,就在当前事务中嵌套其他事务
PROPAGATION_SUPPORTS 如果没有,就以非事务方式执行;如果有,就加入当前事务(方法B看到自己已经运行在 方法A的事务内部,就不再起新的事务,直接加入方法A)
PROPAGATION_NOT_SUPPORTED 如果没有,就以非事务方式执行;如果有,就将当前事务挂起,(方法A所在的事务就会挂起,而方法B以非事务的状态运行完,再继续方法A的事务)
PROPAGATION_NEVER 如果没有,就以非事务方式执行;如果有,就抛出异常。
PROPAGATION_MANDATORY 如果没有,就抛出异常;如果有,就使用当前事务
53.Spring中IOC的原理和AOP原理
IOC控制反转。原来自己创建DAO,现在Spring帮你
配置文件+反射+map
AOP面向切面编程
使用动态代理的设计模式在执行方法前后切入相关逻辑
54.servlet生命周期
加载class---实例化----初始化init----响应请求-----关闭
55.springmvc的执行流程
56.hashmap实现原理、数据结构、底层
57.SpringMVC中conterllor和Res的区别
58.mysql中索引有哪些
59.set和list的区别
set 不允许重复,无序
list 允许重复,有序
60.jdbc中批量写入 用什么方式效率最高
61.mybatis中#和$的区别
62.static介绍
它定义在函数的内部,只能在定义它的函数内部使用.属于静态存储方式
静态变量可以直接通过类访问,不用创建对象。
静态变量只在初始化的时候执行一次。
63.es和lucene的区别
64.负载均衡有哪些算法
随机、轮回
65.单点登陆是怎么实现的
通过jsonp方式回调返回凭证实现(可以跨域)、(或者Cookie不能跨域)
已返回验证后的token值进行效验
66.浏览器缓存
67.SpringMVC中芯处理器 Dis怎么分发的?里面有几个方法
68.将类实例化的方式
Object.getClass()
Class.forName()
new
反射
调用对象的clone()方法
io流
工厂 如:String a = String.valueOf(123);
69.通信协议 HTTP TCP
70.包装类和基本类的区别
1.集合不允许存放基本类型数据,只能存放引用类型数据,比如包装类型
2.基本类型和包装类之间可以相互转换,自动装箱拆箱
71.equery和==的区别
== 用来判断两个变量之间的值是否相等。分为基本数据类型变量和引用类型
如果是基本数据类型的变量就直接比较值
如果是引用类型就比较对应的引用的内存的首地址
equery 用来比较两个对象长得是否一样。判断两个对象的某些特征是否一样。
72.shiro实现了那些接口(主要的那几个)
Subject
SecurityManager
Realm
sessionManager
Authenticator
Cryptography
73.mybatis有那些标签 xml
74.事务无法回滚怎么解决?怎么控制事务?
将service层改用xml配置,其实这样做也是变相的让springmvc无法扫描service,而只能依赖父窗口也就是ServletContextListener来进行初始化,这样同样被赋予了事务性。
75.遇到异常怎么处理,处理方式
分析是上层的还是什么的,我这边的就记录,try,分析 不是 我的就抛
76.么情况会发生线程问题
涉及到数据共享及数据的修改的情况下都要考虑线程安全
77.# Thread和Runnable的区别
实现多线程有两种手段:
1)继承Thread类
2)实现Runable接口
实现Runnable接口比继承Thread类所具有的优势
1)适合多个相同的程序代码的线程去处理同一个资源
2)可以避免java中的单继承的限制
3)增加程序的健壮性,代码可以被多个线程共享,代码和数据独立
78.把对象转出json字符串 用到什么工具
json工具类.... .方法就可以
-
把java 对象列表转换为json对象数组,并转为字符串
JSONArray array = JSONArray.fromObject(list);
String jsonstr = array.toString(); -
把java对象转换成json对象,并转化为字符串
JSONObject object = JSONObject.fromObject(user);
Log4jInit.ysulogger.debug(object.toString());
3.把JSON字符串转换为JAVA 对象数组
JSONArray json = JSONArray.fromObject(userStr);//userStr是json字符串
List<User> users= (List<User>)JSONArray.toCollection(json, User.class);
4.把JSON字符串转换为JAVA 对象
JSONObject jsonobject = JSONObject.fromObject(jsonStr);
User user= (User)JSONObject.toBean(object,User.class);
79.mysql中分组的关键字、去重的关键字
分组:group by
排序:order by
平均值:avg
求和:sum
记录条数:count
最大最小值:max/min
模糊匹配:like
去重:distinct
增:insert
删:delete
改:update
查:select
80.# jQuery中对未来的元素绑定事件
用live()/.on
81.jdbc手写链接有几步?是什么
1)加载数据----2)获取连接----3)设置参数----4)执行----5)释放连接
82.maven打包用的什么命令
1、cmd--》c:\users\administrator-->mvn -version先看一下maven安装是否成功,环境变量是否配置正确
2、cd至需要打包的项目的路径处:cd D:\xx\work\xxx\hfqnc123\smtkMaven
3、然后在项目的路径下就可以使用maven命令:mvn package,mvn deploy等命令来对项目进行打包,部署
83.es的存储结构
84.mq在项目中的作用是什么
1.分布式服务间的异步通信
2.对Dubbo服务间的调用进行解耦
3.通过异步提高程序响应速度
异步通讯、解耦、并发缓冲
85.es属于什么数据库?什么类型的 数据库
Elasticsearch是非关系型数据库。
86.es和lucene的 区别
Elasticsearch基于Lucene构建,Elasticsearch利用Lucene做实际的工作。
87.FastDFSdfs使用优势
1)高可靠性,无单点故障
2)支持在线扩容,支持主从文件
3)解决大数据存储和负载均衡问题(中小文件适合)
4)只能通过专用的API访问,降低复杂度,处理效率高
5)存储上传文件和os文件系统中的文件一一对应
88.controller控制层的注解
@ControllerSpringmvc ---- 处理http请求
RestController ----- 返回json格式的数据
@GetMapping ---- 获得Get请求
@PostMapping(“/add”) 的作用是获得POST请求
@Autowired 和@Resource 都是注入bean,区别有待研究
@RequestMapping----路径
89.controller 和Requestcontroller 的区别
都是用来表示Spring某个类的是否可以接收HTTP请求
@RestController是@Controller和@ResponseBody的结合体,两个标注合并起来的作用在类开头上注明,作用是返回类中所有@RequestMapping(“”) 方法 的结果
一个是返回http,一个是返回json