一大坨知识-5-Redis
1. WhyRedis速度快,完全基于内存,使用C语言实现,网络层使用epoll解决高并发问题,单线程模型避免了不必要的上下文切换及竞争条件; Name GuavaCache Tair EVCache Aerospike 类别 本地JVM缓存 分布式缓存 分布式缓存 分布式nosql数据库 应用 本地缓存 淘宝 Netflix、AWS 广告 性能 非常高 较高 很高 较高 持久化 无 有 有 有 集群 无 灵活配置 有 自动扩容 与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过10万次读写操作,是已知性能最快的Key-Value DB。另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务、持久化、LUA脚本、LRU驱动事件、多种集群方案。 1、简单高效 完全基于内存,绝大部分请求是纯粹的内存操作。数据存在内存中,类似于 HashMap,查找和操作的时间复杂度都是O(1); 数据结构简单,对数据操作也简单,Redis 中的数据结构是专门进行设计的;...
一大坨知识-4-MySQL篇
1. WhyMysql?NoSQL数据库四大家族 列存储 Hbase K-V存储 Redis 图像存储 Neo4j 文档存储 MongoDB 海量Aerospike Aerospike(简称AS)是一个分布式,可扩展的键值存储的NoSQL 数据库 。T级别大数据高并发的结构化 数据存储,采用混合架构,索引存储在内存中,而数据可存储在机械硬盘(HDD)或固态硬盘(SSD) 上,读写操作达微妙级,99%的响应可在1毫秒内实现。 Name Aerospike Redis 类型 Nosql数据库 缓存 线程数 多线程 单线程 数据分片 自动处理相当于分片 提供分片算法、平衡各分片数据 数据扩容 动态增加数据卷平衡流量 需停机 数据同步 设置复制因子后可以透明的完成故障转移 手动故障转移和数据同步 载体 内存存储索引+SSD存储数据 内存 Aerospike作为一个大容量的NoSql解决方案,适合对 容量要求比较大,QPS相对低 一些的场景,主要用在广告行业,个性化推荐厂告是建立在了和掌握消费者独特的偏好和习性的基础之上,对消费者的购买需求做出准确...
一大坨知识-3-多线程篇
1. 线程调度线程状态 线程是cpu任务调度的最小执行单位,每个线程拥有自己独立的程序计数器、虚拟机栈、本地方法栈 线程状态:创建、就绪、运行、阻塞、死亡 线程状态切换 方法 作用 区别 start 启动线程,由虚拟机自动调度执行run()方法 线程处于就绪状态 run 线程逻辑代码块处理,JVM调度执行 线程处于运行状态 sleep 让当前正在执行的线程休眠(暂停执行) 不释放锁 wait 使得当前线程等待 释放同步锁 notify 唤醒在此对象监视器上等待的单个线程 唤醒单个线程 notifyAll 唤醒在此对象监视器上等待的所有线程 唤醒多个线程 yiled 停止当前线程,让同等优先权的线程运行 用Thread类调用 join 使当前线程停下来等待,直至另一个调用join方法的线程终止 用线程对象调用 阻塞唤醒过程阻塞: 这三个方法的调用都会使当前线程阻塞。该线程将会被放置到对该Object的请求等待队列中,然后让出当前对Object所拥有的所有的同步请求。线程会一直暂停所有线程调度,直到下面其中一种情况发生: ① 其他线程调...
一大坨知识-2-JVM篇
JVM内存划分1. JVM运行时数据区域 堆、方法区(元空间)、虚拟机栈、本地方法栈、程序计数器 Heap:对象的实例以及数组的内存都是要在堆上进行分配的,堆是线程共享的一块区域,用来存放对象实例,也是垃圾回收(GC)的主要区域;开启逃逸分析后,某些未逃逸的对象可以通过标量替换的方式在栈中分配, 堆细分:新生代、老年代, 新生代又分为: Eden区 和 Surviver1 和 Surviver2 区; 方法区:对于JVM的方法区也可以称之为永久区,它储存的是已经被java虚拟机加载的类信息、常量、静态变量;Jdk1.8以后取消了方法区这个概念,称之为元空间(MetaSpace); 当应用中的 Java 类过多时,比如 Spring 等一些使用动态代理的框架生成了很多类 ,如果占用空间超出了我们的设定值,就会发生元空间溢出 虚拟机栈:虚拟机栈是 线程私有 的 ,他的生命周期和线程的生命周期是一致的。里面装的是一个一个的 栈帧,每一个方法在执行的时候都会创建一个栈帧,栈帧中用来存放 (局部变量表 、操作数栈 、动态链接 、返回地址); 在Java虚拟机规范中,对此区域规定...
一大坨知识-1-基础篇
不错的帖子, COPY一下一大坨知识全都来自于此,原来帖子的名字如下: 这些年,背过的面试题 今天看到一篇文章,感叹失败的原因可能有很多条,但成功的道路只一条,来之前准备了半年,上篇俗称八股文,下篇是一些经验总结供大家参考。 网络基础TCP三次握手三次握手过程: 客户端——发送带有SYN标志的数据包——服务端 一次握手 Client进入syn_sent状态 服务端——发送带有SYN/ACK标志的数据包——客户端 二次握手 服务端进入syn_rcvd 客户端——发送带有ACK标志的数据包——服务端 三次握手 连接就进入Established状态 为什么三次:主要是为了建立可靠的通信信道,保证客户端与服务端同时具备发送、接收数据的能力 为什么两次不行? 防止已失效的请求报文又传送到了服务端,建立了多余的链接,浪费资源 两次握手只能保证单向连接是畅通的。(为了实现可靠数据传输, TCP 协议的通信双方, 都必须维 护一个序列号,以标识发送出去的数据包中,哪些是已经被对方收到的。 三次握手的过程即是通信双方 相互告知序列号起始值, 并确认对方已经收到了序列号起始值的...