后端综合问题汇总

一、基础篇

1.基础篇(数据结构与算法)

(1.1)高效的单向链表逆序输出?

(1.2)二叉搜索树(BST),找到树中第 K 小的节点

(1.3)求sqrt(2)精确到小数点后10位(不用库函数)

https://xw.qq.com/partner/hwbrowser/20190608A07ES9/20190608A07ES900?ADTAG=hwb&pgv_ref=hwb&appid=hwbrowser&ctype=news

(1.4)实现LRU缓存

(1.5)两个浮点数相加的问题?

(1.6)给定一个链表,删除链表的倒数第N个节点,并且返回链表的头结点

(1.7)给定一个数组和一个整数,返回两个数组索引,这两个索引的对应的数字和为给定的整数

(1.8)冒泡排序算法的时间复杂度?

(1.9)给定一个数组,其中某些元素为0,将数组非0值都调整到前面,且有序

(1.10)求2000以内的所有素数

(1.11)反转单链表

(1.12)反转二叉树(非递归)

(1.13)快排的思想、时间复杂度、实现及优化方法

(1.14)两个单链表,求第一个公共节点

(1.15)单链表环的入口?

(1.16)判断两个二叉树是否相同?

(1.17)500万的词条,找出热度最高的10条?

(1.18)给定一个字典,找出兄弟单词(通过交换字母顺序还为单词)

(1.19)给一个数组,某个元素出现的频次超过一半,找出这个数?

(1.20)找出第k大的数字所在的位置

(1.21)数组和链表数据结构描述,各自的时间复杂度。

(1.22)kmp算法next数组的求解思路

(1.23)数组中有三个数字出现超过3/4,求这三个数字

(1.24)1到n+2个数组中缺了两个数,如何用O(n)时间,O(1)空间找到这两个数字。

(1.25)找出两个字符串的最长公共子串的长度?

(1.26)写一个不用乘法的乘法运算函数?

(1.27)vector和list什么区别,应用场景呢?

(1.28)234. 回文链表

(1.29)232. 用栈实现队列

(1.30)121. 买卖股票的最佳时机

(1.31)55. 跳跃游戏

(1.32)81. 搜索旋转排序数组 II

(1.33)22. 括号生成

(1.34)860. 柠檬水找零

(1.35)raft算法

http://thesecretlivesofdata.com/raft/

2.基础篇(操作系统)

(2.1)一个CPU,每秒大概执行多少mov指令?

(2.2)A,B,C,D四个进程,A向buf里面写数据,B,C,D向buf里面读数据,当A写完,且B,C,D都读一次后,A才能再写。用P,V操作实现。

(2.3)常用的linux命令

(2.4)大端/小端模式?

大端模式,(高字节在低位)是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由增加,而数据从高位往低位放;这和我们的阅读习惯一致

小端模式,(高地址在高位)是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

(2.5)守护进程?

守护进程(daemon)是一种在后台执行的计算机程序。守护进程程序的名称通常以字母“d”结尾:例如,syslogd就是指管理系统日志的守护进程。通常,守护进程没有任何存在的父进程(即PPID=1),且在UNIX系统进程层级中直接位于init之下。

变为守护进程的方法:

对一个子进程运行fork,然后使其父进程立即终止,使得这个子进程能在init下运行。这种方法通常被称为“脱壳”。

https://www.cnblogs.com/mickole/p/3188321.html

下面是redis中守护进程的例子:

void daemonize(void) {
#ifdef _WIN32
    redisLog(REDIS_WARNING,"Windows does not support daemonize. Start Redis as service");
#else
    int fd;

    if (fork() != 0) exit(0); /* parent exits */
    setsid(); /* create a new session */

    /* Every output goes to /dev/null. If Redis is daemonized but
     * the 'logfile' is set to 'stdout' in the configuration file
     * it will not log at all. */
    if ((fd = open("/dev/null", O_RDWR, 0)) != -1) {
        dup2(fd, STDIN_FILENO);
        dup2(fd, STDOUT_FILENO);
        dup2(fd, STDERR_FILENO);
        if (fd > STDERR_FILENO) close(fd);
    }
#endif
}

