Redis

携程&拼多多研发面经

南笙酒味 提交于 2020-12-05 01:00:00
携程&拼多多研发面经 1 携程面经是参考我同学的面试经验写出来的,因为面试官的问题可能不怎么更新,所以有缘的小伙伴看看,说不定就面到了。 携程面经 一面: 租车事业部 1 项目讲一下 2 多线程并发读取数据库可能出现的问题,如何解决线程数不够带来的问题,我说了几种方式,一个是使用缓存,一个是使用数据库连接池,他问我能不能借助类似IO处理的方式来优化,于是我说了使用AIO异步处理。他问我有没有用过,我就大概说了一下。 3 Java的数据结构了解哪些,说一下linkedlist和ArrayList的区别,如果使用它们来存储字符串,哪个更合适呢,如果要进行字符串的增删改查和拼接操作呢。 4 多个string常量相加会有什么问题,我说会产生多个string,其实是会使用stringbuilder进行append操作,每次相加都会新建一个stringbuilder对象,比较低效。 而使用stringbuilder对象直接append则只有一个stringbuilder对象。 当使用for循环时,string相加会优化成一个stringbuilder进行append操作。 5 map是否线程安全,为什么不是呢,如何实现线程安全呢,除了用chm和hashtable还有别的方式吗,我说自己实现一个map然后重写get和put方法,加synchronized即可。 6 说几种你了解的设计模式

Redis的过期策略和内存淘汰策略

故事扮演 提交于 2020-12-05 00:59:28
Redis的过期策略和内存淘汰策略搞混淆了。 Redis的过期策略 我们都知道,Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间。Redis的过期策略就是指当Redis中缓存的key过期了,Redis如何处理。 过期策略通常有以下三种: 定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。 惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。 定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。 (expires字典会保存所有设置了过期时间的key的过期时间数据,其中,key是指向键空间中的某个键的指针,value是该键的毫秒精度的UNIX时间戳表示的过期时间。键空间是指该Redis集群中保存的所有键。) Redis中同时使用了惰性过期和定期过期两种过期策略

技术架构的战略和战术原则

风流意气都作罢 提交于 2020-12-04 23:56:26
作者丨胡斌 策划丨小智 技术架构,是将产品需求转变为技术实现的过程。技术架构解决的问题包括了如何进行纯技术层面的分层、开发框架选择、语言选择(这里以 JAVA 语言为主)、涉及到各自非功能性需求的技术点(安全、性能、大数据)。技术架构是确定组成应用系统实际运行的技术组件、技术组件之间的关系,以及部署到硬件的策略。 技术架构面临最大的挑战是“不确定性”。在技术架构上,很多时候就会面临这种选择。是要选择业界最新的技术?还是选择团队最熟悉的技术?如果选择最新的技术,遇到新技术出了问题怎么解决?如果选择目前熟悉的技术,后续技术演进怎么办?这些都是架构师在做技术架构过程中需要考虑的。 业务在千变万化、技术在层出不穷,没有一套通用的技术架构模式来适用所有的系统。那么,我们如何保证在做技术架构时,能够实现一个稳定、出色的系统。面对这些“不确定性”时的架构设计问题,这里从战略和战术两个层面来提供一些设计原则。战略层提供的是技术架构的方法和思路,属于顶层设计;战术层提供的是技术架构的技术实践方式,更偏向详细设计。 战略层设计原则 战略层的设计原则就是:合适原则、简单原则、演化原则。 1.1 合适原则 技术人员有一种很强的技术情怀,就是在做设计的过程中,很希望挑战新的技术、在项目中采用最新的框架、或者自己重造一个比业界的还要牛的轮子。这样才能够显示出自己的优秀,以至于不让自己显的那么平庸。比如

How do I run celery status/flower without the -A option?

