一面1)HTTP三向握手,状态码,交互细节HTTP三向握手就是TCP三向握手、HTTP是一个应用层协议,它的任务是与服务器交换信息。至于如何连接服务器,如何保证数据正确,HTTP不关心。事实上,它始终假定数据已正确传输。TCP的任务就是保证连接的可靠性,包括防丢失和防错误。为此,在初始连接上执行3次握手,以确保它确实连接到目标机器。TCP不关心连接后传输的具体数据的状态码:1xx信息提示,2xx请求成功,3xx请求重定向,4xx服务器异常,5xx客户端异常交互细节应该是TCP三次握手2)为什么三次握手3)四次挥手,状态码,传输细节,为什么三次握手四次握手4)数据链路层如何传输数据,下面说说5)网关如何将IP地址转换成对应的MAC在ARP协议地址的要点:ARP缓存、广播ARP请求报文、ARP响应报文6)如果数据包不在当前子网,如何转发到目标子网的网关一、如何判断目的IP地址和当前主机的IP地址是否在同一个子网(网段)?使用子网掩码来判断两台主机是否在同一个子网中。如果两台主机的IP地址与子网掩码“与”的结果相同,则说明两台主机在同一子网中。第二,网关到底是什么?网关本质上是从一个网络到另一个网络的IP地址(通常是路由器的IP地址)。默认网关(DefaultGateway)是指如果主机找不到可用的网关,它会将数据包发送到默认的指定网关,由网关处理数据包。计算机发送数据时,根据DestinationIP地址,使用子网掩码判断目标主机是否在本地子网中,如果目标主机在本地子网中,则直接发送(通过二层设备-转变)。如果目标不在本地子网中,则将信息发送到默认网关/路由器,路由器将其转发到其他网络以进一步搜索目标主机。7)如何实现MySQL的行锁?InnoDB行锁是通过在索引上锁定索引项来实现的。8)再说说MySQL的事务。先讲解ACID特性,再说说MySQL是如何保证ACID的:lock保证隔离(可扩展的四种并发问题,四种隔离级别,行锁的三种算法,着重提到Next-KeyLock解决幻读问题),redolog保证持久性和原子性(持久性对应WAL和CheckPoint,原子性对应redolog两阶段提交),undolog(MVCC)保证一致性9)你了解MySQL索引吗,索引是如何实现的10)索引有哪些,介绍聚簇索引、非聚簇索引、Unique索引、联合索引、覆盖索引、前缀索引11)联合索引中间能不能有空值,为什么,你测试过吗?12)B+树的特点,原理13)B+树索引和Hash索引的区别,优缺点14)你了解死锁(DeadLock)什么是死锁吗?两个线程互相请求对方的资源,不释放自己的资源,形成循环等待,导致死锁。死锁的四个必要条件?互斥条件、请求和保持条件、无抢占条件、循环等待条件如何避免/防止死锁?破坏四个必要条件之一:破坏互斥条件:破坏请求保持条件不可行:线程启动时,一次性请求所有需要的资源,不允许请求其他资源操作过程中。销毁非剥夺条件:requestnew当资源不满足时,必须释放所有持有的资源,以后需要的时候再重新申请,销毁循环。等待条件:对资源进行编号,只允许顺序申请资源15)MySQL中如何解决死锁16)经常遇到你有没有遇到过死锁,如何解决17)说说JVM垃圾清除18)什么是三者主要的垃圾收集算法:Mark-Sweep(非移动算法,不需要STW)Mark-Copy(新生代垃圾收集算法,移动算法,需要STW)Mark-Compact(移动算法,需要STW)19)介绍一下新生代是什么你知道的垃圾收集器有:Serial(Mark-Copy,单线程)ParNew(Mark-Copy,多线程)ParallelScavendge(Mark-Copy,多线程;关注吞吐量;自适应调整策略)oldage:SerialOld(Mark-Compact,single-threaded)ParallelOld(Mark-Compact,multi-threading)CMS?Mark-Sweep,Multithreading;?追求低延迟;?四个阶段(初始标记、并发标记、再标记、并发清除),第一和第三阶段需要STW;?使用“增量更新”解决“对象消失”问题;?一般SerialOld也设置做老年代收集计划,因为CMS会出现并发失败问题“ConcurrentModeFailure”(无法处理“浮动垃圾”,导致堆被完全占用而报错或者CMS垃圾回收操作时预留的内存无法使用)满足程序分配新对象的需要),此时会触发SerialOld使用Mark-Compact算法回收老年代;?CMS基于Mark-Sweep算法会产生大量空间碎片,往往老年代会有大量剩余空间,却找不到足够大的连续空间分配当前对象,不得不触发a全堆提前FullGC:G1?Mark-Copy,多线程;?四个阶段(initialmark,concurrentmark,finalmark,filterrecovery),第一、三、四阶段需要STW;?使用“原始快照”解决“物体消失”问题;?面向本地收藏Set、Region-based内存布局;?不单纯追求低时延,而是在时延可控的情况下获得尽可能高的吞吐量;执行负载高于CMS;?目前CMS在小内存应用中的性能仍有可能优于G1,而在大内存应用中,G1大多能发挥其优势。20)垃圾的判断方法,引用计数为什么GCRoot方法没有GCRoot那么多用,有什么缺点,为什么有两大方法:引用计数法(不能解决循环引用问题)可达性分析法?二阶段:根节点枚举、对象图遍历?可扩展根节点枚举必须进行STW(OopMap、安全点和安全区);三色标记法分析为什么对象图遍历理论上也要进行STW(浮动垃圾,对象消失),因为这个阶段耗时较长,所以设计了两种方案(增量更新,原始更新SATB)使得对象图遍历不需要STW21)你测试过JVM的垃圾清除吗?首先介绍为什么Redis是单线程的(重点:IO多路复用,文件事件处理器);那么可以介绍一下Redis除了基于内存和单线程之外还有哪些特性让它如此之快(Redis特殊设计的数据结构ziplist、skiplist、SDS等;Redis虚拟内存机制)23)Redis持久化两种持久化机制:RDB:存放数据库状态,二进制文件dump.rdb;SAVE,BGSAVEfork子进程间隔自动保存AOF:Appendwrite,storecommand(先写入AOFbuffer,根据appendfsync参数决定何时写入同步磁盘);AOF重写,fork子进程AOF后台重写(AOF重写缓冲区)24)算法题:删除链表倒数第k个节点总结:项目题我根本没问,计算机网络部分问的很详细问题!问我数据链路层的传输原理。我跌跌撞撞地跌跌撞撞。我没有很好地回答很多问题。算法题很简单。最后面试官说我回答的很好,但是有一些细节问题。Java学习资料我还需要学习和优化。小编为程序员朋友们准备了一些java复习资料,包括近年面试真??题、Java核心知识点、java视频面试题解析等资料。有需要的朋友可以【直接点这里】获取!!
