17671874664-刘文清-中海通笔试题-Java开发工程师_第1页
17671874664-刘文清-中海通笔试题-Java开发工程师_第2页
17671874664-刘文清-中海通笔试题-Java开发工程师_第3页
17671874664-刘文清-中海通笔试题-Java开发工程师_第4页
17671874664-刘文清-中海通笔试题-Java开发工程师_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京中海通科技有限公司内部资料第第页北京中海通科技有限公司新员工入职技术考核测试(Java开发工程师)姓名:刘文清 联系方式绩:说明;本试卷卷面100分,考试时间60分钟;解答时字迹务必清晰,书写规整;答题过程中禁止使用手机、计算机调试和检查程序执行结果;本试卷内容视为北京中海通科技有限公司资产,请您对试题形式、试题内容保密,试卷和草稿纸严禁携带出考场,违者成绩以无效计。一、选择题(每题3分,共30分)1.(多选)下面哪些属于线程池参数?(3分)ABCDA.keepAliveTimeB.workQueueC.threadFactoryD.handler2.在堆排序中,将数组[6,2,1,3,5,4]视为完全二叉树,并由此构建出的初始大顶堆为:(3分)BA.[1,2,3,4,5,6]B.[6,5,4,3,2,1]C.[6,4,5,3,2,1]D.[6,1,2,3,4,5]3.通常在构造线程池时,不建议使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式一方面让写代码的同学更加明确线程池的运行规则,规避资源耗尽的风险;另一方面使用Executors创建的线程池对象包含弊端,其中CachedThreadPool线程池对象的弊端在于(3分)DA.请求队列是LinkedBlockingQueueB.请求队列是SynchronousQueueC.线程的keepAliveTime写死了60sD.允许无限创建线程4.(多选)关于@Autowired和@Resource注解,下面哪个是正确的(3分)ADA.都可以写在字段上和setter方法上B.@Autowired只能按照类型装配对象(byType)C.@Autowired默认装配依赖对象可以为空D.@Resource的属性name和type都不指定时,将通过反射机制使用byName自动注入5.(多选)kafka速度快的原因包括(3分)ABCDA.基于磁盘读写B.利用linux页缓存而不是JVM空间内存C.利用linux页缓存直接发送到网络D.数据批量读写而不是单条6.(3分)代码片段:publicclassPerson{privateStringname,comment;privateintage;publicPerson(Stringn,inta,Stringc){name=n;age=a;comment=c;}publicbooleanequals(Objecto){if(!(oinstanceofPerson))returnfalse;Personp=(Person)o;returnage==p.age&&name.equals();}}对于Person类,请问哪个选项中的hashCode()方法是最合适的?BA.returnsuper.hashCode();B.returnname.hashCode()+age*7;C.returnname.hashCode()+comment.hashCode()/2;D.returnname.hashCode()+comment.hashCode()/2-age*3;7.下列关于Spring中BeanFactory与ApplicationContext的比较,说法错误的是?(3分)CA.ApplicationContext在BeanFactory的基础上添加了Spring事件处理机制B.ApplicationContext在BeanFactory的基础上添加了国际化功能C.多个ApplicationContext之间可以具有父子关系,多个BeanFactory之间也可以具有父子关系D.ApplicationContext中对于Bean的依赖注入(即对于getBean()方法的调用)是委托给BeanFactory来实现的8.高内聚和低耦合,下面哪个耦合度最高?(3分)CA.通过函数参数传递B.一个函数修改另外一个函数中的数据C.通过全局变量D.通过指示器9.关于AOP错误的是?(3分)CA.AOP将散落在系统中的“方面”代码集中实现B.AOP有助于提高系统可维护性C.AOP已经表现出将要替代面向对象的趋势D.AOP是一种设计模式,Spring提供了一种实现10.有时为了避免某些未识别的异常抛给更高的上层应用,在某些接口实现中我们通常需要捕获编译运行期所有的异常,catch下述哪个类的实例才能达到目的:(3分)BA.ErrorB.ExceptionC.RuntimeExceptionD.Throwable二、判断题(每题2分,共20分)1.在sql语句中,使用count(*)、count(1)、count(列名)效果是相同的。 (x)2.在sql语句中,判断非空的一种写法是wheret.XXX!=null。 (X)3.CopyOnWriteArrayList在添加元素时会加锁,读取的时候不会加锁 (√)4.在jdk1.7及以后的版本中,下面代码输出结果为true (X)Stringstr2=newStringBuilder("ja").append("va").toString();System.out.println(str2==ern());在64位操作系统下,redis如不配置最大占用内存,将会无限占用内存 (√)在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过。 (√)默认情况下SpringBoot使用Logback作为日志框架。 (√)SpringSecurity是通过大量的Filter实现的,Filter会在SpringMVC之后拦截请求并处理。 (X)9.Object是Java中所有类的共同父类。 (√)10.Java中的常量用final关键字修饰,标识符一般大写,赋值机会只有一次,必须在定义的时候赋初值。 (√)三、简答题(每题10分,共50分)(10分)下面接口应用了springaop,请给出它在正常情况下调用时(不发生异常)aop的通知顺序。注:spring版本为5.2.8.RELEASE接口:publicinterfaceCalcService{publicintdiv(intx,inty);}实现类:@ServicepublicclassCalcServiceImplimplementsCalcService{@Overridepublicintdiv(intx,inty){intresult=x/y;System.out.println("CalcServiceImpl计算结果:"+result);returnresult;}}切面类:@Aspect@ComponentpublicclassMyAspect{@Before("execution(publicintcom.zzy.study.service.impl.CalcServiceImpl.*(..))")publicvoidbeforeNotify(){System.out.println("********@Before我是前置通知MyAspect");}@After("execution(publicintcom.zzy.study.service.impl.CalcServiceImpl.*(..))")publicvoidafterNotify(){System.out.println("********@After我是后置通知");}@AfterReturning("execution(publicintcom.zzy.study.service.impl.CalcServiceImpl.*(..))")publicvoidafterReturningNotify(){System.out.println("********@AfterReturning我是返回后通知");}@AfterThrowing("execution(publicintcom.zzy.study.service.impl.CalcServiceImpl.*(..))")publicvoidafterThrowingNotify(){System.out.println("********@AfterThrowing我是异常通知");}@Around("execution(publicintcom.zzy.study.service.impl.CalcServiceImpl.*(..))")publicObjectaround(ProceedingJoinPointproceedingJoinPoint)throwsThrowable{ObjectretValue=null;System.out.println("我是环绕通知之前AAA");retValue=proceedingJoinPceed();System.out.println("我是环绕通知之后BBB");returnretValue;}}答:环绕通知之前(Around-Before)前置通知(Before)目标方法执行环绕通知之后(Around-After)后置通知(After)返回后通知(AfterReturning)(10分)给出ES中手机类型商品的索引的mapping如下:PUTproduct{"mappings":{"properties":{"createtime":{"type":"date"},"date":{"type":"date"},"desc":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}},"analyzer":"ik_max_word"},"lv":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"name":{"type":"text","analyzer":"ik_max_word","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"price":{"type":"long"},"tags":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"type":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}}}为了方便观看数据内容,以数据库表的形式把数据罗列如下(实际存在es中),请写DSL语句,统计不同类型(type)的商品中,不同档次的(lv)商品的价格信息(price)和标签信息(tags)。{"aggregations":{"group_by_type":{"buckets":[{"key":"手机","doc_count":100,"group_by_lv":{"buckets":[{"key":"高端","doc_count":30,"price_stats":{"count":30,"min":5000,"max":10000,"avg":7500,"sum":225000},"top_tags":{"buckets":[{"key":"5G","doc_count":25},{"key":"高清屏","doc_count":20},{"key":"快充","doc_count":18}]}},{"key":"中端","doc_count":50,"price_stats":{...},"top_tags":{...}}]}},{"key":"平板","doc_count":50,"group_by_lv":{...}}]}}}(10分)假设在电商应用中,需要判断用户先后发生的行为的“组合模式”,比如“登录-下单”或者“登录-支付”,使用flink广播流,检测出这些连续的行为进行统计,就可以了解平台的运用状况以及用户的行为习惯。具体来说,我们将检测的行为模式定义为POJO类Pattern,里面包含了连续的两个行为,我们将广播流中的Pattern数据保存为广播变量;在行为数据Action到来之后读取当前广播变量,确定行为模式,并将之前的一次行为保存为一个ValueState(这是针对当前用户的状态保存,所以用到了KeyedState)。如果检测到前一次行为与Pattern中的action1相同,而当前行为与action2相同,则发现了匹配模式的一组行为,输出检测结果。请阅读下面代码,并以此为基础,完成PatternEvaluator类的代码://定义用户行为事件POJO类

publicstaticclassAction{

publicStringuserId;

publicStringaction;

publicAction(){

}

publicAction(StringuserId,Stringaction){

this.userId=userId;

this.action=action;

}

@Override

publicStringtoString(){

return"Action{"+

"userId="+userId+

",action='"+action+'\''+

'}';

}

}

//定义行为模式POJO类,包含先后发生的两个行为

publicstaticclassPattern{

publicStringaction1;

publicStringaction2;

publicPattern(){

}

publicPattern(Stringaction1,Stringaction2){

this.action1=action1;

this.action2=action2;

}

@Override

publicStringtoString(){

return"Pattern{"+

"action1='"+action1+'\''+

",action2='"+action2+'\''+

'}';

}

}publicstaticvoidmain(String[]args)throwsException{

StreamExecutionEnvironmentenv=

StreamExecutionEnvironment.getExecutionEnvironment();

env.setParallelism(1);

//读取用户行为事件流

DataStreamSource<Action>actionStream=env.fromElements(

newAction("Alice","login"),

newAction("Alice","pay"),

newAction("Bob","login"),

newAction("Bob","buy")

);

//定义行为模式流,代表了要检测的标准

DataStreamSource<Pattern>patternStream=env

.fromElements(

newPattern("login","pay"),

newPattern("login","buy")

);

//定义广播状态的描述器,创建广播流

MapStateDescriptor<Void,Pattern>bcStateDescriptor=new

MapStateDescriptor<>("patterns",Types.VOID,Types.POJO(Pattern.class));

BroadcastStream<Pattern>bcPatterns=

patternStream.broadcast(bcStateDescriptor);

//将事件流和广播流连接起来,进行处理

DataStream<Tuple2<String,Pattern>>matches=actionStream

.keyBy(data->data.userId)

.connect(bcPatterns)

.process(newPatternEvaluator());

matches.print();

env.execute();

}publicstaticclassPatternEvaluator

extendsKeyedBroadcastProcessFunction<String,Action,Pattern,

Tuple2<String,Pattern>>{

//定义一个值状态,保存上一次用户行为

ValueState<String>prevActionState;

@Override

publicvoidopen(Configurationconf){

}

@Override

publicvoidprocessBroadcastElement(

Patternpattern,

Contextctx,

Collector<Tuple2<String,Pattern>>out)throwsException{

}

@Ove

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论