手记

面试题笔记

面试题

2.1.11
线程的几种实现方法?
1.继承Thread类实现 2.实现Runnable接口实现
继承扩展性不强(只支持单继承)
怎么启动?
Thread thread =new Thread(继承了Thread/实现了Runnable的对象);
thread.start();
怎么区分?
thread.setName(“xx”);设置线程名称,这是一种规范,创建线程完成后都需要设置名称

2.1.12
有没有使用线程并发库?
Java.util.current包提供了对线程优化,管理的各项操作(线程的运行,线程池的创建,线程 生命周期的控制)
Executors类提供了4种静态方法创建4种线程池
newFixedThreadPool():创建一个定长线程池

使用线程池的作用? (同连接池)
1.限制线程的个数,不会造成线程过多导致系统运行缓慢或崩溃;
2.线程池不需要每次去创建和销毁,节约了资源;
3.响应时间更快了;

2.1..14
常用的设计模式?
单例:饿汉式和懒汉式;
①.构造方法私有化,只允许自己类中创建;
②在自己的类中创建一个单实例;
③提供一个共有方法获取该实例;(懒汉式需要时才获取,饿汉一出来就创建)
工厂:Spring的IoC,对象的创建交个一个工厂去
代理Spring的AOP就是使用的动态代理
包装

2.2.2
说一下对servlet的理解?/servlet是什么?
Servlet是java编写的服务器端的程序,而这些servlet都要实现servlet这个接口,其重要功能在于交互式的浏览和修改数据,生成动态web内容.servlet运行于支持java的应用服务器中.
Httpservlet重写doGet和doPost方法或者也可以重写servlet方法完成对get和post请求的响应.

20
JSP和servlet相同点和不同点
Jsp是特殊的servlet,JSp是servlet的扩展,最终会被翻译成一个特殊的servlet
Servlet的应用逻辑在java文件文件中,并且完全从html分离出来,侧重于逻辑;
而servlet是java和html组合成的一个扩展名jsp的文件,侧重于视图.

21
jsp9大内置对象(4大作用域)
Page, pageContext,request,response,session,application,config,exception,out

22
Session和cookie
Session和cookie都是会话跟踪技术
Cookie是在客户端记录信息,session是在服务器端记录信息.但是session的实现依赖于cookie

Cookie数据存放在 浏览器上,是不安全的,cookie保存的数据不能超过4K
Session存放在服务器上,是安全的,session会在一定时间保存在服务器上,会占用服务器性能

将登陆等重要信息存在session,其他信息放在cookie(购物车)

23
Mvc各部分都有哪些技术实现
Model模型:javaBean
view视图:jsp,html
contorller控制器:servlet,action
在使用struts2和springMVC这样的mvc框架后,jsp+核心控制器+action+javaBean

24
数据库分类
关系型数据库(mysql,oracle,sqlserver)和非关系型(redis,mogodb,hadoopb)

25介绍一下关系型数据库的三范式
关系型数据库设计表时要遵循的三个规范,满足第三范式,必须先满足第二范式
第一范式:列的数据不可分割;第二范式:主键;第三范式:外键

26
事务四个基本特征ACID特性
事务是并发控制的单位,是用户定义的一个操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位.(转账)
事务必须满足四大特征:
原子性:事务内操作不可分割,要么都成功,要么都失败
一致性:要么都成功,要么都失败,失败了回滚
隔离性:一个事务开始后,不能受其他事务干扰
持久性/持续性:事务开始了就不能终止.

27
Mysql数据库的最大连接数
特定服务器上面的数据库只能只能支持一定数目同时连接,数据库安装时有默认的最大连接数:mysql配饰文件my.ini的属性max_connections=100;

28
Mysql和oracla的分页
Mysel使用关键字limit分页limit begin,size
Oracle:select t.,rownum rm from (select from tab t where rownum<=10 ) where rm>0;

29
简单说一下数据库的触发器的使用场景
触发器,需要有触发条件,当条件满足以后做什么操作
Exp:当你发一个日志,自动同时好友,其实就是在增加日志时做了一个后触发,因为触发器效率高
Create [or replace] tigger 触发器名 触发时间 触发事件
On 表名 [for each row] begin pl/sql语句 end

30
简单说一下数据库的存储过程的使用场景
存储过程的优点:
1,存储过程只要创建时进行编译,而一般sql语句每执行一次就编译一次,因此大大提高了数据库执行速度;
2,复杂的业务逻辑需多条sql语句,可将这些操作放在一个存储过程中;
3,创建一次可以重复使用,减少了开发人员的工作量;
3,安全性高
Create procedure..

