2018笔试面试总结——百度面试笔记

1.redis为什么读写速率快性能好

  • 1.批量处理:
    redis在处理数据时,最好是要进行批量处理,将一次处理1条数据改为多条,性能可以成倍提高。测试的目的就是要弄清楚批量和非批量处理之间的差别,从测试结果来看,性能差异非常大,所以在开发过程中尽量使用批量处理,即每次发送多条数据,以抵消网络速度影响。
  • 2.网络:
    redis在处理时受网络影响非常大,所以,部署最好能在本机部署,如果本机部署redis,能获取10到20倍的性能。集群情况下,网络硬件、网速要求一定要高。
  • 3.内存:
    由于我在测试环境遇到过redis读取超时,排查原因定位在Linux交互分区上。如果没有足够内存,linux可能将reids一部分数据放到交换分区,导致读取速度非常慢导致超时。所以一定要预留足够多的内存供redis使用。

2.@Controller和@RestController的区别?

官方文档:
@RestController is a stereotype annotation that combines @ResponseBody and @Controller.
意思是:
@RestController注解相当于@ResponseBody + @Controller合在一起的作用。

  • 1.如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
    例如:本来应该到success.jsp页面的,则其显示success.
  • 2.如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
  • 3.如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

redis优缺点总结

优点:
- 1. 读写性能优异
- 2. 支持AOF和RDB两种持久化方式
- 3. 支持主从复制,主动会自动将数据同步到从机,可以进行读写分离
- 4. 数据结构丰富;除了支持string类型的value外还支持string、hash、set、sort、edset、list等数据结构。
缺点
缺点:
- 1. Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。
- 2. 主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
- 3. Redis的主从复制采用全量复制,复制过程中主机会fork出一个子进程对内存做一份快照,并将子进程的内存快照保存为文件发送给从机,这一过程需要确保主机有足够多的空余内存。若快照文件较大,对集群的服务能力会产生较大的影响,而且复制过程是在从机新加入集群或者从机和主机网络断开重连时都会进行,也就是网络波动都会造成主机和从机间的一次全量的数据复制,这对实际的系统运营造成了不小的麻烦。
- 4.Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。

依赖注入的方式有几种,哪几种

依赖注入机制减轻了组件之间的依赖关系,同时也大大提高了组件的可移植性,这意味着,组件得到重用的机会将会更
在spring ioc中有三种依赖注入,分别是:.
a、接口注入;
b、setter方法注入;
c、构造方法注入;

http请求头

HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST)。如有必要,客户程序还可以选择发送其他的请求头。大多数请求头并不是必需的,但Content-Length除外。对于POST请求来说Content-Length必须出现。

http请求请求的流程?

Http 的header会给我们的请求包装,比如AF中经常设置的可接受的Accept(text/html) –》域名解析,根据域名找到服务器的IP –> 发起TCP的3次握手 –> 建立TCP连接后发起http请求 –> 服务器响应http请求,浏览器得到html代码 –> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) –> 浏览器对页面进行渲染呈现给用户

每次都请求都会经过 客户端的应用层(http协议)–> 客户端的传输层(tcp或udp协议) –>客户端的网络层(ip协议) –> 客户端的链路层(网卡,路由器等) –> ——————经过dns解析,穿越多个isp(互联网服务提供商,移动,联通,电信等),各种数据交换,找到了服务器——————- 服务器的链路层 –>服务器的网络层 –>服务器的传输层 –>服务器的应用层。 这个请求完成了。

HTTP状态码

HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。它由 RFC 2616 规范定义的,并得到RFC 2518、RFC 2817、RFC 2295、RFC 2774、RFC 4918等规范扩展。

层次遍历二叉树

二叉树的层次遍历思路,借助队列来实现。相当于广度优先搜索,使用队列(深度优先搜索的话,使用栈)。
若根节点为空,直接返回;
若根节点非空,则将根节点入队,然后,判断队列是否为空,若不为空,则将队首节点出队,访问,并判断其左右子节点是否为空,若不为空,则压入队列。

快速排序

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

GET和POST

POST和GET的区别
- 1. 原理不同:
一般我们在浏览器输入一个网址访问网站都是GET请求;在FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式。HTTP定义了与服务器交互的不同方式,其中最基本的四种:GET,POST,PUT,DELETE,HEAD,其中GET和HEAD被称为安全方法,因为使用GET和HEAD的HTTP请求不会产生什么动作。不会产生动作意味着GET和HEAD的HTTP请求不会在服务器上产生任何结果。但是安全方法并不是什么动作都不产生,这里的安全方法仅仅指不会修改信息。根据HTTP规范,POST可能会修改服务器上的资源的请求。
- 2. 数据量
GET传送的数据量较小,不能大于2KB。POST传送的数据量较大,一般默认为不受限制。
- 3. 安全性、效率
传统的比较都是觉得GET安全性非常低,POST安全性较高。因为GET请求的数据会暴露在地址栏中,而POST请求则不会。但是GET的执行效率比POST方法好。通过我们自己做的网站也是可以追踪到,GET提交的数据,用户名和密码将会明文出现在URL上,这样就给一些人一个机会,当别人拿到你的账号和密码之后后果不堪设想,听到这里突然毛骨悚然,但是又看到下面这样一则故事,顿时觉得这个世界还好……
用一句话总结GET和POST的区别,GET的安全性较POST方式要差些,包含机密信息的话,建议用POST数据提交方式。在做数据查询时,建议用GET方式;而在做数据添加、修改、删除时,建议用POST方式

tcp和udp区别

TCP与UDP区别总结:
- 1. TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
- 2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

    1. Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
    1. UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
    1. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
    1. TCP对系统资源要求较多,UDP对系统资源要求较少。

http:和https:的区别

HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。

简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

HTTPS和HTTP的区别主要如下:

    1. https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
    1. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
    1. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
    1. http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

TCP/IP协议

TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。
TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。
如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。
TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。
面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。

猜你喜欢

转载自blog.csdn.net/geoffrey_zflyee/article/details/79510564
今日推荐