Java的面试题
yaochen22
2010-04-02
请答得出来的朋友加msn联系
1.请问Map与Collection的关系? 2.请问equals与==的区别是什么? 3.请说明http中的forward和redirect的区别 4.线程的基本概念、线程的基本状态以及状态之间的关系 5.几种常用的数据结构及内部实现原理 6.Socket通信(TCP、UDP区别及Java实现方式) 7.多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 我是猎头: MSN:yaochen21{at}msn.com Email:yaochen{at}renhenet.com.cn headhunter consultant:Kevin |
|
lyqidao
2010-04-02
yaochen22 写道 请答得出来的朋友加msn联系
1.请问Map与Collection的关系? 2.请问equals与==的区别是什么? 3.请说明http中的forward和redirect的区别 4.线程的基本概念、线程的基本状态以及状态之间的关系 5.几种常用的数据结构及内部实现原理 6.Socket通信(TCP、UDP区别及Java实现方式) 7.多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 我是猎头: MSN:yaochen21{at}msn.com Email:yaochen{at}renhenet.com.cn headhunter consultant:Kevin 不能完全回答出:不过我想留下自己的答案,希望来者能多提意见,互相学习互相进步! 1.Collection接口我经常使用到的有List接口和Set接口, List接口包含LinkedList 和 ArrayList等 这些集合是有序的, 我们可以使用索引访问元素。 而Set接口上不允许包含重复元素的,比如null值。 ...Map我是按字面意思理解,就是地图的意思,我们根据一定的条件去查找自己想要的值,也就是我们所说的键值对,以键查值。 Map和Collection两者我们都常用来存储数据,我个人觉得Map性能比较好! 2.equars是比较两个引用类型,比较的是对象的引用或对象逻辑上是否一致(我认为比较的是否是引用的内存地址?呵呵,要学习一下内存了); == 比较的值类型 3.sendRedirect 是客户端浏览处理,能看到浏览器地址的变化; forward 是服务器完成的重定向,浏览器地址不会发生变化。 4.线程不太了解,很少用到,但任需学习。 5.6.7. 大家努力吧 分享一下自己的答案,我不太了解。不过我相信我也能学会。 |
|
yanlei3032
2010-07-27
1.请问Map与Collection的关系?
从继承方面考虑 :没有关系。。 从存放数据方面考虑 : 两者都相当于数据桶,Map的key是Collection的子接口set的实现,Map取值的原来就如楼上所说键值对。 2,请问equals与==的区别是什么? equals 的意思是值相等,即两者引用的对象是否符合equals方法的实现前提。 equals相等的实现原理,首先要hashcode相等,然后是重写equals方法. == 的意思的指针的引用对象相等,即引用的对象是同一个。 |
|
yanlei3032
2010-07-27
3.请说明http中的forward和redirect的区别
forward : 只是把执行权利交给其他的servlet。对于客户端来说,它并不知情。 redirect :先servlet发送一个地址给客户端,告诉客户端去请求这个URL地址的数据,然后客户端去调用这个URL的数据。 引申出来的东西 : forward只能访问同一项目的资源,redirect应该可以访问多个项目的资源。 4.线程的基本概念、线程的基本状态以及状态之间的关系 。 线程,可以说是不钻资源的进程,有自己独立的运行栈,初始化->进入等待池->运行->销毁。 5.几种常用的数据结构及内部实现原理 数据结构,线型结构,树形结构,还有啥啥。。不杂的懂,java中不杂的需要。 ArrayList 的话查询多,更改少的时候会用到。 LinkList 更改频繁,查询少的时候用到。 6Socket通信(TCP、UDP区别及Java实现方式) TCP/IP 协议 :三次握手协议,先A发数据包给B,然后B对A进行确认,然后A应该还要发一次消息给B,不记得了。。。就像网上邮寄买书差不多。 UDP协议 : 只管发,不管别人有没有受到。象国民党时期,散发报纸一样,不管别人能不能接到,扔过去就是。 JAVA中 Socket实现了TCP/IP协议 DatagramSocket实现了UDP协议。 7 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 一种继承thread类,一种是实现runable接口,主要是synchronized 实现,jdk的话还提供了一些对synchronized的包装类,好像叫Lock,不过内部实现原来还是synchronized |
|
mnieguomin
2010-08-12
数据结构应该是:数组,堆栈,队列,链表等。。
|
|
204_lwa
2012-07-04
引用 2,请问equals与==的区别是什么?
这个说法有点问题吧。
equals 的意思是值相等,即两者引用的对象是否符合equals方法的实现前提。 equals相等的实现原理,首先要hashcode相等,然后是重写equals方法. == 的意思的指针的引用对象相等,即引用的对象是同一个。 首先==是关系运算符,它的既定实现程序员不能更改。对于对象引用,是比较它们指向的是否同一实例,也能不十分正确的说成是地址相同(实际上也是符号引用罢了),数组也一样。 而对于原生类型数据,是比较它们的值是否相等,并非比较它们的符号引用相同。 如果我们的对象不是依靠比较引用来确定是否相同的呢,那equals方法就是为这个目的而生,提供程序员很大的自由度。所有类的默认父类java.lang.Object的equals方法默认实现就是简单的比较引用是否相同。你可以根据你的需求重写此方法。 最后equals()跟hashCode()没有直接关系,之所以流传着equals()和hashCode()必须一起重写,是因为hashMap,hashTable这些集合框架类的实现所需。 重写方法要遵循如下规则: 如果a.equals(b)为true就必定有a.hashCode()==b.hashCode()为true,但反过来c.hashCode()==d.hashCode()为true时,c.equals(d)不一定为true; 如果达不到以上效果,使用hashMap这些类存储自己的实例时,会发生数据不正确问题。 这里不对实现代码分析。自己查阅相关源代码。 |
|
仗剑执法1
2013-03-06
1、map 存放的是键值关系对,成对出现,Collection 存放的是一组对象。
2、equals 比较的是object,== 比较的是值。 3、forward 是服务器自动转向新地址,并将新请求的结果返回给浏览器,redirect告诉客户浏览器重新指向这一个新的地址。 |
|
jsjzhou
2013-03-10
1.请问Map与Collection的关系?
Map是根据key映射查询value对象.通常是利用Hash的思想来达到快速查找的目标. 时间负责度通常是o(1) Collection是一组对象的集合. 常见的Collection有List, Set, Queue. 2.请问equals与==的区别是什么? (1)equals是Object定义的一个方法(任何子类都可以重写来实现自定义的逻辑, 按约定: 也需要重写hashCode方法). equals方法通常用来比较对象的内容是否相等, equals方法要求满足自反, 对称和传递三个要求. (2)==是java提供的一个操作符. 用在基本类型用于比较值是否相等, 用在引用类型用于比较对象的地址是否相等. 3.请说明http中的forward和redirect的区别 题目不是合理. http并没有forward的概念. 而是由web服务器端实现的请求转发. (1)forward用于请求在服务器端的转发. 实现原理(以Java servlet为例)就是在Servlet A的service调用Servlet B的service方案. 在浏览器看来是一个请求. (2)redirect是利用服务端技术和http协议Response header实现的一种请求转发. 当请求A到达服务端时, 服务器会写回重定向响应. 其中包括 一个header: Location http://xxx.yyy.com/xx.htm, 此时code为302. 在浏览器接受到该请求后, 会重新向http://xxx.yyy.com/xx.htm发 起第二次请求. 优缺点: 很简单, 可以从刷新, 请求次数上, 是否在同一个Web应用中等方面作答. 4.线程的基本概念、线程的基本状态以及状态之间的关系 线程是在现代多核处理时代充分利用处理器提高性能的技术. 线程是进程调度的基本单位, 在一个进程中, 可以有多个线程同时运行.在linux利用轻量级进程实现 线程. 线程大致分为New, Runable, Run, Blocking, Exit. 转换关系, 很简单... 5.几种常用的数据结构及内部实现原理 数组, 链表, 队列, Stack, Hash表 数组: 多数情况是由语言自身提供. 数组是一遍连续由OS分配的一片连续的区域, 它最主要的特性是可以随机访问. 链表: 链表是由N(N>=0)节点通过指针链接的一种数据结构, 在实现上又可以细分为单链表, 双链表和循环链表. 链表非常适合添加和删除频繁的场景. 队列: 一种FIFO的数据结构, 可以通过数组或链表实现. Stack: 一种FILO的数据结构, 可以通过数组或链表实现. Hash表: 利用hash算法来实现快速查找的数据结构. 可以利用数组或者邻接表来实现. 在Java中, 是通过邻接表来实现的. 6.Socket通信(TCP、UDP区别及Java实现方式) Tcp: 面向链接的通信方式. 在实际通信之前, 双方通过"三步握手"建立链接.在通信完毕后, 由其中的一个或两方发起关闭链接的请求. TCP通过超时重试等技术来达到可靠性 的保证. UDP: 无连接的通信方式. 在传输数居前, 不需要建立链接. UDP在可靠性上不如TCP. 但是其传输效率比较高. Java在TCP, UDP都是通过JNI调用本地操作系统的TCP/IP方法来实现的. 7.多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 大前提: 在Java语言中. 多线程可以借助Thread类来实现. (1)可以继承Thread类重写run方法. (2)实现Runnable接口. 然后将Runnable接口子类的对象作为参数传递给Thread对象. (3)至于Callable, 据有Runnable类似的功能. 但是在线程池(ExecutorService的实现类)内部被适配成实现Runnable接口. 所以不能算作实现多线程的手段. (4)线程池不能算作多线程的实现方式, 仅仅是利用池化的技术到达Thread重新. 同步用来保证操作的原子性和可见性. 大致分为分为一下几种实现方式: (1) 利用Java语言提供的监视器技术. 也就是通过同步方法或同步块来实现. (2) 利用Java提供的CAS技术(本身依赖硬件的CAS指令)来实现的同步. Lock的子类, CountDownLatch等JDK5引入的并发类库, 都是依赖CAS来实现. 二者的区别: 在竞争比较小时, CAS在性能上比较占优势, 因为它在大部分情况下不会阻塞线程. 在竞争激烈的情况下, 监视器在性能上比较有优势. 因为避免了频繁的CAS操作. 在JDK中, 会根据实际运行情况做优化. |