(2.6)多线程的优缺点?

https://blog.csdn.net/suxinpingtao51/article/details/12107803

优点:能适当提高程序的执行效率;能适当提高资源的利用率(CPU&内存);线程上得任务执行完后自动销毁。

缺点:开启线程需要占用一定的内存空间;如果开启大量的线程,会占用大量的内存空间,降低程序的性能;线程越多,cpu在调用线程上的开销就越大;程序设计更加复杂,比如线程间的通信、多线程的数据共享。

(2.7)Linux系统下你关注过哪些内核参数?

(2.8)Linux下IO模型有几种,各自的含义是什么?

同步模型(synchronous IO)

阻塞IO(bloking IO)

非阻塞IO(non-blocking IO)

多路复用IO(multiplexing IO)

信号驱动式IO(signal-driven IO)

异步IO(asynchronous IO)

https://blog.csdn.net/zheng0518/article/details/76372727

(2.9)epoll和poll有什么区别

poll的实现和select非常相似,只是描述fd集合的方式不同,poll使用pollfd结构而不是select的fd_set结构,其他的都差不多。

https://www.cnblogs.com/Anker/p/3265058.html

(2.10)用一行命令查看文件的最后五行

tail -n 5 filename

(2.11)你理解的操作系统中线程切换过程

 

(2.12)进程和线程的区别,使用线程真的能节省时间?

https://www.cnblogs.com/virusolf/p/5458325.html

(2.13)top 命令之后有哪些内容,有什么作用?

后端综合问题汇总_第1张图片

(2.14)线上CPU爆高,请问你如何找到问题所在?

(2.15)CAS是一种什么样的同步机制

(2.16)线程的生命周期

https://blog.csdn.net/laihonghuan/article/details/49104789

(2.17)go协程的调度方式,使用协程真的能节省时间?

(2.18)free -h,buffers 和cached有什么不同

Page cache主要用来作为文件系统上的文件数据的缓存来用,尤其是针对当进程对文件有read/write操作的时候。

Buffer cache则主要是设计用来在系统对块设备进行读写的时候,对块进行数据缓存的系统来使用。

http://www.mamicode.com/info-detail-1319579.html

(2.19)后台进程有什么特点,如果要你设计一个进程是后台进程

守护进程已经完全脱离终端控制台了,而后台程序并未完全脱离终端(在终端未关闭前还是会往终端输出结果);

https://www.jianshu.com/p/eb1fefa54d38

(2.20)僵尸进程是什么,如果产生一个僵尸进程,如何查找僵尸进程

一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。

https://www.cnblogs.com/wannable/p/6021617.html

子进程退出,但父进程没有调用wait或waitpid,导致进程退出了,但没有做善后工作(进程描述符依然存在)

(2.21)孤儿进程是什么?

在操作系统领域中,孤儿进程指的是在其父进程执行完成或被终止后仍继续运行的一类进程。 这些孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

https://www.cnblogs.com/Anker/p/3271773.html

父进程退出,子进程还在运行,这些子进程将由init进程接管。

(2.22)一个进程有20个线程,在某个线程中调用fork,新的进程会有20个线程吗?

  在多线程执行的情况下调用fork()函数,仅会将发起调用的线程复制到子进程中。不能同时创建出于父进程一样多线程的子进程。其他线程均在子进程中立即停止并消失,并且不会为这些线程调用清理函数以及针对线程局部存储变量的析构函数。这就会造成一种危险的局面:(1)一个线程在fork()被调用前锁定了某个互斥量,且对某个全局变量的更新也做到了一半,此时fork()被调用,所有数据及状态被拷贝到子进程中,那么子进程中对该互斥量就无法解锁。(2)会有内存泄漏的危险。

在进行多线程编程的时候尽量避免fork()的调用

https://blog.csdn.net/cywosp/article/details/27316803

(2.23)虚拟内存大小一般多大,什么决定的?

(2.24)说说C++内存模型?

https://vra.github.io/2015/01/25/cpp-memory-mode/

(2.25)协程为什么比线程效率高?

https://www.zhihu.com/question/308641794

