Skip to content

面试准备

专业相关: 数据相关

sql

[MYSQL]https://www.nowcoder.com/discuss/518350713974530048?sourceSSR=search

SQL优化搜索

1.查看sql执行频率,定位低效率的sql,分析执行计划 1使用数据库连接池2减少对MySQL的访问(避免对数据进行重复检索、增加cache层、)3负载均衡(主从复制、分布式架构)

1.使用正确的索引 - 在经常查询的列上添加索引可以显著提高查询速度,但请注意不要过度索引,因为它们也会影响写操作的性能。

2.优化查询语句 - 避免使用 SELECT *,而是只查询需要的字段。避免在 WHERE 子句中使用函数,这会导致索引失效。

3.使用连接(JOIN)替代子查询 - 当适当时,使用连接可以更有效,因为子查询可能会导致重复的计算。

4.限制数据量 - 使用 LIMIT 分页以减少单次查询返回的数据量,从而减轻数据库的负担。

5.使用查询缓存 - 如果你的数据库支持查询缓存,合理利用缓存可以提升查询效率。

6.分析并优化执行计划 - 使用 EXPLAIN 等工具来分析查询的执行计划,并根据结果进行相应的优化。

7.避免过度使用复杂的 JOIN 操作 - 过度复杂的 JOIN 操作可以导致性能下降,应当谨慎使用。

8.合理设计数据库 - 数据库的规范化设计可以降低数据冗余,提高效率。

9.适时的数据清理 - 定期清理旧数据和索引碎片整理可以保持数据库性能。

10.使用批处理 - 如果需要插入或更新大量数据,使用批处理操作可以减少网络开销和数据库负担。

按锁粒度分类,有行级锁、表级锁和页级锁。

行级锁是mysql中锁定粒度最细的一种锁。表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突,其加锁粒度最小,但加锁的开销也最大。行级锁的类型主要有三类: Record Lock,记录锁,也就是仅仅把一条记录锁上; Gap Lock,间隙锁,锁定一个范围,但是不包含记录本身; Next-Key Lock:Record Lock + Gap Lock 的组合,锁定一个范围,并且锁定记录本身。 表级锁是mysql中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分mysql引擎支持。最常使用的MyISAM与InnoDB都支持表级锁定。 页级锁是 MySQL 中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突少,但速度慢。因此,采取了折衷的页级锁,一次锁定相邻的一组记录。 按锁级别分类,有共享锁、排他锁和意向锁。

共享锁又称读锁,是读取操作创建的锁。其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁。 排他锁又称写锁、独占锁,如果事务T对数据A加上排他锁后,则其他事务不能再对A加任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。 意向锁是表级锁,其设计目的主要是为了在一个事务中揭示下一行将要被请求锁的类型。InnoDB 中的两个表锁:

四大事务

一致性,原子性,隔离性,持久性 脏读,不可重复读,幻读

索引

索引是存储引擎用于提高数据库表的访问速度的一种数据结构。它可以比作一本字典的目录,可以帮你快速找到对应的记录。 索引一般存储在磁盘的文件中, 优点: 加快数据查找的速度 为用来排序或者是分组的字段添加索引,可以加快分组和排序的速度 加快表与表之间的连接

主键索引,唯一索引,普通索引,复合索引,全文索引,空间索引

计算机网络

网络七层结构: 物理层,数据链路层,网络层(包),传输层(主机之间),会话层(保持),表示层(语法),应用层(内容)

三次握手,四次挥手:1请求2收到并请求3请求收到,1请求fin2收到fin3发完,fin4ack

HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。设计目标主要有三个( SSL/TLS协议作用)。 (1)数据保密性:加密数据以防止数据中途被窃取。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么。 (2)数据完整性:维护数据的完整性,确保数据在传输过程中不被篡改。 (3)身份校验安全性:认证用户和服务器,确保数据发送到正确的客户机和服务器 。

4.滑动窗口

滑动窗口协议(Sliding Window Protocol),属于TCP协议的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输,提高网络吞吐量。

滑动窗口协议规定发送方和接收方都会维护一个窗口,在任何时刻其发送窗口内的数据都可以分为以下 4 类:

