java日常1

一、选择题


1、设a=0,b=-3,则表达式(a>=1)&&++a<=12?b:a的结果为(C)

A.1 B.2 C.0 D.-3

2、下列方法中能和方法int max(int a, int b, double c)构成重载关系的是(BC)

A. double max(int a, int b, double c)

B. void max(int a, double c, int b)

C. int max(double a, int b)

D. int max(int x, int y, double z)

3、如何在多线程中避免发生死锁?(ABCD)

A.允许进程同时访问某些资源。

B.允许进程强行从占有者那里夺取某些资源。

C.进程在运行前一次性地向系统申请它所需要的全部资源。

D.把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。

4、下面有关值类型和引用类型描述正确的是?(ABC)

A. 值类型的变量赋值只是进行数据复制,创建一个同值的新对象,而引用类型变量赋值,仅仅是把对象的引用的指针赋值给变量,使它们共用一个内存地址。

B.值类型数据是在栈上分配内存空间,它的变量直接包含变量的 实例,使用效率相对较高。而引用类型数据是分配在堆上,引用类型的变量通常包含一个指向实例的指针,变量通过指针来引用实例。

C.引用类型一般都具有继承性,但是值类型一般都是封装的,因此值类型不能作为其他任何类型的基类。

D.值类型变量的作用域主要是在栈上分配内存空间内,而引用类型变量作用域主要在分配的堆上。

5、

在(D)中,只要指出表中任何一个结点的位置,就可以从它出发依次访问到表中其他所有结点。

A.线性单链表

B.双向链表

C.线性链表

D.循环链表

二、简答题


1.方法重载和重写的区别

一、

方法重载:方法名相同,参数列表不同
方法重写:指在子类中定义一个与父类中方法同名同参数列表的方法。因为子类会继承父类的方法,而重写就是将从父类继承过来的方法重新定义一次,重新填写方法中的代码。

二、

重写必须继承,重载不用。
重写的方法名,参数数目相同,参数类型兼容,重载的方法名相同,参数列表不同。
重写的方法修饰符大于等于父类的方法,重载和修饰符无关。
重写不可以抛出父类没有抛出的一般异常,可以抛出运行时异常


2、接口和抽象类的区别

(6)接口和抽象类的区别
共性:都是不断抽取出来的抽象的内容。

(1)当一个抽象类中的方法都是抽象的时候,java就提供了一种更抽象的表达方式,叫接口。
(2)接口的成员特点:
A:成员变量 是常量 默认修饰符 public static final
B:成员方法 抽象方法 默认修饰符 public abstract
(3)接口的特点:
A:接口用interface修饰
B:子类实现接口用implements标识
C:接口不能被实例化
D:子类实现接口的时候,要么是抽象类,要么全部实现接口方法
(4)接口和类的关系
A:类与类的关系
继承关系,只能单继承,可以多层继承。
B:类与接口的关系
实现关系,可以单实现,也可以多实现。
还可以在继承一个类的同时,实现多个接口。
C:接口与接口的关系
继承关系,可以单继承,也可以多继承。


3、.转发和重定向的区别

(1)转发使用的是getRequestDispatcher()方法;重定向使用的是sendRedirect();

(2)转发:浏览器URL的地址栏不会变;重定向:浏览器URL的地址栏改变。

(3)转发是浏览器只做了一次访问请求;重定向是浏览器做了至少两次的访问请求。

(4)转发是服务器行为,重定向是客户端行为。

(5)转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)

选择:

(1)重定向速度比转发慢,因为浏览器还得发出一个新的请求,如果在使用转发和重定向 都无所谓的时候建议使用转发。

(2)转发只能访问当前web的应用程序,所以不同web应用程序之间的访问,特别是要访问到另外一个web站点上的资源的情况,这个时候只能使用重定向。

(3)一般项目的增删改需要跳转到其他页面,所以用重定向 。查询信息,一般只在当前页面,所以常用转发方式。

总之:通常情况下转发更快,而且能保持reques内的对象,但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果不想看到这样的情况,则选择重定向。


4、说一下集合类中常用集合的特点和区别

常用的集合有List、Set、Map.

List特点:

(1)可以允许存储重复的对象

(2)可以插入多个null元素

(3)是一个有序容器,保持了每一个元素的插入顺序,插入的顺序即输出的顺序。

(4)常用 的实现类有:ArrayList、LinkedList和Vector。Arrayist最为流行,它提供了使用索引的随意访问,而LinkedList则对于经常需要从List中添加或删除元素的场合更为合适。

Set特点:

(1)不能重复对象

(2)只允许有一个null

(3)无序容器,无法保证每个元素的顺序。

(4)set接口最流行的几个实现类:HashSet、LinkedHashSet以及TreeSet

Map特点:

(1)Map不是collction的子接口或者实现类,map是一个接口,而List和Set是collection的子接口。

(2)Map的每个Entry都持有对象,也就是一个键一个值,Map可能持有相同的值对象但键对象必须是唯一的,这是双列集合的特点。

(3)Map接口可以拥有随意个null值但最多只能有一个null键

(4)Map接口最流行的几个实现类:HashMap、LinkedHashMap、Hashtable和TreeMap.

Collection和Map区别:

(1)容器内每个为之所存储的元素个数不同

(2)Collection类型者,每个位置只能有一个元素

(3)Map类型者,持有key-value pair,像个小型数据库。


5、get 和post请求的区别

(1)参数

get传递的参数只能带URL后面,文本格式QueryString,各浏览器一般有长度限制,一般认为是2083,如果有中文字符更短。提交到服务器的数据量小。