32
简单说以下你对jdbc的理解
Java database connection java数据库连接
Java只定义接口,让数据库厂商自己实现接口,然后以接口的方式进行调用.

33
简单写一个方法oracle数据库的列子
加载驱动,获取连接,设置参数,执行语句,释放连接(贾琏欲执事)
Class.forName(驱动连接);
DriverManage.getConnection(url,username,password);
Statement,preparedStatement,setXXX(index,value);
执行:executeQuery,executeUpdate

36
简单说一下html,css,javascript在网页开发中的定位
Html:超文本标记语言,定义网页的结构
Css:层叠样式表,用来美化页面
JavaScript:主要用来验证表单,做动态交互(ajax)

37简单介绍下ajax
Ajax:异步的JavaScript和xml
通过ajax与服务器进行数据交互,使网页进行局部更新
XmlHttpRequest对象,使用这个对象可以异步的向服务器发送请求,获取响应,完成局部更新,
使用场景:登陆失败时不跳转页面,注册时提示用户名存在,二级联动等

38 js和jquery的关系
Jquery是一个js框架,封装了js的属性和方法,并且增加的js的功能,用起来更便利;
原生的dom和事件绑定等操作很麻烦,jquery封装后操作简便.

39 jQuery的常用选择器
ID,class,标签,通用,组合,属性

40jQuery的页面加载完毕事件
需要获取元素,但是必须等到该元素加载完成后才能获取,一般获取元素做操作都要在页面加载完成后;
第一种
$(document).ready(function(){
});
$(document)把原生的document对象转换为jQuery对象
第二种:
$(function(){
})
jQuery的页面加载完毕事件,表示页面结构被加载结构
Window.onload表示页面结构被加载(图片,静态资源等)

40jQuery的ajax和原生的ajxa区别

jQuery的ajax也是原生ajax封装的,原生的麻烦
$.ajax({
type:”post”,
url:””,
data:””,
dataType:”json”,
seccess:function(){
}
})

44 bootstrap是什么
是一个移动设备优先的UI框架,不用谢css,js就可以写页面

47 MVC框架
为解决传统MVC模式问题出现的框架
接受参数比较麻烦(单个接受),跳转页面方式单一
Struts2 和 springMVC

48 struts2原理
浏览器发送请求,经过一系列过滤器,到达核心过滤器;
判断该请求是否是action请求,交个Actionproxy处理
根据配置文件struts.xml,找到action类
调用action的方法,浏览器响应.

49 struts2拦截器是什么
拦截器是动态拦截action调用的对象,可以定义在一个action执行前后的代码,aop思想,
Struts2中的功能都是通过拦截器完成的.
通过动态配置方法,可以执行在action执行前后,,加入逻辑完成业务;
使用场景:
1,用户登陆判断,在执行action前判断是否已经登陆
2,用户权限判断,执行action前判断是否具有权限.

50 springMVC工作流程
1,用户向服务器发送请求,被spring的DispatcherServler捕获
2,解析url,查找handler
3,执行handler
4,选中ViewResolver
5,渲染视图并返回

51 说一下springMVC和struts2的不同
1,核心控制器:核心控制器主要用途是处理所有请求,一个是Servlet,一个是Filter
2,springMVC会比struts2快一些
springMVC是基于方法设计(单例模式,每次调用方法),
action是基于对象(多例,每次请求都会实例化一个action)
3,spring对于springMVC的管理更简单一些
4,struts提供了多种参数接受(通过值栈传递和赋值);springMVC通过方法参数接受.
5,springMVC比较简单,容易上手

52说一下spring的两大核心
Spring是J2EE应用程序框架,是轻量级的IOC和AOP的容器框架,主要针对javaBean的声明周期进行管理的轻量级容器.
1,IOC控制权反转(依赖注入):需要对象时,由spring自动注入;
核心原理:配置文件+容器(map)+反射(工厂模式)
2,AOP面向切面编程:使用动态代理的方式在执行前后做相关操作(事务处理,权限判断,日志)

55什么是ORM
对象关系映射:解决对象和关系型数据库不匹配的现象.Hibernate和Mybatis框架

56 Mybatis和Hibernate
都是java中ORM框架
Mybatis将sql语句和java代码进行分类;提供了将结果集自动封装到实体类对象和对象集合的功能;可以处理复杂的语句.
Hibernate的好处:是一个全自动的orm映射工具,它可以自动生成sql语句;
Mybatis比Hibernate更容易上手

