京东社招面试经历分享(Java)

1、手撕代码。牛客题霸上的原题,可以去看看:NC91 最长递增子序列

2、redis主从复制,主从同步?

(1)从节点执行slaveofmasterIP,保存主节点信息

(2)从节点中的定时任务发现主节点信息,建立和主节点的socket连接

(3)从节点发送Ping信号,主节点返回Pong,两边能互相通信

(4)连接建立后,主节点将所有数据发送给从节点(数据同步)

(5)主节点把当前的数据同步给从节点后,便完成了复制的建立过程。接下来,主节点就会持续的把写命令发送给从节点,保证主从数据一致性。

主从刚刚连接的时候,进行全量同步(RDB);全同步结束后,进行增量同步(AOF)


3、binlogredolog的区别?

1redolog是在InnoDB存储引擎层产生,而binlogMySQL数据库的上层服务层产生的。

2)两种日志记录的内容形式不同。MySQLbinlog是逻辑日志,其记录是对应的SQL语句。而innodb存储引擎层面的重做日志是物理日志。

两种日志与记录写入磁盘的时间点不同,binlog日志只在事务提交完成后进行一次写入。而innodb存储引擎的重做日志在事务进行中不断地被写入,并日志不是随事务提交的顺序进行写入的。

3binlog不是循环使用,在写满或者重启之后,会生成新的binlog文件,redolog是循环使用。

4binlog可以作为恢复数据使用,主从复制搭建,redolog作为异常宕机或者介质故障后的数据恢复使用。


4、高并发HashMap的环是如何产生的?

HashMap的环:若当前线程此时获得ertry节点,但是被线程中断无法继续执行,此时线程二进入transfer函数,并把函数顺利执行,此时新表中的某个位置有了节点,之后线程一获得执行权继续执行,因为并发transfer,所以两者都是扩容的同一个链表,当线程一执行到e.next = new table[i] 的时候,由于线程二之前数据迁移的原因导致此时new table[i] 上就有ertry存在,所以线程一执行的时候,会将next节点,设置为自己,导致自己互相使用next引用对方,因此产生链表,导致死循环。


5、为什么不能两次握手?

1TCP是一个双向通信协议,通信双方都有能力发送信息,并接收响应。如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。

2)这主要是为了防止已失效的请求连接报文忽然又传送到了,从而产生错误。

假定AB发送一个连接请求,由于一些原因,导致A发出的连接请求在一个网络节点逗留了比较多的时间。此时A会将此连接请求作为无效处理 又重新向B发起了一次新的连接请求,B正常收到此连接请求后建立了连接,数据传输完成后释放了连接。如果此时A发出的第一次请求又到达了BB会以为A又发起了一次连接请求,如果是两次握手:此时连接就建立了,B会一直等待A发送数据,从而白白浪费B的资源。 如果是三次握手:由于A没有发起连接请求,也就不会理会B的连接响应,B没有收到A的确认连接,就会关闭掉本次连接。

#京东##社招##Java工程师##秋招#
全部评论

相关推荐

投递美团等公司10个岗位
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务