Sundry
文章平均质量分 75
杂项
包含各种技术
恐龙弟旺仔
保持热爱,保持进步
展开
-
数组封装应用及有序数组、二分查找源码实现
常规数组应用需要考虑很多边界问题,现将这些问题封装起来,用户在使用时直接调用方法即可,不需要关心边界,算是对数组应用的高级封装以下是对数组应用的封装package com.example.demo.array;import java.util.Arrays;public class ArrayDemo { private String[] arr; // 数组原创 2018-03-03 09:13:38 · 256 阅读 · 0 评论 -
红黑树(平衡操作详解)
1.红黑树 红黑树本身也是一种二叉树,只不过是一种比较特殊的二叉树 二叉树如果插入的数值是有序时,二叉树就是非平衡的,基本跟链表类似了(时间复杂度O(N)) 针对这种情况,就产生了红黑树,这种树在插入的过程中,会通过一系列的方式来保持树的平衡,使其时间复杂度一直维持在O(logN)2.红黑树规则 * 每一个节点不是黑色就是红色 * 根节点总是黑色的 * 如果节点...原创 2018-03-21 17:41:19 · 8099 阅读 · 0 评论 -
栈(源码实现Java)
1.栈 栈相对于开放的数组而言,是访问受限的 栈只允许访问一个数据项,即最后插入的数据项,移除这个数据项后才能访问倒数第二个数据项 栈的特点:先进后出2.源码实现public class StackDemo { private String[] arr;//数组 private int arrSize;//数组长度原创 2018-03-21 14:02:28 · 700 阅读 · 0 评论 -
二叉树(Java实现)
1.二叉树 数组:查询快,插入慢 链表:查询慢,插入快 而二叉树结构既能快速查找,也能快速添加2.特点 一个节点的左子节点的关键字值小于这个节点,右子节点的关键字值大于或等于这个父节点3.源码实现public class BinaryTree原创 2018-03-16 10:34:34 · 369 阅读 · 0 评论 -
单端链表、双端链表、双向链表的代码实现
1.单端链表单端链表是链表中最简单的一种格式,用户的操作(添加、删除、遍历)只能从链表头开始,具体代码实现如下public class SingleLinkDemo { private Node first;// 首节点 //在首节点插入 public void insertFirst(String data){ Node node = new Node(data); node...原创 2018-03-06 15:00:17 · 669 阅读 · 0 评论 -
2-3-4树分析及源码实现
一.2-3-4树的特点 1.名称特点 2、3、4的含义是指一个节点可能含有的子节点的个数 对于非叶节点,假如子节点连接的个数是L,数据项的个数是D,那么L=D+1,非叶节点的子节点数总是比它含有的数据项多1. 2.数据组织特点 节点中的数据项按关键字值升序排列,习惯上从左到右升序二:节点的分裂 在2-3-4树的数据添加时,在往下寻找...原创 2018-03-19 17:59:05 · 1008 阅读 · 0 评论 -
哈希表实现
1.简介 哈希表是一种数据结构,它可以提供快速的插入操作和查找操作。无论数据项多少,插入和删除操作算法复杂度O(1) 实现:将值映射到数组的某个下标,在该下标处存储该值 缺点:由于其基于数组,数组创建后难以扩展。当哈希表被基本填满时,性能下降的非常严重 2.处理哈希冲突的方式 1)开放地址法原创 2018-03-09 14:33:19 · 471 阅读 · 0 评论 -
Java实现数据结构堆
一:堆 1.特点: * 它是完全二叉树。除了树的最后一层节点不需要是满的,其他的每一层从左到右都是满的。最后一层不允许有"洞"节点 * 常常用一个数组来实现 * 堆中的每一个节点关键字都大于等于这个节点的子节点的关键字 2.模型展示此树即为完全二叉树此树就不符合特点1,为非完全二叉树 3.堆的适用场景 堆和二叉搜索树相比是弱...原创 2018-03-27 09:49:25 · 310 阅读 · 0 评论 -
队列(源码实现Java)
1.队列 队列与栈类似,一般都是通过数组来实现相关功能,通过数组中头部指针和尾部指针的移动来保持所有数据项的位置不变 队列特点:先进先出2.源码实现public class QueueDemo { private String[] arr; private int maxSize; private int front;//头部index private int rear;//...原创 2018-03-21 14:01:02 · 1160 阅读 · 0 评论 -
通过Wireshark学习ARP协议
前言: 一阶段没有进行博客输出了,确实是懈怠了。 工作是一方面,带娃更是辛苦活。 以后还是要稳定输出博客,看到越来越多的小伙伴关注,点赞,还是比较激动的。 看了大神们的博客,差距还是很大的,希望以后向大神们靠拢。加油。知识点储备: ARP协议,不像TCP/IP协议那么如雷贯耳,但是也是互联网中必不可少的一环。 ARP(Address Resolution Protocol)地址解析协议,是根据IP地址获取物理地址(MAC...原创 2020-10-11 16:29:51 · 529 阅读 · 0 评论 -
图解TCP/IP读书笔记(1-3章)
一:网络基础知识 1.协议 简单来说 ,协议就是计算机与计算机之间通过网络进行通信时事先达成的一种约定。这种约定使得那些不同的计算机之间,只要遵循相同的协议就可以实现通信。反之,如果使用的协议不一致,则无法实现通信。 协议如同人与人之间的对话,只有使用相同语言才能交流。 2.协议分层与OSI原创 2017-12-28 16:59:53 · 555 阅读 · 0 评论 -
图解TCP/IP学习笔记(4-6章)
四:IP协议 1.IP基础知识 IP协议主要作用在网络层 1)网络层与数据链路层的关系 网络层的下一层数据链路层的主要作用是互联同一种数据链路的节点之间进行包传递。而一旦跨越多种数据链路,就需要借助网络层。网络层可以跨越不同的数据链路。 M原创 2018-01-05 16:41:38 · 1037 阅读 · 0 评论 -
为何要对URL进行编码
我们都知道Http协议中参数的传输是"key=value"这种简直对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割。如"?name1=value1&name2=value2",这样在服务端在收到这种字符串的时候,会用“&”分割出每一个参数,然后再用“=”来分割出参数值。 针对“name1=value1&name2=value2”我们来说一下客户端到服务端的概念上解析过程转载 2018-03-25 10:59:46 · 1842 阅读 · 0 评论 -
怎样解决httpclient中出现NoHttpResponseException异常
httpclient版本:4.5.2在项目实际运行中,偶发异常:org.apache.http.NoHttpResponseException。官网解释是:In some circumstances, usually when under heavy load, the web server may be able to receive requests but unable转载 2018-03-16 10:53:52 · 5459 阅读 · 1 评论 -
Linux常用命令集(个人整理)
一.Linux文件处理命令1)ls(list)2)cd (change directory)切换目录3)pwd(print working directory)展示当前所在的目录4)mkdir(make directory)创建目录 -P(parent) 同时创建多个目录5)touch 创建文件6)cp(copy) cp file1 fi原创 2017-12-26 10:26:32 · 773 阅读 · 0 评论 -
MySQL日志文件解析(binlog)
前言: binlog(二进制文件)一直来说都是一个比较难搞懂的点,笔者前后读了几遍,读了当时理解了,但是事后还是很模糊,尤其是跟redo log放在一起的时候,更是蒙的不行。 总结原因:还是没有真正理解binlog的作用。所以才促成了这篇博客,希望通过这篇博客前后梳理一下binlog的整个流程。1.什么是binlog? binlog也叫作二进制日志(顾名思义...原创 2019-12-23 11:17:12 · 1038 阅读 · 0 评论 -
MySQL日志文件解析(查询日志、错误日志、慢查询日志)
前言: MySQL的日志文件详细记录了数据库在运行时的各种活动轨迹。 MySQL通常包含以下日志文件:查询日志;错误日志;慢查询日志;二进制日志。 通过这些日志文件,我们对MySQL的运行时错误进行分析,对慢查询sql进行分析... 下面我们就来看下这些日志的详细记录情况。准备工作: 笔者使用的MySQL版本为mysql-5.7.17,使...原创 2019-12-21 18:01:14 · 1353 阅读 · 0 评论 -
InnoDB多版本控制
概念: 多版本控制:MVCC,也就是一致性非锁定读的具体实现方式。 具体实现方式为:如果读取的行正在执行排他锁类操作(update、delete等),该查询则不会等待锁的释放,而是读取该行的一个快照数据。 问题来了,什么叫做行快照数据呢? 实际就是当前行数据的历史版本数据。 下面我们就来通过示例看下MVCC的实现。1.REPE...原创 2019-12-29 12:07:11 · 339 阅读 · 0 评论 -
redo log与undo log
前言: 这一对难兄难弟配在一起,面试的时候聊起来不要太嗨。估计面试者直接就死在这了。对MySQL的了解越多,越发现想很清晰的聊明白这两个之间的区别和联系就越难。 本着写博客让自己更清晰的角度,还是要记录一下笔者对他们的理解的。1.事务的特性实现 什么是事务?估计这个问题每个人的回答都不太一样。笔者简单理解为:事务是一组操作的集合,这组操作是原子性的,同时成功...原创 2020-01-11 14:29:13 · 965 阅读 · 1 评论 -
InnoDB共享锁和排它锁(行锁类型)
前言: 最怕面试官问到一大堆的锁概念了,表锁、页锁、行锁,排它锁、共享锁... 有关于锁的概念实在太多了,而我们在实际使用中使用到的又太少。很少有专门去写特定类型的锁实现,一般都是数据库默认帮我们做了相应的锁动作。 本文就着示例把InnoDB中的行锁的两种标准实现:共享锁和排它锁分析一下准备: 1)笔者新建了张表(实际是copy的其他表),city...原创 2019-12-29 12:03:57 · 817 阅读 · 0 评论 -
MySQL Sysbench压力测试
1.Sysbench的安装 1)下载相关tar包 用户可下载 http://imysql.com/wp-content/uploads/2014/09/sysbench-0.4.12-1.1.tgz 2)编译cd /sysbench-0.4.12-1.1./autogen.sh./configure --wit原创 2017-12-20 16:42:20 · 561 阅读 · 0 评论 -
Redis内存模型
五:理解内存 1.内存消耗参数名称值used_memory自身内存一般非常少对象内存占比最大缓冲内存客户端缓冲、复制挤压缓冲区、AOF缓冲区used_memory - rss-used_memory内存碎片不合理的使用原创 2018-02-02 16:45:34 · 1533 阅读 · 0 评论 -
缓存穿透,缓存击穿,缓存雪崩解决方案分析
前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。转载 2018-01-04 15:20:52 · 269 阅读 · 0 评论 -
Redis客户端应用
三:客户端应用 1.client list 列出与服务端连接的所有客户端信息,命令如下127.0.0.1:6379> client list id=4 addr=127.0.0.1:59278 fd=5 name= age=1004 idle=970 flags=O db=0 sub=0 psub=0 multi=-1 qbuf=0 qbu原创 2018-02-02 16:36:04 · 384 阅读 · 0 评论 -
redis安装、启动、关闭(优雅型)、踩坑
一:Redis安装与启动 1.Redis安装 下载相应的tar包安装即可,具体可参考Redis官网 https://redis.io/download ,下面有具体的操作明细$ wget http://download.redis.io/releases/redis-4.0.6.tar.gz$ tar xzf redis-4.0.6.t原创 2018-01-20 12:41:57 · 1630 阅读 · 0 评论 -
Redis持久化
四:持久化 redis支持RDB和AOF两种持久化机制,持久化有效避免了因程序退出造成的数据丢失问题。 1.RDB 将当前进程数据生成快照保存到硬盘的过程。 1)触发机制 * 手动触发 save|bgsave命令,触发命令使用如下127.0.0.1:63原创 2018-02-02 16:40:48 · 857 阅读 · 0 评论 -
Redis压力测试报告
Redis配置Max_total200Max_idle100Max_wait10Time_out3000测试机器(本机)参数CPU2核内存4G网络原创 2017-11-29 14:37:17 · 10168 阅读 · 6 评论 -
Redis高级应用
二:Redis高级应用 1.慢查询分析 类似于MySQL的慢查询分析,通过设置查询超时时间,获取结果来定位问题 1)配置参数 通过配置redis.conf文件中的slow-log-slower-than 1000 #查询超过该时间即为慢查询(单位为微秒)slow-log-max-len 128 #原创 2018-01-20 17:38:51 · 345 阅读 · 0 评论 -
Memcache安装与使用(Java)
1.memcache简介 memcache是一个高性能、分布式的内存对象缓存系统 一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)2.特点 * 协议简单(使用简单的基于文本行的协议) * 基于libevent的事件处理(libevent是一个程序库,它将linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口、即时对服...原创 2018-04-11 18:33:12 · 714 阅读 · 0 评论 -
ELK5.x搭建全纪录
一:准备工作 1.ES集群搭建请参考笔者另一篇文章 http://blog.csdn.net/qq_26323323/article/details/78222981 ,所需环境也在该文章中有提及 2.保持logstash、kibana版本与ES版本相同,避免版本不兼容问题,笔者都选择使用5.6.0版本,下载地址为 https://www.elastic.co/cn/downl...原创 2017-11-15 17:10:28 · 505 阅读 · 0 评论 -
kafka性能测试
1.环境准备 1)云机环境(三台云机环境一致)CPU4核内存8G网络(网卡)1000Mbs 2)kafka配置(version:0.9.0)配置文件属性内容属性值server.propertiesnum.netw原创 2017-12-20 16:09:49 · 624 阅读 · 0 评论 -
Tomcat基本架构解析(Tomcat架构解析学习笔记)
1.Tomcat组件架构设计 1)server 服务器可以描述为这样一个应用:接收客户端发来的请求数据并进行解析,完成相关业务处理,然后把处理结果作为相应返回给客户端。 通常我们可以使用serversocket监听指定端口来实现该功能 2)Connection和Container(Engine) 当我们将请求监听...原创 2018-12-06 10:42:56 · 15143 阅读 · 2 评论 -
Tomcat源码解析:Jsp文件的编译、实现
1.Jsp简介 jsp(java server page),其根本是一个简化的Servlet技术,是一种动态网页技术标准。 它是在传统的网页HTML页面中插入java代码段,从而形成jsp文件,后缀为.jsp。 jsp同Servlet一样,是在服务端执行,通常返回给客户端的是一个HTML文件。 这种动态网页技术,主要目的是将逻辑从Servlet中分离,jsp...原创 2018-12-06 11:18:33 · 6038 阅读 · 0 评论 -
Tomcat源码解析:Catalina源码解析
1.Catalina 对于Tomcat来说,Catalina是其核心组件,所有基于JSP/Servlet的Java Web应用均需要依托Servlet容器运行并对外提供服务。 4.0版本后,Tomcat完全重新设计了其Servlet容器的架构,新版本的Servlet容器被命名为Catalina。 Catalina包含了前面讲到的所有容器组件。它通过松耦合的方式继承Co...原创 2018-12-06 10:55:33 · 1094 阅读 · 0 评论 -
Tomcat源码解析:Container中的Pipeline和Valve
前言: 我们在上一篇博客 中分析了关于tomcat处理请求的全过程,在最后的时候交给了当前Engine的pipeline去处理。 Engine.pipeline获取了first_valve,然后执行其invoke方法,即完成了请求的处理。 那么这个Pipeline和Valve到底什么关系呢,valve.invoke()方法到底是如何执行的呢?在本篇博客中就来分析一下...原创 2018-12-06 11:25:59 · 693 阅读 · 0 评论 -
Tomcat源码解析:Web请求处理过程
前言: Catalina是Tomcat提供的Servlet容器实现,它负责处理来自客户端的请求并处理响应。 但是仅有Servlet容器服务器是无法对外提供服务的,还需要由连接器接收来自客户端的请求,并按照既定协议进行解析,然后交由Servlet容器处理 1.Coyote Coyote是Tomcat连接器框架的名称。客户端通过Coyote与服务器建立连接、发送请...原创 2018-12-06 11:09:44 · 818 阅读 · 0 评论 -
log4j_slf4j源码分析(下)
前言: 针对于上篇文章 log4j_slf4j源码分析(上),有一个遗留问题,Logger类中域AppenderAttachableImpl中的Appender集合是什么时候被添加进去的呢? 下面就跟随笔者一起来看看吧从LoggerFactory获取Logger的地方开始分析,由前文可知,Log4jLoggerFactory为其实现类1.Log4jLoggerFactory.getLo...原创 2018-07-02 18:46:40 · 355 阅读 · 0 评论 -
热切换Log4j日志级别
前言: 在项目中用到了kafka、rabbitMQ等MQ,每次接收到信息的时候都将接收信息debug到本地,但是信息太多的时候,希望项目不停的情况下将debug级别切换到INFO,这样可以减少日志的输出,于是研究了两天log4j源码,具体源码笔记可参考笔者的另外两篇文章https://blog.csdn.net/qq_26323323/article/details/80886304 htt...原创 2018-07-04 10:57:32 · 1829 阅读 · 2 评论 -
slf4j log4j logback关系详解和相关用法
转载至 https://www.cnblogs.com/Sinte-Beuve/p/5758971.html写java也有一段时间了,一直都有用slf4j log4j输出日志的习惯。但是始终都是抱着“拿来主义”的态度,复制粘贴下配置文件就开始编码了,于是这段时间详细的看了下日志库。slf4j log4j logback的关系The Simple Logging Facade for Java是什么...转载 2018-07-02 14:23:38 · 388 阅读 · 0 评论 -
log4j_slf4j源码分析(上)
前言: 对slf4j和log4j、logback的关系不太了解的少年们可以先看下这篇文章 https://blog.csdn.net/qq_26323323/article/details/80883760 具体来说,slf4j是一系列的接口规范定义,而Log4j、logback则是其具体实现,在写法上,我们可以直接针对接口编程,底层实现可任意切换1.基于log4j的日志功能实现 ...原创 2018-07-02 16:38:04 · 814 阅读 · 0 评论