
面试
文章平均质量分 64
不与天斗8866
理解了世间万物的人们,在他们的余生中,除了万圣节,不会再去思考其他东西
展开
-
Redis为什么快
Redis为什么快转载 2024-04-09 17:41:11 · 103 阅读 · 0 评论 -
互联网项目数据库为什么移除物理外键?
在大型互联网项目中,避免使用物理外键是为了提高系统的性能、可维护性和可扩展性。然而,逻辑外键和适当的索引仍然可以用来保证数据的一致性和查询效率。在实施分库分表时,通过合理的设计和规划,也可以避免上述的困难。转载 2023-11-27 11:06:48 · 237 阅读 · 0 评论 -
究竟什么是时间复杂度,怎么求时间复杂度,看这一篇就够了
文章系转载,方便整理和归纳,源文地址 究竟什么是时间复杂度,怎么求时间复杂度,看这一篇就够了究竟什么是时间复杂度时间复杂度就是用来方便开发者估算出程序的运行时间我们该如何估计程序运行时间呢,我们通常会估计算法的操作单元数量,来代表程序消耗的时间, 这里我们默认CPU的每个单元运行消耗的时间都是相同的。假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这称作为算法的渐近时间复杂度,简称时间复杂度,记为 O(f(n)).转载 2022-03-30 10:56:18 · 376 阅读 · 0 评论 -
Redis内存相关知识
内存使用统计使用info memory命令 127.0.0.1:6380> info memory# Memoryused_memory:841672used_memory_human:821.95Kused_memory_rss:9965568used_memory_rss_human:9.50Mused_memory_peak:1869392used_memory_peak_human:1.78Mtotal_system_memory:1019572224total_sys原创 2021-09-26 19:39:32 · 181 阅读 · 0 评论 -
Redis主从复制知识点
参考书为 <<Redis开发与运维>> Redis相关的知识非常全面,非常推荐阅读手动将从节点设置为主节点手动将从节点设置成主节点。命令:# redis-cli -h <主节点ip> -p <主节点端口号> slaveof [host] [port]127.0.0.1:6380> slaveof 127.0.0.1 6379OK配置复制的方式:1)在配置文件中加入slaveof {masterHost} {masterPort}随Re.原创 2021-09-26 17:00:51 · 215 阅读 · 0 评论 -
Redis缓存持久化
缓存持久化RDBRDB持久化是把当前进程数据生成快照保存到硬盘,命令为save 阻塞执行,已废弃bgsave 创建子进程执行bgsave执行结果33375:M 24 Sep 16:39:02.580 * Background saving started by pid 3428034280:C 24 Sep 16:39:02.592 * DB saved on disk34280:C 24 Sep 16:39:02.593 * RDB: 6 MB of memory used by c原创 2021-09-26 10:47:02 · 466 阅读 · 0 评论 -
Redis单线程为什么快?
第一, 纯内存访问, Redis将所有数据放在内存中, 内存的响应时长大约为100纳秒, 这是Redis达到每秒万级别访问的重要基础。第二, 非阻塞I/O, Redis使用epoll作为I/O多路复用技术的实现, 再加上Redis自身的事件处理模型将epoll中的连接、 读写、 关闭都转换为事件, 不在网络I/O上浪费过多的时间。I/O多路复用实际上就是用select, poll, epoll监听多个io对象,当io对象有变化(有数据)的时候就通知用户进程。好处就是单个进程可以处理多个socket。当原创 2021-09-24 17:11:25 · 171 阅读 · 0 评论 -
Redis数据结构及内部编码
https://cloud.tencent.com/developer/article/1710612https://www.php.cn/redis/473191.htmlhttps://zhuanlan.zhihu.com/p/145384563https://www.php.cn/redis/473191.html原创 2021-09-24 15:02:44 · 187 阅读 · 0 评论 -
京东面试题(Redis):为啥RedisCluster设计成16384个槽
Redis集群的原理又是什么呢?记住下面两句话:Redis Sentinal着眼于高可用,在master宕机时会自动将slave提升为master,继续提供服务。Redis Cluster着眼于扩展性,在单个redis内存不足时,使用Cluster进行分片存储。一、数据分片策略布式数据存储方案中最为重要的一点就是数据分片,也就是所谓的 Sharding。为了使得集群能够水平扩展,首要解决的问题就是如何将整个数据集按照一定的规则分配到多个节点上,常用的数据分片的方法有:范围分片,哈希分片,一致性哈转载 2021-08-19 12:16:15 · 842 阅读 · 0 评论 -
SpringBoot Starter自动装配的原理
SpringBoot自动装配的原理从SpringBoot的主启动类,我们可以看到@SpringBootApplication注解import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class DemoApplication { public sta原创 2021-08-14 17:16:23 · 150 阅读 · 0 评论 -
Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理
文章系转载,方便查看和整理,原文地址:https://www.jianshu.com/p/5e7f8204feb0一、spring依赖注入使用方式@Autowired是spring框架提供的实现依赖注入的注解,主要支持在set方法,field,构造函数中完成bean注入,注入方式为通过类型查找bean,即byType的,如果存在多个同一类型的bean,则使用@Qualifier来指定注入哪个beanName的bean。与JDK的@Resource的区别:@Resource是基于bean的名字,即.转载 2021-08-14 15:50:16 · 303 阅读 · 0 评论 -
Kafka、RabbitMQ、RocketMQ比较
特性ActiveMQRabbitMQRocketMQkafka开发语⾔javaerlangjavascala单机吞吐量万级万级10万级10万级时效性ms级us级ms级ms级可⽤用性高(主从架构)高(主从架构)非常高(分布式架构)非常高(分布式架构)消息可靠性有较低的概率丢失数据经过参数优化配置,消息可以做到0丢失经过参数优化配置,消息可以做到0丢失功能特性成熟的产品,在很多公司得到应用;有较多的⽂档;各种协议支...原创 2021-08-11 12:54:50 · 568 阅读 · 0 评论 -
缓存击穿、雪崩、穿透区别及解决方案
缓存击穿:是指一个Key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个Key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库缓存雪崩:缓存雪崩是因为大面积的缓存失效,打崩了DB。缓存穿透:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求。Redis雪崩效应的解决方案分布式锁(本地锁)对数据库服务请求进行限制,使用锁机制,保证只有一个线程进行数据库的操作访问,多的直接排队等待,(单本版本可以用本地锁ReentrantLock,集群服务使用分布式锁),可以解决雪崩原创 2021-08-05 11:07:17 · 160 阅读 · 1 评论 -
[转载]Spring Cloud微服务Sentinel+Apollo限流、熔断实战
本文系转载,方便整理和查看,源文地址https://www.jianshu.com/p/43f019bd2170在Spring Cloud微服务体系中,由于限流熔断组件Hystrix开源版本不在维护,因此国内不少有类似需求的公司已经将眼光转向阿里开源的Sentinel框架。而以下要介绍的正是作者最近两个月的真实项目实践过程,这中间被不少网络Demo示例级别水文误导过,为了以正视听特将实践过程加以总结,希望能够帮到有类似需要的朋友!一、Sentinel概述在基于Spring Cloud构建的微服.转载 2021-08-05 10:46:46 · 480 阅读 · 0 评论 -
[转载]i++是否是线程安全的?
本文系转载,为方便整理和查看复制,源文地址为 https://www.cnblogs.com/panbingqi/p/11059196.html如果是全局变量,i++是不安全的,因为java在操作i++的时候,是分步骤做的,可以理解为:tp = i;tp2 = i+1;i=tp2;如果线程1在执行第一条代码的时候,线程2访问i变量,这个时候,i的值还没有变化,还是原来的值,所以是不安全的。从更底层的角度讲,主要是因为i++这个操作不是原子性的,这个会编译成i= i +1; 所以会出现多线程访.转载 2021-08-04 11:44:00 · 1073 阅读 · 1 评论 -
HashMap底层查找的时间复杂度
面试题:HashMap底层查找的时间复杂度?问题分析这个问题问的是查找的时间夫复杂度,考察的是HashMap底层数据的存储,我们直到java8之后,HashMap的存储结构为数组+链表+红黑树。所以结合HashMap的存储结构来进行回答。问题回答理想情况下,哈希不冲突,可以直接找到结果,所以O(1)在最差的情况下,HashMap保存的数据都在链表中保存,所以需要遍历链表,所以时间复杂度为O(n)。但是一个好的Hash函数,冲突是比较少的,且HashMap在达到阈值时,还会自动扩展。所以一般情原创 2021-08-03 17:50:56 · 2752 阅读 · 2 评论 -
[转载]Java多线程——创建线程池的几个核心构造参数
Java的线程池可以通过ThreadPoolExecutor来创建。ThreadPoolExecutor的构造函数如下所示: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit,转载 2021-08-03 11:25:28 · 262 阅读 · 0 评论 -
面试专题01-一次面试遇到的问题
HashMap的数据结构,查找值的时间复杂度Mysql的事务级别线程池都有哪些参数SpringBoot的实现方式和原理原创 2021-08-02 18:58:10 · 93 阅读 · 0 评论