首页 > 百度提前批 Java 一二面凉经
头像
小牛子练习生
编辑于 2021-08-27 17:08
+ 关注

百度提前批 Java 一二面凉经

8-18被捞

一面8-19 1h

晚上8点视频面,辛苦了

  • 实习经历

  • 说说日志 undo log、redo log(回滚/归档)

  • 项目用的Redis存的什么数据结构(那肯定是string)

  • 项目Redis用在什么地方?

  • Redis基本数据类型

  • Zset底层数据结构(跳表+hashmap)

  • 过期键处理策略(内存淘汰机制)

  • 跑3个服务,怎么保证同一时刻只有一个请求进来?(分布式锁,Redis/Redisson)

  • 有哪些分布式锁?(Redis跟他儿子Redisson,应该还有zookeeper、数据库锁)

  • Redis分布式锁存些什么?怎么实现的(setnx,key锁名,value=uuid+线程名)

  • 那你讲讲什么是分布式?(分布在不同机器、硬件上的服务,通过远程调用实现通信)

  • Redis做分布式锁,加锁宕机怎么办?(设置过期时间防止死锁)

  • 那执行业务时间过长怎么办?(看门狗机制,过期时间30s,间隔10s检测服务是否存活)

  • Redis跟Memcached区别(没用过MC)

  • 持久化机制(RDB、AOF)

  • 知道Lua脚本吗?(将一组命令打包作为整体,原子执行,运行时不会被其他请求插入;减少网络io;复用)

  • MySQL底层索引结构(b+树)

  • 为什么不用b树(链表串叶子节点、提高查询效率,降低树高度;磁盘io少没说)

  • 间隙锁知道吗?(record lock,gap lock、next-key lock都抡一下)

  • 怎么解决Redis宕机后服务不可用问题(吹)

  • Java对象存储在内存中的结构(说了堆,应该讲Java内存布局,对象头之类的)

  • Java对象包含什么?例如Java对象头(对象头、实例数据、对齐填充;MarkWord、类元指针,数组长度)

  • MarkWord里有什么?(锁标志等信息、hashcode、分代年龄、指向锁的指针)

  • 锁升级?(无锁、偏向锁、轻量级锁、重量级锁)

  • synchronized底层加锁原理(ObjectMonitor获取监视器、mutex lock)

  • 你用过什么Java的锁?(ReentrantLock、ReentrantReadWriteLock、StampedLock。。。)

  • 循环CAS循环几次?(失败自旋无限次,比如说AtomicInteger的getAndAddInt,但是可以设置阈值)

  • 这些锁跟synchronized区别(进入的线程状态不同说起,到LockSupport、UnsafeCAS)

  • synchronized可以加在代码块上吗?

  • 快排+单词逆序+三个字母全排列(谢谢放过)

  • 反问

二面8-23 30min

下午5点电话面

  • 实习经历

  • MySQL如何保证事务一致性(通过aid保证c、undo log回滚日志/redo log归档日志。加餐:隔离性加锁、原子性undo log回滚、持久性redo log归档)
  • 事务四种隔离级别(读未提交、读已提交、可重复读、串行化)

  • MySQL默认隔离级别(可重复读Repeated-Read)
  • 如何保证序列化(应该是Serializable)?(加表锁,使事务串行执行)

  • SpringBoot项目中你怎么使用事务?(声明式事物加个注解@Transactional实现事务管理)

  • 加一个注解就会生效吗?(不是,还需要数据源支持事务;无需配置,AOP拦截方法前后加入事务,根据执行情况进行回滚/提交;Springboot默认开启事务管理,也可以配置发生某些异常时不回滚rollbackfor)

  • 项目什么场景下用到事务?(复合修改操作/增删改,有异常回滚;查询可以容忍数据丢失)

  • 项目

  • SQL:预约记录,求最多预约记录的用户id(大佬们,求更好的答案)
SELECT user_id FROM my_record 
GROUP BY user_id ORDER BY COUNT(*) DESC LIMIT 1;

-- 子查询方式
select user_id from 
(
SELECT user_id,COUNT(*) as ct FROM record 
GROUP BY user_id
) t 
ORDER BY t.ct DESC LIMIT 1;

  • LinkedList存储Integer,求两个list交集
public static void main(String[] args) {
    LinkedList<Integer> list1 = new LinkedList<>();
    LinkedList<Integer> list2 = new LinkedList<>();
    list1.add(1);
    list1.add(3);
    list1.add(5);
    list1.add(7);

    list2.add(2);
    list2.add(3);
    list2.add(5);

    // api,保留传入list相同元素,其他删除(求交集存储在调用者上)
    // list1.retainAll(list2);

    // contains判断,不存在则删除
    // 使用迭代器遍历list,避免删除后边界、下标问题
    Iterator<Integer> iterator = list1.iterator();
    while (iterator.hasNext()) {
        if (!list2.contains(iterator.next())) {
            iterator.remove();
        }
    }
}
回答的不好,贴一下对问题的理解吧

更多模拟面试

全部评论

(11) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

近期精华帖

热门推荐