javaweb与前端基础面试题

  • javaweb
  • 1.Servlet的生命周期
  • 2.Cookie 和 Session 的区别
  • 3.http 常见的状态码有哪些?
  • 4.token是什么
  • html
  • css
  • 1.HTML中嵌入CSS的三种方式?常用的CSS选择器有哪些?选择器优先级?
  • javascript
  • 1.HTML中嵌入javascript的三种方式
  • 2.javascript中创建方法和定义类的方法有哪些?
  • 3.javascript中的\==和\===有什么区别?null,undefined,NaN有什么区别?
  • 4.跳转页面的多种方式
  • 5.什么是跨域?跨域的流程是什么?如何解决跨域?
  • 6.javascript中if(xx)的判断
  • jquery
  • 1.用jquery如何发送ajax请求


javaweb

1.Servlet的生命周期

第一次:
	判断Servlet实例是否存在? 
		> 装载Servlet类并创建实例
		> 调用init(ServletConfig)方法
		> 调用service(ServletRequest,ServletResponse)方法
		> 调用对应的doGet doPost方法
	服务器关闭?
		>调用destroy()方法。
第二次:
	判断Servlet实例是否存在? 
		> 调用service(ServletRequest,ServletResponse)方法

2.Cookie 和 Session 的区别

cookie和session都是会话跟踪技术
cookie保存在客户端,session保存在服务端
cookie不是很安全,一般用户验证的场合都用session
session运行时要依赖session id, session id又存放在cookie中,所以浏览器禁用了cookie,session就失效了。但是可以通过在url中传递session_id

3.http 常见的状态码有哪些?

200 OK 请求成功
301 Moved Permanently永久重定向(搬到新房,老房卖了)
302 See Other临时重定向(暂时去亲戚家住两天)
400 Bad Request:请求中存在语法错误,或者请求参数有误
403 Forbidden 服务器拒绝该次访问
404 Not Found 无法找到请求的资源
405 Method Not Allowed 请求方法不支持
500 Inter Server Error: 表示服务器在执行请求时发生了错误
503 Server Unavailable 表示服务器处于超负载或者维护状态,无法处理请求

4.token是什么

Token是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回Token给前端。前端可以在每次请求的时候带上Token证明自己的合法地位。
1.如果这个Token在服务端持久化(比如存入数据库),那它就是一个永久的身份令牌。
所以从安全角度来看我们需要给Token设置有效期。有效期设置要根据系统安全需要应尽可能的短,也不能短得离谱

2.新的问题产生,如果用户正常操作的过程中,Token过期失效了,要求用户重新登录。。用户体验就会很差。
为了解决在操作过程中不能让用户感到Token失效问题,有一种方式是把服务端保存Token状态,用户每次操作自动刷新Token的过期时间。Session 就是采用这种策略来保持用户登录状态的。然而仍然存在这样一个问题,在前后端分离、单页 App 这些情况下,每秒种可能发起很多次请求,每次都去刷新过期时间会产生非常大的代价。如果 Token 的过期时间被持久化到数据库或文件,代价就更大了。所以通常为了提升效率,减少消耗,会把 Token 的过期时间保存在缓存或者内存中。

html

css

1.HTML中嵌入CSS的三种方式?常用的CSS选择器有哪些?选择器优先级?

三种方式:
(1)内联定义方式:在标签内部使用style属性来设置元素CSS的样式

<标签 style="样式名:样式值;样式名:样式值;样式名:样式值;..."></标签>

(2)样式块:在head标签中使用style块,这种方式称为样式块方式

前端面试题考java java前端工程师面试题_面试


(3)链入外部样式表文件:将样式写到一个独立的XX.css文件中,在需要的网页中直接引入css文件即可

<head>
        <link type="text/css" rel="stylesheet" href="css文件的路径" />
</head>

选择器:
标签选择器:

标签名 {
    样式名 : 样式值;
    样式名 : 样式值;
    样式名 : 样式值;
    ....
}

类选择器:

.类名{
    样式名 : 样式值;
    样式名 : 样式值;
    样式名 : 样式值;
    ....
}

id选择器:

#id{
    样式名 : 样式值;
    样式名 : 样式值;
    样式名 : 样式值;
    ....
}

优先级:id选择器>类选择器>标签选择器

javascript

1.HTML中嵌入javascript的三种方式

(1)在句柄后插入javascript语句块

<input type="button" value="登陆" onclick="window.alert('hello')">

(2)页面script标签嵌入

<script type="text/javascript">
            alert("hello world")
</script>

(3)外部导入js文件

<script type="text/javascript" src="js-dom/001.js"></script>

2.javascript中创建方法和定义类的方法有哪些?

在javascript中,创建方法和定义类的语法是一样的
第一种方式:

function 【方法名|类名】(形参){
}

第二种方式:

【方法名|类名】 = function(形参){                                                                       
}

区别是一般定义类中要用this关键字添加属性和方法

前端面试题考java java前端工程师面试题_面试_02


而且把定义的变量是当方法使用还是当类看待取决于调用的方法

前端面试题考java java前端工程师面试题_前端面试题考java_03

3.javascript中的==和===有什么区别?null,undefined,NaN有什么区别?

(1)==和===的区别

==是等同运算符,只判断值是否相等
===是全等运算符,既判断值是否相等,还要判断数据类型是否相等

(2)null,undefinded,NaN的区别

三者的数据类型不一致
undefinded属于Undefinded类型,
NaN属于Number类型,
null属于Null类型,
但是null的typeof运算符的执行结果是object,这点比较特殊
三者比较的话,因为NaN不属于空,只是不是一个数值,所以不等同于undefinded,null; 而undefinded和null是等同的
undefined==null   //true
undefinded===null //false

