﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-如何学好java-随笔分类-java面试题</title><link>http://www.blogjava.net/wshsdlau/category/51804.html</link><description>如何学好java，其实很简单，只要用心体会，慢慢积累！</description><language>zh-cn</language><lastBuildDate>Thu, 29 Nov 2012 01:49:27 GMT</lastBuildDate><pubDate>Thu, 29 Nov 2012 01:49:27 GMT</pubDate><ttl>60</ttl><item><title>不断完善的一道题永远在做着，答案也会一直在优化着！</title><link>http://www.blogjava.net/wshsdlau/archive/2012/11/20/391660.html</link><dc:creator>哈希</dc:creator><author>哈希</author><pubDate>Tue, 20 Nov 2012 12:02:00 GMT</pubDate><guid>http://www.blogjava.net/wshsdlau/archive/2012/11/20/391660.html</guid><wfw:comment>http://www.blogjava.net/wshsdlau/comments/391660.html</wfw:comment><comments>http://www.blogjava.net/wshsdlau/archive/2012/11/20/391660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshsdlau/comments/commentRss/391660.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshsdlau/services/trackbacks/391660.html</trackback:ping><description><![CDATA[<p>数列6，10，18，32，&#8220;？&#8221;，问&#8220;？&#8221;是几？ </p>
<p>&nbsp;&nbsp;1。什么是3G，2。3C 融合技术，3。对大唐的认识。<br />&nbsp;&nbsp;3G有三大制式,GSM升级后的WCDMA,CDMA升级后的CDMA2000,以及我国自主开发的TD-SCDMA。<br />&nbsp;&nbsp;第三代移动通信技术（3rd-generation，3G），是指支持高速数据传输的蜂窝移动通讯技术。3G服务能够同时传送声音及数据信息，速率一般在几百kbps以上。目前3G存在四种标准：CDMA2000，WCDMA，TD-SCDMA，WiMAX。<br />&nbsp;&nbsp;所谓&#8220;3C产品&#8221;，就是计算机（Computer）、通信（Communication）和消费类电子产品（ConsumerElectronics）三者结合，亦称&#8220;信息家电&#8221;。由于3C产品的体积一般都不大，所以往往在中间加一个&#8220;小&#8221;字，故往往统称为&#8220;3C小家电&#8221;。 <br />&nbsp;&nbsp;<br />&nbsp;&nbsp;3C指的是计算机（Computer)、通讯（Communication)和消费类电子产品（Consumer Electrics)。3C融合即利用数字信息技术激活其中任何一个环节，通过某种协议使3C的三个方面实现信息资源的共享和互联互通，从而满足人们在任何时间、任何地点通过信息关联应用来方便自己的生活。 无线宽带正是实现数字家庭3C融合的首要步骤。</p>
<p>&nbsp;&nbsp;第一部分:选择题<br />&nbsp;&nbsp;1.相同码元速率下,那种传输方式信息传输速率最高<br />&nbsp;&nbsp;QPSK 16QAM BPSK GMSK<br />&nbsp;&nbsp;2.下面哪些属于差错控制编码<br />&nbsp;&nbsp;3.自由空间传播环境下信号衰减与距离( )次方成比例<br />&nbsp;&nbsp;4.下列哪些功能属于网络管理的功能域5a880faf6f?应届生求职网YingJieSheng.COM?c350ade2a4<br />&nbsp;&nbsp;故障管理配置管理计费管理性能管理安全管理传输管理路由管理<br />&nbsp;&nbsp;5.采用CDMA技术通信系统,扰码的主要作用<br />&nbsp;&nbsp;信道估计信道区分信号白化同步<br />&nbsp;&nbsp;6.交织的主要作用<br />&nbsp;&nbsp;7.数据链路层的协议是<br />&nbsp;&nbsp;HDLC ARQ PPP ICMP RTP6fe97759aa?应届生求职网YingJieSheng.COM?b922cfa312<br />&nbsp;&nbsp;8.那种ATM协议最适合应用话音业务<br />&nbsp;&nbsp;AAL5 AAL4 AAL3 AAL2<br />&nbsp;&nbsp;第二部分:填空问答<br />&nbsp;&nbsp;1.香农公式表达式<br />&nbsp;&nbsp;2.爱尔兰含义<br />&nbsp;&nbsp;最大话务量和BHCA分别取决于什么5568161a8c?应届生求职网YingJieSheng.COM?d5792c152c<br />&nbsp;&nbsp;3.中继器,网桥.路由器,网关各是两个网络的哪层连接;路由器的功能是( )和( )<br />&nbsp;&nbsp;4.解释QPSK调制的原理<br />&nbsp;&nbsp;5.简述dB,dBm的概念<br />&nbsp;&nbsp;6.画出数字通信系统的模型,简述信源编码和信道编码的区别,及其它们在无线通信系统中的作用<br />&nbsp;&nbsp;7.C语言中能否在头文件中定义变量,并说明原因<br />&nbsp;&nbsp;8.在Windows系统,能否动态链接库中定义变量,如果可以定义说明有效范围4005f8da13?应届生求职网YingJieSheng.COM?60d149af1f<br />&nbsp;&nbsp;9.结构化程序设计中程序=<br />&nbsp;&nbsp;面向对象程序设计中程序=<br />&nbsp;&nbsp;10.解释return和exit的区别<br />&nbsp;&nbsp;11.ATM网络信元长度是( ),所有信息在最底层以( )的方式传送,以保持电路交换适合于传送实时性很强的业务特点.<br />&nbsp;&nbsp;12.什么是TDD,什么是FDD,多址方式又指什么?列出你所了解的多址方式<br />&nbsp;&nbsp;13.谈谈对OSI或计算机网络中&#8221;协议&#8221;&#8221;实体&#8221;&#8221;服务&#8221;的理解以及什么是SDU PDU和Primitive?8f07f89ddb?应届生求职网YingJieSheng.COM?4c20a920bf<br />&nbsp;&nbsp;14.GSM逻辑信道及分类<br />&nbsp;&nbsp;15.谈谈你对移动通信系统组成的理解.</p>
<p>&nbsp;</p>
<p><br />1.&nbsp;&nbsp;&nbsp; 描述一下public,protected,private,final关键字在Java中的用法?<br />&nbsp;&nbsp;public表示公共的，定义类的时候工程下任何包都可以读取到，protected是受保护的，只有在相同包内的类才能读取到，private定义方法时候只能在类内部才能读取到。final表示一个终态，是不可改变的。<br />2.&nbsp;&nbsp;&nbsp; Abstract class 和Interface 有什么区别?<br />&nbsp;&nbsp;抽象类和接口的区别如下：<br />&nbsp;&nbsp;（1、）抽象类是类，接口是接口；<br />&nbsp;&nbsp;（2、）抽象类只能继承一个，接口可以多实现；<br />&nbsp;&nbsp;（3、）抽象类定义一些静态变量可以，接口中不行；<br />3.&nbsp;&nbsp;&nbsp; Vector 和 ArrayList 有什么区别? HashTable 和 HashMap有什么区别?<br />&nbsp;&nbsp;vector 和 Arraylist都是继承自集合类collection，vector是链表的方式实现的，读取熟读快，添加数据时候慢，Arraylist里面添加数据慢读取数据快。<br />&nbsp;&nbsp;Hashtable和HashMap最大的区别是HashTable是同步的，HashMap是非同步的，所以性能上相对快一点，HashTable是继承自Dictionary类，而HashMap是继承自Map接口<br />4.&nbsp;&nbsp;&nbsp; Java集合中的Iterator起什么作用?<br />&nbsp;&nbsp;java集合中Iterator主要作用是去除重复；<br />5.&nbsp;&nbsp;&nbsp; Java中创建一个对象有哪几种方法,区别是什么?<br />&nbsp;&nbsp;java中创建对象可以实例化new<br />6.&nbsp;&nbsp;&nbsp; 多线程有几种表示方法,都是什么?同步有几种实现方法,都是什么?<br />&nbsp;&nbsp;多线程可以通过实现runable接口，也可以继承Thread类来实现。<br />&nbsp;&nbsp;实现同步也有两种,一种是用同步方法,一种是用同步块.. 同步方法就是在方法返回类型后面加上synchronized, 比如:<br />&nbsp;&nbsp;public void synchronized add(){...}<br />&nbsp;&nbsp;同步块就是直接写:synchronized (这里写需要同步的对象){...} <br />&nbsp;&nbsp;wait():使一个线程处于等待状态，并且释放所持有的对象的lock。<br />&nbsp;&nbsp;sleep():使一个正在运行的线程处于睡眠状态，是一个静态方法，调用此方法要捕捉InterruptedException异常。<br />&nbsp;&nbsp;notify():唤醒一个处于等待状态的线程，注意的是在调用此方法的时候，并不能确切的唤醒某一个等待状态的线程，而是由JVM确定唤醒哪个线程，而且不是按优先级。<br />&nbsp;&nbsp;Allnotity():唤醒所有处入等待状态的线程，注意并不是给所有唤醒线程一个对象的锁，而是让它们竞争。<br />7.&nbsp;&nbsp;&nbsp; 描述一下Java中的异常机制,什么是Checked Exception, Unchecked Exception?<br />&nbsp;&nbsp;java中的异常机制要求你对一些存在的问题进行实现的规划，并对相应的Exception的情况进行设定，当程序捕获类似的情况就会抛出异常，你可以定义异常的处理方法，异常并不是致命的，它与错误有着区别，错误只要发生程序就会终止，但是异常会继续执行下去。<br />&nbsp;&nbsp;java中的异常包括受检查的异常和不受检查的异常，（1、）受检查的异常：这种在编译时候被强制检查的异常被称作受检查异常，即在方法中声明的异常。（2、）不受检查的异常：在方法得声明中没有声明，但在方法的运行过程中发生的各种异常叫做不受检查的异常，这种异常是错误，会被自动捕获。一些规模较小的程序中，受检查的异常能够提高开发效率，但随着项目规模的扩大，过的的受检查的异常变得难以管理，其带来的好处也消失殆尽。<br />8.&nbsp;&nbsp;&nbsp; 描述一下Java ClassLoader 或者 J2EE ClassLoader的工作原理?(可以画图)<br />&nbsp;&nbsp;当运行程序是首先运行java虚拟机（JVM），然后把java class加载到JVM里运行，负责加载java class的这部分就叫做java ClsssLoader，<br />&nbsp;&nbsp;JVM本身包含一个ClassLoader成为bootstrap ClassLoader,和JVM一样，BootstrapClassLoader使用本地代码实现的，它负责加载核心javaClass（即所有java.*开头的类）。另外JVM还提供两个ClassLoader，他们都是用java语言实现的，都是由BootstrapClassLoader负责加载，其中Extention ClassLoader负责加载扩展的javaclass（例如所有以javax.*开头的类和存放在JRE的ext目录下的类），ApplicationClassLoader负责加载应用程序自身的类。<br />&nbsp;&nbsp;当运行一个程序的时候，JVM启动，运行Bootstrapclassloader，该classloader加载核心API（ExtClassloader和AppClassloader也在此时被加载），然后调用Extclassloader加载扩展API，最后AppClassloader加载CLASSPATH目录下定义的Class，这就是一个程序最基本的加载流程。</p>
<p>9.&nbsp;&nbsp;&nbsp; MVC的各个部分都有那些技术来实现?如何实现?<br />&nbsp;&nbsp;MVC主要包括模型层，视图层，控制层。<br />&nbsp;&nbsp;模型层主要由javabean实现，视图层是由jsp实现，控制层主要由servlet实现。<br />10.&nbsp;&nbsp;&nbsp; 描述一下Struts的工作方式?<br />&nbsp;&nbsp;struts1.2的工作方式主要是MVC实现，struts2是拦截器的方式实现。<br />11.&nbsp;&nbsp;&nbsp; JSP中包含哪几个内置对象?<br />&nbsp;&nbsp;jsp包括九个内置对象，分别为：request，response，session，cookie，out，application，pageRequest,Exception，<br />12.&nbsp;&nbsp;&nbsp; JSP中两种跳转方式分别是什么?有什么区别?<br />&nbsp;&nbsp;jsp两种跳转方式是重定向和页面跳转，其中重定向方式执行，form表单提交数据会失去，网络地址会变化，页面跳转不会；<br />13.&nbsp;&nbsp;&nbsp; 描述一下JSP中taglib的用法?<br />&nbsp;&nbsp;jsp中标签可以使java代码嵌入到页面上使用<br />14.&nbsp;&nbsp;&nbsp; Javascript中如何校验数字型?<br />&nbsp;&nbsp;正则表达式<br />15.&nbsp;&nbsp;&nbsp; EJB2.0中包括哪些内容? 作用分别是什么?<br />&nbsp;&nbsp;EJB2.0<br />16.&nbsp;&nbsp;&nbsp; 一个SessionBean包含哪几个组件?各个组件作用是什么?<br />&nbsp;&nbsp;<br />17.&nbsp;&nbsp;&nbsp; 描述一下一个EJB应用中EJB部署文件,以及你所熟悉的App Server的部署文件的作用?<br />&nbsp;&nbsp;&nbsp;<br />18.&nbsp;&nbsp;&nbsp; 列举一下你所知道的设计模式(包括EJB,J2EE的设计模式),以及他们应用的场合?<br />&nbsp;&nbsp;代理模式：把一个对象注入到一个类中通过这个注入的对象来完成一系列方法，<br />&nbsp;&nbsp;工厂模式：一个接口下的所有类的实例可以通过专门的工厂类通过传递不同的参数来实现；<br />&nbsp;&nbsp;Adapter（适配器）模式：将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式的用意是将接口不同而功能相同或者相近的两个接口加以转换。<br />&nbsp;&nbsp;单例模式：单例模式有两种：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 饿汉模式<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public class Singleton<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private Singleton();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; priavate static Singleton singleton = new Singleton();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public staic Singleton getInstance()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return instance;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 懒汉模式：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public class Singleton<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static Singleton singleton = new Singleton();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static synchronize Singleton()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(instance == null)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instance = new singleton();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return instance;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />19.&nbsp;&nbsp;&nbsp; 解析XML主要方法有哪些? 各有什么区别?<br />&nbsp;&nbsp;1、xml有哪些解析技术?区别是什么?</p>
<p>2、你在项目中用到了xml技术的哪些方面?如何实现的?</p>
<p>3、用jdom解析xml文件时如何解决中文问题?如何解析?</p>
<p>4、编程用JAVA解析XML的方式.</p>
<p>1、xml有哪些解析技术?区别是什么?<br />&nbsp;&nbsp;解析XMl方法主要方法有文件流读取，页面XMLHttp读取。<br />&nbsp;&nbsp;DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的，这种结构占用的内存较多，而且dom必须在解析文件之前把整个文档装入内存<br />&nbsp;&nbsp;SAX：适合对XML文件的随机访问，不像DOM，SAX是事件驱动型的XML解析方式。它顺序读取XML文件，不需要一次全部装载整个文件。<br />&nbsp;&nbsp;StAX：当遇到像文件开头，文档结束，或者标签开头与标签结束时，它会触发一个事件，用户通过在其回调事件中写入处理代码来处理XML文件，适合对XML的顺序访问STAX:Streaming API for XML (StAX)<br />&nbsp;&nbsp;2、主要用到了信息存储信息配置两方面，在做数据交换平台时，将不能用数据源的数据组装成xml文件，然后将xml文件压缩打包加密后发给接收者，接受解密解压缩后再同xml文件中还原相关信息进行处理。在做软件配置时候，利用xml文件可以方便的进行，软件的各种配置都存储在xml文件中。<br />&nbsp;&nbsp;3、<br />20.&nbsp;&nbsp;&nbsp; 您了解Open Source的项目吗? 如果了解请描述几个,并讲述一下他们的作用?<br />&nbsp;&nbsp;apchetomcat就是一个比较好的开源项目，主要作为服务器来使用。<br />&nbsp;&nbsp;struts是一个主要用于作为控制层的开源框架项目，<br />&nbsp;&nbsp;spring是一个轻量级的开源项目，通过控制反转和代理模式实现<br />&nbsp;&nbsp;Hibernate是个持久层框架，用来建立与数据库的持久层<br />21.&nbsp;&nbsp;&nbsp; 您看过哪些JAVA方面的书籍,能列举一下吗?<br />&nbsp;&nbsp;think in java ，core java，jquery in action， struts，spring ，hibernate等等方面的书都有涉猎。</p><img src ="http://www.blogjava.net/wshsdlau/aggbug/391660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshsdlau/" target="_blank">哈希</a> 2012-11-20 20:02 <a href="http://www.blogjava.net/wshsdlau/archive/2012/11/20/391660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>阿里巴巴面试题以及答案</title><link>http://www.blogjava.net/wshsdlau/archive/2011/05/10/379162.html</link><dc:creator>哈希</dc:creator><author>哈希</author><pubDate>Tue, 10 May 2011 09:31:00 GMT</pubDate><guid>http://www.blogjava.net/wshsdlau/archive/2011/05/10/379162.html</guid><wfw:comment>http://www.blogjava.net/wshsdlau/comments/379162.html</wfw:comment><comments>http://www.blogjava.net/wshsdlau/archive/2011/05/10/379162.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshsdlau/comments/commentRss/379162.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshsdlau/services/trackbacks/379162.html</trackback:ping><description><![CDATA[一、String,StringBuffer, StringBuilder 的区别是什么？String为什么是不可变的？<br />
二、VECTOR,ARRAYLIST, LINKEDLIST的区别是什么？<br />
三、HASHTABLE, HASGMAQ，TreeMap区别<br />
四、ConcurrentMap和HashMap的区别<br />
五、Tomcat，apache，jboss的区别<br />
六、GET POST区别<br />
七、SESSION, COOKIE区别<br />
八、Servlet的生命周期<br />
九、HTTP 报文包含内容<br />
十、Statement与PreparedStatement的区别,什么是SQL注入，如何防止SQL注入<br />
十一、redirect, foward区别<br />
十二、关于JAVA内存模型，一个对象（两个属性，四个方法）实例化100次，现在内存中的存储状态，<br />
几个对象，几个属性，几个方法。<br />
十三、谈谈Hibernate的理解，一级和二级缓存的作用，在项目中Hibernate都是怎么使用缓存的<br />
十四、反射讲一讲，主要是概念,都在哪需要反射机制，反射的性能，如何优化<br />
十五、谈谈Hibernate与Ibatis的区别，哪个性能会更高一些<br />
十六、对Spring的理解，项目中都用什么？怎么用的？对IOC、和AOP的理解及实现原理<br />
十七、线程同步，并发操作怎么控制<br />
十八、描述struts的工作流程。<br />
十九、Tomcat的session处理，如果让你实现一个tomcatserver，如何实现session机制<br />
二十、关于Cache(Ehcache,Memcached)<br />
二一、sql的优化相关问题<br />
二二、oracle中 rownum与rowid的理解，一千条记录我查200到300的记录怎么查？<br />
二三、如何分析ORACLE的执行计划？<br />
二四、 DB中索引原理，种类，使用索引的好处和问题是什么？<br />
二五、JVM垃圾回收实现原理。垃圾回收的线程优先级。<br />
二六、jvm 最大内存设置。设置的原理。结合垃圾回收讲讲。<br />
<br />
<br />
1、了解j2EE规范，选择几点进行重点消化。<br />
2、异常分类，一般性异常和运行期异常，异常捕获。<br />
3、了解spring mvc框架，和struts mvc框架的区别。<br />
4、要对spring和ibatis非常熟悉，必须，熟知。<br />
5、应适当关注需求分析和产品方面的知识。<br />
6、了解多线程相关知识<br />
7、了解java5以及java6新特性<br />
8、熟悉linux相关命令操作。<br />
9、工厂模式，简单工厂、抽象工厂的区别<br />
10、动态代理模式<br />
11、<br />
<br />
一、String,StringBuffer, StringBuilder 的区别是什么？String为什么是不可变的？ <br />
二、VECTOR,ARRAYLIST, LINKEDLIST的区别是什么？ <br />
三、HASHTABLE, HASGMAQ，TreeMap区别 <br />
四、ConcurrentMap和HashMap的区别<br />
五、Tomcat，apache，jboss的区别 <br />
六、GET POST区别 <br />
七、SESSION, COOKIE区别 <br />
八、Servlet的生命周期 <br />
九、HTTP 报文包含内容 <br />
十、Statement与PreparedStatement的区别,什么是SQL注入，如何防止SQL注入 <br />
十一、redirect, foward区别 <br />
十二、关于JAVA内存模型，一个对象（两个属性，四个方法）实例化100次，现在内存中的存储状态， <br />
几个对象，几个属性，几个方法。 <br />
十三、谈谈Hibernate的理解，一级和二级缓存的作用，在项目中Hibernate都是怎么使用缓存的 <br />
十四、反射讲一讲，主要是概念,都在哪需要反射机制，反射的性能，如何优化 <br />
十五、谈谈Hibernate与Ibatis的区别，哪个性能会更高一些 <br />
十六、对Spring的理解，项目中都用什么？怎么用的？对IOC、和AOP的理解及实现原理 <br />
十七、线程同步，并发操作怎么控制 <br />
十八、描述struts的工作流程。 <br />
十九、Tomcat的session处理，如果让你实现一个tomcatserver，如何实现session机制 <br />
二十、关于Cache(Ehcache,Memcached) <br />
二一、sql的优化相关问题 <br />
二二、oracle中 rownum与rowid的理解，一千条记录我查200到300的记录怎么查？ <br />
二三、如何分析ORACLE的执行计划？ <br />
二四、 DB中索引原理，种类，使用索引的好处和问题是什么？ <br />
二五、JVM垃圾回收实现原理。垃圾回收的线程优先级。 <br />
二六、jvm 最大内存设置。设置的原理。结合垃圾回收讲讲。<br />
<br />
<br />
广州java开发工程师，昨天下午1，2面，今天3，4面，感觉效率挺高的，就等通知了<br />
简单说一下流程吧<br />
&nbsp; 1面，一个挺帅气的面试官，不断地问一个算法题，一个基础知识问题，一个项目问题，循环地进行，<br />
一共5，6轮吧，中间还问了一题情景题，大概一个小时，算法题不难，比如找出乱序数组中的相同元素，整数求二进制的1的个数等，<br />
感觉考的是你写程序的习惯和思维是否周密，基础题就是jdk，gc，jvm之类的问题，考的很细。最后的问题是内存里一个hashmap<br />
和一个文本里的内容同步的实现方法，当时答不上来，面试就结束了，后来回学校才想到一个方法。<br />
&nbsp; 2面，两个男的面试官轮流问我问题，同样是问技术的，spring里一些核心原理，jdk1.5的新类库，分布式系统，数据库，linux（这个不懂...）等等，<br />
感觉是车轮战，看你的知识广度和反应力....<br />
&nbsp; 3面， 产品经理的面试，更多的是针对我项目里的问题提问，会问深入的问题，比如spring的aop是如何用java实现的....<br />
&nbsp; 4面，hr面，比较轻松吧，拉拉家常，随便谈谈，问问我的西装，身高之类的<br />
<br />
感觉我自己尽力了，会的都答上，现在就看淘宝发不发offer给我了，后来还去了阿里巴巴b2b面试，考的内容基本差不多，而且更注重你是如何学习的<br />
一直觉得java的面经很少，希望这可以帮到大家<br />
 <img src ="http://www.blogjava.net/wshsdlau/aggbug/379162.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshsdlau/" target="_blank">哈希</a> 2011-05-10 17:31 <a href="http://www.blogjava.net/wshsdlau/archive/2011/05/10/379162.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库面试知识</title><link>http://www.blogjava.net/wshsdlau/archive/2011/05/08/379163.html</link><dc:creator>哈希</dc:creator><author>哈希</author><pubDate>Sun, 08 May 2011 00:28:00 GMT</pubDate><guid>http://www.blogjava.net/wshsdlau/archive/2011/05/08/379163.html</guid><wfw:comment>http://www.blogjava.net/wshsdlau/comments/379163.html</wfw:comment><comments>http://www.blogjava.net/wshsdlau/archive/2011/05/08/379163.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshsdlau/comments/commentRss/379163.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshsdlau/services/trackbacks/379163.html</trackback:ping><description><![CDATA[1．触发器的作用？<br />
