自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

福大大架构师每日一题

大厂之下第一人。微信公众号:福大大架构师每日一题。最新面试题,针对高级开发人员和架构师。内容是后端、大数据和人工智能。

  • 博客(102)
  • 资源 (1)
  • 收藏
  • 关注

原创 2020-06-30:存储本地消息,如何使用过期时间?

福哥答案2020-06-30:数据库中本地消息表新增超时时间字段。在代码里,当当前时间大于超时时间时,做超时处理。答案不一定对,有不同见解请直接评论。评论

2020-06-30 21:35:39 8051

原创 2020-06-29:本地消息使用什么东西存储?

参考答案如下:第一种理解:分布式事务里的本地消息表本地文本、数据库、消息队列。数据库为主。第二种理解:本地缓存app端:SQLite、Core Data、Realm。SQLite为主。浏览器端:Local Storage、Session Storage、IndexedDB、Web SQL、Cookies。Cookies为主。注意:在没明确说明的情况下,以第一种理解为准。评论...

2020-06-29 20:15:24 8146 2

原创 2020-06-28:本地消息表是在何时保存数据?

参考答案如下:第一种理解:分布式事务里的本地消息表假设业务里有两步操作,第一步操作完成,就会保存到本地消息表。本地消息表,主要保存唯一信息和步骤状态。第二种理解:本地缓存比如app端的sqlite保存聊天记录。注意:在没明确说明的情况下,以第一种理解为准。评论...

2020-06-28 20:19:32 8106

原创 2020-06-27:ACID是什么?描述一下?

参考答案如下:福哥口诀法:事原一隔持(事务属性ACID:原子性、一致性、隔离性、持久性)用银行数据库来举例子解释一下这四个特性原子性: 一个事务可能会包含多种操作,比如转账操作包括从你的账户上扣钱和对方账户加钱。虽然内部有多步操作,但是外部看来它们是一个整体,要么都成功执行,要么都不要执行。否则事务进行到一半出现问题,就可能会出现你的账户扣了钱,但是对方账户没有收到钱的问题一致性:事务必须使整个系统状态保持一致,比如你和对方来回转账,不管转了多少次,你们两个账户总金额总是一样的,不会出现你转出10.

2020-06-27 21:02:54 8741

转载 2020-06-26:什么是聚簇索引?什么是非聚簇索引?

参考答案如下:【聚簇索引】平时习惯逛图书馆的童鞋可能比较清楚,如果你要去图书馆借一本书,最开始是去电脑里面查书名然后根据书名来定位藏书在那个区,哪个书柜,哪一行,第多少本。。。清晰明确,一目了然,因为藏书的结构与图书室的位置,书架的顺序,书本的摆放顺序与书籍的编号都是从大到小一致的顺序摆放的,所以很容易找到。比如,你的目标藏书在C区2柜3排5仓,那么你走到B区你就很快知道前面就快到了C区了,你直接奔着2柜区就能找到了。 这就是雷同于聚簇索引的功效了,聚簇索引,实际存储的循序结构与数据存储的物理机构是一.

2020-06-26 21:45:25 8113

原创 2020-06-25:B+树和B树有什么区别?

参考答案如下:B树:1.叶子节点和非叶子节点都存数据。2.数据无链指针。B+树:1.只有叶子节点存数据。2.数据有链指针。B树优势:1.靠近根节点的数据,访问速度快。B+树优势:1.一页内存可以容纳更多的键,访问数据需要更少的缓存未命中。2.全面扫描只需要扫描叶子节点。评论...

2020-06-25 21:30:32 8276

原创 2020-06-24:如何在写代码中,安全的关闭连接?

参考答案如下:java:1.finally;2.try-with-resource,类必须实现AutoCloseable接口;3.finalize(),不一定安全,慎用。c#:1.finally;2.using,类必须实现IDisposable接口;3.析构,不一定安全,慎用。golang:1.defer;2.runtime.SetFinalizer,析构,不一定安全,慎用。python:1.finally+hasattr+callalble;finally: if .

2020-06-24 20:39:20 8441

