自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

SeanSunnn

主要分享个人成长,技术积累

  • 博客(60)
  • 收藏
  • 关注

原创 Elasticsearch 常用命令

kibana 对es的语句支持比较好,强烈建议使用kibana。 创建索引 PUT /your_index_name## 也可以附加一些属性## number_of_replicas 是数据备份数,如果只有一台机器,设置为0## number_of_shards 是数据分片数,默认为5,有时候设置为3PUT /your_index_name{ "settings": { "index":{ "number_of_shards" : 1, .

2021-12-25 18:17:38 1058

原创 Mysql 主从架构

2021-10-23 18:13:49 152

原创 什么是CAP

网上概念性的很多,我就不进行例举了。CAP只是一中理念,在分布式环境中必要的分区容错性是一定需要去考虑的,所以只有AP、CP两种了。需要注意的是C中的一致性指的是强一致性,强调的是事务,而在大部分应用选择上都不会选择这个,会选择性能方面更高的最终一致性、高可用模式AP,当然具体还是得看业务场景,不能草率而论。AP:可用性强,一致性弱举个栗子,在进行秒杀活动的时候,明明我们看到的商品数量是能够进行购买的,但是当我们提交订单的时候可能就提示活动太火爆,请稍后重试。或者12306在购票的场景...

2021-09-17 15:23:27 242

原创 redis常见面试题

Redis是什么 Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。...

2021-07-03 13:46:33 153

转载 JAVA设计模式:观察者模式

模式的定义与特点观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。观察者模式是一种对象行为型模式,其主要优点如下。降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。符合依赖倒置原则。 目标与观察者之间建立了一套触发机制。它的主要缺点如下。目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用。 当观察者对象很

2021-06-02 17:56:26 231

原创 Java类加载器ClassLoader

Java类加载过程Java类加载过程主要可以分为三个步骤:加载、连接、初始化。加载过程是Java将字节码数据从不同的数据源读取到JVM中,映射为JVM认可的数据结构。连接是把原始的类定义信息平滑地转入JVM运行的过程中。这一阶段可以细分为验证、准备、解析三步。初始化是执行类初始化的代码逻辑,包括静态字段赋值的动作,以及执行类定义中的静态初始化块内的逻辑。Java虚拟机会创建三类ClassLoader,分别是 BootStrap ClassLoader(启动类加载器) E.

2021-05-26 17:28:05 92 1

原创 JAVA基础:SPI是什么

1.什么是SPI SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。SPI的作用就是为这些被扩展的API寻找服务实现。2.SPI和API的使用场景 API (Application Programming Interface)在大多数情况下,都是实现方制定接口并完成对接口的实现,调用方仅仅依赖接口调用,且无权选择不同实现。从使用人员上来说,API 直接被应用开发人员使用。 ...

2021-05-26 15:43:00 766 2

转载 JAVA多线程:ThreadPoolExecutor

一、简述在《阿里巴巴java开发手册》中指出了线程资源必须通过线程池提供,不允许在应用中自行显示的创建线程,这样一方面使得线程的创建更加规范,可以合理控制开辟线程的数量;另一方面线程的细节管理交给线程池处理,优化了资源的开销。线程池不允许使用 Executors 去创建,而要通过 ThreadPoolExecutor 方式,这一方面是由于 jdk 中 Executor 框架虽然提供了如 newFixedThreadPool()、newSingleThreadExecutor()、newCachedT..

2021-05-25 16:13:03 475

转载 SpringBoot:解决跨域问题

一、什么是源和跨域源(origin)就是协议、域名和端口号。URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口全部相同,则表示他们同源。否则,只要协议、域名、端口有任何一个不同,就是跨域。对https://www.baidu.com/index.html进行跨域比较:URL 是否跨域 原因 https://www.baidu.com/more/index.html 不跨域 三要素相同 https://map.baidu.com/ 跨域

2021-05-20 17:05:47 346

原创 JAVA多线程:sleep()、wait() 和 yield()

