随笔分类 -  面面俱到

上一页 1 ··· 5 6 7 8 9 10 下一页
摘要:Redis字符串的实现 Redis虽然是用C语言写的,但却没有直接用C语言的字符串,而是自己实现了一套字符串。 Redis构建了一个叫做简单动态字符串(Simple Dynamic String),简称SDS。 Redis的字符串也会遵守C语言的字符串的实现规则,即最后一个字符为空字符。然而这个空字 阅读全文
posted @ 2023-03-17 10:44 残城碎梦 阅读(28) 评论(0) 推荐(0) 编辑
摘要:某一个key可能会在某些时间点被超高并发地访问,是一种非常"热点"的数据,这个key失效,导致并发访问数据库。 与缓存雪崩的区别在于这里针对某一key缓存,前者则是很多key,这里是指同一个key。 解决方案: 设置热点数据永远不过期 加互斥锁,如果缓存中没有,只能一个线程去拿到锁,并且去DB中查询 阅读全文
posted @ 2023-03-17 10:12 残城碎梦 阅读(24) 评论(0) 推荐(0) 编辑
摘要:JDK7和JDK8中HashMap的大致变化是: 1.7中采用数组+链表,1.8采用的是数组+链表/红黑树,即在1.7中链表长度超过一定长度后就改成红黑树存储。 1.7扩容时需要重新计算哈希值和索引位置,1.8并不重新计算哈希值,巧妙地采用和扩容后容量进行&操作来计算新的索引位置。 1.7是采用表头 阅读全文
posted @ 2023-03-17 09:31 残城碎梦 阅读(102) 评论(0) 推荐(0) 编辑
摘要:HashSet是基于HashMap实现的,默认构造函数是构建一个初始容量为16,负载因子为0.75 的HashMap。封装了一个 HashMap 对象来存储所有的集合元素,所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了 阅读全文
posted @ 2023-03-17 08:54 残城碎梦 阅读(25) 评论(0) 推荐(0) 编辑
摘要:同步性 Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们 阅读全文
posted @ 2023-03-17 08:53 残城碎梦 阅读(12) 评论(0) 推荐(0) 编辑
摘要:HashMap和HashTable都实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆。 HashMap的初始容量为16,Hashtable初始容量为11,两者的填充因子默认都是0.75。 HashMap扩容时是当前容量翻倍:capacity*2,Hasht 阅读全文
posted @ 2023-03-17 08:49 残城碎梦 阅读(20) 评论(0) 推荐(0) 编辑
摘要:单例模式(Singleton),是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个全局对象,这样有利于我们协调系统整体的行为。 单例模式实现思路 一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用ge 阅读全文
posted @ 2023-03-17 08:43 残城碎梦 阅读(85) 评论(0) 推荐(0) 编辑
摘要:对于一个network IO (这里我们以read举例),它会涉及到两个系统对象,一个是调用这个IO的进程(或线程),另一个就是系统内核。当一个read操作发生时,它会经历两个阶段: 等待数据准备 将数据从内核拷贝到进程中 blocking IO 在linux中,默认情况下所有的socket都是bl 阅读全文
posted @ 2023-03-17 08:35 残城碎梦 阅读(37) 评论(0) 推荐(0) 编辑
摘要:为什么需要消息队列? 当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异。消息被发送到队列中,“ 消息队列 ”是在消息的传输过程中保存消息的容器 。 使用消息队列有什么好处? 提高系统响应速度 使用了消息队列,生产者一方,把消息往队列里一扔,就 阅读全文
posted @ 2023-03-16 22:43 残城碎梦 阅读(47) 评论(0) 推荐(0) 编辑
摘要:Java 中为我们提供了两种比较机制:Comparable 和 Comparator,二者都是用来实现对象的比较、排序。 Comparable接口 Comparable是一个内比较器,实现Comparable接口的类可以和自己比较(但是未必是自己),是依赖compareTo方法的实现进行比较。com 阅读全文
posted @ 2023-03-16 22:16 残城碎梦 阅读(56) 评论(0) 推荐(0) 编辑
摘要:JDK1.7中的HashMap 在HashMap的扩容函数transfer函数中,在对table进行扩容到newTable后,需要将原来数据转移到newTable中,使用的是头插法,也就是链表的顺序会翻转,可能会造成数据丢失,形成环形链表,造成死循环。 JDK1.8中HashMap 在jdk1.8中 阅读全文
posted @ 2023-03-16 21:52 残城碎梦 阅读(21) 评论(0) 推荐(0) 编辑
摘要:ArrayList 和 LinkedList 是 Java 集合框架中用来存储对象引用列表的两个类。ArrayList 和 LinkedList 都实现 List 接口。 ArrayList是基于数组实现的,支持通过索引访问元素;LinkeList使用了链表的结构,不需要维护容量的大小,不支持随机元 阅读全文
posted @ 2023-03-16 20:55 残城碎梦 阅读(27) 评论(0) 推荐(0) 编辑
摘要:在Java编程语言中,最基本的结构就是两种,一种是数组,一种是模拟指针(引用),所有的数据结构都可以用这两个基本结构构造,HashMap也一样。 HashMap 采用一种所谓的“Hash 算法”来决定每个元素的存储位置。当程序执行 map.put(String,Obect)方法 时,系统将调用Str 阅读全文
posted @ 2023-03-16 20:42 残城碎梦 阅读(77) 评论(0) 推荐(0) 编辑
摘要:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它 阅读全文
posted @ 2023-03-16 18:02 残城碎梦 阅读(22) 评论(0) 推荐(0) 编辑
摘要:单点登录在现在的系统架构中广泛存在,它将多个子系统的认证体系打通,实现了一个入口多处使用,而在架构单点登录时,也会遇到一些小问题,在不同的应用环境中可以采用不同的单点登录实现方案来满足需求。 共享Session 共享Session是实现单点登录最直接、最简单的方式。将用户认证信息保存于Session 阅读全文
posted @ 2023-03-16 15:22 残城碎梦 阅读(46) 评论(0) 推荐(0) 编辑
摘要:使用分布式的好处 很多时候,我们为了更好的承载更多请求,或者稳定的为更多的用户提供服务,那么我们一般会把服务部署多份。以保证服务的高可用,高并发。 但是一项事务有它的好处也有它的坏处,比如分布式服务就要解决幂等性的问题。 幂等性问题 幂等性定义 一次和多次请求某一个资源对于资源本身应该具有同样的结果 阅读全文
posted @ 2023-03-16 13:58 残城碎梦 阅读(53) 评论(0) 推荐(0) 编辑
摘要:相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩。这里key是多个。 注意:多个KEY,同时失效,同时请求,同时访问DB 解决方案: 失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。 阅读全文
posted @ 2023-03-16 13:47 残城碎梦 阅读(15) 评论(0) 推荐(0) 编辑
摘要:连续写数据库和缓存,但是操作期间,出现并发了,数据不一致了。 通常,更新缓存和数据库有以下几种顺序: 先更新数据库,再更新缓存。 先删缓存,再更新数据库。 先更新数据库,再删除缓存。 先更新数据库,再更新缓存 两个请求同时更新数据,若不使用分布式锁,将无法控制最后缓存的值是什么,即存在并发写的的问题 阅读全文
posted @ 2023-03-16 13:43 残城碎梦 阅读(48) 评论(0) 推荐(0) 编辑
摘要:缓存穿透是指查询一个一定不存在的数据,从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。 在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。 解决方案: 采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的b 阅读全文
posted @ 2023-03-16 12:06 残城碎梦 阅读(28) 评论(0) 推荐(0) 编辑
摘要:equals() 的作用是用来判断两个对象是否相等。 hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。 在HashSet, Hashtable, HashMap等等这些本质是散列表的数据结构中: 同一个对象(没有 阅读全文
posted @ 2023-03-16 12:00 残城碎梦 阅读(14) 评论(0) 推荐(0) 编辑

上一页 1 ··· 5 6 7 8 9 10 下一页
点击右上角即可分享
微信分享提示