面试经历---YY欢聚时代(2015年11月21日上午初试、25日下午复试)

本文详细记录了作者在YY欢聚时代面试的两次经历,包括初试和复试的面试题目。内容涵盖单点登录原理、数据库主从同步、Spring框架、MySQL索引、缓存Redis、线程与并发、NIO、数据库连接池等多个技术点,全面展现了面试的难度和深度。面试题目丰富,涵盖了系统架构、安全、数据库管理、数据同步、Java技术等多个方面。
摘要由CSDN通过智能技术生成

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值