1)说说get与post的联系和区别?
get和post本质上都是tcp连接,但由于http协议和浏览器或者服务器的限制,从而使它们在应用过程中产生了差别。
区别的话可以从三个层面来解答:
http报文层面:get将请求信息放在url上,post放在报文体中。
数据库层面:get符合幂等性和安全性,post不符合。
其他层面:get可以被缓存、被存储,而post不行。
参考:
2)浏览器输入URL,回车之后发生了什么?
浏览器会先去检查域名是否在浏览器缓存中,如果浏览器缓存中没有,就会去检查本机的hosts文件。如果hosts文件中也没有,浏览器会向ISP的DNS服务器发送一条DNS查询请求。ISP的DNS服务器找不到的话,就向根域名服务器发送请求。
找到服务器的IP地址之后,接下来客户端会与服务器端进行三次握手,三次握手结束后,就可以开始发送HTTP请求报文,服务器端会处理请求报文并返回HTTP相应报文。浏览器拿到响应文本HTML,浏览器就会进行渲染。
数据传输完毕后,需要断开TCP连接,此时发起TCP四次挥手。
参考:
3)Java中的Object有哪些方法?
1.equals方法
public boolean equals(Object obj) {
return (this == obj);
}
该方法用于比较两个对象,如果这两个对象引用指向的是同一个对象,那么返回true,否则返回false。子类一般都要重写这个方法。
2.getClass方法
public final Class<?> getClass()
getClass方法是一个final方法,不允许子类重写,并且也是一个native方法。返回当前运行时对象的Class对象,注意这里是运行时,比如以下代码中n是一个Number类型的实例,但是java中数值默认是Integer类型,所以getClass方法返回的是java.lang.Integer:
"str".getClass() // class java.lang.String
"str".getClass == String.class // true
Number n = 0;
Class<? extends Number> c = n.getClass(); // class java.lang.Integer
3.hashCode方法
public int hashCode()
该方法主要用于获取对象的散列值。Object中该方法默认返回的是对象的堆内存地址。
4.clone方法
protected Object clone() throws CloneNotSupportedException
该方法是保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
默认的clone方法是浅拷贝。所谓浅拷贝,指的是只会拷贝引用地址,而不会将引用的对象重新分配内存。深拷贝则是会连引用的对象也重新创建。
5.toString方法
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
返回一个String对象,一般子类都有覆盖。
6.notify方法
public final void notify()
final方法,主要用于唤醒在该对象上等待的某个线程。
7.nottifyAll方法
public final void notifyAll()
final 方法,主要用于唤醒在该对象上等待的所有线程。
8.wait方法
public final void wait(long timeout) throws InterruptedException
一般情况下,wait方法和notify方法会一起使用。wait会阻塞当前线程,notify方法唤醒当前线程。wait方法会让当前线程等待直到另外一个线程调用对象的notify或notifyAll方法,或者超过参数设置的timeout超时时间。
9.finalize方法
protected void finalize() throws Throwable
该方法是保护方法,主要用于在GC的时候再次被调用。如果我们实现了这个方法,对象可能在这个方法中再次复活,从而避免被GC回收。
参考: