几道思考题

该博客涵盖前端与后端开发多方面知识。前端介绍了JavaScript事件,如onclick、onmouseover等;后端涉及Java异常处理、集合框架、Servlet生命周期等。还阐述了TomCat、Servlet、jsp概念,以及html、javascript、servlet、jsp关系,最后提及转发和重定向区别与购物车实现思路。

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:请简要描述下购物车的实现思路


  1. 编译语言通过编译器编译代码文件生成可执行程序(二进制文件),交由cpu解释执行;脚本语言交由可执行程序解释执行(比如HTML、JavaScript语言Web浏览器内置的解释器解释执行的); ↩︎

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值