2018面试题

1.Redis支持五种数据类型:

string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

2.JavaBean的作用域

       1)pagez作用域:仅在当前页面有效。
       2)request作用域:可以通过HttpRequest.getAttribute()方法取得JavaBean对象。
       3)session作用域:可以通过HttpSession.getAttribute()方法取得JavaBean对象。
       4)application作用域:可以通过application.getAttribute()方法取得JavaBean对象

3.jsp有哪些内置对象?作用分别是什么?

 JSP共有以下9个内置的对象:
     1request 用户端请求,此请求会包含来自GET/POST请求的参数
       2response 网页传回用户端的回应
       3pageContext 网页的属性是在这里管理
     4session 与请求有关的会话期
       5application servlet 正在执行的内容
       6out 用来传送回应的输出
     7config  servlet的构架部件
       8page JSP网页本身
       9exception 针对错误网页,未捕捉的例外

4.spring的理解及其优点。

         1.Spring是实现了工厂模式的工厂类,这个类名为BeanFactory(实际上是一个接口),在程序中通常BeanFactory的子类ApplicationContextSpring相当于一个大的工厂类,在其配置文件中通过<bean>元素配置用于创建实例对象的类名和实例对象的属性。

        2. Spring提供了对IOC良好支持,IOC是一种编程思想,是一种架构艺术,利用这种思想可以很好地实现模块之间的解耦,IOC也称为DIDepency Injection)。

        3. Spring提供了对AOP技术的良好封装, AOP称为面向切面编程,就是系统中有很多各不相干的类的方法,在这些众多方法中要加入某种系统功能的代码,例如,加入日志,加入权限判断,加入异常处理,这种应用称为AOP

        实现AOP功能采用的是代理技术,客户端程序不再调用目标,而调用代理类,代理类与目标类对外具有相同的方法声明,有两种方式可以实现相同的方法声明,一是实现相同的接口,二是作为目标的子类。

        在JDK中采用Proxy类产生动态代理的方式为某个接口生成实现类,如果要为某个类生成子类,则可以用CGLI B。在生成的代理类的方法中加入系统功能和调用目标类的相应方法,系统功能的代理以Advice对象进行提供,显然要创建出代理对象,至少需要目标类和Advice类。spring提供了这种支持,只需要在spring配置文件中配置这两个元素即可实现代理和aop功能。

         轻量:Spring 是轻量的,基本的版本大约2MB

        控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。

        面向切面的编程(AOP)Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。

        容器:Spring 包含并管理应用中对象的生命周期和配置。

        MVC框架SpringWEB框架是个精心设计的框架,是Web框架的一个很好的替代品。

        事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。

      异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBCHibernate or JDO抛出的)转化为一致的unchecked 异常。

5.单例和多例,单例是否安全
什么是单例、多例:

所谓单例就是所有的请求都用一个对象来处理,比如我们常用的service和dao层的对象通常都是单例的,而多例则指每个请求用一个新的对象来处理,比如action; 
单例模式举例:

第一种:懒汉式(线程不安全,加上synchronized后线程安全)
public class Singleton {
    private static Singleton instance;
    private Singleton (){}

    public static synchronized  Singleton getInstance() {
    if (instance == null) {
        instance = new Singleton();
    }
    return instance;
    }
}
第二种:饿汉式(线程安全)
public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton (){}
    public static Singleton getInstance() {
    return instance;
    }
}

2. 多例模式举例:

import java.text.*;
import java.util.*;
class NumberFormatTest
{
    public static void displayNumber(Double d,Locale l)
    {
        NumberFormat nf;
        String dOut;
        nf = NumberFormat.getNumberInstance(l);
        dOut = nf.format(d);
        System.out.println(dOut + " " + l.toString());
    }
    public static void main(String[] args)
    {
        displayNumber(1234567.89,new Locale("en","US"));
        displayNumber(1234567.89,new Locale("de","DE"));
        displayNumber(1234567.89,new Locale("fr","FR"));
        displayNumber(1234567.89,new Locale("zh","CN"));
    }
}
3. 为什么用单例、多例:
   之所以用单例,是因为没必要每个请求都新建一个对象,这样子既浪费CPU又浪费内存;
   之所以用多例,是为了防止并发问题;即一个请求改变了对象的状态,此时对象又处理另一个请求,而之前请求对对象状态的     改变导致了对象对另一个请求做了错误的处理;
   用单例和多例的标准只有一个:
   当对象含有可改变的状态时(更精确的说就是在实际应用中该状态会改变),则多例,否则单例;
4. 何时用单例?何时用多例?
  对于struts2来说,action必须用多例,因为action本身含有请求参数的值,即可改变的状态;
  而对于STRUTS1来说,action则可用单例,因为请求参数的值是放在actionForm中,而非action中的;

  另外要说一下,并不是说service或dao一定是单例,标准同第3点所讲的,就曾见过有的service中也包含了可改变的状态,同      时执行方法也依赖该状态,但一样用的单例,这样就会出现隐藏的BUG,而并发的BUG通常很难重现和查找;

