自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

追梦的小狼狗

Coding Change Life

  • 博客(187)
  • 资源 (4)
  • 收藏
  • 关注

原创 设计模式

23种设计模式精讲创建型单例模式单例模式的实现一般是私有化构造器,然后非空判断调用静态方法返回实例。单例模式需要解决线程安全问题,因此实例本身需要用volatile关键字实现可见性和禁止重排序,再进行双重验证锁(即对获得实例的方法进行同步,同时两次判断实例是否确定为空,只有确定为空才可以创建实例)更简单的方式是利用枚举类实现单例模式。枚举类中的每个字段都是私有构造器构造的,同时枚举类只会...

2019-07-24 16:53:25 272

原创 进程、线程与协程的概念

进程进程可以简单的理解为应用程序。进程是系统资源分配的最小单位,系统由一个个进程(程序)组成。线程线程属于进程多个线程共享进程的内存地址空间进程相当于一个容器,而线程而是运行在容器里面的,因此对于容器内的东西,线程是共同享有的,因此线程间的通信可以直接通过全局变量进行通信,但是由此带来的例如多个线程读写同一个地址变量的时候则将带来不可预期的后果,因此这时候引入了各种锁的作用,例如互斥锁...

2019-07-22 19:19:50 241

原创 为什么Netty底层不使用AIO

AIO明显性能要优于NIO我们知道,AIO是异步非阻塞,NIO是同步非阻塞,单看性能而言,的确是AIO要比NIO更胜一筹。相信大家也有像我一样的疑惑,那为什么AIO优于NIO,Netty底层不使用AIO呢?接下来我们看下这几个原因Netty底层使用NIO的原因NIO中将多路请求注册到多路选择复用器上,线程轮询请求状态,发现线程完毕则分配线程进行处理业务逻辑;而AIO是每个请求从一开始就分...

2019-07-19 15:48:48 3163

原创 到底什么是回调

到底什么是回调?这个问题从我入门编程开始就一直不得其解,今天看到了一篇博客终于能理解了点回调的思想。生动形象了讲解了回调看完上面那篇博客,我个人对回调的理解就是A中调用B的方法C,B中的方法C又调用了A中的方法D关于回调接口看完上面那篇博客,很多人认为其实A是没有必要实现CallBack<>这个接口的,直接在B方法的参数列表中声明A的类型即可,这样也能做到B中方法C调用A的方...

2019-07-18 17:12:47 7640

原创 栈和队列

2019-07-18 10:10:29 134

原创 Netty-Channel

Channel的常用操作(与网络通信相关)Channel read()从当前的Channel中读取数据到第一个缓冲区中,如果数据被成功读取,触发ChannelHandler.channelRead()事件,读取操作调用完成后,紧接着会触发ChannelHandler.channelReadComplete事件,这样业务的ChannelHandler可以决定是否需要继续读取数据Channel...

2019-07-18 10:06:58 280

原创 Netty-ByteBuf

ByteBuf由于NIO编程的复杂性,ByteBuffer也有其局限性,主要缺点如下:ByteBuffer长度固定,一旦分配成功,容量无法动态扩展或者伸缩,当需要编码的POJO对象大于ByteBuffer容量,会出现越界ByteBuffer只有一个标识位置的指针position,读写的时候需要不断地手工调用flip()和rewind()等,否则很容易导致程序失败ByteBuffer的AP...

2019-07-18 10:01:44 680

原创 树的那些事儿

2019-07-18 00:22:02 151

原创 xml那些事儿

xml文件读取什么是xml文件?xml文件的表示是一种以".xml"为扩展名的文件。其存储结构为树形结构:节点名称区分大小写xml文件开头要加上版本信息和编码方式< ?xml version=“1.0” encoding=“UTF-8”? >应用Dom方式解析Xml文件首先我们要明确,解析xml文件的目的是获取xml文件中的节点名、节点值、属性名及属性值xml中节...

2019-07-18 00:16:47 174

原创 jvm那些事儿

JVM那些事儿Java内存区域1.概述对于Java程序员,在虚拟机自动内存管理机制下,不再需要像C/C++程序员,为每一个new操作去写对应的delete操作,不容易出现内存泄漏和内存溢出问题2.运行时数据区域Java虚拟机在执行Java程序的过程中会将它管理的内存分成若干个不同的数据区域2.1程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。...

