个人面经整理头条

Tcp保证可靠性
校验和
序列号与确认序号
超时重传机制
连接管理(三次握手、四次挥手)
流量控制(根据接收端的处理能力控制发送端的发送速度)
拥塞控制(慢启动、拥塞避免、快恢复)

执行Shell的三种方法区别
sh 方式
使用$ sh script.sh执行脚本时,当前shell是父进程,生成一个子shell进程,在子shell中执行脚本。脚本执行完毕,退出子shell,回到当前shell。

./script.sh与 sh script.sh等效。

source方式
使用$ source script.sh方式,在当前上下文中执行脚本,不会生成新的进程。脚本执行完毕,回到当前shell。
source方式也叫点命令。

. script.sh与 source script.sh等效。

exec方式
使用exec command方式,会用command进程替换当前shell进程,并且保持PID不变。执行完毕,直接退出,不回到之前的shell环境

n行m列,每次只能向下或向右走,从(0,0)到(n,m)有几种走法
在这里插入图片描述

扑克牌顺子
在这里插入图片描述

关于微信发红包功能进行测试
功能
1.在红包钱数,和红包个数的输入框中只能输入数字
2.红包里最多和最少可以输入的钱数 200 0.01
3.拼手气红包最多可以发多少个红包 100
3.1超过最大拼手气红包的个数是否有提醒
4.当红包钱数超过最大范围是不是有对应的提示
5.当发送的红包个数超过最大范围是不是有提示
6.当余额不足时,红包发送失败
7.在红包描述里是否可以输入汉字,英文,符号,表情,纯数字,汉字英语符号,
7.1是否可以输入它们的混合搭配
8.输入红包钱数是不是只能输入数字
9.红包描述里许多能有多少个字符 10个
10.红包描述,金额,红包个数框里是否支持复制粘贴操作
12.红包描述里的表情可以删除
13.发送的红包别人是否可以领取
13.1发的红包自己可不可以领取 2人
14. 24小时内没有领取的红包是否可以退回到原来的账户
14.1 超过24小时没有领取的红包,是否还可以领取
15.用户是否可以多次抢一个红包
16.发红包的人是否还可以抢红包多人
17.红包的金额里的小数位数是否有限制
18.可以按返回键,取消发红包
19. 断网时,无法抢红包
20.可不可以自己选择支付方式
21.余额不足时,会不会自动匹配支付方式
22.在发红包界面能否看到以前的收发红包的记录
23.红包记录里的信息与实际收发红包记录是否匹配
24.支付时可以密码支付也可以指纹支付
25.如果直接输入小数点,那么小数点之前应该有个0
26.支付成功后,退回聊天界面
27.发红包金额和收到的红包金额应该匹配
28.是否可以连续多次发红包
29.输入钱数为0,"塞钱进红包"置灰

性能
1.弱网时抢红包,发红包时间
2.不同网速时抢红包,发红包的时间
3.发红包和收红包成功后的跳转时间
4.收发红包的耗电量
5.退款到账的时间

兼容
1.苹果,安卓是否都可以发送红包
2.电脑端可以抢微信红包

界面
1.发红包界面没有错别字
2.抢完红包界面没有错别字
3.发红包和收红包界面排版合理
4.发红包和收到红包界面颜色搭配合理

安全
1.对方微信号异地登录,是否会有提醒 2人
2.红包被领取以后,发送红包人的金额会减少,收红包金额会增加
3.发送红包失败,余额和银行卡里的钱数不会少
4.红包发送成功,是否会收到微信支付的通知

易用性(有点重复)
1.红包描述,可以通过语音输入
2.可以指纹支付也可以密码支付

链表与线性表区别

有7g,2g砝码各一个,天平一只,如何只用这些物品三次将140g的盐分成50g,90g各一份?

  1. 不用砝码,将 140 g 盐用天平分成 70g + 70g
  2. 不用砝码,将 70 g盐用天平分成 35g + 35g
  3. 用天平将一份 35g 盐分为 20g盐 + 2g砝码 = 15g盐 + 7g砝码
  4. 将 20g与 70g盐并在一起就是 90g,剩下的是 50g

APP链接点进后加载一段时间后仍无内容,分析可能的情况
(1)系统问题,如果系统版本比较低,可能会由于旧系统存在某些BUG未修复或业务功能未优化,使手机在使用APP等应用过程中出现卡的情况,建议更新到最新的ios系统使用。
(2)内存问题,如果内存比较小,在运行某些大型手游或APP的时候,需要占用大量内存,内存不足就会可能出现卡顿的情况,建议关闭后台应用或根据手机配置情况使用。
(3)缓存问题,长期使用手机会产生大量应用缓存,例如微信、QQ、微博等,建议定期清理或删除APP后重新安装。
(4)设置问题,可进入通用,关闭一些效果设置,或关闭部分系统自带的应用,例如Siri业务。
(5)网络问题,建议在WIFI或4G网络使用。
(6)如果是突然出现卡的情况,建议可重启手机后再试。如重启手机后还是无法解决,可恢复出厂设置(建议备份后再操作)。如通过以上各种情况排障后还是无法达到预期手机状态,建议前往售后网点检测或根据个人经济情况,选择购买其他合适的iPhone手机使用。
手机已经中了木马病毒

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