转载 2020-06-23:有没有遇到过线程泄露?

参考答案如下:1.现象:cpu使用100%,内存不足。2.定位问题:记住下面3条命令。ps -Te | grep java | wcjstack 14739 > stack.logcat stack.log | grep “.java” | grep explink | sort | uniq -c登录服务器,查看cpu, 内存等使用情况。使用命令,查看 JAVA 进程创建了多少线程: ps -Te | grep java | wc发现java进程创建了1万多个线程,进一步.

2020-06-23 20:28:03 8388

原创 2020-06-22:已知两个非负数的异或值为M,两数之和为N,求这两个数?

参考答案如下:1.遍历法时间复杂度:O(N)空间复杂度:O(logN)[0,N/2]依次遍历,符合条件的就是需要的结果。2.位运算法时间复杂度:O(logN)空间复杂度:O(logN)1100100 两数和N=100,已知0010100 异或值M=20,已知1010000 差N-M=80,如果差为负数或者差为奇数,直接返回空0101000 差右移1位。0010100 异或值M=20,已知0101000 差右移1位。将上面两个二进制数换成中文如下:同同异同异同同零幺零幺零零零.

2020-06-22 21:59:26 9191

原创 2020-06-21:ZK的哪些基础能力构建出了哪些上层应用?

参考答案如下:福哥口诀法:数负命Ma集配分(使用场景:数据发布订阅、负载均衡、命名服务、Master 选举、集群管理、配置管理、分布式队列和分布式锁)数据发布订阅:dubbo的rpc。负载均衡:动态dns。命名服务:全局唯一id。Master 选举:搜索系统、Hbase。集群管理:分布式日志收集系统。配置管理: kafka、storm。分布式队列。分布式锁。分布式协调:心跳检测、工作进度汇报和系统调度。HA高可用性:hadoop、hdfs、yarn。评论...

2020-06-21 21:17:33 7978

原创 2020-06-20:一句话总结ZK?

这道题价值不大,但是面试题里有这道题。分布式协调服务,注册服务和发现,树形结构,监听机制,过半机制。ZooKeeper是源代码开放的分布式协调服务,由雅虎公司创建,是Google Chubby(主要解决分布式锁相关问题)的开源实现。ZooKeeper是一个高性能的分布式一致性解决方案,它将那些复杂的、容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并提供一系列简单易用的接口给用户使用。评论...

2020-06-20 19:40:01 7785

原创 2020-06-19:多线程消费kafka的时候,开发、测试环境都能每秒10w+,但是正式环境只能1w/s,正式环境不能重启,看怎么调试?

答案来自群成员:基准测试。观察 网络和磁盘的读写,实时与历史曲线,观察文件句柄/内存的使用情况。观察系统patch 基础库/运行时状态。评论

2020-06-19 19:10:14 8033

原创 2020-06-18:ZK的分布式锁怎么实现?

参考答案如下:Zk分布式锁有两种实现方式一种比较简单,应对并发量不是很大的情况。获得锁:创建一个临时节点,比如/lock,如果成功获得锁,如果失败没获得锁,返回false释放锁:删除/lock节点锁等待:使用监听机制,监听lock节点,如果lock节点被删除,重新去抢锁,否则一直等待第二种方式,这种方式比第一种复杂点,但解决了羊群效应问题。获得锁:创建临时带序号的节点,排序,判断创建的节点是否是当前目录下最小的,如果最小获得锁结束如果不是,获得当前节点的前面一个节点名称,进入锁等待释放锁.

2020-06-18 21:16:50 7947

原创 2020-06-17:红锁的设计思想?

参考答案如下:一、锁丢失Redis的master节点上拿到了锁;但是这个加锁的key还没有同步到slave节点;master故障,发生故障转移,slave节点升级为master节点;导致锁丢失。二、持有同一把锁(竞态模型场景)为了避免Redis宕机引起锁服务不可用, 需要为Redis实例(master)增加热备(slave),如果master不可用则将slave提升为master。这种主从的配置方式存在一定的安全风险,由于Redis的主从复制是异步进行的, 可能会发生多个客户端同时持有一个锁.

