自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 Redis Cluster为什么有16384个槽?

原译:  1、正常的心跳包携带节点的完整配置,可以用幂等方式替换旧节点以更新旧配置。 这意味着它们包含原始形式的节点的插槽配置,它使用带有16k插槽的2k空间,但使用65k插槽时将使用高达8k的空间。2、同时,由于其他设计权衡,Redis Cluster不太可能扩展到超过1000个主节点。因此,16k处于正确的范围内,以确保每个主站有足够的插槽,最多1000个主站,但足够小的数字可以轻松地将...

2019-10-14 17:37:03 1690

原创 网络协议概述

应用层协议:行业规范,如律师行业规范、程序员行业规范(WEB的http协议、文件传输的ftp协议,用于Email的IMAP协议等)传输层协议:TCP协议,使用端口号识别某个进程(精确到个体)网络层协议:IP协议,类比成每个区域的邮局(都有自己的邮编号)、路由器(IP地址)数据链接层:类比成一个小社区的邮差,帮你送信给你的邻里物理层:类比成光纤、电缆、电磁波等物理媒介。re...

2019-08-26 17:30:38 252

原创 设计模式之策略模式+工厂方法模式

1. 策略模式从本质上讲,策略模式就是一个接口下有多个实现类,而每种实现类会处理某一种情况。我们以发奖励为例进行讲解,比如我们在抽奖系统中,有多种奖励方式可供选择,比如积分,现金等。在存储时,我们必然会使用一个类似于type的字段用于表征这几种发放奖励的,那么这里我们就可以使用多态的方式进行奖励的发放。比如我们抽象出一个PrizeSender的接口,其声明如下:public inte...

2019-06-13 12:37:59 964

原创 集合中存储的是对象的值还是对象的引用

