Java老司机带你刨面试题(IO_反射_及JavaWeb,适用者初中级工程师)

Java老司机带你刨面试题(IO_反射_及JavaWeb,适用者初中级工程师)

哈哈,最近一大堆事,两天没更新,今天在沙发上总结一下面试题吧,希望对大伙有用,还是那句话,有意见的题目欢迎和我交流.老铁,抱拳了
大家在面试的时候任何题都不能轻视,正所谓,细节决定成败,能把简单的事情做好就不简单

1.IO

1.1什么是IO流?

它是一种数据的流从源头流到目的地。比如文件拷贝,输入流和输出流都包括了。输入流从文件中读取数据存储到进程(process)中,输出流从进程中读取数据然后写入到目标文件.

1.2 字节流和字符流的区别

字节流在 JDK1.0 中就被引进了,用于操作包含 ASCII 字符的文件。JAVA 也支持其他的字符如 Unicode,为了读取包含 Unicode 字符的文件,JAVA 语言设计者在 JDK1.1 中引入了字符流。ASCII 作为 Unicode 的子集,对于英语字符的文件,可以使用字节流也可以使用字符流.

1.3 Java中流中的超类主要有哪些?

• java.io.InputStream
• java.io.OutputStream
• java.io.Reader
• java.io.Writer

1.4 FileInputStream 和FileOutputStream 是什么?

这是在拷贝文件操作的时候,经常用到的两个类。在处理小文件的时候,它们性能表现还不错, 在大文件的时候, 最好使用 BufferedInputStream ( 或 BufferedReader) 和BufferedOutputStream ( 或 BufferedWriter)

1.5 字节流和字符流,你喜欢使用哪一个?

个人来说,更喜欢使用字符流,因为他们更新一些。许多在字符流中存在的特性,字节流中不存在。比如使用 BufferedReader 而不是 BufferedInputStreams 或 DataInputStream,使用 newLine()方法来读取下一行,但是在字节流中我们需要做额外的操作

2. 反射

2.1 什么是java的反射

Java 的反射机制是在编译并不确定是哪个类被加载了,而是在程序运行的时候才加载、探知、自审。使用在编译期并不知道的类。这样的特点就是反射。

2.2 反射是干吗的?

Java 的反射机制它知道类的基本结构,这种对 Java 类结构探知的能力, 我们称为 Java 类的“自审”。当我们构建出一个对象的时候,去调用该对象的方法和属性的时候。一按点,编译工具就会自动的把该对象能够使用的所有的方法和属性全部都列出来,供用户进行选择。这就是利用了Java 反射的原理,是对我们创建对象的探知、自审。

2.3 反射主要功能及其实现

2.3.1 反射的主要功能
  • 确定一个对象的类
  • 取出类的 modifiers,数据成员,方法,构造器,和超类.
  • 找出某个接口里定义的常量和方法说明.
  • 创建一个类实例,这个实例在运行时刻才有名字(运行时间才生成的对象).
  • 取得和设定对象数据成员的值,如果数据成员名是运行时刻确定的也能做到.
  • 在运行时刻调用动态对象的方法.
  • 创建数组,数组大小和类型在运行时刻才确定,也能更改数组成员的值.
2.3.2 反射的应用
  • spring 的 ioc/di 也 是 反 射 ….
  • javaBean 和 jsp 之间调用也是反射….
  • struts 的 FormBean 和页面之间…也是通过反射调用….
  • JDBC 的 classForName()也是反射……
  • hibernate 的 find(Class clazz) 也是反射….

3.JavaWeb篇

3.1 Http请求的get与post区别?

  1. get 是把参数数据队列加到提交表单的 ACTION 属性所指的 URL 中,在
    URL 中可以看到。
  2. post 是通过 HTTPPOST 机制,将表单内各个字段与其内容放置在 HTML HEADER 内一起传送到ACTION 属性所指的 URL 地址。用户看不到这个过程。
  3. get 安全性非常低,post 安全性较高。但是执行效率却比 Post 方法好。
  4. get 传送的数据量较小,不能大于 2KB。post 传送的数据量较大,一般被默认为不受限制。但理论上,IIS4 中最大量为 80KB,IIS5 中为 100KB。
  5. 对于 get 方式,服务器端用 Request.QueryString 获取变量的值,对于
    post 方式,服务器端用 Request.Form 获取提交的数据。
    所以综上建议:
  • 包含机密信息的话,建议用 Post 数据提交方式;
  • 在做数据查询时,可以使用 Get 方式;而在做数据添加、修改或删除时,建议用 Post 方式;

