常见的数据结构常用的数据结构有:数组,栈,队列,链表,树,散列,堆,图等
数组是最常用的数据结构,数组的特点是长度固定,数组的大小固定后就无法扩容了 ,数组只能存储一种类型的数据 ,添加,删除的操作慢,因为要移动其他的元素。
栈是一种基于先进后出(FILO)的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
队列是一种基于先进先出(FIFO)的数据结构,是一种只能在一端进行插入,在另一端进行删除操作的特殊线性表,它按照先进先出的原则存储数据,...
Java8大基本类型和包装类byte、short、int、long、float、double、boolean、charByte Short Integer Long Float Double Boolean Character
面向对象的特征:封装、继承、多态、抽象。封装:就是把对象的属性和行为(数据)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节,就是把不想告诉或者不该告诉别人的东西隐藏起来,把可以告诉别人的公开,别人只能用我提供的功能实现需求,而不知道是如何实现的。增加安全性。
继承:子类继承父类的数据属性和行为,并能根据自己的需求扩展出新的行为,提高了代码的复用性。
多态:...
先言
不要听信你看到的关于优化的“绝对真理”,而应该是在实际的业务场景下通过测试来验证你关于执行计划以及响应时间的假设。
具体业务场景的不同,使用的MySQL服务版本不同,都会使得优化方案的制定也不同。
数据库任何操作都需要慎之又慎,即使所谓优化,也需要尽可能组织涉及到的所有业务部门具体商议,非常有可能,对你的业务来说是优化,却会影响他人业务!
切记,你需要清楚的知道,你的操作所带来的一切结果,测试环境不等于生产环境,风险操作,备份先行。
优化有风险,涉足需谨慎!
优化可能带来的问题
优化不总是对一个单纯的环境进行,还很可能是一个复杂的已投产的系统!
优化手段有很大的风险,一定要意识到...
RabbitMQ微服务通信微服务间通讯有同步和异步两种方式:
同步通讯:就像打电话,需要实时响应。-Feign调用
异步通讯:就像发邮件,不需要马上回复 -消息队列两种方式各有优劣,打电话可以立即得到响应,但是你却不能跟多个人同时通话。发送邮件可以同时与多个人收发邮件,但是往往响应会有延迟。
事件模式
在事件模式中,支付服务是事件发布者(publisher),在支付完成后只需要发布一个支付成功的事件(event),事件中带上订单id。
订单服务和物流服务是事件订阅者(Consumer),订阅支付成功的事件,监听到事件后完成自己业务即可。
为了解除事件发布者与订阅者之间的耦合,两者并不...
ELK技术栈
elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域
elasticsearch是elastic stack的核心,负责存储、搜索、分析数据-elasticsearch底层是基于lucene来实现的
以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch
正向索引和倒排索引正向索引
用户搜索数据,条件是title符合"%手机%"
逐行获取数据,比如id为1的数据
判断数据中的title...
Ribbon负载均衡流程
发起请求http://服务名xxx/服务接口名xxx/参数
被LoadBalancerInterceptor负载均衡拦截器拦截
LoadBalancerInterceptor调用RibbonLoadBanlancerClient真实执行
RibbonLoadBanlancerClient获取url中的服务参数与服务接口名
RibbonLoadBanlancerClient调用DynamicServerListLoadBalancer,从eurekaserver中得到服务列表
DynamicServerListLoadBal...
Yapi部署与使用1. 环境依赖,部署环境准备
Yapi依赖:
nodejs(7.6+)–nodejs版本有大问题!一定不能太新,Yapi已经一年没有更新了,新版本不兼容!
mongodb(2.6+)
git
这里使用Debian11来部署,单机部署
注意!注意!注意!这里nodois版本选择v8.17.0!!!使用nvm安装
1234567891011121314151617181920212223242526//依赖nodejs,安装nodejs,这里安装还有点麻烦,需要官网下载nodejs二进制的包,解压安装#mkdir /usr/local/nodejs#//nodej...
HashMap原理
HashMap内部是基于哈希表实现的键值对存储,继承 AbstractMap 并且实现了 Map 接口。
HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。
当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。
当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。
HashMap使用LinkedList来解决碰撞问题,当发生碰撞了,对象将会储存在LinkedList的下一个节点中。
当两个不同的键对象的hashcod...
简述Vim是从 vi 发展出来的一个文本编辑器。主流linux均自带vi编辑器,在这里简单记录vim用法,vi也基本相同,只是有些功能没有vim丰富。
模式
命令模式vim有三大模式,一般你使用vim这个命令打开一个文本,或者新建一个文本时,你进入的是命令模式命令模式是vim打开文件后默认进入的模式,这个模式不能插入字符你无法正常编辑文本,但是可以使用命令来操作文本,例如下面的一些命令。输入冒号“:”,文本的左下角将会出现闪动的光标,你可以在这里输入一些复杂命令。注意vim很重要的退出操作,也是在这里操作的-输入q表示正常退出,前提你没有修改文本,如果文本修改了,将提示你无法正常退出,此...
标题123456# 这是一级标题## 这是二级标题### 这是三级标题#### 这是四级标题##### 这是五级标题###### 这是六级标题
效果:
这是一级标题这是二级标题这是三级标题这是四级标题这是五级标题这是六级标题字体1234**这是加粗的文字***这是倾斜的文字****这是斜体加粗的文字***~~这是加删除线的文字~~
效果:这是加粗的文字这是倾斜的文字这是斜体加粗的文字这是加删除线的文字
引用123>这是引用的内容>>>这是引用的内容>>>>>>>>>>>>>这是引用的内容...