2016-08-29 上午 京东酒店机票部-3轮面试

今天上午去京东面试,通过了三轮面试最终仍是被(HR)告知 回家等消息吧.mysql

先说一下 各个 面试官都问了啥吧:linux

记性很差 我就不一一罗列了,就直接整理一下全部的问题吧.面试

1.先来个 排序算法 热热身算法

分析:sql

2.聊一下 并发库相关,数据库

2.1 说一下 线程安全地队列数组

分析:ConcurrentLinkedQueue、ArrayBlockingQueue、LinkedBlockingQueue安全

2.2 说一下 线程安全的数据结构 本身知道的性能优化

分析:按照 不一样的数据结构分类说服务器

数据结构 线程安全的实现类
map ConcurrentHashMap
ConcurrentSkipListMap
set ConcurrentSkipListSet
CopyOnWriteArraySet
list CopyOnWriteArrayList
queue ConcurrentLinkedQueue
ArrayBlockingQueue
LinkedBlockingQueue
LinkedTransferQueue
PriorityBlockingQueue
SynchronousQueue
deue ConcurrentLinkedDeque
LinkedBlockingDeque

2.3 说一下 AtomicInteger 的 实现(具体说一下 自增是怎么实现的线程安全的)

分析:

public final int getAndIncrement() {

return unsafe.getAndAddInt(this, valueOffset, 1);

}

2.4 还问了一下SynchronousQueue,这个我没回答好

分析:

3.map的实现

分析:

3.1hashmap的新节点是添加到什么地方(链头仍是链尾)

分析:这个题巨坑啊,还要分版本1.8以前都是添加到链表的头部,1.8以后是添加到尾部

JDK7U79的版本table[bucketIndex] = new Entry<>(hash, key, value, e);

JDK8U60的版本p.next = newNode(hash, key, value, null);

4.2个FIFO队列实现栈的效果,简单来讲就是abc逆序打印

分析:2个FIFO队列分别是F1,F2

先把abc依次放到F1,再把ab依次取出并放回到F1,那么F1的顺序如今是bac,

将c放到F2,再将a取出放回F1,那么F1如今的顺序是ab,

再将ab依次从F1中取出放到F2,这时从F2取出的顺序就是 c,b,a

5.sqlserver和mysql的区别

分析:

6.mysql中myisam和InnoDB在索引上的区别

分析:

MyISAM InnoDB
使用前缀压缩技术是的索引更小 按照原数据格式进行存储
经过数据的物理位置引用被索引的行 经过主键引用被索引的行
myisam记录的直接是文件的offset InnoDB寻址要映射到块,再到行
   
  自适应哈希索引,是系统对热点索引
自动建立的内部行为,
用户没法控制或者配置
   
   

6.1MySQL存储引擎MyISAM与InnoDB的优劣(本身引伸出来的题)

  MyISAM InnoDB
存储结构 每张表被存放在三个文件:frm-表格定义
MYD(MYData)-数据文件
MYI(MYIndex)-索引文件
全部的表都保存在同一个数据文件中(也多是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操做系统文件的大小,通常为2GB
存储空间 MyISAM可被压缩,存储空间较小 InnoDB的表须要更多的内存和存储,它会在主内存中创建其专用的缓冲池用于高速缓冲数据和索引
可移植性、备份及恢复 因为MyISAM的数据是以文件的形式存储,因此在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操做 免费的方案能够是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了
事务安全 不支持 每次查询具备原子性 支持 具备事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表
AUTO_INCREMENT MyISAM表能够和其余字段一块儿创建联合索引 InnoDB中必须包含只有该字段的索引
SELECT MyISAM更优  
INSERT   InnoDB更优
UPDATE   InnoDB更优
DELETE   InnoDB更优 它不会从新创建表,而是一行一行的删除
COUNT without WHERE MyISAM更优。由于MyISAM保存了表的具体行数 InnoDB没有保存表的具体行数,须要逐行扫描统计,就很慢了
COUNT with WHERE 同样 同样,InnoDB也会锁表
只支持表锁 支持表锁、行锁 行锁大幅度提升了多用户并发操做的新能。可是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的
外键 不支持 支持
FULLTEXT全文索引 支持 不支持 能够经过使用Sphinx从InnoDB中得到全文索引,会慢一点

7.treemap实现原理,如何实现的有序

分析:以二叉树实现treemap,内部组合compare来实现比较和排序,

8.mysql优化

分析:从几个方面来谈

数据库引擎 InnoDB支持事务
数据库字段选择  
索引优化  
查询性能优化  
分表分库  
mysql服务器优化  
操做系统和硬件优化  
主从设置  
   
   

9.一个十亿行记录的文本,如何从中查询是否含有某个字符串

分析:从网上搜到 有人说用

lucene

compass(我没见过这个东西)

用搜索引擎进行搜索 。如:elasticsearch, solar。

10.查询某个压缩包中压缩的文本文件中是否含有某个字符串

分析:

11.如何经过linux命令将一个文件传输到另一台服务

分析:scp

12.问到了mq,不过我确实是没作过也没看过,因此就没往下问

13.判断链表有环

分析:

方案1:

遍历链表中每个 节点,而后放到一个 hashmap(我面试当时说的是数组)中,而后key重复了就说明有环.

方案2:

参考下面代码,利用temp2 步子大,跑得快,能够 套temp1的圈,总会有碰到 的时候(这个时候不必定就是 交叉的那个环点).

public static boolean hasLoop(Node n) {

// 定义两个指针tmp1,tmp2

Node tmp1 = n;

Node tmp2 = n.next;

while (tmp2 != null) {

tmp1 = tmp1.next; // 每次迭代时,指针1走一步,指针2走两步

tmp2 = tmp2.next.next;

if (tmp2 == null)

return false;// 不存在环时,退出

int d1 = tmp1.val;

int d2 = tmp2.val;

if (d1 == d2)

return true;// 当两个指针重逢时,说明存在环,不然不存在。

}

return true; // 若是tmp2为null,说明元素只有一个,也能够说明是存在环

}

14.写一段sql,实现相似于if else的功能,好比判断是否含有某条记录,有则更新,无则追加.

分析:这个须要用到存储过程:

15.代码审查,代码走查等,工具

16.单元测试,Junit,mock

17.异常和错误的继承关系,并说几种运行时异常

分析:

18.dubbo服务提供者中的异常设置,消费者捕获后如何处理

分析:

18.1根据不一样状况抛出不一样的异常信息,包含自定义异常

18.2好比根据不一样的自定义异常来判断是否须要回滚或者重试等

相关文章
相关标签/搜索