
面试
alex-zhou96
男儿欲遂平生志,五经勤向窗前读。
展开
-
学习计划
需要学习一些工具以及框架工具1、Git/Git Lab2、Maven3、IDEA以及代码调试机制4、Linux框架1、Spring2、Spring MVC3、MyBatis4、Spring Boot5、Spring Cloud6、Zookeeper7、Dubbo8、ElasticSearch9、KafKa原创 2021-03-19 01:16:34 · 178 阅读 · 0 评论 -
类加载过程
文章目录加载验证准备解析初始化类卸载类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中准备、验证、解析3个部分统称为连接(Linking)。如图所示。加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始,而解析阶段则不原创 2020-09-19 21:00:20 · 385 阅读 · 0 评论 -
微服务架构的分布式如何保证事件---如何保持服务之间的数据一致性
1、CAP定理2、两阶段提交协议(2PC)保证事实一致性,可以采用2PC3、最终一致性的解决方案最终一致性的解决方案:事件驱动的架构原创 2020-08-20 17:08:15 · 321 阅读 · 0 评论 -
Redis面试题
文章目录简述下Redis(为什么要选用Redis)为什么说Redis块或者性能高Redis中的5中数据类型,8大数据结构简单动态字符串SDS和C语言自带的字符串有什么不同Redis字典的底层实现hashTable相关问题压缩列表原理zset底层跳表原理(为什么不选择平衡树)Redis中过期策略与内存淘汰机制过期/删除策略(出现缓存雪崩的问题)两种策略可能出现缓存雪崩的问题从库的删除策略内存淘汰机制Redis中持久化机制介绍对比Redis集群的主从复制实现同步的两种机制部分重同步的实现(增量同步实现)Redi原创 2020-06-17 20:01:18 · 915 阅读 · 0 评论 -
JVM内存垃圾收集
文章目录如何判断内存可以回收(哪些可以回收)内存区域的管理引用计数法(不用,在Redis中用)可达性分析算法算法GC Roots对象Java中的几种引用强引用(Strong Reference)软引用(Soft Reference)弱引用(ThreadLocal)虚引用Java中的finalize()方法何时回收垃圾(何时回收)-->JVM进程启动会启动一些线程垃圾收集算法(如何回收)标记清除介绍存在问题复制算法(新生代)介绍实现标记整理分代收集算法垃圾收集器(JVM使用的)Serial收集器(单线程原创 2020-06-09 00:59:32 · 223 阅读 · 0 评论 -
各内存区域溢出异常的一些问题
文章目录内存常见的问题大类内存泄露内存溢出Java堆 的溢出产生问题的原因排查和解决虚拟机栈和本地方法栈溢出方法区和运行时常量池溢出内存常见的问题大类内存泄露对象本该释放,我们用不到这些对象,但对象却还生活在内存中在ThreadLocal中键的类型为弱引用就是为了防止内存泄露内存溢出内存空间放不下对象,超出了内存Java堆 的溢出产生问题的原因Java堆用于存储对象实例,只要不断的创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量原创 2020-06-08 21:17:23 · 391 阅读 · 0 评论 -
虚拟机对象揭秘
文章目录对象的创建过程在Java中如何创建对象JVM中创建对象的内存布局(对象的机构)对象头Header实例数据填充数据估计对象内存大小估计计算公式对象的访问定位句柄访问直接指针访问对象的创建过程在Java中如何创建对象使用New关键字克隆、序列化JVM中创建检查类是否加载、解析初始化(可以从文件中,也可以动态代理cgllib)分配内存,对象所需的内存大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。根据垃圾回收时是否对内存进行整原创 2020-06-08 20:58:25 · 468 阅读 · 0 评论 -
JVM大纲
内存管理- 内存区域(jdk1.8中数据区域的变化)- 在堆上创建对象的过程- 内存异常的问题原创 2020-06-07 22:54:37 · 209 阅读 · 0 评论 -
Java内存区域与异常(JDK1.6与JDK1.8)
文章目录JDK1.6中内存布局虚拟机栈详解JDK1.8中内存布局JDK1.8为什么要移除方法区JVM对于内存区域有一个演进的过程,主要是jdk1.6与jdk1.8的区别主要区别 是在jdk1.8中取消了方法区将方法区中的数据存放到本地 内存中JDK1.6中内存布局多线程共享内存区域:方法区、堆。每一个线程独享内存:java栈、本地方法栈、程序计数器。程序计数器:较小的内存空间,当前线程执行的字节码的行号指示器;各线程之间独立存储,互不影响;(不存在内存异常的问题)虚拟机 栈:线程原创 2020-06-07 19:29:47 · 1336 阅读 · 0 评论 -
Synchronized马士兵底层剖析
文章目录Synchronized剖析synchronizerd对象头的锁synchronized锁升级过程偏向锁(只有一个线程访问锁)轻量级锁/自旋锁(多个线程抢)重量级锁(用户太升级到内核态,操作系统互斥量)锁消除锁粗化synchronized底层实现原理剖析java代码层级:synchronizedjvm字节码层级:monitorenter和monirorexit指令jvm执行过程中锁升级:CPU汇编层级:lock comxchgvolitale计算机基础缓存一致性,系统底层如何实现数据一致性程序顺序性原创 2020-06-07 03:47:13 · 1604 阅读 · 0 评论 -
JMM内存模型
文章目录原子性可见性有序性JVM中如何保证原子性可见性有序性保证原子性保证可见性保证有序性happen-before的原则是什么原子性原子性指的是一个操作是不可中断的,即使是在多线程环境下,一个操作一旦开始就不会被其他线程影响。比如对于一个静态变量int x,两条线程同时对他赋值,线程A赋值为1,而线程B赋值为2,不管线程如何运行,最终x的值要么是1,要么是2,线程A和线程B间的操作是没有干扰的,这就是原子性操作,不可被中断的特点。可见性可见性指的是当一个线程修改了某个共享变量的值,其他线程是原创 2020-06-07 00:01:40 · 193 阅读 · 0 评论 -
死锁
文章目录死锁定义死锁出现原因出现死锁四个必要条件(这也是怎么打破这个死锁的入手)死锁产生场景互相持有对方想获得的锁线程池中的死锁如何解决(预防)死锁死锁检测以确定的顺序获得锁超时放弃死锁定义死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。竞争的资源可以是:锁、网络连接、通知事件,磁盘、带宽,以及一切可以被称作“资源”的东西。死锁出现原因因为系统资源不足导致的资源竞争进程运行推进顺序不合适:请求和释放资源顺序原创 2020-06-06 23:58:35 · 316 阅读 · 0 评论 -
线程的基础知识
文章目录线程的概念Java中线程的启动继承Thread类型创建线程实现Runnable接口创建线程通过Future和Callable创建线程使用线程池例如Excutor框架(工厂的方法)创建线程的方式的对比线程的状态线程的常用方法基本操作线程协作线程的概念Java中线程的启动继承Thread类型创建线程定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。创建Thread子类的实例,即创建了线程对象。调用线程对象的st原创 2020-06-06 23:54:37 · 130 阅读 · 0 评论 -
并发模式(生产者/消费者;单例模式;不变模式)
文章目录生产者与消费者模式(线程同步,通信)Object方式实现生产者消费者模式ReentranLock实现生产者与消费者单例模式(并发中如何实现安全的并发)饿汉式懒汉式DCL(double checking )枚举单例(线程安全,调用效率高,不能延时加载)推荐不变模式(这是绝对安全的并发)介绍如何实现Jdk中的实现Future模式(异步模式)在并发中,有一些经典的模式,我们可以学习下生产者与消费者模式(线程同步,通信)面试时,有可能要手写生产这与消费者模式可以使用原生的Object.wai原创 2020-06-06 23:48:17 · 320 阅读 · 0 评论 -
并发容器
文章目录快速失败和安全失败ConcurrentHashMap阻塞队列BlockingQueueCopyOnWriteArrayList(并发版本的list)介绍分析set方法:加锁get方法CopyOnwrite问题其余的一些并发容器在juc中提供了大量并发容器它们的底层一般是:volitale+cas锁快速失败和安全失败快速失败在使用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除和修改),则会抛出Concurent Modification E原创 2020-06-06 23:28:00 · 123 阅读 · 0 评论 -
阻塞队列BlockingQueue
文章目录介绍BlockingQueue接口BlockingQueue接口的实现ArrayBlockingQueue分析基本的数据结构阻塞的添加元素(put)阻塞的获取元素take()LinkedBlockingQueue分析底层数据结构put方法SynchronousQueuePriorityBlockingQueue介绍BlockingQueue阻塞队列,生产者消费者的体现在这里面可以学习一下生产者与消费者模型阻塞队列常用于 生产者和消费者的场景,生产者是向队列里添加元素的线程消费者是从队列原创 2020-06-06 23:10:05 · 258 阅读 · 0 评论 -
Java中锁总结
文章目录Java中常见的锁的分类及其特点按照锁特性公平锁、非公平锁可重入锁独享锁和共享锁乐观锁、悲观锁分段锁偏向锁、轻量级锁、重量级锁自旋锁可中断锁按照功能隐式锁显式锁ReentrantLock(可重入锁)ReentranReadWriteLock(读写锁)synchronize与reentranlock的区别?什么时候用synchronized与用reentranLock?Java中常见的锁的分类及其特点按照锁特性公平锁、非公平锁公平锁、非公平锁:公平锁指多个线程按照申请锁的顺序来获取锁,非公原创 2020-06-06 22:29:27 · 323 阅读 · 0 评论 -
线程池剖析
文章目录为什么要用线程池常规实现的线程池(通过创建不同的ThreadPoolExecutor对象)JUC里面线程池内部实现hanler阻塞队列线程池拒绝策略线程池任务调度策略线程池中submit和execute有什么区别??线程数设置为多少合适??是否使用线程池就一定比使用单线程高效呢?为什么要用线程池降低资源的消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗提高响应速度:当任务到大时,任务可以不需要等待线程创建就能立即执行方便管理:线程是稀缺资源,如果无限制的创建,不仅会原创 2020-06-06 19:56:57 · 552 阅读 · 0 评论 -
ThreadLocal剖析
文章目录什么是ThreadLocal变量原理内存泄露问题使用场景什么是ThreadLocal变量ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。这里有几点需要注意:因为每个 Thread 内有自己的实例副本,且该副本只能由当前 Thread 使用。这是也是 ThreadLocal 命名的由来。既然每个 Thread 有自己的实例副本,且其它 Thread 不可访问,那就不存在多线程间共享的问题。ThreadLoca原创 2020-06-06 19:13:51 · 279 阅读 · 0 评论 -
AQS以及其典型应用ReentranLock
文章目录ReentranLock原理:并发基础组件AQS与ReetrantLockAQS介绍同步队列AQS的使用ReentranLock分析ReentranLock与Synchronized的区别ReentanLock与AQS关系基于ReetrantLock分析AQS独占模式实现过程ReentrantLock中非公平锁ConditionCondition的内部实现原理ReentranLock原理:并发基础组件AQS与ReetrantLockAQS原理源码参考资料AQS介绍队列同步器AQS,是原创 2020-06-06 18:59:31 · 404 阅读 · 0 评论 -
原子类包分析实现
文章目录atomic包atomic包java.util.concurrent.atomic包下的类大多是使用CAS操作来实现的(eg. AtomicInteger.java,AtomicBoolean,AtomicLong)。下面以 AtomicInteger.java的部分实现来大致讲解下这些原子类的实现。它提供了原子自增方法、原子自减方法以及原子赋值方法等public class AtomicInteger extends Number implements java.io.Seria原创 2020-06-06 18:04:35 · 227 阅读 · 0 评论 -
CAS剖析
文章目录无锁CAS与Unsafe类及其应用原子性无锁的执行者: CASjavaCAS的实现-Unsafe类Unsafe内存语义的实现剖析concurrent包的实现=CAS+volitale变量原子类包AQS及其应用 ReentranLock无锁CAS与Unsafe类及其应用原子性原子操作意为“不可被中断的一个或一系列操作”。再多处理器上实现原子操作就变的有点复杂。加锁是一种悲观的策略,它总是认为每次访问共享资源的时候,总会发生冲突,所以宁愿牺牲性能(时间)来保证数据安全。无锁是一种乐观的策略,原创 2020-06-06 17:58:13 · 457 阅读 · 0 评论 -
Volitale关键字剖析
文章目录volitale关键字内存语义写内存语义读内存语义如何保证可见性和禁止指令重排序?为什么不能保证原子性原理:内存屏障使用例子volitale关键字内存语义如果不使用volitale申明变量,那么这个变量被修改后,其他线程可能并不会被通知到,甚至在别的线程中,看到变量的修改顺序都会是反的,但一旦使用volitale,虚拟机就会特别小心的处理这种情况写内存语义当写一个volitale变量时,JMM会把线程对应的本地内存中的共享变量值刷新到主内存中读内存语义当读一个volitale原创 2020-06-03 22:06:09 · 1429 阅读 · 0 评论 -
线程间通信机制
文章目录volitale和synchronized等待通知机制synchronized+object方式reentanLock+condition方式ThreadJoinThreadLocal机制管道输入/输出流 PipedWriter/PipedReaderCountDownLatch(为1)volitale和synchronizedvolitale变量本身就具有一种通信的作用,告诉其他线程volitale变量需要从这个主内存中获取最新的值\基于 volatile 关键字来实现线程间相互通信是使原创 2020-06-03 19:52:05 · 289 阅读 · 0 评论 -
线程间同步机制
文章目录重入锁synchronizedReentranLock读写锁基于AQS的一些同步器倒计时器 CountDownLatch循环栅栏 CylicBarrier信号量 Semphore:允许多个线程同时访问线程安全的一些类/容器重入锁)synchronizedReentranLock重入锁可以完全替代synchronized关键字,在JDK5的早期版本中,重入锁的性能远远好于synchronized,但从JDK6开始,JDK在Synchronized上做了大量的优化,使得二者的性能差距并不大原创 2020-06-03 19:09:27 · 436 阅读 · 0 评论 -
Synchronized关键字剖析
文章目录synchronized关键字简述一下如何使用底层原理核心对象头中的监视器Monitor同步代码块与同步方法底层原理JDK16对synchronize关键字锁的优化偏向锁轻量级锁自旋锁锁消除线程中断与synbchronized等待唤醒与synchronized在JDK中体现synchronized关键字简述一下synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被他修饰的方法或者代码块在任意时刻只能有一个线程执行在JDK早期版本原创 2020-06-03 18:29:48 · 1283 阅读 · 0 评论 -
并发的梳理大纲
JAVA并发几个重要问题:并发挑战内存模型- 原子性- 可见性- 有序性重点关键字- volitale(底层原理)- synchronized锁的问题- 锁的分类- 锁的底层结构- 对锁做的优化- 无锁问题- 死锁问题线程的同步机制- AQS- 锁机制- 无锁- 并发包JUC(CountDownLatch/Sempahore)并发通信- 等待通知机制- volitale通信的底层- pipeInputStream线程安全的容器-原创 2020-06-03 17:49:48 · 117 阅读 · 0 评论 -
操作系统之内存
内村的基本知识什么是内存?有何作用?逻辑地址VS相对地址(和Java中对比)从写程序到程序运行链接的方式装入方式装入的三种方式----绝对装入装入的三种方式—静态重定位装入的三种方式-----动态重定位内存管理的基本概念内存管理的内容覆盖与交换技术覆盖交换技术内存空间的分配与回收连续分配管理方式单一连续分配...原创 2020-05-02 12:46:43 · 240 阅读 · 0 评论 -
操作系统之死锁
死锁的概念死锁、饥饿、死循环的区别死锁产生的必要条件什么时候会导致死锁对不可剥夺资源的不合理分配,可能导致死锁死锁的处理策略破坏互斥条件破坏不剥夺条件破坏请求和保持条件破坏循环等待条件避免死锁什么是安全序列银行家算法死锁的检测与解除死锁的检测死锁的解除...原创 2020-05-01 13:58:21 · 168 阅读 · 0 评论 -
操作系统之进程与管理
进程基本概念进程定义进程组成PCB信息(操作系统对进程管理所需的地方,和进程管理有关的信息)进程组织(多个进程)链接方式索引方式进程的特征进程的状态与状态之间的转换进程的状态进程状态的转换进程控制什么是进程控制如何实现进程控制进程控制相关的原语小结进程通信什么是进程通信进程通信—共享存储进程通...原创 2020-04-27 23:25:32 · 1689 阅读 · 0 评论 -
操作系统之概述
操作系统的运行机制操作系统内核(原子性就包含在这里和Java结合分析)中断和异常系统调用(比较重要)系统调用和库函数系统调用背后的过程...原创 2020-04-27 21:06:36 · 133 阅读 · 0 评论 -
HTTP协议详解
2020/4/22 阅读《图解HTTP》笔记整理主要记录HTTP的一些重要内容报文格式状态码HTTP安全HTTP新特性1、与HTTP协议密切的协议:IP、TCP、DNS这其实就是:一次网页访问过程中使用到哪些协议DNS:它提供域名到IP地址之间的解析TCP:传输控制协议,确保数据的安全到达IP:IP间的通信依赖MAC地址,在网络上,通信的双方在一个局域网的情况很...原创 2020-04-22 13:52:53 · 1077 阅读 · 0 评论 -
TCP协议详解
文章目录TCP概述TCP首部格式抓包分析TCP的传输连接管理TCP连接的建立为什么三次握手TCP建立握手的状态TCP连接的释放(四次挥手)为什么要等待TIME_WAITTCP协议如何实现可靠传输1、停止等待协议(自动重传请求ARQ)2、超时重传改进,滑动窗口---连续ARQ协议3、以字节为单位的滑动窗口数据报没有丢失数据报丢失的可靠传输TCP协议如何实现流量控制TCP协议如何避免拥塞控制(互联网的...原创 2020-04-21 01:34:15 · 1448 阅读 · 0 评论 -
JDK7中hashMap与CurrentHashMap
1、JDK7 HashMap1.1参数数组的长度为什么必须是2的幂次方数组的长度是幂次方的原因,在进行计算插入元素对应的index位置时,可以使用&与运算代替%运算;但是要求必须数组的长度为2的幂次方,这样 hash&(length-1)才能等价于 hash%length负载因子的本质是什么负载因子决定了何时会对整个数组进行扩容;当负载因子较小的时候,则t...原创 2020-03-24 13:42:09 · 329 阅读 · 0 评论 -
Spring 源码解析
Spring源码解析之工厂IOC>>>转载 2020-03-20 15:36:29 · 95 阅读 · 0 评论 -
SQL刷题笔记
记录牛客网上 MySQL刷题笔记2020/3/16开始 计划半个月预计2020/4/1 完成原创 2020-03-16 11:51:03 · 240 阅读 · 0 评论 -
并发面试整理
1、线程的状态有哪些?在Thread.state类中进行了定义新建状态 表示刚刚创建的线程,这些线程还没有执行可运行 可能正在运行,也饿能正在等待CPU时间片阻塞 等待获取一个排他锁,其他线程释放了锁就会结束此状态无线期等待 等待其他线程显示的唤醒,否则不会被分配CPU时间片限期等待:无须等待其他线程显示的唤醒,在一定时间之后会被系统自动唤醒死亡:可以是线程结束之后自己结束,或者...原创 2020-03-08 20:06:54 · 1185 阅读 · 0 评论 -
JVM面试
1、介绍一下JVM的内存区域(运行时数据区)JVM中内存分成若干部分:堆、方法区、虚拟机栈、本地方法栈、程序技术器其中堆和方法区是线程共享的部分,其他是线程隔离的(也可以说是线程安全的)堆堆的基本介绍Java堆是用来存储实例对象和数组对象的,由于存在逃逸分析技术(分析这个对象不会被其他方法或者线程调用),也可以分布在栈上,随着出栈而销毁,同时,java堆也是垃圾回收的主要区域,...原创 2020-03-02 13:59:27 · 716 阅读 · 0 评论 -
Spring面试整理
1、为什么要使用Spring?Spring提供了ioc,容器会帮你管理依赖的对象,从而不需要自己创建和管理依赖对象,更轻松的实现了程序的解耦spring提供了事务支持,使得事务操作变得更加方便spring提供了面向切面编程,这样可以更方便的处理某一类的问题。更方便的框架集成,spring可以很方便的集成其他框架,比如:MyBatis,Hiberbnate等2、解释一下什么是AOP...原创 2020-02-20 12:24:38 · 241 阅读 · 0 评论 -
JavaWeb基础知识面试整理
1、JSP和Servlet有什么区别?JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。Sertvlet和JSP最主要的不同点在于,servlet的应用逻辑是在Java文件中,并且完全从表示层中的html里分离开来,而JSP的情况是Java和HTml可以组成一个扩展名为JSP的文件。JSP侧重于视图,Servlet主要用于逻辑控制。2、JSP有哪些内置对象?作用分别...原创 2020-02-20 11:32:01 · 270 阅读 · 0 评论