(2.26)共享内存的使用实现原理(必考必问,然后共享内存段被映射进进程空间之后,存在于进程空间的什么位置?共享内存段最大限制是多少?)

(2.27)定时器的实现原理?

(2.28)fork继承了父进程哪些资源?如果不想继承fd,怎么操作?

fork后父子进程只共享代码段,其它父进程资源会得到继承。
这样的继承会产生很多问题:比如fork之前曾打开过某个文件,fork后父子进程的文件描述符(用户空间)会指向相同的文件表项(内核空间),导致父(子)进程对文件的操作影响到子(父)进程。

系统调用fork()和vfork()是无参数的,而clone()则带有参数。fork()是全部复制,vfork()是共享内存,而clone()是则可以将父进程资源有选择地复制给子进程,而没有复制的数据结构则通过指针的复制让子进程共享,具体要复制哪些资源给子进程,由参数列表中的clone_flags来决定。

https://blog.csdn.net/u012675539/article/details/51093770

3.基础篇(网络)

(3.1)select和epoll的区别?

https://www.cnblogs.com/aspirant/p/9166944.html

(3.2)输入ping IP敲回车,发包前发生了什么?

首先根据目的IP和路由表决定走哪个网卡,再根据网卡的子网掩码地址判断目的IP是否在子网内。如果不在则会通过arp缓存查询IP的网卡地址,不存在的话会通过广播询问目的IP的mac地址,得到后就开始发包了,同时mac地址也会被arp缓存起来。

(3.3)微博系统崩溃怎么解决?

(3.4)现有一批邮件需要发送给订阅顾客,且有一个集群(集群的节点数不定,会动态扩容缩容)来负责具体的邮件发送任务,如何让系统尽快地完成发送?

(3.5)有一批数据待查询,每次只能通过api查询单个数据,怎么快速获取所有的数据?

(3.6)浮点数和“零”的比较的if语句?

if (fabs(x) < 0.00001f);

(3.7)internet采用哪种协议?处在哪个层次?

(3.8)物理地址和IP地址转换是什么协议?

(3.9)IP地址的编码分为哪些?

(3.10)路由器的作用?

(3.12)VLAN的作用?

(3.13)交换机中用户权限分级别?

(3.14)ARP协议的作用?

(3.15)I/O多路复用机制?

(3.16)http和https的区别?https解决了什么问题?https握手的过程?

(1)https协议需要到ca申请证书或自制证书。

(2) http的信息是明文传输,https则是具有安全性的ssl加密。

(3) http是直接与TCP进行数据传输,而https是经过一层SSL(OSI表示层),用的端口也不一样,前者是80(需要国内备案),后者是443。

(4) http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

https://www.cnblogs.com/lovesong/p/5186200.html

(3.17)长连接和短链接?

https://www.cnblogs.com/cswuyg/p/3653263.html

(3.18)浏览器输入URL回车,发生了什么?

https://www.cnblogs.com/tisikcci/p/5866753.html

https://blog.csdn.net/jiao_0509/article/details/82491299

(3.19) tcp四次挥手的过程?TIME_WAIT为什么至少设置两倍的MSL时间?

https://www.cnblogs.com/huenchao/p/6266352.html

https://blog.csdn.net/wsyw126/article/details/70050297

(3.20)get和post请求的区别?

http://www.w3school.com.cn/tags/html_ref_httpmethods.asp

(3.21)cookie和session的请求?

https://blog.csdn.net/grey_mouse/article/details/86572313

https://www.cnblogs.com/linguoguo/p/5106618.html

(3.22)水平触发边沿触发的区别?在边沿触发下,一个socket有500的数据,已读取200然后不再处理,是不是剩下的300就永远无法读取?

水平触发:只要缓冲区中有数据,一次没有读完,就会一直触发,即对应的fd一直可读。

边沿触发:假如上次读取了一部分数据,其不会再触发读回调函数,此时,消息就会一直待在tcp的缓冲区中,直到下一次有新的消息过来,触发了可读事件,把上一次的数据从缓存区给出来了。

(3.23)socket中,在tcp协议层面,数据分为10个报文发放。1-7次很顺利,第8次丢失。这次通信一定失败吗?如果第8次数据会重发,那在接收端是不是:先读取到1-7次的数据,然后读取到8-10次的数据?还是9-10次的数据会先到达?

 

