(此系列试题来源于Java面试宝典书籍)
一、选择题
1. 下面关于栈的描述错误的是
- A. 栈是先进后出的线性表
- B. 栈只能顺序存储
- C. 栈具有记忆功能
- D. 对栈的插入和删除操作中,不需要改变栈底指针
解析
- 栈是限定在一端进行插入与删除的线性表,栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素
- 栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素,即栈是按照“先进后出”或“后进先出”的原则组织数据的,这便是栈的记忆作用
- 对栈进行插入和删除操作时,栈顶位置是动态变化的,栈底指针不变
2. 下面说法正确的是
public class Person{
int arr[] = new int[10];
public static void main(String args[ ]){
System.out.println(arr[1]);
}
}
// arr[1] :报错,无法引用非静态的变量
// 如果是 static int arr[] = new int[10] 输出结果为0
3. 输出结果
public static void operator(StringBuffer x,StringBuffer y){
x.append(y);
y = x;
}
public static void main(String[] args) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
operator(a,b);
System.out.println("a:"+a+",b:"+b);
}
// 输出结果:AB,B
// 原因:方法内变量不能代到方法外 拼接可以 赋值操作不行
4.
int x = 0;
int y = 10;
do {
y--; // 9 y-1得到y值
++x; // 0 先看x值,进行++
}while (x<6); // 1
// 最后输出结果为6,4
5. 设有一个二维数组 A[m][n],假设 A[0][0]存放的位置在 644(10),A[2][2]存放的文职在 676(10)每个元素占一个空间,问 A[3][3](10)存放在什么位置? 脚注(10)表示用 10 进制表示
6. 代码执行结果
result:pongping // 使用start.() 参与线程的竞争,如果是run方法就相等于普通方法 ,所以答案:pongping
二、简答题
1. Servlet,Servlet生命周期
Servlet 是一种服务器端的 Java 应用程序,具有独立于平台和协议的特性,可以生成动态的 Web 页面。 它担当客 户请求(Web 浏览器或其他 HTTP 客户程序)与服务器响应(HTTP 服务器上的数据库或应用程序)的中间层。Servlet 是位于 Web 服务器内部的服务器端的 Java 应用程序,与传统的从命令行启动的 Java 应用程序不同,Servlet 由 Web 服务器进行加载,该 Web 服务器必须包含支持 Servlet 的 Java 虚拟机
周期
- 加载和实例化
- 初始化
- 服务
- 销毁
2. Filter
对于一个 web 应用程序来说,过滤器是处于 web 容器内的一个组件,它会过滤特定请求资源请求信息和响应信息。一个请求来到时,web 容器会判断是否有过滤器与该信息资源相关联,如果有则交给过滤器处理,然后再交给目标资源,响应的时候则以相反的顺序交给过滤器处理,最后再返回给用户浏览器。
常见的过滤器用途主要包括:对用户请求进行统一认证、对用户的访问请求进行记录和审核、对用户发送的数据 进行过滤或替换、转换图象格式、对响应内容进行压缩以减少传输量、对请求或响应进行加解密处理、触发资源访问事件等。
3. 冒泡排序
public static void Bubble(int[] arr){
for (int i=0;i<arr.length-1;i++){
for (int j =0; j<arr.length-1-i;j++){
if (arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
4. 懒加载方式
https://cantellow.iteye.com/blog/838473 作者:
public class Singleton {
private static Singleton instance;
public Singleton() {
}
public static Singleton getInstance() {
if (instance == null){
return new Singleton();
}
return instance;
}
}
三、逻辑题
1. 4 2 12 28 80
随后的数为(28 + 80 ) * 2 = 216
2. 2006 年某人连续打工 24 天(该工作的时候工作),共赚了 190 元(日工资 10 元,星期六工资 5 元,星期日 休息无工资)。已知他打工是从 1 月下旬的某一天开始的,这个月的 1 日恰好是星期日, 这人打工结束的那一天是 2 月 日
解析:
每一周工资为5×10+5=55元,一共有24÷7=3周……3天,而3周的工资为3×55=165元,所以剩下的3天中赚了190-165=25元,则他应该从周四开始打工。1月1日是星期日,则1月29日也是星期日,由于他从1月下旬某一天开始的,所以这一天应该为1月26日,即在2月18日结束打工。
3. 编号为 1 至 10 的 10 个果盘中,每盘都盛有水果,共盛放 100 个。其中第一盘里有 16 个,并且编号相邻的三个果盘中水果是的和都相等,求第 8 盘中水果最多可能有几个
编号相邻的三个果盘中水果数的和都相等,说明了什么,说明①②③=②③④,看出门道来没,也就是①④是相等也,再推,①④⑦⑩相等,②⑤⑧相等,③⑥⑨相等,第一个16个,那么①④⑦⑩有64个,剩下总共36个,②⑤⑧相等,你怎么也要给③⑥⑨各一个吧,那么第八个盘子最多有多少个,是不是就很容易算出来了-->11个