YY欢聚时代一年多前去面试过一次,当时鄙视了,在现在的公司呆了1年半了,感觉做得很不爽,而且薪资又不满意,所以想找个新工作,就想去YY面试。
下面将两次YY面试的经历写出来,包括一次初试和一次复试的面试题目。
一、2015年11月21日上午初试的面试题如下:
1. 做一下自我介绍
画出正在做的B2B平台的架构图,包括各子系统(ec,buyer,seller,message,order)、SOA(dubbo)、缓存redis、消息rabbitmq、单点登陆CAS、负载均衡nginx,mysql数据库读写分离,邮件服务器postfix
2. 单点登陆的原理
https://blog.csdn.net/brushli/article/details/50612096
TGT(cookie)+ST
两种方式确保安全性
2.1 使用HTTP传输
2.2 设置http-only属性,防止通过JS脚本读取cookie信息,防止XSS脚本攻击。
https://www.cnblogs.com/ziyoublog/p/11389695.html
3. 如何防止cookie被盗用
3.1 重点信息最好不要保存在cookie中
比如密码,如果实在要存放在cookie,则可以对值进行加密,字段名称可以不要显示出有意义的字段,比如username=XXX,改成param1=md5(username)。
3.2 加密的内容可以与本地IP地址绑定
4. Cookie和Session的区别
cookie保存在浏览器,在客户端;session保存在服务器。
Cookie类的setMaxAge( int expiry )
* //expiry默认值为 -1;
* 1.如果expiry大于0,则保存有效期为expire时间长度,单位毫秒;
* 2.如果expiry等于0,则指示浏览器删除当前cookie;
* 3.如果expiry小于0,则指示浏览器不保存该cookie到硬盘,就保存在内存中,浏览器关闭就消失;
5. Session共享及其好处
集中式部署,数据共享,减少单点故障。
6. Mysql主从数据同步的方式
binlog,MySQL 主从复制主要有以下几种方式:
6.1 基于 SQL 语句的复制(statement-based replication, SBR);
SBR 的优点:历史悠久,技术成熟 binlog 文件较小
binlog 中包含了所有数据库更改信息,可以据此来审核数据库的安全等情况
binlog 可以用于实时的还原,而不仅仅用于复制
主从版本可以不一样,从服务器版本可以比主服务器版本高
6.2 基于行的复制(row-based replication, RBR);
6.3 混合模式复制(mixed-based replication, MBR);
基于 SQL 语句的方式最古老的方式,也是目前默认的复制方式,后来的两种是 MySQL 5 以后才出现的复制方式。
https://blog.csdn.net/ztianming/article/details/72876609
主从同步存在的问题:延时
存在的原因:存在大事务,比如数据归档任务
解决办法:监控参数Seconds_Behind_Master,当成是主从同步的延时时间,单位是秒。
7. Spring 控制器的加载过程
web.xml--》context-param(加载配置文件applicationContext.xml)--》listener(监听对象,比如创建session)--》filter(监听编码和权限,针对url)--》Servlet(加载Controller)
8. Spring 实例是单例还是多例?会不会有线程问题
spring默认是单例,可以配置是多例,在单例的情况下,会有多线程问题,比如在Controller中定义一个时间转换的全局变量。
9. 如何进行跨机房数据同步?如何保证数据访问的一致性
基于binlog,使用SQL进行数据同步,但会存在延时,网络延时可以达到20~30ms,执行SQL的时间依赖于是否存在大事务, 要做好监控。
10. 数据库索引有什么好处?
提高查询速度,避免全表扫描。
Mysql的innodb存储引擎使用B+树索引
B-树索引和B+树索引的主要区别是
(1)B-树索引可能不需要搜查到叶子结点就结束,但B+树索引一定是查找到叶子结点才结束。
(2)B+树索引的叶子结点存在一个指向相邻叶子结点的指针,方便做范围查找,提高区间查询效率。
聚簇索引和非聚簇索引
(1)聚簇索引的主索引文件和数据文件为同一份文件,聚簇索引主要用在Innodb存储引擎中。
(2)非聚簇索引就是指B+Tree的叶子节点上的data,并不是数据本身,而是数据存放的地址。
Mysql 索引:https://blog.csdn.net/brushli/article/details/39677387
11. Mysql如何查看执行计划?
sql前面添加explain,看是否中索引以及预估的扫描行数。
12. Mysql执行计划的的顺序
13. 如何查看Mysql中SQL执行的快慢?
14. SQL执行过程net和wait for table的区别?
15. IO与NIO的区别?NIO中select的原理?NIO缓冲区的默认大小?
IO面向数据流,并且是阻塞的;NIO面向缓冲区,并且是非阻塞的。
NIO先从Channel读取数据到缓冲区Buffer,随后在缓冲区中Buffer中处理数据。
Channel类型包括FileChannel、DatagramChannel、SocketChannel、ServerSocketChannel
Buffer类包括JAVA七大数据类型,包括ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、ShortBuffer、MappedByteBuffer,除了Boolean。
创建Selector--》向Selector注册通道--》注册事件SelectionKey(Connect、Accept、Read、Write)--》选择通道--》--》选择事件KEY
16. 使用什么数据库连接池?连接池的工作原理?常用连接池C3PO,proxool与JNDI的区别?
使用连接池:HiKariCP
阿里Druid:CopyOnWriteArrayList
DBCP:LinkingBlockingQueue,无论是空闲连接还是已使用的连接,都是存放加锁的ConcurrentHashMap或LinkedBlockingDeque中,并发量低,性能不好,适用于小型系统。从数据库获取连接的过程中还加了synchronized同步锁,如果网络容易中断的场景下,一旦与数据库建立的网络出现问题,容易导致死锁。
HikariCP:ThreadLocal、CAS、CopyOnWriteArrayList
17. 缓存redis如何应对系统崩溃后的快照问题?
redis提供两种将内存数据导出到硬盘实现数据备份的方法:
(1)RDB方式(默认)
save 300 10 # 300秒内有至少10个键被更改则进行快照
将内存数据通过压缩后写入dump.rdb文件中,redis重启后,会从快照文件dump.rdb中读取数据进入内存。
生成快照时,是会阻塞redis其他操作的。如果redis挂掉,最后一次快照之后的数据会丢失,需要通过AOF方式补充。
(2)AOF方式(append