(3.24) tcp/ip 流量控制和拥塞控制

 所谓的流量控制就是让发送方的发送速率不要太快,让接收方来得及接受。利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制。

所谓拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能承受现有的网络负荷。拥塞控制的四种算法,即慢开始(Slow-start),拥塞避免(Congestion Avoidance)快重传(Fast Restrangsmit)和快回复(Fast Recovery)

https://www.cnblogs.com/iou123lg/p/9017044.html

(3.25)301/302有什么区别?应用上有什么异同

301:永久定向,场景是使用域名跳转。

302:临时定向,比如未登陆的用户访问用户中心重定向到登录页面。

https://www.cnblogs.com/zhuzhenwei918/p/7582620.html

(3.26)50X相关错误码的内涵是什么?

  • 【301】永久重定向,搜索引擎在抓取新的内容的同时也将旧的网址替换为了重定向之后的网址。
  • 【302】临时重定向,搜索引擎会抓取新的内容而保留旧的地址,因为服务器返回302,所以,搜索搜索引擎认为新的网址是暂时的。
  • 【304】自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。一般我们在做爬虫应用或者网站监控或SEO诊断等应用时,需要爬取第三方网页的信息,可能会收到这样的错误代码。
  • 【401】这是未授权错误,一般来说该错误消息表明你首先需要登录(输入有效的用户名和密码)。如果你不输入这些信息,就会有401错误,这意味着验证信息出错,服务器无法识别你的身份。
  • 【403】被拒绝。服务器理解请求客户端的请求,但是拒绝执行此请求。通常是目录没有相应的权限或者缺少 index 页面所致,特殊情况由于配置权限问题导致。
  • 【404】Not found,没找到资源。所请求的资源路径不存在。常见的是js、css、静态页面、图片等不存在,或者url地址有错误访问不到资源。当然,PHP、JAVA等后端程序也可以根据业务逻辑主动返回这个错误码
  • 【500】Internal Server Error,服务器内部错误,无法完成请求。此类错误多出现于 windows IIS 服务器,500 错误是许多错误的统称。由于500错误是常规错误的统称,所以一般出现500错误的时候,问题并不是特别容易解决,可以在 IIS 配置页中,将详细错误开启,这样即可看到 500 的真实报错情况,进而缩小问题的分析范围。
  • 【502】Bad Gateway,请求的php-fpm已经执行,但是由于某种原因而没有执行完毕,最终导致php-fpm进程终止。一般来说,与php-fpm.conf的设置有关,也与php的执行程序性能有关,网站的访问量大,而php-cgi的进程数偏少。
  • 【503】Service Unavailable,服务不可用。通常是由于服务器负载较高或者连接数过多,导致无法正常处理请求。这种情况需要优化服务器的配置或者对服务器进行扩容。

(3.27)close wait和time wait是什么?如何排查?有什么意义?

  • 主动关闭连接的一方,调用close();协议层发送FIN包

  • 被动关闭的一方收到FIN包后,协议层回复ACK;然后被动关闭的一方,进入CLOSE_WAIT状态,主动关闭的一方等待对方关闭,则进入FIN_WAIT_2状态;此时,主动关闭的一方 等待 被动关闭一方的应用程序,调用close操作

  • 被动关闭的一方在完成所有数据发送后,调用close()操作;此时,协议层发送FIN包给主动关闭的一方,等待对方的ACK,被动关闭的一方进入LAST_ACK状态;

  • 主动关闭的一方收到FIN包,协议层回复ACK;此时,主动关闭连接的一方,进入TIME_WAIT状态;而被动关闭的一方,进入CLOSED状态

  • 等待2MSL时间,主动关闭的一方,结束TIME_WAIT,进入CLOSED状态

通过上面的一次socket关闭操作,你可以得出以下几点:

(1)主动关闭连接的一方 - 也就是主动调用socket的close操作的一方,最终会进入TIME_WAIT状态

(2)被动关闭连接的一方,有一个中间状态,即CLOSE_WAIT,因为协议层在等待上层的应用程序,主动调用close操作后才主动关闭这条连接