风格不统一 提交于 2020-12-04 16:01:10
问题 Consider this bash session: $ export DJANGO_SETTINGS_MODULE=web.settings $ celery status -b redis://redis.businessoptics.dev:6379/1 -t 10 Error: No nodes replied within time constraint. $ celery status -b redis://redis.businessoptics.dev:6379/1 -t 10 -A scaffold.tasks.celery_app celery@worker.9e2c39a1c42c: OK Why do I need the -A option? As far as I can tell celery should be able to detect the necessary metadata on redis. Similarly if I run celery flower -b <redis url> it shows that it

How do I run celery status/flower without the -A option?

佐手、 提交于 2020-12-04 16:00:31
问题 Consider this bash session: $ export DJANGO_SETTINGS_MODULE=web.settings $ celery status -b redis://redis.businessoptics.dev:6379/1 -t 10 Error: No nodes replied within time constraint. $ celery status -b redis://redis.businessoptics.dev:6379/1 -t 10 -A scaffold.tasks.celery_app celery@worker.9e2c39a1c42c: OK Why do I need the -A option? As far as I can tell celery should be able to detect the necessary metadata on redis. Similarly if I run celery flower -b <redis url> it shows that it

How do I run celery status/flower without the -A option?

限于喜欢 提交于 2020-12-04 16:00:06
问题 Consider this bash session: $ export DJANGO_SETTINGS_MODULE=web.settings $ celery status -b redis://redis.businessoptics.dev:6379/1 -t 10 Error: No nodes replied within time constraint. $ celery status -b redis://redis.businessoptics.dev:6379/1 -t 10 -A scaffold.tasks.celery_app celery@worker.9e2c39a1c42c: OK Why do I need the -A option? As far as I can tell celery should be able to detect the necessary metadata on redis. Similarly if I run celery flower -b <redis url> it shows that it

Java程序员从京东、阿里、携程面试回来,已成功拿到京东offer

旧街凉风 提交于 2020-12-04 15:55:04
阿里巴巴(一面) 阿里找了一个北邮学长的内推,准确来说应该是直推,是他帮我直接录的简历,他本科进的阿里蚂蚁金服,厉害吧?是真的佩服。第一次在官网上填资料,想想马云有多出名,想想蚂蚁金服这样的顶级技术,有些兴奋,有些期待。 录完简历后等待简历评估,原来,找内推不一定能得到面试机会,能不能得到面试机会要经过简历评估(我这才知道,原来内推免笔试可不是那么容易的),毕竟内推能免去在线笔试直接面试,互联网第一梯队像百度、阿里,腾讯的笔试真的很有难度,做过前几年这些公司的笔试题,真的太难了。在阿里的校招群里看到很多研究生研究算法,前端,Java研发的,简历评估后直接变成已回绝没有得到面试机会。心想,我一个研究生,Java研发都是自学的,项目都是自己设计的需求,简历也就一张纸,究竟能不能得到面试机会? 填完资料的一个星期后收到了支付宝的面试电话,突然变得好紧张,居然得到了面试的机会。 自我介绍 简单的介绍一下你的项目 一个有500个用户的广播系统,你怎么做性能优化 当用户提交请求后,却立即按撤回按钮,涉及性能的数据落地问题你怎么处理 Lucene底层实现原理,它的索引结构 ibatis跟hibernate的区别 ibatis是怎么实现映射的,它的映射原理是什么 Java I/O底层细节,注意是底层细节,而不是怎么用 你对mysql有什么了解 说一下数据库事务的四个特性

短短一个秋招拿下字节跳动,阿里,每天3个offer,全靠我啃烂了这份2020最新的面试笔记!