4.跳转页面的多种方式

跳转页面可以通过多种方式:(这些都是发送请求!!!!)

  • 第一种方式:直接在浏览器地址栏上写URL。(重点)
  • 第二种方式:可以点击超链接(重点)
  • 第三种方式:提交表单(重点)
  • 第四种方式:window.open(url,target) (了解)
  • 第五种方式:js代码(重点)
    window.location.href
    window.location
    document.location.href
    document.location

通过浏览器向服务器发送请求,通常是以上的五种方式。

5.什么是跨域?跨域的流程是什么?如何解决跨域?

跨域指的是当前网站不能执行其它网站的脚本,是浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
协议,域名和端口号有一个不同就会产生跨域。
过程:首先浏览器会向服务器发送一个预检请求,服务器响应允许跨域后,浏览器才会发送真实的请求给服务器,服务器再返回响应。
解决方案: 
第一种是创建过滤器和拦截器拦截请求,给请求设置允许跨域的响应头,请求方法,域名,跨域请求是否允许携带cookie以及cookie的持久化等等。
如果是SpringBoot开发的话添加拦截器更方便一些。直接创建WebMvcConfigurer的实现类,重写addCorsMapping方法,设置允许跨域的信息。
如果只是方法级别细粒度的跨域控制,只需要给处理器方法上添加@CrossOrigin注解就行了。

第二种:跨域的根本原因是发送的网站跟目标网站不在同一个域造成的,所以我们可以使用nginx的反向代理让他们转化为同一个域即可。
具体步骤是:
(1)将前端项目部署到nginx中,这样访问前端项目就不要去访问前端项目地址了,直接去访问nginx的地址。
(2)只要是调用后台接口的请求,都加一个api后缀,代理给后台服务器
(3)这样访问前端和调用后端接口都是访问的nginx的地址,就不会产生跨域问题了。

跨域指的是当前网站不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
同源策略:是指协议,域名,端口都要相同,其他一个不同都会产生跨域;
js使用xmlHttpRequest对象发送ajax请求时,这个对象想要从本网站到其它网站发送请求默认是不允许的,是用同源策略来限制

跨域的流程:浏览器发送非简单请求时需要先发送预检请求,服务器要响应允许跨域后,再发送真实的请求获取数据。

简单请求不会触发CORS预检请求,当请求方式是GET,POST,HEAD之一,Content-Type的值仅限于下列三者之一:text/plain,multipart/form-data,application/x-www-form-urlencoded

前端面试题考java java前端工程师面试题_node.js_04


解决方式三种:

1.给容器中注册网关的过滤器,将所有发送给网关的请求添加允许跨域的响应头。

@Configuration
public class CorsConfig {
    @Bean
    public CorsWebFilter corsWebFilter(){
        CorsConfiguration cors = new CorsConfiguration();
        cors.addAllowedHeader("*");
        cors.addAllowedMethod("*");
        cors.addAllowedOrigin("*");
        cors.setAllowCredentials(true);
	    cors.setMaxAge(360000L);
	    
        UrlBasedCorsConfigurationSource source=new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**",cors);
        return new CorsWebFilter(source);
    }
}

2.这种解决方案并非 Spring Boot 特有的,在传统的 SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域问题。

@Configuration
public class MyWebConfigurer implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedMethods("*") //支持所有请求方法跨域
                .allowedHeaders("*") //支持所有请求头跨域
                .allowCredentials(true) //跨域请求可以包含cookie
                .allowedOriginPatterns("*")//允许任何域名使用,低版本Springboot用allowedOrigins()方法
                .maxAge(3600 * 24);
    }
}

3.跨域的根本原因是发送的网站跟目标网站不在同一个域。nginx的反向代理可以让他们转化为同一个域,从而解决跨域问题。

前端面试题考java java前端工程师面试题_html_05

6.javascript中if(xx)的判断

(1)当if括号里的表达式为Boolean时,直接判断

前端面试题考java java前端工程师面试题_html_06


(2)当if括号里的表达式为Number时,分两种情况0或NaN为false,其它为true

前端面试题考java java前端工程师面试题_html_07


(3)当if括号里面的表达式为String时,空字符串为false,其他为true;

前端面试题考java java前端工程师面试题_跨域_08


(4)当if括号里的表达式为undefined时,为false

前端面试题考java java前端工程师面试题_跨域_09


(5)当if括号里的表达式为null时,为false

前端面试题考java java前端工程师面试题_跨域_10

jquery

1.用jquery如何发送ajax请求

$.ajax()是jquery发送ajax请求的核心用法。参数有
url: 规定发送请求的URL
data:规定要发送到服务器的数据,可以是数组,字符串,多数是json
success(result,status,xhr): 请求成功时运行的函数,其中result,status,xhr是自定义的形参名
dataType: 期望从服务器响应的数据类型。JQuery从xml,json,text,html测试最可能的类型。一般都写json.如果服务端的response.setContentType=“application/json;charset=utf-8”,这个地方是可以省略的。
type: 请求方式,默认是get
--------下面3个属性一般不用设置---------
contentType: 发送到服务器时参数的数据类型。默认是"application/x-www-form-urlencoded",这里容器出错,如果设置成application/json,服务端接收不到数据。所以就不要设置,用默认的就好。
async: 布尔值,表示请求是否异步处理。默认是true
error(xhr,status,error): 请求失败时运行的函数,其中xhr,status,error是自定义的形参名

额外发送ajax请求的方法

$.post(url,data,function(data,status,xhr),dataType)
$.get(url,data,function(data,status,xhr),dataType)

是用POST或者GET请求从服务器加载数据,内部还是使用了$.ajax()方法。这两个方法的参数顺序不能颠倒。