2019-07-18 00:13:07 237

原创 电商项目中的数据库

新零售数据库设计SPU先讲下产品和商品的关系:举栗子来说的话,库克在苹果发布会上发布的IPhnoe,这个属于产品,而我们购买的不同内存配置等,如256G、128G的手机这个就是商品。商品是产品的不同销售方案。SPU指标准产品单位,SPU描述一个产品的各种特性SKUSKU是库存进出计量的单位,SKU是物理上不可分割的最小存货单元。SKU实际上就是具体的商品SKU与参数如何对应不同商品有...

2019-07-18 00:05:15 2680 1

原创 MySQL架构设计

MySQL架构设计大表和大事务大表带来的问题记录行数巨大,单表超过千万行表数据文件巨大,表数据文件超过10G1.大表对查询的影响,很难在一定的时间内过滤出所需要的数据2.建立索引需要很长时间,MySQL版本<5.5时,建立索引会锁表;MySQL版本>=5.5,建立索引时虽然不会锁表但会引起主从延迟3.修改表结构需要长时间锁表,造成长时间的主从延迟如何处理数据库中的大...

2019-07-17 23:51:44 357

原创 MySQL索引详解

索引索引好文章索引是帮助MySQL高效获取数据的数据结构。左边是数据表,最左边是数据记录的物理地址。为了加快Col2的查找,可以维护右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应记录物理地址的指针我对索引的理解:被设置为索引的字段,比如主键ID,会被设置为索引值并形成树,树中节点包含索引值和data(data的具体实现内容取决于不同的存储引擎)Btree索引B-/B+...

2019-07-17 23:26:49 154

原创 深入MyCAT

MyCAT什么是MyCAT?MyCAT相当于MySQL的Server层MySQL相当于MyCAT的存储层MyCAT不存储数据,所有数据存储在MySQL中MyCAT是一个数据库中间层可以实现对后端数据库的分库分表和读写分离对前端应用隐藏了后端数据库的存储逻辑什么是数据库中间层及其作用?实现后端数据库的读写分离及负载均衡对业务数据库进行垂直切分对业务数据库进行水平切分...

2019-07-17 23:19:08 575

原创 深入MySL-主从复制与Replication集群

MySQL复制MySQL二进制日志二进制日志记录了所有对MySQL数据库的修改事件,包括了CURD事件和对表结构的修改事件# 查看二进制日志是否启动show variables like 'log_bin'若未开启需要修改my.cnf配置文件log_bin = /var/log/mysql/mariadb-bin如何开启二进制日志二进制日志的格式基于段的格式 binlog_...

2019-07-17 23:05:28 233

原创 深入MySL-理解数据库三范式

数据库设计范式数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息第一范式数据库表中所有字段都只具有单一属性单一属性的列是由基本的数据类型所构成的设计出来的表是简单的二维...

2019-07-17 22:53:20 334

原创 小白和你一起配置云服务器

概述由于博主需要开发web项目,因此此次配置环境主要为jdk+tomcat+mysql+svn+redisJDK

2019-07-06 23:26:58 165

原创 Xml那些事

xml文件读取什么是xml文件?xml文件的表示是一种以".xml"为扩展名的文件。其存储结构为树形结构:节点名称区分大小写xml文件开头要加上版本信息和编码方式< ?xml version=“1.0” encoding=“UTF-8”? >应用Dom方式解析Xml文件首先我们要明确,解析xml文件的目的是获取xml文件中的节点名、节点值、属性名及属性值xml中节...

2019-05-15 22:35:30 248

原创 最优算法下界

题目解析选择问题的复杂度下界:找最大问题的下界是:n-1找第二大问题的下界是:n+logn-2

2019-05-06 23:31:28 786

原创 数组典型案例

