面试笔记

来源:互联网 发布:下电子书的软件 编辑:程序博客网 时间:2024/05/22 03:15

近期将上份工作辞退了 ,专注想找一份Java开发相关的工作,今天写一写我最近面试的笔记

①tcp与http的区别

Tcp/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据

可以这样理解:我们在传输数据时,可以只使用(传输层)tcp/ip协议但是那样的话,如果没有应用层,就无法识别数据内容,如果想使传输的数据有意义,则必须使用应用协议层(http)web使用http协议作为应用协议,以封装http文本信息,然后使用tcp/ip做为传输层把它发送到网络上。可以这样形象的比喻:IP是高速公路,tcp是高速公路上的汽车,而他们携带的货物就是HTTP

tcp的三次握手:

第一次

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。[2]


②aop详细解释

AOP(Aspect Orient Programming),也就是面向切面编程。可以这样理解,面向对象编程(OOP)是从静态角度考虑程序结构,面向切面编程(AOP)是从动态角度考虑程序运行过程。

作用:

常常通过 AOP 来处理一些具有横切性质的系统性服务,如事物管理、安全检查、缓存、对象池管理

Spring 中 AOP 代理由 Spring 的 IoC 容器负责生成、管理,其依赖关系也由 IoC 容器负责管理。因此,AOP 代理可以直接使用容器中的其他 Bean 实例作为目标,这种关系可由 IoC 容器的依赖注入提供。Spring 默认使用 Java 动态代理来创建 AOP 代理, 这样就可以为任何接口实例创建代理了。当需要代理的类不是代理接口的时候, Spring 自动会切换为使用 CGLIB 代理,也可强制使用 CGLIB

(IOC容器:spring的核心,控制反转,通俗的说就是自己设计好的类交给系统去管理,而不需要自己去管理这就是控制反转)


spring中aop的实现

基于Annotation的零配置方式:使用@Aspect,@Pointcut等来标注切入点和增强处理

基于XML配置文件的管理方式使用spring配置文件来定义切入点和曾强处理

参考:http://blog.csdn.net/a906998248/article/details/7514969

③cookie与session

cookie:Cookie通过在客户端记录信息确定用户身份。cookie实际上是一小段文本信息,客户端请求服务器,如果服务器需要记录该用户的状态,就使用response向客户端浏览器颁发一个cookie。客户端浏览器会把cookie保存起来,当浏览器再次请求时,浏览器会把请求的网址连同cookie一同交给服务器。服务器检查该cookie,以此来辨认用户状态。

在java中把cookie封装成了Javax.servelt.http.cookie类,resquest.getCookie()获取客户端提交的所有cookie(以cookie[]数组的形式返回,使用key-value保存)

cookie的有效期:

cookie的maxAge决定着cookie的有效期,单位为秒,只要在时间内,cookie一直有效。

下面代码中cookie的信息永远有效

Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie

cookie.setMaxAge(Integer.MAX_VALUE);           // 设置生命周期为MAX_VALUE

response.addCookie(cookie);                    // 输出到客户端



session:

session是另一种记录客户状态机制,不同的是cookie保存在客户端浏览器中,而session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种方式记录在服务器上。

session对应的类为:javax.servlet.http.HttpSession类session对象是客户端第一次请求服务器的时候创建的,session也是一种key-value的属性对,通过getAttribute(Stringkey) 和setAttribute(Stringkey,objectValue)来设置

例如:

HttpSession session = request.getSession();       // 获取Session对象

session.setAttribute("loginTime", new Date());     // 设置Session中的属性


session的生命周期

如果超过了超时时间没有访问过服务器,session就自动失效了。当然关闭服务器session的进程也会跟着消失,但是服务器无法知道session是否也消失,这样就会撑爆服务器,因此为了防止内存溢出,服务器会把长时间没有活跃的session从内存中删除,session的超时时间为mainactiveInterval属性,通过getMaxlnactiveInterval()来获取,通过setMaxInactiveInterval()来修改

cookie与session通俗的说是:cookie用户自己的通行证,而session则是服务器上客户的详细档案。


④关于线程,进程

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度

的独立单位。

线程是进程的一个实体,是CPU调度和分派的基本单位,它比进程更小的能独立运行的基本单位

关系:一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。

区别:①一个程序至少有一个进程,一个进程至少有一个线程。

   ②线程的划分尺度小于进程,使得多线程程序的并发性高

   ③进程在执行的过程中拥有独立的内存单元。而多个线程共享内存,从而极大的提高了程序的运行效率

   ④线程不能独立执行。

   ⑤线程执行开销小,但不利于资源的管理和保护;而进程正好相反。


⑤用Java实现查找文件

⑥转发与重定向

区别:①重定向访问服务器两次,转发只访问服务器一次。

   ②重定向可以看见目标页面的URL,转发只能看见第一次访问页面的URL,以后都是服务器来做的

    ③重定向跳转后必须加上return,要不然页面虽然跳转了,但是还会执行跳转后面的语局,转发是执行了跳转页面,不会执行下面的代码。

④在request级别使用信息共享,使用重定向必然出错

⑤重定向可以访问自己web应用以外的资源

一句话:转发是服务器的行为,重定向是客户端的行为。


原创粉丝点击