锁定老帖子 主题:今天面试家公司,说是一个星期内有回复
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-12-29
有点像baidu的题目,面试题目跟过程都像baidu的风格, map的原理那里特别像
|
|
返回顶楼 | |
发表时间:2011-12-29
好多答不上,学习ing
|
|
返回顶楼 | |
发表时间:2011-12-29
第五题,给个实现,用的工厂方法,欢迎高手拍砖,说策略模式的同学来探讨下。 大致思路是,有一个抽象类ArrayHandler,定义process方法处理List里面的数组。分别有IntArrayHandler,StringArrayHandler以及其他继承ArrayHandler。 ArrayHandlerFactory是Handler的工厂,createHandler方法根据数组的类型返回不同的Handler Client为调用工厂方法的类。代码如下 ArrayHandler package zuoshu.pattern.q1; public abstract class ArrayHandler { Object mArray;//用Object而不用Object[]是因为输入数组可能是int[] //用抽象类而不用接口是因为要有构造函数来接收输入的数组 public ArrayHandler(Object array){ mArray = array; } public abstract void process();//处理数组的方法 } ArrayHandlerFactory package zuoshu.pattern.q1; public class ArrayHandlerFactory { public static ArrayHandler createHandler(Object array) { Class c = array.getClass(); //int[] if (c.equals(int[].class)) { return new IntArrayHandler(array); } //String[] else if (c.equals(String[].class)) { return new StringArrayHandler(array); } //unimplement else { return new UnsupportArrayHandler(array); } } } IntArrayHandler package zuoshu.pattern.q1; public class IntArrayHandler extends ArrayHandler { public IntArrayHandler(Object array) { super(array); } @Override public void process() { System.out.println("processing int[]"); } } StringArrayHandler package zuoshu.pattern.q1; public class StringArrayHandler extends ArrayHandler { public StringArrayHandler(Object array) { super(array); } @Override public void process() { System.out.println("processing String[]"); } } UnsupportArrayHandler package zuoshu.pattern.q1; public class UnsupportArrayHandler extends ArrayHandler { public UnsupportArrayHandler(Object array) { super(array); } @Override public void process() { System.out.println("unimplemented array handler:" + mArray.getClass()); } } 客户端调用方法如下 package zuoshu.pattern.q1; import java.util.List; public class Client { public void doTask(List<Object> list) { ArrayHandler handler; for (Object o : list) { handler = ArrayHandlerFactory.createHandler(o); handler.process(); } } } 写了个测试如下 package zuoshu.pattern.q1; import java.util.ArrayList; import java.util.List; public class Q1 { public static void main(String[] args) { Integer[] intArray = new Integer[5]; String[] stringArray = new String[5]; Object[] objArray = new Object[5]; List<Object> list = new ArrayList<Object>(); list.add(intArray); list.add(stringArray); list.add(objArray); Client c = new Client(); c.doTask(list); } } 输出如下 processing int[]
欢迎高手讨论 |
|
返回顶楼 | |
发表时间:2011-12-29
最后修改:2011-12-29
zuoshu 写道 backshadow 写道 1、int[10], 值为进入的次序
2、考得是Spring事务源码 3、线程池啊,阻塞啊,reanctor模式等 5、策略模式 7、参考ReentrantReadWriteLock 和 Semaphore 我觉得这些题目挺好的,什么公司,我能去试试吗? 阿?5用抽象工厂可以吗? 泛型+简单工厂+策略; 你说的"抽象工厂" 其实是 工厂模式,也可以的; 大话设计模式开头讲得就是这个; |
|
返回顶楼 | |
发表时间:2011-12-29
悲剧 刚毕业半年 只有 5 6 8会 其他表示好大压力 第一题跟不看不懂啥意思
![]() |
|
返回顶楼 | |
发表时间:2011-12-29
7、现系统有主数据库一个,支持保存修改查询,四个从数据库只查询。主从数据库无须考虑数据同步,当成数据一致;现在实现让service方法中根据方法名(说明数据库操作类型),分配数据主从数据库连接。让调用者(开发人员)不关心具体使用的哪个数据库!
这个是读写分离啊,我在基于Spring的基础上做过,spring解决方案是,其提供了一个数据路由的功能,继承他的类实现他的方法就完了 1 需要继承实现的抽象类 /** * 描述: 动态数据代理路由 * @author Hd * */ public class DbSourceMap extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return DbSourceHolder.getDbSource(); } } 2 用来做切换的实现 /** * 描述: 动态数据代理切换类 * @author Hd * */ public class DbSourceHolder { private static final ThreadLocal contextHolder = new ThreadLocal(); public static void setDbSource(String dbid) { contextHolder.set(dbid); } public static String getDbSource() { return (String) contextHolder.get(); } public static void clearDbSource() { contextHolder.remove(); } } 然后spring 配置文件 <bean id="multiJdbcDataSourceMap" class="com.xxxxxxx.base.dbsource.DbSourceMap"> <property name="targetDataSources"> <map key-type="java.lang.String" > <entry key="ds1" value-ref="dataSource1" /> <entry key="ds2" value-ref="dataSource2" /> </map> </property> <property name="defaultTargetDataSource" ref="dataSource1"/> </bean> 现在实现的功能就是调用DbSourceHolder 类的方法 可以随时切换库 让调用者(开发人员)不关心具体使用的哪个数据库! 实现这个很简单的用Spring 的AOP就可以了 在service层设立方法前切入点,根据方法名去切换指定库,比如方法名以query开头则切换到读取库,方法名以write开头切入到写库。 说实话楼主面试的公司不错啊,问的都是实实在在工作要用的。 |
|
返回顶楼 | |
发表时间:2011-12-29
这些题确实出的不错,看来面试官还是很有水平的。
|
|
返回顶楼 | |
发表时间:2011-12-29
关于第四个题目,个人一些感想。
1、应该是在考应用级别的缓存。 2、现在应用级别的缓存产品,很多(ehcache,JCache,JBossCache,WarmCache,OSCache),都能满足应用需求。如果采用其中一种产品,比如coherence,首先得考虑一点,代码不要和coherence耦合太厉害。(万一不用coherence,或者将来某种缓存不能满足使用时,只需要配置使用另外一种即可)。这就需要自己开发一套缓存接口了。 3、缓存,在business layer呢?还是在data access layer呢? 4、缓存的架构,缓存的内容,缓存的更新、同步。 |
|
返回顶楼 | |
发表时间:2011-12-29
zuoshu 写道
第五题,给个实现,用的工厂方法,欢迎高手拍砖,说策略模式的同学来探讨下。 大致思路是,有一个抽象类ArrayHandler,定义process方法处理List里面的数组。分别有IntArrayHandler,StringArrayHandler以及其他继承ArrayHandler。 ArrayHandlerFactory是Handler的工厂,createHandler方法根据数组的类型返回不同的Handler Client为调用工厂方法的类。代码如下 ArrayHandler package zuoshu.pattern.q1; public abstract class ArrayHandler { Object mArray;//用Object而不用Object[]是因为输入数组可能是int[] //用抽象类而不用接口是因为要有构造函数来接收输入的数组 public ArrayHandler(Object array){ mArray = array; } public abstract void process();//处理数组的方法 } ArrayHandlerFactory package zuoshu.pattern.q1; public class ArrayHandlerFactory { public static ArrayHandler createHandler(Object array) { Class c = array.getClass(); //int[] if (c.equals(int[].class)) { return new IntArrayHandler(array); } //String[] else if (c.equals(String[].class)) { return new StringArrayHandler(array); } //unimplement else { return new UnsupportArrayHandler(array); } } } IntArrayHandler package zuoshu.pattern.q1; public class IntArrayHandler extends ArrayHandler { public IntArrayHandler(Object array) { super(array); } @Override public void process() { System.out.println("processing int[]"); } } StringArrayHandler package zuoshu.pattern.q1; public class StringArrayHandler extends ArrayHandler { public StringArrayHandler(Object array) { super(array); } @Override public void process() { System.out.println("processing String[]"); } } UnsupportArrayHandler package zuoshu.pattern.q1; public class UnsupportArrayHandler extends ArrayHandler { public UnsupportArrayHandler(Object array) { super(array); } @Override public void process() { System.out.println("unimplemented array handler:" + mArray.getClass()); } } 客户端调用方法如下 package zuoshu.pattern.q1; import java.util.List; public class Client { public void doTask(List<Object> list) { ArrayHandler handler; for (Object o : list) { handler = ArrayHandlerFactory.createHandler(o); handler.process(); } } } 写了个测试如下 package zuoshu.pattern.q1; import java.util.ArrayList; import java.util.List; public class Q1 { public static void main(String[] args) { Integer[] intArray = new Integer[5]; String[] stringArray = new String[5]; Object[] objArray = new Object[5]; List<Object> list = new ArrayList<Object>(); list.add(intArray); list.add(stringArray); list.add(objArray); Client c = new Client(); c.doTask(list); } } 输出如下 processing int[]
欢迎高手讨论
其实个人觉得策略模式和工厂还真差不多,哪种都可以实现 我倒是关心为什么用工厂模式,好处在哪里,而这个好处策略模式又是没有的
|
|
返回顶楼 | |
发表时间:2011-12-29
Brera 写道 3、JVM线程多,资源快消耗被完,应该怎么处理。
不知道怎么回答 线程池吗? |
|
返回顶楼 | |