一.get和post的区别
1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
建议:
1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;
二.session和cookie的区别
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
cookie 和session 的联系:
session是通过cookie来工作的
session和cookie之间是通过$_COOKIE['PHPSESSID']来联系的,通过$_COOKIE['PHPSESSID']可以知道session的id,从而获取到其他的信息。
在购物网站中通常将用户加入购物车的商品联通session_id记录到数据库中,当用户再次访问是,通过sessionid就可以查找到用户上次加入购物车的商品。因为sessionid是唯一的,记录到数据库中就可以根据这个查找了。
三.tomcat的工作原理
1、客户端直接请求80/8080端口(或者由8009端口接收由apache等其他WebServer转发来的请求),Connector接收客户端请求。
2、Connector将http请求交给Engine。
3、Engine收到请求后,匹配到对应的Host,将该请求交给该Host处理。
4、Host处理请求,并将结果原路返回。
5、Connector接收到处理的结果后,返回给客户端或其他WebServer。
四.单例模式
1.懒汉式
public class Singleton {
private static Singleton instance;
private Singleton(){}
public static Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
return instance;
}
}
2.饿汉式
public class Singleton {
private static Singleton instance = new SingletonDemo();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}
五.mybatis与hibernate区别
(1)hibernate的优势:· MyBatis可以进行更为细致的SQL优化,可以减少查询字段。· MyBatis容易掌握,而Hibernate门槛较高。
(2)mybaitis 的优势:· Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射;· Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便;· Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。· Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。
(3)区别:Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。· iBATIS入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。
六. LinkedList和ArrayList的区别
(1)ArrayList是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢
LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
七.spring mvc工作机制?
工作机制:客户端请求提交到DispatcherServlet
由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
DispatcherServlet将请求提交到Controller
Controller调用业务逻辑处理后,返回ModelAndView
DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
视图负责将结果显示到客户端
八.sql优化
1.可以使用exist 和not exist代替 in和not in。where代替Having。
2.(1)避免对索引字段进行计算操作
(2)避免在索引字段上使用not,<>,!=
(3)避免在索引列上使用IS NULL和IS NOT NULL
(4)避免在索引列上出现数据类型转换
(5)避免在索引字段上使用函数
3.尽量避免在一个复杂查询里面使用LIKE '%parm1%'。
4.除非却有需要,否则应尽量避免使用临时表,相反,可以使用表变量代替;
5.尽量避免带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY
6.什么情况下设置了索引但无法使用,索引无效
1) 以”%”开头的LIKE语句,模糊匹配:红色标识位置的百分号会导致相关列的索引无法使用
2) Or语句前后没有同时使用索引
3) 数据类型出现隐式转化(如varchar不加单引号的话可能会自动转换为int型,会使索引无效,产生全表扫描。)
4) 在索引列上使用IS NULL或IS NOT NULL操作。索引是不索引空值的,所以这样的操作不能使用索引,可以用其他的办法处理,例如:数字类型,判断大于0,字符串类型设置一个默认值,判断是否等于默认值即可
5) 在索引字段上使用not,<>,!=,eg<>操作符(不等于):不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。
用其它相同功能的操作运算代替,如 a<>0 改为 a>0 or a<0
6) 对索引字段进行计算操作
7) 在索引字段上使用函数
7.如何设计一个高并发的系统
1) 数据库的优化,包括合理的事务隔离级别、SQL语句优化、索引优化
2) 使用缓存、尽量减少数据库IO
3) 分布式数据库、分布式缓存
4) 服务器的负载均衡。
九.斐波那契数列(前20个)
斐波那契数列:即1,1,2,3,5...........
public static void main(String[] args) {
int arr[] = new int[20];
arr[0] = arr[1] = 1;
for (int i = 2; i < arr.length; i++) {
arr[i] = arr[i -1] + arr[i - 2];
}
System.out.println("斐波那契数列的前20项如下所示:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
}
十.hashmap的实现原理
HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
数组:存储区间连续,占用内存严重,寻址容易,插入删除困难;
链表:存储区间离散,占用内存比较宽松,寻址困难,插入删除容易;
Hashmap综合应用了这两种数据结构,实现了寻址容易,插入删除也容易。