sleep()方法和wait()方法的区别?sleep方法是Thread的静态方法,wait方法是Object类的普通方法 sleep方法不释放同步锁,wait方法释放同步锁(执行notify方法唤醒wait的线程时是不释放同步锁的) wait方法用于线程间通信,而sleep方法用于短暂的暂停线程 sleep针对当前线程,而wait针对被同步代码块加锁的对象 sleep方法是当前线程暂停指定时间,将执行机会让给其它线程,时间结束后进入就绪状态等待 调用wait方法会暂停线程,当前线程释放对象的

2021-05-19 18:16:41 173

原创 JAVA基础:父子类初始化加载顺序

父类静态代码块 ==> 子类静态代码块 ==> 父类非静态代码块 ==> 父类构造函数 ==> 子类非静态代码块 ==> 子类构造函数DEMO:class Bowl { Bowl(int marker) { System.out.println("Bowl(" + marker + ")"); }} class Tableware { static Bowl bowl7 = new Bowl(7); ...

2021-05-19 14:42:31 267

转载 JAVA多线程:ThreadLocal

前言说起ThreadLocal即便你没有直接用到过,它也间接的出现在你使用过的框架里,比如Spring的事物管理,Hibernate的Session管理、logback(和log4j)中的MDC功能实现等。而在项目开发中,比如用到的一些分页功能的实现往往也会借助于ThreadLocal。正是因为ThreadLocal的无处不在,所以在面试的时候也经常会被问到它的实现原理、核心API使用以及内存泄露的问题。而且基于这些问题还可以拓展到线程安全方面、JVM内存管理与分析、Hash算法等等知识点。可见

2021-05-18 17:34:27 1715 2

原创 网络基础:Https 建立安全连接的过程(SSL原理)

文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用。接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的管理,最后演示使用makecert生成数字证书。如果发现文中有错误的地方,或者有什么地方说得不够清楚,欢迎指出!1、基础知识 这部分内容主要解释一些概念和术语,最好是先理解这部分内容。1.1、公钥密码体制(public-key cryptography)公钥密码体制分为三个部分,公钥、私钥...

2021-05-18 15:42:30 356

原创 网络基础:三次握手 四次挥手

刚开始客户端处于 closed 的状态,服务端处于 listen 状态。然后1、第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN(c)。此时客户端处于 SYN_Send 状态。2、第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s),同时会把客户端的 ISN + 1 作为 ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_REVD 的状态。...

2021-05-18 15:34:21 271

原创 网络基础:HTTP请求结构

一、一般的请求消息如下图所示我们将上述的请求消息分为三个部分:请求消息行、请求消息头、消息正文。1.请求消息行请求消息的第一行为请求消息行,GET/test/test.htmlHTTP/1.1GET为请求方式,请求方式分为:Get(默认)、POST、DELETE、HEAD等GET:明文传输 不安全,数据量有限,不超过1kbPOST:暗文传输,安全。数据量没有限制。/test/test.html为URI,统一资源标识符HTTP/1.1为协议版本2.请求...

2021-05-18 15:13:24 4191 2

转载 网络基础:输入URL到页面展示发生了什么

1.可以简单的来讲是:首先是域名解析; 建立TCP连接; 建立HTTP请求; 服务器处理HTTP请求; 关闭TCP连接; 浏览器解析资源; 浏览器渲染页面。2.详细的讲就是: 在浏览器地址栏输入URL 浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤 如果资源未缓存,发起新请求 如果已缓存,检验是否足够新鲜,足够新鲜直接提供给客户端,否则与服务器进行验证。 检验新鲜通常有两个HTTP头进行控制Expires和Cache-Control

2021-05-18 14:51:34 75

原创 OSI模型

应用层:用户的应用程序和网络之间的接口。表示层:协商数据交换格式 相当公司中简报老板、替老板写信的助理。会话层:允许用户使用简单易记的名称建立连接 相当于公司中收寄信、写信封与拆信封的秘书。传输层:提供终端到终端的可靠连接 相当于公司中跑邮局的送信职员。网络层:使用权数据路由经过大型网络 相当于邮局中的排序工人。数据链路层:决定访问网络介质的方式。在此层将数据分帧,并处理流控制。本层指定拓扑结构并提供硬件寻址,相当于邮局中的装拆箱工人。物理层:将数据转换为可通过物理介质传送的电子..

