- 博客(225)
- 收藏
- 关注
原创 Mac系统安装Node&Npm&Vue-Cli&创建项目
Vue与Node的关系概述使用vue.js一定要安装node.js么?准确的说是使用vue-cli搭建项目的时候需要node.js。也可以创建一个.html文件,然后通过如下方式引入Vue,一样可以使用Vue<!-- 开发环境版本,包含了有帮助的命令行警告 --><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>但是使用node是比较方便的,打包部署,解析vue单文件组成,解
2021-05-11 19:43:54
634
2
原创 SpringBoot整合阿里TestMock6.0版本
TestMock简介换种思路写Mock,让单元测试更简单无需初始化,不挑服务框架,甭管要换的是私有方法、静态方法、构造方法还是其他任何类的任何方法,也甭管要还的对象是怎么创建的。写好Mock定义,加个@MockMethod注解,一切统统搞定好吧,上面这段是作者写的,因工作需要没有使用其他Mock框架而使用阿里的,总的来说很简单,但在一开始使用的过程中有坑,而且网上现在资料很少,作者更新的版本也很快,很难解决问题,在这里我也总结一下遇到的一些问题以及使用,感觉不错的话点赞一下,有问题也希望大家及时指出
2021-05-11 17:48:52
1524
1
原创 Elasticsearch目录结构讲解
类型描述默认位置设值bin二进制脚本包含启动节点的elasticsearch/binconf配置文件包含elasticsearch/configpath.confdata在节点上申请的每个index/shard的数据文件的位置。可容纳多个位置/dataPath.datalogs日志文件位置/logsPath.logsplugins插入文件位置。每个插件将包含在一个子目录中/pluginsPath.plugins使用最多的文...
2021-03-25 23:58:12
811
原创 全文搜索引擎知识点
什么是全文搜索引擎?何为搜索,何为全文搜索常用的搜索网站,比如百度,谷歌数据的分类 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等 对于结构化数据,我们一般都可以通过关系型数据库(MySQL、Oracle等)的table的方式存储和搜索,也可以建立索引。通过b-tree等数据结构快速搜索数据 对于非结构化数据,也即对全文数据的搜索主要有两种方法:顺序扫描法,全文搜索顺序扫描按字面意思,我们可以了解它的大概搜索方式,就是按照顺序扫描的方式查找特定的关键字。比如让你在一
2021-03-25 23:56:22
1164
原创 MySQL索引B+树数据结构原理以及分类了解只需这一篇(绝非标题党)
索引!可谓是重中之重。面试可谓是必问内容,当然了,平时开发对于SQL的优化也是很重要的而当实践SQL优化不能盲目的操作,理论是支撑实践的基础索引的意义索引的本质就是一种排好序的数据结构。这个肯定都明白,自然而言就联想到字典中的目录在详细讲解下面的索引数据前补充一句:通过不断缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序事件,也就是说,有了这种索引机制,总是用同一种方式来锁定数据索引分类1.普通索引 index:加速查找2.唯一索引 主键索引:primary ke
2021-03-05 21:45:55
7539
9
原创 手写ArrayList【需要包含构造函数(有参和无参)、add(obj)、扩容机制、并发】
基本和ArrayList编写的没有太多差别,除了一些细节的地方,以供参考/** * 手写ArrayList * 需要包含构造函数(有参和无参)、add(obj)、扩容机制 */public class MyArrayList implements Serializable { //判断当前集合类是否被并发修改,即迭代器并发修改的fail-fast机制 就像版本号控制 如果之前保存的值和当前的值不一样返回异常 private transient int modCount = 0;
2021-02-20 16:56:22
209
2
原创 Redis之缓存雪崩和缓存穿透解决方案讲解
什么是缓存雪崩?如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上,造成了缓存雪崩。由于原有缓存失效,新缓存味道期间所有原本应该访问缓存的请求,都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机有什么方案来防止缓存雪崩?1.加锁排队mutex互斥锁解决,Redis的SETNX取set一个mutex key,当操作成功返回时,再进行loaddb的操作并回设缓存,否则就重新整个get缓存方法2.数据预热缓存预热就是系统上线后,将相关的缓存数据直接加
2021-02-19 10:55:12
174
原创 SpringBoot项目初始化讲解实现缓存预热
场景:将一千万用户白名单load缓存,用户请求的时候判断该用户是否是缓存里面的用户SpringBoot实现初始化加载配置Step1:采用实现springboot ApplicationRunner该方法仅在SpringApplication.run(…)完成之前调用Step2:采用实现InitializingBeanInitializaingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet()方法。在spring初始化bean的时候,如果bean实现了I
2021-02-19 10:08:15
2648
原创 Redis实现分布式集群环境session共享
多机器部署同一套服务(代码),性能更好,能承受更高的用户并发当一个用户发送请求到第一台机器,内存存储sessioni的话,剩余的99台每次还需要存储Cookie与SessionCookie: Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。Cookie 包含每次用户访问站点时 Web 应用程序都可以读取的信息,我们可以看到在服务器写的cookie,会通过响应头Set-Cookie的方式写入到浏览器HTTP协议是无状态的,并非TCP一样进行三次握手,对于一个浏
2021-02-18 22:07:26
295
原创 SpringBoot:整合Redis以及工具类常用API使用
Step1:引入依赖类似于连接工具 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>Step2:引入BeanredisTemplate的使用 类似于:monogoTemplate、jdbcTemplate数据
2021-02-18 21:36:34
453
原创 Redis事务机制讲解与传统关系型事务比较
Redis基本命令MULTI与EXEC命令以 MULTI 开始一个事务,然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令DISCARD命令DISCARD 命令用于取消一个事务, 它清空客户端的整个事务队列, 然后将客户端从事务状态调整回非事务状态, 最后返回字符串 OK 给客户端, 说明事务已被取消get class应该返回nil 因为之前我有拿这个key操作过 不用在乎当输入EXEC报错表示:EXEC没有MULTI 这两个是跟着的WATCH命令W
2021-02-17 22:19:57
306
1
原创 传统关系型数据库事务以及MVCC讲解
事务一句话概括:要么全部执行、要么全部不执行举例:用户下单,你可能还需要记录一些用户信息,但这个过程可能失败了,如果用户成功下单,你就没有这条信息了,这肯定就不行了,此时事务就起到作用了,发生回滚,用户下单失败作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用其它数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消事务就是被绑定在一起作为一个逻辑工作单元的 SQL 语句分组
2021-02-17 21:41:53
310
原创 Redis:消息订阅发布演示讲解
作用: 发布订阅类似于信息管道,用来进行系统之间消息解耦,类似于mq,rabbitmq、rocketmq、kafka、activemq主要有消息发布者和消息订阅者。比如运用于:订单支付成功,会员系统加积分、钱包进行扣钱操作、发货系统(下发商品)消息发布者通过管道channel将消息分发到1、2、3订阅者上问题:为什么不直接将消息发布到订阅上呢? 其实就是解耦只需要关心发布有没有将消息发不过去 订阅有没有去订阅Redis发布消息实操PUBLISH:发布消息首次发布显示有0个订阅在监听PUBL
2021-02-17 20:46:42
181
原创 Redis:五种数据类型数据结构讲解与实战演练
String(字符串)Redis命令在线网站可在网站实现Redis命令:try.redis.ioString是最常用的一种数据类型,普通的key/value存储都可以归为此类连接redis命令 ./redis-cli -p 6379set/getset:设置key对应的值为String类型的valueget:获取key对应的值mget(mget = many get)批量获取多个key的值,如果可以不存在则返回nullincr&&incrby(如果值不是Interg
2021-02-17 18:40:44
184
原创 Centos7环境下Redis4.0安装以及启动方式使用区别
使用yum安装Step1:安装yumyum install gcc:查看yum安装源解决pwd /could not retrieve mirrorlist1.sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33 2.将ONBOOT改为yes,wq!保存退出3.重新启动网络 $ service network restartStep2:安装weagyum install wgetStep3:下载Redis选择一个你喜欢的目录即
2021-02-16 21:58:48
596
原创 Redis作为数据库和作为缓存的选择,线上怎么优雅使用?
Redis作为数据库使用有什么优缺点?优点没有Scheme约束(就像mysql建立数据表,字段数据类型、长度等),数据结构的变更相对容易,一开始确定数据类型, 抗压能力强,性能极高,10万/qps(比如一些互联网项目,你的功能会不断迭代,字段的属性类型一开始不能确定)缺点没有索引,没有外键,缺少int/date等基本数据类型,多条件查询需要通过集合内联(sinter,zinterstore) 和连接间接实现开发效率低,可维护性不佳Redis作为缓存的使用,搭配数据库使用的两种方案jedis整合使
2021-02-16 18:19:24
254
原创 刨析Redis和memcached和MySql之间的区别
从数据库类型、数据存储方式、特殊功能讲解Redis和memcached和Mysql的区别分析为什么越来越的人抛弃memecached选择redis作为同款功能的内存产品,Redis和memcached各有什么优势?内存管理机制Memcached默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小, 将分配的内存分割成特定长度的块 以存储相应长度的key-value数据记录,以完全解决内存碎 片问题。空闲列表进行判断存储状态,【类似于Java虚拟机对象的分配,空闲列表】
2021-02-16 18:18:18
229
原创 Redis是什么,为什么大小公司都在使用?
Redis微信红包、微博、淘宝、天猫、京东、唯品会说到redis不得不讲nosqlNoSQL是不同于传统的关系数据库的数据库管理系统的统称。其两者最重要的区别在于NOSQL不使用SQL作为查询语言。NoSQL数据存储可以不需要固定的表格模式。NoSQL是基于键值对的,可以想象成表中的主键和值的对应关系常见NoSQLRedis、memcached、mongodb、guava(loadingCache)Redis的定义Redis是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、
2021-02-16 18:16:59
781
原创 线程安全性:全方位讲解线程安全性问题
什么是线程安全性?当多个线程访问某个类,不管运行时环境采用何种调度方式或者这些线程如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类为线程安全的–《并发编程实战》什么是线程不安全?多线程并发访问时,得不到正确的结果案例:无论执行多少次 都无法得出预期正确的结果 正确结果(1000)public class UnSafeThread { private static int num = 0; private static Cou
2021-02-13 22:45:12
292
3
原创 守护线程案例讲解
线程分类用户线程:只要线程还没用运行完成,程序就不会退出守护线程: 任何一个守护线程都是整个程序中所有用户线程的守护者,只要有活着的用户线程,守护线程就活着。当JVM实例中最后一个非守护线程结束时,也随JVM一起退出守护线程案例public class DaemonThreadDemo implements Runnable{ @Override public void run() { while (true){ System.out.pr
2021-02-13 19:40:24
252
原创 线程的优先级案例讲解
线程优先级意义线程的优先级告诉程序该线程的重要程度有多大。如果有大量线程都被堵塞,都在等候运行,程序会尽可能地先运行优先级的那个线程。 但是,这并不表示优先级较低的线程不会运行。若线程的优先级较低,只不过表示它被准许运行的机会小一些而已。举例:就像车站买票 旁边会有牌子提示“军人优先”就像并发运行时候,CPU分出小块时间片,线程优先级高的线程更容易获取时间片线程优先级分类线程的优先级设置可以为1-10的任一数值,Thread类中定义了三个线程优先级,分别是:MIN_PRIORITY(1)、NORM
2021-02-13 16:11:58
270
原创 线程的中断操作案例详解
为什么需要中断操作?案例:写一个线程死循环,比如运行到某一个时刻,我需要去关掉public class Demo implements Runnable { @Override public void run() { while (true){ System.out.println(Thread.currentThread().getName()); try { Thread.sleep(1
2021-02-12 23:14:22
224
原创 线程的挂起与恢复案例详解
什么是挂起线程?线程的挂起操作实质上就是使线程进入“非可执行”状态下,在这个状态下CPU不会分给线程时间片,进入这个状态可以用来暂停一个线程的运行。在线程挂起后,可以通过重新唤唤醒线程来使之回服运行为什么要挂起线程?CPU分配的时间片非常短、同时也非常珍贵。避免资源的浪费如何挂起线程?被废弃的方法thread.supend()该方法不会释放线程所占用的资源,如果使用该方法将某个线程挂起,则可能会使其它等待资源的线程锁死thread.resume()方法本身并无问题,但是不能独立于supend()
2021-02-12 22:38:17
657
原创 进程与线程的区别以及线程状态及相互转换和创建线程方式的讲解
线程和进程区别进程:是系统进行分配和管理资源的基本单位线程:进程的一个执行单元,是进程内调度的实体、是CPU调度和分派的基本单位,是比进程更小的独立运行的基本单位。线程也被称为轻量级进程,线程是程序执行的最小单位。一个程序至少一个进程,一个进程至少一个线程。main函数演示public class Demo { public static void main(String [] args) { System.out.println("123"); try
2021-02-12 18:08:15
321
2
原创 Netty实战:Echo服务之Netty项目搭建服务端以及客户端编写实战
什么是Echo服务?就是回写应答服务,客户端发送什么数据,服务端就响应什么数据什么作用呢?检测调试对应的服务 压测网络编程模型Step1:项目创建选择MavenStep2:外层pom引入依赖线程组 启动类 处理器的类名都是有相对意义的 你去看Netty源码也是一样的Step1:Server服务端import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty
2021-02-10 22:17:39
267
2
原创 Netty线程模型三种Reactor模型讲解以及Netty为什么使用NIO而不是AIO讲解
设计模式-Reactor模型(反应器设计模式)是一种基于事件驱动的设计模式,在事件驱动的应用中,将一个或多个客户的服务请求分离(demultiplex)和调度(dispatch)给应用程序。在事件驱动的应用中,同步地、有序地处理同时接收的多个服务请求 一般出现在高并发系统中,比如Netty,Redis等优点1)响应快,不会因为单个同步而阻塞,虽然Reactor本身依然是同步的2)编程相对简单,最大程度的避免复杂的多线程及同步问题,并且避免了多线程/进程的切换开销3)可扩展性,可以方便的通过增加Re
2021-02-08 17:16:47
385
原创 IO多路复用技术select、poll、Epoll讲解
什么是IO多路复用:I/O多路复用,I/O是指网络I/O,多路指多个TCP连接(即socket或者channel),复用是指复用一个或几个线程。简单来说:就是使用一个或者几个线程处理多个TCP连接最大优势是减少系统开销,不必创建过多的进程/线程,也不必维护这些进程/线程select:基本原理:监视文件3类描述符:writefds、readfds、和exceptfds,调用后select函数会阻塞住,等有数据 可度、可写、出异常或者超时就会返回,select函数正常返回后,通过遍历fdset整个数
2021-02-07 21:16:16
184
2
原创 (BAT必会知识)Linux网络编程中五种IO模型讲解
IO操作分两步:发起IO请求等待数据准备,实际IO操作(洗衣服,晾衣服)同步需要主动读写数据,在读写数据的过程中还是会堵塞(好比晾衣服堵塞了你)异步仅仅需要I/O操作完毕的通知。并不主动读写数据,由操作系统内核完毕数据的读写(机器人帮你晾衣服)五种IO的模型:阻塞IO、非阻塞IO、多路复用IO、信号驱动IO和异步IO前四种都是同步IO,因为在内核数据copy到用户空间时都是阻塞的权威:RFC标准或数据《UNIX Network Programming》中文《UNIX网络编程-卷-》第六章 推荐去看
2021-02-07 20:30:41
207
原创 什么是阻塞非阻塞,什么是同步异步?
洗衣机洗衣服例子无论阻塞式IO还是非阻塞式IO,都是同步IO模型同步阻塞:你把衣服都到洗衣机洗,然后看着洗衣机洗碗,洗好后再去晾衣服(你就干等,啥都不做,堵塞在那)但你要的结果只是晾衣服,你等待的这个过程就是阻塞同步非阻塞:你把衣服丢到洗衣机洗,然后可以去做其它事,比如玩游戏看电视之类的,但你要定时去卫生间看看洗衣机有没有洗完,洗完后再去晾衣服异步阻塞:把衣服丢到洗衣机洗,然后看着洗衣机洗完,再去晾(先说一下,生活中你会这样么?所以说几乎没有这个情况,没这个说法,可以忽略)用异步就不会出现阻塞这种
2021-02-07 17:28:54
215
原创 Java的IO演进例实以及使用JDK自带的BIO编写BioServer服务端以及BioClient客户端分析通信优缺点示例
使用jdk自带的Bio编写一个同一时间服务一个客户端请求过来服务返回对应的时间戳,每个请求都分一个线程Step1:新建java项目选取模板Step2:创建Server服务端public class BioServer { //定义服务端端口号 private static final int PORT = 8080; public static void main(String[] args) throws IOException { //建立So
2021-02-07 16:54:38
335
原创 缓存的收益和成本以及进程缓存讲解
缓存是什么?起源于CPU,原始意义是指访问速度⽐⼀般随机存取存储器(RAM)快的⼀种RAM,通常它 不像系统主存那样使⽤DRAM技术,⽽使⽤昂贵但较快速的SRAM技术缓存类别CPU L1/L2/L3 Cache、Linux page Cache加速硬盘读写、浏览器缓存、堆内缓存(进程缓存)、分布式缓 存离CPU越近的速度越快缓存带来的回报高速读写:缓存加速读写速度降低后端负载:后端服务器通过前端缓存降低负载-业务端使用Redis降低后端MySQL负载等缓存带来的代价数据不一致:缓存层和数据
2021-02-06 19:12:08
431
原创 分析MySQL执行过程
Mysql传统关系型数据库概念关系型数据库的⼀个常⻅⽤法是存储⻓期的报告数据,并将这些报告数据⽤作固定时间范围 内的聚合数据。收集聚合数据的常⻅做法是:先将各个⾏插⼊到⼀个报告表⾥⾯, 之后再通 过扫描这些⾏来收集聚合数据, 并更新聚合表中⺒有的那些⾏。图解刨析MySQL的执行过程1.客户端/服务器发送TCP通信协议2.SQL查询判断是否有缓存(多次查询相同结果Mysql也具有缓存)如果有缓存直接返回结果不走3.4.5步3.缓存不存在解析SQL,通过解析器得到解析树,再进行预处理再得到新的解析树
2021-02-06 18:28:49
150
原创 高级程序员必会-JMH基准测试示例以及SpringBoot整合JMH
想一下,你和一些高级程序员相差在哪?redis高可用、JVM、分布式事务、集群、Linux极端故障。但这些无非就一个功能,增删改查CURD。有些人纳闷,我也会增删改查,我怎么不是高级程序员呢?我这里指的是高性能的增删改查测试系统有多大的压强能力测试两个Http的性能,这里就是使用基准测试工作中不管有JMH,还有白盒黑盒以及jmeter压力测试,这些都是需要掌握的什么是基准测试?1.由JDK、Oracle提供的微基准测试的一套工具API2.多用户并发测试和综合场景测试等【性能分析】提供参考依据
2021-02-06 18:07:54
1806
1
原创 为什么有了Http还要用dubbo
首先分析流程,这个问题包含哪些知识点?dubbo的定义(定位)dubbo官网给出的特色 这些都是dubbo的优势 至少答出4个点1.面向接口代理的高性能RPC调用2.智能的负载均衡(轮询、随机、最少并发。感知下游节点健康状况,显著减少延迟)3.服务自动注册与发现(以zookeeper为例)4.高度可扩展能力(可以支持插件,序列化插件、传输协议。提高传输性能,AIO等)5.运行期流量调度(根据机器性能可进行权重调节)6.可视化的服务治理与运维(dubbo-admin可视化的调用,随时查询服务元
2021-02-04 19:33:47
404
原创 基于JVM的ShutdownHook端口冲突优雅关闭
服务启动端口冲突解决方案报错信息:Address already in useStep1:修改启动端口执行server.portStep2:lsof -i:端口 或 netstat -anp|grep 端口 ==>找到启动端口对应的服务进程pid使用kill -9 pid 执行进程pid强杀强杀严重问题讲解比如一些服务或对象在进行通道连接,文件输入输入出等。这种情况是不能使用强杀的。强杀就类似电脑你突然把电拔了。你想啊,服务器正在修改一些文件,你突然强杀,这些文件就没有保存Step3:
2021-02-04 18:53:24
325
原创 Dubbo:微服务单机实现集群部署
Dubbo服务一般都是分布式集群的方式分布式也就是指将服务拆分集群部署:比如1000qps,将这1000流量分到3台或多台机器上。通过负载均衡去做。单机处理到达瓶颈的时候,你就把单机复制⼏份,这样就构成了⼀个“集群”。集群中每台服务 器就叫做这个集群的⼀个“节点”,所有节点构成了⼀个集群单机如何搭建集群?服务对外提供的是端⼝,端⼝状态是监听状态(listen),每个服务器的对外端⼝可以⾮常 多,通过反向代理进⾏端⼝映射Step1:我这里本地有一个服务,先将服务打包放到本地目录Step2:使
2021-02-04 18:12:54
598
原创 Dubbo调用可视化官方jar包形式以及war包形式和遇到的问题以及日常使用
Dubbo服务启动情况、存活节点情况问题 如果某个节点挂了之后我们怎么知道 dubbo节点地址有哪些 如果要对某个节点关闭外部rpc调用怎么做?Dubbo-admin搭建过程下载dubbo-admingit clone https://github.com/apache/dubbo-admin.git修改dubbo-admin-develop\dubbo-admin-server\src\main\resources目录下的application.properties配置文件bui
2021-02-04 01:57:07
465
原创 Springboot:整合DubboProvider的配置以及Comsumer的配置
项目结构相关依赖依赖引入放到服务模块下 也就是user-app <!--dubbo--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.2</version>
2021-02-03 19:29:01
591
1
原创 Dubbo讲解以及RPC远程调用协议以及Zookeeper讲解和搭建
RPC是什么?RPC是指远程过程调⽤,也就是说两台服务器A,B,⼀个应⽤部署在A服务器上,想要调⽤B 服务器上应⽤提供的函数/⽅法,由于不在⼀个内存空间,不能直接调⽤,需要通过⽹络来表 达调⽤的语义和传达调⽤的数据RPC怎么做?连接:通过在客户端和服务器之间建⽴TCP连接,远程过程调⽤的所有交换的数据都在这个连 接⾥传输寻址:A服务器上的应⽤怎么告诉底层的RPC框架,如何连接到B服务器(如主机或IP地址) 以及特定的端⼝编码:⽹络协议是基于⼆进制的,内存中的参数的值要序列化成⼆进制的形式,也就是序
2021-02-02 22:36:34
495
原创 项目拷贝注意事项以及修改的点
当我们写微服务项目肯定要搭建许多maven项目,相同的依赖和命名风格jhclass-user是新拷贝的项目,使用idea打开Step1:替换命名这里主要是替换pom文件里的命名Step2:修改idea自动生成iml文件名这里不修改的话,原项目名会有一个[]命名Step3:修改原有的启动类名,测试类名,包路径名,yml配置文件路径命名以上的旧名都要重新修改命名,以及原有配置的启动类路径命名Step4:mavenjar包下载以上全都修改检查无误后,检查jar包。jar包可能需要重新导
2021-02-02 21:47:50
339
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人