57 Hibernate映射对象的状态
临时状态: 刚new处理的对象,不处于session中,没有被持久化;
持久化状态:已经被持久化,加入到session的缓存中;
游离状态:已经被持久化,但不处于sesssion中;
删除状态

58 Hibernate的缓存
为了提高访问速度,保存数据后,在内存中保存一份,更新了数据库同步更新
一级缓存是session缓存,内置不可卸载
二级缓存是sessionFactory缓存,默认不开启
适合放入到二级缓存的数据:
1)很少被修改;
2)经常被查询
3)不是很重要的数据
4)不会被并发访问的数据

59 webservice的使用场景
webservice是一个SOA(面向服务的编程)的架构,不依赖于语言和平台,可以实现不同语言间的相互调用,通过internet进行基于Http协议的网络应用间的交互.
1.异构系统(不同语言)的整合
2.不同客户端的整合

61 有没有使用过linux
linux是一个长期运行比较稳定的操作系统,所以我们一般会拿他作为服务器(web.db.app)

62 linux常用命令
Pwd : 获取当前路径
Cd : 调整到路径
1.cd /root/Docements # 切换到目录/root/Docements  
2.cd ./path          # 切换到当前目录下的path目录中,“.”表示当前目录    
3.cd ../path         # 切换到上层目录中的path目录中,“..”表示上一层目录 
Cp: 复制
1.cp -a file1 file2 #连同文件的所有特性把文件file1复制成文件file2  
2.cp file1 file2 file3 dir #把文件file1、file2、file3复制到目录dir中
Mv : 移动(可重命名)
1.mv file1 file2 file3 dir # 把文件file1、file2、file3移动到目录dir中  
2.mv file1 file2 # 把文件file1重命名为file2

Su-u : 切换到管理员
Ls : 列举名录
Mkdir 创建文件夹
Rm : 删除文件
1.rm -i file # 删除文件file,在删除之前会询问是否进行该操作  
2.rm -fr dir # 强制删除目录dir中的所有文件
Tar : 对文件进行打包

64 有没有使用过云主机
云主机就是一些云服务运营商(阿里,华为,新浪).提供远程的服务器功能,我们开发者获取企业只需租用对应的服务器.

65 有没有做过数据库优化的事情
定位:查找,定位慢查询
1.创建索引:创建合适的索引,我们就可以在现在的索引中查找,查询到后直接找对应记录
2.分表:当一张表的数据比较多或者一张表的某些字段的值比较多并且很少使用时,采用水分分表和垂直分表来优化
3.读写分离:当一台服务器不能满足需求时,采用读写分离的方式进行集群.
4.缓存:使用redis来进行缓存

71 数据库优化之分表
分表分为水平(按行)分表和垂直(按列)分表
根据经验,mysql数据库数据数据一般达到百万级别,查询效率会很低,水平分表能够很大程度上减少这些压力.
水平分表---如果一张表的行非常多
垂直分表---如果一张表中某个字段值非常多,而且只有很少的情况下回查询,这时把字段单独放到一个表,通过外键关联起来
水平分表策略:
1,按时间分表
2按区间范围分表
3 hash分表:通过一个原始目标的ID或名称的hash算法计算出数据库存储表的表名,然后访问响应的表.

72 数据优化之读写分离
一台数据库支持的最大并发连接数是有限的,如果用户并发访问太多,一台服务器满足不了要求就可以集群处理.mysql的集群处理技术最常用的就是读写分离.
主从同步
数据库最终会把数据持久到磁盘,如果集群必须确保每个数据库服务器的数据是一直的,能改变数据库的操作都往主数据去写,而其他的数据库从主数据库上同步数据
读写分离
使用负载均衡来实现写的操作都往主数据去,而读的操作往从数据库去

73 数据优化之缓存
在持久层和数据库之间添加一个缓存层,如果用户访问的数据已经缓存起来时,用户访问时直接从缓存中获取,不用访问数据库,而缓存是在操作内存级,访问速度快.
作用:减少数据服务压力,减少访问时间.
Hibernate的二级缓存,该缓存不能完成分布式缓存
可以使用redis来作为中央缓存

74 数据优化之语句优化
Order by 优化
1 多使用索引排序 2 普通结果培训
Group by优化
1 使用order by null 取消默认排序

4人推荐
随时随地看视频
慕课网APP