发送了并被确认的 发送了但未确认的 能发送但未发送的 不能够发送的 只有当接收方返回对应的确认接收消息,发送窗口才会往后面移动,根据不同的ARQ协议会有不同的实现。

5. tcp/udp区别

TCP是传输控制协议,提供的是面向连接、可靠的基于字节流的传输层通信协议。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 (此外:将应用层的数据流分割成报文段并发送给目标节点的TCP层。数据包都有序号,对方收到则发送ACK确认,未收到则重传。使用校验来检验数据在传输过程中是否有误。) UDP是用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

区别 连接性:TCP面向连接;UDP是无连接的,即发送数据之前不需要建立连接。 可靠性:TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。 实时性:UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高要求的通信或广播通信。 传输方式:每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。 资源:TCP对系统资源要求较多,UDP对系统资源要求较少。 视频通话属于TCP还是UDP?

属于UDP,因为视频通话讲究实时性,且UDP 没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求高的场景(比如电话会议)就需要使用 UDP 而不是 TCP。

6.输入 URL 到网页显示出来的全过程

输入网址 DNS解析 建立tcp连接 客户端发送HTTP请求 服务器处理请求 服务器响应请求 浏览器展示HTML 浏览器发送请求获取其他在HTML中的资源。

7. DNS如何解析

DNS (Domain Name System)主要作用就是将主机域名转换为ip地址。 DNS的获取流程:

浏览器首先在自己缓存中查找是否有该域名解析过的IP地址,如果有则直接返回IP,解析过程结束;

否则,浏览器向本机操作系统查找是否有缓存域名解析对应的IP地址,如果有则返回IP,解析过程结束;

否则,浏览器向本地DNS服务器发送请求,若查找成功则返回给用户结果,否则向根服务器发送请求(大约80%的域名解析到这里就完成了); 向根DNS服务器发送查询请求; 根服务器向本地服务器返回顶级域名服务器(gTLD)地址; 本地服务器向顶级域名服务器(gTLD)发送请求; 顶级域名服务器(gTLD)返回Name Server地址(这个Name Server就是网站注册的域名服务器); 本地服务器向Name Server发送请求; Name Server将解析结果返回给本地服务器; 本地服务器将结果缓存并将结果返回给用户; 用户获得结果并将结果缓存在浏览器和本机操作系统中,解析结束。

8.Http跟Https的区别

HTTP(HyperText Transfer Protocol:超文本传输协议) 是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息。HTTP 默认工作在 TCP 协议 80 端口,用户访问网站 http:// 打头的都是标准 HTTP 服务。 ( 注意:HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。)

HTTP 的报文结构

HTTP请求报文:一个HTTP请求报文由请求行、请求头部、空行和请求数据4个部分组成 HTTP响应报文:HTTP响应也由三个部分组成,分别是:状态行、消息报头、响应正文 HTTPS(全称:Hyper Text Transfer Protocol over SecureSocket Layer,也就是通过SSL/TLS加密HTTP数据)是一种通过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TSL 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。(SSL是“安全套接层”协议,TSL是“安全传输层”协议,都属于是加密协议,在其网络数据传输中起到保护隐私和数据的完整性。)

区别

HTTP 明文传输,数据都是未加密的,安全性较差;而HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。 使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构)申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如Symantec、Comodo、GoDaddy 和 GlobalSign等。 HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 SSL 握手需要的 9 个包,所以一共是 12 个包。 http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。 HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较HTTPS 比 HTTP 要更耗费服务器资源。 HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。设计目标主要有三个( SSL/TLS协议作用)。 (1)数据保密性:加密数据以防止数据中途被窃取。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么。 (2)数据完整性:维护数据的完整性,确保数据在传输过程中不被篡改。 (3)身份校验安全性:认证用户和服务器,确保数据发送到正确的客户机和服务器 。

详解https是如何确保安全的 (重点) 浅谈SSL/TLS工作原理 数字证书原理