post可传递纯文本或二进制的body参数。提交到服务器端的数据量大。

(2)用途

get用于从服务器端获取数据,包括静态资源、动态数据

post用于向服务器提交数据,比如增删改数据,提交一个表单新建一个用户,或修改一个用户等。

(3)缓存

get默认可以复用前面的请求数据作为缓存结果返回,此时以完整的URL作为缓存数据KEY。

post一般不会被这些缓存因素影响。

(4)安全性

对于post,请求的保温不会被记录,这些对于敏感数据来说,更安全。


6、说一下session 和cookie的特点和区别。

一、共同点:cokie和session都是用来跟踪浏览器用户身份的会话方式。

二、区别:

(1)cookie数据保存在客户端,session数据保存在服务端。

(2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,如果考虑安全应当使用session

(3)session会在异地的那个时间 内保存在服务器上。当访问增多时,会比较占用你的服务器的性能,如果考虑到减轻服务器性能方面,应当使用cokie

(4)单个cookie在客户端的限制是3k。

(5)所以:将登录信息等重要信息存放在session,其他信息如果需要保留,可以保存在cookie


7、什么是反射?

java反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,这种动态获取的信息以及动态 调用对象的方法的功能称为java语言的反射。


8、创建线程有哪几种方式?

(1)继承Thread类

(2)实现Runnable接口

(3)实现Callable接口


9、说一下servlet 和jsp的区别

相同点:jsp经编译后就变成了servlet,jsp本质就是servlet,jvm只能识别java的类,不能识别jsp代码,web容器将jsp的代码编译程jvm能够识别的java类。

不同点:servlet中没有内置对象,jsp侧重视图,servlet主要用于控制逻辑。jsp中的内置对象都是通过HttpServletRequest对象和HttpServletResponse对象以及HttpServlet对象得到。


三、编程题

1、1、有N节楼梯,可以一次上一节 或者一次上两节,问有几种方法上楼梯

public class goToStep{
    public static int step(int n){
    if(n==1){
    return 1;
}else if(n==2){}
    return 2;

}
int[] count=new int[n+1];
count[1]=1;
count[2]=2;
for(int i=3;i<n+1;i++){
count[i]=count[i-1]+count[i-2];
}
return count[n];
}
public static void main(String[] args){
  int n=10;
int number=step(n);
System.out.println("一共有:"+number+"方法");
}

2、有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

public class test2 {
    public static int fun(int c){
        return c=10+2*(c-1);
    }

    public static void main(String[] args) {
        int temp=fun(5);
        System.out.println("第五个人"+temp+"岁");
    }

}

3、有1,2,2,3,4,5这6个数字,用Java写一个main函数,打印出所有不同的排列,如:512234

要求: '4'不能在第三位, '3'与'5'不能相连

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class test1 {
    static String[] no = new String[]{"0", "6", "7", "8", "9"};
    static String[] yes = new String[]{"1", "2", "2", "3", "4", "5"};
    public static void main(String[] args) {
        int count = 0;
        for (int i = 122345; i <= 543221; i++) {
            if (check(i + "") == true) {
                count++;
                System.out.println(i);
            }
        }
        System.out.println(count);
    }
    private static boolean check(String str) {
        for (String s : no) {
            if (str.indexOf(s) >= 0) return false;
        }
        for (String s : yes) {
            int num = str.indexOf(s);
            if (num < 0) return false;
            else if (str.indexOf(s, num + 1) >= 0 && !"2".equals(s)) return false;
        }
        if (str.charAt(2) == '4') return false;
        if (str.indexOf("35") >= 0 || str.indexOf("53") >= 0) return false;
        return true;
    }
}

4、数据库设计

三张主表: 用户表, 角色表 ,权限表

关系表: 用户角色关系表, 角色权限关系表

保存以下数据:

用户(苍老师,小明,孙老师)

角色(男游客,男管理员,女会员,女管理员)

权限(男浏览,男发帖,男删帖,女浏览,女发帖,女删帖)

用户和角色关系:苍老师(男管理员,女管理员)小明(女会员)孙老师(女管理员,男游客)

角色和权限关系:男游客(男浏览)男管理员(男浏览,男发帖,男删帖)女会员(女浏览,女发帖),女管理员(女浏览,女发帖,女删帖)

1.查询苍老师有哪些权限

(1)创建表:
create table user(id int primary key auto_increment, name varchar(10));
create table role(id int primary key auto_increment, name varchar(10));
create table module(id int primary key auto_increment, name varchar(10));
create table u_r(uid int,rid int);
create table r_m(rid int,mid int);
-----------------------------------------
(2)插入数据:
insert into user values(null,'苍老师'),(null,'小明'),(null,'孙老师');
insert into role values(null,'男游客'),(null,'男管理员'),(null,'女会员'),(null,'女管理员');
insert into module values(null,'男浏览'),(null,'男发帖'),(null,'男删帖'),(null,'女浏览'),(null,'女发帖'),(null,'女删帖');
---------------------------------------------
(3)用户表和角色表
insert into u_r values(1,2),(1,4),(2,3),(3,1),(3,4);
---------------------------------------------------
(4)角色表和权限表
insert into r_m values(1,1),(2,1),(2,2),(2,3),(3,4),(3,5),(4,4),(4,5),(4,6);
--------------------------------------------------------
(5)查找苍老师的权限:
select u.name,m.name from user u join u_r ur  on u.id=ur.uid  join r_m rm  on rm.rid=ur.rid  join module m  on rm.mid=m.id where u.name='苍老师'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值