☆* o(≧▽≦)o *☆嗨~我是小奥🍹📄📄📄个人博客:小奥的博客📄📄📄CSDN:个人CSDN📙📙📙Github:传送门📅📅📅面经分享(牛客主页):传送门🍹文章作者技术和水平有限,如果文中出现错误,希望大家多多指正!📜 如果觉得内容还不错,欢迎点赞收藏关注哟! ❤️
Java集合之ArrayList源码详解概述ArrayList实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现。
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable
继承AbstractList类,提供了相关修改、删除、遍历等功能
实现RandomAccess,空接口,作为随机访问的标志,代表只要实现了这个接口,就能支持快速随机访问。在ArrayList中,我们可以通过元素的序号快速获取元素对象,这就是 ...
Feed流概念Feed流是一个目前非常常见的功能,在众多产品中都有展现,比如微博,朋友圈,消息广场,通知,IM等。通过Feed流可以把动态实时的传播给订阅者,是用户获取信息流的一种有效方式。
Feed:Feed流中的每一条状态或者消息都是Feed,比如朋友圈中的一个状态就是一个Feed,微博中的一条微博就是一个Feed。
Feed流:持续更新并呈现给用户内容的信息流。每个人的朋友圈,微博关注页等等都是一个Feed流。
Timeline:Timeline其实是一种Feed流的类型,微博,朋友圈都是Timeline类型的Feed流,但是由于Timeline类型出现最早,使用最广泛,最为人熟知,有时候也用Timeline来表示Feed流。
关注页Timeline:展示其他人Feed消息的页面,比如朋友圈,微博的首页等。
个人页Timeline:展示自己发送过的Feed消息的页面,比如微信中的相册,微博的个人页等。
Feed的本质就是M个用户订阅了N个信息源形成的多对多关系,Feed需要聚合用户订阅的N个信息源产生的信息单元(Feed),并且按照一定的顺序排序后推送给用户。
Feed分类F ...
接口限流一、常见限流算法流量控制算法也叫流控算法、限流算法,主要是为了解决在面对不确定的不稳定的流量冲击下,能够确保系统的稳定运行,如果系统对流量不进行控制,系统很有可能因为大流量的冲击影响系统的稳定性,情况严重时还会导致系统瘫痪。
常用的流控算法分为以下几种:
固定窗口算法
滑动窗口算法
漏桶算法
令牌桶算法
(1)固定窗口算法固定窗口算法就是指在固定的时间窗口内按照阈值进行流量控制的算法。
首先维护一个计数器,将单位时间段当作一个窗口,计数器记录这个窗口接收请求的次数。
当次数少于限流阈值,就允许访问,并且计数器 + 1。
当次数大于限流阈值,拒绝访问。
当前时间窗口过去之后,计数器清零。
伪代码实现:
/** * 固定窗口时间算法 * @return */ boolean fixedWindowsTryAcquire() { long currentTime = System.currentTimeMillis(); //获取系统当前时间 if (currentTime - lastRequestTime > ...
SpringCloud使用篇一、认识微服务需要学习的微服务知识框架构成图如下:
1.1 单体架构单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。
单体架构的优缺点如下:
优点:
架构简单
部署成本低
缺点:
耦合度高(维护困难、升级困难)
1.2 分布式架构分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。
分布式架构的优缺点:
优点:
降低服务耦合
有利于服务升级和拓展
缺点:
服务调用关系错综复杂
分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考:
服务拆分的粒度如何界定?
服务之间如何调用?
服务的调用关系如何管理?
人们需要制定一套行之有效的标准来约束分布式架构。
1.3 微服务架构微服务的架构特征:
单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
自治:团队独立、技术独立、数据独立,独立部署和交付
面向服务:服务提供统一标准的接口,与语言和技术无关
隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题
微服务的上述特性其实是在给分布式架构制定一个标准 ...
Java基础面试题汇总概述说一下对Java的了解(1)首先,Java是由sun公司开发一种面向对象的编程语言,Java语言的作为面向对象的三大特征是封装、继承、多态。
(2)封装,就是将对象的属性和行为特征包装到类中,把实现的细节隐藏起来,通过对外部提供的公共方法来展示类对外提供的功能。
(3)继承,简单来说就是对原有类的拓展,新类的定义可以增加新的数据或者新的功能,也可以使用父类的功能,但是不能选择性的继承父类,通过继承,可以快速创建新的类,提高代码的复用性。
(4)多态,表示为一个对象具有多种状态,具体表现为父类的引用指向了子类的实例。
(5)Java的基本特点有面向对象 、平台无关性 、简单性、解释执行、多线程、分布式、高性能、安全性等。
JVM、JRE、JDK(1)JDK是Java开发工具包,是功能齐全的SDK,它包含JRE,提供了编译、运行Java程序所需要的各种工具(编译工具javac、打包工具jar)和资源,是整个Java的核心。
(2)JRE是Java运行时环境,它是运行已经编译的Java程序所需要的所有内容的集合,包含JVM以及Java核心类库。
(3)JVM是Jav ...
MySQL面试题汇总基础数据库三大范式第一范式:数据库的每一列都是不可分割的原子项。
第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。
第三范式:在第二范式的基础上,非主键只依赖于主键,不依赖于其他非主键,即不存在依赖传递。
char和varchar的区别(1)存储方式:char类型的数据是定长的,当存储时,MySQL会将所有的字符都填充到定长,检索时会去掉空格,因此存储时占用的空间固定;而varchar类型的数据是变长的,它只会存储实际使用的字符,因此存储时占用的空间是可变的。
(2)查找效率:char的查找效率比varchar要高。
(3)字符串长度:char类型的数据长度是固定的,可以存储0到255个字符,而varchar类型的数据长度是可变的,可以存储0到65535个字符。
(4)使用场景:通常,char类型的数据适合存储长度固定的数据,例如国家代码、邮编等;而varchar类型的数据适合存储长度不固定的数据,例如用户名、地址等。
drop、truncate和delete的区别(1)作用范围:drop会删除整张表和表结构,以及表的索引、约束和触 ...
MySQL
未读MySQL联合索引最左匹配原则使用详解前言很多小伙伴在面试的过程中都会被问到:MySQL的索引的失效的情况有哪些?
这里顺便带大家复习一下这个八股文:
(1)联合索引不满足最左匹配原则。联合索引的使用遵循最左匹配原则,在联合索引中,最左侧的字段优先匹配。在查询的时候,如果想让查询条件走索引,那么最左边的字段要出现在查询条件中。
(2)运算操作或者函数操作。原因是因为如果没有进行运算操作,那么MySQL会直接走索引去B+树中查询数据。但是如果我们对字段进行了运算操作或者函数操作,实际上是拿新的字段去做查询,如果走索引,那么需要一个一个去对比,MySQL认为既然都要对比,不如直接全表扫描。
(3)字符串类型字段不加引号。字符串字段如果不加引号,会发生隐式转换成int类型,参数类型与字段类型不匹配。
(4)模糊查询匹配头部。索引本身相当于目录,将字符串字段从左到右依次排序,而左侧的占位符模糊匹配,导致无法正常按照目录进行匹配。所以索引会失效。
(5)or连接的条件。如果or连接的条件左右其中有一个不是索引字段,那么如果是单独使用的话肯定是要走全表扫描的,连接在一起再次进行索引查询反而是浪费 ...
目录第一章 设计模式概述软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。
设计模式分类
(1)创建型模式
用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。分别是工厂方法、抽象工厂、建造者、原型和单例5种创建型模式。
(2)结构型模式
用于描述如何将类或者对象按某种布局组成更大的结构。分别是适配器、桥接、组合、装饰器、外观、享元、代理等7种结构型模式。
(3)行为型模式
用于描述类或者对象之间怎样相互写作共同完成单个对象无法单独完成的任务,以及怎样分配职责。分别是解释器、模板方法、职责链、命令、迭代器、中介者、备忘录、观察者、状体、策略、访问者等11种行为型模式。
第二章 UML图统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。
UML从目标系统的不同角度出发,定义了用例图、 ...