自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

瑞文のBlog

心脏和字节只能有一个跳动,生命和工资只能拼一个多多!

  • 博客(95)
  • 资源 (3)
  • 收藏
  • 关注

原创 阿里健康一面面经(电话面)

文章目录1.前言开胃2.正题来了2.1第一个问题(框架开胃菜)第二个问题(顺藤摸瓜)第三个问题(继续框架)后来全是(JAVA基础)1.前言开胃原本风和日丽的一个下午突然接到了阿里健康HR的电话问我什么时候有时间,莫名交流后拍定五分钟后见! 电话面试,时间半小时左右。然后随便找了广场准备迎接洗礼!下面进入正题。2.正题来了五分钟一到,面试官如约而至,我也怀着激动不安还有点手抖的接起了电话。互相问候了一波紧接着就开始对线,首先迎来的是项目。在大学都做过什么项目?主要学习了什么?这个问题可

2021-06-03 10:41:04 1304 3

原创 腾讯广告一面

文章目录一、初识自我介绍(5~8分钟)二、谈做过项目(20分钟)三、MYSQL、Redis、计算机网络MySQLRedis一、初识自我介绍(5~8分钟)80%的面试基本第一步上来就是介绍一下自己,这个是第一个也可能是埋下伏笔的环节。面试官你好,我叫王瑞文,来自中北大学软件学院。然后。。。。说了说学习的技术栈,还有做过的项目面试官:这些 技术栈你学的最好的是哪个我:JAVA 看过一些集合源码对并发颇有自己的见解本以为在我介绍完成之后面试官会开始根据简历提问,内心想着我都这么说了你快问我jav

2021-06-03 08:42:14 426 1

原创 MySQL锁和缓存-你不知道的那一点点!

文章目录锁缓存Query Cache 参数为什么会专门写一篇博客去说锁和缓存呢,因为面试背问到了。满天飞的理论但是落地的话呢?接下来一块看看你们会不会!锁idname张三李四id是自增主键。问题一:根据id去删除一行数据会走什么锁?问题二:根据name删除一行数据会走什么锁?问题三:给name加普通索引会走什么锁?MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给

2021-05-20 11:19:36 454 1

转载 假如易立竞吐槽程序员

原文出处你没事就刷数据结构和算法,是真的喜欢,还是面试会考呢?如果面试不考算法,你还会学吗?就好像学了B树,但是每天的增删改查能不能用到B树你心里应该也有逼数吧。你当初入行,是真的喜欢代码,还是觉得这行收入高呢?现在入行了,收入真的高吗?听说你喜欢开源项目,你有自己的开源项目吗?还是说喜欢开源项目是为了方便抄开源项目的代码呢?当用的第三方包有问题,你会看源码解决还是直接换个轮子用呢?你当然不会看源码解决,因为你看不懂。就算看得懂,老板会给你时间看吗?产品第二天得上线不是吗?说到产.

2021-04-16 09:16:31 184

原创 十大排序算法-JAVA

