- 博客(35)
- 资源 (1)
- 收藏
- 关注

原创 源码角度,理清spring IOC容器初始化的全过程
IOC容器初始化过程中4个比较重要的类1.BeanFactory系列:只实现IOC容器的基本功能BeanFactory的基本功能:a.通过containBean方法判断IOC容器中是否含有指定名字的Beanb.通过isSingleton方法查询指定名字的Bean是否为Singleton类型的Beanc.通过isPrototype方法查询指定名字的Bean是否为Prototype类型的Beand.通...
2018-05-05 21:43:34
251

原创 java源码解读之HashMap
package java.util;import java.io.IOException;import java.io.InvalidObjectException;import java.io.Serializable;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import ja...
2018-04-05 16:59:54
287

原创 mysql索引优化
十分地简单认识下与索引有关的数据结构 二叉查找树平衡二叉树B+树B+树索引聚集索引非聚集索引InnoDB B+树索引MyISAM B+树索引CardinalityInnoDB与MyISAM中Cardinality值的统计优化器不使用索引及优化索引的类型普通索引唯一索引主键索引联合索引覆盖索引全文索引创建索引的几大原则简单例子体验下联合索引1.十分简单地认识下与索
2017-05-28 16:16:28
6070
1
原创 系统与用户角度的协议分层
系统角度的协议分层一、分为哪几层:二、实体层:电脑要组网,所需要做的第一件事就是将电脑连起来,可用电缆、光缆、双绞线、无限电波等方式,这就是“实体层”,通过物理手段将电脑彼此连接起来,这里主要负责规定网络的一些电气特性,作用是负责传送0和1的电信号三、链接层:3.1.作用:然而,通过实体层传送的0和1电信号是没有规律的,也就是说单纯的0和1是没有任何意义的,因此需要规定电信号的解读方式:多少个电信号算一组?每个信号位有什么意义?这就是“链路层”的作用,在“实...
2021-03-21 15:32:00
296
原创 springBoot零配置原理与内嵌tomcat原理
一、使用传统springMVC“必要”的配置:1.配置web.xml<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value&...
2020-03-20 15:05:24
1632
原创 五种I/O模型
一、一个输入操作的两个阶段:阶段1:等待数据准备好;阶段2:将数据从内核空间复制到用户进程空间。对于一个socket上的输入操作,阶段一通常就是等待数据从网络中到达(数据到达后会被复制到内核中的某个缓冲区),阶段二是把数据从内核缓冲区复制到用户进程缓冲区。recvfrom为系统调用,可以将操作在用户进程空间运行切换到在内核空间运行。用户空间与内核空间:我们知道现在操作系统都...
2020-03-18 11:38:23
690
原创 kafka系列——踩坑篇
踩坑①现象:新版生产者发不出去消息,broker端也没收到消息原因:旧版生产者有个配置"producer.type",async为异步发送,sync为同步发送,默认为同步发送;而新版本废弃了该配置,于是每次调用send方法时候会将消息缓存在本地的buffer中而不是立即发送,只有等到消息总大小或到达批处理发送的间隔时间才会把消息发出去,而发送代码如下:ZzKafkaProducer p...
2018-11-28 21:48:15
3729
原创 kafka系列——日志篇
kafka的日志格式ps:该图引用下面kafka日志版本的演变的博客crc32:消息校验码 magic:消息版本号,0=v0,1=...
2018-11-28 20:52:04
12084
原创 kafka系列——KafkaConsumer源码分析
实例化过程与KafkaProduer类似,只是初始化的组件有所差异,看KafkaConsumer构造函数消费者实例化的主要组件介绍ConsumerConfig:消费者级别的配置,将相应配置传递给其他组件ConsumerCoodinator:负责消费者与服务端 GroupCoordinator 通信ConsumerNetworkClient:对网络层通信 NetworkClien...
2018-11-26 23:53:17
5611
原创 kafka系列——KafkaProducer源码分析
实例化过程在KafkaProducer的构造方法中,根据配置项主要完成以下对象或数据结构的实例化① 配置项中解析出 clientId,用于跟踪程序运行情况,在有多个KafkProducer时,若没有配置 client.id则clientId 以前 辍”producer-”后加一个从 1 递增的整数② 根据配置项创建和注册用于Kafka metrics指标收集的相关对象,用于对 Ka...
2018-11-25 23:21:30
3748
1
原创 kafka系列——基础概念介绍
国际惯例的简单介绍kafka是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,有着如下优秀的特性: 高吞吐、低延迟:kafka每秒可以处理几十万条消息,延迟最低只有几毫秒,每个topic可以分多个分区, 消费者组对分区进行消费操作 可扩展性:kafka集群支持热扩展 持久性、可靠性:消息被...
2018-11-20 22:16:21
485
原创 java源码解读之LinkedList
package java.util;import java.util.function.Consumer;/** * 通过LinkedList的继承和实现的类与接口,可以看出: * 由于继承了AbstractSequentialList的双向链表,因此可以被当作堆栈、队列或双端队列进行操作 * 实现 List 接口,能对它进行队列操作 * 实现 Deque 接口,即能将Linked...
2018-04-05 16:50:16
262
原创 java源码解读之ArrayList
还是跟之前几篇源码的一样,相关信息都写在源码里面,直接祭出源码啦~~~package java.util;import java.util.function.Consumer;import java.util.function.Predicate;import java.util.function.UnaryOperator;/** * ArrayList继承AbstractList...
2018-04-05 16:34:43
223
原创 nginx+tomcat与tomcat性能对比测试
1.硬件环境:物理总内存:16G物理CPU个数:2CPU内核数:12.软件环境:操作系统版本:CentOS release 6.9jdk版本:jdk1.7.0_09jfinal版本:jfinal-1.9虚拟机配置:JAVA_OPTS='-server -Xmx1024m -Xms1024m -Xss512k -XX:ParallelGCThreads=4 -XX:+UseConcMarkSweep...
2018-04-05 16:23:10
5355
3
原创 jfinal与servlet性能对比测试
1.硬件环境:物理总内存:16G物理CPU个数:2CPU内核数:12.软件环境:操作系统版本:CentOS release 6.9jdk版本:jdk1.7.0_09servlet版本:servlet-api 2.5jfinal版本:jfinal-1.9虚拟机配置:JAVA_OPTS='-server -Xmx1024m -Xms1024m -Xss512k -XX:ParallelGCThread...
2018-04-05 16:21:29
1047
原创 rabbitmq安装与测试
1 Erlang旧版卸载:cluster集群中的所有节点的erlang版本和rabbitmq版本必须一致, 否则无法加入clusteron Ubuntu:sudo apt-get purge erlang*on Fedora:sudo yum remove erlang*installed erlang from source:rm -rf {erlang home directory}.2 源码...
2018-04-04 21:51:45
3237
原创 redis学习笔记之内存篇
1.内存消耗:内存统计:info memory命令重点关注:used_memory_rss(redis进程占用内存总量)、used_memory(redis内部存储数据占用内存总量)与mem_framentation_ratio(前面2个的比值,指碎片率)mem_framentation_ratio>1时,说明userd_memory_rss - used_memory多出的部份内存没用于存...
2018-04-04 21:22:43
387
原创 redis学习笔记之阻塞篇
1.内因:A.api或数据结构使用不合理: 如:对一个包含上万元素的hash结构执行hgetall操作,数据量大且命令复杂度O(n),必然阻塞B.慢查询:前面有介绍C.大对象:执行./redis-cli -h {ip} -p {port} --bigkeys命令可找出当前最大对象出来,接着便可对大对象进行调整或缩减或分成多个小对象生产环境可执行debug object key查看key对应valu...
2018-04-04 21:20:11
8247
原创 redis学习笔记之主从复制篇
1.主从配置:3种配置主从的方式:a.配置文件slaveof {masterHost} {masterPort}b. redis-server --slaveof {masterHost} {masterPort}c. slaveof {masterHost} {masterPort} 命令断开主从复制关系:从节点执行slaveof no one切主操作流程:断开与旧主节点的复制关系→与新主节点建...
2018-04-04 21:19:01
395
原创 redis学习笔记之持久化篇
1.RDB:将当前进程数据生成快照保存到硬盘的过程A.触发RDB的2种方式:a.手动触发:save命令:阻塞当前redis服务器,直到RDB过程完成为止,不建议线上使用bgsave命令:redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,阻塞只发生在fork阶段b.自动触发:使用save相关配置(redis.conf文件),如save m n,则再m秒内数据集存在n次修改时,自...
2018-04-04 21:18:05
308
2
原创 redis学习笔记之常用技巧
1.慢查询分析:客户端命令的生命周期:慢查询只统计第3步的耗时,无慢查询不代表客户端不存在超时问题,如网络带宽问题与慢查询相关的配置:a.slowlog-log-slower-than:预设阀值,单位为微秒,默认10000,执行时间超过该值的命令会被记录到慢查询日志(PS:设为0会记录所有命令,<0则不记录任何命令)b.slowlog-max-len:设置慢查询日志最多存储多少条,超过该值则...
2018-04-04 21:17:00
277
原创 redis学习笔记之5大数据类型的应用场景
1.string:a.缓存热点数据,如图:b.多维度计数、防作弊:incr命令c.共享session:session_id是唯一的,以此为key存放session,redis集中管理,但要防止redis崩溃d.限速:如短信验证码限速,setex命令2.hash:a.缓存实体类信息,如图:与直接用string去存相比,可以更加细粒度地操作实体类的属性;如需修改实体类某一属性,使用string存需要整...
2018-04-04 21:14:59
501
原创 redis学习笔记之5大数据类型的基本实现
1.内部编码:每种数据类型都有不同的编码,在满足一定条件下会进行编码转换2.各种编码对应的数据结构简单介绍:A.简单动态字符串(sds,simple dynamic string):因传统C的字符串不能高效支持长度计算与append操作,故redis采用sds替换C默认的字符串表示传统C字符串计算长度:strlen(s)复杂度为O(n)传统C字符串n次append:进行n次内存分配(realloc...
2018-04-04 21:13:39
199
原创 java源码解读之ClassLoader(loadClass方法)
本篇文章仅仅只是对ClassLoader类的loadClass方法从源码上进行分析,至于跟类加载相关的双亲委托模式等其他知识点,不做介绍与阐述,因为网上大把介绍这些的文章,而且我不认为自己能写得比他们好接下来又是跟之前的两篇一样,直接贴相关的源代码啦~\(≧▽≦)/~public abstract class ClassLoader { private static native
2017-03-05 17:53:20
2594
2
原创 java源码解读之String
String类可以说是我们日常开发绝对会接触到的数据类型了,而关于String类的一系列操作方法也是很常用的,因此String是我第2个看的Java源码,还是跟Integer的源码一样,分析全在源码上面,于是又可以疯狂贴代码了哈哈哈,下面开启贴代码模式..................package java.lang;import java.io.ObjectStreamClass;
2017-02-27 20:16:19
357
原创 java源码解读之Integer
每天都在用着Java各种各样的类与方法,但是也仅仅只是局限于用,却不了解那些每天都接触的类与方法内部是如何去实现的,遇到问题只能不停地度娘谷歌看文章,因此决定从现在开始学习jdk的源码,我相信基础的东西永远都不会过时,不仅要知其然,还要知其所以然。先从我们平常用的最多的数据类型入手,最常见的莫过于Integer类型,本篇文章就对Integer的源码常用的方法进行解读,源码去掉了多余且看得一脸懵
2017-02-19 22:04:25
617
原创 我的servlet学习过程(四):JSP部分
JSP部分:什么是jsp?jsp其实就是一个servlet,该servlet包含很多个对象,当浏览器请求一个jsp文件时,服务器会将该jsp文件翻译成servlet后使用out对象向浏览器输出 JSP模板元素:JSP页面中的HTML内容称之为JSP模版元素;JSP模版元素定义了网页的基本骨 架,即定义了页面的结构和外观JSP脚本表达式:用于将程序数据输出到客户端,语法:
2016-09-11 18:59:50
797
原创 我的servlet学习过程(三):Servlet
一、servlet入门程序:Hello servlet.javapackage cn.study;import java.io.*;import javax.servlet.*;public class FirstServlet extends GenericServlet{public void service(ServletRequest req,ServletResp
2016-08-16 21:03:17
415
原创 我的servlet学习过程(二):tomcat服务器部分
1、常见协议的工作端口: http 80 smtp(邮件) 25 pop3 110 ftp 23 https 4432、tomcat常见启动问题: 2.1、Java_home环境变量:在windows中设置java_home环境变量 只要在setclasspath.bat批处理
2016-08-06 18:48:28
265
原创 我的servlet学习过程(一):HTTP部分
这段时间一直在找实习,整天面试,面完之后闲着没事,分享下我自学servlet的过程,希望能对跟我一样在自学的朋友有所帮助~~http部分:1.http请求: 1.1、包含:一个请求行:用于描述客户端的请求方式、请求资源名称以及使用的HTTP协议版本号若干消息头:用于描述客户端请求哪台主机、以及客户端的一些环境信息等扥实体内容:包含一些请求数据,如表单提交等等,与
2016-08-06 00:27:49
319
原创 看了《spring技术内幕》简单的图解总结下spring一些请求调用流程
看了《spring技术内幕》,自己画的一些spring源码调用的流程图,供自己以后需要的时候可以快速了解大致的流程,顺便记录下自己的学习过程
2016-05-31 11:37:01
470
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人