面经-应届生秋招上岸笔记(高频 简略版)

(详细版请按照问题查找面经系列)

arrayList扩容:无参、有参add、addaAll(复制)

多线程读写:failFast(并发修改异常)、failSafe(一致性,读写分离)

LinkList、ArrayList:连续内存,随机访问快(下标)、尾插性能好、缓存,读写快(局部性原理){占用空间大}

单例instance:饿汉式Runtime() (反射破坏单例(构造方法)、反序列化、Unsafe),枚举类饿汉式,懒汉式(线程不安全,锁(性能)),双检锁懒volatile,System中的Console

HashMap:快速查找。哈希码-桶下标(key-二次hash(降低哈希碰撞,均匀)%数组长度)-链表>阈值8(数组>64)(Dos攻击,亿分之6)(退化:树<=6且root、左右孩子、左孙子null)/红黑树。put:未占用:Node/红黑树、链表。线程不安全,1.7扩容并发死链,1.8(尾插、大于阈值扩容、优化计算Node索引)数据错乱

线程状态:CPU-新建-start可运行-(阻塞(锁)、等待(wait\notify)、有时限等待)-终结(完毕)

线程池参数:核心线程、任务队列、救急线程、拒绝策略(异常、调用者执行、丢弃新任务、丢弃老任务)

volatitle线程安全:可见性(JIT优化)、有序性(读下先写上后屏障)、原子性

wait、wait(long)、sleep(long):线程阻塞。sleep:归属Thread(Object),醒来时机、锁特性synchronized不释放。

Lock,synchronized:语法:s-jvm-c++;L-接口-jdk-java。功能:悲观锁,互斥、同步、锁重入;L:获取等待状态、公平锁、可打断、可超时、可条件变量,读多写少。性能:无竞争s性能好;竞争激烈。

悲观锁、乐观锁:思想(争抢/重试),代表(sy、L/cas)、性能(阻塞)、额外(重试减少阻塞/CPU多核)

HashTable、ConcurrentHashMap:线程安全,kv非空。并发度:H整个一把锁,C1.8后数组头节点锁。扩容:H初始11,*2+1;C小数组超过(满)容量的3/4容量翻倍(复制,旧变F,get判断F,put已替换加锁,帮忙)

ThreadLocal线程变量:作用:线程隔离资源共享。原理:ThreadLocalMap(set、get、remove)。扩容:元素>容量2/3,翻倍。索引冲突:线性探测法。弱引用,key-null key,周围。

JVM内存结构:javaSource-javaclass-类加载子系统-Java内存结构:线程共享(方法区、堆-对象)、程序计数器-线程、虚拟机栈-变量。执行引擎:解释器-机器码、即时编译器-JIT缓存、GC-本地方法接口-本地库

JVM内存参数:新生代:伊甸园区、from、to(幸存者区),老年代(分代回收思想)

垃圾回收算法:标记清除、标记整理、标记复制。三色标记-并发漏标-增量更新、原始快照。小范围GC、混合、Full

垃圾回收器:并行GC(新小老Full注重吞吐量),并发标记(标记清除+并发失败Full注重响应时间),G1(标记复制+混合收集,失败Full)

内存溢出:误用固定大小线程池、任务队列耗尽(使用线程池时自己的构造方法),误用带缓冲线程池、内存资源耗尽,查询数量大,动态生成类

类加载:加载(创建.class对象,父类未加载时先加载父类),链接(验证(字节码规范合法安全),准备(static变量分配内存空间和默认值),解析(将常量池的符号引用解析为直接引用)),初始化(执行静态代码块,为非final对象赋值)

双亲委派:启动类加载器、扩展类加载器、应用程序类加载器、自定义类加载器,优先委派上级,上级共享类,保证核心先加载。

创建对象:类加载检查,内存分配,初始化默认值,设置对象头,执行初始化方法



 
posted @ 2022-10-24 09:28  临易  阅读(34)  评论(0编辑  收藏  举报