&nbsp;答：触发器是一中特殊的存储过程，主要是通过事件来触发而被执行的。它可以强化约束，来维护数据的完整性和一致性，可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如，某表上的触发器上包含对另一个表的数据操作，而该操作又会导致该表触发器被触发。<br />
2。什么是存储过程？用什么来调用？<br />
答：存储过程是一个预编译的SQL语句，优点是允许模块化的设计，就是说只需创建一次，以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL，使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。<br />
3。索引的作用？和它的优点缺点是什么？<br />
答：索引就一种特殊的查询表，数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录，不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的，创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度，同时也增加了数据库的尺寸大小。<br />
3。什么是内存泄漏？<br />
答：一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的，大小任意的，使用完后要显示释放内存。当应用程序用关键字new等创建对象时，就从堆中为它分配一块内存，使用完后程序调用free或者delete释放该内存，否则就说该内存就不能被使用，我们就说该内存被泄漏了。<br />
4。维护数据库的完整性和一致性，你喜欢用触发器还是自写业务逻辑？为什么？<br />
答：我是这样做的，尽可能使用约束，如check,主键，外键，非空字段等来约束，这样做效率最高，也最方便。其次是使用触发器，这种方法可以保证，无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑，但这样做麻烦，编程复杂，效率低下。<br />
5。什么是事务？什么是锁？<br />
答：事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组，如果任何一个语句操作失败那么整个操作就被失败，以后操作就会回滚到操作前状态，或者是上有个节点。为了确保要么执行，要么不执行，就可以使用事务。要将有组语句作为事务考虑，就需要通过ACID测试，即原子性，一致性，隔离性和持久性。<br />
&nbsp;锁：在所以的DBMS中，锁是实现事务的关键，锁可以保证事务的完整性和并发性。与现实生活中锁一样，它可以使某些数据的拥有者，在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。<br />
6。什么叫视图？游标是什么？<br />
答：视图是一种虚拟的表，具有和物理表相同的功能。可以对视图进行增，改，查，操作，试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易，相比多表查询。<br />
&nbsp;游标：是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行，从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标，但是需要逐条处理数据的时候，游标显得十分重要。<br />
7。为管理业务培训信息，建立3个表：<br />
<br />
&nbsp;&nbsp;&nbsp; S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号，学员姓名，所属单位，学员年龄<br />
<br />
&nbsp;&nbsp;&nbsp; C(C#,CN)C#,CN分别代表课程编号，课程名称<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; SC(S#,C#,G) S#,C#,G分别代表学号，所选的课程编号，学习成绩<br />
<br />
&nbsp;&nbsp; （1）使用标准SQL嵌套语句查询选修课程名称为&#8217;税收基础&#8217;的学员学号和姓名?<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 答案：select s# ,sn from s where S# in(select S# from c,sc where c.c#=sc.c# and cn=&#8217;税收基础&#8217;)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; (2) 使用标准SQL嵌套语句查询选修课程编号为&#8217;C2&#8217;的学员姓名和所属单位?<br />
<br />
答：select sn,sd from s,sc where s.s#=sc.s# and sc.c#=&#8217;c2&#8217;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; (3) 使用标准SQL嵌套语句查询不选修课程编号为&#8217;C5&#8217;的学员姓名和所属单位?<br />
<br />
答：select sn,sd from s where s# not in(select s# from sc where c#=&#8217;c5&#8217;)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (4)查询选修了课程的学员人数<br />
<br />
答：select 学员人数=count(distinct s#) from sc<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (5) 查询选修课程超过5门的学员学号和所属单位?<br />
<br />
答：select sn,sd from s where s# in(select s# from sc group by s# having count(distinct c#)&gt;5)<br />
<br />
<br />
 <img src ="http://www.blogjava.net/wshsdlau/aggbug/379163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshsdlau/" target="_blank">哈希</a> 2011-05-08 08:28 <a href="http://www.blogjava.net/wshsdlau/archive/2011/05/08/379163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自己理解OOP</title><link>http://www.blogjava.net/wshsdlau/archive/2011/04/29/379175.html</link><dc:creator>哈希</dc:creator><author>哈希</author><pubDate>Fri, 29 Apr 2011 03:32:00 GMT</pubDate><guid>http://www.blogjava.net/wshsdlau/archive/2011/04/29/379175.html</guid><wfw:comment>http://www.blogjava.net/wshsdlau/comments/379175.html</wfw:comment><comments>http://www.blogjava.net/wshsdlau/archive/2011/04/29/379175.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshsdlau/comments/commentRss/379175.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshsdlau/services/trackbacks/379175.html</trackback:ping><description><![CDATA[一、oop唯一关心的是接口是什么，就像就像汽车销售商不需要管他是怎么制造的，只要关心他能不能燃烧燃料开动起来，只要知道（can or not）不要关心(how and&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; why)：<br />
<span style="color: red;">1、多态性：<span style="color: #606aff;">（java对象多态，java中不支持多重继承）</span></span><br />
&nbsp;&nbsp;&nbsp;&nbsp; 允许不同类的对象最统一消息做出响应。多态性包括参数化多态和包含性多态性，多态性语言具有灵活抽象，行为共享的优势，很好解决了应用函数同名问题.<br />
<span style="color: red;">2、封装：</span>（隐藏细节）<br />
&nbsp;&nbsp; &nbsp; 就是把把数据和行为结合在一起，并对对象使用者隐藏隐藏数据的实现过程，一个对象中的数据称为它的实例字段（instance）；<br />
<span style="color: red;">3、继承：</span><span style="color: #606aff;">（扩展一个类）</span><br />
&nbsp;&nbsp;&nbsp; 允许在已经存在的类上构建新的类，当你继承一个已经存在的类时候那么你就 复用了这个类的方法和字段，同时你可以在新类中添加心得方法和字段；<br />
<span style="color: red;">？4、clas<span style="color: red;"><span style="color: red;">s</span>类</span></span><span style="color: #606aff;">（oop最重要的思想，类中构建一个对象，即创建这个类的一个实例）</span><br />
&nbsp;&nbsp;&nbsp; 为编写可动态操纵java代码的程序提供了强大的功能反射，这项功能为javaBeans特别所有，能够分析类能力的程序角反射器，java中提供的功能包叫java.lang.reflect反射机制十分强大。<br />
<span style="color: red;">5、接口：</span>（不是一个类，对符合接口要求的类的一套规范）<br />
&nbsp;&nbsp;&nbsp; 实现接口两个步骤：1、声明类需要实现的指定接口；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、提供接口中所有接口的定义；<br />
&nbsp;&nbsp;&nbsp; 接口是一个收集方法和常数的契约，当类执行一个接口，他就许诺在那个接口中声明的所有方法。接口是一个设备或者一个系统，它是用于交互的无关实体。根据这个定义，远程控制是一个你和电视的接口，而英语是两个人之间的接口。在java语言中接口是一种设备，它是用来与其他对象交互的设备。一个接口可能对一个协议是类似的，实际上其他语言也有接口，但是它们调用它的接口协议。<br />
<span style="color: #ff0000;">6、动态绑定<span style="color: #4328ff;"><span style="color: #ff0000;"><span style="color: #4328ff;"><span style="color: #ff0000;"><span style="color: #4328ff;"><span style="color: #ff0000;">（<span style="color: #4328ff;">调用对象方法的机制</span>）</span></span></span></span></span></span></span><br />
&nbsp;&nbsp;&nbsp; (1)编译器检查对象声明的类型和方法名；（2）编译器检查方法调用的参数类型；(3)静态绑定：若方法类型为private static final编译器会准确知道调用哪个方法；（4）程序需要调动一个方法时，那么虚拟机必须调用参数所指向的对象的实际类型相匹配的方法。<br />
<span style="color: #ff0000;">7、构造器（特殊的方法，构造对象并将其初始化）</span><br />
&nbsp;&nbsp; 构造器可以有0个，一个或多个，构造器和类有相同的名字，一个类可以右多个构造器，构造器没有返回值，构造器总是和new字符一起运行的。<br />
<span style="color: #ff0000;">8、final类（系统级的类，不可扩展）</span><br />
&nbsp;&nbsp; 防止派生新类<br />
9、equal（判断两个对象是否相等）<br />
10、toString（）返回一个代表该对象的字符串，几乎每一个类都会重载该方法，返回当前状态的正确表示；<br />
11、通用编程：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 任何类型的所有值都可以都可以用Object类型的变量来代替；<br />
12、内部类：（定义在一个类的内部的类）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、一个内部类的对象能够访问创建它的对象的实现，包括私有数据；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、对于同一个包中的类，呢不累可以隐藏起来；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、匿名内部类可以很方便的进行回调；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、使用内部类可以很方便的编写事件驱动程序；<br />
13、代理类：（proxy）<br />
&nbsp;&nbsp;&nbsp;&nbsp; A、指定接口要求所有代码；<br />
&nbsp;&nbsp;&nbsp;&nbsp; B、Object类定义的所有方法（equals，toString（））；<br />
<br />
&nbsp;&nbsp; <br />
<br />
<br />
 <img src ="http://www.blogjava.net/wshsdlau/aggbug/379175.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshsdlau/" target="_blank">哈希</a> 2011-04-29 11:32 <a href="http://www.blogjava.net/wshsdlau/archive/2011/04/29/379175.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面试题目</title><link>http://www.blogjava.net/wshsdlau/archive/2011/04/28/379176.html</link><dc:creator>哈希</dc:creator><author>哈希</author><pubDate>Thu, 28 Apr 2011 10:02:00 GMT</pubDate><guid>http://www.blogjava.net/wshsdlau/archive/2011/04/28/379176.html</guid><wfw:comment>http://www.blogjava.net/wshsdlau/comments/379176.html</wfw:comment><comments>http://www.blogjava.net/wshsdlau/archive/2011/04/28/379176.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshsdlau/comments/commentRss/379176.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshsdlau/services/trackbacks/379176.html</trackback:ping><description><![CDATA[<div class="index_main_left_1_top">
<div class="index_main_left_1_top2">
<p>Java基础面试题系列一</p>
</div>
<div class="index_main_left_1_top3">
<p>dev.firnow.com&nbsp;&nbsp;&nbsp;&nbsp;时间&nbsp;：&nbsp;2008-02-19&nbsp;&nbsp;作者：佚名 &nbsp;&nbsp;编辑：本站 点击：&nbsp;&nbsp;<span id="articleTimes">1796</span> <a href="http://dev.firnow.com/course/3_program/java/javaxl/2008219/100263.html#comment" style="color:#F55308;">[&nbsp;评论&nbsp;]</a></p>
</div>
</div>
<div class="ad4">
</div>
<div class="ad5">
</div>
<p><strong><font face="Courier New" size="3">1、作用域public,private,protected,以及不写时的区别<br />
</font></strong><font face="Courier New"><font size="3"><strong>答：</strong>区别如下：<br />
作用域&nbsp;&nbsp;&nbsp; 当前类&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同一package&nbsp;&nbsp;&nbsp; 子孙类&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其他package<br />
public&nbsp;&nbsp;&nbsp;&nbsp; &#8730;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8730;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8730;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8730;<br />
protected&nbsp;&nbsp;&#8730;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8730;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8730;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#215;<br />
friendly&nbsp;&nbsp;&nbsp;&#8730;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8730;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#215;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#215;<br />
private&nbsp;&nbsp;&nbsp;&nbsp;&#8730;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#215;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#215;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#215;<br />
不写时默认为friendly<br />
<br />
</font></font></p>
<br />
<font face="Courier New"><font size="3"><strong>2</strong><strong>、</strong><strong>Anonymous Inner Class (</strong><strong>匿名内部类</strong><strong>) </strong><strong>是否可以</strong><strong>extends(</strong><strong>继承</strong><strong>)</strong><strong>其它类，是否可以</strong><strong>implements(</strong><strong>实现</strong><strong>)interface(</strong><strong>接口</strong></font></font><font face="Courier New"><font size="3"><strong>)<br />
</strong><strong>答：</strong>匿名的内部类是没有名字的内部类。不能extends(继承) 其它类，但一个内部类可以作为一个接口，由另一个内部类实现</font></font><strong><br />
<br />
</strong><br />
<font face="Courier New"><font size="3"><strong>3</strong><strong>、</strong><strong>Static Nested Class </strong><strong>和</strong><strong> Inner Class</strong><strong>的不同</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答：</strong>Nested
Class （一般是C++的说法），Inner Class
(一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注： 静态内部类（Inner
Class）意味着1创建一个static内部类的对象，不需要一个外部类对象，2不能从一个static内部类的一个对象访问一个外部类对象</font></font><strong><br />
<br />
</strong><br />
<font face="Courier New"><font size="3"><strong>4</strong><strong>、</strong><strong>&amp;</strong><strong>和</strong><strong>&amp;&amp;</strong><strong>的区别</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答：</strong>&amp;是位运算符，表示按位与运算，&amp;&amp;是逻辑运算符，表示逻辑与（and）</font></font><strong><br />
<br />
</strong><br />
<font face="Courier New"><font size="3"><strong>5</strong><strong>、</strong><strong>Collection </strong><strong>和</strong><strong> Collections</strong><strong>的区别</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答：</strong>Collection是集合类的上级接口，继承与他的接口主要有Set&nbsp;和List.<br />
Collections是针对集合类的一个帮助类，他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作<br />
<br />
</font></font><br />
<font face="Courier New"><font size="3"><strong>6</strong><strong>、什么时候用</strong></font></font><font face="Courier New"><font size="3"><strong>assert<br />
</strong><strong>答：</strong>assertion(断
言)在软件开发中是一种常用的调试方式，很多开发语言中都支持这种机制。在实现中，assertion就是在程序中的一条语句，它对一个boolean表
达式进行检查，一个正确程序必须保证这个boolean表达式的值为true；如果该值为false，说明程序已经处于不正确的状态下，系统将给出警告或
退出。一般来说，assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能，在软件发布
后，assertion检查通常是关闭的</font></font><strong><br />
<br />
</strong><br />
<font face="Courier New"><font size="3"><strong>7</strong><strong>、</strong><strong>String s = new String("xyz");</strong><strong>创建了几个</strong></font></font><font face="Courier New"><font size="3"><strong>String Object<br />
</strong><strong>答：</strong>两个，一个字符对象，一个字符对象引用对象</font></font><strong><br />
<br />
</strong><br />
<font face="Courier New"><font size="3"><strong>8</strong><strong>、</strong><strong>Math.round(11.5)</strong><strong>等於多少</strong><strong>? Math.round(-11.5)</strong><strong>等於多少</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答</strong><strong>:</strong> &nbsp;Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回与参数最接近的长整数，参数加1/2后求其floor</font></font><strong><br />
<br />
</strong><br />
<font face="Courier New"><font size="3"><strong>9</strong><strong>、</strong><strong>short s1 = 1; s1 = s1 + 1;</strong><strong>有什么错</strong><strong>? short s1 = 1; s1 += 1;</strong><strong>有什么错</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答：</strong>short&nbsp;s1&nbsp;=&nbsp;1;&nbsp;s1&nbsp;=&nbsp;s1&nbsp;+&nbsp;1;&nbsp;（s1+1运算结果是int型，需要强制转换类型）short&nbsp;s1&nbsp;=&nbsp;1;&nbsp;s1&nbsp;+=&nbsp;1;（可以正确编译）</font></font><strong><br />
<br />
</strong><br />
<font face="Courier New"><font size="3"><strong>10</strong><strong>、</strong><strong>Java</strong><strong>有没有</strong></font></font><font face="Courier New"><font size="3"><strong>goto<br />
</strong><strong>答：</strong>java中的保留字，现在没有在java中使用</font></font><strong><br />
<br />
</strong><br />
<font face="Courier New"><font size="3"><strong>11</strong><strong>、数组有没有</strong><strong>length()</strong><strong>这个方法</strong><strong>? String</strong><strong>有没有</strong><strong>length()</strong><strong>这个方法</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答：</strong>数组没有length()这个方法，有length的属性。String有有length()这个方法</font></font><strong><br />
<br />
</strong><br />
<font face="Courier New"><font size="3"><strong>12</strong><strong>、</strong><strong>Overload</strong><strong>和</strong><strong>Override</strong><strong>的区别。</strong><strong>Overloaded</strong><strong>的方法是否可以改变返回值的类型</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答：</strong>方
法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现，重
载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数，我们说该方法被重
写&nbsp;(Overriding)。子类的对象使用这个方法时，将调用子类中的定义，对它而言，父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名
的方法，它们或有不同的参数个数或有不同的参数类型，则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型</font></font><strong><br />
<br />
</strong><br />
<font face="Courier New"><font size="3"><strong>13</strong><strong>、</strong><strong>Set</strong><strong>里的元素是不能重复的，那么用什么方法来区分重复与否呢</strong><strong>? </strong><strong>是用</strong><strong>==</strong><strong>还是</strong><strong>equals()? </strong><strong>它们有何区别</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答：</strong>Set里的元素是不能重复的，那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等<br />
&nbsp;&nbsp;&nbsp;&nbsp;equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖，为的是当两个分离的对象的内容和类型相配的话，返回真值</font></font><strong><br />
<br />
</strong><br />
<font face="Courier New"><font size="3"><strong>14</strong><strong>、给我一个你最常见到的</strong></font></font><font face="Courier New"><font size="3"><strong>runtime exception<br />
</strong><strong>答：</strong>常
见的运行时异常有如下这些
ArithmeticException,&nbsp;ArrayStoreException,&nbsp;BufferOverflowException,&nbsp;BufferUnderflowException,&nbsp;CannotRedoException,&nbsp;CannotUndoException,&nbsp;ClassCastException,&nbsp;CMMException,&nbsp;ConcurrentModificationException,&nbsp;DOMException,&nbsp;EmptyStackException,&nbsp;IllegalArgumentException,&nbsp;IllegalMonitorStateException,&nbsp;IllegalPathStateException,&nbsp;IllegalStateException,&nbsp;ImagingOpException,&nbsp;IndexOutOfBoundsException,&nbsp;MissingResourceException,&nbsp;NegativeArraySizeException,&nbsp;NoSuchElementException,&nbsp;NullPointerException,&nbsp;ProfileDataException,&nbsp;ProviderException,&nbsp;RasterFormatException,&nbsp;SecurityException,&nbsp;SystemException,&nbsp;UndeclaredThrowableException,&nbsp;UnmodifiableSetException,&nbsp;UnsupportedOperationException</font></font><strong><br />
<br />
</strong><br />
<font face="Courier New"><font size="3"><strong>15</strong><strong>、</strong><strong>error</strong><strong>和</strong><strong>exception</strong><strong>有什么区别</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答：</strong>error&nbsp;表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况<br />
&nbsp;&nbsp;&nbsp;&nbsp;exception&nbsp;表示一种设计或实现问题。也就是说，它表示如果程序运行正常，从不会发生的情况</font></font><strong><br />
<br />
</strong><br />
<font face="Courier New"><font size="3"><strong>16</strong><strong>、</strong><strong>List, Set, Map</strong><strong>是否继承自</strong><strong>Collection</strong><strong>接口</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答：</strong>&nbsp;List，Set是，Map不是</font></font><strong><br />
<br />
</strong><br />
<font face="Courier New"><font size="3"><strong>17</strong><strong>、</strong><strong>abstract class</strong><strong>和</strong><strong>interface</strong><strong>有什么区别</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答：</strong>声
明方法的存在而不去实现它的类被叫做抽象类（abstract&nbsp;class），它用于要创建一个体现某些基本行为的类，并为该类声明方法，但不能在该类中
实现该类的情况。不能创建abstract&nbsp;类的实例。然而可以创建一个变量，其类型是一个抽象类，并让它指向具体子类的一个实例。不能有抽象构造函数或
抽象静态方法。Abstract&nbsp;类的子类为它们父类中的所有抽象方法提供实现，否则它们也是抽象类为。取而代之，在子类中实现该方法。知道其行为的其它
类可以在类中实现这些方法<br />
接口（interface）是抽象类的变体。在接口中，所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口
中的所有方法都是抽象的，没有一个有程序体。接口只可以定义static&nbsp;final成员变量。接口的实现与子类相似，除了该实现类不能从接口定义中继承
行为。当类实现特殊接口时，它定义（即将程序体给予）所有这种接口的方法。然后，它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类，它
允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换，instanceof&nbsp;运算符可以用来决定某对象的
类是否实现了接口</font></font><strong><br />
<br />
</strong><br />
<font face="Courier New"><font size="3"><strong>18</strong><strong>、</strong><strong>abstract</strong><strong>的</strong><strong>method</strong><strong>是否可同时是</strong><strong>static,</strong><strong>是否可同时是</strong><strong>native</strong><strong>，是否可同时是</strong></font></font><font face="Courier New"><font size="3"><strong>synchronized<br />
</strong><strong>答</strong><strong>：</strong>都不能<strong> </strong></font></font><br />
<strong></strong>&nbsp;<br />
<font face="Courier New"><font size="3"><strong>19</strong><strong>、接口是否可继承接口</strong><strong>? </strong><strong>抽象类是否可实现</strong><strong>(implements)</strong><strong>接口</strong><strong>? </strong><strong>抽象类是否可继承实体类</strong></font></font><font face="Courier New"><font size="3"><strong>(concrete class)<br />
</strong><strong>答：</strong>接口可以继承接口。抽象类可以实现(implements)接口，抽象类是否可继承实体类，但前提是实体类必须有明确的构造函数<br />
<br />
</font></font><br />
<font face="Courier New"><font size="3"><strong>20</strong><strong>、构造器</strong><strong>Constructor</strong><strong>是否可被</strong></font></font><font face="Courier New"><font size="3"><strong>override<br />
</strong><strong>答：</strong>构造器Constructor不能被继承，因此不能重写Overriding，但可以被重载Overloading<br />
<br />
</font></font><br />
<font face="Courier New"><font size="3"><strong>21</strong><strong>、是否可以继承</strong><strong>String</strong><strong>类</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答：</strong>String类是final类故不可以继承<br />
<br />
</font></font><br />
<font face="Courier New"><font size="3"><strong>22</strong><strong>、</strong><strong>try {}</strong><strong>里有一个</strong><strong>return</strong><strong>语句，那么紧跟在这个</strong><strong>try</strong><strong>后的</strong><strong>finally {}</strong><strong>里的</strong><strong>code</strong><strong>会不会被执行，什么时候被执行，在</strong><strong>return</strong><strong>前还是后</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答：</strong>会执行，在return前执行<br />
<br />
</font></font><br />
<font face="Courier New"><font size="3"><strong>23</strong><strong>、用最有效率的方法算出</strong><strong>2</strong><strong>乘以</strong><strong>8</strong><strong>等於几</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答：</strong>2&nbsp;&lt;&lt;&nbsp;3<br />
<br />
</font></font><br />
<font face="Courier New"><font size="3"><strong>24</strong><strong>、两个对象值相同</strong><strong>(x.equals(y) == true)</strong><strong>，但却可有不同的</strong><strong>hash code</strong><strong>，这句话对不对</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答：</strong>不对，有相同的hash&nbsp;code<br />
<br />
</font></font><br />
<font face="Courier New"><font size="3"><strong>25</strong><strong>、当一个对象被当作参数传递到一个方法后，此方法可改变这个对象的属性，并可返回变化后的结果，那么这里到底是值传递还是引用传递</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答：</strong>是值传递。Java&nbsp;编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时，参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变，但对象的引用是永远不会改变的<br />
<br />
</font></font><br />
<font face="Courier New"><font size="3"><strong>26</strong><strong>、</strong><strong>swtich</strong><strong>是否能作用在</strong><strong>byte</strong><strong>上，是否能作用在</strong><strong>long</strong><strong>上，是否能作用在</strong><strong>String</strong><strong>上</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答：</strong>witch（expr1）中，expr1是一个整数表达式。因此传递给&nbsp;switch&nbsp;和&nbsp;case&nbsp;语句的参数应该是&nbsp;int、&nbsp;short、&nbsp;char&nbsp;或者&nbsp;byte。long,string&nbsp;都不能作用于swtich<br />
<br />
</font></font><br />
<font face="Courier New"><font size="3"><strong>27</strong><strong>、</strong><strong>ArrayList</strong><strong>和</strong><strong>Vector</strong><strong>的区别</strong><strong>,HashMap</strong><strong>和</strong><strong>Hashtable</strong><strong>的区别</strong></font></font><strong><br />
</strong><font face="Courier New"><font size="3"><strong>答：</strong>就ArrayList与Vector主要从二方面来说.<br />
一.同步性:Vector是线程安全的，也就是说是同步的，而ArrayList是线程序不安全的，不是同步的<br />
二.数据增长:当需要增长时,Vector默认增长为原来一培，而ArrayList却是原来的一半<br />
就HashMap与HashTable主要从三方面来说。<br />
一.历史原因:Hashtable是基于陈旧的Dictionary类的，HashMap是Java 1.2引进的Map接口的一个实现<br />
二.同步性:Hashtable是线程安全的，也就是说是同步的，而HashMap是线程序不安全的，不是同步的<br />
三.值：只有HashMap可以让你将空值作为一个表的条目的key或value </font></font><br />
<font face="Courier New"><font size="3"><strong>28</strong><strong>、</strong><strong>char</strong><strong>型变量中能不能存贮一个中文汉字</strong><strong>?</strong><strong>为什么</strong></font></font><font face="Courier New"><font size="3"><strong>?<br />
</strong><strong>答：</strong>是能够定义成为一个中文的，因为java中以unicode编码，一个char占16个字节，所以放一个中文是没问题的<br />
<br />
</font></font><br />
<font face="Courier New"><font size="3"><strong>29</strong><strong>、</strong><strong>GC</strong><strong>是什么</strong><strong>?&nbsp;</strong><strong>为什么要有</strong></font></font><font face="Courier New"><font size="3"><strong>GC<br />
</strong><strong>答：</strong>GC
是垃圾收集的意思（Gabage&nbsp;Collection）,内存处理是编程人员容易出现问题的地方，忘记或者错误的内存回收会导致程序或系统的不稳定甚至
崩溃，Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的，Java语言没有提供释放已分配内存的显示操作方法。<br />
<br />
</font></font><br />
<font face="Courier New"><font size="3"><strong>30</strong><strong>、</strong><strong>float</strong><strong>型</strong><strong>float f=3.4</strong><strong>是否正确</strong></font></font><font face="Courier New"><font size="3"><strong>?<br />
</strong><strong>答</strong><strong>:</strong>不正确。精度不准确,应该用强制类型转换，如下所示：float f=(float)3.4</font></font>&nbsp;
 <img src ="http://www.blogjava.net/wshsdlau/aggbug/379176.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshsdlau/" target="_blank">哈希</a> 2011-04-28 18:02 <a href="http://www.blogjava.net/wshsdlau/archive/2011/04/28/379176.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符串+数组面试题</title><link>http://www.blogjava.net/wshsdlau/archive/2011/04/28/379177.html</link><dc:creator>哈希</dc:creator><author>哈希</author><pubDate>Thu, 28 Apr 2011 09:56:00 GMT</pubDate><guid>http://www.blogjava.net/wshsdlau/archive/2011/04/28/379177.html</guid><wfw:comment>http://www.blogjava.net/wshsdlau/comments/379177.html</wfw:comment><comments>http://www.blogjava.net/wshsdlau/archive/2011/04/28/379177.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshsdlau/comments/commentRss/379177.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshsdlau/services/trackbacks/379177.html</trackback:ping><description><![CDATA[<p style="padding-left: 30px">3.求子数组的最大和<br />题目：<br />输入一个整形数组，数组里有正数也有负数。<br />数组中连续的一个或多个整数组成一个子数组，每个子数组都有一个和。<br />求所有子数组的和的最大值。要求时间复杂度为O(n)。</p>
<p style="padding-left: 30px">例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5，和最大的子数组为3, 10, -4, 7, 2，<br />因此输出为该子数组的和18。</p>
<p style="padding-left: 30px"><br />第10题<br />翻转句子中单词的顺序。<br />题目：输入一个英文句子，翻转句子中单词的顺序，但单词内字符的顺序不变。</p>
<p style="padding-left: 30px">句子中单词以空格符隔开。为简单起见，标点符号和普通字母一样处理。<br />例如输入&#8220;I am a student.&#8221;，则输出&#8220;student. a am I&#8221;。</p>
<p style="padding-left: 30px"><br />第14题：<br />题目：输入一个已经按升序排序过的数组和一个数字，<br />在数组中查找两个数，使得它们的和正好是输入的那个数字。<br />要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字，输出任意一对即可。<br />例如输入数组1、2、4、7、11、15和数字15。由于4+11=15，因此输出4和11。</p>
<p style="padding-left: 30px">&nbsp;</p>
<p style="padding-left: 30px">第17题：<br />题目：在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff，则输出b。&nbsp; <br />分析：这道题是2006年google的一道笔试题。</p>
<p style="padding-left: 30px">&nbsp;</p>
<p style="padding-left: 30px">第20题：<br />题目：输入一个表示整数的字符串，把该字符串转换成整数并输出。<br />例如输入字符串"345"，则输出整数345。</p>
<p style="padding-left: 30px">&nbsp;</p>
<p style="padding-left: 30px">第25题：<br />写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)<br />功能：<br />在字符串中找出连续最长的数字串，并把这个串的长度返回，<br />并把这个最长数字串付给其中一个函数参数outputstr所指内存。<br />例如："abcd12345ed125ss123456789"的首地址传给intputstr后，函数将返回9，<br />outputstr所指的值为123456789</p>
<p style="padding-left: 30px"><br />26.左旋转字符串</p>
<p style="padding-left: 30px">题目：<br />定义字符串的左旋转操作：把字符串前面的若干个字符移动到字符串的尾部。</p>
<p style="padding-left: 30px">如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。<br />要求时间对长度为n的字符串操作的复杂度为O(n)，辅助内存为O(1)。</p>
<p style="padding-left: 30px"><br />37.<br />有n个长为m+1的字符串，<br />如果某个字符串的最后m个字符与某个字符串的前m个字符匹配，则两个字符串可以联接，<br />问这n个字符串最多可以连成一个多长的字符串，如果出现循环，则返回错误。</p>
<p style="padding-left: 30px">&nbsp;</p>
<p style="padding-left: 30px">45.雅虎：<br />1.对于一个整数矩阵，存在一种运算，对矩阵中任意元素加一时，需要其相邻（上下左右）<br />某一个元素也加一，现给出一正数矩阵，判断其是否能够由一个全零矩阵经过上述运算得到。</p>
<p style="padding-left: 30px">2.一个整数数组，长度为n，将其分为m份，使各份的和相等，求m的最大值<br />&nbsp; 比如{3，2，4，3，6} 可以分成{3，2，4，3，6} m=1; <br />&nbsp; {3,6}{2,4,3} m=2<br />&nbsp; {3,3}{2,4}{6} m=3 所以m的最大值为3</p>
<p style="padding-left: 30px"><br />48.微软：<br />一个数组是由一个递减数列左移若干位形成的，比如{4，3，2，1，6，5}<br />是由{6，5，4，3，2，1}左移两位形成的，在这种数组中查找某一个数。</p>
<p style="padding-left: 30px"><br />51.和为n连续正数序列。<br />题目：输入一个正数n，输出所有和为n连续正数序列。</p>
<p style="padding-left: 30px">例如输入15，由于1+2+3+4+5=4+5+6=7+8=15，所以输出3个连续序列1-5、4-6和7-8。<br />分析：这是网易的一道面试题。</p>
<p style="padding-left: 30px"><br />53.字符串的排列。<br />题目：输入一个字符串，打印出该字符串中字符的所有排列。<br />例如输入字符串abc，则输出由字符a、b、c所能排列出来的所有字符串<br />abc、acb、bac、bca、cab和cba。</p>
<p style="padding-left: 30px">分析：这是一道很好的考查对递归理解的编程题，<br />因此在过去一年中频繁出现在各大公司的面试、笔试题中。</p>
<p style="padding-left: 30px">&nbsp;</p>
<p style="padding-left: 30px">54.调整数组顺序使奇数位于偶数前面。</p>
<p style="padding-left: 30px">题目：输入一个整数数组，调整数组中数字的顺序，使得所有奇数位于数组的前半部分，<br />所有偶数位于数组的后半部分。要求时间复杂度为O(n)。</p>
<p style="padding-left: 30px"><br />56.最长公共字串。<br />题目：如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中，</p>
<p style="padding-left: 30px">则字符串一称之为字符串二的子串。</p>
<p style="padding-left: 30px">注意，并不要求子串（字符串一）的字符必须连续出现在字符串二中。<br />请编写一个函数，输入两个字符串，求它们的最长公共子串，并打印出最长公共子串。</p>
<p style="padding-left: 30px">例如：输入两个字符串BDCABA和ABCBDAB，字符串BCBA和BDAB都是是它们的最长公共子串，<br />则输出它们的长度4，并打印任意一个子串。</p>
<p style="padding-left: 30px">分析：求最长公共子串（Longest Common Subsequence, LCS）是一道非常经典的动态规划题，<br />因此一些重视算法的公司像MicroStrategy都把它当作面试题。</p>
<p style="padding-left: 30px"><br />63.在字符串中删除特定的字符。<br />题目：输入两个字符串，从第一字符串中删除第二个字符串中所有的字符。</p>
<p style="padding-left: 30px">例如，输入&#8221;They are students.&#8221;和&#8221;aeiou&#8221;，</p>
<p style="padding-left: 30px">则删除之后的第一个字符串变成&#8221;Thy r stdnts.&#8221;。</p>
<p style="padding-left: 30px">分析：这是一道微软面试题。在微软的常见面试题中，与字符串相关的题目占了很大的一部分，<br />因为写程序操作字符串能很好的反映我们的编程基本功。</p>
<p style="padding-left: 30px">&nbsp;</p>
<p style="padding-left: 30px">69.旋转数组中的最小元素。<br />题目：把一个数组最开始的若干个元素搬到数组的末尾，我们称之为数组的旋转。输入一个排好序的数组的一个旋转，</p>
<p style="padding-left: 30px">输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转，该数组的最小值为1。</p>
<p style="padding-left: 30px">&nbsp;&nbsp;&nbsp; 分析：这道题最直观的解法并不难。从头到尾遍历数组一次，就能找出最小的元素，<br />时间复杂度显然是O(N)。但这个思路没有利用输入数组的特性，我们应该能找到更好的解法。</p>
<p style="padding-left: 30px">&nbsp;</p>
<p style="padding-left: 30px">73.对策字符串的最大长度。<br />题目：输入一个字符串，输出该字符串中对称的子字符串的最大长度。<br />比如输入字符串&#8220;google&#8221;，由于该字符串里最长的对称子字符串是&#8220;goog&#8221;，因此输出4。</p>
<p style="padding-left: 30px">分析：可能很多人都写过判断一个字符串是不是对称的函数，这个题目可以看成是该函数的加强版。</p>
<p style="padding-left: 30px">&nbsp;</p>
<p style="padding-left: 30px">85.又见字符串的问题<br />1.给出一个函数来复制两个字符串A和B。<br />字符串A的后几个字节和字符串B的前几个字节重叠。<br />分析：记住，这种题目往往就是考你对边界的考虑情况。<br />2.已知一个字符串，比如asderwsde,寻找其中的一个子字符串比如sde的个数，<br />如果没有返回0，有的话返回子字符串的个数。</p>
<p style="padding-left: 30px"><br />88.2005年11月金山笔试题。编码完成下面的处理函数。<br />函数将字符串中的字符'*'移到串的前部分，</p>
<p style="padding-left: 30px">前面的非'*'字符后移，但不能改变非'*'字符的先后顺序，函数返回串中字符'*'的数量。<br />如原始串为：ab**cd**e*12，<br />处理后为*****abcde12，函数并返回值为5。（要求使用尽量少的时间和辅助空间）</p>
<p style="padding-left: 30px">&nbsp;</p>
<p style="padding-left: 30px">93.在一个int数组里查找这样的数，它大于等于左侧所有数，小于等于右侧所有数。<br />直观想法是用两个数组a、b。a[i]、b[i]分别保存从前到i的最大的数和从后到i的最小的数，</p>
<p style="padding-left: 30px">一个解答：这需要两次遍历，然后再遍历一次原数组，<br />将所有data[i]&gt;=a[i-1]&amp;&amp;data[i]&lt;=b[i]的data[i]找出即可。</p>
<p style="padding-left: 30px">给出这个解答后，面试官有要求只能用一个辅助数组，且要求少遍历一次。</p>
<p style="padding-left: 30px"><br />94.微软笔试题<br />求随机数构成的数组中找到长度大于=3的最长的等差数列9 d- x' W) w9 ?" o3 b0 R<br />输出等差数列由小到大: <br />如果没有符合条件的就输出<br />格式：<br />输入[1,3,0,5,-1,6]<br />输出[-1,1,3,5]<br />要求时间复杂度，空间复杂度尽量小</p>
<p style="padding-left: 30px"><br />96.08年中兴校园招聘笔试题<br />1．编写strcpy 函数<br />已知strcpy 函数的原型是<br />char *strcpy(char *strDest, const char *strSrc);<br />其中strDest 是目的字符串，strSrc 是源字符串。<br />不调用C++/C 的字符串库函数，请编写函数 strcpy。</p>
<p style="padding-left: 30px">&nbsp;</p>
<p style="padding-left: 30px">----------------</p>
<p style="padding-left: 30px">1.关于本微软等公司数据结构+算法面试100题系列V0.1版的郑重声明<br /><a href="http://blog.csdn.net/v_JULY_v/archive/2010/12/02/6050133.aspx" target="_blank"><span style="color: #002d93">http://blog.csdn.net/v_JULY_v/archive/2010/12/02/6050133.aspx</span></a><br />2.完整100题，请参见，<br />[珍藏版]微软等数据结构+算法面试100题全部出炉[100题首次完整亮相]<br /><a href="http://blog.csdn.net/v_JULY_v/archive/2010/12/06/6057286.aspx" target="_blank"><span style="color: #002d93">http://blog.csdn.net/v_JULY_v/archive/2010/12/06/6057286.aspx</span></a><br />3.更多详情，请参见，本人博客：<br />My Blog：<br /><a href="http://blog.csdn.net/v_JULY_v" target="_blank"><span style="color: #002d93">http://blog.csdn.net/v_JULY_v</span></a><br />4.所有的资源（题目+答案）下载地址：<br /><a href="http://v_july_v.download.csdn.net/" target="_blank"><span style="color: #002d93">http://v_july_v.download.csdn.net/</span></a><br />5.本微软等100题系列V0.1版，永久维护（网友，思路回复）地址：<br /><a href="http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html" target="_blank"><span style="color: #002d93">http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html</span></a></p><img src ="http://www.blogjava.net/wshsdlau/aggbug/379177.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshsdlau/" target="_blank">哈希</a> 2011-04-28 17:56 <a href="http://www.blogjava.net/wshsdlau/archive/2011/04/28/379177.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编写一个截取字符串的函数，输入为一个字符串和字节数，输出为按字节截取的字符串。   但是要保证汉字不被截半个，如“我ABC”4，应该截为“我AB”，输入“我ABC汉DEF”，6，应该输出为“我ABC”而不是“我ABC+汉的半个”。</title><link>http://www.blogjava.net/wshsdlau/archive/2011/04/28/379178.html</link><dc:creator>哈希</dc:creator><author>哈希</author><pubDate>Thu, 28 Apr 2011 08:31:00 GMT</pubDate><guid>http://www.blogjava.net/wshsdlau/archive/2011/04/28/379178.html</guid><wfw:comment>http://www.blogjava.net/wshsdlau/comments/379178.html</wfw:comment><comments>http://www.blogjava.net/wshsdlau/archive/2011/04/28/379178.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshsdlau/comments/commentRss/379178.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshsdlau/services/trackbacks/379178.html</trackback:ping><description><![CDATA[目:
编写一个截取字符串的函数，输入为一个字符串和字节数，输出为按字节截取的字符串。 &nbsp; 但是要保证汉字不被截半个，如&#8220;我ABC&#8221;4，应该截为&#8220;我AB&#8221;，输入&#8220;我ABC汉DEF&#8221;，6，应该输出为&#8220;我ABC&#8221;而不是&#8220;我ABC+汉的半个&#8221;。
<div class="dp-highlighter">
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.sw.suanfa.first.ten;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">/**</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;编写一个截取字符串的函数，输入为一个字符串和字节数，输出为按字节截取的字符串。&nbsp;&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;&nbsp;但是要保证汉字不被截半个，</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;&nbsp;如&#8220;我ABC&#8221;4，应该截为&#8220;我AB&#8221;，</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;&nbsp;输入&#8220;我ABC汉DEF&#8221;，6，应该输出为&#8220;我ABC&#8221;而不是&#8220;我ABC+汉的半个&#8221;。&nbsp;</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;songwei</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*我的处理方式：截取字符串的一个字符，加入StringBuffer中，并取其字节数，并入当前获取字符的总长度中，</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*如果总长度大于等于输入的长度，则返回StringBuffer的toString值。</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*getSubString方法传入encoding值。UTF-8中文占3个字节，GBK占2个。结果有所不同，所以还是传入较好。</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*没有通过判断charAt的值来判定是否为中文等特殊字符。</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*不知道我这种方式是否正确。【未经过详细测试】</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp; </span></span>
    <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
    <br />
    Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
    http://www.CodeHighlighter.com/<br />
    <br />
    --><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;SubStringWithChina&nbsp;{&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Exception{&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">我ABC汉DEF</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;len&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">6</span><span style="color: #000000; ">&nbsp;;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;encoding&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">UTF-8</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;getSubString(a,&nbsp;len,encoding)&nbsp;);&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">我ABC</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">4</span><span style="color: #000000; ">&nbsp;;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encoding&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">gbk</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;getSubString(a,&nbsp;len,encoding)&nbsp;);&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;str&nbsp;传入字符串&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;len&nbsp;截取字节数&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;encoding&nbsp;编码方式&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; ">&nbsp;返回截取后的字符串&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@throws</span><span style="color: #008000; ">&nbsp;Exception&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; ">&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;String&nbsp;getSubString(String&nbsp;str,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;len,String&nbsp;encoding)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Exception{&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(str&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;str.length()</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">&nbsp;;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(len</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">&nbsp;;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;sb&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;StringBuffer();&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;all&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">str.length();i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">){&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;tmp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;str.substring(i,i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(tmp);&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">byte</span><span style="color: #000000; ">[]&nbsp;tmpB&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;tmp.getBytes(encoding);&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">tmpB.length&nbsp;;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(all</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">len){&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">&nbsp;;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000;">&nbsp;sb.toString()&nbsp;;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;} <br />
    </span></div>
    </li>
    <li class="">
    <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;">
    <p>判断字符串中是否含有汉字：</p>
    <p>&nbsp;String str = "test中文汉字";<br />
    String regEx = "[\\u4e00-\\u9fa5]";</p>
    <p>/**<br />
    * 判断有没有中文<br />
    */<br />
    if (str.getBytes().length == str.length()) {<br />
    &nbsp;System.out.println("无汉字");<br />
    } else {<br />
    &nbsp;System.out.println("有汉字");<br />
    }</p>
    <p>/**<br />
    * 如果有则打印出来<br />
    */<br />
    Pattern p = Pattern.compile(regEx);<br />
    Matcher m = p.matcher(str);<br />
    while (m.find()) {<br />
    &nbsp;System.out.print(m.group(0) + "");<br />
    }</p>
    <span style="color: #000000;">
    </span>
    <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><img id="Code_Closed_Image_140324" onclick="this.style.display='none'; Code_Closed_Text_140324.style.display='none'; Code_Open_Image_140324.style.display='inline'; Code_Open_Text_140324.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" alt="" align="top" height="16" width="11" /><img id="Code_Open_Image_140324" style="display: none" onclick="this.style.display='none'; Code_Open_Text_140324.style.display='none'; Code_Closed_Image_140324.style.display='inline'; Code_Closed_Text_140324.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" align="top" height="16" width="11" /><span id="Code_Closed_Text_140324" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">如题</span><span id="Code_Open_Text_140324" style="display: none"><br />
    <!--<br />
    <br />
    Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
    http://www.CodeHighlighter.com/<br />
    <br />
    --><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
    </span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br />
    </span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">请输入要断开的字符第几位：</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
    </span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scanner&nbsp;input</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Scanner(System.in);<br />
    </span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;len</span><span style="color: #000000; ">=</span><span style="color: #000000; ">input.nextInt();<br />
    </span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">判断字符是否为中文</span><span style="color: #008000; "><br />
    </span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">sdf中国chinese对方</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />
    </span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">byte</span><span style="color: #000000; ">[]&nbsp;strs</span><span style="color: #000000; ">=</span><span style="color: #000000; ">str.getBytes();<br />
    </span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(str.substring(len</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;len).matches(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">[\u4e00-\u9fa5]+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">strs.length</span><span style="color: #000000; ">%</span><span style="color: #000000; ">2</span><span style="color: #000000; ">==</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;{&nbsp;<br />
    </span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    </span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;str.length();&nbsp;i++)&nbsp;{<br />
    </span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(str.substring(i,&nbsp;i&nbsp;+&nbsp;1).matches("[\u4e00-\u9fa5]+"))&nbsp;{<br />
    </span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(""+str.substring(i,&nbsp;i&nbsp;+&nbsp;1)+""+"为汉字");<br />
    </span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{<br />
    </span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(""+str.substring(i,&nbsp;i&nbsp;+&nbsp;1)+""+"不为汉字");<br />
    </span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
    </span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #008000; "><br />
    </span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(str.substring(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;len</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">));<br />
    </span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">{<br />
    </span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(str.substring(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,len</span><span style="color: #000000; ">-</span><span style="color: #000000; ">2</span><span style="color: #000000; ">));<br />
    </span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
    </span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; "><br />
    </span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
    <span style="color: #000000;">
    </span></div>
    </li>
</ol>
</div>
 <img src ="http://www.blogjava.net/wshsdlau/aggbug/379178.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshsdlau/" target="_blank">哈希</a> 2011-04-28 16:31 <a href="http://www.blogjava.net/wshsdlau/archive/2011/04/28/379178.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重定向和转发的区别</title><link>http://www.blogjava.net/wshsdlau/archive/2011/04/26/379183.html</link><dc:creator>哈希</dc:creator><author>哈希</author><pubDate>Tue, 26 Apr 2011 15:13:00 GMT</pubDate><guid>http://www.blogjava.net/wshsdlau/archive/2011/04/26/379183.html</guid><wfw:comment>http://www.blogjava.net/wshsdlau/comments/379183.html</wfw:comment><comments>http://www.blogjava.net/wshsdlau/archive/2011/04/26/379183.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshsdlau/comments/commentRss/379183.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshsdlau/services/trackbacks/379183.html</trackback:ping><description><![CDATA[<h2><a id="ctl08_TitleUrl" href="http://www.cnblogs.com/azai/archive/2010/03/07/1680145.html"><br />
</a>
</h2>
<div id="cnblogs_post_body">区别一：
<div class="blog_content">
<p>　　重定向时浏览器上的网址改变</p>
<p>　　转发是浏览器上的网址不变</p>
<p>区别二：</p>
<p>　　重定向实际上产生了两次请求</p>
<p>转发只有一次请求&nbsp;</p>
<p>重定向：&nbsp;</p>
<p>　　发送请求
--&gt;服务器运行--&gt;响应请求，返回给浏览器一个新的地址与响应码--&gt;浏览器根据响应码，判定该响应为重定向，自动发送一个新的请求给服务器，请求地址为之前返回的地址--&gt;服务器运行--&gt;响应请求给浏览器&nbsp;</p>
<p>转发：&nbsp;</p>
<p>　　发送请求
--&gt;服务器运行--&gt;进行请求的重新设置，例如通过request.setAttribute(name,value)--&gt;根据转发的地址，获取该地址的网页--&gt;响应请求给浏览器&nbsp;</p>
<p>区别三：</p>
<p>　　重定向时的网址可以是任何网址</p>
<p>　　转发的网址必须是本站点的网址</p>
<p>详解：</p>
<p>　　<font size="4">重定向：以前的request中存放的变量全部失效，并进入一个新的request作用域。<br />
转发：以前的request中存放的变量不会失效，就像把两个页面拼到了一起。</font></p>
<p>正文开始：&nbsp;</p>
<p>　　先是看上去不同，他们的调用分别如下：<br />
request.getRequestDispatcher("apage.jsp").forward(request,
response);//转发到apage.jsp<br />
response.sendRedirect("apage.jsp");//重定向到apage.jsp<br />
在jsp页面中你也会看到通过下面的方式实现转发：<br />
&lt;jsp:forward
page="apage.jsp"
/&gt;<br />
我在初学jsp的时候，对这两个概念非常模糊，看别人的例子的时候，也是一头雾水，不知道什么时候该用哪个。希望下面的解说能对你有所帮助。<br />
提到转发和重定向就不得不提到request作用域。很多初学者都知道当我们提交一个表单时，就创建了一个新的请求。实际上，当我们点击一个链接时，也创建了一个新的请求。那么一个请求的作用于到底有多大呢？例如：<br />
在页面a.jsp中有一个链接&lt;a
href="b.jsp?id=1"&gt;这是指向b的一个链接，而且还带了一个参数&lt;/a&gt;。当我们点击这个连接的时候，就产生了一个请求，为了明确起见，我们把它叫做requestA-&gt;B。现在，在b.jsp页面中我们就可以从这个请求中获取信息了。在b.jsp中你可以写入out.println(request.getParameter("id"))进行测试。下面更复杂一点，我们在b.jsp页面中增加下面的语句：<br />
request.setAttribute("name","funcreal");<br />
out.println(request.getAttriblute("name"));//成功显示了name变量的值。<br />
现在在b.jsp中再增加一个链接：&lt;a
href="c.jsp?age=23"&gt;这是指向c的一个链接，而且还带了一个参数&lt;/a&gt;,当我们点击这个连接的时候，将产生一个新的请求，这时requestA-B也就安息了，新的请求叫做requestB-C。同样的道理，在c.jsp中，我们可以访问到的变量只有age，因为id，name这两个变量都属于requestA-B，此时他已经不存在了。下面是源代码：<br />
a.jsp<br />
&lt;%@
page contentType="text/html; charset=GBK" %&gt;<br />
&lt;html&gt;<br />
&lt;body
bgcolor="#ffffff"&gt;<br />
&lt;a
href="b.jsp?id=1"&gt;指向b.jsp，而且还带了一个参数id=1。requestA-B现在诞生了&lt;/a&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;&nbsp;</p>
<p>b.jsp<br />
&lt;%@ page contentType="text/html; charset=GBK"
%&gt;<br />
&lt;html&gt;<br />
&lt;body
bgcolor="#ffffff"&gt;<br />
&lt;%<br />
out.println("id=" +
request.getParameter("id"));<br />
request.setAttribute("name","Func
Real");<br />
out.println("name=" +
request.getAttribute("name"));<br />
%&gt;<br />
&lt;a
href="c.jsp?age=23"&gt;requestA-B已经结束了。指向c.jsp，而且还带了一个参数age=23&lt;/a&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;&nbsp;</p>
<p>c.jsp<br />
&lt;%@ page contentType="text/html; charset=GBK"
%&gt;<br />
&lt;html&gt;<br />
&lt;body
bgcolor="#ffffff"&gt;<br />
&lt;%<br />
out.println("id=" +
request.getParameter("id"));<br />
out.println("name=" +
request.getAttribute("name"));<br />
out.println("age=" +
request.getParameter("age"));<br />
%&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;&nbsp;</p>
<p>　　那么转发又是怎么回事呢？现在增加一个页面叫做d.jsp，并且在c.jsp中&lt;/body&gt;前面增加一句&lt;jsp:forward
page="d.jsp"/&gt;<br />
d.jsp<br />
&lt;%@ page contentType="text/html; charset=GBK"
%&gt;<br />
&lt;html&gt;<br />
&lt;body
bgcolor="#ffffff"&gt;<br />
requestB-C的魔爪已经伸到了d.jsp页面<br />
&lt;%<br />
out.println("age="
+
request.getParameter("age"));<br />
%&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
运行程序，你会发现c页面中的内容没有显示出来，因为forward是自动执行的，地址栏中虽然是c.jsp但实际上，但浏览器中显示的已经是d.jsp的内容了，而且看到了从b.jsp传过来的参数。你可以简单得这样理解：转发，就是延长了requestB-C的作用域，&lt;jsp:forward
page="d.jsp"/&gt;，这一句话实际上是把c.jsp和d.jsp粘到了一起，他们就像是在一个页面中。<br />
如果你用过struts，那么你就知道为什么在Action中，最后一句几乎总是mapping.findForward("xxx");了。因为我们在这个Action中设置的请求作用域的变量都将会在下一个页面（也许是另一个Action）中用到，所以要用转发。&nbsp;</p>
<p>总结：<br />
用重定向和转发不是一个习惯问题。而是什么情况下必须用什么的问题。<br />
</p>
</div>
</div>
 <img src ="http://www.blogjava.net/wshsdlau/aggbug/379183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshsdlau/" target="_blank">哈希</a> 2011-04-26 23:13 <a href="http://www.blogjava.net/wshsdlau/archive/2011/04/26/379183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java面试题</title><link>http://www.blogjava.net/wshsdlau/archive/2011/04/22/379197.html</link><dc:creator>哈希</dc:creator><author>哈希</author><pubDate>Fri, 22 Apr 2011 00:59:00 GMT</pubDate><guid>http://www.blogjava.net/wshsdlau/archive/2011/04/22/379197.html</guid><wfw:comment>http://www.blogjava.net/wshsdlau/comments/379197.html</wfw:comment><comments>http://www.blogjava.net/wshsdlau/archive/2011/04/22/379197.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshsdlau/comments/commentRss/379197.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshsdlau/services/trackbacks/379197.html</trackback:ping><description><![CDATA[<strong>1)cookie和session的作用以及他们的应用场合</strong><br />
两者都是记录用户访问网站信息，但他们的保持状态不同，cookie是采用客户端保持，而session是采用服务端保持，一般来说cookie不是很安
全，因为别人可以分析本地的cookie进行cookie欺骗，考虑到安全的问题应该使用session，session是保持在服务端，但当访问增多
时，会增加服务器的压力。<br />
在应用场合中，建议建用户登录，交易重要信息存放session，其他信息可以存放在cookie中，根据实际需求两者可以交替搭配使用。<br />
<br />
<strong>2)怎样让jvm加载一个Class的同时执行一段代码</strong><br />
使用Class.forName()动态加载类（题目中有"同时"，是否启用另一线程？）<br />
<br />
<strong>3)post和get区别</strong><br />
从http动词协议来看，get是从服务器获取数据，post是向服务器上传数据<br />
get方式会把数据出现在url中，post则不会<br />
get提交的数据有大小限制，post则无<br />
<br />
<strong>4)事务的属性有哪些？写出spring或jdbc管理事务的例子</strong><br />
有原子性，一致性，隔离性，持久性<br />
spring提供了丰富的事务模型，主要是针对jdbc事务，jta事务，还有一些自定义事务（如果有人能从一张白纸写出spring transaction的例子，那真是佩服之极）<br />
还是写一个简单jdbc事务<br />
try{<br />
class.forName("***");<br />
...<br />
conn=DriverManager.getConnection(url,user,password);<br />
conn.createStartement().executeUpdate("****");//更新操作<br />
conn.commit();//事务提交<br />
}catch(Exception e){<br />
..<br />
conn.rollback();//事务回滚<br />
..<br />
}<br />
<br />
<strong>5)实现一个高并发、高性能的hashmap。写出伪代码</strong><br />
什么叫做高性能，高并发的hashmap? 是要考hashmap的数据结构??<br />
<br />
<strong>6)解析一段xml，拼接成一个url</strong><br />
xml,url???这两者有什么联系吗?<br />
<br />
<strong>7)怎么解决并发？怎么解决集群环境下的并发?</strong><br />
（有很多点可以并发，web请求可以并发，数据库请求可以并发，怎么那么空泛）<br />
高并发最重要的还是考虑到锁的问题，如数据库该用表锁用表锁，该用排他锁用排它锁，程序中要注意非线程安全的问题<br />
高并发还有带来性能问题，缓存，负载均衡，这些看情况而定<br />
<br />
<strong>8)java GC的原理.</strong><br />
又来，不回答你<br />
<br />
<strong>9)mysql支持事务吗？mysql存储引擎有哪些？</strong><br />
支持，常用的是inndb和myisam<br />
<br />
<strong>10)数据库数据查找比较慢的时候，如何解决？</strong><br />
假如是mysql<br />
1.漏了索引,用explain看看查询语句是不是没使用索引或者索引使用有问题<br />
2.使用show processlist看看是不是有sql卡住了<br />
3.还有一种情况就是sql写得过于复杂，如goroupby，多表关联等等，使用desc来进行分析<br />
4.还有就是配置的问题，如key_buffer等参数，这个看文档吧<br />
5.最后一种就是机器负荷过高，调整结构来解决吧，比如使用mysql-proxy代理等等<br />
<br />
<strong>11)学生 课程 选课的一个sql语句书写</strong><br />
??<br />
<br />
<strong>12)查找日志文件中某一个信息出现的次数</strong><br />
cat 日志 | grep 信息 | wc -l<br />
<br />
<strong>13) 32位linux操作系统中，最多支持多少个线程？</strong><br />
上网查了，写得很复杂，附上文章<br />
http://www.517sou.net/Article/Linux-maximum-number-of-threads-and-the-maximum-number-of-processes.aspx<br />
<br />
<strong>14)关于TreeMap操作的</strong><br />
TreeMap就是一颗平衡排序二叉树，操作的。。后面是什么??<br />
<br />
<strong>15)重写类A的equals和hascode方法。类A有个属性private B b；</strong><br />
??<br />
<br />
<strong>16)实现一个mysql的sequence</strong><br />
mysql的last_insert_id()大致可以满足，如果不行就写触发器吧
 <img src ="http://www.blogjava.net/wshsdlau/aggbug/379197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshsdlau/" target="_blank">哈希</a> 2011-04-22 08:59 <a href="http://www.blogjava.net/wshsdlau/archive/2011/04/22/379197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我们追求的是低成本的信息化</title><link>http://www.blogjava.net/wshsdlau/archive/2011/04/20/379205.html</link><dc:creator>哈希</dc:creator><author>哈希</author><pubDate>Wed, 20 Apr 2011 05:59:00 GMT</pubDate><guid>http://www.blogjava.net/wshsdlau/archive/2011/04/20/379205.html</guid><wfw:comment>http://www.blogjava.net/wshsdlau/comments/379205.html</wfw:comment><comments>http://www.blogjava.net/wshsdlau/archive/2011/04/20/379205.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wshsdlau/comments/commentRss/379205.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wshsdlau/services/trackbacks/379205.html</trackback:ping><description><![CDATA[<!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:RelyOnVML/>