2020-06-17 21:44:46 7829 1

原创 2020-06-16:Redis hgetall时间复杂度?

明天给答案。评论

2020-06-16 07:18:01 7807

原创 2020-06-15:Redis分布式锁怎么解锁?

参考答案如下:明天给答案。评论

2020-06-15 07:06:39 7919

原创 2020-06-14:Redis怎么实现分布式锁?

明天给答案。评论

2020-06-14 07:55:10 7705

原创 2020-06-13:Redis底层数据结构?

明天给答案。评论

2020-06-13 07:43:28 7807

原创 2020-06-12:推箱子自动求解。

画面里有人、箱子、目标、墙、空间、人目标、箱子目标,经过抽象,会有1个起点画面和多个终点画面。对于拉箱子节点,保存当前值和下一步节点,理由是当前节点只有1个下一步节点,而下一步节点有多个当前节点。对于推箱子节点,保存当前值和上一步节点,理由是当前节点只有1个上一步节点,而上一步节点有多个当前节点。经过测试,双向同时进行不一定比只拉箱子高效,原因是推箱子效率不高,太耗时,拖后腿了。地雷法:在推箱子画面里,如果能移动箱子,这个箱子消失;原因是拉箱子比起推箱子,天然自带死锁分析,天然自带剪枝功能。

2020-06-12 07:26:16 11486

原创 2020-04-29:高并发设计

限流(杀部分用户祭天)、削锋、缓存、弹性可拓展评论

2020-06-11 14:00:35 7736

原创 2020-06-11:Redis支持的数据类型?

明天给答案。评论

2020-06-11 11:35:19 7653

原创 2020-06-10:给定一个无序数组,里面数都是成双数的,只有一个数是成单数的,求这个数? 如果上面那题里面有两个单数,怎么求出来?

1.异或2.字典或集合3.排序golang语言采用异或方式,代码如下:package test22_singlenumber3import ( "fmt" "testing")//go test -v -test.run TestSingleNumberfunc TestSingleNumber(t *testing.T) { arr := []int{3, 1, 2, 1, 3, 4, 4, 5} fmt.Println("数组:", arr)

2020-06-11 11:31:01 7855

原创 2020-06-09:给定一个无序数组,里面数都是成双数的,只有一个数是成单数的,求这个数?

1.异或2.字典或集合3.排序golang语言采用异或方式,代码如下:package test21_singlenumberimport ( "fmt" "testing")//go test -v -test.run TestSingleNumberfunc TestSingleNumber(t *testing.T) { arr := []int{3, 1, 2, 1, 3, 4, 4} fmt.Println("数组:", arr) fmt

2020-06-11 11:29:36 7906

原创 2020-06-08:手写归并排序

golang代码如下:package test20_mergersortimport ( "fmt" "testing")//go test -v -test.run TestMergerSortfunc TestMergerSort(t *testing.T) { if true { fmt.Println("自己写的代码") // 测试代码 arr := []int{9, 8, 7, 6, 5, 1, 2, 3, 4,

2020-06-11 11:27:13 7611

原创 2020-06-07:mysql中varchar类型的id,where id=1,会用到索引吗?int 类型的id,where id=”1“,会用到索引吗?为什么?

答案来自群员:对于int类型id,查询的varchar 类型 ‘1’会隐式转换成 1,‘1’和 1都能正常走索引;对于varchar类型id,查询的int 类型 1不会转换,‘1’正常走索引,1走全表;评论

2020-06-11 11:25:01 7930

原创 2020-06-06:锁的分类

此答案来自群员:按照锁的轻重划分有 偏向锁 轻量级锁 重量级锁按照先后顺序有 公平锁 非公平锁按照使用规则有 重入锁 不可重入锁按照加锁时机有 悲观锁 乐观锁按照场景加锁有 读锁 写锁 读写锁数据库用的比较多的话有 行锁 表锁 临键锁 间隙锁 记录锁评论...

2020-06-11 10:29:18 7703

原创 2020-06-05:索引不适用的条件