个人理解:A、B之间采样非对称密钥加密进行通信存在一个问题,就是在交换双方的公钥时,可能会被攻击者C截取并用C的公钥替换掉A、B的公钥,使得C发起成功的中间人攻击。CA(证书机构)的作用就是用来确保A收到B的公钥是合法的,B收到A的公钥也是合法的。过程是B向CA申请证书(B会把自己的公钥发给CA),CA把证书(P,S)发给B,然后B将证书发给A(注意,P中包含B的公钥),由于A这存在CA的公钥,可以解密数字签名S(由CA的私钥加密哈希值H得到的)得到H1,然后用P经过hash得到H2,最后比较H1和H2,相同就说明证书有效,P中包含的公钥是B的公钥。同理B也可以得到A的公钥。

实际使用 (醍醐灌顶啊~~~,摘自浅谈SSL/TLS工作原理)

非对称加密算法比对称加密算法要复杂的多,处理起来也要慢得多。如果所有的网络数据都用非对称加密算法来加密,那效率会很低。所以在实际中,非对称加密只会用来传递一条信息,那就是用于对称加密的密钥。当用于对称加密的密钥确定了,A和B还是通过对称加密算法进行网络通信。这样,既保证了网络通信的安全性,又不影响效率,A和B也不用见面商量密钥了。

所以,在现代,A和B之间要进行安全,省心的网络通信,需要经过以下几个步骤:

通过CA体系交换public key 通过非对称加密算法,交换用于对称加密的密钥 通过对称加密算法,加密正常的网络通信 这基本就是SSL/TLS的工作过程了。

SSL握手过程如下:

1、客户端向服务器发请求,请求证书

2、服务器把证书发给客户端

3、客户端一般会有大部分CA的公钥,客户端收到证书后,检查该颁发者是否是客户端认可的CA,如果是,就用该CA的公钥解密数字签名,然后再计算证书中的”公钥和证书信息“的hash值,比较两者,如果相同,那就说明该证书没有被人篡改过,而且是该CA机构颁发的。当然,还会进行其它验证, 如证书的common name与http request header中的host(不包括端口)是否相同,等等,如果有哪项检查不通过,会有告警,如果所有检查通过,那进入第4步。

4、客户端生成对称密钥,用证书中的公钥加密,发给服务器

5、服务器收到对称密钥后保存,给客户端一个应答。

6、客户端接收响应,这样就完成了SSL连接,后面的通信用对称密钥加密数据传输。

9. ARP实现过程

ARP(Address Resolution Protocol)是地址解析协议,是根据IP地址获取物理地址(MAC地址)的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间(10分钟),下次请求时直接查询ARP缓存以节约资源。 ARP协议的主要工作就是建立、查询、更新、删除ARP表项。

(1) 局域网内的实现过程 假设主机A和B都在同一网段,A想与B通信,具体过程为: 1.A主机在自己的本地ARP缓存中检查主机B的IP地址对应的MAC地址。如果ARP缓存表中有这个对应的MAC地址,则直接将数据写入以太网数据帧中让网卡进行发送即可; 2. 如果主机A在ARP缓存中没有找到主机B的IP和MAC地址映射,它将询问主机B的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。(源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。) 3. 主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。 4. 主机B将包含其MAC地址的ARP回复消息直接发送回主机A。 5. 当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送消息进行通信了。

(2)公网的实现过程 假设主机A与主机B不在同一局域网内,A会通过ARP请求找到本局域网上的路由器的硬件地址,然后通过该路由器找到与主机B连接的接口,并发送ARP请求到主机B,请求他的MAC地址,主机A收到应答后将建立新的ARP缓存表,然后完成与主机B的通信。

10. RIP协议、OSPF协议与BGP协议(了解下即可)

RIP(Routing Information Protocol,路由信息协议)是基于距离矢量算法的路由协议,利用跳数来作为计量标准(直接相连的路由器跳数为 1。跳数最多为 15,超过 15 表示不可达。)。在带宽、配置和管理方面要求较低,主要适合于规模较小的网络中。 RIP 按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。 优点:RIP 协议实现简单,开销小。 缺点: RIP 能使用的最大距离为 15,限制了网络的规模。并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。

OSPF(Open Shortest Path First,开放式最短路径优先)是一个内部网关协议。它是为了克服 RIP 的缺点而开发出来的。开放表示 OSPF 不受某一家厂商控制,而是公开发表的;最短路径优先表示使用了 Dijkstra 提出的最短路径算法 SPF。

