去儿网java面试

上传人:郭** 文档编号:117480851 上传时间:2019-12-05 格式:DOC 页数:8 大小:99.46KB
返回 下载 相关 举报
去儿网java面试_第1页
第1页 / 共8页
去儿网java面试_第2页
第2页 / 共8页
去儿网java面试_第3页
第3页 / 共8页
去儿网java面试_第4页
第4页 / 共8页
去儿网java面试_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《去儿网java面试》由会员分享,可在线阅读,更多相关《去儿网java面试(8页珍藏版)》请在金锄头文库上搜索。

1、去儿网java面试 1.char型变量中能不能存贮一个中文汉字?为什么? char型变量是用来存储Unicode编码的字符的unicode编码字符集中包含了汉字所以char型变量中当然可以存储汉字啦不过如果某个特殊的汉字没有被包含在unicode编码字符集中那么这个char型变量中就不能存储这个特殊汉字补充说明:unicode编码占用两个字节所以char类型的变量也是占用两个字节 备注:后面一部分回答虽然不是在正面回答题目但是为了展现自己的学识和表现自己对问题理解的透彻深入可以回答一些相关的知识做到知无不言言无不尽 2.、=和equals方法究竟有什么区别? (单独把一个东西说清楚然后再说清楚

2、另一个这样它们的区别自然就出来了混在一起说则很难说清楚) =操作符专门用来比较两个变量的值是否相等也就是用于比较变量所对应的内存中所存储的数值是否相同要比较两个基本类型的数据或两个引用变量是否相等只能用=操作符 如果一个变量指向的数据是对象类型的那么这时候涉及了两块内存对象本身占用一块内存(堆内存)变量也占用一块内存例如Objetobj=newObject();变量obj是一个内存newObject()是另一个内存此时变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址对于指向对象类型的变量如果要比较两个变量是否指向同一个对象即要看这两个变量所对应的内存中的数值是否相等这时候就需要

3、用=操作符进行比较 equals方法是用于比较两个独立对象的内容是否相同就好比去比较两个人的长相是否相同它比较的两个对象是独立的例如对于下面的代码: Stringa=newString(foo); Stringb=newString(foo); 两条new语句创建了两个对象然后用a,b这两个变量分别指向了其中一个对象这是两个不同的对象它们的首地址是不同的即a和b中存储的数值是不相同的所以表达式a=b将返回false而这两个对象中的内容是相同的所以表达式a.equals(b)将返回true 在实际开发中我们经常要比较传递进行来的字符串内容是否等例如Stringinput=;input.equal

4、s(“quit”)许多人稍不注意就使用=进行比较了这是错误的随便从网上找几个项目实战的教学视频看看里面就有大量这样的错误记住字符串的比较基本上都是使用equals方法 如果一个类没有自己定义equals方法那么它将继承Object类的equals方法Object类的equals方法的实现代码如下: booleanequals(Objecto) returnthis=o; 这说明如果一个类没有自己定义equals方法它默认的equals方法(从Object类继承的)就是使用=操作符也是在比较两个变量指向的对象是否是同一对象这时候使用equals和使用=会得到同样的结果如果比较的是两个独立的对象则

5、总返回false如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同那么你必须覆盖equals方法由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的 3.AnonymousInnerClass(匿名内部类)是否可以extends(继承)其它类 是否可以implements(实现)interface(接口)? 可以继承其他类或实现其他接口不仅是可以而是必须 4.String和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer它们可以储存和操作字符串即包含多个字符的字符数据这个String类提供了数值不可改变的字符串而这个Strin

