面试题: 难点 已看1
1、http和https区别
https协议需要到ca申请证书,一般免费证书很少,需要交费。
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的 ,当然现在http也可以 使用php+JS密码加密实现http安全访问。
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全。
2、get和post区别
a、get表示获取/查询数据,地址栏会出现需要提交的字段名如:http://www.csdn.com/index.php?name=cxq&time=12334345&pw=wew4554565454,容易被缓存到客户端,因此不太安全;而POST表示从服务器获取/更新数据,地址栏会出现一大串的加密字符:http://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&tn=baidu&wd=post%E5%92%8Cget%E7%9A%84%E5%8C%BA%E5%88%AB&rsv_enter,因此相对比较安全。
b、get传输数据大小为2KB,post可以80K或者100KB。
c、Get 方式需要使用 Request.QueryString 来取得变量的值;而 Post 方式通过 Request.Form 来访问提交的内容
d、Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为"GET",实质上,GET和POST只是发送机制不同,并不是一个取一个发!更多资料请看:浅谈HTTP中GET和POST的区别
3、XML解析方式
DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问
SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码。
详细请看java解析XML的几种方式
4、Html访问全过程?
这个问题涉及面广泛,考虑到网络知识,缓存,DNS,路由,HTTP请求,渲染Html文档,生成文档树,能够解释css,还要有个javascript引擎,这里有一篇非常详细精彩的文章值得阅读:从输入网址到显示页面全过程
5、数据库事务隔离机制及特点是什么?
- 隔离性:指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。
数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。
√: 可能出现 ×: 不会出现
脏读 | 不可重复读 | 幻读 | |
Read uncommitted | √ | √ | √ |
Read committed | × | √ | √ |
Repeatable read | × | × | √ |
Serializable | × | × | × |
具体请参考:数据库事务隔离级别
5、jvm布局
1)程序计数器(Program Couter Register)
程序计数器是当前线程所执行的字节码的行号指示器。
2)Java虚拟机栈(JVM Stack)
与程序计数器一样,JVM栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
对于大多数应用来说,Java堆是JVM所管理的内存中最大的一块。Java Heap是被所有线程共享的一块内存区域,在JVM启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。
4)方法区 Method Area
方法区与Heap一样,是各个线程共享的内存区域,他用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
5)本地方法栈(Native Stack)
本地方法栈和JVM栈发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行Java方法(字节码)服务,而本地方法栈则是为虚拟机使用到的Native方法服务。
7、数据库连接池的原理
连接池用于创建和管理数据库连接的缓冲池技术,缓冲池中的连接可以被任何需要他们的线程使用。当一个线程需要用JDBC对一个数据库操作时,将从池中请求一个连接。当这个连接使用完毕后,将返回到连接池中,等待为其他的线程服务。
数据库连接池的基本思想就是为数据库连接 建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定 连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量?使用情况,为系统开发?测试及性能调 整提供依据。
有关 数据连接池其他操作:数据持连接分配、释放模型