JD广告部面试经历

同事的同事招聘,于是同事帮忙推荐了一下!

2017年10月16日快下班的时候打电话问面试时间,答复待定;
2017年10月19日我回电,预约23日上午10点面试。然后对方发了邮件。
2017年10月20日,胃肠感冒,直到23日都没好,上吐下泻的,哎,天公不作美。也可以为自己的失败找点理由。

9点半到面试地点,等了约15分钟,有人出来接待。
第一轮面试:
一、基本介绍
出生地、毕业院校、工作经历、主要的项目

二、面试官问

1.数据库用过哪些
答:MySQL
简述一下索引的实现原理?(蒙,我还以为是如何使用呢?)




---------------------------------------------


共三轮面试:

1.简述数据库索引的实现原理

2.描述一下JVM的分代实现,堆、栈等等的所在位置
JVM 内存模型
3.什么情况下会出现栈溢出

4. String 为什么要使用 final 修饰的原因
-- 运用了享元模式,可以节约资源,复用


5.使用事务保证数据一致性,但使用事务会影响性能,如何在不适用事务的情况下保证数据的一致性、准确性
(考虑分布式的情景)
-- CAP定律,队列支持分布式+逻辑判断

6.扑克牌随机排序(斗地主,初始化时扑克牌会重新洗牌,打乱原有的顺序)
即如何实现随机分布且结果依旧是原来的数组(提示:用最简单的方式实现).


7.URL访问,如何根据URL定位到具体的实现方法上
答:Struts.xml 配置
继续问:如何自动匹配URL,如何实现,即不是通过Struts.xml 配置来完成跳转

答复:
a.Controller 层,即HTTP访问的URL,是通过 struts.xml 配置通配符的方式访问,进而定位到相应的接口的方法上
struts.xml使用通配符

b.模块化开发,是Controller层通过HTTP请求的方式,请求其他项目工程,此时使用的是
@RequestMapping(value = "/helloworld")
SpringMVC学习系列(3) 之 URL请求到Action的映射规则

8.Ajax请求实现方式,如何返回JSON/XML 格式的数据
return modelAndView的形式?

答:response.setType
javascript解析ajax返回的xml和json格式数据实例详解


9.Spring如何加载标签,如何识别bean
答:web.xml spring.xml 配置 scan 扫描

10. @Autowired @Resource 的区别
那个是Spring自带的,那个是根据ID 进行加载的
a。@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入;
b。@Autowired默认是按照类型装配注入的,如果想按照名称来转配注入,则需要结合@Qualifier一起使用;
c。@Resource注解是又J2EE提供,而@Autowired是由Spring提供,故减少系统对spring的依赖建议使用 
       @Resource的方式;
d。 @Resource和@Autowired都可以书写标注在字段或者该字段的setter方法之上

11.检索大量日志,如何在一个1GB大小的日志文件中找到 firefox ,并输入有多少行,每行的行号

cat -n xxx.log | grep 'xxx'

12.storm 的节点
spout --> bolt 经历多少个bolt

如何 storm 版本升级或 服务中断 或其他原因造成服务停止,重新发布服务,服务重启过程中的数据如何标记或处理?

即 重启的过程中有些数据可能已经执行到了第二个bolt上,重启导致了这类的数据无法继续执行下去,如何处理?

13.zk 的应用,仅仅只是起到了连接的作用? storm 集群部署,zk中存储了什么?

14.索引的实现原理,B+/B-数,平衡二叉树,基于数据库索引描述实现原理

15.如何优化SQL
答:explain 检索查询语句;如果是 ALL 就是全表扫描,需要添加索引
order by 排序,如何优化
答:在排序的字段上加入索引,一般根据主键排序
那根据主键排序效率依然很差如何解决?
答:。。。。
如果是上亿级别的数据如何快速检索?

16.Mybatis 是使用注解 还是 XML

答:xml

参数如何配置?
答:resultType/resultMap/parameterType
使用 map
<if test="" ></if>

Mybatis 中 #{} ${}有何区别
答:
一般表名称可变的使用后者
#相当于对数据 加上 双引号,$相当于直接显示数据
#能够防止SQL注入,后者不可以

SQL注入

17.hashMap 的实现原理
答:数组+链表

线程不安全,体现在哪里?
答:遍历时 modCount 与实际操作的次数不一致时抛出异常

添加元素的流程
查询元素的流程

18.ArrayList

19.多线程都使用过那些

Thread Runnable ThreadLocal Executors.newFixed

20.RPC调用

21.DDD方式编程,格局event事务自动响应,eventListener 这种标称方式是否有接触过

22.平时关注那些博客论坛,如何提升自己?

23.SQL注入

防止SQL注入的五中方法
SQL注入实例讲解

24.SpringWeb与 Spring

25.IOC
答:控制反转,A调用B,现在通过依赖注入的方式,将B给了A
Spring 如何实现的?

26.AOP
答:日志的输出打印;举例:主从库切换的实现过程
问:Spring 底层是如何支持AOP的这种实现方式的

27.NIO

28.HashMap 不安全,如何才能让它安全
答:
CurrnentHashMap
Collections.synchronized(xxxx)
问:
第一种方式的实现原理
第二种方式是什么保证线程安全的,是在外面套了一层嘛?
答:synchronized 使用了关键字。。。

29.MAVEN 管理代码
请问 快照与 release 有和区别
xxx-snapshot
xxx-1.0.1
答:后者只有 src/main/java 包内的内容,前者是全部
问:为什么要有这两种不同的形式存在?如何一个工程同时打出以上两种JAR包,有何区别?

a.release 是稳定版本,是经过测试后的版本;快照版本是不稳定版本,是在开发中的版本;
若A升级某项目后,B想引用,则B需要在相应的工程的pom.xml文件中修改A升级的项目的版本号,来实现引用;
若A在开发过程中不断地升级JAR,而B也在引用A的项目,避免不断地修改版本号,直接替换快照即可


30.服务化框架使用过哪些?duboo

31.如何实现负载均衡、容灾
答:NGINX反向代理,负载均衡在NGINX端进行配置。zabbit容灾


32.改变数据表的引擎,期望是减小存储容量,实际上数据已经存放,此时改变存储引擎已经不会启动作用,而是应该将数据重新导入到一个新建立的是哪个存储引擎的表上才可以

背景:公司内部一个日志收集系统,收集每日的服务器的推送信息;落地存储到MySQL上。存储时表的引擎为InnoDB,再由其他工程将历史数据表的存储引擎改为Tokudb(优点是体积小);实际未起到作用,因为存储时数据表的空间大小已确认,简单的修改存储引擎并不会改变表的存放体积,需要将数据重新导入到新的Tokudb引擎建立的表中

猜你喜欢

转载自mingyundezuoan.iteye.com/blog/2397361