Java常见的一些经典面试题(附答案解析)

前言:我想每个程序员比较头疼的事情都是:工作拧螺丝 , 面试造火箭吧 。 但是又必须经历这个过程 , 尤其是弄不清面试官问的问题 , 如果你准备的不是很充分 , 会导致面试的时候手足无措 。 今天这篇文章是从已工作5年的程序员面试几十次中挑选的面试概率比较大的一些题目 , 都是大家被问到过的(就是这么自信) , 希望这篇文章能够对大家找工作有所帮助 。
Java常见的一些经典面试题(附答案解析)文章插图
基础部分一丶抽象类和接口的区别1.语法区别(1)抽象类可以有构造方法 , 接口不能有构造方法;(2)抽象类中可以有普通成员变量 , 接口中没有普通成员变量;(3)抽象类中可以有非抽象的方法 , 接口中的方法都必须是抽象的;(4)抽象类中的方法可以是public , protected类型 , 接口中的方法只能是public类型的 , 切默认为public abstract类型;(5)抽象类中可以有静态方法 , 接口中不能有静态方法;(6)抽象类中的静态变量访问类型可以是任意的 , 但接口中的静态变量只能是public static final 类型 。 (7).一个类可以实现多个接口 , 但一个类只能继承一个抽象类;
2.应用区别接口更多是在系统架构方面发挥作用 , 主要用于定义模块之间的通信契约;而抽象类在代码方法 发挥作用 , 可以使用代码块的重用;
二丶Java中接口可不可以继承一般类 , 为什么?不可以因为接口中只能出现3种成员1.公共的静态常量(public static final )2.公共的抽象方法(public abstract )3.静态内部类(static class)而一个类中,就算什么都不写,也必须带一个构造方法,在extends时就会被子类继承,如果是接口也会 继承这个构造方法,很明显构造方法不在上面三项之列而如果类中有一般的方法和成员变量,也会被子类全部继承,这些更不能出现在接口中了,所以接口是绝 对不可能继承一个类的
三、基本数据类型的默认值?基本数据类型所占的字节1. 默认值(1)byte、short、int、long的默认值为0(2)float、double默认值为0.0(3)char默认值为空(4)boolean默认值为false2.所占字节(1)byte 1个字节(2)short 2个字节(3)char 2个字节(4)int 4个字节(5)long 8个字节(6)float 4个字节(7)double 8个字节
四丶String属于哪个类 , 以及常用的方法1.java.lang.string2.substring() , indexOf() , concat() , endswith() , length() , replace()
五丶熟悉的网络协议1.TCP/IP协议是一种面向连接的、可靠的协议 。
TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层 , 每层分别负责不同的通信功能 , 接下来针对这四层进行详细地讲解 。
链路层:用于定义物理传输通道 , 通常是对某些网络连接设备的驱动协议 , 例如针对光纤、网线提供的驱动 。
网络层:网络层是整个TCP/IP协议的核心 , 它主要用于将传输的数据进行分组 , 将分组数据发送到目标计算机或者网络 。
传输层:主要使网络程序进行通信 , 在进行网络通信时 , 可以采用TCP协议 , 也可以采用UDP协议 。
应用层:主要负责应用程序的协议 , 例如HTTP协议、FTP协议等 。 2.FTP 文件传输协议 , 允许在网络上传输文件 。
六、String、StringBuffer、StringBuilder
String的值是不可改变的 , 这就导致每次对String的操作都会生成新的String对象 , 不仅效率底下 ,而且浪费大量的内存空间;StringBuilder是可变类 , 任何对它指向的字符串的操作都不会产生新的对 象 , 但单线程不安全;StringBuffer底层方法使用了synchronized关键字 , 线程比较安全 , 但效率 较StringBuilder慢;
七、设计模式单例模式:某个类只能有一个实例 , 提供一个全局的访问点;工厂模式:定义一个创建对象的接口 , 让子类决定实例化那个类;代理模式:为其他对象提供一个代理以便控制这个对象的访问;
八、高并发如何处理?1.从最基础的地方做起 , 优化我们写的代码 , 减少必要的资源浪费 。 a.避免频繁的new对象 , 对于整个程序只需要一个实例的类 , 我们可以使用单例模式;对于String 链接操作 , 使用StringBuffer或StringBuilder , 对于工具类可以通过静态方法来访问;b.避免使用错误的方式 , 使用java中高效率的类 , 比如ArrayList比Vector性能好;2.html静态化把一些经常不改变的内容静态化 , 高并发时减少服务器的压力;3.图片服务器分离对于web服务器来说 , 图片是最消耗资源的 , 于是我们把图片放到独立的服务器 , 这样可以降低 页面请求服务器的系统压力;4.缓存避免每一次都去数据库中去查询 , 减少数据库的访问量;并且使用redis数据库来做缓存 , 它的 读写速度是非常快的;5.数据库优化(1)优化sql语句a.Select语句必须指定列名b.当查询结果为一条时 , 使用limit 1c.避免使用%前缀搜索 , 避免全表扫描