字符数组字符数组即用来存放字符的数组,字符数组中每个元素都存放一个字符,数组元素的类型为char类型。初始化字符数组的时候最好为‘\0’结尾。如: char string []= “helloworld”;==char array [] = {‘h’,’e’,’l’,’l’,’o’,’w’,’o’,’r’,’l’,’d’,’\0’};==char array [] = {“hellowor...

2019-05-06 23:22:48 548

原创 深入ZooKeeper

ZooKeeper概述1.1 概述ZooKeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。ZooKeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生改变,ZooKeeper就将负责通知已经在ZooKeeper上注册的那些观察者做出相应的反应,从而实现集群中类似Ma...

2019-05-06 21:13:38 181

原创 Docker

概述关于Linux容器的由来及作用Docker属于Linux容器的一种封装,提供简单易用的容器使用接口,是目前最流行的Linux容器解决方案。Docker将应用程序与该程序的依赖打包成一个文件,运行这个文件就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。总体来说,Docker的接口相当简单,用户可以方便地创建和使用容器,将自己的应用放入容器,同时容器还能进行版本...

2019-05-02 16:46:59 157

原创 深入SpringBoot-嵌入式Servlet容器

关于嵌入式Servlet和外部Servlet

2019-04-30 22:14:09 525

原创 深入SpringBoot-错误处理机制

SpringBoot默认的错误处理机制默认效果:1)、浏览器返回一个默认的错误页面浏览器发送请求的请求头2)、如果是其他客户端,默认响应一个json数据原理;可以参照ErrorMvcAutoConfiguration:错误处理的自动配置;给容器中添加以下组件:1、DefaultErrorAttributes://帮我们在页面共享信息@Override public Ma...

2019-04-29 15:54:53 189

原创 深入SpringBoot-SpringMVC自动配置

Spring MVC auto-configurationSpringBoot自动配置好了SpringMVC以下是SpringBoot对SpringMVC的默认配置:(WebMvcAutoConfiguration)Inclusion of ContentNegotiatingViewResolver and BeanNameViewResolver beans.自动配置了ViewR...

2019-04-29 15:15:30 169

原创 深入SpringBoot-Web

SpringBoot向导创建SpringBoot应用,选中我们需要的模块;SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置既可以完成编写业务代码自动配置原理在介绍SpringBoot的自动配置原理前,先提出几个问题。SpringBoot帮我们配置了什么?能不能修改?能不能扩展?xxxxAutoConfiguration:帮我们给容器中自动配置组件;...

2019-04-29 14:39:58 115

原创 深入SpringBoot-Thymeleaf模板引擎

什么是模板引擎?模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的文档。简单来讲,用于网站的模板引擎就会生成一个标准的文档,其本质是将模板文件和数据通过模板引擎生成最终的HTML代码。ThymeleafSpringBoot推荐的Thymeleaf语法简单,功能更强大引入Thymeleaf <dependency&...

2019-04-29 13:55:20 293

原创 防止表单重复提交的解决方案

问题所谓表单重复提交就是同一份信息多次发给服务端场景点击F5刷新页面: 当用户点击submit将已经写好的表单数据提交到服务器时,可以在浏览器的url看到地址和参数的变化,但因为网速等问题,用户当前页面并未刷新,或者点击刷新页面,造成表单重复提交重复点击提交按钮: 因为网络问题,未能及时跳转显示内容,部分用户可能会出于心急重复提交提交按钮,造成多次提交内容到服务器前进后退操作 :有些用...

2019-04-28 21:29:48 1156

原创 完全二叉树

