java面试100题

2019-07-04  本文已影响0人  磨陀货_

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()】

  1.  选项卡Tabs
  2.  消息提示Message
  3.  From表单
  4.  DataGried表格
  5.  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.数据库索引会在什么情况下失效

  1.  条件中有or,即使其中有条件带索引也不会使用(少用or的原因)
  2.  like查询是%开头的(在后面加%)
  3.  如果类型是字符串,一定要在条件中将数据使用用引号引起来,否则不使用索引(查询字段没加引号)
  4.  全表扫描比使用索引快,则不用索引

17.:LinkList和ArrayList的区别

都是List,都是有序可重复的
   ArrayList底层是数组,查询效率高,插入和删除效率低
   LinkList底层是链表,查询效率低,插入和删除效率高

18.视图是什么

 就是一个查询语句组成的虚拟表
创建语法:create view 视图名称 as 查询语句


19.接口中可以写实现类么

 是可以写 ,但是不建议这么写 。 最后写个类


20.上传思路

  1.  前台页面以流的形式传递到后台servlet ---》form 表单里面的属性 enctype 覆写
  2.  后台servlet 解析这个文件流 ---》调方法 (上传文件工具类) a.先导包
  3.  把解析出来的流 写到一个文件夹里

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工具类.... .方法就可以

  1. 把java 对象列表转换为json对象数组,并转为字符串
    JSONArray array = JSONArray.fromObject(list);
    String jsonstr = array.toString();

  2. 把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


90.crm实际业务


91.Springcloud服务之间相互调用


92.商品中一共有几个服务


93.


94.


95.


96.


97.


98.


99.


100.



上一篇 下一篇

猜你喜欢

热点阅读