OSPF 具有以下特点: 向本自治系统中的所有路由器发送信息,这种方法是洪泛法。 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。 只有当链路状态发生变化时,路由器才会发送信息。 所有路由器都具有全网的拓扑结构图,并且是一致。相比于 RIP,OSPF 的更新过程收敛的很快。 BGP(Border Gateway Protocol,边界网关协议)

11、GET 和POST 区别

最直观的区别就是GET把参数包含在URL中,POST通过请求体传递参数

GET在浏览器回退(刷新、后退)时是无害的,而POST会再次提交请求。 GET产生的URL地址可以被书签收藏,而POST不可以。 GET请求会被浏览器主动缓存,而POST不会,除非手动设置。 GET请求只能进行url编码(URL的编码格式采用的是ASCII编码),而POST支持多种编码方式。 GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。 GET请求在URL中传送的参数是有长度限制的,而POST么有。 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。 GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

12、 为什么要划分子网?

详细

减少广播所带来的影响,提高性能的整体性能。因为广播数据包只能在同一网段中传输,网络规模小了,网络中用户数少了,当然所占用的资源也就少了。节省IP地址资源。 节约IP地址资源。由于目前IPv4的地址有限,而且只分为ABCDE四类地址,能用的只有ABC三个类别的地址,而且三个类别的地址范围都比较大,造成IP地址浪费比较严重,为了提高IP地址的利用率,将ABC三个类别的地址在利用掩码进行再划分成更细的网段,尽量的节约IP地址的浪费! 增加网络安全性。由于不同子网之间是不能直接通信的(但可通过路由器或网关进行),网络越小,入侵的途径越来越少,安全性也相对提高 便于维护,方便管理。要知道,一个大的网络要查找故障点是相当困难的,如果把网络规模缩小了,查找的范围也就小了,维护起来也更方便了 13、为什么要使用子网掩码? 子网掩码可以分离出IP地址中的网络地址和主机地址,那为什么要分离呢?因为两台主机要通信,首先要判断是否处于同一网段,即网络地址是否相同。如果相同,那么可以把数据包直接发送到目标主机,否则就需要路由网关将数据包转发送到目的地。可以这么简单的理解:A主机要与B主机通信,A和B各自的IP地址与A主机的子网掩码进行And与运算,看得出的结果:

结果如果相同,则说明这两台主机是处于同一个网段,这样A可以通过ARP广播发现B的MAC地址,B也可以发现A的MAC地址来实现正常通信。 如果结果不同,ARP广播会在本地网关终结,这时候A会把发给B的数据包先发给本地网关,网关再根据B主机的IP地址来查询路由表,再将数据包继续传递转发,最终送达到目的地B

13.http状态码

1XX(信息状态码)接受请求正在处理 2XX(成功状态码) 请求正常处理完毕 3XX(重定向状态码) 需要附加操作已完成请求 4XX(客户端错误状态码) 服务器无法处理请求 5XX(服务器错误状态码) 服务器处理请求出错

00 请求已成功,请求所希望的响应头或数据体将随此响应返回。 201 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立,且其 - - URI 已经随 Location 头信息返回 202 服务器已接受请求,但尚未处理 301 (永久移动) 请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。 304 (未修改) 自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。 305 (使用代理) 请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。 307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 401 当前请求需要用户验证。如果当前请求已经包含了 Authorization 证书,那么 401 响应代表着服务器验证已经拒绝了那些证书 403 服务器已经理解请求,但是拒绝执行它。与 401 响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交 404 请求失败,请求所希望得到的资源未被在服务器上发现 500 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。 501 服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。 502 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。 503 由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。

14.如果一个请求,返回的状态码是 200,但是没有内容,可能发生了什么? 请求头缺失或错误 参数 length 不符 以上为个人理解,有误请指正。

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 cookie (储存在用户本地终端上的数据), Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie(内含唯一ID)。客户端会把Cookie保存起来(会话cookie保存在内存中,持久cookie保存在硬盘中)。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。 Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session是在服务端保存的一个数据结构,用来跟踪用户的状态。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。 区别 cookies 数据保存在客户端,session 数据保存在服务器端; cookies 可以减轻服务器压力,但是不安全,容易进行 cookies 欺骗; session 较安全,但占用服务器资源

软件工程