自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

福大大架构师每日一题

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

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

原创 2021-01-31:Redis集群方案不可用的情况有哪些?

福哥答案2021-01-31:答案来自此链接:一个集群模式的官方推荐最小最佳实践方案是 6 个节点,3 个 Master 3 个 Slave 的模式。key 分槽与转发机制Redis 将键空间分为了 16384 个槽,通过以下算法确定每一个 key 的槽:CRC16(key) mod 16384由于 16384 = 2 的 14 次方,对一个 2 的 n 次方取余相当于对于它的 2 的 n 次方减一取与运算。所以优化为:CRC16(key) & 16383当 key 包含 hash

2021-01-31 22:04:22 4390 1

原创 2021-01-30:redis中,Pipeline有什么好处?

福哥答案2021-01-30:可以将多次 IO 往返的时间缩减为一次,减少多次IO延迟的开销。前提是 pipeline 执行的指令之间没有因果相关性。多个指令之间没有依赖关系,可以使用 pipeline 一次性执行多个指令,减少 IO,缩减时间。可以查看redis官方手册,有更详细的案例测试。https://redis.io/topics/pipelining评论...

2021-01-30 22:32:32 3971

原创 2021-01-29:redis同步机制是怎样的?

福哥答案2021-01-30:答案1:全量同步master服务器会开启一个后台进程用于将redis中的数据生成一个rdb文件,与此同时,服务器会缓存所有接收到的来自客户端的写命令(包含增、删、改),当后台保存进程处理完毕后,会将该rdb文件传递给slave服务器,而slave服务器会将rdb文件保存在磁盘并通过读取该文件将数据加载到内存,在此之后master服务器会将在此期间缓存的命令通过redis传输协议发送给slave服务器,然后slave服务器将这些命令依次作用于自己本地的数据集上最终达到数据的

2021-01-30 10:09:23 3349 2

原创 2021-01-28:redis使用过程中的注意事项有哪些?

福哥答案2021-01-28:答案1:1.使用key值前缀来作命名空间虽然说Redis支持多个数据库(默认32个,可以配置更多),但是除了默认的0号库以外,其它的都需要通过一个额外请求才能使用。所以用前缀作为命名空间可能会更明智一点。另外,在使用前缀作为命名空间区隔不同key的时候,最好在程序中使用全局配置来实现,直接在代码里写前缀的做法要严格避免,这样可维护性实在太差了。2.创建一个类似 ”registry” 的key用于标记key使用情况为了更好的管理你的key值的使用,比如哪一类key值是

2021-01-28 21:16:58 3461 3

原创 2021-01-27:如何把文件从服务器复制到本地,用什么命令?

福哥答案2021-01-27:scp,rz,sz,sftp,rsync。1.在Windows本地,cmd ,打开命令行模式。scp –r linux登录账户@服务器IP:服务器上要拷贝文件的完整路径 window上存放文件的路径,现如下,文件拷贝到D盘:scp –r [email protected]:/var/opt/mssql/data/xchdata.bak D:/2.rz,sz。rz,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具。优点就是不用再开一个sf

2021-01-27 21:12:33 4318

原创 2021-01-26:mysql8.0做了什么改进?

福哥答案2020-01-26:2020-01-26:mysql8.0做了什么改进?帐户管理增加了对角色的支持。支持原子数据定义语句(atomic DDL)。支持utf8mb4字符集。InnoDB默认情况下在服务器启动时启用二进制日志。MySQL 8.0的十大新特性今天,让我们看一下MySQL8.0提升数据库管理员工作效率的十大改进。从一大堆特性你们找出十点并不太容易,以下是这十大特性:1.临时表的改进2.持续的全局变量3.取消默认MyISAM系统表4.UNDO空间回收5.UTF8性

2021-01-26 20:50:20 3321

原创 2021-01-25:redis中,哨兵如何选举?

