java 面试题之 java 基础

面试题如果有不对的地方欢迎大家指正,如果大家有补充的也欢迎各位不吝赐教。


1.请你列出你所知道的 HTTP 状态码并做简要说明?
http状态码是表示网页服务器 http 响应状态的3位数字。有1xx/2xx/3xx/4xx/5xx。
200,表示请求成功;
404,服务器根据请求地址找不到对应资源,如地址错误、项目没有部署、web.xml 中两个 的值不一样。
405,web 服务器找不到 service()处理请求,比如service() 方法名写错、参数类型与标准类型不一致、返回值类型与标准不一致等
500,程序运行过程中出错。比如,Servlet 类没有继承HttpServlet类或者实现 Servlet 接口、web.xml 中的 写错、service() 方法中运行时抛出异常等


2.请说明 Session 与 Cookie 的区别和联系

  • 什么是状态管理?
    客户端与服务器之间的多次交互当做一个整体来看待,并且将多次交互所涉及的数据(即状态)保存下来。
    状态指的是数据;管理指的是多次交互时对数据的修改。
  • 为什么要有状态管理?
    web 应用程序使用的是 http 协议,而 http 协议是无“状态”协议,即服务器响应完成一次客户端请求后便与客户端断开,而同一个客户再次发送请求时需要重新建立连接。
    而很多时候服务器需要记录是否是同一个客户发送的请求,比如客户的多次选购商品,因此需要跟踪同一客户发出的一系列请求。

    Session 和 Cookie 是状态管理的2种常见模式,Cookie 是将状态保存在客户端,而 Session 是将状态保存在服务器端。

关于 Cookie

  • Cookie 是将状态保存在客户端,不安全,对于敏感数据需要加密后再使用 Cookie 来保存;
  • Cookie 可以被用户禁止;
  • Cookie 的个数是有限的,且 Cookie 只能保存少量数据,大约在4kb左右;
  • Cookie 只能保存字符串;

关于 Session

  • Session 将状态保存在服务器端,安全性高;
  • Session 可以保存的数据类型更广泛;
  • Session 可以保存更多的数据;
    缺点

  • Session 将状态保存在服务器端,占用服务器内存,如果用户量过大,会影响服务器性能。


3.Overload 与 Override 的区别,重载的方法能否根据返回值类型进行区分?

重载和重写是 java 语言多态性的表现,重载是编译时多态性的体现,要求是在一个类中,重载要求方法名称相同参数列表不同;重写是运行时多态性的体现,要求是在父子类中,重写要求方法签名相同而方法体不同。重载方法对返回值没有要求,所以不能根据返回值进行区分。


4.抽象类和接口有什么异同?

  1. 抽象类
    含有抽象方法的类就是抽象类;
    抽象类和抽象方法用abstract修饰;
    抽象类不能直接实例化,但可以通过子类实现;
    抽象类可以包含:成员变量、静态常量、有构造方法、有抽象方法、有普通方法;

  2. 接口
    只含有抽象方法和静态常量的类就是接口;
    接口用interface修饰;
    接口不能被实例化;
    接口没有普通变量、没有构造方法、没有普通方法;

接口与接口之间只能是继承关系,可以单继承也可以多继承;
类与类之间只能是继承关系,只能是但继承;
类与接口之间只能是实现关系,可以单实现也可以多实现;
继承与实现都有时,应该先继承后实现;


5.try{} 里有一个 return 语句,那么紧跟在后面的 finally{} 语句块会不会执行?是在 return 之前执行还是在之后执行?

会执行。
finally 语句块是在 try 或者 catch 中的 return 执行之后返回之前执行,且 finally 的修改语句可能影响也可能不影响 try 和catch 中 return 已经确定的返回值,若在 finally 也有 return 语句则覆盖 try 或者 catch 中的 return 语句直接返回。


6·用java写一个单例类。
饱汉式的单例模式代码如下:

    public class A{
        private static A a;
        public A(){

        } 
        public static synchronized A getA(){
            if(a==null){
                a=new A();
            }
            return a;
        }
    }

饿汉式

    public class B{
        private static B b=new B();
        public B(){

        }
        public static B getB(){
            return b;
        }
    }

7.一个大的含有50M个URL记录,和一个小的含有500个URL的记录,找出2个记录里相同的URL。

这题不会,求各位指点思路


8.简单说一下 redis 缓存


9.用过哪些校验框架,简单说一下。