如果是基本数据类型(基本数据类型对象),集合(List / LinkList / Map)存的是值,如果存的是对象,则集合存的是对象的引用,如下代码:import java.util.*;public class Main { public static void main(String[] args) { List list1 = new ArrayLis...

2019-04-06 17:41:18 2528 1

原创 浅谈并发扣库存

秒杀的场景有很多,比如:抢购、抢票、抢红包等等。总之,就是在极短时间内有大量的请求。我们都知道,这种系统设计的大方向就是限流,即通过层层过滤,最终只让相对较少的请求进入到核心业务处理层。这里不谈秒杀设计,不谈使用队列等使请求串行化,就谈下怎么用锁来保证数据正确,就是已经到减库存那一步了,在这一步中如果保证不超卖。用队列的话,可以是Java自动的队列,也可以用Redis的LPUSH RP...

2019-04-05 16:34:38 597

原创 MySQL 中的 SQL 的常见优化策略

1.避免全表扫描2避免判断 null 值(导致无法使用到索引)3.避免不等值判断(导致无法使用到索引)4.慎用in、or(可能导致无法使用到索引)5.慎用对where条件进行函数式等计算(可能导致无法使用到索引)6.慎用组合索引(需遵循索引的最左前缀原则)7.慎用模糊查询(需遵循索引的最左前缀原则)...

2019-03-15 09:30:26 203

原创 浅谈TCP三次握手和四次挥手

三次握手我们假设A和B是通信的双方。我理解的握手实际上就是通信,发一次信息就是进行一次握手。第一次握手: A给B打电话说,你可以听到我说话吗? 第二次握手: B收到了A的信息,然后对A说: 我可以听得到你说话啊,你能听得到我说话吗? 第三次握手: A收到了B的信息,然后说可以的,我要给你发信息啦!  在三次握手之后,A和B都能确定这么一件事: 我说的话,你能听到; 你说的话,我也...

2019-03-13 17:06:33 203

转载 Java高级程序员面试题大全

1、常用设计模式 单例模式:懒汉式、饿汉式、双重校验锁、静态加载,内部类加载、枚举类加载。保证一个类仅有一个实例,并提供一个访问它的全局访问点。 代理模式:动态代理和静态代理,什么时候使用动态代理。 适配器模式:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 装饰者模式:动态给类加功能。 ...

2019-03-02 15:28:06 1172

转载 微服务下的数据一致性的几种实现方式

https://www.jianshu.com/p/b264a196b177

2019-02-28 17:44:32 289

原创 java多态

     

2018-12-07 11:09:11 197 1

原创 intellij idea 断点调试快捷键

2018-11-24 10:48:15 391

原创 用两个栈实现队列

package test;import java.util.Stack;public class StackQueneTest { private Stack<Integer> stackA = new Stack<Integer>(); private Stack<Integer> stackB = new Stack<Integer&g...

2018-11-02 11:47:08 194

原创 Linux下和Windows下的性能监控

Linux --uptime命令:top命令:可以知道每个进程占CPU的情况total 进程总数running 正在运行的进程数sleeping 睡眠的进程数stopped 停止的进程数zombie 僵尸进程数Cpu(s): 0.1% us 用户空间占用CPU百分比0.2% sy 内核空间占用CPU百分比0.0% ni 用户进程空间内改变过优先级的进程占用CP...

2018-10-30 10:49:37 1062 1

转载 2018面试题汇总

https://mp.weixin.qq.com/s/tMsI2aNnmHJlDfKUorhrVA

2018-10-26 10:38:25 154

原创 volatile 关键字 解析

对于volatile这个关键字,相信很多朋友都听说过,甚至使用过,这个关键字虽然字面上理解起来比较简单,但是要用好起来却不是一件容易的事。这篇文章将从多个方面来讲解volatile,让你对它更加理解。计算机中为什么会出现线程不安全的问题volatile既然是与线程安全有关的问题,那我们先来了解一下计算机在处理数据的过程中为什么会出现线程不安全的问题。大家都知道,计算机在执行程序时,每条...

2018-10-26 10:34:42 174

原创 单例模式的使用及实现

核心作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点什么时候使用单例模式?举一个小例子,在我们的windows桌面上,我们打开了一个回收站,当我们试图再次打开一个新的回收站时,Windows系统并不会为你弹出一个新的回收站窗口。也就是说在整个系统运行的过程中,系统只维护一个回收站的实例。这就是一个典型的单例模式运用。我们在实际使用中并不存在需要同时打开两个回收站窗口的必...

2018-10-24 09:53:10 295

转载 JVM入门必看——JVM结构

转自:https://www.cnblogs.com/xuningchuanblogs/p/7688332.html

2018-10-01 10:29:00 234

原创 String不可变

众所周知, 在Java中, String类是不可变的。那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变。...

2018-09-26 16:15:02 200

原创 分布式锁 -- 基于数据库实现

基于数据库来做分布式锁的话,通常有两种做法:基于数据库的乐观锁 基于数据库的悲观锁乐观锁:乐观锁机制其实就是在数据库表中引入一个版本号(version)字段来实现的。当我们要从数据库中读取数据的时候,同时把这个version字段也读出来,如果要对读出来的数据进行更新后写回数据库,则需要将version加1,同时将新的数据与新的version更新到数据表中,且必须在更新的时候同时检查目前...

2018-09-26 16:13:28 725

原创 分布式锁 -- 基于redis实现

基于Redis实现的锁机制,主要是依赖redis自身的原子操作,例如:SET user_key user_value NX PX 100redis从2.6.12版本开始,SET命令才支持这些参数:NX:只在在键不存在时,才对键进行设置操作,SET key value NX 效果等同于 SETNX key value PX millisecond:设置键的过期时间为millisecon...

2018-09-26 15:42:09 241

原创 分布式锁 -- 基于zookeeper实现

其实基于ZooKeeper,就是使用它的临时有序节点来实现的分布式锁。原理就是:当某客户端要进行逻辑的加锁时,就在zookeeper上的某个指定节点的目录下,去生成一个唯一的临时有序节点, 然后判断自己是否是这些有序节点中序号最小的一个,如果是,则算是获取了锁。如果不是,则说明没有获取到锁,那么就需要在序列中找到比自己小的那个节点,并对其调用exist()方法,对其注册事件监听,当监听到这个节...

2018-09-26 15:40:11 220

原创 堆其实是个很简单的数据结构

  说到堆这种数据结构,很多人的第一反应是感觉很复杂,其实不然,堆就是个优先级队列而已,或者,堆其实就是一种树。本文先讲原理,后面给出堆的实现代码。优先级队列可以用有序数组来实现,这种做法的问题是,尽管删除最大数据项的时间复杂度为O(1),但是插入还是需要较长的O(N)时间,这是因为必须移动数组中平均一半的数据项以插入新数据项,并在完成插入后,数组依然有序。本文主要介绍实现优先级队...

2018-09-26 12:04:42 408 1

原创 常用的正则表达式大全(数字、字符、固定格式)

1.数字相关的正则表达式数字:^[0-9]*$ n位定长的数字:^\d{n}$ m-n位之间的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$ 正数、负数、和小数:^(\-|\+)?\...

2018-09-15 17:48:32 44890

原创 web.xml配置模板

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns

2018-08-16 15:29:30 2241

原创 数据库与缓存一致性策略

问题:怎么保持缓存与数据库一致?要解答这个问题,我们首先来看不一致的几种情况。我将不一致分为三种情况:1. 数据库有数据,缓存没有数据;2. 数据库有数据,缓存也有数据,数据不相等;3. 数据库没有数据,缓存有数据。大多数人使用的策略,叫做 Cache Aside Pattern,简单来说就是:1. 首先尝试从缓存读取,读到数据则直接返回;如果读不到,就读数据库,并将数据会...

2018-07-18 09:40:44 275

原创 索引总结

索引的优点?1.加快查询速度2.加快表与表的连接速度3.加快分组和排序的速度4.唯一索引可以保证每行数据的唯一性索引的缺点?1.创建、维护索引需要耗费时间和物理空间什么样的字段适合创建索引?1.经常需要作为搜索条件的字段(加快搜索速度)2.主键(保证主键的唯一性)3.经常用来连接表的列(加快连接速度)4.经常需要排序的列(加快排序速度)5...

2018-05-23 10:52:46 248

原创 IoC是什么

  Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想:主动变被动,手动化变自动化,对象反射出来,属性调用相应set方法。       别名:依赖注入      在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。理解好Ioc的关键是要明确“控制,控制什么,反转(有反转就应该有正转了),什么反转了”,...

2018-05-17 10:20:12 217

原创 依赖注入和控制反转的区别

控制反转:创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件控制,侧重于原理。依赖注入:创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现。依赖注入和控制反转是同一概念,是对同一件事情的不同描述,它们描述的角度不同。依赖注入是从应用程序的角度在描述:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述:容器控制应用程序,由容器...

2018-05-17 09:53:48 4246

原创 mybatis和hibernate本质区别和应用场景

hibernate一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序写sql,sql语句自动生成了。对sql语句进行优化、修改比较困难。应用场景:适用与需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。。mybatis专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全 的ORM框架,虽然程序员自己写sql,mybati...

2018-04-25 17:59:15 161

原创 Docker介绍

        通俗版:Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。        docker就是类似的理念。现在都流行云计算了,云计算就好比大货轮。doc...

2018-04-02 22:27:29 187

原创 Spring mvc 架构流程及其组件

架构图:架构流程:1. 用户发送请求至前端控制器(DispatcherServlet)2. DispatcherServlet收到请求调用HandlerMapping(处理器映射器)3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成,统称为处理器执行链)一并返回给DispatcherServlet。4. DispatcherServlet通过Handler...

2018-03-08 16:27:19 190

原创 浅谈Java异常

如图可以看出所有的异常跟错误都继承自Throwable类,也就是说所有的异常都是一个对象。(Throwable)异常从大体来分为两块:1、error(错误) : 是指程序无法处理的错误,表示应用程序运行时出现的重大错误。例如jvm运行时出现的内存溢出(OutOfMemoryError)以及Socket编程时出现的端口占用等程序无法处理的错误。注:异常和错误的区别:异常能被程序本身可以处理,错误是无...

2018-02-27 11:23:00 171

转载 全面理解面向对象的 JavaScript

参考:https://www.ibm.com/developerworks/cn/web/1304_zengyz_jsoo/index.html

2018-02-24 10:06:57 198

原创 JavaScript实现一个StringBuffer

/** * 模拟StringBuffer * 使用过程基本上和java.lang.StringBuffer一样,但是在toString中可以插入风格符,默认分隔符为',' * */function StringBuffer() { this.strs = []; //用数组来缓存所有的内容 if (typeof StringBuffer._initialized == "unde...

2018-02-24 09:52:17 392

原创 mysql免安装版配置教程

1. 下载MySQL免安装版压缩包2. 解压MySQL压缩包,将以下载的MySQL压缩包解压到自定义目录下,我的解压目录是:"D:\dev\tools",复制下面的配置信息到 my-default.ini 保存。(注意更改basedir和datadir两个参数的值)# For advice on how to change settings please see# http:/

2018-02-05 20:51:31 323

原创 Java遍历JSON

Java遍历JSON用Iterator迭代器遍历取值 : public static void main(String[] args) { String s = "{'A':{'a':'1' ,'aa':'11'},'B':{'b':'2' ,'bb':'22'}}" ; JSONObject jsonObject1=JSONObject.fromObject(

2017-12-13 15:05:22 18410

原创 简述二叉树的特性和分类

二叉树的分类:满二叉树:除最后一层且最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树叫满二叉树;完全二叉树:一棵二叉树最多只有最下面的一层上的结点的度数可以小于2,并且最下层上的结点都集中在该层最左边的若干位置上,则此二叉树成为完全二叉树;平衡二叉树:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树

2017-12-09 16:39:51 2050

原创 CRM SKU SPU 等名词介绍

品牌 :如iPhone是一个品牌,小米也是一个品牌单品:如iPhone7是一个单品,iPhone8也是一个单品(产品/SPU)产品:产品即单品SPU:标准化产品单元,只是单品、产品换了一种叫法而已商品 (item/product):iPhone7作为一个单品,被很多商家们出售,这时候iPhone7就变成了商品

2017-09-27 14:01:11 853

原创 Java Map 遍历

下面总结记录了Java遍历Map的四种方式,有需要的yuaner们可以参考哟方式一:使用map.entrySet()一次拿到所有key和value的集合,在健和值都需要的时候使用它就对了,听说是最可取的遍历方式

2017-09-27 11:05:11 280

原创 redis常见的数据类型

redis常见的5种数据类型分别是:* string(字符串)* list(链表)* set(集合)* sorted set(有序集合)* hash(散列or字典)在介绍这5种类型前,我们先来介绍一下redis的全局操作指令:查keys my*   获取当前数据库中所有以my开头的keyexists mykey  若不存在,返回0;存在返回1se

2017-08-12 00:00:35 333

空空如也

空空如也

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

TA关注的人

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