前言
卑微本科上岸小总结!目前只拿到字节跳动的offer,但是我自我感觉还能接受,下面是我总结的一些面试题和经验,希望对在找工作的你有些帮助!
项目:
项目难点
定时任务的技术点
单机部署的项目,如果部署两个节点会有什么问题(他就想问多节点执行同步任务用什么框架)
网页上两个账号同时登录,怎么做到第二个账号把第一个顶下去?
基础:
多线程
线程池参数
FixedThreadpool有什么问题,用了linkedBlockingQueue,会oom?(问我拒绝策略是什么,我说抛出异常,源码确实是这样,但是他是linked Blocking Queue,根本不能执行拒绝策略)
Mysql
查询慢是什么原因
怎么知道索引哪里慢,怎么知道哪里索引没用上(explain)
Redis
redis和MySQL数据一致性
redis用过吗,我说知道某些场景怎么解决,他直接猜出来我要说缓存雪崩,击穿什么的了,直接跳过
Spring
动态代理
循环依赖怎么办
Java
ArrayList和LinkedList介绍
Hashmap介绍
Concurrentmap介绍
线程安全用哪个?
cas问题?
CAS的缺点有如ABA问题,自旋锁消耗问题、多变量共享一致性问题.
1.ABA:
问题描述:线程t1将它的值从A变为B,再从B变为A。同时有线程t2要将值从A变为C。但CAS检查的时候会发现没有改变,但是实质上它已经发生了改变 。可能会造成数据的缺失。
解决方法:CAS还是类似于乐观锁,同数据乐观锁的方式给它加一个版本号或者时间戳,如AtomicStampedReference
2.自旋消耗资源:
问题描述:多个线程争夺同一个资源时,如果自旋一直不成功,将会一直占用CPU。
解决方法:破坏掉for死循环,当超过一定时间或者一定次数时,return退出。JDK8新增的LongAddr,和ConcurrentHashMap类似的方法。当多个线程竞争时,将粒度变小,将一个变量拆分为多个变量,达到多个线程访问多个资源的效果,最后再调用sum把它合起来。
虽然base和cells都是volatile修饰的,但感觉这个sum操作没有加锁,可能sum的结果不是那么精确。
2.多变量共享一致性问题:
解决方法: CAS操作是针对一个变量的,如果对多个变量操作,
1)可以加锁来解决。
2)封装成对象类解决。
我的面试经验汇总
下面先给大家上一个总的目录大纲,基础的东西就不进行过多的赘述,我们将会从面试必问的说起,同时由于每篇的内容过多,我们也只说重点,太过基础的内容谁都会,我就不多敲字浪费大家的时间了!
有需要的朋友点击这里自取就好了,希望资料对你有帮助!
SpringCloud
Redis
JVM
MySQL
Zookeeper
Kafka
Dubbo
spring
Rabbitmq
springboot
最后
由于文章篇幅有限,PDF的内容又很多,全部手敲下来很累…所以需要阅读阅读学习的,大家“一件三连后:“查看下方””即可拿到手之后自己学习吧,博主真的打字打累了。
有需要的朋友点击这里自取就好了,希望资料对你有帮助!
预祝大家前程似锦,工作顺利!