1.索引列上有函数。2.不满足最左前缀。3.使用了不等号。1.唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件。2.更新非常频繁的字段不适合创建索引。3.不会出现在 WHERE 子句中的字段不该创建索引。4.表记录太少。sql优化,有点沾边。如下:福哥口诀法:尽最不范覆 不囊来字哦 (sql优化:尽量全值匹配、最佳左前缀法则、不在索引列上做任何操作、范围条件放最后、覆盖索引尽量用、不等于要甚用、Null/Not 有影响、Like查询要当心、字符类型加引号、OR改UNIO

2020-06-11 10:27:35 7997

原创 2020-06-04:线程池拒绝策略分别使用在什么场景

福哥口诀法:拒中丢老调(线程池拒绝策略:中止策略、丢弃策略、弃老策略、调用者运行策略)简单回答:中止策略:无特殊场景。丢弃策略:无关紧要的任务(博客阅读量)。弃老策略:发布消息。调用者运行策略:不允许失败场景(对性能要求不高、并发量较小)。详细回答:1.AbortPolicy中止策略:丢弃任务并抛出RejectedExecutionException异常。这是线程池默认的拒绝策略,在任务不能再提交的时候,抛出异常,及时反馈程序运行状态。如果是比较关键的业务,推荐使用此拒绝策略,这样子在系统不

2020-06-11 10:26:46 13016

原创 2020-06-03:抢红包设计

简单设计:redis+lua。红包池list+抢红包用户hash。是否有红包?用户是否抢过?中级设计:1.拆红包:预拆包和实时拆包。2.高并发读:缓存。3.并发写:串行化和乐观锁。4.网络流量峰值:大量用户同时抢红包是否会造成网络拥塞,发红包和抢红包最好在同一个IDC。5.对账:考虑到拆红包凭证和入账是异步的2套系统,以及出现故障的可能,需要定时对账保证数据的一致性。6.降级:在cache故障时有限流的使用DB进行服务,在资源紧张的时候关闭掉非核心流程,在实时入账请求量过大时,延迟批量入账。

2020-06-11 10:25:52 7611

原创 2020-06-02:千万级数据量的list找一个数据。

对于千万级长度的数组单值查找:序号小的,单线程占明显优势;序号大的,多线程占明显优势。单线程时间不稳定,多线程时间稳定。go语言测试代码如下:package mainimport ("fmt""math/rand""testing""time")const (ARRLEN = 1000_0000)var arr []intvar target intfunc init() {arr = make([]int, ARRLEN)rand.Seed(time.Now()

2020-06-11 10:24:19 8888 1

原创 2020-06-01:百万级int数据量的一个array求和。

fork/join。对于百万级长度的数组求和,单线程和多线程下区别不大。对于千万级长度的数组求和,多线程明显变快,大概是单线程的2-3倍。go语言测试代码如下:package test18_sum100wimport ( "fmt" "math/rand" "testing" "time")const ( ARRLEN = 100_0000)var arr []intfunc init() { arr = make([]int, A

2020-06-11 10:20:35 8565 1

原创 2020-05-31:假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如何将它们全部找出来?

使用keys指令可以扫出指定模式的key列表。对方接着追问:如果这个redis正在给线上的业务提供服务,那使用keys指令会有什么问题?这个时候你要回答redis关键的一个特性:redis的单线程的。keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。这个时候可以使用scan指令,scan指令可以无阻塞的提取出指定模式的key列表,但是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间会比直接用keys指令长。评论...

2020-06-11 10:18:31 8201

原创 2020-05-30:主从数据库不一致如何解决?

场景描述,对于主从库,读写分离,如果主从库更新同步有时差,就会导致主从库数据的不一致。1、忽略这个数据不一致,在数据一致性要求不高的业务下,未必需要时时一致性。2、强制读主库,使用一个高可用的主库,数据库读写都在主库,添加一个缓存,提升数据读取的性能。3、选择性读主库,添加一个缓存,用来记录必须读主库的数据,将哪个库,哪个表,哪个主键,作为缓存的key,设置缓存失效的时间为主从库同步的时间,如果缓存当中有这个数据,直接读取主库,如果缓存当中没有这个主键,就到对应的从库中读取。评论...

2020-06-11 10:17:03 7788

原创 2020-05-29:redis怎么保证高可用,高可用模式有那些?对比下优缺点?

Redis 高可用架构如下:1.Redis Sentinel 集群 + 内网 DNS + 自定义脚本。2.Redis Sentinel 集群 + VIP + 自定义脚本。3.封装客户端直连 Redis Sentinel 端口。4.JedisSentinelPool,适合 Java。5.PHP 基于 phpredis 自行封装。6.Redis Sentinel 集群 + Keepalived/Haproxy。7.Redis M/S + Keepalived。8.Redis Cluster。9

2020-06-11 10:15:59 7777

原创 2020-05-28:公平锁和非公平锁区别?

公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁。优点:所有的线程都能得到资源,不会饿死在队列中。缺点:吞吐量会下降很多,队列里面除了第一个线程,其他的线程都会阻塞,cpu唤醒阻塞线程的开销会很大。非公平锁:多个线程去获取锁的时候,会直接去尝试获取,获取不到,再去进入等待队列,如果能获取到,就直接获取到锁。优点:可以减少CPU唤醒线程的开销,整体的吞吐效率会高点,CPU也不必取唤醒所有线程,会减少唤起线程的数量。缺点:你们可能也发现了,这样可能导致

2020-06-11 10:14:53 7624

原创 2020-05-27:SpringCloud用了那些组件?分布式追踪链怎么做的?熔断器工作原理?

SpringCloud分布式开发五大组件详解服务发现——Netflix Eureka客服端负载均衡——Netflix Ribbon断路器——Netflix Hystrix服务网关——Netflix Zuul分布式配置——Spring Cloud Config分布式追踪链系统图:Hystrix 执行时内部原理:评论...

2020-06-11 10:13:44 7559

原创 2020-05-26:TCP四次挥手过程?

评论

2020-06-11 10:12:07 7608

原创 2020-05-25:MQ应用场景、Kafka和rabbit区别?kafka为什么支撑高并发?

应用场景:解耦、异步、削峰。区别如下:高并发原因:1.页缓存技术;2.磁盘顺序写;3.零拷贝技术。评论

2020-06-11 10:10:49 7748

原创 2020-05-24:ZK分布式锁有几种实现方式?各自的优缺点是什么?

Zk分布式锁有两种实现方式一种比较简单,应对并发量不是很大的情况。获得锁:创建一个临时节点,比如/lock,如果成功获得锁,如果失败没获得锁,返回false释放锁:删除/lock节点锁等待:使用监听机制,监听lock节点,如果lock节点被删除,重新去抢锁,否则一直等待第二种方式,这种方式比第一种复杂点,但解决了羊群效应问题。获得锁:创建临时带序号的节点,排序,判断创建的节点是否是当前目录下最小的,如果最小获得锁结束如果不是,获得当前节点的前面一个节点名称,进入锁等待释放锁:删除创建的临时带

2020-06-11 10:07:03 8005

原创 2020-05-23:如何实现并发限流

计数器、漏桶、令牌桶。除了算法手动实现限流 guava也有提供限流工具 除了程序内限流 gateway 网关nginx也能实现限流。短连接无状态的的集群并发接口的限流 只能靠 7层负载均衡器上的网关功能。长连接或者说有状态的接口 限流 依靠 类分布式锁 准分布式锁。评论...

2020-06-11 10:06:16 7638

sokobanai1.0.1.zip

推箱子自动求解小工具。 问:推箱子关卡可以用电脑求解吗? 答:对不太大,箱子不太多的关卡,目前有不少程序都能够求出答案。但是,推箱子已经被数学家和计算机科学家证明 是PSPACE完全(PSPACE-complete)问题,即基本可以认为不存在快速(多项式时间)的求解算法。对于比较大的关卡(如我们MF8推箱子比赛的关卡), 如今的个人电脑还无能为力。

2020-06-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除