- 博客(40)
- 收藏
- 关注
原创 Spring依赖注入源码分析
Spring 依赖注入源码解析,入口:DefaultListableBeanFactory#resolveDependency 判断是否懒加载,懒加载直接返回CGLIB代理对象;doResolveDependency 开始进行依赖注入;resolveMultipleBeans 判断注入的对象是否是集合类型(Stream,Collection,Array,Map) ,是的话直接return ;findAutowireCandidates 根据类型查找所有匹配到的bean,返回一个Map对象;
2022-07-29 16:40:28 662 1
原创 HashMap1.8源码解读及相关面试题解读
热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。Stay hungry, stay foolish.如果您也对Java感兴趣,恰巧我的文章能帮助到您,加入【CAFEBABE】一起学习。群号:243108249文章目录往期文章前言一、HashMap的数据结构二、HashMap源码解读三、HashMap使用优化四、相关面试题总结往期文章 HashMap1.7源码解读前言随着工作年限的增加,面试的时候对Map集合问的越来越细,本章针对jdk1.8的HashMap做详细解读,从源.
2021-10-11 17:24:45 428
原创 【Java反射】触手可及
我是【envoke】,一个想在编程路上越走越远的人。 热爱技术、热爱开源、热爱编程。Stay hungry, stay foolish.(求知若饥,虚心若愚)Go big or go home.(要么牛逼,要么滚蛋)如果您也对Java感兴趣,或者我的文章能帮助到您,给个点赞或关注把!加入【Go Big】一起探讨、一起吹逼、一起前行。群号:243108249相关阅读:Java反射性能问题,你真的需要考虑吗目录结构反射什么是反射 ?反射的原理反射的优点:反射的缺点:应用场景:获取反射的类.
2020-07-15 15:10:02 522
原创 微信小程序根据线上版本 Source Map 文件定位错误代码
话不多说,直接上流程将微信后台SoureMap文件下载下来解压下载的文件,可得到以下目录该目录对应的就是我们小程序分包也就是说,如果我们的页面在packageDynamic包下,我们定位的时候就要使用packageDynamic下的文件添加一个定位页面,代码入下,copy过去直接运行即可 <!DOCTYPE html><html lang=...
2020-04-27 17:20:33 4510 1
原创 搭建分布式任务调度平台
如何保证定时任务幂等性?只在一台机器添加定时任务 缺点:任务量大的时候,不能满足需求 在数据库能插入数据成功的可以执行 缺点:效率太低,且,很low 使用redis分布式锁,能够成功获取锁的才能够执行定时job 缺点:没有重试补偿机制,不能支持集群不支持路由策略 使用zk分布式锁,和redis原理相同 缺点:没有重试补偿机制,不能支持集群不支持路由策略 使用分布...
2020-03-20 15:05:08 764 2
原创 【redis】05-redis 事务(Multi、exec、watch、Discard)
Redis事务操作Multi 开启事务 EXEC 提交事务 Watch 可以监听一个或者多个key,在提交事务之前是否有发生了变化如果发生边了变化就不会提交事务,没有发生变化才可以提交事务版本号码乐观锁 Discard 取消提交事务我们先来看一下multi和exec的效果运行流程:线程A和线程B同一时间开启事务 由于线程A执行了两步操作,线程B只执行了一步操...
2020-03-18 18:04:24 348
原创 【redis】04-redis 根据监听key的失效事件实现订单超时关闭
Redis监听key的失效事件概念: 当redis的key失效以后,会回调程序的监听方法。应用场景:1. 一个交易系统里面有一个价格提醒的功能,用户可以设置一组价格并设置一个周期,后台需要在交易的时间内进行价格扫描一旦触发用户设置的价格的周期就需要下发消息提醒给用户,提醒用户交易做单;2. 订单超时自动关闭功能现在我们就来实现订单超时自动关闭功能。...
2020-03-18 17:30:54 963 1
原创 【redis】03-redis内存淘汰策略及如何配置
Redis内存淘汰策略将Redis用作缓存时,如果内存空间用满,就会自动驱逐老的数据。为什么要使用内存淘汰策略呢?当海量数据涌入redis,导致redis装不下了咋办,我们需要根据redis的内存淘汰策略,淘汰一些不那么重要的key,来满足大量数据的存入。Redis六种淘汰策略noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错。allkeys-lru:在主键...
2020-03-18 17:06:43 2329
原创 当redis宕机重启以后,该节点不能跟选举后的master数据主从同步
当redis以集群方式进行部署,此时,master宕机了,由哨兵机制选举新的newMaster出来。当oldmaster重启以后,会变成slave节点从图中,我们可以看到oldMaster确实变成了子节点,但是和master的连接状态却是关闭的首先我们分析一下是什么原因造成的当我们的oldMaster宕机了,会选举新的newMaster这个选举的过程中,哨兵会自动修改sentinel...
2020-03-15 20:48:59 2583 5
原创 【redis】02-redis持久化存储以及对象存储
1. redis存储对象redis存储对象主要有两种方式:(1)采用json序列化成字符串的方式进行存储(2)采用二进制的方式进行存储接下来我们详细看下这两种方式redis采用JSON序列化存储对象实现原理:主要是将对象进行JSON序列化成JSON字符串进行存储。取出来再将字符串还原成对象JSON案例:创建RedisUtilsStringRedisTemplate 主要为Str...
2020-03-05 17:36:12 358
原创 【redis】01-redis简介
关系型数据和非关系型数据库有那些:关系型数据库 非关系型数据库mysql redisorcale Memcached(不支持持久化)sqlserver关系型数据和非关系型数据库的区别:关系型数据库:操作的是IO,效率低非关系型数据库:操作的是内存,效率高redis的应用场景:token 令牌的生成短信验证码code(验证码有效期)实现数据缓存,经常查询的接口,数据不会经常变...
2020-03-05 17:22:46 162
原创 【jvm】01- java内存结构分析
java内存结构分析java内存结构java栈结构分析:栈帧局部变量表操作数栈动态连接返回地址运行时常量池对象的创建过程类加载的执行流程图对象创建的过程:对象内存分配方式指针碰撞空闲列表栈上分配:内存逃逸:对象结构分析对象的内存引用分析直接引用图解句柄池引用java内存结构我们根据线程是否共享将java内存结构分成两部分:线程共享区域 堆 方法区(1.8成为元区间)线程独占区域 ...
2020-03-03 17:40:01 675
原创 linux五种IO模型
linux五种IO模型同步和异步的区别:linux五种IO模型同步和异步的区别:同步和异步的区别同步:程序从上往下执行异步:程序从上往下执行会有多个分支共同执行(即开多个线程)。在web项目中因为web项目是基于请求和响应来做的。在同步的情况下,代码从上往下执行,如果其中某个方法耗时很长 ,会导致客户端一直转圈,不能及时收到回复。如何解决:采用多线程或者mq技术。但此种情况存...
2020-02-27 17:01:18 201
原创 【Netty】04 - 利用netty搭建类似于dubbo的rpc框架
学自蚂蚁课堂项目项目地址:dubbo原理图搭建dubbo rpc远程调用框架的思想搭建dubbo-server自定义rpc注解,在需要注册到zk上的类加,标识此类需要注册到zk上将本地服务注册到zk上zk上的节点要支持多个,以备之后的集群情况创建netty的服务器端,并添加相应的handler通过handler去解析相应,并利用反射执行相应的方法获取反射调用的结果,再相应给客...
2020-02-27 16:59:41 274
原创 【Netty】03-实战之序列化与反序列化协议
Netty实战之序列化与反序列化协议序列化与反序列化概念序列化的模式(两种)序列化图解什么rpc远程调用序列化的模式:序列化有哪几种方式?MessagePack的使用案例:MessagePack和JSON序列的区别:为什么要使用序列化使用MessagePack进行对象实例添加pom依赖添加User实体类创建自定义编码器MessagePackEncoder创建自定义解码器MessagePackDec...
2020-02-24 14:52:01 488
原创 【Netty】02-netty中不得不说的粘包与拆包
netty不得不说的粘包与拆包缓冲区使用Netty通讯的时候为什么会产生粘包和拆包如何解决粘包和拆包问题缓冲区提到粘包与拆包,我们需要先做一些铺垫,了解一下缓冲区的作用我们先来看一张图解:Client发送数据,如果没有缓冲区,采用的是IO流。IO流传输是按照字节进行传输的,效率极低。当我们改为缓冲区以后,我们可以把消息存到一起,一并发送比如说:“今天你过的还好吗”这样一组字符串要传输8...
2020-02-23 18:04:07 113
原创 【Netty】01-服务端和客户端的搭建
Netty服务端和客户端的搭建为什么采用Netty,而不采用Nio使用Netty创建服务器端使用Netty创建客户端为什么采用Netty,而不采用NioNio原生Api很复杂Nio存在epoll bug,会产生空轮询,导致cpu被占用100%Netty是基于Nio进行包装,性能上会更高Netty学习成本和使用成本更低摘抄自其他文章, Netty的优点总结:通过对Netty的分析,我...
2020-02-23 17:46:16 226
原创 【Nio】01--初始Nio组件
Nio学习第一天,三大组件只能支持一次的socket服务端支持客户端多次发送请求现在继续改进,支持多线程, 即伪异步方式由于线程过多,我们采用线程池来处理BIO 朝NIO的演变过程只能支持一次的socket服务端此种情况下,客户端发送一次数据以后,服务器端就会停止public class OnceSocketTcpServer { static byte[] buffer =...
2020-02-21 22:32:40 103
原创 osi七层网络模型及网络基础知识
java网络模型七层网络模型应用层表示层会话层传输层网络层数据链路层物理层socket编程技术socket流程图TCP协议和UDP协议TCP三次握手HTTP协议的四个特征请求和响应模型HTTP协议分类长连接和短连接七层网络模型应用层HTTP协议,邮件服务器,文件服务器表示层将数据进行转换,使各种系统之间能够进行通讯会话层创建会话的连接传输层使用TCP和UDP...
2020-02-17 16:19:50 518
原创 jdk1.7-HashMap原理分析
jdk1.7-HashMap原理jdk1.7-HashMap的简介jdk1.7-HashMap实现原理仿写源码jdk1.7-HashMap的简介hashMap的初步使用就不一一赘述了,很多文章都能找的到相应的用法,这里主要讲讲hashMapjdk1.7版本和jdk1.8版本有什么区别:jdk1.7采用的是数组+单向链表jdk1.8采用的是数组+红黑树,红黑树的效率高于单向链表我们主要...
2020-01-08 11:12:42 315
原创 NodeJs-lesson2-深入探究exports等~
深入探究exports等是否为全局变量变量有哪些大胆假设module模块探究变量有哪些exportsrequiremodule__dirname(学过webpack的朋友看到这个肯定不会陌生)__filename这里我们打印看看都是什么 console.log(exports); console.log(require); console.log(module); con...
2019-06-14 16:54:13 118
原创 NodeJs-Lesson1-require和module.exports探究
require和module.exports探究require和module.exports讲解requireexports和module.exports探究留一个疑问?为什么exports和require都能直接使用,是全局变量吗?require和module.exports讲解遵守开闭原则:对修改关闭,对扩展开放,所以要想使用引入的模块,子模块必须提供module.exports方法。否则...
2019-06-14 16:32:43 243
原创 NodeJs前导课
NodeJs前导课了解后端后端分层node的思想具有模块化了解后端后端分层web层接收和发送Http请求,还需要校验参数是否合法,将参数封装成对象,也可以成为web层,controller层业务逻辑层xxxService,也称为服务成,处理业务逻辑DAO层DB,存取数据持久层文件,数据库这里的数据库有两种,一种是关系型数据库(Msql),还有一种是非关系型数据库(Mongo...
2019-06-14 16:07:05 116
原创 VUE-Learning-01
VUE前导VUE的特点性能好为什么vue的性能会更好?什么是虚拟dom?视图和数据分离维护成本低什么会影响web性能?1. JS和 DOM是两种东西,每次连接都需要消耗性能DOM的位置和JavaScript的位置2. 操作DOM会导致重排和重绘浏览器的渲染过程重排和重绘什么时候触发重排?触发重排的属性:关于GPU和CPU什么是MVVM什么是渐进式VUE的特点性能好为什么vue的性能会...
2019-05-24 13:56:48 447
原创 ES6-MapES5模拟实现
ES6-MapES5模拟实现Map的主要原理实现原来Map中的部分api##ES6Map粗略介绍ES6中Map具有以下特点:任何值都可以存入Map当中,可以是function,undefined等是一种新的数据结构查询效率高Map的主要原理桶hash算法链表查询实现原来Map中的部分api1.首先来创建我们自己的Map工厂,构建初始化函数 function myMa...
2019-05-07 20:23:48 678
原创 h5-worker多线程js
h5-worker多线程jsworker阐述worker阐述在我们的印象当中,js都是单线程的,或者更多的是类似ajax这种异步加载的伪多线程(这里的伪多线程指的ajax发送请求,采用回调的方法,回调成功以后还是在主线程的队列中去执行回调)h5提供的worker构造器提供的是另外一个线程,也就是另外的一个队列,真正的达到多线程的情况。经过刚才的描述,有木有觉得这是一个很牛逼的东西,然而,暂...
2019-04-30 16:10:36 469
原创 h5-history解析
h5-history解析这是一个不太常用的api,但有一些场景比较适用,比如说,某用户填写了一个很复杂的表单,点了一下回退,就回退了一个网页,那用户的填写的所有信息都没了,那么,history就可以派上用场了我们来看一下这个实例把 <input type="text" id="search"/> <button id="btn"></button> ...
2019-04-30 15:47:07 799
原创 H5-locaStorage解析
H5-locaStorage解析浅谈cookie浅谈localStorage深入解析localStorage浅谈sessionStoragecookie, loaclStorage,sessionStorage的区别我们在谈谈什么是同一个域我们先说说localStorage是做什么用的用来存取数据,是一种缓存结构,说到缓存我们之前不是有cookie了吗,为什么还要用localStorage?...
2019-04-30 10:21:42 438
原创 ES6-...(spreed&rest)运算符
ES6-...收集/展开运算符...运算符的作用...运算符分类:读和写,ES6和ES7ES6中写的场景ES6中读的操作(spreed)ES7 ...运算符对于对象的处理…运算符的作用简化书写长度,提升开发效率…运算符分类:读和写,ES6和ES7读的场景var arg = [1,2,3]; console.log(…arg); -展开作用写的场景function test (…a...
2019-04-29 15:19:21 807
原创 ES6-let,const解析
ES6-let,const解析我们先看看ES5中var变量的缺点ES6-let 解析ES6-const解析我们先看看ES5中var变量的缺点var会使变量提升(即下面声明的上面也可以使用) console.log(a); var a = 10;变量可重复定义,也不会报错 var a = 10; var a = 20;var声明的变量会挂载到window上,会使wind...
2019-04-29 12:06:43 308
原创 ES6-babel工具的使用
ES6-babel工具的使用babel简介babel使用的条件babel下载与安装babel简介当ES6及ES6以后的迭代版本,可能浏览器不支持,或者node环境不完全支持的情况下,使用babel工具将语言降级为ES5,使浏览器可以支持在线babel工具 https://babeljs.io用于学习是进行对比、查询 https://www.babeljs.cnbabel使用的条件...
2019-04-29 11:35:51 596
原创 ES6-简介
ES6简介ES6简介ES6缺点语言迭代目的为什么要学习ES6:ES6简介ES2015年推出的JavaScript新版本也叫ES2015现在已经有ES7(2016)、 ES8(2017)、 ES9(2018)很多新增内容仍是提案ES5到ES6的转变位: 迈向大型企业化开发普遍使用的依然是ES6、ES7部分内容ES7及后面版本浏览器或node环境未完全支持,但已有babel工具可对其进行...
2019-04-29 11:23:32 3452
原创 ES6- Map-1介绍及常用api
ES6- Map-1介绍及常用apiMap简介Map对象的创建Map-api介绍1. add() 往Map中添加键值对2. get() 根据key取value3. delete() 根据key删除键值对4. keys() 获取所有的key5. values() 获取所有的value6. has() 判断map是否具有某个key7.clear() 清空Map8.size() 获取Map的长度9...
2019-04-24 00:12:21 755
原创 ES6- Set-2之去重—并集—交集—差集
ES6-Set -2 常规用法单个数组去重如何实现并集如何实现交集如何实现差集单个数组去重我们先来看一下再ES5中。我们数组去重的方法 let arr = [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]; let obj = {}; let newArr = []; for(var i = 0; i < arr.length; i++){ if(!ob...
2019-04-23 23:06:31 298
原创 ES6- Set-1之使用方法
ES6-Set -1简单介绍Set简介特点用途Set的删除方法遍历Set的第一种方法(forEach循环,参数代表循环里的单个值)数组转换成Set的方式Set转换成数组的两种方式(...运算符也是具有迭代接口就可以使用)==字符串拆分成数组的方法==Set简介ES6提供的构造函数,是一种新的存储结构特点只有属性值,成员值唯一(不能重复)用途可以转换为数组,本身具备去重,交集,并集,差集...
2019-04-23 21:52:29 709
原创 ES6部分源码重写 -4(1-classES7中的扩展)
ES7class新增填的属性使用ES7需要使用babel插件对语言进行降级,否则会报错1. 添加构造方法的静态属性2. 添加比ES6简单的私有属性书写方法3. 装饰器在理解了装饰器的前提下,我们来看看ES5中的一个案例使用ES7需要使用babel插件对语言进行降级,否则会报错首先需要下载babel插件(前提是已经安装了node.js)babel的安装教程在之前的ES6中已经学习,现在需要补上...
2019-04-22 01:36:22 179
原创 ES6部分源码重写 -3(ES6-ES5的方式来手写部分源码)
ES6中的多出的功能对象必须要new的方式才能出来定义原型上的方法和静态方法添加原型上的方法和静态方法子类继承父类到此还有一个小问题需要注意主要完成一下几个功能对象必须要new的方式才能出来创建对象这里创建对象的方法采用立即执行函数,封闭作用域,避免将私有变量暴露因为使用了立即执行函数,执行后就销毁,所以需要将构造函数返回给Plane这个变量 var Plane =...
2019-04-22 00:17:22 341
原创 ES6部分源码重写 -2(ES6-构造函数初步解析)
ES6中的class上一篇讲解了ES5中的对象的创建和继承,使用ES5的时候有一些要求和限制现在使用ES6来搞class Plane{ static rotated(){ console.log("rotate"); } constructor(name){ this.name = name || '普通飞机'; th...
2019-04-21 22:42:12 257
原创 ES6部分源码重写 -1(ES5-构造函数解析)
ES6部分源码重写 -1剖析ES5中对象的使用剖析ES5中对象的使用创建一个飞机的对象该对象具有以下属性和方法名称血量飞行方法此处将方法定义在飞机的原型上,从效率的角度来看更低 Plane.prototype.fly = function(){ console.log("fly"); } function Plane(){ this.name = name || "...
2019-04-21 17:10:18 246 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人