文章目录1、冒泡排序优化复杂度2、选择排序优化复杂度3、堆排序Top K 问题二叉堆4、插入排序时间复杂度空间复杂度5、归并排序时间复杂度6、快速排序时间复杂度空间复杂度7、希尔排序时间复杂度空间复杂度一些非比较排序1.计数排序(非比较)时间复杂度空间排序2.基数排序(非比较)时间复杂度空间复杂度10、桶排序(非比较)1、冒泡排序/** * @Description: * @ClassName algorithm * @Author: 王瑞文 * @Date: 2021/3/24 19:31

2021-04-04 21:38:53 269

原创 JVM总结-运行时数据区

文章目录运行时数据区一、程序计数器二、虚拟机栈1.是什么?2.生命周期3. 作用4.特点5.可能出现异常6.设置栈内存大小7.栈帧8.栈帧的内部结构8.1局部变量表8.2Slot(变量槽)8.3操作数栈8.4栈顶缓存技术8.5动态链接8.6方法的调用9.栈的面试题三、本地方法栈/本地方法区四、堆1.核心概述2.堆大小设置3.年轻代和老年代4.对象分配过程5.常用调优工具6.GC :Minor GC 、Major GC 、Full GC7.堆空间分代思想8.内存分配策略9.TLAB10.堆空间参数设置11.堆

2021-03-31 22:40:20 214

原创 JVM总结-类加载器子系统

文章目录1、类加载器1.1 双亲委派机制类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在打开头有特定的文件标识ClassLoader只负责class文件的加载,至于他是否可以运行,有Execution Engin决定加载的类信息存放于一块成为方法去区的内存空间。除了类信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字字面量类加载过程:ClassFile经过类加载器子系统加载成类模板存在于方法区中,然后可以使用改模板去创建n个实例类变量表有两次

2021-03-31 22:16:15 172

原创 基于动态数组建立二叉堆、批量建堆-JAVA

文章目录1、堆的数据结构2、添加3、删除4、代码实现1.首先定义接口2.写实现类5、如何批量建堆1、堆的数据结构如果任意节点的值总是≥子节点的值,称为:最大堆、大根堆、大顶堆如果任意节点的值总是≤子节点的值,称为:最小堆、小根堆、小顶堆一般使用数组实现二叉堆图中序号为数组下标用数组实现它索引的规律:(n为元素数量,i为数组索引)如果i=0,它是根节点如果i>0,它父节点的编号为floor((i-1)/2)如果2i+1≤n-1,它的左子节点编号为2i+1如果2i+1>

2021-03-26 23:46:16 247

转载 JAVA基础(三)-面试篇

系列文章目录JAVA基础系列只是列出博主在刷牛客JAVA转项练习的总结JAVA基础篇一:继承、多态、导包问题 、排序、变量初始值等JAVA基础篇二:父子类问题、Map空值问题、异常、真假问题等文章目录系列文章目录22、编程单元、存储单元23、语言函数24、并发24.1 synchronized关键字和volatile关键字24.2 Thread中的方法24.3 ThreadLocal24.4 线程间的通知和唤醒24.5单任务和并发24.6 代码死锁24.7 死锁必要条件24.8 AQS源码分析1、

2021-03-24 23:31:36 240

原创 JAVA基础(二)-面试篇

系列文章目录JAVA基础系列只是列出博主在刷牛客JAVA转项练习的总结,希昂西文章目录系列文章目录

2021-03-21 16:19:42 256 2

原创 JAVA基础(一)-面试篇

文章目录1、继承、实现2、try 、catch、finally、return3、包名问题4、值传递,引用传递5、Integer问题6、导包问题7、排序问题8、多态9、运算问题10、变量初始值问题1、继承、实现接口可以扩展(继承多个接口)Java中类是单继承,但接口可以多继承,Interfere1 extends Interface2,Interface3…2、try 、catch、finally、return不管有木有出现异常,finally块中代码都会执行;当try和catch

2021-03-15 22:45:02 239 1

原创 计算机网络(HTTP、TCP/IP、UDP)详解-面试篇

文章目录1、实现会话跟踪2、什么是HTTP协议3、什么是Web4、TCP/IP协议5、TCP/IP协议族分层6、HTTP数据传输过程7、传输层-TCP三次握手8、DNS9、HTTP事务处理过程10、URL和URI11、HTTP请求报文分析12、HTTP响应报文分析13、请求方法13.1 GET13.2POST13.3PUT13.4 HEAD13.5 DELETE13.6OPOTIONS13.7 TRACE13.8 CONNECT14 、状态码15、HTTP状态管理15.1 Cookie15.2 Sessio

2021-03-15 22:31:22 465

原创 JVM-面试篇

文章目录一、JVM 运行机制1.JAVA程序具体运行过程二、多线程在JVM下的运行三、JVM的内存区域1.程序计数器2. 虚拟机栈3.本地方法区4. 堆5.方法区一、JVM 运行机制JVM是用于运行Java字节码的虚拟机,包括一套字节码指令集、一组程序计数器、一个虚拟机栈、一个方法去和一个垃圾回收器。它运行在操作系统之上,不与硬件设备直接交互1.JAVA程序具体运行过程Java源文件被编译器编译成字节码文件JVM将字节码文件编译成相应的操作系统的机器码机器码调用相应的操作系统的本地方法库执行

2021-03-10 21:04:52 213 1

原创 插入排序(JAVA)

1.概念插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 [1] 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动 [2] 。来自百度百科2.

2021-03-05 23:52:59 259

原创 AQS同步框架

文章目录一、概述二、AQS框架三、工作原理一、概述在juc并发包中除了synchronized还有ReentrantLock,而我们的ReentrantLock就是依赖AbstractQueuedSynchronizer(AQS)抽象类去实现的除了ReentrantLock还有并发工具包中的Semaphore、CountDownLatch和栅栏CyclicBarrier实现了AQS的锁有:自旋锁、互斥锁、读锁写锁、条件产量、信号量、栅栏都是AQS的衍生物二、AQS框架CLH队列 它维护了一

2021-02-25 20:32:40 316

原创 synchronized锁的膨胀升级过程

文章目录一、为什么需要锁二、锁底层是怎么实现的?三、锁升级过程一、为什么需要锁在并发情况为了保证线程的安全性,是在一个多线程环境下正确性的概念,也就是保证多线程环境下共享的、可修改的状态的正确性(这里的状态指的是程序里的数据),在java程序中我们可以使用synchronized关键字来对程序进行加锁。二、锁底层是怎么实现的?synchronized(隐式锁)代码块的时候,编译成的字节码将包含monitorenter指令 和 monitorexit指令。这两种指令均会消耗操作数栈上的一个引用类型

2021-02-21 23:29:11 386

转载 2021程序员的出路在哪里

大家可以看一看这篇博客,博主也Get的真不少!太真实了!!2021程序员的出路在哪里

2021-02-19 19:49:41 910

原创 volatile天天用,内存语义次次懵!

文章目录一、volatile是什么?内存语义?二、volatile缓存可见性实现原理1.内存屏障2.volatile重排序规则表一、volatile是什么?内存语义?volatile是Java虚拟机提供的轻量级的同步机制volatile写的内存语义如下:当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值刷新到主内存。volatile读的内存语义如下:当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效。线程接下来将从主内存中读取共享变量。volat

2021-01-31 21:03:38 283

原创 JAVA内存模型-JMM

文章目录JMM是什么?JMM是什么?JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译器优化。JMM

2021-01-31 20:30:46 316

原创 现代计算机理论模型与工作原理

文章目录一、现代计算机理论模型与工作方式1.1计算机五大核心组成部分1.1.1CPU内部结构划分1.1.2多CPU1.1.3CPU多核二.多线程环境下存的问题1.缓存一致性问题2.指令重排序问题一、现代计算机理论模型与工作方式现代计算机模型是基于-冯诺依曼计算机模型计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存 储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下 来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去。直至遇到

2021-01-30 19:57:15 2784 1

原创 MySQL中的锁和事务隔离级别

一、锁定义锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中,除了传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个 重要因素二、锁分类从性能上分为乐观锁(用版本对比来实现)和悲观锁从对数据库操作的类型分,分为读锁和写锁(都属于悲观锁)读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响写锁(排它锁):当前写操

2021-01-29 21:28:14 351

原创 分页、关联查询优化

文章目录一、分页查询示例1.分页查询优化1.1 根据自增且连续的主键排序的分页查询1.2 根据非主键字段排序的分页查询二、Join关联查询优化1.Join关联查询示例表2.常见表关联算法2.1 嵌套循环连接 Nested-Loop Join(NLJ) 算法2.2 基于块的嵌套循环连接 Block Nested-Loop Join(BNL)算法3.对于关联sql的优化4.in和exsits优化三、count(*)查询优化count(*)查询优化方法1、查询mysql自己维护的总行数2、show table s

2021-01-29 21:13:40 705

原创 排序、分组SQL深度优化

文章目录一、Order by与Group by优化示例一示例二示例三示例四示例五优化总结:二、Using filesort文件排序原理详解一、Order by与Group by优化示例一 EXPLAIN select * from employees where name ='LiLei' and position ='dev' ORDER BY age分析:利用最左前缀法则:中间字段不能断,因此查询用到了name索引,从key_len=74也能看出,age索引列用 在排序过程中,因为Ext

2021-01-29 20:28:46 724

原创 怎样让你的SQL使用最佳索引!

文章目录一.示例表二、索引使用情况1.全值匹配2.最左前缀法则3.不在索引列上做任何操作4.存储引擎不能使用索引中范围条件右边的列5.尽量使用覆盖索引,减少select *语句6.!=或者<> 无法使用索引会导致全表扫描7.is null,is not null 也无法使用索引8.尽量避免like以通配符开头9.字符串不加单引号索引失效10.少用or或in11.范围查询优化三、Mysql如何选择合适的索引1.trace工具用法:四、总结:一.示例表示例表: CREATE TABLE `e

2021-01-29 19:58:41 527

原创 Explain分析SQL语句

一、Explain使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain关键字,MySQL 会在查询上设置一个标记,执行查询会返 回执行计划的信息,而不是执行这条SQL 注意:如果 from中包含子查询,仍会执行子查询,将结果放入临时表中explain 两个变种1)explain extended:会在 explain 的基础上额外提供一些查询优化的信息。紧随其后通 过 show warnings 命令可以得到优化后的查

2021-01-28 20:30:54 1153

原创 MyISAM、InnoDB与联合索引

文章目录一、聚集索引与非聚集索引二、MyISAM三、InnoDBInnoDB必须要有主键,并且推荐使用整型自增主键三、 联合索引如何实现递增一、聚集索引与非聚集索引聚集索引:聚集索引就是索引和数据存储在一块的如InnoDB聚集索引有时候也叫聚簇索引非聚集索引:非聚集索引就是索引和数据分开存储如MyISAM二、MyISAM采用MyISAM在磁盘中是怎样存储的呢?MyISAM索引文件和数据文件是分开的(非聚集),存储引擎在磁盘中文件有三个,一个是 .frm 文件(数据表定义),一个是

2021-01-27 21:37:58 548

原创 B+Tree索引为什么支持千万级别数据查找?

文章目录一、什么是索引二、索引数据结构1.二叉树二叉树索引存在的问题2.红黑树红黑树当索引的问题3、Hash表Hash表存在的问题MySQL支持Hash当索引4、B-TreeB-Tree存在问题5、B+Tree结构优点范围查找一、什么是索引索引是帮助MySQL搞笑获取数据的排好序的数据结构在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以

2021-01-27 21:22:17 858

原创 Mybatis在集群环境下脏读问题

文章目录一、一级缓存的不共享性二、并发下的脏读问题三、怎么解决1.在SQL语句中随机生成不同的参数2.开启二级缓存3.强制清除一级缓存4.创建新的sqlSession连接一、一级缓存的不共享性每个SqlSession都有独立的HashMap缓存数据 protected PerpetualCache localCache;//一级缓存所以Mybatis的一级缓存是不共享的二、并发下的脏读问题我们设想有两个集群节点我们先执行查的操作假设A执行了查询把一条数据查询出来加载到自己的缓存A中,此

2021-01-26 20:37:50 749 2

原创 Mybatis源码分析-selectList源码分析

文章目录一、开篇二、源码分析1.selectList()2.CachingExecutor3、createCacheKey1)为什么CachingExecutor要调用SimpleExecutor的方法去创建缓存key呢?4、创建好缓存key之后:query查询二级缓存5、如果二级缓存为空继续走查询query查询一级缓存6、查询一级缓存为空queryFromDatabase查询数据库三、演示四、总结一、开篇在我们分析Executor的时候最后一步就是查询我们的数据库 本篇就是去深究一下Mybatis

2021-01-26 20:07:32 1367

原创 Mybatis源码分析-getMapper()源码分析

一个接口没有实现类能执行方法吗?答案:能!我们看一下这段代码 UserMapper mapper = sqlSession.getMapper(UserMapper.class); //6、执行SQL语句 List<User> users = mapper.selectAllUser(new Random().nextInt());我们都知道在Mybatis中调用SqlSession的GetMapper方法就可以拿到我们的Mapper,然后调用...

2021-01-26 19:28:24 310

原创 Mybatis源码分析-Executor执行器源码分析

文章目录一、调用写法二、原生写法三、源码分析1.代理类的invoke方法2.invoke方法源码3.sqlSession.selectOne();4.selectList()一、调用写法 SqlSession sqlSession = sqlSessionFactory.openSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> users

2021-01-26 18:43:12 279

原创 Mybatis源码分析-openSession()源码分析

文章目录一、openSession()作用概括二、openSession()源码分析1、用法中2、openSession()3、openSessionFromDataSource()4、获取Executor 执行器1.执行器类型一、openSession()作用概括创建事务创建Excutor把创建好得事务和Excutor交给DefaultSqlSession封装了select | insert | update | delete方法二、openSession()源码分析1、用法中用法中

2021-01-26 17:33:28 468 1

原创 Mybatis源码分析-SqlSessionFactoryBuilder.build()源码分析

文章目录一、SqlSessionFactoryBuilder.build()是干什么的?二、源码分析1.SqlSessionFactoryBuilder源码2.XMLConfigBuilder解析配置文件1、创建好XMLConfigBuilder对象调用.parse()方法2、检查、封装数据3、封装数据封装到哪里呢?4、分别解析到Configuration的哪些属性中呢?一、SqlSessionFactoryBuilder.build()是干什么的?SqlSessionFactoryBuilder.

2021-01-25 21:11:31 1929

原创 Mybatis搭建流程

Mybatis搭建流程1、引pom <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.17</version> </dependency> &l

2021-01-25 20:27:31 256

原创 IOC单例模式三级缓存解决循环引用(源码分析)

文章目录深度分析SpringBean单例对象创建过程1、doGetBean创建Bean对象2、剖析getSingleton获取缓存对象3、creatBean()->doCreatBean创建对象4、创建对象后通过反射去获取无参构造5、把婴儿对象添加到一级缓存6、给属性赋值7、设置到一级缓存中2、 流程解释2.1文字描述2.2 图解深度分析SpringBean单例对象创建过程1、doGetBean创建Bean对象我们可以看到源码中有个Object sharedInstance = getSin

2021-01-24 19:36:43 535

原创 SpringIOC循环依赖注入问题

什么是循环依赖注入问题?我们先看一段代码:AService@Service@Scope("prototype")public class AService { @Autowired private BService aService;}BService@Service@Scope("prototype")public class BService { @Autowired private AService aService;}当我们在多例模式

2021-01-24 18:59:13 429 1

原创 使用递归算法+责任链模拟AOP底层通知调用

系列文章目录SpringAOP实现深入SpringAOP实现流程(源码分析)文章目录系列文章目录一、AOP通知二、模拟AOP通知1、包结构2、interceptor3、invocation4、service5、Test6、运行结果一、AOP通知我们可以先看一个切面类@Component@Aspect//定义切面类@EnableAspectJAutoProxy //开启AOP]public class LogAOP { @Pointcut("execution(* com.s

2021-01-24 12:18:11 498

原创 删除链表倒数第n个节点(JAVA)

题目描述给定一个链表,删除链表的倒数第n个节点并返回链表的头指针例如,给出的链表为:1->2->3->4->5, n= 2.删除了链表的倒数第n个节点之后,链表变为1->2->3->5.备注:题目保证n一定是有效的请给出请给出时间复杂度为 O(n)的算法示例1输入{1,2},2返回值{2}public class Test { public ListNode removeNthFromEnd(ListNode head,

2021-01-23 21:53:53 541

原创 深入SpringAOP实现流程(源码分析)

系列文章目录SpringAOP实现深入SpringAOP实现流程(源码分析文章目录系列文章目录一、SpringAOP实现(源码追踪)1.@EnableAspectJAutoProxy 开启AOP2.底层引用类:@Import(AspectJAutoProxyRegistrar.class)3.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry)注册切面类4.AnnotationAwareAspectJAutoProxyCrea

2021-01-23 21:29:44 372

原创 深度解析Spring-Bean生命周期(源码分析)

系列文章目录提示:阅读这篇文章的时候先提前阅读一下系列文章Spring核心接口Spring-Bean生命周期文章目录系列文章目录前言一、AnnotationConfigApplicationContext是什么?二、refresh()三、Spring-Bean生命周期1.进入refresh方法:2.finishBeanFactoryInitialization(beanFactory)初始化所有单例对象3.beanFactory.preInstantiateSingletons();初始化所有的单

2021-01-23 20:35:06 314

jprofiler_windows_9_1_1安装包

JProfiler按安装包(分析Dump文件)

2021-01-18

JAVA可以反编译枚举的反编译工具

JAVA反编译工具

2021-01-17

CGLIB依赖-来自mvn仓库

CGLIB动态代理实现时需要引入

2021-01-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除