Java面经-1

这篇博客详细梳理了Java面试中常见的知识点,包括页面替换算法、数据类型、Servlet容器响应流程、代码块执行顺序、异常处理、并发框架的锁类型、接口特性、会话跟踪技术以及Java内存管理和多线程概念。还涵盖了C语言的sizeof()运算符、桥接模式、适配器模式、交换算法以及TCP/UDP的区别。此外,讨论了Java中的堆内存结构、数组复制效率、抽象类与接口、异常处理、会话跟踪技术的实现方式以及单链表和内存溢出的问题。
摘要由CSDN通过智能技术生成

1.思想:
赋予每一个页面一个访问字段,用来记录这个页面从上次被访问以来所经历的时间t,当必须淘汰一个页面时,选择t最大的,即最久未使用。

这里写图片描述

  1. primitive types 基本数据类型
    Java数据类型分为基本数据类型和引用数据类型。
    Boolean是引用类型,基本类型都有自己对应的引用类型。
    2.HttpServlet容器响应Web客户请求流程如下:
1)Web客户向Servlet容器发出Http请求;
2)Servlet容器解析Web客户的Http请求;
3)Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;
4)Servlet容器创建一个HttpResponse对象;
5)Servlet容器调用HttpServlet的service方法,这个方法中会根据request的Method来判断具体是执行doGet还是doPost,把HttpRequestHttpResponse对象作为service方法的参数传给HttpServlet对象;
6)HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;
7)HttpServlet调用HttpResponse的有关方法,生成响应数据;
8)Servlet容器把HttpServlet的响应结果传给Web客户。

doGet()doPost() 是创建HttpServlet时需要覆盖的方法.

3.public class Test2
{
public void add(Byte b)
{
b = b++;
}
public void test()
{
Byte a = 127;
Byte b = 127;
add(++a);
System.out.print(a + ” “);
add(b);
System.out.print(b + “”);
}
}
执行后,结果输出是 -128, 127
原因:

(1)add函数没有返回值,所以没有任何作用,经main()中调用后并不会修改变量的值。
(2)对于Byte类型的变量,大小范围为-128127.所以给++a后变成了-128,越界。

4.CallableStatement extends PreparedStatement.
PrepareStatement extends Statement.
5.java的堆内存分为两块 : permantspace(持久带) 和 heap space。
持久带中主要存放用于存放静态类型数据,如 Java Class, Method 等, 与垃圾收集器要收集的Java对象关系不大。

年老代溢出原因有 循环上万次的字符串处理、创建上千万个对象、在一段代码内申请上百M甚至上G的内存,既A B D选项
持久代溢出原因 动态加载了大量Java类而导致溢出
6.注意:非静态代码块的执行顺序在构造函数之前。
7.Java的数组复制方法,哪个效率最高?

(1)for循环逐一复制:很灵活,但是代码不够简洁
(2)System.arrayCopy:是一个原生态方法,是java与c语言的接口。效率最高。
(3)copyOf不是System的方法,是Arrays的方法,本质上调用了arrayCopy.
System.arraycopy > clone > Arrays.copyOf > for循环
  1. 抽象类 : 类中至少有一个方法是抽象方法,则该类就是抽象类
    接口 :类中的方法全部都是抽象方法。
  2. Java语言中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。
    throw用于抛出异常。
    throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异常对象。
    try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。
    cacth用于捕获从try中抛出的异常并作出处理。
    finally语句块是不管有没有出现异常都要执行的内容。
    10.截止JDK1.8版本,java并发框架支持的锁包括读写锁和排他锁。没有乐观锁!!
    11.接口中的变量默认是public static final 的,方法默认是public abstract 的
    12.会话跟踪是一种灵活、轻便的机制,它使Web上的状态编程变为可能。
    HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的、非连续的。当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以解决这个问题。当一个客户在多个页面间切换时,服务器会保存该用户的信息。
    有四种方法可以实现会话跟踪技术:URL重写、隐藏表单域、Cookie、Session。
    1).隐藏表单域:,非常适合步需要大量数据存储的会话应用。
    2).URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。
    3).Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP
    响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个
    Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至
    在客户端计算机重启后它仍可以保留其值
    4).Session:使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话

简答题(共五道):
1. Object 的equals、hashCode、toString、clone、wait、 notify、notifyAll方法的用途和实现约定。
(1)Object类 ( java.lang.Object ) 是Java所有类的祖先,所有的类都使用Object类作为父类,所有对象(包括数组)都实现Object类的方法。
(2)接下来介绍Object类的常用方法:
① clone() :
创建并返回此对象的一个副本。
即x.clone().getClass() == x.getClass()。
② equals(Object obj) :
指示其他某个对象是否与此对象相等。

equals() 和“==” 的区别:
(1)java的数据类型分为两种,基本数据类型和引用数据类型
(2)对于基本数据类型来说,比较的时候用“==”,比较的是值是否相等。
(3)对于引用数据类型来说,“==”比较的是内存地址,equals比较的是值。
(4)equals底层也是通过"=="来实现的,只是对于引用类型来说,对equals方法进行了重写,所以在引用类型中equals比较的是值是否相等。

③ finalize() :
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。对于任何给定的对象,Java虚拟机最多只调用一次finalize方法。
④ hashCode() :
返回该对象的哈希码值,是为了提高哈希表的性能。对于equals()方法比较的两个对象如果相等,则其hashCode()方法返回的整数结果相等,若其equals()方法比较的两个对象不相等,则hashCode()返回的整数结果不同。
⑤ notify() :
唤醒在此对象监视器上等待的单个线程
⑥ notifyAll() :
唤醒在此对象监视器上等待的所有线程
⑦ toString() :
返回该对象的字符串表示,通常返回一个以文本方式表示此对象的字符串,即getClass().getName()+’@’+Integer.toHexString(hashCode())
⑧ wait() :
在其他线程调用此对象的notify()方法或notifyAll()方法前,导致当前线程等待。当前线程必须拥有此对象监视器。

2. volatilesynchronized的异同点:

(1)synchronized解决java多线程的执行有序性和内存可见性。而volatile解决java多线程的内存可见性。
(2)volatile不拷贝到工作内存形成副本,直接在主存中修改数据。适合场景:一个变量被多个线程共享,线程直接给这个变量赋值,利用volatile开销较小.
(3)volatile是变量修饰符,而synchronized则作用于一段代码或方法。volatile只是在线程内存和“主”内存间同步某个变量的值,而synchronized通过锁定和解锁某个监视器同步所有变量的值。
(4).volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。
(5)volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化.

3.符号表构造和处理的方式:
(1)线性查找、二叉树、杂凑技术

1.sizeof():
c语言中用来计算对象所占的字节个数,通常用来查看变量或者结构体等所占的字节个数。
sizeof有三种语法形式,如

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值