完全二叉树若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层从右向左连续缺若干结点,这就是完全二叉树。完全二叉树特点叶子结点只可能在最大的两层上出现,对任意结点,若其右分支下的子孙最大层次为L,则其左分支下的子孙的最大层次必为L 或 L+1;出于简便起见,完全二叉树通常采用数组而不是链表存储,其存储结构如下:var tree:array[...

2019-04-16 23:41:25 1524

原创 二叉树的基本实现

二叉树节点//二叉树节点 private static class TreeNode{ int value; TreeNode leftChild; TreeNode rightChild; public TreeNode(int value){ this.value=value; ...

2019-04-16 23:11:56 193

原创 散列函数算法

前言解决哈希冲突部分原因取决于散列函数,一个好的散列函数的值应尽可能平均分布常用的构造散列函数1.直接寻址法取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a•key + b,其中a和b为常数(这种散列函数叫做自身函数)2.数字分析法分析一组数据,比如一组员工的出生年月日,这时我们发现出生年月日的前几位数字大体相同,这样的话,出现冲突的几率就会很大...

2019-04-16 14:28:35 4645 1

原创 哈希冲突解决

什么是哈希冲突?假设hash表的大小为9(即有9个槽),现在要把一串数据存到表里:5,28,19,15,20,33,12,17,10简单计算一下:hash(5)=5, 所以数据5应该放在hash表的第5个槽里;hash(28)=1,所以数据28应该放在hash表的第1个槽里;hash(19)=1,也就是说,数据19也应该放在hash表的第1个槽里——于是就造成了碰撞(也称为冲突,collisi...

2019-04-16 13:47:03 439

原创 HashMap及Diy实现本地缓存

概述在 Java 中使用本地缓存最简单的方式就是使 HashMap 或者 ConcurrentHashMap,对于只读场景,两者都可以使用,对于缓存更新的场景,可以使用 ConcurrentHashMap 来保证数据的一致性。实现本地缓存在 Java 中基于 LinkedHashMap 类,提供了一个自动清理最老元素的功能,,基于这个特质,可以将改造成一个LRU(Least Recently...

2019-04-16 00:01:43 554

原创 CPU缓存和伪共享

CPU缓存CPU是计算机的大脑,它负责执行程序的指令;内存负责存数据,包括程序自身数据。内存比CPU慢很多,现在获取内存中的一条数据大概需要200多个CPU周期(CPU cycles),而CPU寄存器一般情况下1个CPU周期就够了。网页浏览器为了加快速度,会在本机存缓存以前浏览过的数据;传统数据库或NoSQL数据库为了加速查询,常在内存设置一个缓存,减少对磁盘(慢)的IO。同样内存与CPU的速...

2019-04-15 14:36:35 1372

原创 死磕算法-递归和动态规划

暴力递归把问题转化为规模缩小了的同类问题的子问题有明确的不需要继续进行递归的条件(base case)有当得到了子问题的结果之后的决策过程不记录每一个子问题的解那么,怎么最终确定它能不能用“递归”做呢?看当N取1或2之类最简情况时,问题是否可以解决——然后写程序解决它动态规划从暴力递归中来将每一个子问题的解记录下来,避免重复计算把暴力递归的过程,抽象成了状态表达并且存在...

2019-04-15 11:56:51 197

原创 贪心策略

拼接最小字典序给定一个字符串类型的数组strs,找到一种拼接方式,使得把所有字符串拼起来之后形成的字符串具有最低的字典序。此题很多人的想法是把数组按照字典序排序,然后从头到尾连接,形成的字符串就是所有拼接结果中字典序最小的那个。但这很容易证明是错的,比如[ba,b]的排序结果是[b,ba],拼接结果是bba,但bab的字典序更小。 正确的策略是,将有序字符串数组从头到尾两两拼接时,应取两两拼...

2019-04-14 16:10:55 376

原创 死磕算法-前缀树

什么是Trie树?Trie树,又叫字典树,单词查找树或键树,是一种多叉树结构。上图是一棵Trie树,表示了关键字集合{“a”, “to”, “tea”, “ted”, “ten”, “i”, “in”, “inn”} 。从上图可以归纳出Trie树的基本性质:根节点不包含字符,除根节点外的每一个子节点都包含一个字符从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串每个...

2019-04-13 23:44:19 198

原创 死磕算法-布隆过滤器

生动形象地介绍了布隆过滤器来自知乎的介绍

2019-04-13 19:57:30 114

原创 死磕算法-设计RandomPool结构

设计RandomPool结构题目:设计一种结构,在该结构中有如下三个功能: insert(key):将某个key加入到该结构,做到不重复加入。 delete(key):将原本在结构中的某个key移除。 getRandom(): 等概率随机返回结构中的任何一个key要求: Insert、delete和getRandom方法的时间复杂度都是 O(1)import java.util.HashMa...

2019-04-13 16:21:01 155

原创 死磕算法-树相关

在二叉树中找到一个节点的后继节点题目:现在有一种新的二叉树节点类型如下public static class Node { public int value; public Node left; public Node right; public Node parent; public Node(int data) { this.value = data; }...

2019-04-13 14:31:08 194

SSM整合所需Jar包

SSM整合所需JAR包,经测试可用。整合了Spring4.0所需的全部jar包

2019-03-14

自定义线程池

自己编写的线程池。具备的功能:自动扩容线程池大小,闲时回收线程。能够实现拒绝策略,

2019-02-15

空空如也

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

TA关注的人

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