蚂蚁Java一面 1.二叉搜索树和平衡二叉树有什么关系,强平衡二叉树(AVL树)和弱平衡二叉树 (红黑树)有什么区别 2. B树和B+树的区别,为什么MySQL要使用B+树 3. HashMap如何解决Hash冲突 通过引入单向链表来解决Hash冲突。当出现Hash冲突时,比较新老key值是否相等, 如果相等,新值覆盖旧值。如果不相等,新值会存入新的Node结点,指向老节点,形成 链式结构,即链表。 当Hash冲突发生频繁的时候,会导致链表长度过长,以致检索效率低,所以JDK1.8之 后引入了红黑树,当链表长度大于8时,链表会转换成红黑书,以此提高查询性能。 4. epoll和poll的区别,及其应用场景 select和epoll都是I/O多路复用的方式,但是select是通过不断轮询监听socket实 现,epoll是当socket有变化时通过回掉的方式主动告知用户进程实现 参考文章:https://www.cnblogs.com/hsmwlyl/p/10652503.html 5.简述线程池原理,FixedThreadPool用的阻塞队列是什么? 6. sychronized和ReentrantLock的区别 (1)ReentrantLock显示获得、释放锁,synchronized隐式获得释放锁 (2)ReentrantLock可响应中断、可轮回,synchronized是不可以响应中断的,为处理 锁的不可用性提供了更高的灵活性 (3)ReentrantLock是API级别的,synchronized是JVM级别的 (4)ReentrantLock可以实现公平锁 (5)ReentrantLock通过Condition可以绑定多个条件 7. sychronized的自旋锁、偏向锁、轻量级锁、重量级锁,分别介绍和联系 8. HTTP有哪些问题,加密算法有哪些,针对不同加密方式可能产生的问题,及其 HTTPS是如何保证安全传输的 HTTP的不足: 通信使用明文,内容可能会被窃听; 不验证通信方的身份,因此有可能遭遇伪装; 无法证明报文的完整性,有可能已遭篡改; 常用加密算法:MD5算法、DES算法、AES算法、RSA算法  蚂蚁Java二面 1.设计模式有哪些大类,及熟悉其中哪些设计模式 创建型模式、结构型模式、行为型模式 2. volatile关键字,他是如何保证可见性,有序性 3. Java的内存结构,堆分为哪几部分,默认年龄多大进入老年代 Java的内存结构:程序计数器、虚拟机栈、本地方法栈、堆、方法区。 Java虚拟机根据对象存活的周期不同,把堆内存划分为几块,一般分为新生代、老年代 和永久代。 默认的设置下,当对象的年龄达到15岁的时候,也就是躲过15次Gc的时候,他就 会转移到老年代中去躲过15次GC之后进入老年代。 4. ConcurrentHashMap如何保证线程安全,jdk1.8有什么变化 JDK1.7:使用了分段锁机制实现ConcurrentHashMap,ConcurrentHashMap在对象中保存了一个Segment数组,即将整个Hash表划分为多个分段; 而每个Segment元素,即每个分段则类似于一个Hashtable;这样,在执行put操作时 首先根据hash算法定位到元素属于哪个Segment,然后对该 Segment加锁即可。因此,ConcurrentHashMap在多线程并发编程中可是实现多线程 put操作,不过其最大并发度受Segment的个数限制。 JDK1.8:底层采用数组+链表+红黑树的方式实现,而加锁则采用CAS和synchronized 实现 5.为什么ConcurrentHashMap底层为什么要红黑树 因为发生hash冲突的时候,会在链表上新增节点,但是链表过长的话会影响检索效 率,引入红黑书可以提高插入和查询的效率。 6.如何做的MySQL优化 MySQL的优化有多种方式,我们可以从以下几个方面入手: 存储引擎的选择、字段类型的选择、索引的选择、分区分表、主从复制、读写分离、 SQL优化。详细优化请查看参考文章 7.讲一下oom以及遇到这种情况怎么处理的,是否使用过日志分析工具  蚂蚁Java三面 1.项目介绍 2.你们怎么保证Redis缓存和数据库的数据一致性? 可以通过双删延时策略来保证他们的一致性。 3. Redis缓存雪崩?击穿?穿透? 缓存雪崩:缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数 据库短时间内承受大量请求而崩掉。 缓存击穿:key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这 些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求 可能会瞬间把后端DB压垮。 缓存穿透:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不 到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信 息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。 4.你熟悉哪些消息中间件,有做过性能比较? 差不多整个过程就是这样啦,希望对大家有所帮助吧。
点赞 8
评论 6
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务