java吧 关注:1,301,398贴子:12,848,636

回复:【学习】【直播】【长期】【常见的面试题,标题要长长长长长

只看楼主收藏回复

21、请用JAVA实现两个类,分别实现堆栈(Stack)和队列(Queue)操作。
public class MyStack {
private List list;
public MyStack(){ list = new ArrayList(); }
public boolean isEmpty(){ return list.size() == 0; }
public void push(Object obj){ list.add(obj); }
public Object pop(){ if(list.size()>0){ Object obj = list.get(list.size()-1); list.remove(list.size()-1); return obj; }else{ return null; }}
//上stack 下queue
public int getNumber(){ return list.size(); } }
class IntegerQueue {
public int[] integerQueue;// 用来当队列
public int tail;// 队尾
public int size;// 队的长度,也可以设置一个默认值,溢出时从新申请
public IntegerQueue(int size) { integerQueue = new int[size]; this.size = size; tail = 0; }
public void inQueue(int i) { if (tail < size) { this.integerQueue[tail] = i; tail++; } else { System.err.println("溢出啦!"); } }
public int outQueue() { if (tail >= 0) { int tmp = this.integerQueue[0]; tail--; return tmp; } else { System.err.println("队列为空!"); throw new RuntimeException(); } } }


IP属地:北京96楼2012-03-05 13:53
回复
    这下好点了


    IP属地:北京97楼2012-03-05 13:54
    回复
      2026-04-14 19:07:13
      广告
      不感兴趣
      开通SVIP免广告
      22、简述JAVA代码安全性
      类加载器(class loader)加载程序运行所需要的所有类,它通过区分本机文件系统的类和网络系统导入的类增加安全性,这可以限制任何的特洛伊木马程序,因为本机类总是先被加载,一旦所有的类被加载完,执行文件的内存划分就固定了,在这个时候特定的内存地址被分配给对应的符号引用,查找表(lookuo table)也被建立,由于内存划分发生在运行时,解释器在受限制的代码区增加保护防止未授权的访问;然后字节码校验器(byte code verifier)进行校验,主要执行下面的检查:类符合JVM规范的类文件格式,没有违反访问限制,代码没有造成堆栈的上溢或者下溢,所有操作代码的参数类型都是正确的,没有非法的数据类型转换(例如将整型数转换成对象类型)发生;校验通过的字节码被解释器(interpreter)执行,解释器在必要时通过运行时系统执行对底层硬件的合适调用。


      IP属地:北京98楼2012-03-05 14:17
      回复
        今天就到这,明天继续
        没人看也会更完


        IP属地:北京99楼2012-03-05 14:55
        回复
          开工了


          IP属地:北京100楼2012-03-06 13:21
          回复
            23、简述JAVA代码安全性
            类加载器(class loader)加载程序运行所需要的所有类,它通过区分本机文件系统的类和网络系统导入的类增加安全性,这可以限制任何的特洛伊木马程序,因为本机类总是先被加载,一旦所有的类被加载完,执行文件的内存划分就固定了,在这个时候特定的内存地址被分配给对应的符号引用,查找表(lookuo table)也被建立,由于内存划分发生在运行时,解释器在受限制的代码区增加保护防止未授权的访问;然后字节码校验器(byte code verifier)进行校验,主要执行下面的检查:类符合JVM规范的类文件格式,没有违反访问限制,代码没有造成堆栈的上溢或者下溢,所有操作代码的参数类型都是正确的,没有非法的数据类型转换(例如将整型数转换成对象类型)发生;校验通过的字节码被解释器(interpreter)执行,解释器在必要时通过运行时系统执行对底层硬件的合适调用。


            IP属地:北京101楼2012-03-06 13:23
            回复
              24、String, StringBuffer StringBuilder的区别。
              String是不可变的;StringBuffer是可变的,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法,并且它是线程安全的;StringBuilder是从 JDK 5 开始提供的类,为StringBuffer该类补充了一个单个线程使用的等价类;通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。


              IP属地:北京102楼2012-03-06 13:27
              回复
                25、“==”和equals()方法在字串变量操作中的不同?
                ”==”比较的是两个字符串对象的地址,equals()是比较的两个字符串的具体值。


                IP属地:北京103楼2012-03-06 13:29
                回复
                  2026-04-14 19:01:13
                  广告
                  不感兴趣
                  开通SVIP免广告
                  26、面向对象的特征有哪些方面?
                  面向对象的特征主要有以下几个方面: 1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3)封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4)多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。


                  IP属地:北京104楼2012-03-06 13:32
                  回复
                    27、什么是java序列化,如何实现java序列化?
                    序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题; 序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。


                    IP属地:北京105楼2012-03-06 13:33
                    回复
                      28、死锁的必要条件?怎么克服?
                      产生死锁的四个必要条件: 互斥条件:一个资源每次只能被一个进程使用。 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。 死锁的解决方法:
                      a 撤消陷于死锁的全部进程;
                      b逐个撤消陷于死锁的进程,直到死锁不存在;
                      c从陷于死锁的进程中逐个强迫放弃所占用的资源,直至死锁消失。
                      d从另外一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死锁状态


                      IP属地:北京106楼2012-03-06 13:36
                      回复
                        29、详细阐述一下Collection接口所包含的内容 ?
                        List:有序允许重复存放
                        ArrayList----按顺序存放数据的数组
                        LinkList-----按顺序存放数据的链表
                        Vector-------线程安全的按顺序存放数据的数组
                        Set:无序不允许重复存放
                        HashSet---根据HashCode()和equals()方法来判断是否有重复
                        SortedSet:有序
                        TreeSet------通过实现Comparable接口和Comparator接口而具有排序功能的**


                        IP属地:北京107楼2012-03-06 13:41
                        回复
                          30、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(责任链模式)
                          工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。


                          IP属地:北京108楼2012-03-06 13:43
                          回复
                            31、对hibernate的延迟加载如何理解,在实际应用中,延迟加载与session关闭的矛盾是如何处理的?
                            延迟加载就是并不是在读取的时候就把数据加载进来,而是等到使用时再加载。那么Hibernate是怎么知识用户在什么时候使用数据了呢?又是如何加载数据呢?其实很简单,它使用了代理机制。返回给用户的并不是实体本身,而是实体对象的代理。代理对象在用户调用getter方法时就会去数据库加载数据。但加载数据就需要数据库连接。而当我们把会话关闭时,数据库连接就同时关闭了。这种情况就叫做未初始化的关系。 延迟加载与session关闭的矛盾一般可以这样处理: 1)、关闭延迟加载特性。 操作起来比较简单,因为hibernate的延迟加载特性是在hbm配置里面可控制的。默认lazy="true",具体配置可以查看一下相关文档,就不详细叙述了。 但使用这个解决办法带来的隐患是十分大的。 首先,出现no session or session was closed就证明了您已经在使用外键关联表,如果去掉延迟加载的话,则表示每次查询的开销都会变得十分的大,如果关联表越多,后果也可以想象得到。所以不建议使用这个方法解决。 2)、在session关闭之前把我们想要查询的数据先获取了。 首先需要了解一下session什么时候关闭,也就是它的生命周期。通常情况下hibernate会在查询数据关闭session,而使用getHibernateTemplate().get方法查询后会延迟关闭的时间。会在事务结束后才关闭。 使用拦截器(Interceptor)或过滤器(Filter)控制session。 spring为解决hibernate这一特性提供的解决方案,可以有效的控制session生命周期。


                            IP属地:北京109楼2012-03-06 13:46
                            回复
                              2026-04-14 18:55:13
                              广告
                              不感兴趣
                              开通SVIP免广告
                              发现这帖子虽然回复不高,点击倒也不低。
                              希望各位看客不是喽一眼就关掉了
                              真心觉得有些题很不错的


                              IP属地:北京110楼2012-03-06 17:16
                              回复