java试题01

1、请说出八种基本数据类型和范围,默认值
类型 范围 存储空间大小 默认值
byte -2^7 ~ +2^7 1字节(8bit ) (byte)0
char(16bit) '/u0000' ~ '/uffff' 2字节(16bit) '/u0000'(null)
short(16bit) -2^15 ~ +2^15 -1 2字节 (short)0
int(32bit) -2^15 ~ +2^15 -1 4字节 0
long(64bit) -2^15 ~ +2^15 -1 8字节 0l
float(32bit) IEEE 4字节 0.0f
double IEEE 8字节 0.0d
boolean 没有明确指定 false

2、request.getParameter()和request.getAttribute()的区别?

两者都是HTTPServletReuest类的方法,用于传递数据的。

getParameter():当web客户端向web服务端发送请求并传递参数时,服务端可用该方法获取参数,返回String类型数据。

getAttribute():它与setAttribute()方法成对,能获得request域内的共享数据,既在请求处理阶段通过setAttribute()存数据,可以通过getAttribute()取数据。

3、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso-8859-1等,如何输出一个UTF-8的字符串?

public String translate(String str){
        String trsl = "";
        try {
            trsl = new String(str.getBytes("ISO-8859-1"), "UTF-8");
            trsl.trim();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return trsl;
    }

4、

class Cal{
     void show(String s){
         String ns="";
          for(int i=0;i

写出命令行输入12345后的程序运行结果。

15

5、什么是事务和它的特性?

事务就是用户定义的一系列操作,这些操作要么都执行,要么都不执行,它是一个不可分割的单位。

事务特性(ACID):

6、sleep 和 wait 的区别。

7、请你说下死锁的产生,该怎么防止死锁的产生?

8、使用redis优点和缺点是什么?

  1. 为什么我们调用start()方法时会执行run()方法,直接调用run()方法跟调用start()区别?

10、什么是锁的粒度,如何通过降低锁的粒度来提升并发性能?

对于数据库和线程:
1.数据库
数据库引擎具有多粒度锁定,允许一个事务锁定不同类型的资源。 为了尽量减少锁定的开销,数据库引擎自动将资源锁定在适合任务的级别。 锁定在较小的粒度(例如行)可以提高并发度,但开销较高,因为如果锁定了许多行,则需要持有更多的锁。 锁定在较大的粒度(例如表)会降低了并发度,因为锁定整个表限制了其他事务对表中任意部分的访问。 但其开销较低,因为需要维护的锁较少。
数据库引擎通常必须获取多粒度级别上的锁才能完整地保护资源。 这组多粒度级别上的锁称为锁层次结构。 例如,为了完整地保护对索引的读取,数据库引擎实例可能必须获取行上的共享锁以及页和表上的意向共享锁。
MySQL有三种锁的级别:页级、表级、行级。
MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-level
locking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。
MySQL这3种锁的特性可大致归纳如下:
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
每种锁可以在网上查询详细说明。主要看你用什么存储引擎。

简单算法题目:
11.猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,
又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,
见只剩下一个桃子了。求第一天共摘了多少(编程)。

public static int eat(int day){
        int sum;
        if (day == 1) {
            return 1;
        }
        sum = eat(day-1);
        sum = (sum + 1)*2;
        return sum;
    }

12、打印出如下图案(菱形)
*






*
@Test
    public void printStart(){
        int space;
        int start;
        for (int i = 1; i < 5; i++) {
            space = 4 - i;
            start = 2*i - 1;
            while (space > 0) {
                System.out.print(" ");
                space--;
            }
            while (start > 0) {
                System.out.print("*");
                if (start == 1) {
                    System.out.println("");
                }
                start--;
            }
        }
        
        for (int ii = 3; ii > 0; ii--) {
            space = 4 - ii;
            start = 2*ii - 1;
            while (space > 0) {
                System.out.print(" ");
                space--;
            }
            while (start > 0) {
                System.out.print("*");
                if (start == 1) {
                    System.out.println("");
                }
                start--;
            }
        }
    }

13.请编程实现函数:接受一个小写的英文字母为参数,输出参数的后三位英文字母。例如参数'd'则输出'g',参数'y'则输出'b'。

public static Character character(char ch){
        char x = 'x';
        if (ch >= x) {
            ch -= 23;
        }
        else {
            ch += 3;
        }
        return ch;
    }

你可能感兴趣的:(java试题01)