-
【笔记】手写死锁
死锁:多个线程互相持有对方所需要的资源,导致这些线程处于等待状态。死锁产生的必要条件: 互斥:一个资源只允许一个线程访问 占有且等待:一个线程占有资源,同时还有其他线程未得到满足,正在等待其他线程释放该资源 不可抢占:其他线程已经占有了某项资源,不能因为你需要就抢过来 循环等待:发生死锁时,所等待的线程必定会形成一个环路,造成永久拥塞通俗说法: 比如A和B两个人,一个厕所坑位,一卷卫生纸,A进厕所蹲坑去了,即A占有了坑,但是A没拿卫生纸,B拿了卫生纸后,B也想上厕所了,发现坑...…
-
包装类和基础类型比较大小
包装类和基础类型比较大小 int和int之间,用比较,肯定为true。基本数据类型没有equals方法 int和Integer比较,Integer会自动拆箱, 和 equals都肯定为true int和new Integer比较,Integer会自动拆箱,调用intValue方法, 所以 == 和 equals都肯定为true Integer和Integer比较的时候,由于直接赋值的话会进行自动的装箱。所以当值在[-128,127]中的时...…
-
【面试】HashMap 为什么线程不安全?
1. jdk1.7中的HashMap 注意:如果编译环境是JDK1.8,需要先更改为1.7在jdk1.8中对HashMap做了很多优化,这里先分析在jdk1.7中的问题,相信大家都知道在jdk1.7多线程环境下HashMap容易出现死循环,这里我们先用代码来模拟出现死循环的情况:import java.util.HashMap;import java.util.Map;import java.util.concurrent.atomic.AtomicInteger;/** * @Auth...…
-
【面试】根据一个随机数构造另外的随机数的解法
根据一个随机数构造另外的随机数的解法给定一个函数rand5(),生成rand7()可以随机等概率的生成1-7的整数题目: 给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一样。现要求使用该函数构造函数rand7(),使函数rand7()可以随机等概率的生成1-7的整数思路:rand5() 它能够等概率生成 1-5 之间的整数。所谓等概率就是1,2,3,4,5 生产的概率均为 0.2 。现在利用rand5(), 构造一个能够等概率生成 1- 7 的方法。这里有两个特别...…
-
【MyBatis】MyBatis第一个程序
MyBatis中文文档 https://mybatis.org/mybatis-3/zh/configuration.html基于MyBatis3.5.2版本1.简介1.1 什么是MyBatis MyBatis 是一款优秀的持久层框架 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程 MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象...…
-
【集合】ArrayList扩容机制
idea 查看源码的快捷键:Ctrl+Alt+F7一 先从 ArrayList 的构造函数说起ArrayList有三种方式来初始化,构造方法源码如下: /** * 默认初始容量大小 */ private static final int DEFAULT_CAPACITY = 10; private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; /** *默认构...…
-
【Redis】集群
集群现状问题Q:业务发展过程中遇到的峰值瓶颈●redis提供的服务OPS可以达到10万/秒,当前业务OPS已经达到10万/秒●内存单机容量达到256G ,当前业务需求内存容量1T●使用集群的方式可以快速解决上述问题集群架构集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果集群作用●分散单台服务器的访问压力,实现负载均衡●分散单台服务器的存储压力, 实现可扩展性●降低单台服务器宕机带来的业务灾难数据存储设计集群内部通讯设计Cluster集群结构搭建搭建方...…
-
【Redis】缓存预热&雪崩&击穿&穿透
Redis内容也是在B站上看的视频,这一部分讲的比较概述,但是博主认为讲得还是比较全面的,市面上的资源,我了解到的讲得应对面试的比较多,这个可能不适合面试,但是对个人理解层面可能会比较客观些。而且越深入了解技术越会发现它的设计和思想的迷人之处。 面试我看到的讲得还不错的链接传送门:https://mp.weixin.qq.com/s/lQEzWRRg_fP_md_nVjlbUw企业级解决方案缓存预热服务器启动后迅速宕机问题排查 请求数量较高 主从之间数据吞吐量较大,数据同步操作频...…
-
【Redis】高级数据结构
高级数据结构存储需求Bitmaps(信息状态统计)Bitmaps类型的基础操作●获取指定key对应偏移量上的bit值 getbit key offset●设置指定key对应偏移量上的bit值, value只能是1或0 setbit key offset valueBitmaps类型的扩展操作业务场景电影网站 统计每天某一部电影是否被点播 统计每天有多少部电影被点播 统计每周/月/年有多少部电影被点播 统计年度哪部电影没有被点播业务分析●对指定key按位进行交、并、非、异或操作,并将结...…
-
【Redis】哨兵
哨兵哨兵 哨兵(sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。哨兵的作用●监控不断的检查master和slave是否正常运行。master存活检测、master与slave运行情况检测●通知(提醒)当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知。●自动故障转移断开master与slave连接,选取一个slave作为master ,将其他slave连接到新的mas...…
-
【Redis】主从复制
主从复制互联网“三高”架构●高并发●高性能●高可用你的“Redis”是否高可用单机redis的风险与问题●问题1.机器故障 ●现象:硬盘故障、系统崩溃 ●本质:数据丢失,很可能对业务造成灾难性打击 ●结论:基本上会放弃使用redis.●问题2.容量瓶颈 ●现象:内存不足,从16G升级到64G,从64G升级到128G ,无限升级内存 ●本质:穷,硬件条件跟不上 ●结论:放弃使用redis●结论:为了避免单点Redis服务器故障,准备多台服务器,互相连通。将数据复制多个副本保存在不...…
-
【Redis】redis.conf配置
服务器基础配置服务器端设定●设置服务器以守护进程的方式运行 daemonize yes no ●绑定主机地址 bind 127.0.0.1●设置服务器端口号 port 6379●设置数据库数量 databases 16日志配置●设置服务器以指定日志记录级别. loglevel debug verbose notice warning ●日志记录文件名 logfile 端口号.lo...…
-
【Redis】删除策略
Redis删除策略过期数据Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL(Time To Live,生成时间值)指令获取其状态XX :具有时效性的数据-1 :永久有效的数据-2 :已经过期的数据 或 被删除的数据 或 未定义的数据Q:过期的数据真的删除了吗?数据删除策略 (3种) 定时删除 惰性删除 定期删除时效性数据的存储结构数据删除策略的目标在内存占用与CPU占用之间寻找一种平衡,顾此失彼都会造成整体redis性能的下降,甚至引发服务...…
-
【Redis】事务
事务简介什么是事务Redis执行指令过程中,多条连续执行的指令被干扰,打断,插队事务的基本操作取消事务Q:事务定义过程中发现出了问题,怎么办?●取消事务 discard●作用终止当前事务的定义,发生在multi之后, exec之前事务的工作流程事务的注意事项定义事务的过程中,命令格式输入错误怎么办?语法错误指命令书写格式有误处理结果如果定义的事务中所包含的命令存在语法错误,整体事务中所有命令均不会执行。包括那些语法正确的命令。定义事务的过程中,命令执行出现错误怎么办?运行错误指命令格式正...…
-
【Redis】持久化机制AOF&RDB
Redis简介问题现象:1.海量用户2.高并发什么是持久化?利用永久性存储介质将数据进行保持,在特定的时间将保存的数据进行恢复的工作机制称为持久化为什么要进行持久化防止数据的意外丢失,确保数据安全性持久化过程保存什么将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据将数据的操作过程进程保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作过程 Redis 不同于 Memcached 的很重要一点就是,Redis 支持持久化,而且支持两种不同的持久化操作。R...…
-
DNS域名解析
我们在上网的时候,通常使用的方式是域名,而不是IP地址,因为域名方便人类记忆。那么实现这一技术的就是DNS域名解析,DNS可以将域名网址自动转换为具体的IP地址。域名的层级关系DNS 中的域名都是用句点来分隔的,比如 `www.server.com`,这里的句点代表了不同层次之间的界限。在域名中,越靠右的位置表示其层级越高。毕竟域名是外国人发明,所以思维和中国人相反,比如说一个城市地点的时候,外国喜欢从小到大的方式顺序说起(如 XX 街道 XX 区 XX 市 XX 省),而中国则喜欢从大到...…
-
网络安全基础
网络安全三大要素CIA1.Confidentiality保密性网络传输的时候,信息安全问题解决方法:加密算法,权限管理,敏感信息保护2.Integrity完整性数据是完整的,不被篡改—-signature数字签名校验3.Availabitity可用性不能让人家无限的调取你的服务,要有限制STRIDE微软提出了STRIDE的威胁分析模型Spoofing伪装–认证Tampering篡改–完整性->签名校验Repudiation抵赖–否认做过的事,具有不可抵赖性–签名校验Informati...…
-
【笔记】缓冲流、转换流、序列化流
主要内容 缓冲流 转换流 序列化流 打印流第一章 缓冲流昨天学习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流。比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流等等。这些功能更为强大的流,都是在基本的流对象基础之上创建而来的,就像穿上铠甲的武士一样,相当于是对基本流对象的一种增强。1.1 概述缓冲流,也叫高效流,是对4个基本的FileXxx 流的增强,所以也是4个流,按照数据类型分类: 字节缓冲流:BufferedInputStream...…
-
01 什么是PRC?原理是什么?
01 什么是PRC?原理是什么?什么是RPC?RPC(Remote Procedure Call)即远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。比如两个不同的服务 A、B 部署在两台不同的机器上,那么服务 A 如果想要调用服务 B 中的某个方法该怎么办呢?这个时候就需要 RPC 了! RPC 的出现就是为了让你调用远程方法像调用本地方法一样简单。RPC原理是什么?整个RPC的核心功能的完成主要由 6部分组成: 客户端(服务消费端) :调用远程...…
-
JDK+CGLIB动态代理实战
JDK+ CGLIB动态代理实战代理模式那些事定义:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用目的:(1)通过引入代理对象的方法来间接访问目标对象,防止直接访问目标对象给系统带来的不必要的复杂性;(2)通过代理对象对原有的业务增强。开放-封闭原则:程序对外扩展开放,对修改关闭;换句话说,当需求发生变化时,我们可以通过添加新模块来满足新需求,而不是通过修改原来的实现代码来满足新需求;静态代理模式存在的问题:违反了开闭原则:1.扩展能力差2.可维护性差说到动态代理,Sprin...…