6、gBuffer类提供的字符串进行修改当你知道字符数据要改变的时候你就可以使用StringBuffer典型地你可以使用StringBuffers来动态构造字符数据另外String实现了equals方法newString(“abc”).equals(newString(“abc”)的结果为true,而StringBuffer没有实现equals方法所以newStringBuffer(“abc”).equals(newStringBuffer(“abc”)的结果为false 接着要举一个具体的例子来说明我们要把1到100的所有数字拼起来组成一个串 StringBuffersbf=newStringB

7、uffer(); for(inti=0;i100;i+) sbf.append(i); 上面的代码效率很高因为只创建了一个StringBuffer对象而下面的代码效率很低因为 创建了101个对象 Stringstr=newString(); for(inti=0;i100;i+) str=str+i; 在讲两者区别时应把循环的次数搞成10000然后用endTimebeginTime来比较两者执行的时间差异最后还要讲讲StringBuilder与StringBuffer的区别 String覆盖了equals方法和hashCode方法而StringBuffer没有覆盖equals方法和hashCo

8、de方法所以将StringBuffer对象存储进Java集合类中时会出现问题 5.java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用? java5以前有如下两种: 第一种: newThread().start();这表示调用Thread子类对象的run方法newThread()表示一个 Thread的匿名子类的实例对象子类加上run方法后的代码如下: newThread() publicvoidrun() .start(); 第二种: newThread(newRunnable().start();这表示调用Thread对象接受的

9、Runnable对象的run 方法newRunnable()表示一个Runnable的匿名子类的实例对象,runnable的子类加上 run方法后的代码如下: newThread(newRunnable() publicvoidrun() ).start(); 从java5开始还有如下一些线程池创建多线程的方式: ExecutorServicepool=Executors.newFixedThreadPool(3) for(inti=0;i10;i+) pool.execute(newRunable()publicvoidrun(); Executors.newCachedThreadPool

10、().execute(newRunable()publicvoidrun(); Executors.newSingleThreadExecutor().execute(newRunable()publicvoidrun(); 有两种实现方法分别使用newThread()和newThread(runnable)形式第一种直接调用 thread的run方法所以我们往往使用Thread子类即newSubThread()第二种调用 runnable的run方法 有两种实现方法分别是继承Thread类与实现Runnable接口用synchronized关键字修饰同步方法反对使用stop()是因为它不安全

11、它会解除由线程获取的所有锁定而且如果对象处于一种不连贯状态那么其他线程能在那种状态下检查和修改它们结果很难检查出真正的问题所在suspend()方法容易发生死锁调用suspend()的时候目标线程会停下来但却仍然持有在这之前获得的锁定此时其他任何线程都不能访问锁定的资源除非被挂起的线程恢复运行对任何线程来说如果它们想恢复目标线程同时又试图使用任何一个锁定的资源就会造成死锁所以不应该使用suspend()而应在自己的Thread类中置入一个标志指出线程应该活动还是挂起若标志指出线程应该挂起便用wait()命其进入等待状态若标志指出线程应当恢复则用一个notify()重新启动线程 6.同步和异步有

12、何异同在什么情况下分别使用他们?举例说明 如果数据将在线程间共享例如正在写的数据以后可能被另一个线程读到或者正在读的数据可能已经被另一个线程写过了那么这些数据就是共享数据必须进行同步存取当应用程序在对象上调用了一个需要花费很长时间来执行的方法并且不希望让程序等待方法的返回时就应该使用异步编程在很多情况下采用异步途径往往更有效率 7.多线程有几种实现方法?同步有几种实现方法? 多线程有两种实现方法分别是继承Thread类与实现Runnable接口同步的实现方面有两种分别是synchronized,wait与notifywait():使一个线程处于等待状态并且释放所持有的对象的locksleep(

13、):使一个正在运行的线程处于睡眠状态是一个静态方法调用此方法要捕捉InterruptedException异常notify():唤醒一个处于等待状态的线程注意的是在调用此方法的时候并不能确切的唤醒某一个等待状态的线程而是由JVM确定唤醒个线程而且不是按优先级Allnotity():唤醒所有处入等待状态的线程注意并不是给所有唤醒线程一个对象的锁而是让它们竞争 8.Set里的元素是不能重复的那么用什么方法来区分重复与否呢?是用=还 是equals()?它们有何区别?Set里的元素是不能重复的元素重复与否是使用equals()方法进行判断的equals()和=方法决定引用值是否指向同一对象equals()在类中被覆盖为的是当两个分离的对象的内容和类型相配的话返回真值

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号