6.Java如何跨平台

Java跨平台是怎样实现的呢?这就要谈及Java虚拟机(Java Virtual Machine,简称 JVM)。
我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件。
字节码不能直接运行,必须通过JVM翻译成机器码才能运行。
Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。
JVM也是一个软件,不同的平台有不同的版本。只要在不同平台上安装对应的JVM,就可以运行字节码文件。
同一个Java程序,通过JVM这一”中间层“,就能在不同平台上运行,实现了”一次编译,到处运行“。
JVM是一个”桥梁“,是一个”中间件“,是实现跨平台的关键,Java代码首先被编译成字节码文件,再由JVM将字节码文件翻译成机器语言,从而达到运行Java程序的目的。

注意:编译的结果不是生成机器码,而是生成字节码,不同平台下编译生成的字节码是一样的,但是由JVM翻译成的机器码却不一样。

7.Java常用包
java.lang--语言包:Java语言的基础类,包括Object类、Thread类、String、Math、System、Runtime、Class、Exception、Process等,是Java的核心类库

java.util--实用工具包:Scanner、Date、Calendar、LinkedList、Hashtable、Stack、TreeSet等;

java.NET--网络功能包:URL、Socket、ServerSocket等;

java.sql--数据库连接包:实现JDBC的类库;

java.io--输入输出包:提供与流相关的各种包;


Java跨平台是怎样实现的呢?这就要谈及Java虚拟机(Java Virtual Machine,简称 JVM)。
我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件。
字节码不能直接运行,必须通过JVM翻译成机器码才能运行。
Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。
JVM也是一个软件,不同的平台有不同的版本。只要在不同平台上安装对应的JVM,就可以运行字节码文件。
同一个Java程序,通过JVM这一”中间层“,就能在不同平台上运行,实现了”一次编译,到处运行“。
JVM是一个”桥梁“,是一个”中间件“,是实现跨平台的关键,Java代码首先被编译成字节码文件,再由JVM将字节码文件翻译成机器语言,从而达到运行Java程序的目的。

注意:编译的结果不是生成机器码,而是生成字节码,不同平台下编译生成的字节码是一样的,但是由JVM翻译成的机器码却不一样。

7.Java常用包

java.lang--语言包:Java语言的基础类,包括Object类、Thread类、String、Math、System、Runtime、Class、Exception、Process等,是Java的核心类库
java.util--实用工具包:Scanner、Date、Calendar、LinkedList、Hashtable、Stack、TreeSet等;
java.net--网络功能包:URL、Socket、ServerSocket等;
java.sql--数据库连接包:实现JDBC的类库;
java.io--输入输出包:提供与流相关的各种包;

8.为什么用redis作为缓存,本地缓存不可以吗

1.memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
2.redis的速度比memcached快很多
3.redis可以持久化其数据
4.Redis支持数据的备份,即master-slave模式的数据备份。
5.使用底层模型不同, 它们之间底层实现方式以及与客户端之间通信的应用协议不一样。Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
6.value大小:redis最大可以达到1GB,而memcache只有1MB

9.mysql 支持的表类型有哪些

MySQL一共向用户提供了包括DBD、HEAP、ISAM、MERGE、MyIAS、InnoDB以及Gemeni这7种Mysql表类型。其中DBD、InnoDB属于事务安全类表,而其他属于事务非安全类表。

10.ACID 是什么,大致说下

Atomicity原子性
Consistency一致性
Isolation隔离性
Durability耐久性

原子性

原子性任务是一个独立的操作单元,是一种要么全部是,要么全部不是的原子单位性的操作。

一致性

一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。
一致性有下面特点:
    如果一个操作触发辅助操作(级联,触发器),这些也必须成功,否则交易失败。
    如果系统是由多个节点组成,一致性规定所有的变化必须传播到所有节点(多主复制)。如果从站节点是异步更新,那么我们打破一致性规则,系统成为“最终一致性”。
    一个事务是数据状态的切换,因此,如果事务是并发多个,系统也必须如同串行事务一样操作。
    在现实中,事务系统遭遇并发请求时,这种串行化是有成本的, Amdahl法则描述如下:它是描述序列串行执行和并发之间的关系。
“一个程序在并行计算情况下使用多个处理器所能提升的速度是由这个程序中串行执行部分的时间决定的。”
大多数数据库管理系统选择(默认情况下)是放宽一致性,以达到更好的并发性。

隔离性

事务是并发控制机制,他们交错使用时也能提供一致性。隔离让我们隐藏来自外部世界未提交的状态变化,一个失败的事务不应该破坏系统的状态。隔离是通过用悲观或乐观锁机制实现的。 

耐久性

一个成功的事务将永久性地改变系统的状态,所以在它结束之前,所有导致状态的变化都记录在一个持久的事务日志中。如果我们的系统突然受到系统崩溃或断电,那么所有未完成已提交的事务可能会重演。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值