<o:AllowPNG/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:UseFELayout/>
</w:Compatibility>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles deflockedstate="false" latentstylecount="156">
</w:LatentStyles>
</xml><![endif]--><!--[if !mso]><object classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id="ieooui"></object>

st1\:*{behavior:url(#ieooui) }

<![endif]--><!--[if gte mso 10]>

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}

<![endif]-->
<p class="MsoNormal"><span lang="EN-US">60</span><span style="font-family: 宋体;">小时不夜城！这是</span><span lang="EN-US">2009</span><span style="font-family: 宋体;">年沈阳兴隆大家庭商城圣诞节的又一个&#8220;不夜城策划&#8221;——在这个名为圣诞购物狂欢节的大型促销活动中，这个沈阳第一家巨型购物中心又一次走在了同行业竞争对手的前列，</span><span lang="EN-US">12</span><span style="font-family: 宋体;">月</span><span lang="EN-US">24</span><span style="font-family: 宋体;">日</span><span style="font-family: 宋体;">，从早上九点半开业，到夜里十二点，兴隆大家庭商业集团的各家商城和购物中心将会带来又一个&#8220;不熄灯&#8221;的圣诞节。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">对于辽宁兴隆大家庭商业集团来说，举办这样的&#8220;不夜城&#8221;已经不是第一次了，在</span><span lang="EN-US">2009</span><span style="font-family: 宋体;">年几乎每一个重要的节日，无论是元旦、春节、五一还是十一长假，兴隆大家庭旗下的各家门店，都以这种近乎&#8220;疯狂&#8221;的活动来进行一场极为声势浩大的促销，但是，兴隆大家庭的同业者们却在艳羡的同时，并不知道整个兴隆大家庭的信息部所付出的努力。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">而一个又一个的&#8220;一夜城&#8221;和一个又一个大型活动，不仅仅让人们记住了兴隆大家庭这个在辽宁地区具有极大影响力的民营商业集团，每到过年或节假日便接踵而来，更让所有的商业零售业同行十分诧异：兴隆大家庭到底是如何做到这一切的？</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">事实上，就在兴隆大家庭的众多同业仍然在考虑将独立的系统进行交互、兼容和集中的时候，兴隆大家庭的</span><span lang="EN-US">CIO</span><span style="font-family: 宋体;">、信息部部长周如，却不仅早已不再为系统的整合与设备集中所困，更是已经完成了许多他的同行们连想都不敢想的工作：周如和他的团队为兴隆大家庭建立了一套坚实的容灾与业务连续性系统。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">兴隆大家庭：数据与业务</span> <span style="font-family: 宋体;">不能承受之重</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">周如说在企业高层批复进行容灾工程之前，他其实并不忐忑，高层是否批复，他是心里有数的，凭着兴隆大家庭多年对信息化的重视，信息化对兴隆大家庭商业集团所带来的益处是有目共睹的，而真正令他忐忑的，是到底怎么做？到底能不能做好？</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">&#8220;董事长批准以后，事实上一直过了很久我们才做完，我们考虑要万无一失，经过了反复的验证和测试。&#8221;周如心里十分明白，做灾难备份这件事情，赢得领导的支持并不难，难的是&#8220;做了没什么好处，不做却有坏处，虽然很可能一直用不上，但是一旦业务系统出了问题，最后的屏障就是容灾系统。&#8221;周如用了四个字来形容当时自己完成这个项目时的心情：高度慎重。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">&#8220;以前我们的进销存、财务都是分离的，后来在沈阳做了数据中心，把业务、财务、经营管理数据都做了集中，但是，集中的不仅是数据还有风险。&#8221;周如虽然对&#8220;风险&#8221;二字虽然轻描淡写，但是经他详细一说，这&#8220;风险&#8221;二字的分量陡然重了起来。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">周如说，在商业零售业中，晚上十点关门，早上六点营业是再平常不过的事情，而所有的零售企业又都需要日结，这也就意味着，算上生成报表再转移给财务系统的时间，整个日结又需要两个小时，而与此同时，日结的特点又要求业务中心的备份周期是一天，而不是两天或是一周——周如说，现在的兴隆大家庭，一天备份的业务和财务数据就有几百个</span><span lang="EN-US">GB</span><span style="font-family: 宋体;">。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">&#8220;如果丢失，就意味着要有非常多的人力物力去找回，要一条一条的输入，而且，现在商业零售业的业务普遍都依赖信息系统的正常运转。&#8221;而周如不经意间还提到，在兴隆大家庭，所有的关键业务的数据都是&#8220;每天全备份&#8221;，周如说，以前根本不敢想遇到节假日如果出现数据丢失的情况，因为丢失的数据会&#8220;非常非常多&#8221;。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">于是，周如和他的团队，着手开始为兴隆大家庭在信息化上思考保驾护航。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">横跨数百公里：如何更加快速？如何更好保护？</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">在不断的学习和摸索之后，周如意识到，做容灾，而且是异地容灾，不仅需要有最好保护介质，更要有好的保护机制——周如说，对于网络带宽并不富裕的兴隆大家庭来说还有一个额外的要求：系统一旦上线，远程传输在广域网上对带宽的要求要更低，不能够&#8220;淹没广域网带宽&#8221;。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">显然，对于周如的要求来说，做容灾却并不是一件简单的事情，虽然如今的备份恢复软件能够帮助</span><span lang="EN-US">CIO</span><span style="font-family: 宋体;">们快速、高效甚至自动化的进行备份和恢复，而无需人工干预，而业务系统通过新的光纤磁盘阵列也能够满足备份容量的需求，在周如和他的团队面前，仍然有两座大山：</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">兴隆大家庭位于沈阳的业务中心与灾难备份中心相聚数百公里，而贷款只有一条租用的</span><span lang="EN-US">5M</span><span style="font-family: 宋体;">带宽的互联网链路，同时，对业务数据要求越来越高的兴隆大家庭，数据量的激增和商业零售业往往营业到深夜，却又较早开门的营业特点带来了两个根本的问题：尽可能缩小的备份窗口和更好的数据保护——正像周如所说，要&#8220;万无一失&#8221;。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">&#8220;我们开始是</span><span lang="EN-US">SAN</span><span style="font-family: 宋体;">的环境，后来我们决定上虚拟带库，以及新购置昆腾的</span><span lang="EN-US">Scalar i500</span><span style="font-family: 宋体;">磁带库。&#8221;周如和他的团队，最后选择了一个当下&#8220;十分流行&#8221;的做法：</span><span lang="EN-US">D2D2T</span><span style="font-family: 宋体;">——将业务系统上的数据有层次的转移到昆腾的</span><span lang="EN-US">DXi3500</span><span style="font-family: 宋体;">虚拟磁带库上面，同时在</span><span lang="EN-US">Scalar i500</span><span style="font-family: 宋体;">上进行最终的离线备份。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">不过，真正完成的项目却并不像说起来这么简单，在这一次利用昆腾的虚拟磁带库、物理磁带库建立的容灾系统上，兴隆大家庭实际上建立了三道数据的&#8220;防线&#8221;：</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">第一重是利用</span><span lang="EN-US">DXi3500</span><span style="font-family: 宋体;">虚拟磁带库建立的本地高速在线备份，利用其本身带有的重复数据删除和远程复制功能，将关键业务的全部数据通过</span><span lang="EN-US">iSCSI</span><span style="font-family: 宋体;">链路备份到</span><span lang="EN-US">DXi3500</span><span style="font-family: 宋体;">上；紧接着的是第二重的离线磁带备份：在数据中心再配置一台昆腾</span><span lang="EN-US">Scalar i500</span><span style="font-family: 宋体;">智能物理磁带库，通过备份软件自动将数据从虚拟磁带库克隆到物理磁带库；第三重是异地的容灾备份：周如在异地的鞍山和沈阳本地各配置一台</span><span lang="EN-US">DXi3500</span><span style="font-family: 宋体;">虚拟磁带库</span><span lang="EN-US">,</span><span style="font-family: 宋体;">通过</span><span lang="EN-US">TCP/IP</span><span style="font-family: 宋体;">自动抽取重复删除后的备份集数据，&#8220;一旦数据中心的数据发生灾难，通过昆腾</span><span lang="EN-US">DXi3500</span><span style="font-family: 宋体;">虚拟磁带库的</span><span lang="EN-US">iSCSI</span><span style="font-family: 宋体;">链路，可立刻及时恢复数据，延续业务的连续性。&#8221;</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">周如：昆腾的三个惊喜</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">周如说，让他感到吃惊的第一点就是昆腾的&#8220;王牌&#8221;：重复数据删除技术——而这正是使得基于</span><span lang="EN-US">TCP/IP</span><span style="font-family: 宋体;">的数据容灾得以实现的根本原因，&#8220;我们发现用了之后，对广域网的要求会很低，现在每天同步的量也就</span><span lang="EN-US">120GB</span><span style="font-family: 宋体;">左右，即使是全盘备份也就是</span><span lang="EN-US">260</span><span style="font-family: 宋体;">多个</span><span lang="EN-US">GB</span><span style="font-family: 宋体;">，这对我们来说节省了大量的广域网带宽。&#8221;</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">周如说，虽然对数据灾备一直有强烈的需求，但传统方式的数据灾备其数据传输量太大，太占带宽，拖慢系统运行，严重影响了正常业务的运行，而且缺乏有效的恢复手段，而&#8220;昆腾的虚拟磁带库带有重复数据删除技术大大提高了远程传输效率，在不增加带宽成本的情况下解决了我们一直以来存在的灾备烦恼。&#8221;</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">而更让周如吃惊的是，以前所考察的大量灾难备份解决方案都太过昂贵或是复杂，&#8220;适合中小企业的太少&#8221;。周如说，作为兴隆大家庭这样的用户，非常担心那种&#8220;投入精力很大，设备买回来却不懂得用，用不起&#8221;的情况。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">&#8220;我们追求的是低成本的信息化，高层给的投资是固定的。&#8221;周如说，昆腾所推荐的&#8220;</span><span lang="EN-US">D2D2T</span><span style="font-family: 宋体;">（磁盘到磁盘到磁带）&#8221;的方式，加上重复数据删除技术，既能够保证沈阳本地的高可用和及时恢复，又能够保证数据在鞍山的异地保护，还能够完成磁带介质的离线——在线</span><span lang="EN-US">+</span><span style="font-family: 宋体;">离线，本地</span><span lang="EN-US">+</span><span style="font-family: 宋体;">异地，磁盘</span><span lang="EN-US">+</span><span style="font-family: 宋体;">磁带，周如说，这应了一句老话&#8220;麻雀虽小五脏俱全&#8221;，&#8220;做灾备做就要做得俱全，否则就会有隐患，但是我们也不追求豪华奢侈，要做实用的灾备。&#8221;</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">不过，最让周如惊喜，但也可以说是&#8220;淡漠&#8221;的是，昆腾的设备自入驻之后便从未出过问题，使得他甚至已经&#8220;忘记了&#8221;他们的存在——&#8220;最好的服务就是没有服务，让我们把它忘记掉，让设备处在被忘记掉的状态，越高深的设备应该使用起来越简单。&#8221;</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">&#8220;引起重视都是故障率很高的。&#8221;周如半开玩笑的说道。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">商业零售业的信息化典范：高层力主信息化</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">今年四月，在对全国的商业零售业做了普查之后，中国社会科学院发布了一份名为《商业蓝皮书：中国商业发展报告</span><span lang="EN-US">(2008</span><span style="font-family: 宋体;">—</span><span lang="EN-US">2009)</span><span style="font-family: 宋体;">》的报告，在报告中，社科院的专家们一阵见血的指出：在第一阶段的信息化过程中，零售企业积累了大量的数据，且企业在维护这些计算机设备和数据库系统上进行了可观的投资，但却深受&#8220;信息孤岛&#8221;的影响，无法利用这些数据获得对企业业务最直接的支持，而且，商业零售业对数据、业务的可靠性和安全性的认识仍然十分淡漠。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">但是，正如前文所述，在兴隆大家庭，景象却并不一样——数据与数据、系统与系统、应用与应用之间的分离已经不再存在，集中的数据中心在兴隆大家庭中已经是昨日黄花，而周如和他的团队最新的工作成绩正如之前所说，已经完成了信息系统的容灾备份。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">&#8220;做这样一个项目，我们是国内的第一批，零售企业对于容灾，是&#8216;想做的很多，但是做的很少&#8217;。&#8221;周如说，这是与企业的高层对于信息化的看重分不开的，&#8220;很多零售业的</span><span lang="EN-US">IT</span><span style="font-family: 宋体;">部门都停滞在一个阶段了，因为他们没有获得高层的支持，但是企业发展到一定的程度，是需要做这样的事情的。&#8221;</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">周如说，在兴隆大家庭，信息化是一个&#8220;重要的事情&#8221;，从</span><span lang="EN-US">1993</span><span style="font-family: 宋体;">年第一批上电子收款机，到后来的业务系统信息化、财务系统电子化、电脑管理，&#8220;信息化在兴隆成为了传统，就这么延续下去了。&#8221;——对于周如来说，他这个信息部部长就像是获得了尚方宝剑，自然是喜笑颜开。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">&#8220;零售业挣钱不难，但是挣大钱难，很多零售业甚至也不挣钱，原因就是管理的不好，所以我们的董事长就一直力主做信息化，用信息化提高管理水平，上进销存、财务系统，甚至包括今天的容灾系统，其实都是一直做下来的。&#8221;周如说，这几年随着人们生活水平的提高，零售企业发展的很快，会做很多业务，做预付费卡、电子化的货币，如果没有信息化，没有未雨绸缪的容灾系统，这些都是空谈，都是&#8220;高屋建瓴&#8221;，而容灾则是信息化必不可少的一环。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">后记：</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">现在，拥有超过</span><span lang="EN-US">50</span><span style="font-family: 宋体;">万平米的营业面积和一年</span><span lang="EN-US">60</span><span style="font-family: 宋体;">亿的销售额的兴隆大家庭商业集团已经成为了企业</span><span lang="EN-US">3.1</span><span style="font-family: 宋体;">万余人真正的&#8220;大家庭&#8221;，作为辽宁地区的商业旗舰和最大的民营商业集团，</span><span lang="EN-US">2010</span><span style="font-family: 宋体;">年，集团董事长李维龙为企业定下的目标是&#8220;年销售</span><span lang="EN-US">100</span><span style="font-family: 宋体;">亿元&#8221;——周如说，兴隆人有一个理想，那就是成为&#8220;中国商业第一家&#8221;，把&#8220;兴隆大家庭&#8221;做成一个品牌，无论走到哪个城市，都会看到&#8220;兴隆大家庭&#8221;，实现兴隆人&#8220;发展连锁，商业报国&#8221;的宏愿。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">在这个过程中，让信息化成为业务发展的助推剂，让容灾系统为业务系统的平稳运行保驾护航是整个集团的信息部每一个员工的理想，而对于兴隆大家庭信息部以及周如这个信息部部长来说，接下来的的核心工作，将是如何利用信息系统更好的促进公司的新业务，帮助企业实现新的突破——兴隆大家庭的信息化已经将很多的同业者远远抛在了身后。</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
 <img src ="http://www.blogjava.net/wshsdlau/aggbug/379205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wshsdlau/" target="_blank">哈希</a> 2011-04-20 13:59 <a href="http://www.blogjava.net/wshsdlau/archive/2011/04/20/379205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>