Java面试题

来源:互联网 发布:少儿编程软件 编辑:程序博客网 时间:2024/06/09 18:02
java基础
 1.重载和重写的区别
   重写:
父类与子类之间的多态性,对父类的函数进行重新定义。参数列表不能变,返回类型,访问级别等可变。

   重载: 
一个类中多态性,是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。(参数列表必须变)

 2.Collection 和 Collections的区别。 
  Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
  Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。


 3.HashMap和Hashtable的区别。 
  HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。


 4.用最有效率的方法算出2乘以8等於几? 
  2 << 3


 5.j2ee常用的设计模式?
Java中的23种设计模式:
Factory(工厂模式), Builder(建造模式), Factory Method(工厂方法模式),
Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式),
Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式),
Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式),
Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式),
Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式),
Observer(观察者模式), State(状态模式), Strategy(策略模式),
Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)

工厂模式:根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。


  6.内部类的作用
1.内部类可以很好的实现隐藏(一般的非内部类,是不允许有 private 与protected权限的,但内部类可以)
2.内部类拥有外围类的所有元素的访问权限
3.可是实现多重继承
4.可以避免修改接口而实现同一个类中两种同名方法的调用。

框架

  1.Spring有哪些优点?
轻量级:Spring在大小和透明性方面绝对属于轻量级的。


控制反转(IOC):Spring使用控制反转技术实现了松耦合。依赖被注入到对象,而不是创建或寻找依赖对象。


面向切面编程(AOP): Spring支持面向切面编程,同时把应用的业务逻辑与系统的服务分离开来。


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


MVC框架:Spring的web框架是一个设计优良的web MVC框架,很好的取代了一些web框架。


事务管理:Spring对下至本地业务上至全局业务(JAT)提供了统一的事务管理接口。


异常处理:Spring提供一个方便的API将特定技术的异常(由JDBC, Hibernate, 或JDO抛出)转化为一致的、Unchecked异常。

  2.什么是aop ?
    面向切面的编程,或AOP, 是一种编程技术,允许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理。

  3.什么是ioc ?
    控制反转是一种以给予应用程序中目标组件更多控制为目的设计范式,并在我们的实际工作中起到了有效的作用。
在spring中把对象的创建、初始化、销毁交给spring来管理,而不是由开发者控制,实现控制反转。

  4.什么是依赖注入?
    依赖注入是在编译阶段尚未知所需的功能是来自哪个的类的情况下,将其他对象所依赖的功能对象实例化的模式。
1.构造器注入
2.Setter方法注入
3.接口注入

  5.spring mvc的核心及原理 ?
    DispatcherServlet是整个Spring MVC的核心。

1.客户端请求提交到DispatcherServlet
2.由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
3.DispatcherServlet将请求提交到Controller
4.Controller调用业务逻辑处理后,返回ModelAndView
5.DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
6.视图负责将结果显示到客户端。



数据库
  1.sql优化
    1.SELECT子句中避免使用‘*’;
2.避免使用HAVING子句,HAVING 只会在检索出所有记录之后才对结果集进行过滤。
3.当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上。这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。 
4.用EXISTS替代IN、用NOT EXISTS替代NOT IN:
5.避免在索引列上使用IS NULL和IS NOT NULL,模糊查询避免用%%
6.where子句中避免使用函数。

  2.索引的作用?和它的优点缺点是什么?
    索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

gc(垃圾处理机制)


GC是在什么时候,对什么东西,做了什么事情?
1、什么时候


  a、系统空闲的时候


  b、系统自身决定,不可预测的时候调用gc


  c、eden区满了调用minor gc(),升级到老年代的对象大于老年代剩余空间调用full gc()


  d、程序员不能具体控制时间,系统在不可预测的时间调用System.gc()函数的时候;当然可以通过调优,用NewRatio控制newObject和oldObject的比例,用MaxTenuringThreshold 控制进入oldObject的次数,使得oldObject 存储空间延迟达到full gc,从而使得计时器引发gc时间延迟OOM的时间延迟,以延长对象生存期。


2、对什么东西


  a、不使用的对象


  b、超出作用域的对象,计步器为空的对象


  c、从gc root开始搜索,搜不到的对象


  d、超出了作用域或引用计数为空的对象;从gc root开始搜索找不到的对象,而且经过一次标记、清理,仍然没有复活的对象。


3、做什么


  a、删除不使用的对象,腾出内存空间


  b、随便说说一些停止线程,运行finalize的说明


  c、说说eden区和from suvivor和to suvivor干啥用的,老年代中的标记清理和复制清理等等


  d、删除不使用的对象,回收内存空间;运行默认的finalize,当然程序员想立刻调用就用dipose调用以释放资源如文件句柄,JVM用from survivor、to survivor对它进行标记清理,对象序列化后也可以使它复活。



线程
1.Java中多线程同步是什么?
在多线程程序下,同步能控制对共享资源的访问。如果没有同步,当一个Java线程在修改一个共享变量时,另外一个线程正在使用或者更新同一个变量,这样容易导致程序出现错误的结果。

2.实现多线程的几种方法?

Java线程可以实现Runnable接口或者继承Thread类来实现,当你打算多重继承时,优先选择实现Runnable。

3.死锁原理

死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。
  
  
原创粉丝点击