0
点赞
收藏
分享

微信扫一扫

写面试题中遇到的问题(13)

一叶轻舟okok 2022-02-06 阅读 45

本文写给正在努力的自己,努力的补基础知识,五道题一篇

ps:我把答案都放在解析下面了

  1. 续之前讲解Cookie和Session的那道题我们来看这道题,下面哪项技术可以用在WEB开发中实现会话跟踪实现?
    A. Session
    B. Cookie
    C. 地址重写
    D. 隐藏域

初识想法:刚学完Cookie和Session的我自信的选了AB,但是地址重写和隐藏域能实现会话跟踪吗?

解析:在《写面试题中遇到的问题(10)》中我们我们详细的讲解了Cookie和Session,所以我们直接讲解CD
**地址重写:**采用这种时客户程序在没给URL的尾部会添加一些额外的数据,这些数据标识当前的会话,服务器将这个标识符与它存储的用户相关数据关联起来,URL重写是比较不错的会话跟踪解决方案,即使浏览器不支持cookie或者用户禁用cookie的情况下,这种方案也能够工作,URL重写具有cookie所具有的所有缺点,也就是说,服务器端程序要做很多简单但是冗长乏味的处理人物,即使有高层的API可以处理大部分的细节,仍需十分小心每个引用你站点的URL,以及返回给用户的URL,我很清楚的记得小时候,一到电脑课我们就会打开qq农场,这个时候我就会看别人url的后缀因为那就是别人的密码,即使通过间接手段,比如服务器重定向中的Location字段,都要添加额外的信息,这种限制意味着,在你的站点上不能有任何静态HTML的页面,因此,每个页面都必须使用servlet或JSP动态生成,即使所有页面都动态生成,如果用户离开了会话并通过链接再次回来,会话信息就会丢失,因为存储下来的链接含有错误的标识信息。
URL重用户在每个URL结尾附加标识回话的数据,与标识符关联的服务器保存有关与会话的数据,如我们访问某个新闻的时候,在地址栏我们一般会看到这样的 信息:http://www.XXX.com/news?id=??,通常的话id后面的问号表示该条新闻在后台数据库中的新闻表的id。URL重写能够 在客户端停用cookies或者不支持cookies的时候仍然能够发挥作用。

隐藏域: HTML表单中含有如下条目:通过给type属性赋值为hidden值来实现隐藏,这样用户在浏览的时候看不到这行代码的数据,但是当用户通过查看 源代码还是可以看到的。
这个条目的意思是:在提交表单时,要将指定的名称和值自动包括在 GET 或 POST 数据中。这个隐藏域可以用来存储有关会话的信息,但它的主要缺点是:仅当每个页面都是由表单提交而动态生成时,才能使用这种方法。单击常规的超文本链接并不产生表单提交,因此隐藏的表单域不能支持通常的会话跟踪,只能用于一系列特定的操作中,比如在线商店的结账过程。

答案:ABCD

  1. 关于String,StringBuffer,StringBuilder下列说法错误的是?
    A. StringBuilder运行速度最快
    B. StringBuffer是线程安全的
    C. String的值是可变的
    D. StringBuffer运行速度比String快

初识想法:StringBuffer和StringBuilder对应的方法一模一样,他们的区别就是,StringBuffer是线程安全的,StringBuilder是非线程安全的,但是对于他们的运行速度没有了解过,但是完成相同的一件事线程安全比非线程安全的时间久,所以StringBuffer肯定比StringBuilder运行速度慢

解析:
C: String是由final修饰的,不可变,每次改变它的值的时候,会创建新的String对象来存放新的值,我们通过String源码来看看,首先我们知道String类型存储的时候是以char类型数组来存储的
在这里插入图片描述
而这里由final修饰char类型数组,所以String是不可变的
AD: 运行速度StringBuilder>StringBuffer>String
B: StringBuffer是线程安全的通过加锁的方式实现线程安全
在这里插入图片描述

答案:C

  1. 命令行javac -d参数的用途是?

初识想法:只知道javap -v是反编译

解析即答案:指定编译时的编码

  1. 要导入java/awt/event下面的所有类,以下说法正确的是?
    A. import java.awt.和import java.awt.event.都可以
    B. 只能是import java.awt.

    C. 只能是import java.awt.event.

    D. import java.awt.*和import java.awt.event.*都不可以

初识想法:没怎么观察过导包的精确度能不能是他的上一层

解析:导包只能导到当前层,不可以再导入包里面的包中的类
import java.awt.* :是导入awt包下的所有类,不包括其子包下的类
import java.awt.event.* :导入java\awt\event包下的类

答案:C

  1. 以下代码能正确执行的是?
    A.
public static void main(String args[]) {
byte a = 3;
byte b = 2;
b = a + b;
System.out.println(b);
}

B.

public static void main(String args[]) {
byte a = 3;
byte b = 2;
a+=b;
System.out.println(b);
}

初识想法:byte的值是从-128到127

解析:当我们用byte+byte得到的是int类型,固A错B对
在这里插入图片描述
补充:这样输出多少?

    public static void main(String[] args) {
        byte b1 = 127;
        byte b2 = 1;
        b1 += b2;
        System.out.println(b1);
    }

输出-128,当127加一后会从-128重新开始

答案:B

举报

相关推荐

0 条评论