几道思考题
- 1:简单说明下js当中都有哪些事件,都起什么作用(至少五个)
- 2:什么是异常,简要描述异常的处理方式有哪些?怎么处理
- 3:简要描述下集合框架,ArrayList LinkedList HashSet TreeSet每个数据结构是什么?特点是什么
- 4:简要描述Comparable和Comparator的区别
- 5:简要描述接口Iterator和Collection的关系
- 6:请详细描述下Servlet的生命周期
- 7:什么是TomCat?什么是Servlet?什么是jsp?
- 8:你怎么理解html,javascript,servlet,jsp之间的关系
- 9:请描述下转发和请求重定向(跳转)的区别
- 10:请简要描述下购物车的实现思路
1:简单说明下js当中都有哪些事件,都起什么作用(至少五个)
JavaScript简介:
JavaScript(Java脚本)是一种基于对象(Object)和事件驱动( Event Driven)并具有安全性能的脚本语言1。使用JavaScript可以轻松的实现与HTML的互操作,并且完成丰富的页面交互效果(动态效果),它是通过嵌入或调入在标准的HTML语言中实现的。跟java没有关系…
JavaScript使用:
js语句需要包含在
<script>
</script>
语句块里面
把需要交互的组件在构建时标记上id,在script语句块里调用
document.getElementById(String id).事件名=function(){
方法体
}
JavaScript中的事件
onclick:鼠标左键点击事件 常用在input—button组件
onmouseover:鼠标指针移入事件 常用在div组件
onmouseout:鼠标指针移出事件
onfocus:获得焦点事件 常用在input—text组件
onblur:失去焦点事件
2:什么是异常,简要描述异常的处理方式有哪些?怎么处理
在Java事件运行时出现的错误叫做异常,将这些异常封装成一个类叫做Exception,这个类是所有类型异常的父类。与之相对应的叫做Error,是在编译时出现的错误。
try catch(捕获异常)
try{会出现异常的语句块}catch(抛出的异常类型对象){处理异常}
throws(抛出异常)
在定义方法时声明抛出异常及类型,调用此方法的语句可以捕获该异常,或者继续抛出。
用异常对象调用printStackTrace方法,将此throwable和其追溯打印到标准错误流。(我也不知道是什么意思…)
3:简要描述下集合框架,ArrayList LinkedList HashSet TreeSet每个数据结构是什么?特点是什么
常用的集合三大类型包括Set,List,Map(三种接口)
不用像数组一样创建数组对象时就要确定数组的长度,集合可以自动扩容
Set集合类型
Set集合的实现类都包含的特性:不包含重复元素(使用equals方法判定是否重复),最多只有一个空元素。
名称 | 元素是否有序 | 内部采用的数据结构 | 线程是否安全(是否同步 |
---|---|---|---|
HashSet | 无序(不保证迭代顺序恒久不变) | 数组+链表/二叉树 | 不安全 |
TreeSet | 有序 | 二叉树 | 不安全 |
LinkedHashSet | 有序 | 在HashSet的基础上添加了一个链表 | 不安全 |
HashSet集合的存储方式:
集合初始有16个数组(空间在内存上物理连续)空间,添加元素时,先用元素的Hash码与集合内部开辟的空间数取余,得到的值即为元素在开辟的数组空间上存储位置。
后面进入的元素如果如与已存入的元素位置发生碰撞,则在该位置形成一个链表结构存储后续进入的元素。
如果链表的长度哦超过8时,为了增加查找效率,将链表结构更改为二叉树结构
HashSet 默认初始化大小为 16,扩容加载因子为 0.75,扩容大小为原来的一倍。
TreeSet中的元素是有序的,排序规则遵照元素本身的大小进行排序,元素不能重复。
添加到TreeSet集合中的元素都必须实现Comparable接口
因为添加到TreeSet集合的时候会自动调用集合的comparebleTo(Object obj)方法对其进行排序。
每次都比较那如何保证迭代顺序不变?得问一下
LinkedHashSet在HashSet的基础上添加了一个链表用来记录顺序
List集合类型
List集合的实现类都包含的特性:元素是有序的,允许元素重复,可以有null
名称 | 元素是否有序 | 内部采用的数据结构 | 线程是否安全(是否同步 |
---|---|---|---|
ArraryList | 有序 | 数组结构 | 不安全 |
LinkedList | 有序 | 链表结构 | 不安全 |
Vector | 有序 | 数组结构 | 安全(内部方法为同步方法) |
ArraryList:
默认初始化长度为 10,扩容规则为 1.5倍的原容量加1,即一次扩容后的长度为 16;
特点:查询速度快(采用数组结构--有下标,直接通过下标查询),添加、删除(添加删除元素,会影响后面的所有元素下表改变)相对较慢、线程不同步(不安全)。
LinkedList:
由于内部采用的链表结构,所以没有初始化长度和扩容规则,来一个链接一个
查询速度慢(永远从第一个开始查询)添加、删除快(主用改变相邻元素的链接指向)、线程不安全。
Vector:
基本与ArraryList特性相同,但是由于其内部的方法添加了synchronized关键字,成为了同步方法,所以该类型集合线程安全。
Stack(栈)属于Vector的一个子类,出入口只有一个,先进入(堆栈)的元素后出(弹栈),后进入的元素先出。
Map集合类型
Map用于保存具有映射关系的数据,因此Map集合中保存着两组值,一组之用于保存Map里的key,另外一组用于保存Map里的value,key和value都可以是任何引用类型的数据。key不允许重复。
作为key的数据必须实现equals()和hashCode()方法。
hashMap:
key不可以重复,最多有一个null。value可以重复也可以为null,线程不安全
4:简要描述Comparable和Comparator的区别
Comparable和Comparator都是接口,如果一个类要实现自然排序,就要实现其中一个接口。实现其中的compareTo()方法。
区别在于Comparable接口是需要比较的类来继承。compareTo()方法是定义在该类里面的,所以叫内比较器。
而Comparator则是可以由其他类来实现,需要比较时,调用实现类的compareTo()方法。
5:简要描述接口Iterator和Collection的关系
Iterator是一个迭代器接口,
Collection是一个类,是所有集合的父类,
Collection实现了Iterator接口,所以Collection及其子类(所有集合类型),都可以调用迭代器方法(Iterator的方法,hasNext(),next(),remove())来遍历集合中的元素。
6:请详细描述下Servlet的生命周期
init()方法
该方法只会被调用一次,当服务器开启,servlet被加载,用户首次调用与该servlet对应的url时创建servlet,调用init()。
当用户调用servlet,每个servlet的单个实例被创建,用户的每一个请求都开启一个线程,将请求传递给doGet或者doPost处理。the insit()用来创建一些整个生命周期都要用到的东西。
service()方法
servlet容器(tomcat服务器)会调用service()方法,处理从客户端传来的请求,并返回格式化的response给客户。
服务器每次收到servlet请求,就会开启一个线程,核对该请求时get,post,put等哪一种请求,然后调用对应得doGet,doPost,doPut,doDelete
容器调用service()方法,service()调用doGet等方法,我们不用关心service是怎么写的,只需要复写doGet等方法。
doGet()方法
获取的数据来源于浏览器的url
doPost()方法
后端数据来源于表单
destroy()方法
结束servlet生命,让servlet关闭数据库连接,后台线程,写cookie列表或者命中数到磁盘,当destroy被调用,servlet对象就会被垃圾回收机制回收。
7:什么是TomCat?什么是Servlet?什么是jsp?
TomCat
Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。
Servlet
Servlet是用Java编写的服务器端程序, 其主要功能在于交互式地浏览和修改数据,生成动态Web内容. 狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,我们一般将Servlet理解为后者。继承了HttpServlet类,重写了doGet和doPost方法,当收到传来的requset和respones对象时自动调用其对应的方法。
jsp
JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
8:你怎么理解html,javascript,servlet,jsp之间的关系
HTML 制作网页的结构,显示内容
CSS 对已经做的网页进行美化
JavaScript 提升网页的功能,提升用户体验,让网页可以执行脚本
Servlet是用Java编写的服务器端程序其主要功能在于交互式地浏览和修改数据,生成动态Web内容
JSP标签可以在在HTML网页中插入Java代码。<% %>
9:请描述下转发和请求重定向(跳转)的区别
请求转发
request.getRequestDispatcher(URL地址).forward(request, response)
处理流程:
客户端发送请求,Servlet做出业务逻辑处理。
Servlet调用forword()方法,服务器Servlet把目标资源返回给客户端浏览器。
重定向(跳转)
response.sendRedirect(URL地址)
处理流程:
客户端发送请求,Servlet做出业务逻辑处理。
Servlet调用response.sendReadirect()方法,把要访问的目标资源作为response响应头信息发给客户端浏览器。
客户端浏览器重新访问服务器资源xxx.jsp,服务器再次对客户端浏览器做出响应。
区别
重定向response.sendRedirect(“xxx”)是服务器向客户端发送一个请求头信息,由客户端再请求一次服务器。/指的Tomcat的根目录,写绝对路径应该写成"/当前Web程序根名称/资源名" 。
response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。不在同一个请求。重定向,实际上客户端会向服务器端发送两个请求。
转发是在服务器内部进行的,写绝对路径/开头指的是当前的Web应用程序。绝对路径写法就是"/login.jsp"或"/servlet/LoginServlet"。
request.getRequestDispatcher()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;服务器内部转发,整个过程处于同一个请求当中。
所以转发中数据的存取可以用request作用域:request.setAttribute(),
10:请简要描述下购物车的实现思路
编译语言通过编译器编译代码文件生成可执行程序(二进制文件),交由cpu解释执行;脚本语言交由可执行程序解释执行(比如HTML、JavaScript语言Web浏览器内置的解释器解释执行的); ↩︎