(3)TIME_WAIT会默认等待2MSL时间后,才最终进入CLOSED状态;

(4)在一个连接没有进入CLOSED状态之前,这个连接是不能被重用的!

所以,TIME_WAIT并不可怕(not really,后面讲),CLOSE_WAIT才可怕,因为CLOSE_WAIT很多,表示说要么是你的应用程序写的有问题,没有合适的关闭socket;要么是说,你的服务器CPU处理不过来(CPU太忙)或者你的应用程序一直睡眠到其它地方(锁,或者文件I/O等等),你的应用程序获得不到合适的调度时间,造成你的程序没法真正的执行close操作。

https://blog.csdn.net/hzrandd/article/details/74463313

(3.28)http req和resp的中数据有哪些?

(1)起始行(start line)

(2)首部(header)

(3)主体(body)

https://blog.csdn.net/pengshengli/article/details/88555273

(3.29)什么是连接的半打开,半关闭状态?

https://blog.csdn.net/weiaiyisheng_ljj/article/details/79854597?utm_source=blogxgwz3

https://www.xuebuyuan.com/3255594.html

https://www.cnblogs.com/shuazi/p/10723603.html

(3.30)反爬虫,如果是你如何进行反爬虫,如何绕过反爬措施。 使用无头浏览器被检测到了,如何绕过?

(3.31)常见的web漏洞有哪些?

(3.32)masscan扫描端口时靠什么检测,为什么这么快? 请详述

(3.33)nmap扫描如何进行扫描。发包与协议,握手和不握手,哪些协议握手,哪些不握手. 如何不直接接触目标服务器探测对方端口是否开放

(3.34) xss什么原理,如何自己实现一个beef类似的xss平台. 既然这样实现,面临的跨域如何解决?

(3.35)TCP、UDP区别?

(3.36)udp首部多少个字节,udp数据包最大多大?

UDP数据报的首部8字节,IP数据报的首部为20字节,所以UDP数据报的数据区最大长度为1472字节。

https://www.cnblogs.com/lovko/archive/2008/12/19/1358689.html

(3.37)mtu多大,由什么决定的?

    以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节。链路层的这个特性称作网络MTU,最大传输单元。不同类型的网络大多数都有一个上限。

多数都有一个上限。

(3.38)tcp的拥塞避免和流量控制什么过程?

(3.39)为什么连接的时候是三次握手,关闭的时候却是四次握手?

因为TCP协议是全双工的通信协议,即数据可在两个方向上同时传递。所以进行关闭时每个方向上都要单独进行关闭,这个单方向的关闭就叫半关闭。

(3.40)为什么不能用两次握手进行连接?

为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。

如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认

https://blog.csdn.net/lengxiao1993/article/details/82771768

(3.41)如果已经建立了连接,但是客户端突然出现故障了怎么办?https://blog.csdn.net/qq_38950316/article/details/81087809

(3.42)什么时候TCP连接中会出现RST?https://my.oschina.net/costaxu/blog/127394

(3.43)close和shutdown区别?

https://blog.csdn.net/justlinux2010/article/details/20913755

https://www.cnblogs.com/liyulong1982/p/3990740.html

(3.44)tcp怎么保证有序传输?tcp的快速重传和拥塞机制?

https://www.cnblogs.com/xiaokang01/p/10033267.html

(3.45)udp不可靠,你怎么设计一个基于udp差不多可靠的算法?

quic kcp

(3.46)http1和http1.0的区别?

HTTP/1.0协议使用非持久连接,即在非持久连接下,一个tcp连接只传输一个Web对象,;
HTTP/1.1默认使用持久连接(然而,HTTP/1.1协议的客户机和服务器可以配置成使用非持久连接)。
在持久连接下,不必为每个Web对象的传送建立一个新的连接,一个连接中可以传输多个对象。

https://www.cnblogs.com/sue7/p/9414311.html

(3.47)UDP发送三次包,接收端接收几次?

发几次,收几次。https://www.cnblogs.com/leo0000/p/4863139.html

(3.48)UDP可不可以不connect?

(3.49)大量time_wait怎么解决?

