杭州小厂面试

- 你是如何解决缓存雪崩的问题的? (答均匀设计过期时间,设置缓存永久有效,服务降级,业务熔断限流)
- 问具体什么场景会实现雪崩? 感觉像是问我是不是真的有这个场景
- Redisson怎么实现一人一单
- Redisson挂了怎么办,我说数据库层面操作,或者mq, 面试官说直接用唯一索引就行
- MySQL的存储引擎 MyISAM和InnoDB有什么区别 (没答上来MyISAM,只说了InnoDB)
- InnoDB是如何保证ACID的
- MVCC是什么?(答了很多,面试官说Read_view没讲,可能是太紧张说的语序有问题)
- undolog保存了什么内容,应该是想问事务id
- MVCC什么是可见的,undolog能做什么
- MyISAM有什么日志,(回答都有binlog)
- 索引优势是什么?B+树,为什么不用红黑树
- 提醒我还有Hash索引,
- 如果我要实现索引实现 %+内容 (本来想的强制走索引,面试官说不对,引导我说 联合索引)一点点引导我说的
- 执行一条update语句,会发生什么(没有回答出来要检查 连接器:建立连接,管理连接、校验用户身份和对 SQL 查询语句进行词法分析、语法分析)
- join select 这些关键字执行的顺序是什么
- 手写一个单例模式 为什么要用volatile
- 怎么保证可见性,有序性,原子性
- synchronized了解吗,怎么实现的
- synchronized锁的优化,轻量级锁是什么,重量级锁是什么
- monitor变量是什么,mark word有什么字段
- 线程池使用,线程池参数,Executor的newFixedThreadPool会产生什么样的OOM,CPU的还是内存的
- ThreadPoolExecutor 参数设置,拒绝策略,为什么死锁
- 怎么把旧线程池弄到新的线程池上
- AQS原理
- AQS为什么用CLH, LockSupport.park后线程的状态,BLOCKED WAITING TIMED_WAITING三种状态是怎么产生的
- CountDownLatch是怎么实现的,问原理
- ThreadLocal内存泄漏怎么办,GC后还存在为什么,ThreadLocal作者自己做了什么努力
- ThreadLocal的哈希算法有什么特点
- 有没有用过 completablefuture,能做什么,和不用有什么区别
- 如果我去查询数据库,然后编排后面的任务,这些任务必须要等前面的做完才可以执行么,还是可以同时
- completablefuture异常处理和普通的try catch有什么区别
- Bean的生命周期
- AOP
- 为什么三级缓存,循环依赖二级缓存不行吗,Bean的生命周期的postprocess方法
全部评论
耐面王,好多都是模糊的
点赞 回复 分享
发布于 03-16 12:06 安徽
哪个小厂啊佬
点赞 回复 分享
发布于 03-15 10:32 浙江

相关推荐

04-27 16:50
已编辑
门头沟学院 Java
1. mysql删除表语句是什么?drop和truncate区别?2. 删除一行数据的sql3. 查询一张表所有的数据的sql4. 查询一张表有多少条数据sql。  count(1)和count(*)区别5. i++和++i区别6. 介绍下重载和重写。  构造方法可以重写重载吗?7. arraylist和linkedlist的区别8.解释一下深拷贝和浅拷贝9. 如果有三个线程,我如何能保证顺序执行.方法1: 使用join()join() 方法可以确保一个线程在另一个线程执行完毕后才开始执行。通过合理地调用 join(),可以实现线程的顺序执行。方法2:使用countdownlatch/semaphore方法3: 使用锁和原子类,wait() + notifyAll()方法4: 使用completablefuture10. 如果有一个 T1 线程,想把 T2 线程加到 T1 里面,怎么实现?方法1. 使用join()Thread t2 = new Thread(() -> {    // T2 线程的执行逻辑    System.out.println("T2 线程正在执行");});Thread t1 = new Thread(() -> {    try {        System.out.println("T1 线程开始执行");                // T1 线程在此处等待 T2 线程执行完成        t2.start();  // 启动 T2 线程        t2.join();    // T1 等待 T2 完成                System.out.println("T2 线程已完成,T1 继续执行");    } catch (InterruptedException e) {        e.printStackTrace();    }});t1.start();方法2. 使用future.get()ExecutorService executor = Executors.newSingleThreadExecutor();Future future = executor.submit(() -> {    // T2 线程的执行逻辑    System.out.println("T2 线程正在执行");});Thread t1 = new Thread(() -> {    try {        System.out.println("T1 线程开始执行");                // T1 线程在此处等待 T2 线程执行完成        future.get();  // 阻塞直到 T2 完成                System.out.println("T2 线程已完成,T1 继续执行");    } catch (InterruptedException | ExecutionException e) {        e.printStackTrace();    } finally {        executor.shutdown();    }});t1.start();方法3. 使用countdownlatchCountDownLatch latch = new CountDownLatch(1);Thread t2 = new Thread(() -> {    try {        System.out.println("T2 线程正在执行");    } finally {        latch.countDown();  // 完成时减少计数    }});Thread t1 = new Thread(() -> {    try {        System.out.println("T1 线程开始执行");                t2.start();  // 启动 T2 线程        latch.await();  // 等待 T2 完成                System.out.println("T2 线程已完成,T1 继续执行");    } catch (InterruptedException e) {        e.printStackTrace();    }});t1.start();11. a=a+b 和 a+=b的区别a = a + b,如果 a 和 b 的类型不同(如 a 是 int,b 是 double),需要显式强制类型转换,否则会编译报错。即:double a= 1;int b = 2;a = (double) (a+b); a += b,会自动执行隐式类型转换,将结果转换为 a 的类型。13. 数据库的三大范式如答案有错误欢迎指正
查看24道真题和解析
点赞 评论 收藏
分享
评论
4
20
分享

创作者周榜

更多
牛客网
牛客企业服务