2021-05-18 10:05:00 94

转载 JAVA多线程:ReentrantLock与AQS

转自:https://tech.meituan.com/2019/12/05/aqs-theory-and-apply.html前言Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。本文会从应用层逐渐深入到原理层,并通过ReentrantLock的基本特性和ReentrantLock与AQS的关联,来深

2021-05-14 16:46:05 141

原创 JAVA基础:volatile

一、解释volatile是一个特征修饰符(type specifier).volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。(引用百度百科)二、使用volatile只能修饰实例变量和类变量,下面是单例模式的双重检验锁。public class SingletonClass2 { private static volatile Single

2021-05-14 15:20:39 112

转载 JAVA基础:synchronized

Java中的每一个对象都可以作为锁,而在Synchronized实现同步的几种方式中分别为:普通同步方法:锁是当前实例对象静态同步方法:锁是当前类的Class对象同步方法块:锁是Synchronized括号里配置的对象任何一个对象都一个Monitor与之关联,当且一个Monitor被持有后,它将处于锁定状态。Synchronized在JVM里的实现都是基于进入和退出Monitor对象来实现方法同步和代码块同步,虽然具体实现细节不一样,但是都可以通过成对的MonitorEnter和MonitorEx

2021-05-14 14:01:20 85

原创 动态规划详解

一、名词解释动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划的应用极其广泛,包括工程技术、经济、工业生产、军事以及自动化控制等领域,并在背包问题、生产经营问题、资金管理问题、资源分配问题、最短路径问题和复杂系统可靠性问题等中取得了显著的效果。(引自百度百科)动态规划最核心的思想,就在于拆分子问题..

2021-05-12 11:46:01 550

转载 VRRP协议详解

1概述1.1产生背景随着Internet的发展,人们对网络可靠性的要求越来越高。特别是对于终端用户来说,能够实时与网络其他部分保持联系是非常重要的。一般来说,主机通过设置默认网关来与外部网络联系,如图1所示:图1常用局域网组网方案主机将发送给外部网络的报文发送给网关,由网关传递给外部网络,从而实现主机与外部网络的通信。正常的情况下,主机可以完全信赖网关的工作,但是当网关坏掉时,主机与外部的通信就会中断。要解决网络中断的问题,可以依靠再添加网关的方式解决,不过由于大多数主机...

2021-05-11 10:46:29 3108

转载 Nginx:keepalived 双实例_nginx互为主备

一、实验目的:两台nginx服务器,利用keepalived实现双实例互为主备,并能够对http服务检测动态切换主备,主服务器检测失败后,重启对应http服务。二、实验环境服务器类型 IP 软件 主备情况 VIP CentOS 6.6(nginx1) 172.18.100.11 nginx+keepalived 实例VI_1为主服务器;实例VI_2为辅服务器 172.18.100.21 CentOS 6.6(nginx2) 172.18.

2021-05-11 10:41:56 467

原创 CRUD是什么意思

什么是CRUD?CRUD是4个单词的首字母,CRUD分别指增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)这4个单词的首字母。CRUD说的就是增查改删:C:Create增加对应CREATE TBL ...; R:Retrieve查询SELECT * from TBL; U:Update修改UPDATE TBL ..SET ...; D:Delete删除DELETE FROM TBL WHERE ....;CRUD程序员是什么意思?CRUD程

2021-05-07 11:21:43 4442

原创 Redis:缓存穿透、缓存雪崩、缓存击穿

只要说到Redis,当然离不开这经典三板斧:缓存穿透、缓存雪崩、缓存击穿。一、缓存穿透 故意去请求缓存中不存在的数据,从而去数据库中查,数据库中也没有,所以无法加到缓存,下次还是直接怼到数据库,所以高并发的时候就导致数据库崩了。解决方案:1)利用互斥锁,缓存失效的时候,先去获得锁,得到锁了,再去请求数据库。没得到锁,则休眠一段时间重试。2)数据库没查到数据,也往缓存中写入一个空值,但是设置失效时间短一点,防止恶意攻击。二、缓存雪崩 即缓存同一时...