(3.50)怎么出现RST包?

(3.60)recv返回值都代表什么?

(3.61)http1.0/1.1/2.0的区别?

HTTP1.0

  • 无状态、无连接

HTTP1.1

  • 持久连接
  • 请求管道化
  • 增加缓存处理(新的字段如cache-control
  • 增加Host字段、支持断点传输等

HTTP2.0

  • 二进制分帧
  • 多路复用(或连接共享)
  • 头部压缩
  • 服务器推送

https://segmentfault.com/a/1190000013028798

4.基础篇(C/C++语法)

(4.1)static的用途?

(4.2)指针和引用的区别?

(4.3)全局变量和局部变量在内存中的区别?

(4.4)什么函数不能声明为虚函数?

(4.5)switch()的参数类型不能为什么类型?

(4.6)为什么gets越界崩溃?

(4.7)C/C++的内存分区

(4.8)new/delete和malloc/free区别?

(4.9)overload、override、overwrite是什么?

(4.10)class和struct区别?

(4.11)虚函数和纯虚函数?

(4.12)深拷贝和浅拷贝区别。

(4.13) volatile关键字的作用

(4.14)sizeof一个空类是多少?大小为1?为什么?

(4.15)sizeof一个空类里面加一个析构和构造函数,大小是多少?

(4.16)接着(4.15)析构函数变为virtual后,大小为多少?

(4.17)vector的size和capacity的区别?怎么使capacity为0?

二、实战篇

5.实战篇(IDE使用)

6.实战篇(编程规范)

7.实战篇(遇到的坑/如何避免)

(7.1)编程遇到的问题?

8.实战篇(调试/测试)

9.实战篇(开源组件的使用)

10.实战篇(设计模式)

(10.1)写出三种单例模式实现 

(10.2)

三、组件篇

11.组件篇(mysql)

(11.1)innodb的索引key为什么不能太长?

(11.2)mysql的数据如何恢复到任意时间点?

(11.3)如何优化mysql?

(11.4)什么情况下设置了索引但无法使用?

(11.5)SQL语句的优化

(11.6)索引的原来及优化

(11.7)IP在数据库怎么存储?

(11.8)mysql的存储引擎有哪几种?

(11.9)sql优化有哪些着手点?组合索引的最左前缀原则的含义?

(11.10)数据库的事务实现原理、操作过程、如何做到事物之间的独立性等问题

(11.11)数据库的脏读,幻读,不可重复读出现的原因原理,解决办法

(11.12)数据库的隔离级别、MVCC

(11.13)乐观锁、悲观锁、互斥锁、读写锁的原理实现与区别

(11.14)mysql为什么要用b+树,不用平衡二叉树做索引结构?

(11.15) 创建数据库索引应该怎么考虑?

(11.16)使用int 做primary key和使用string 有什么优劣?

(11.17)数据库分表的方法?

(11.18) B+树、B-树的区别?

(11.19) B+树做索引时,B+树通常高度为多少层?要参考哪些条件?

(11.21)一般sql注入怎么发现触点的,从源码阐述sqlmap如何测试注入点的。

(11.22)主键 超键 候选键 外键

(11.23) 数据库事务的四个特性及含义

(11.24) 视图的作用,视图可以更改么?

(11.25) drop,delete与truncate的区别

(11.26)索引的工作原理及其种类

(11.27) 连接的种类

(11.28) 数据库范式

(11.29)数据库优化的思路

(11.30)存储过程与触发器的区别?

(11.31)innodb使用什么方式实现索引?

(11.32)聚族索引和非聚族索引?

(11.33)怎么做分库分表?

 

12.组件篇(nginx)

 (12.1)请解释一下什么是Nginx?

(12.2) 请列举Nginx的一些特性?

(12.3) 请列举Nginx和Apache 之间的不同点?

(12.4) 请解释Nginx如何处理HTTP请求。

(12.5) 在Nginx中,如何使用未定义的服务器名称来阻止处理请求?

(12.6)使用“反向代理服务器”的优点是什么?

(12.7) 请列举Nginx服务器的最佳用途。

(12.8) 请解释Nginx服务器上的Master和Worker进程分别是什么?

(12.9) 请解释你如何通过不同于80的端口开启Nginx?

(12.10) 请解释是否有可能将Nginx的错误替换为502错误、503?

(12.11) 在Nginx中,解释如何在URL中保留双斜线?

(12.12) 请解释ngx_http_upstream_module的作用是什么?

(12.13)请解释什么是C10K问题,后来是怎么解决的?

(12.14) 请陈述stub_status和sub_filter指令的作用是什么?

(12.15)解释Nginx是否支持将请求压缩到上游?

(12.16) 解释如何在Nginx中获得当前的时间?

(12.17) 用Nginx服务器解释-s的目的是什么?

(12.18) 解释如何在Nginx服务器上添加模块?

(12.19) nginx中多个work进程是如何监听同一个端口的?如何处理客户连接的惊群问题?

(12.20) nginx程序的热更新是如何做的?

13.组件篇(redis)

(13.1)假如一个业务依赖单点redis,此redis故障将导致业务不可用,如何改进

(13.2)redis sharding有哪些做法

(13.3)当大量数据要求用redis保存,单机单点难以满足需要,设计(换寻找)一个负载均衡的方案

(13.4)当redis 采用hash做sharding,现在有8个节点,负载方案是 pos = hash(key) % 8,然后保存在pos节点上。这样做有什么好处坏处?当8个节点要扩充到10个节点,应该怎么办?有什么更方便扩充的方案吗?(一致性hash, presharding)

(13.5)如何保证redis和数据库数据的一致性。比如用户名既保存在数据库,又保存在redis做缓存。有如下操作 update_db(username); update_redis(username)。但是执行update_db后故障,update_redis没有执行。有什么简单办法解决这个问题。

(13.6)使用Redis有哪些好处?

(13.7)redis相比memcached有哪些优势?

(13.8)redis常见性能问题和解决方案

(13.9) MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据

(13.10) Memcache与Redis的区别都有哪些?

  • 存储方式

Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。

Redis有部份存在硬盘上,这样能保证数据的持久性。

  • 数据支持类型

Memcache对数据类型支持相对简单。

Redis有复杂的数据类型。

  • 使用底层模型不同

它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。

Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

  • value大小

redis最大可以达到1GB,而memcache只有1MB

(13.11)Redis 常见的性能问题都有哪些?如何解决?

(13.12)redis 最适合的场景?

(13.13)Redis的同步机制了解么?

(13.14)是否使用过Redis集群,集群的原理是什么?

(13.15) redis集群如何保证一致性?

(13.16)redis的删除机制?缓存淘汰策略?

(13.17)redis支持的数据类型有哪些?每种数据类型底层的数据结构是什么?

(13.18)reids怎么防止穿透、击穿、雪崩?

(13.19)哨兵集群的原理?选主策略?

(13.20)redis-cluster怎么通过key找到对应的节点?

(13.21)redis常用的数据结构以及在业务中的使用的场景?

(13.22)redis的hash是怎么实现的?

(13.23)rehash的过程?和JavaHashMap的rehash有什么区别?

(13.24)redis-cluster怎么做到高可用?

(13.25)redis的持久化?为什么不能用redis做专门的持久化数据库存储?

14.组件篇(zeromq)

15.组件篇(libevent)

16.组件篇(mongodb)

(16.1)什么是MongoDB?

(16.2) MongoDB是由哪种语言写的?

(16.3)MongoDB的优势有哪些?

(16.4)什么是数据库?

(16.5)什么是集合?

(16.6) 什么是文档?

(16.7) MongoDB和关系型数据库术语对比图

(16.8) 什么是“mongod”?

(16.9) “mongod”参数有什么?

(16.10) 什么是“mongo”?

(16.11)MongoDB哪个命令可以切换数据库?

(16.12) 什么是非关系型数据库?

(16.13) 非关系型数据库有哪些类型?

(16.14) 为什么用MOngoDB?

(16.15)在哪些场景使用MongoDB?

(16.16)MongoDB中的命名空间是什么意思?

(16.17)哪些语言支持MongoDB?

(16.18) 在MongoDB中如何创建一个新的数据库?

(16.19)在MongoDB中如何查看数据库列表?

(16.20)MongoDB中的分片是什么意思?

(16.21) 如何查看使用MongoDB的连接?

(16.22)什么是复制?

(16.23) 在MongoDB中如何在集合中插入一个文档?

(16.24) 在MongoDB中如何除去一个数据库?

(16.25)在MongoDB中如何创建一个集合?

(16.26) 在MongoDB中如何查看一个已经创建的集合?

(16.27) 在MongoDB中如何删除一个集合?

(16.28)为什么要在MongoDB中使用分析器?

(16.29) MongoDB支持主键外键关系吗?

(16.30) MongoDB支持哪些数据类型?

(16.31) 为什么要在MongoDB中用"Code"数据类型?

(16.32)为什么要在MongoDB中用"Regular Expression"数据类型?

(16.33)为什么在MongoDB中使用"Object ID"数据类型?

(16.34) 如何在集合中插入一个文档?

(16.35)“ObjectID”有哪些部分组成?

(16.36) 在MongoDb中什么是索引?

(16.1)如何添加索引?

(16.37) MongoDB有哪些可替代产品?

(16.38) 如何查询集合中的文档?

(16.39) 用什么方法可以格式化输出结果?

(16.40) 如何使用"AND"或"OR"条件循环查询集合中的文档?

(16.41) 在MongoDB中如何更新数据?

(16.42) 如何删除文档?

(16.43) 在MongoDB中如何排序?

(16.44) 什么是聚合?

(16.45) 在MongoDB中什么是副本集?

(16.46) Mongodb存储特性与内部原理?

17.组件篇(zookkeeper)

(17.1)zookeeper是什么?

(17.2) zookeeper提供了什么?

(17.3) zookeeper文件系统

(17.4) zookeeper的四种类型的znode

(17.5) zookeeper通知机制

(17.6) zookeeper有哪些应用场景?

(17.7) zk的命名服务

(17.8)zk的配置管理服务

(17.9) zk的集群管理

(17.10)zk的分布式锁

(17.11) zk队列管理

(17.12) zk数据复制

(17.13)zk的工作原理

(17.14) zk是如何保证事物的顺序一致性

(17.15) zk集群下server工作状态

(17.16) zk是如何选举Leader的?

(17.17) zk同步流程

(17.18) 分布式通知和协调

(17.19)paxos和zookeeper的zab区别?

17-2.组件篇(kafka)

17-3组件篇(elaticsearch)

四、性能/架构篇

18.系统设计

(18.1)如何设计一个高并发系统?

(18.2)统计一天访问次数最多的IP

(18.3)设计DNS服务器中cache的数据结构。要求设计一个DNS的Cache结构,要求能够满足每秒5000以上的查询,满足IP数据的快速插入,查询的速度要快。

(18.4)给40亿个不重复的unsigned int的整数,没排过序的,然后再给几个数,如何快速判断这几个数是否在那40亿个数当中?

(18.5)在一个文件中有10G个整数,乱序排列,要求找出中位数。内存限制为2G

(18.6)一致性hash算法原理与应用

五、其他

(19.1)时分秒针在一天之类重合多少次?(24小时)

(19.2)将多个集合合并成没有交集的集合

(19.3)平面内有11个点,由它们连成48条不同的直线,由这些点可连成多少个三角形?

(19.4)5个人去一个海岛寻宝,最后一共找到了100枚金币。他们约定了一个分配方案。

(19.5)一个环有10个节点,编号0-9。从0点出发,走N步又能回到0点,共有多少种走法?

(19.6) 25匹马赛跑,有一个赛场,只有五个赛道,没有计时器,只能通过目测来记录快慢,求出第三3快的马要多少场比赛?

(19.7)一条线段长为1,随机选两个点,将改线段分为三段,三段能成三角形的概率是多少?

(19.8)有一个教授,他三个学生,脑袋背后分别各写了一个数字,其中一个数字是另外两个数字的和,经过几轮后,有一个学生猜出了自己的数字请问是什么原因?

(19.9)世界杯小组赛一个球队至少赢多少球才能出线?

你可能感兴趣的:(架构)