福哥答案2020-01-25:答案1:redis-sentinel故障转移的流程:1.当多个sentinel发现并确认了master有问题。2.接着会选举出一个sentinel作为领导。3.再选举出一个slave作为master。4.通知其余的slave,新的master是谁。5.通知客户端一个主从的变化。6.最后,sentinel会等待旧的master复活,然后将新master成为slave。答案2:redis中的纪元(epoch):使用了类似于Raft算法term(任期)的概念称为e

2021-01-25 21:01:37 3620

原创 2021-01-24:手写代码:快速排序。

福哥答案2020-01-24:荷兰国旗问题三分+小于区递归+大于区递归。,相等区不用管。代码用go语言编写。利用slice特性,可以节省两个参数。代码如下:package mainimport ( "fmt" "math/rand" "time")func main() { rand.Seed(time.Now().Unix()) sucCount := 0 failedCount := 0 for i := 0; i < 200

2021-01-24 21:37:42 3301 1

原创 2021-01-23:LFU手撸,说下时间复杂度和空间复杂度。

福哥答案2021-01-23:这道题复杂度太高,短时间内很难写出来。面试的时候不建议手撕代码。一个存节点的map+一个存桶的map+一个存桶的双向链表。桶本身也是一个双向链表。存节点的map:key是键,value是节点。存桶的map:key是次数,value是桶。代码用golang编写,代码如下:package mainimport ( "container/list" "fmt")func main() { cache := Constructor(2)

2021-01-23 21:40:41 3266 1

原创 2021-01-22:java中,HashMap的写流程是什么?

福哥答案2021-01-22:jdk1.7写流程:1.如果table数组为空,table数组初始化,调用inflateTable方法。2.如果key为null,调用putForNullKey()方法,表示插入一个键为null的键值对。否则就是步骤3。3.根据key计算hash,调用hash()方法。4.计算下标,调用indexFor()方法。5.遍历链表,如果找到元素,直接替换旧值。然后调用recordAccess()空方法。6.没找到元素时,modCount自增。7.新增元素,调用addE

2021-01-22 22:19:57 3293

原创 2021-01-21:java中,HashMap的读流程是什么?

福哥答案2020-01-21:jdk1.7读流程:1.key是否为空值null,如果为空,直接遍历table[0]链表,寻找key==null键。调用的是getForNullKey()方法。如下:1.1.如果元素个数为0,直接返回null。1.2.遍历table[0]。1.3.遍历到了,返回值;没遍历到,返回null。2.key不为空,获取entry。调用getEntry方法。2.1.如果元素个数为0,直接返回null。2.2.计算hash。如果key为null,hash值是0;如果不为0,

2021-01-21 21:03:56 3213 1

原创 2021-01-20:mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据。数据库不能停,并且还有增删改操作。请问如何操作?

2020-01-20:mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据。数据库不能停,并且还有增删改操作。请问如何操作?福哥答案2020-01-20:陌陌答案:用pt_online_schema_change 这个工具能操作,原理是先复制表结构在同步数据。CSDN答案:以前老版本 MySQL 添加一列的方式:ALTER TABLE 你的表 ADD COLUMN 新列 char(128);会造成锁表,简易过程如下:1.新建一个和 Table1 完全同构的 Table2。

2021-01-20 22:29:43 3437 1

原创 2021-01-19:mysql中,一张表里有3亿数据,未分表,其中一个字段是企业类型,企业类型是一般企业和个体户,个体户的数据量差不多占50%,根据条件把个体户的行都删掉。请问如何操作?

2021-01-19:mysql中,一张表里有3亿数据,未分表,其中一个字段是企业类型,企业类型是一般企业和个体户,个体户的数据量差不多占50%,根据条件把个体户的行都删掉。请问如何操作?福哥答案2021-01-09:面试的时候,说的是分批删除,没让面试官满意。网上答案:1:MYSQL数据库因生产原因需要删除大量数据,因数据量太大接近上亿条,用常规delete删除小数据可以,删除几千万大数据量会非常慢,并且不会释放出磁盘空间,还需要optimize或repair来压缩数据表来释放硬盘空间,时间更长,

2021-01-19 21:42:17 3370

原创 2021-01-18:java中,HashMap的创建流程是什么?

福哥答案2021-01-18:jdk1.7创建流程:三种构造器。1.初始容量不能为负数,默认16。2.初始容量大于最大容量时,初始容量等于最大容量。3.负载因子必须大于0,默认0.75。4.根据初始容量算出容量,容量是2的n次幂。5.设置负载因子loadFactor 。6.设置容量极限threshold。7.设置table数组。8.调用init()空方法。参数为集合的构造器。1.调用有两个参数的构造器。2.inflateTable方法。初始化table数组。3.putAllFor

2021-01-18 21:09:38 3596 1

原创 2021-01-17:java中,HashMap底层数据结构是什么?

福哥答案2020-01-07:1.7 数组+链表重要字段://HashMap的主干数组,可以看到就是一个Entry数组,初始值为空数组{},主干数组的长度一定是2的次幂,至于为什么这么做,后面会有详细分析。transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE;//实际存储的key-value键值对的个数transient int size;//阈值,当table == {}时,该值为初始容量(初始容量默认为1

2021-01-17 22:23:33 3259

原创 2021-01-16:我截获了登录token的话,是不是就获得了登录状态,这样就不安全了。如何保证安全?

福哥答案2020-01-06:知乎答案:首先,Token 一般放在 Header 或者 Cookies 中,Http 是明文传输,Https 是密文传输。可以一定程度防止Token 截获。第二,Token 一般会和 Ip,MAC地址,或者 DeviceID 进行绑定。如果服务端检测这些发生了变化,可以将 Token 失效让用户重新登录。第三,Token 可以加密,例如AES对称加密,客户端与服务端先交换对称秘钥之后用对称秘钥将 Token + 当前时间戳 对称加密后发往服务端解密验证 Token 和

2021-01-16 23:06:52 5774

原创 2021-01-15:用户登录,保存30天的免登,只允许两个设备登录,如果有第三个设备登录,踢掉第一个。改密码的时候,所有设备需要下线。这个逻辑怎么实现呢?

福哥答案2020-01-15:一、我想到的答案。为什么不能用设备id?接口调用,如果是网页,设备id是无法获取的。另外,设备id可以作假。为什么不能用ip区分?有些网络(某些校园网),对外就是一个ip。用token区分设备有什么缺点?同一台设备登录多次,会被当成多个不同的设备。实在想不到好的办法,故逻辑实现采用token区分设备。逻辑实现如下:方案1:用redis里的list,key存【用户id】,value存【登录token】列表。用redis里的string,key存【登录token】

2021-01-15 21:10:05 4214

原创 2021-01-14:timsort是什么,如何用代码实现?

福哥答案2021-01-14:答案来自此链接:介绍:timsort是一种混合、稳定高效的排序算法,源自合并排序和插入排序,旨在很好地处理多种真实数据。它由Tim Peters于2002年实施使用在Python编程语言中。该算法查找已经排序的数据的子序列,并使用该知识更有效地对其余部分进行排序。这是通过将已识别的子序列(称为运行)与现有运行合并直到满足某些条件来完成的。从版本2.3开始,Timsort一直是Python的标准排序算法。如今,Timsort 已是是 Python、 Java、 Androi

2021-01-14 20:20:41 3432

原创 2021-01-13:很多列的数据,任意一列组合查询,mysql能做到,但是上亿的数据量做不到了,查的时候非常慢。我们需要一个引擎来支持它。这个引擎你有了解过吗?

福哥答案2021-01-13:答案来自此链接:数据库存储设计一般分为行存储还有列存储。行存储一般每一行的数据通过主键聚簇索引存储在一起,列存储一般每一列的数据存储在一起。问题中说的任意一列组合查询,针对上亿的数据量,最好采用基于列存储的 OLAP 场景业务的解决方案。但是 MySQL 原生是不支持列存储引擎的,因为 MySQL 的各种接口抽象以及优化器基本都是基于行存储设计的,用列存储思路实现存储引擎会很别扭,一般不会这么做。大部分业务列存储基本会从 Hbase 或者 Hive 这样的基于 Hadoo

2021-01-13 22:19:05 3317

原创 2021-01-12:多维快查多维查询系统,你了解的解决方案都有哪些?

福哥答案2021-01-12:这个面试题很偏,连题意都不知道。多维表达式 (MDX) 是用于在 MicrosoftAnalysis Services 中处理和检索多维数据的查询语言。MDX 基于 XML for Analysis (XMLA) 规范,并带有特定于 SQL ServerAnalysis Services 的扩展。MDX 使用由标识符、值、语句、函数和运算符组成的表达式,Analysis Services 可以通过计算表达式来检索某个对象(如集或成员)或标量值(如字符串或数字)。SQL S

2021-01-12 20:29:09 3457

原创 2021-01-11:linux中,如何看内存的使用情况呢?

福哥答案2021-01-11:1.free:查看内存占用情况,会直接返回,常用参数 -M、-G 是以MB或GB为单位返回结果。2.sar:定时检测系统资源占用情况,-r 参数是内存资源,一般用法 sar -r 5 10,含义是每隔五秒检测一次、检测十次后结束,每次检测都会输出当时结果、最后一次结束后会输出平均值。这个命令需要安装。3.top:检测系统资源占用,输出值的第三行是内存占用情况。4:ps -e -o ‘pid,comm,args,pcpu,rsz,vsz,stime,user,uid’ |

2021-01-11 22:22:51 3218 1

原创 2021-01-10:linux中,我要看某一个进程的并发,通过什么命令去查?

福哥答案2021-01-10:答案来自此链接:方法一:PS在ps命令中,“-T”选项可以开启线程查看。方法二: Toptop命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程。在top运行时,你也可以通过按“H”键将线程查看模式切换为开或关。命令:top -H要让top输出某个特定进程并检查该进程内运行的线程状况:命令:top -H -p 方法三: Htop一个对用户更加友好的方式是,通过htop查看单个进程的线程,

2021-01-10 21:51:44 3276

原创 2021-01-09:linux中,某一个实时日志通过什么命令查?

福哥答案2020-01-09:答案来自此链接:1.tailtail -f首先就是 tail -f,tail 命令是实时显示日志文件的最常用解决方案,加上 -f 参数可以实时拉取日志最新的更新:tail -f /var/log/access.log同时,默认是查看最后 10 行,可以加上行数增加查看的最后的行数,例如查看最后 100 行:tail -00f /var/log/access.log并且,tail 可以使用匹配符匹配多个文件,例如:tail -100f /var/log/acce

2021-01-10 17:02:16 3195

原创 2021-01-08:cpu和gpu有什么区别?

福哥答案2021-01-08:答案来自此链接:Cache, local memory: CPU > GPU 。Threads(线程数): GPU > CPU。Registers: GPU > CPU 多寄存器可以支持非常多的Thread,thread需要用到register,thread数目大,register也必须得跟着很大才行。SIMD Unit(单指令多数据流,以同步方式,在同一时间内执行同一条指令): GPU > CPU。CPU和GPU之所以大不相同,是由于其设

2021-01-08 21:35:09 3522

原创 2021-01-07:cdn加速是什么原理?

福哥答案2021-01-07:答案来自此链接:CDN(Content Delivery Network):内容分发网络是指一组在地理上分散的服务器,它们协同工作以提供互联网内容的快速交付,一般各种网页静态资源,例如HTML页面、javascript 文件、样式表、图像和视频,可以通过 CDN 进行转发,分布于世界各地的不同服务器上。这样,用户访问某个资源时,可以选择就近的服务器进行访问,减少网络延迟。CDN加速原理:当用户访问使用CDN服务的网站时,本地DNS服务器通过CNAME方式将最终域名请求

2021-01-07 20:42:32 3564 2

转载 2021-01-06:mysql中,我存十亿个手机号码,考虑存储空间和查询效率,用什么类型的字段去存?

福哥答案2021-01-06:答案来自此链接:首先提出假设:考虑一下这几个问题:手机号码都是数字吗?都是中国的手机号码吗?会按照手机号等值查询吗?会按照手机号范围查询吗?需要手机号列唯一约束吗?最简单情况(中国手机号,11位数字)就用数值类型bigint存储即可,建索引。考虑三种类型,BigInt,Char,Varchar这几种类型在 InnoDB 引擎下默认行格式的存储方式为:1.对于 bigint 类型,如果不为 NULL,则占用8字节,首位为符号位,剩余位存储数字,数字范围是

2021-01-06 20:58:02 3568

转载 2021-01-05:mysql的自增id的实现逻辑是什么样子的?

福哥答案2021-01-05:答案来自这个链接: 每日一面 - mysql 的自增 id 的实现逻辑是什么样子的?Key TakeAways1.InnoDB 引擎中 有三种 AutoIncrement 锁模式:innodb_autoinc_lock_mode=0(traditional lock mode):获取表锁,语句执行结束后释放。innodb_autoinc_lock_mode=1(consecutive lock mode,MySQL 8.0 之前默认 ):对于不确定插入数量的语句(例如

2021-01-05 20:49:44 3402

原创 2021-01-04:mysql里的innodb引擎的数据结构,你有看过吗?

福哥答案2020-01-04:面试官刚开始问我看过mysql源码没,然后问了这个问题。回答B+树,过不了面试官那关。答案来自《MySQL技术内幕 InnoDB存储引擎 第2版》第四章,时间仓促,答案不一定对,如果有更好的答案,请直接留言评论。表空间tablespace:所有数据都放在表空间中。段segment:数据段、索引段、回滚段。区extent:一个区有64个连续页,一个引擎页为16KB。页page或者块block:16K。数据页(B-tree Node)、undo页(undo Log

2021-01-04 22:41:18 3383

原创 2021-01-03:java中,描述一下什么情况下,对象会从年轻代进入老年代?

福哥答案2021-01-03:1.对象的年龄超过一定阀值,-XX:MaxTenuringThreshold 可以指定该阀值。2.动态对象年龄判定,有的垃圾回收算法,比如 G1,并不要求 age 必须达到 15 才能晋升到老年代,它会使用一些动态的计算方法。3.大小超出某个阀值的对象将直接在老年代上分配,值默认为 0,意思是全部首选 Eden 区进行分配,-XX:PretenureSizeThreshold 可以指定该阀值,部分收集器不支持。4.分配担保,当 Survivor 空间不够的时候,则需要依

2021-01-03 22:21:45 3818 1

原创 2021-01-02:java中,MinorGC、MajorGC、FullGC 什么时候发生?

福哥答案2021-01-02:MinorGC 在年轻代空间不足的时候发生。MajorGC 指的是老年代的 GC,出现 MajorGC 一般经常伴有 MinorGC。FullGC 老年代无法再分配内存;元空间不足;显示调用 System.gc;像 CMS 一类的垃圾回收器,在 MinorGC 出现 promotion failure 时也会发生 FullGC。答案来自此链接:MinorGC 一般指清理 Young space (Eden and Survivor spaces) 的 GC。例如 G1

2021-01-02 21:46:51 3507

转载 2021-01-01:https加解密机制,你了解多少?

福哥答案2021-01-01:这道题是我被大厂面试的题,但网上的答案太多了,故直接引用。HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 超文本传输安全协议)。HTTPS在传统的HTTP和TCP之间加了一层用于加密解密的SSL/TLS层(安全套接层Secure Sockets Layer/安全传输层Transport Layer Security)层。使用HTTPS必须要有一套自己的数字证书(包含公钥和私钥)。HTTPS解决的

2021-01-01 21:52:51 3331

sokobanai1.0.1.zip

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

2020-06-30

空空如也

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

TA关注的人

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