2021-04-30 15:45:19 86 1

原创 Java优化:多个if else改用设计模式

在实际项目中相信大家都遇到过令人糟心的代码,一个方法一溜下来全是if else,还写满了业务逻辑,代码如下:public static void main(String[] args) { String name = "张三"; if("张三".equals(name)){ // 业务逻辑... System.out.println("我是张三"); }else if("李四".equals(name)){

2021-04-30 15:00:50 6868 4

原创 Java基础:ArrayList.toArray强转的“坑”

一、ArrayList类的定义ArrayList 是一个数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。ArrayList继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。ArrayList实现了RandmoAccess接口,即提供了随机访问功能。RandmoAc...

2021-04-30 14:11:24 904

原创 Java基础:Arrays.asList的“坑”

一、Arrays类的定义Arrays类位于java.util包中,主要包含了操纵数组的各种方法使用时导包:import java.util.Arrays二、asList方法源码public static <T> List<T> asList(T... a) { return new ArrayList<>(a); }DEMO1:public static void main(String[] args) { ..

2021-04-30 12:01:12 213 1

原创 Java基础:跳出多重循环

首先,我们得知道break,continue的运用场景。break: 此语句导致程序终止包含它的循环,并进行程序的下一阶段(整个循环后面的语句),即,不是跳到下一个循环周期而是退出循环。如果break语句包含在嵌套循环里,它只跳出最里面的循环。continue: 循环语句里有此语句时,程序运行到此语句时,不在执行循环体里continue后面的语句而是跳到下一个循环入口处执行下一个循环。对于单层循环,这个两个关键字直接够用啦~对于多重循环,似乎得想想其他办法了。比如:我们想输出第一对 i.

2021-04-29 14:37:18 208

原创 阻塞队列:ArrayBlockingQueue

阻塞队列很好的解决了多线程中数据的安全传输问题,其中最典型的例子就是客园很好的解决“生产者--消费者”问题。下面来看其中一个实现类ArrayBlockingQueue。看到这个名字,就很好理解这个队列肯定是使用数组实现的队列,即使用数组实现的“先进先出”的队列,下面看其具体的实现。一、构造函数/** * Creates an {@code ArrayBlockingQueue} with the given (fixed) * capacity and default ac

2021-04-27 18:10:09 270

原创 优先队列:PriorityQueue、PriorityBlockingQueue

大家都知道队列都遵循(First-In-First-Out)先进先出的规则,但是在特定场景下想改变取出元素的方式就可以使用到优先队列PriorityBlockingQueue。比如:银行VIP、机场VIP优先等。PriorityQueuePriorityQueue类在Java1.5中引入的,它是Java集合框架的一部分。PriorityQueue是基于优先堆的一个无界队列,它是一个Queue默认情况下它 根据自然排序,当然我们也可以定制比较器,自行自定义排序,从而实现自己的优先级逻辑。p.

2021-04-27 16:40:13 289 1

原创 Windows 查看端口占用

今天同事遇到一个问题,看到报错,第一反应就是端口被占用了,给出了最便捷最有效的方式-万能的重启。哈哈哈...没想到重启之后,问题还是存在,那就得究其原因了。1.windows + r;输入cmd,回车2.输入netstat -ano|findstr "端口号"找到最后一行,说明占用该端口的pid是64043.任务栏,点击右键打开任务管理器4.在详细信息中PID那列找到相应的PID就能知道是哪个进程占用了该端口。小提示:若没有显示PID那列是需要点击“名称”所在的那行类

2021-04-23 16:19:57 369

原创 JAVA调用Sap的RFC

SAP目前是世界上最大的也是使用最多的ERP系统,很多大型系统都将自己的业务数据放到了SAP系统来进行管理,那么当别的系统需要这些数据时,就需要从SAP中获取这些数据。SAP中有各种不同类型的接口,RFC,PI等等。下面记录的是java如何调用RFC的接口。网上可以找到很多类似的文章,代码也是以前的老手写的,也比较易懂,这里再记下来主要是为了以后找起来方便。java调用RFC接口需要用到sapjco3.jar,windows下还需要将文件sapjco3.dll文件放到system32的目录下,linux

2021-01-20 18:38:21 1516 1

原创 MySQL中,21个写SQL的好习惯

每一个好习惯都是一笔财富,本文分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯,谢谢阅读,加油哈~ 写完SQL先explain查看执行计划(SQL性能优化) 日常开发写SQL的时候,尽量养成这个好习惯呀:写完SQL后,用explain分析一下,尤其注意走不走索引。 explain select userid,name,age from user where userid =10086 or age =18; 操作delete或者updat.

2020-11-06 10:15:54 194

转载 【Linux】中如何安装nginx

第一种linux系统CentOS 7 64位下载以下安装包,用xftp放入linux系统第一步:安装pcre依赖解压压缩文件,进入解压之后的目录执行./configure,然后执行make && make install查看是否安装成功[root@localhost pcre-8.37]# pcre-config --version1第二步:安装其他依赖[root@localhost pcre-8.37]# yum -y make zlib zlib

2020-11-05 20:28:58 168

原创 Mysql中RANK,DENSE_RANK和ROW_NUMBER

在MYSQL的最新版本MYSQL8已经支持了排名函数RANK,DENSE_RANK和ROW_NUMBER。但是在就得版本中还不支持这些函数,只能自己实现。实现方法主要用到了条件判断语句(CASE WHEN或IF)和添加临时变量。区别RANK,DENSE_RANK和ROW_NUMBERRANK并列跳跃排名,并列即相同的值,相同的值保留重复名次,遇到下一个不同值时,跳跃到总共的排名。 DENSE_RANK并列连续排序,并列即相同的值,相同的值保留重复名次,遇到下一个不同值时,依然按照连续数字排名。.

2020-09-23 11:45:50 188

原创 (一)SpringBoot + Vue 前后端分离项目之前端项目

先看效果,能运行到此界面说明前端项目是成功的:开始搭建:1.安装Node.js:进入Node.js官网:https://nodejs.org/en/,选择下载并安装Node.js。安装的具体步骤就省略啦,基本上就是一直下一步。 验证Node.js是否安装好,在windows下,win r召唤出运行窗口,输入cmd打开命令行窗口。输入node -v即可得到对应的 Node.js版本。npm包管理器是集成在Node.js中了,所以在安装Node.js的时候就已经自带了npm...

2020-09-05 14:38:36 2542

原创 (三)Redis 主从结构搭建

前文已经介绍过了redis单机版的搭建了,可参照Redis的安装。1.在安装好单机版的前提下,复制三份配置文件进入redis所在目录# cd /opt/redis/redis-3.2.8创建6379、6380、6381目录,分别将安装目录下的redis.conf拷贝到这三个目录下。# mkdir -p /opt/redis/6379 && cp redis.conf /opt/redis/6379/6379.conf# mkdir -p /opt/redis/6380 &

2020-09-05 11:25:49 148

原创 VMware Workstation Pro虚拟机命令行安装图形界面

CentOS7 默认是没有图形化界面的,但我们很多人在习惯了 Windows 的图形化界面之后,总是希望有一个图形化界面从而方便我们使用,这里介绍一下 CentOS7安装图形化桌面系统的方法。1.ROOT 用户登录虚拟机;2.安装依赖包、图形界面: 2.1yumupdate grub2-common 2.2yum groupinstall -y “GNOME Desktop”3.安装完成后,执行startx; 若有界面窗口弹出证明此时已经安装成功;...

2020-08-10 18:12:38 2333 4

原创 (一)Redis的安装

获取rediswget http://download.redis.io/releases/redis-4.0.8.tar.gz 此时,可能会出现问题就是wget没有找到,那我们就安装wget yum -y install wget 下载后再进行wget http://download.redis.io/releases/redis-4.0.8.tar.gz 解压tar xzvf redis-4.0.8.tar.gz安装cd redis-4.0.8 make(...

2020-07-22 14:40:32 122

空空如也

空空如也

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

TA关注的人

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