3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的

UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

堆栈区别
1、 栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。

stack:
由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间
heap:
需要程序员自己申请,并指明大小,在c中malloc函数
栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。
堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,
会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序
栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。
堆:堆是向高地址扩展的数据结构,是不连续的内存区域
栈由系统自动分配,速度较快。但程序员是无法控制的。
栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new出来的对象)或者常量池中(字符串常量对象存放的常量池中),局部变量【注意:(方法中的局部变量使用final修饰后,放在堆中,而不是栈中)】
堆:存放使用new创建的对象,全局变量
头条为客户建立一个日志,每次访问时日志应记录什么内容
描述字段 ID(主键) 操作者 操作时间 IP地址 功能 操作类型 执行结果

输入百度到显示网页的整个过程
1.在浏览器里输入要网址。
2. 浏览器查找域名的IP地址,DNS域名解析
浏览器首先要确认的是域名所对应的服务器IP地址,获取是需要的页面内容,由DNS服务器将域名解析成对应的服务器IP地址。
DNS查找如下:
浏览器缓存- 浏览器会缓存DNS记录一段时间。一般在2分钟到30分钟。
系统缓存- 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。
路由器缓存 – 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。
ISP DNS 缓存- 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。
3. 建立TCP链接
费了一顿周折终于拿到服务器IP了,下一步自然就是链接到该服务器。对于客户端与服务器的TCP链接,必然要说的就是『三次握手』。
三次握手
客户端发送一个带有SYN标志的数据包给服务端,服务端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息,最后客户端再回传一个带ACK标志的数据包,代表握手结束,连接成功。

4.浏览器给web服务器发送一个HTTP请求
5.服务器“处理”请求
服务器端收到请求后的由web服务器(准确说应该是http服务器)处理请求,诸如Apache、Ngnix、IIS等。web服务器解析用户请求,知道了需要调度哪些资源文件,再通过相应的这些资源文件处理用户请求和参数,并调用数据库信息,最后将结果通过web服务器返回给浏览器客户端。

  1. 服务器发回一个HTML响应
    在HTTP里,有请求就会有响应,哪怕是错误信息。这里我们同样看下响应报文的组成结构:

  2. 关闭Tcp链接
    为了避免服务器与客户端双方的资源占用和损耗,当双方没有请求或响应传递时,任意一方都可以发起关闭请求。与创建TCP连接的3次握手类似,关闭TCP连接,需要4次握手。
    4次握手

8.浏览器解析HTML
准确地说,浏览器需要加载解析的不仅仅是HTML,还包括CSS、JS。以及还要加载图片、视频等其他媒体资源。
浏览器通过解析HTML,生成DOM树,解析CSS,生成CSS规则树,然后通过DOM树和CSS规则树生成渲染树。渲染树与DOM树不同,渲染树中并没有head、display为none等不必显示的节点。

要注意的是,浏览器的解析过程并非是串连进行的,比如在解析CSS的同时,可以继续加载解析HTML,但在解析执行JS脚本时,会停止解析后续HTML,这就会出现阻塞问题,关于JS阻塞相关问题,这里不过多阐述,后面会单独开篇讲解。
9.浏览器布局渲染
根据渲染树布局,计算CSS样式,即每个节点在页面中的大小和位置等几何信息。HTML默认是流式布局的,CSS和js会打破这种布局,改变DOM的外观样式以及大小和位置。这时就要提到两个重要概念:repaint和reflow。
repaint:屏幕的一部分重画,不影响整体布局,比如某个CSS的背景色变了,但元素的几何尺寸和位置不变。
reflow: 意味着元件的几何尺寸变了,我们需要重新验证并计算渲染树。是渲染树的一部分或全部发生了变化。这就是Reflow,或是Layout。
所以我们应该尽量减少reflow和repaint,我想这也是为什么现在很少有用table布局的原因之一。
最后浏览器绘制各个节点,将页面展示给用户。

浏览器如何渲染页面
浏览器从HTTP服务器获取html文档,到呈现页面给用户的过程

  1. 处理HTML标记并构建DOM树
  2. 处理CSS标记并构建CSSOM树
  3. 将DOM与CSSOM合并成一个渲染树
  4. 根据渲染树来布局,计算每个节点的布局信息
  5. 将各个节点绘制到屏幕上
    http应用用到了tcp/ip四层模型中的哪些协议
    浏览器要将URL解析为IP地址,解析域名就要用到DNS协议
    DNS服务器是基于UDP的,因此会用到UDP协议。
    得到IP地址后,浏览器就要与服务器建立一个http连接。因此要用到http协议
    http生成一个get请求报文,将该报文传给TCP层处理,所以还会用到TCP协议。
    TCP层如果有需要先将HTTP数据包分片,分片依据路径MTU和MSS。TCP的数据包然后会发送给IP层,用到IP协议
    IP层通过路由选路,一跳一跳发送到目的地址。太网协议需要直到目的IP地址的物理地址,有需要ARP协议。
    DNS协议,http协议,https协议属于应用层,TCP/UDP属于传输层,IP协议,ARP协议属于网络层,

猜你喜欢

转载自blog.csdn.net/alike_meng/article/details/106684768