微笑、不失礼 提交于 2020-12-04 11:29:33
前言 不论是校招还是社招都避免不了各种⾯试、笔试,如何去准备这些东⻄就显得格外重要。不论是笔试还是⾯试都是有章可循的,我这个“有章可循”说的意思只是说应对技术⾯试是可以提前准备,所谓不打无准备的仗就是这个道理,以下为大家,描述了从面试准备到最后的拿到offer提供了⾮常详细的⽬录,建议可以从头看是看⼀遍,如果基础不错的话也可以挑⾃⼰需要的章节查看 Redis 什么是Redis? Redis的数据类型? 使用Redis有哪些好处? Redis相比Memcached有哪些优势? Memcache与Redis的区别都有哪些? Redis是单进程单线程的? 一个字符串类型的值能存储最大容量是多少? Redis的持久化机制是什么?各自的优缺点? Redis常见性能问题和解决方案: redis过期键的删除策略? Redis的回收策略(淘汰策略) ? 为什么Redis需要把所有数据放到内存中? Redis的同步机制了解么? Pipeline有什么好处,为什么要用pipeline? 是否使用过Redis集群,集群的原理是什么? Redis集群方案什么情况下会导致整个集群不可用? Redis支持的Java客户端都有哪些?官方推荐用哪个? Jedis与Redisson对比有什么优缺点? Redis如何设置密码及验证密码? 说说Redis哈希槽的概念? Redis集群的主从复制模型是怎样的?

妈妈再也不用担心我不会Redis了!

痴心易碎 提交于 2020-12-04 11:29:19
前言: Redis 是如今互联网技术架构中,使用最广泛的缓存。支持 复杂的数据结构 ,支持 持久化 ,支持 主从集群 ,支持 高可用 ,支持 较大的value存储 ... 同时, Redis 也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一。特别是那些优秀的、竞争激烈的大型互联网公司(比如 Twitter、新浪微博、阿里云、腾讯云、淘宝、知乎等),通常要求面试者不仅仅掌握 Redis 基础使用,更要求深层理解 Redis 内部实现的细节原理。毫不夸张地说,能把 Redis 的知识点全部吃透,你的半只脚就已经踏进心仪大公司的技术研发部。 然而,绝大部分开发者只会拿 Redis 做数据缓存,使用最简单的 get/set 方法,除此之外几乎一片茫然,对 Redis 内部实现的细节原理知之甚少。例如: 有同学知道 Redis 的 分布式锁 ,但完全不清楚其内部实现机制 有同学知道 Redis 是 单线程结构 ,但完全不理解 Redis 缘何单线程还可以支持高并发 有同学知道 Redis 支持 主从 ,但完全不晓得内部的实现机制 于是,一位有着十年经验的互联网分布式高并发技术老兵,梳理自己多年 Redis 实践经验,写了这本书,以帮助更多工程师更快,更深入的了解 Redis 。 作者在掌阅维护着上千个 Redis 实例的集群,他在 Redis 持久化,缓存,消息队列 的各类实战经验

一台机器最多能撑多少个TCP连接? 今天掰扯清楚!

こ雲淡風輕ζ 提交于 2020-12-04 10:51:58
在网络开发中,我发现有很多同学对一个基础问题始终是没有彻底搞明白。那就是一台机器最大究竟能支持多少个网络连接?我想我有必要单独发一篇文章来好好说一下这个问题。很多同学看到这个问题的第一反应是65535。原因是:“听说端口号最多有65535个,那长连接就最多保持65535个了”。是这样的吗?还有的人说是应该受TCP连接里四元组的空间大小限制,这样算起来就是非常非常大的一个数字了。这两个答案都对,也都不对。 其实要想把这个问题搞清楚,最最最关键的地方在于要把TCP连接的两端里的角色分清楚-客户端和服务器端。你手头的任何一台服务器,一般情况下都即是服务器,又是客户端。例如对于你的开发的后端接口,对于用户来说你是服务器端。但你得请求Redis、Mysql去获取数据,这时候又变成了客户端。如果不把这台机器作为客户端和服务器端两种角色拆开来理解,你将永远被这个问题困惑下去。 所以本文分别从客户端、服务端两块来展开聊聊。 客户端 现在我们单独来说客户端,当一台机器作为客户端的时候,究竟能支持多少个TCP连接? 空嘴说没有啥意思,我们直接用代码来试试。 1.小试牛刀 开始实验之前我们先来check下手头机器上的端口数量的配置 $ sysctl -a | grep ip_local_port_range net.ipv4.ip_local_port_range = 15000 65000