一. get和post的区别
get是从服务器上获取数据(http与服务器交互的查),post是向服务器传递数据(http与服务器交互的改)。
get传送的数据量比较小,post传送数据量比较大,默认是无限的。(其实http并没有限制get方法传输数据的量,也没有限制url的长度,只是部分浏览器和服务器的限制)
之前我们开发一个项目,在其他人的电脑上都能顺利运行,到那个人电脑上就返回400错误,比较奇怪,后来我们用fiddler(前后端传递数据的工具)抓包工具,发现他用的是ie浏览器,会自动截取url的部分,超出长度则会报错,所以表单提交一定要用post方法。
get安全性非常低,post安全性较高,但是get执行效率比post高。
文件上传只能使用post方法,不能使用get方法。
表单提交默认get方法。
二. Java多态的具体体现
面向对象编程有四种特征:抽象、封装、继承、多态。
多态的四种体现形式:
接口与接口之间的实现。
类与类之间的继承。
重载。
重写。
重载:同一个类中多个同名方法,但是方法的参数类型和个数不同,这就说明该方法被重载了(与返回值无关)。
public Father(){} public Father(String name){} public void add(int age){ } }public class Father{
重写:重写发生在子类与父类的继承关系中,父类的方法子类继承,方法的方法名、返回值、参数列表完全一样,但是方法体不一样,就说明父类的方法被重写了。
public void add(int age){ System.out.println(); } }public class Children extends Father{
构造器可以被重载不能被重写
三. StringBuffer StringBuilder String的区别
1. **执行效率**:StringBuilder > StringBuffer >String
String 是长度不变的,拼接字符串时是两个完全不同的对象,占用不同的空间,StringBuffer 和 StringBuilder 是长度可变的,拼接字符串是使用 append 方法在字符串后面追加,所以效率比 String 高,又因为 StringBuilder 是线程不安全的,所以执行效率比 StringBuffer 高。
大数据量字符串的拼接使用 StringBuilder 或 StringBuffer。
四. List、Set、Map
单向链表:存储两个值,一个是数据,一个指向下一个节点的连接,最后节点指向空值。双向链表:存储三个值,一个指向前一个节点连接,一个数据,一个指向后一个节点连接,首尾节点指向空值或空列表。循环链表:存储两个值,首尾指向用的值连接,一个数据,一个指向值。
五. HashTable 与 HashMap、ConcurrentHashMap 的区别
HashMap 是线程不安全的,HashTable 是线程安全的,ConcurrentHashMap 也是线程安全的。
HashMap 允许有空键/值,HashTable、ConcurrentHashMap 不允许存在空键/值。
HashTable 是线程安全的,用到了 synchronized 来保证线程安全,但是线程竞争激烈的情况下效率会变得非常低,因为 HashTable 的锁是针对整张表的,所以就导致了在一个线程访问的同时另一个线程无法调用方法或访问,进入阻塞或轮询状态。
ConcurrentHashMap 也是线程安全的,但是用到了锁分离技术,所以效率比 HashTable 高很多。
效率:HashMap > ConcurrentHashMap > HashTable
HashMap 和 ConcurrentHashMap 都继承 AbstractMap,HashTable 继承 Dictionary。
六. JQuery实现全选和全反选
全选的 checkbox 被选中时,子 checkbox 全部被选中,反之,全部不选。
子 checkbox 中,只要有一个没选中,取消全选的 checkbox 的选中。
子 checkbox 被选中的数量和子 checkbox 的数量一样时,选中全选的 checkbox。
// 全选、取消全选的事件 // 全选 checkbox 的 id 是 SelectAll,子 checkbox 的 id 是 subcheck。 // 如果页面有别的 checkbox,selectAll 方法里面稍作修改 function selectAll(){ if($("SelectAll").attr("checked"){ $(":checkbox").attr("checked".true); }else{ $(":checkbox").attr("checked".false); } } // 子复选框事件 function setSelectAll(){ // 当没有选中某个子复选框时,SelectAll 取消选中 if(!$("#subcheck").checked){ $("#SelectAll").attr("checked".false); } // 获取 subcheck 的个数 var chsub = $("input[type='checkbox'][id='subcheck']").length; // 获取选中的 subcheck 的个数 var checkedsub = $("input[type='checkbox'][id='subcheck']:checked").length; if(checkedsub == chsub){ $("#SelectAll").attr("checked",true); } } // Jsp页面代码 type="checkbox"id="SelectAll" value="全选" onclick="selectAll();"/> type="checkbox" id="subcheck" value="1" onclick="setSelectAll();"/> type="checkbox" id="subcheck" value="2" onclick="setSelectAll(); "/> type="checkbox" id="subcheck" value="3" onclick="setSelectAll();"/> type="checkbox" id="subcheck" value="4" onclick="setselectAll();"/>// 复选框事件
七. Forward (请求转发) 与 Redirect (重定向)
转发过程:客户浏览器发送 http 请求---》web 服务器接受此请求---》调用内部的一个方法在容器内部完成请求处理和转发动作---》将目标资源发送给客户。
中间传递的是自己的容器内的 request。 在客 户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。 转发行为是浏览器只做了一次访问请求。在这里,转发的路径必须是同一个 web 容器下的 url,其不能转向到其他的 web 路径上去。
重定向过程:客户浏览器发送 http 请求---》web 服务器接受后发送302状态码响应及对应新的 location 给客户浏览器---》客户浏览器发现是302响应,则自动再发送一个新的 http 请求,请求 url 是新的 location 地址---》服务器根据此请求寻找资源并发送给客户。
在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。 重定向行为是浏览器做了至少两次的访问请求的。在这里 location 可以重定向到任意 URL,既然是浏览器重新发出了请求,则就没有什么 request 传递的概念了。
数据共享:
Forward 是一个请求的延续,可以共享 request 数据。
Redirect 是一个新的请求,不可以共享 request 数据(但可以传递数据)。
地址栏:
Forward 转发地址栏不发生变化。
Redirect 转发地址栏发生变化。
跨域:
Forward 不能跨域。
Redirect 可以跨域。
八. JQuery 总结
jquery 是一个轻量级的 js 框架,具有跨浏览器的特性,兼容性好,并且封装了很多工具,方便实用。
常用场景:选择器、dom操作、ajax、特效、工具类