去YY欢聚时代的⼀次⾯试经历
⼀、2015年11⽉21⽇上午初试的⾯试题如下:
1.  做⼀下⾃我介绍
画出正在做的B2B平台的图,包括各⼦系统(ec,buyer,seller,message,order)、SOA(dubbo)、缓存、消息rabbitmq、单点登陆CAS、负载均衡nginx,读写分离,邮件服务器postfix
2.  单点登陆的原理
3.  如何防⽌cookie被盗⽤
4.  Cookie和Session的区别
5.  Session共享及其好处
6.  Mysql主从数据同步的⽅式
7.    控制器的加载过程
colspan属性规定单元格可横跨的列数
8.  Spring 实例是单例还是多例?会不会有线程问题
9.  如何进⾏跨机房数据同步?如何保证数据访问的⼀致性
10. 数据库索引有什么好处?
正则表达式通俗解释
11. Mysql如何查看执⾏计划?
12. Mysql执⾏计划的的顺序
13. 如何查看Mysql中SQL执⾏的快慢?
14. SQL执⾏过程net和wait for table的区别?
15. IO与NIO的区别?NIO中select的原理?NIO缓冲区的默认⼤⼩?
mysql数据库默认端口16. 使⽤什么数据库连接池?连接池的⼯作 原理?常⽤连接池C3PO,proxool与JNDI的区别?
17. 缓存redis如何应对系统崩溃后的快照问题?
18. Redis的默认键⼤⼩是多少?
19. 线程中sleep与wait的区别?
20. Restful与dubbo的对⽐?
⼆、2015年11⽉25⽇下午复试的题⽬
1.IO和NIO的区别和原理?
(1)    IO是⾯向流的,NIO是⾯向缓冲区的
IO⾯向流意味着每次从流中读⼀个或多个字节,直⾄读取所有字节,它们没有被缓存在任何地⽅。此外,它不能前后移
动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到⼀个缓冲区。  NIO的缓冲导向⽅法略有不同。
数据读取到⼀个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要
检查是否该缓冲区中包含所有您需要处理的数据。⽽且,需确保当更多的数据读⼊缓冲区时,不要覆盖缓冲区⾥尚未处
理的数据。
(2)    阻塞与⾮阻塞IO
Java IO的各种流是阻塞的。这意味着,当⼀个线程调⽤read() 或 write()时,该线程被阻塞,直到有⼀些数据被读取,
或数据完全写⼊。该线程在此期间不能再⼲任何事情了。 Java NIO的⾮阻塞模式,使⼀个线程从某通道发送请求读取数据,但是它仅能得到⽬前可⽤的数据,如果⽬前没有数据可⽤时,就什么都不会获取。⽽不是保持线程阻塞,所以直⾄
数据变的可以读取之前,该线程可以继续做其他的事情。 ⾮阻塞写也是如此。⼀个线程请求写⼊⼀些数据到某通道,但
不需要等待它完全写⼊,这个线程同时可以去做别的事情。 线程通常将⾮阻塞IO的空闲时间⽤于在其它通道上执⾏IO操
不需要等待它完全写⼊,这个线程同时可以去做别的事情。 线程通常将⾮阻塞IO的空闲时间⽤于在其它通道上执⾏IO操作,所以⼀个单独的线程现在可以管理多个输⼊和输出通道(channel)。
(3)    使⽤单线程Selector来管理多个通道,减少系统开销
2. NIO中select的实现机制
(1)  创建Selector
(2)  向Selector注册通道
(3)  SelectionKey
(4)  通过Selector选择通道
(5)  wakeup
accessible同义词(6)  close()
3.多线程中syschronize、volitile、lock的区别和应⽤
1、ReentrantLock拥有Synchronized相同的并发性和内存语义,此外还多了锁投票,定时锁等候和中断锁等候
线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,
如果使⽤ synchronized,如果A不释放,B将⼀直等下去,不能被中断
如果使⽤ReentrantLock,如果A不释放,可以使B在等待了⾜够长的时间以后,中断等待,⽽⼲别的事情
ReentrantLock获取锁定与三种⽅式:
a)  lock(), 如果获取了锁⽴即返回,如果别的线程持有锁,当前线程则⼀直处于休眠状态,直到获取锁
b) tryLock(), 如果获取了锁⽴即返回true,如果别的线程正持有锁,⽴即返回false;
c)tryLock(long timeout,TimeUnit unit),  如果获取了锁定⽴即返回true,如果别的线程正持有锁,会等待参数给
定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false;mysql面试题导图
d) lockInterruptibly:如果获取了锁定⽴即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者
当前线程被别的线程中断
2、synchronized是在JVM层⾯上实现的,不但可以通过⼀些监控⼯具监控synchronized的锁定,⽽且在代码执⾏时
出现异常,JVM会⾃动释放锁定,但是使⽤Lock则不⾏,lock是通过代码实现的,要保证锁定⼀定会被释放,就必须将unLock()放到finally{}中
3、在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,但是在资源竞争很激烈的情况
下,Synchronized的性能会下降⼏⼗倍,但是ReetrantLock的性能能维持常态;
4.乐观锁和悲观锁的区别?
2怎么转化为二进制5.数据库中事务的级别
1.    读未提交
2.    读已提交
3.    可重复读
4.    读序列化
6. 数据库⾏级锁的应⽤,修改⼀条记录时是否会加上⾏级锁
⾏级锁的优点有:
在很多线程请求不同记录时减少冲突锁。
事务回滚时减少改变数据。
使长时间对单独的⼀⾏记录加锁成为可能。
⾏级锁的缺点有:
⽐页级锁和表级锁消耗更多的内存。
锁是计算机协调多个进程或线程并发访问某⼀资源的机制,不同的数据库的锁机制⼤同⼩异。由于数据库资源是⼀种供许多⽤户共享的资源,所以如何保证数据并发访问的⼀致性、有效性是所有数据库必须解决的⼀个问题,锁冲突也是影响数据库并发访问性能的⼀个重要因素。了解锁机制不仅可以使我们更有效的开发利⽤数据库资源,也使我们能够更好地维护数据库,从⽽提⾼数据库的性能。
地维护数据库,从⽽提⾼数据库的性能。
上述三种锁的特性可⼤致归纳如下:
1) 表级锁:开销⼩,加锁快;不会出现死锁;锁定粒度⼤,发⽣锁冲突的概率最⾼,并发度最低。
2) ⾏级锁:开销⼤,加锁慢;会出现死锁;锁定粒度最⼩,发⽣锁冲突的概率最低,并发度也最⾼。
3) 页⾯锁:开销和加锁时间界于表锁和⾏锁之间;会出现死锁;锁定粒度界于表锁和⾏锁之间,并发度⼀般。
三种锁各有各的特点,若仅从锁的⾓度来说,表级锁更适合于以查询为主,只有少量按索引条件更新数据的应⽤,如WEB应⽤;⾏级锁更适合于有⼤量按索引条件并发更新少量不同数据,同时⼜有并发查询的应⽤,如⼀些在线事务处理(OLTP)系统。
/* ==================== MySQL InnoDB 锁表与锁⾏ ======================== */
由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执⾏Row lock (只锁住被选取的资料例) ,否则MySQL将会执⾏Table Lock (将整个资料表单给锁住)。
7.Spring事务的实现⽅式和实现原理
8.Spring AOP的实现
9.HTTP长连接和短连接的区别
TCP/IP
TCP/IP是个协议组,可分为三个层次:⽹络层、传输层和应⽤层。
在⽹络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
在传输层中有TCP协议与UDP协议。
在应⽤层有:TCP包括FTP、HTTP、TELNET、SMTP等协议
UDP包括DNS、TFTP等协议
短连接
连接->传输数据->关闭连接
HTTP是⽆状态的,浏览器和服务器每进⾏⼀次HTTP操作,就建⽴⼀次连接,但任务结束就中断连接。
也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。
长连接
连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。
长连接指建⽴SOCKET连接后不管是否使⽤都保持连接,但安全性较差。
http的长连接
HTTP也可以建⽴长连接的,使⽤Connection:keep-alive,HTTP 1.1默认进⾏持久连接。HTTP1.1和HTTP1.0相⽐较⽽⾔,最⼤的区别就是增加了持久连接⽀持(貌似最新的 http1.0 可以显⽰的指定 keep-alive),但还是⽆状态的,或者说是不可以信任的。
什么时候⽤长连接,短连接?
长连接多⽤于操作频繁,点对点的通讯,⽽且连接数不能太多情况,。每个TCP连接都需要三步握⼿,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不⽤建⽴TCP连接。例如:数据库的连接⽤长连接, 如果⽤短连接频繁的通信会造成socket错误,⽽且频繁的socket 创建也是对资源的浪费。
⽽像WEB⽹站的http服务⼀般都⽤短链接,因为长连接对于服务端来说会耗费⼀定的资源,⽽像WEB
⽹站这么频繁的成千上万甚⾄上亿客户端的连接⽤短连接会更省⼀些资源,如果⽤长连接,⽽且同时有成千上万的⽤户,如果每个⽤户都占⽤⼀个连接的话,那可想⽽知吧。所以并发量⼤,但每个⽤户⽆需频繁操作情况下需⽤短连好。
总之,长连接和短连接的选择要视情况⽽定。
10.Spring事务的种类和各⾃的区别
11.Redis的集⽅式,主点挂掉后如何将备点切换成主点
12.Mysql的集⽅式,主备的数据同步⽅式,主库挂掉后如何切换从库为主库,有没做过两主两备的集?
13.如何分析⼀条慢查询的SQL,MYSQL执⾏计划的类别(all Table,using index,using where)
14.线程挂掉后,如何在虚拟机上分析。
15.CAP⼀致性、可⽤性、分区容忍性,系统中是牺牲了哪⼀种。
16.Freemarker的缓存机制
17. Zookeeper的实现原理
三、HR⾯试
1.  个⼈的未来规划,偏技术还是偏管理?
2.  现在薪酬的组成,基本⼯资+补贴
3.  想离职的原因?
4.  期望的薪酬情况
个⼈问题
5.  社保和公积⾦的基数
基数按⼯资基数交,公积⾦的⽐率是公司交10%,个⼈交10%~12%
另外公司有四百多补贴
6.  ⼊职后进⼊哪个团队?从事什么项⽬的开发?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。