10.HashMap 和 Hashtable 的区别?
二者都实现了 Map 接口,是将唯一的键映射到特定的值上,采用的 hash/rehash 算法大致一样,所以性能不会有很大的差异。主要区别在于:

  1. HashMap 没有排序,允许一个 null 键和多个 null 值,而 Hashtable 不允许;
  2. HashMap 把 Hashtable 的 contains 方法去掉了,改成了 containsKey 和 containValue ,因为 contains 方法容易让人误解。
  3. HashMap 是 Map 接口的实现类,而 Hashtable 是 Dictionary 类的子类;
  4. HashMap 是非线程安全的,而 Hashtable 的方法是 synchronized 的

11.说说 IOC 和 DI,注入对象用什么注解?
IOC :控制反转,对象之间的依赖关系交给容器来管理。(目标)
DI:依赖注入,容器通过依赖注入的方式来建立对象之间的依赖关系。(手段)
DI 有2种方式:Setter 注入和构造器注入。

与依赖 注入相关的2组注解:@Autowired @Qualifier
@Autowired,写在构造器前面或者写在 SetXX 前面,都表明要为其注入 Bean
@Qualifier,写在参数前面,申明需要注入 Bean 的 id。
这一组注解也可以写在属性上,意义一样,就是不能进行具体操作,仅仅是注入了对象。

注:当注入的对象是单例时,@Qualifier 可以省略,此时容器按照类型来匹配参数。

//写在构造器前面
public class A{
    private B b;
    @Autowired
    public A(@Qualifier("b")B b){
        this.b=b;
    }
}
//或者
public class A{
    @Autowired
    @Qualifier("b")
    private B b;
    public A(B b){
        this.b=b;
    }
}
//写在 Set 方法前面
public class A{
    private B b;
    @Autowired
    public void SetB(@Qualifier("b")B b){
        this.b=b;
    }
}
//或者
public class A{
    @Autowired
    @Qualifier("b")
    private B b;
    public void SetB(B b){
        this.b=b;
    }
}

@Resource 注解可以用在 Set 方法上,也可以达到同样的效果,使用更方便。
注:当注入的对象是单例时,name=”b” 可以省略,此时 Spring 按照类型去匹配参数。

public class A{
    private B b;
    @Resource(name="b")
    public void SetB(B b){
        this.b=b;
    }
}
//或者
public class A{
    @Resourrce(name="b")
    private B b;
    public void SetB(B b){
        this.b=b;
    }
}

12.介绍一下 java 的容器吧
java 容器是用来存放对象的,与数组相比,其长度不受限制,类型不受限制,所以使用更广泛。java 容器 API 有 List、Set、Map。
Collection 接口是所有集合的父接口。List 和 Set 接口都继承自 Collection 接口。

  • List
    List 集合是有序且可重复的,常用的实现类有 ArrayList 和 LinkedList;ArrayList 内部实现是数组,所以适合查找。LinkedList 内部是链表结构,所以适合增删元素。

  • Set
    Set 集合是不可重复且大多数是无序的,Set 最多有一个 null 元素。Set 容器主要有 HashSet、TreeSet等。

  • Map
    Map 接口没有继承 Collection 接口,常用的实现类有 HashMap、Hashtable(继承自 Dictionary 类)、TreeMap 等。其按照 key-value 键值对的形式存储对象,其中 key 要求唯一。HashMap 和 Hashtable 也有很大的区别,比如 HashMap 没有排序,允许一个 null 键和多个 null 值存在,而 Hashtable 不允许···。


13.说说你了解的加密算法有哪些?

  • Base64 加密算法

  • MD5 加密算法
    由 MD2/MD3/MD4 发展而来,是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。

    MD5 算法的特点:
    1. 压缩性:任意长度的数据,算出的 MD5 值的长度都是固定的;
    2. 容易计算:从原数据计算出 MD5 值很容易;
    3. 抗修改性:对原数据进行任何修改,哪怕只修改1个字节,所得到的 MD5 值都有很大的区别;
    4. 强抗碰撞:已知原数据和其 MD5 值,想找到一个具有相同 MD5 值的数据(即伪造数据)是非常困难的。

    MD5 算法流程
    1. 填充
    2. 初始化变量
    3. 处理分组数据
    4. 输出

部分代码如下:

    public class Test{
    public static String md5(String src){
        try {
            /** 对字符串src进行加密处理
             * */
            MessageDigest md=MessageDigest.getInstance("MD5");
            byte[] output=md.digest(src.getBytes());
        //  return new String(output);   这里加密返回后的数据会出现乱码
            String ret=Base64.encodeBase64String(output);//采用Base64进行处理(采用64个常见字母来对数据进行处理a-z,A-Z,0-9,=,+)
            return ret;
        } catch (Exception e) {
            throw new Md5Exception("加密失败",e);
        }
    }
    }

未完…

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值