1、面向对象的特点, 说说你对OOP编程的理想?
封装
隐藏具体实现,保护代码安全,提供一个接口供用户调用
继承
抽取出相似类型公共的属性和方法,减少代码冗余,
继承具有”侵入性”,在开发的时候,少用继承,多用组合
多态
父类的引用 指向了 子类的实例 父类 a=new 子类();
2、ArrayList、LinkedList、Vector的区别?
ArrayList是线性表, 循环遍历对象相对快,新增和删除会相对慢一点
LinkedListed是链表结构(对象中引用自己的对象), 循环遍历对象相对慢一些, 新增和删除的时候相对快一点
Vector实现原理 与 ArrayList相似,Vector是线程安全(synchronized )的,而ArraList是非线程安全的
Vector增长策略不同,当空间不足每次增长2倍,
ArrayList int newCapacity = oldCapacity + (oldCapacity >> 1) 相当于是二进制/2 (1.5倍)
3、如何把8变为4,用最快的算法?
8/2=4 (不是别人想要的结果) 8>>1 (最快的)
4、HashTable和HashMap的区别?
HashTable 线程安全的 syn chro ni z ed ,HashMap是非线程安全的
HashTable key 不允许为null,而HashMap一个null
5、HashMap的构造函数有哪些,分别的作用是什么?
public HashMap(); 用得最多的 默认HashMap容量是16个,增长因子限额是0.75 (75%) =16*0.75=12
public HashMap(int initialCapacity) 初始量容量
public HashMap(int initialCapacity, float loadFactor) 初始量容量,增长因子
public HashMap(Map<? extends K, ? extends V> m) 复制一个新的Map
6、什么是hash(),有什么作用?
判断 两个 自定义类的值是否相等 ( 重写 equals方法和hashCode方法 )
算法,每一个系统自带的类都有hashCode的方法,为了判断两个对象的值是否相等
7、多线程相关的
1)、线程同步有几种方法,分别是什么?
2种
1种是 同步方法 public synchronized void 方法名称(){}
2种是 同步代码块 (单例模式)
public void 方法名称(){
synchronized(锁定唯一的对象){
操作;
}
}
2)、sleep(毫秒)和wait()的区别?
sleep 系统 自动让线程进行休眠,但是在休眠过程中,这个线程不不放弃资源占用 ,当达到指定时间,系统会的自动的恢复休眠的线程
wait() 进行休眠线程池,会放弃该线程的资源,让别的线程执行操作,当调用notify()/notifyAll()时候,系统才会把wait等待的线程唤醒
3)、线程间转状转换的几种形式? 多线程的生命周期
初始化 new 线程对象();还未调用start()方法
可运行状态 调用start()方法,但是还未让JVM进行线程执行
运行状态
阻塞/唤醒 (sleep/wait/notify/notifyAll)
结束 (GC垃圾回收回收掉这个资源)
4)、死锁
多个线程同时对一个对象操作,但是都占用对方资源 不放弃
8、单例模式
保证这个应用程序中的某个类一定是唯一的 (在这个应用程序中,只能被实例化一次)
public class A{
private A(){} //构造函数私有化
private static A obj=null; //定一个私有的变量,存放对象的实例
public static A getInstance(){
if(obj==null){
//同步锁
synchronized(A.class){ //双重加锁
if(obj==null){
obj=new A();
}
}
}
return obj;
}
}
还有些人是这样写的,这样效果占用资源
public class A{
private A(){} //构造函数私有化
private static A obj=new A(); //定一个私有的变量,存放对象的实例
public static A getInstance(){
return obj;
}
}
9、hibernate线程等级的特点?
hibernate 2种缓存:
一级缓存,缓存在session中的,只针对同一个事务才有效, 方法有: get /load /iterator
Session session= sessionFactory.getCurrentSession();
User u1=session.get(User.class,1); //会从数据库查询
User u2=session.get(User.class,1); //从内存中查询(缓存)
User u3=session.get(User.class,1); //从内存中查询(缓存)
User u4session.load(User.class,1); //从内存中查询(缓存)
结束
Session session= sessionFactory.getCurrentSession();
User u1=session.get(User.class,1); //会从数据库查询
二级缓存 才能做到数据的内存或者硬盘上面的持久化
SessionFactory ,默认未实现缓存的,必须要用第三方jar(Ehcache)
1)、实体类上面必须要声明 @cache( cacheable=read/write) //get/load才能缓存到内存中
public class SysUser{}
2)、查询缓存
缓存 区别 region
如: 城市表 一般不容易修改,缓存1个月,再更新一次
用户表 容易修改的,缓存5分钟,再更新一次
权限表 一般不容易修改,缓存1天,再更新一次
Session session= sessionFactory.getCurrentSession();
Query query=session.createQuery("from City");
query.setCacheable(true); //要使用缓存, 使用默认的缓存策略
query.cacheRegion(你配置好的缓存策略名称);
query.list();
10、正则表达式的写法
* 匹配 0个或者多个值 相当于是 {0,}
+ 匹配 1个或者多个值 相当于是 {1,}
? 匹配 0个或者1个值 相当于是 {0,1}
\s 代表空格, 制表位(tab)
\d 代表[0-9]
\w 代表[a-zA-Z0-9_]
匹配手机号码11位
1[0-9]{10}
(136|138|139|151|154|187|186)[0-9]{8}
11、用简短的代码实现字符串”s tr in g” 到”s tr in g”转换,用最简短的代码
替换字符串 \s+
String s="s tr in g";
String c=s.replaceAll( "\\s+"," ");
12、mysql和oracle的分页语法
mysql: 关键字 limit 排除前几笔, 取几笔
select * from 表 order by id limit 0,5
oracle: 关键字 rownum,必须在虚拟表中才能使用(虚拟表就是有别名的表)
select * from users ; 实际的表
select a.* from users a; 虚拟表
select a.* 虚拟表
from (
select * from users
) a
取11到15笔数据
select b.*
from(
select a.*, rownum as x_id
from 表 a
where x_id<=15
) b
where b.x_id>10
13、 a表和b表 都有X列,具数据有重复,但是a表的数据要一些,b表数据要少一些,查询 a表有的,b表没有的记录
select *
from a
where X not in (
select X from b
)
变化 ,not in 改为关键字 not exists
select *
from a
where not exists ( select * from b where b.X=a.X )
表联接速度要比 子查询要快一些
select a.*
from a t1 left join b t2 on t1.X=t2.X
where t2.X is null
14、简单socket
http://www.cnblogs.com/rocomp/p/4790340.html
① 创建ServerSocket 服务器 和Socket 客户端
② 打开连接到Socket的输入/输出流
③ 按照协议对Socket进行读/写操作
④ 关闭输入输出流、关闭Socket
—- 2017-3-28号
1、String、StringBuffer、StringBuilder的区别?
String字符串类,如果在量的字符串拼接的时候,会产很多临时空间,造成资源浪费
StringBuffer和StringBuilder优化 字符串拼接,在大量拼接字符串的时候,它们的对象不会发生变化的
它们通过append()来进行拼接 ,StringBuffer线程安全的,StringBuilder是非线程安全的
2、该数字0-9填入到[]中,满足以下的算法。要求每个框的数字都不重复,写一个算法,有多少种组合?请写出代码
[][][]+[][][]=[][][][]
3、组一个方法传递基本数据类型与传递对象的区别(值传递和引用传递的区别)
public static void add(int a){
a=a+3; 5
}
public static void dec(int[] a){
a[0]=a[0]+10; c[0]=a[0]=11; //改变的是 地址中的值
}
main(){
int b=2;
add(b);
int[] c={1};
dec(c);
syso(b); 2
syso(c[0]); 11
}
值传递以后,传递的是值,它本身的值不会受影响的
引用传递,传递是地址,不管方法中对这个地址中的值做修改,外面的变量也会发生变化
4、接口和抽象类的区别?
1)、关键字 abstract 抽象类, interface接口
2)、java只支持单继承,可以多实现
3)、抽象类中可以没有抽象方法,接口的方法在jdk7.0时候必须是抽象方法,JDK8.0是可以有默认的实现
4)、接口的变量是静态的常量,必须要赋值
5)、子类必须重写父类中的抽象方法,除非子类也是一个抽象类
6)、接口只能继承接口,抽象类可以实现接口
5、谈谈你对servlet中的9大内置对象、3大指令、7个动作 与生命周期的理解?
servlet生命周期:
init() 初始化,只能被实例化一次
service() 服务 ,自动帮你调用doGet()、doPost()方法,每一次请求都会执行一次
destory() 销毁,当web容器(tomcat) 重启/关闭时候,destory才会被调用
九大内置对象:
pageContext 相当于页面上下文 (servlet中用它来充当 application)
page 当前页
request 请求
response 响应
session 当前用户当前应用存放数据地方 (通过sessionId来区分的) session是由cookie演变而来的
application 所有用户当前应用存放数据地方(公共存储) (jsp 内置 对象 页面上下文)
out 输出流(向Response输出二进制流, 文件下载,生成图片验证码) (PrintWriter 包装了outputStream)
config 读取web.xml中的配置文件信息
Exception 异常处理
3大指令
1)、 page 指令 <%@page language=”java” 告诉web容器语言是java的
contentType=”text/html; charset=UTF-8”
给客户端的浏览器认识的
pageEncoding="UTF-8" 给web容器看它,告诉它(Post提交)编码的格式
tomcat 7.0 默认的get提交的编码是ISO-8859-1 (英文)
tomcat 8.0 默认的get提交的编码是UTF-8 编码
%> request.setCharaterEncoding("UTF-8");
2)、include 静态包含文件
3)、taglib 引用标签库
7个动作: (jsp:类)
1)、 实例化一个对象,存储到你指定作用域中,默认是page
完整类路径 user=new 完整类路径();
request.setAtrribute("变量名“ , user);
2)、赋值
user.setId(100);
3)、取值
user.getId();
4)、动态包含 /动态引用
id=1&c=2
5)、参数 ,不能单独用,它与 jsp:include一起使用
6)、转发
7)、引用插件
6、jsp看的静态包含 和 动态引用的区别?
1)、 语法不一样:
<%@ include file=”left.jsp”%> 静态包含
<jsp:include page=""></jsp:include> 动态引用
2)、静态包含只能引用最基本的jsp页面,不能检测被包含页面的变化,不能传递参数,编译后,两个文件合并在一起,形式一个文件
动态引用可以引用jsp,servlet,可以包含被,还可以传递参数 ,每一次在运行的时候,都去会编译,并且会生成2个文件
如何选择: 像经常不会发生变化的数据,使用静态包含,如 js,css
如果内容经常发生变化,就采用动态引用
7、谈谈你对I/O的理解,知道多少写多少
字符流: char[] 对文字进行处理
输入流: read
FileReader
InputStreamReader
BufferedReader
输出流: write
FileWrite 写
PrintWrite 包装流写
InputStreamWriter
字节流: byte[] 对文字、文件、对象 进行处理
输入流: read 把数据读到 内存中
FileInputStream
BufferedInputStreamReader
ObjectInputStream
输出流:write 把内存中数据写入某个介质中
FileOuputStream
BufferedOutputStreamWriter
ObjectOutputStream
8、HTTP协议的状态消息有哪些,列兴趣你所知道的(如:404,200,302等等)
200 请求已成功
206 实现断点续传或者下载
302 目标暂时性转移
400 参数有错误 (本来是int,但是你非要传一个字符串,这时候就报400,特别是在Spring MVC)
403 服务器拒绝访问
404 服务器找不到资源
405 方法不允许访问(设定这个请求是以post访问,但是你是以get请求)
@RequestMapping(value=”/地址”,method=RequestMethod.POST)
406 请求的资源的内容特性无法满足请求头中的条件(contextType=text/html;encoding=UTF-8),
因而无法生成响应实体
访问ajax后缀不能是以 .com, .html结尾的虚拟地址 (这个ajax处理的时候 ,可能会遇到问题)
500 服务器执行你写的代码时候,出错了
9、简述div和span 元素的区别?
div 块级元素,占据整行, 用来对页面进行分区布局用的
span 行级元素 ,用来展现数据
10、简述javascript(js) 的基本数据数据类型?
undefined - 如果变量是 Undefined 类型的
boolean - 如果变量是 Boolean 类型的
number - 如果变量是 Number 类型的
string - 如果变量是 String 类型的
object - 如果变量是一种引用类型或 Null 类型的
11、 ajax的作用及参数的意义和类型(如: type, dataType,data,url 等)
jquery中的定义
ajax 异步的局部刷新的技术 它是由 3个核心组成: Xml、javascript、XMLHttpRequest(对象)
jquery中封装了ajax的复杂操作,它的语法是:
{} 叫对象 { [] } 对象数组 [{}] 数组对象
[] 叫数组
$.ajax({
type:”POST/GET默认”, http请求的类型(必须要)
url:请求地址action,不能跨域, (必须要)
你的网站:http://www.taobao.com 请求的地址是:http://www.jd.com/aa.action
async:”true 默认/false”, true异步请求/ false同步请求
data:{键:值, 键:值} , 参数
dataType:”text/html/script/xml/json/jsonp” , (必须要) 服务器返回的数据类型
cache:”true(默认)/false”, ajax请求是否缓存到本地
success:function(data){ (必须要)
请求执行完成,服务器响应http状态码:200, data你所传递数据对象的名称,随便取名
},
error:function(er){
请求响应码非200,这时候的处理,er服务器回的错误信息
}
});
ajax最简单的写法
$.ajax({
url:”请求地址action,不能跨域”,
dataType:”json”,
success:function(data){
处理data
}
});
12、简述对json的理解?
json : JS 对象标记,是一种轻量级的数据交换格式. 替换xml的
键 : 值 , 键 : 值
json是以 键/值对 的格式出现的,如 { “name” : “小张” , ” age” : 23}
json数组对象:
{
“name” : “2笔数据”,
“data” : [
{“id”: 111},
{“id”: 22},
]
}
13、什么是SpringMVC,SpringMVC的作用?
MVC是一种设计模式,它主要用三大类来进行描述: Model 模型,主要负责业务逻辑的处理
View 视图,主要用展示页面的(jsp,json,xml,excel,报表,freemarker)
Controller 控制器
SpringMVC 一种对Servlet的轻量级封装的MVC框架
1)、减化对Servlet的复杂操作,
2)、通过一些注解形式来进行约定
3)、对页面请求值进行自动注入
4)、使用拦载器(intercepter)对资源进行过滤
14、上机题
创建一个Servlet项目,通过 ajax+jdbc+json(前台遍历json用table展示user表所有的用户)?
告诉你数据库的地址: 用户名 密码
15、权限管理有几张表,并画出简单的uml图
用户表 ((PK)userId , loginName,loginPwd )
角色表 (PK)roleId, roleName
菜单表(功能表) (PK)menuId, menuName, (FK)parentId (pId), url, isShow(要不要显示)
角色-菜单表 (PK)id, (FK)roleId ,(FK)menuId
用户表-角色表 (PK)id, (FK)userId,(FK)roleId