经验累积
2023-12-11 12:19:29 0 举报
AI智能生成
非传统大学毕业,4年工作历史,薪资从13k增加到23k。2020年5月开始积极求职,不断面试多家公司,积累了宝贵的面试经验,具体细节请查看《面试累积》。
作者其他创作
大纲/内容
JUC并发编程
线程池
优势:1.线程复用。2.控制线程的最大数。3.管理线程。减少频繁创建销毁线程导致资源消耗,减少线程切换提高响应速度。方便管理线程。
线程池种类
Executors.newFixedThreadPool(int)固定数量线程池
Executors.newSingleThreadExecutor()单一化线程池
Executors.newCachedThreadPool()可缓存线程池
Executors.newWorkStealingPool(int)
Executor.newScheduledThreadPool()
7大参数
1.corePoolSize:线程池中常驻核心线程数
2.maximumPoolSize:线程池能够容纳同时执行的最大线程数。
3.keepAliveTime:多余的空闲线程的存活时间。
4.unit:keepAliveTime的单位
5.workQueue:任务队列,被提交但尚未被执行的任务
6.threadFactory:生成线程池中工作线程的线程工厂
7.handler:拒绝策略。
AbortPolicy(默认):直接抛出RejectedExecutionException异常阻止系统正常运行
CallerRunsPolicy:调用者运行,该策略既不会抛弃任务,也不会抛出异常,而是将某些任务回退给调用者,从而降低新任务的流量
DiscardOldestPolicy:抛弃队列中等待最久的任务,然后把当前任务加入队列中尝试再次提交当前任务
DiscardPolicy:直接丢弃任务,不予任何处理也不抛出异常。如果允许任务丢失,这是最好的一种方案
自定义线程池
为什么不使用已有的线程池
LinkedBlockingQueue:由链表结构组成的有界(大小默认值为Integer.MAX_VALUE)阻塞队列
maxinumPoolSize为Integer.MAX_VALUE。创建大量线程
配置线程池
CPU密集型
IO密集型
线程池底层原理
线程的生命周期
新创建了一个线程对象。新建状态
调用了该对象的start()方法。就绪状态
获得了cpu 执行。运行状态
阻塞状态
调用wait方法后。等待阻塞
运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。同步阻塞
运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时。其他阻塞
运行完run方法,或报异常。死亡状态
阻塞,非阻塞及异步,同步
线程不安全的集合类解决办法
List<String> list = Collections.synchronizedList(new ArrayList<>());
List<String> list = new CopyOnWriteArrayList<>();
new Vector<>();
Set<String> set = Collections.synchronizedSet(new HashSet<>());
Map<String, String> map = Collections.synchronizedMap(new HashMap<>());
Map<String, String> map = new ConcurrentHashMap<>();
Set<String> set = new CopyOnWriteArraySet<>();
CAS比较并交换(原子类的一个方法)
Unsafe类所有方法都是native修饰的,调用底层本地方法
原子引用
时间戳原子引用解决ABA
volatile
保证可见性
禁止指令重排
不保证原子性
jvm原理
jdk与jre的关系
java文件执行流程
jvm
redis
5种类型
RESTful API设计规范
URL中不使用动词修饰
GET读取(Read)
POST新建(Create)
PUT修改(Update)
DELETE删除(Delete)
PATCH部分更新(Update)
URL复数与多级
/articles/2要好于/article/2
层次不要过多,/articles?published=true要好于/articles/published
状态码
200正常返回
202服务器收到请求,等待处理
301永久重定向
302临时重定向
303参考定向url,让用户选择是否跳转
400坏请求服务器不接受
401未通过身份验证
403用户通过了身份验证,但是不具有访问资源所需的权限。
404未找到资源
405没有访问该方法的权限
429请求次数过多
500系统发生错误
503系统维护
202服务器收到请求,等待处理
301永久重定向
302临时重定向
303参考定向url,让用户选择是否跳转
400坏请求服务器不接受
401未通过身份验证
403用户通过了身份验证,但是不具有访问资源所需的权限。
404未找到资源
405没有访问该方法的权限
429请求次数过多
500系统发生错误
503系统维护
要返回json格式,报错不要返回200,给接口设计文档或者维护一个HATEOAS接口网站
spring cloud
服务于服务之间采用http协议的RESTful API相互协助
微服务理念
设计模式
单例 (Singleton)
懒汉
饿汉
工厂
工厂方法模式(Factory Method)
简单工厂
多个工厂
静态工厂
抽象工厂 (Abstract Factory)
建造者(Builder)
原型模式(Prototype)
适配器模式(Adapter)
代理模式(Proxy)
观察者模式(Observer)
docker
JAVA高级
enum枚举
反射
泛型
lambda表达式
这是模板水印,可删除
这是模板水印,可删除
mysql
myisam与innoDB
Mysql索引数据结构
B+Tree(B-Tree的变种)
B-Tree(多路平衡树)
红黑树(平衡二叉树)
二叉树
hash表
事务
事务隔离级别与锁
事务的特点
MVCC实现原理
表分区与分表
日志
mysql优化
分库分表
集合
常见集合,及其优缺点
链表与数组
hashmap
1.8put流程
子主题
1.8get流程
ConcurrentHashMap
linux
shell
spring
spring重要的9大模块
ioc和aop的理解
bean的生命周期与作用域
将类声明为spring的bean的注解
aop使用
aop实现
jdk动态代理
cglib代理
aop应用场景
aop的切面、切点、连接点、通知
子主题
spring mvc
流程
spring boot
自动配置原理
stater启动器
Elasticsearch
创建与删除操作
ik分词器与查询
集群搭建
一些概念
spring boot整合
极速查询
算法(图片时间复杂度)
无重复字符的最长子串
字符串数组公共前缀
分布式事务
CAP
C一致性
A可用性
P分区容忍性
0 条评论
下一页