3.1 Session与Cookie区别

在这里插入图片描述

  • cookie 数据存放在客户的浏览器上(客户端),session 数据放在服务端cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行
    cookie 欺骗,如果主要考虑到安全应当使用 session
  • session 会在一定时间内保存在服务器上.当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用 cookie
  • 单个 cookie 在客户端的限制是 3KB,就是说一个站点在客户端存放的cookie 不能超过3KB
  • 将登陆信息等重要信息存放为 session;其他信息如果需要保留,可以放在 cookie 中
  • session 不能区分路径,同一个用户在访问一个网站期间,所有的 session 在任何一个地方都可以访问到.而 cookie 中如果设置了路径参数,那么同一个网站中不同路径下的 cookie 互相是访问不到的.cookie 只能是子路径访问父路径设置的 cookie
    详细分析
    http 是无状态的协议,客户每次读取 web 页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息,那么要怎么才能实现网上商店中的购物车呢:
    session 就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过 SessionID 来区分不同的客 户,session 是以 cookie 或URL 重写 为基础的。
    默认使用 cookie 来实现,系统会创造一个名为 JSESSIONID 的输出
    cookie,我 们叫做 session cookie,以区分 persistent cookie(我们通常所说的
    cookie)
    注意 session cookie 是存储于浏览器内存中的,并不是写到硬盘上的, 这也就是我们刚才看到的 JSESSIONID,我们通常情是看不到 JSESSIONID 的,但 是当我们把浏览器的 cookie 禁止后,web 服务器会采用 URL 重写的方式传递 Sessionid,我们就可以在地址栏看到sessionid=KWJHUG6JJM65HS2K6 之类的字符串。
    明白了原理,我们就可以很容易的分辨出 persistent cookie 和 session cookie 的区别了,网上那些关于两者安全性的讨论也就一目了然了,session cookie 针对某一次会话而言,会话结束 session cookie 也就随着消失了,而persistent cookie 只是存在于客户端硬盘上的一段文本(通常是加密的),而且可能会遭到 cookie 欺骗以及针对 cookie 的跨站脚本攻击,自然不如 sess8ion cookie 安全了。
    5:通常 session cookie 是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的 sessionid,这样我们信息共享的目的就达不到了,此时我们可以先把 sessionid 保存在persistent cookie 中,然后在新窗口中读出来,就可以得到上一个窗口 SessionID 了,这样通过 session cookie 和
    persistent cookie 的结合我们就实现了跨窗口的 session tracking()会话跟踪)

3.2 MVC设计思想

M:Model 模 型
V:View 视 图
C:Controller 控制器
模型就是封装业务逻辑和数据的一个一个的模块,控制器就是调用这些模块的(java 中通常是用 Servlet 来实现,框架的话很多是用 Struts2 来实现这一层),视图就主要是你看到的,比如 JSP 等.
当用户发出请求的时候,控制器根据请求来选择要处理的业务逻辑和要选择的数据,再返回去把结果输出到视图层,这里可能是进行重定向或转发等.

3.3 Ajax

Ajax 并不算是一种新的技术,全称是 asychronous javascript and xml,可以说是已有技术的组合,主要用来实现客户端与服务器端的异步通信效果,实现页面的局部刷新

3.4 页面编码和被请求的资源编码如果不一致如何处理?

对于 ajax 请求传递的参数,如果是 get 请求方式,参数如果传递中文,在有些浏览器会乱码,不同的浏览器对参数编码的处理方式不同,所以对于 get 请求的参数需要使用 encodeURIComponent 函数对参数进行编码处理,后台开发语言都有相应的解码 api。对于 post 请求不需要进行编码

3.5 Ajax的请求过程

  1. 创建 XMLHttpRequest 对象,也就是创建一个异步调用对象
  2. 创建一个新的 HTTP 请求,并指定该 HTTP 请求的方法、URL 及验证信
  3. 设置响应 HTTP 请求状态变化的函数
  4. 发送 HTTP 请求
  5. 获取异步调用返回的数据
  6. 使用 JavaScript 和 DOM 实现局部刷新

3.6 阐述一下异步加载js

  1. 异步加载的方案: 动态插入 script 标签
  2. 通过 ajax 去获取 js 代码,然后通过 eval 执行
  3. script 标签上添加 defer 或者 async 属性
  4. 创建并插入 iframe,让它异步执行 js

下一篇更新设计模式与sql,886

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章