您的位置:首页 > 职场人生

JAVA基本面试一

2016-12-23 11:44 274 查看
A、String、StringBuffer与StringBuilder的区别?

1)、在执行速度方面的比较:StringBuilder  > StringBuffer;

2)、String类中使用字符数组保存字符串,如private final char value[];,因为有“final”修饰符,所以可以知道String对象是不可变的StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如char[]
value;,可知这两种对象都是可变的

3)、StringBuilder:线程非安全,String、StringBuffer:线程安全的。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。

    对于三者使用的总结:1.如果要操作少量的数据用 = String

            2.单线程操作字符串缓冲区下操作大量数据 = StringBuilder

            3.多线程操作字符串缓冲区下操作大量数据 = StringBuffer

B、HashMap、TreeMap、LindedHashMap的区别?

共同点:

HashMap,LinkedHashMap,TreeMap都属于Map;Map主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。 

不同点:

1.HashMap里面存入的键值对在取出的时候是随机的,也是最常用的一个Map.它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。在Map中插入、删除和定位元素,HashMap是最好的选择。 

2.TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。 

3.LinkedHashMap是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现.(应用场景:购物车等需要顺序的)

C、try catch finally,try里有return,finally还执行么?

结论:

1、不管有没有有出现异常,finally块中代码都会执行;

2、当try和catch中有return时,finally仍然会执行

3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,还是之前保存的值),所以函数返回值是在finally执行前确定的

4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

D、foreach与正常for循环效率和使用场景对比?

结论:

1、需要循环数组结构ArrayList时,建议使用普通for循环,因为for循环采用下标访问,对于数组结构的数据来说,采用下标访问比较好。

2、需要循环链表结构LinkedList时,一定不要使用普通for循环,另外,foreach的时候会锁定集合中的对象,期间不能修改。在一些全局的,多线程可以访问的数据结构对象,使用foreach。而对本地变量,则使用for,效率和安全兼顾!

E、JAVA多线程实现的三种方式?

1、继承Thread类实现多线程;

2、实现Runnable接口方式实现多线程;

3、使用ExecutorService、Callable、Future实现有返回结果的多线程。ExecutorService、Callable、Future这个对象实际上都是属于Executor框架中的功能类。ExecutoreService提供了submit()方法,传递一个Callable,或Runnable,返回Future。如果Executor后台线程池还没有完成Callable的计算,这调用返回Future对象的get()方法,会阻塞直到计算完成。

public static ExecutorService newFixedThreadPool(intnThreads)

创建固定数目线程的线程池。

public static ExecutorService newCachedThreadPool()

创建一个可缓存的线程池,调用execute将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。

public static ExecutorService newSingleThreadExecutor()

创建一个单线程化的Executor。

public static ScheduledExecutorService
newScheduledThreadPool(intcorePoolSize)

创建一个支持定时及周期性的任务执行的线程池,多数情况下可用来替代Timer类。

ThreadPoolExecutor参数:

corePoolSize:池内线程初始值与最小值,就算是空闲状态,也会保持该数量线程。

maximumPoolSize:线程最大值,线程的增长始终不会超过该值。

keepAliveTime:当池内线程数高于corePoolSize时,经过多少时间多余的空闲线程才会被回收,回收前处于wait状态。

F、设计模式:单例、工厂、适配器、代理、观察者?

设计模式的分类

总体来说设计模式分为三大类:

创建型模式,共五种:

工厂模式(在不确定会有多少个处理操作时应该考虑使用简单工厂模式,如针对同样的接收到的数据,处理的逻辑可能会不同,可能以后还会增加新的操作。 这样如果对原有功能进行更改或是新添加新的功能,也不会对原来的其他类做修改,只编译修改的那个类或是新的类就可以了。 这样就做到了把耦合降到最低,同时也便于维护。 实际用例:
Spring IoC容器)、

单例模式(资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如上述中的日志文件,应用配置)

、抽象工厂模式、建造者模式、原型模式。

结构型模式,共七种:

适配器模式(如果一个抽象类或者接口的话,就必须要重写所有的抽象方法。那么,如果一个接口中定义的抽象方法过多,而子类中很多抽象方法又不需要用到,就应该设计一个适配器。比如:windowAdapter)、

代理模式(方法前后添加日志或者测试方法耗时的场景。实际用例:Spring的AOP框架)、

装饰器模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:

观察者模式(对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。商品降价通知到各个用户的场景,  实际用例:JMS)、

策略模式、模板方法模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

其实还有两类:并发型模式和线程池模式。

G、JDK几种常用的内存调试工具:jps、jstack、jmap、jstat、jinfo、jconsole?

       jps

         查看所有的jvm进程,包括进程ID,进程启动的路径等等。

jstack:

观察jvm中当前所有线程的运行情况和线程当前状态。

系统崩溃了?如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java
stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。系统hung住了?jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java
stack和native stack的信息,如果现在运行的java程序呈现hung的状态,jstack是非常有用的。

jmap:

监视进程运行中的jvm物理内存的占用情况,该进程内存内,所有对象的情况,例如产生了哪些对象,对象数量;系统崩溃了?jmap可以从core文件或进程中获得内存的具体匹配情况,包括Heap
size, Perm size等等,一般结合jhat使用。

jstat:

jstat利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对进程的classloader,compiler,gc情况;特别的,一个极强的监视内存的工具,可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量,以及加载类的数量。

jinfo:

         观察进程运行环境参数,包括Java System属性和JVM命令行参数

系统崩溃了?jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息。

jconsole:

jconsole是一个内置Java性能分析器,可以从命令行或在 GUI shell中运行。可以轻松地使用
jconsole来监控 Java应用程序性能和跟踪 Java中的代码。

H、如何查找占用CPU最高的线程及相关代码?

方法:

    1、使用top命令确认是哪个进程占用CPU高。

         2、使用top -H -p PID的方式,查看指定进程的线程使用CPU的情况。

         3、使用jstack打印一下指定进程ID的java堆栈信息。

         4、上面咱们已经找到了占用CPU最高的线程,我们现在将线程的PID转换成16进制。在上面jstack中打印出来的dump信息里面,搜索分析即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: